Browse Source

优化项目计划

master
zhouhaibin 2 months ago
parent
commit
1e57cfc8da
  1. 3
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java
  2. 115
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java
  3. 1
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfofile.java
  4. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/UserTaskCompleteListener.java
  5. 2
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java
  6. 7
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java
  7. 22
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java
  8. 29
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java
  9. BIN
      huzhou/src/main/resources/excelTemplate/项目计划模板.xlsx

3
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java

@ -72,8 +72,9 @@ public class HuzhouPlaninfofileController {
@RequestParam String flag,
@RequestParam String planinfoid,
@RequestParam String comment,
@RequestParam(value = "modifyNum",required = false) String modifyNum,
@RequestParam(value = "adviceFile",required = false) MultipartFile[] adviceFiles) throws Exception {
planinfofileService.approvePlanFile(files,taskId,flag,planinfoid,comment,adviceFiles);
planinfofileService.approvePlanFile(files,taskId,flag,planinfoid,comment,modifyNum,adviceFiles);
return Result.ok();

115
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java

@ -1,10 +1,12 @@
package com.easy.admin.modules.huzhou.controller;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import cn.hutool.core.date.BetweenFormatter.Level;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easy.admin.activiti.constant.ActivitiTaskStatusConst;
@ -355,9 +357,9 @@ public class WorkflowController {
hashMap.put("operateDate", item.getEndTime());
String assignee = item.getAssignee();
hashMap.put("operator", assignee);
String nickname="";
if(StringUtils.isNotBlank(assignee)){
String nickname = sysUserService.getById(assignee).getNickname();
nickname = sysUserService.getById(assignee).getNickname();
hashMap.put("operator", nickname);
}else{
@ -365,10 +367,28 @@ public class WorkflowController {
}
hashMap.put("taskName", item.getName());
hashMap.put("comment", approvalSuggestion);
if(StringUtils.isNotBlank(approvalSuggestion)&&approvalSuggestion.contains("撤回")){
hashMap.put("taskName",list.get(i-1).getName());
boolean isPut =true;
for (HashMap<String,Object> hash: approvalEntityList) {
String operator = hash.get("operator").toString();
if(StringUtils.isNotBlank(approvalSuggestion)&&approvalSuggestion.contains("撤回")){
if(operator.equals(nickname)&&hash.get("approvalStatue").equals("1")){
hashMap.put("taskName",hash.get("taskName"));
}
}
//是否重复
Date operateDate = (Date) hash.get("operateDate");
Date endTime = item.getEndTime();
if(endTime!=null&&operateDate!=null){
long between = DateUtil.between(operateDate, endTime, DateUnit.SECOND);
if(operator.equals(nickname)&& between<5){
isPut =false;
}
}
}
if(isPut){
approvalEntityList.add(hashMap);
}
approvalEntityList.add(hashMap);
}
//获取未激活的审批人信息
@ -387,23 +407,40 @@ public class WorkflowController {
}
}
for(HashMap<String, Object> lastUser:approvalEntityList){
if ("0".equals(lastUser.get("approvalStatue"))) {
continue;
}
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = lastUser.get("taskName");
boolean match = task.getName().equals(taskName);
if(match){
userTaskList.remove(task);
if(processInstance.getProcessDefinitionKey().equals("createURT")){
if (!"1".equals(lastUser.get("approvalStatue"))) {
continue;
}
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = lastUser.get("taskName");
boolean match = task.getName().equals(taskName);
if(match){
userTaskList.remove(task);
}
// else{
// userTaskList.remove(task);
// break;
// }
// i--;
}
}else{
HistoricTaskInstance item = list.get(list.size()-1);
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = item.getName();
boolean match = task.getName().equals(taskName);
if(!match){
userTaskList.remove(task);
}
else {
break;
}
}
}
}
for (UserTask userTask: userTaskList ) {
@ -461,19 +498,43 @@ public class WorkflowController {
}
hashMap.put("operator", name);
}
approvalEntityList.add(hashMap);
Boolean isrecall = true;
for (HashMap<String,Object> hash: approvalEntityList) {
String operator = hash.get("operator").toString();
String nickname = hashMap.get("operator").toString();
if(operator.equals(nickname)&&hash.get("operateDate")==null){
isrecall = false;
}
}
if(isrecall){
approvalEntityList.add(hashMap);
}
}
}
List<HashMap<String, Object>> distinctList = approvalEntityList.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(
map -> map.get("operator"),
map -> map,
(existing, replacement) -> replacement // 如果重复,最后一个
),
map -> new ArrayList<>(map.values())
));
return Result.OK(distinctList);
// 使用 Stream 对列表进行排序
List<HashMap<String, Object>> sortedList = approvalEntityList.stream()
.sorted((o1, o2) -> {
Date d1 = (Date) o1.get("operateDate");
Date d2 = (Date) o2.get("operateDate");
// 如果 d1 是 null 或不存在,排在后面
if (d1 == null && d2 != null) {
return 1;
}
// 如果 d2 是 null 或不存在,排在后面
if (d1 != null && d2 == null) {
return -1;
}
// 如果两者都为 null 或两者都不为 null,按照日期排序
if (d1 == null && d2 == null) {
return 0;
}
return d1.compareTo(d2);
})
.collect(Collectors.toList());
return Result.OK(sortedList);
}
@GetMapping("/getProcessInstanceIdByProid")
public Result<?> getProcessInstanceIdByProid(String projectid,String stage){

1
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfofile.java

@ -43,6 +43,7 @@ public class HuzhouPlaninfofile extends BaseEntity implements Serializable {
*/
private Long size;
private String status;
private String modifyNum;
}

4
huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/UserTaskCompleteListener.java

@ -20,9 +20,11 @@ public class UserTaskCompleteListener implements TaskListener {
}
if("1".equals(approved)){
approvedResult.put(userId,"1"); // 审批通过
}else{
}else if("0".equals(approved)){
approvedResult.put(userId,"0"); // 审批不通过
delegateTask.getExecution().setVariable("rejected",true); // 更新审批结果变量
}else{
return;
}
int size = approvedResult.size();
if(size==7&&!approvedResult.containsValue("0")){

2
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java

@ -13,7 +13,7 @@ public interface IHuzhouPlaninfofileService extends IService<HuzhouPlaninfofile>
void submitPlanUploadFile(MultipartFile[] files, String planinfoid) throws IOException;
void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, MultipartFile[] adviceFiles) throws IOException;
void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, String modifyNum,MultipartFile[] adviceFiles) throws IOException;
String getProcessName(String pid);

7
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java

@ -183,7 +183,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
sdf = new SimpleDateFormat("HH:mm:ss");
} else if (cell.getCellStyle().getDataFormat() == 22) {
sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
} else if (format == 14 || format == 31 || format == 57 || format == 58
} else if (format == 14 || format == 31 || format == 57 || format == 58||format == 164
|| (176<=format && format<=178) || (182<=format && format<=196)
|| (210<=format && format<=213) || (208==format ) ) { // 日期
sdf = new SimpleDateFormat("yyyy-MM-dd");
@ -222,7 +222,10 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
sdf = new SimpleDateFormat("HH:mm:ss");
} else if (cell.getCellStyle().getDataFormat() == 22) {
sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
} else if (format == 14 || format == 31 || format == 57 || format == 58
// } else if (format == 14 || format == 31 || format == 57 || format == 58
// || (176<=format && format<=178) || (182<=format && format<=196)
// || (210<=format && format<=213) || (208==format ) ) { // 日期
} else if (format == 14 || format == 31 || format == 57 || format == 58 ||format == 164
|| (176<=format && format<=178) || (182<=format && format<=196)
|| (210<=format && format<=213) || (208==format ) ) { // 日期
sdf = new SimpleDateFormat("yyyy-MM-dd");

22
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.easy.admin.auth.model.SysUser;
import com.easy.admin.auth.service.SysUserService;
import com.easy.admin.common.api.vo.Result;
import com.easy.admin.common.core.exception.EasyException;
@ -50,9 +51,13 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
@Autowired
private TaskService taskService;
@Autowired
private HuzhouPlaninfofileMapper planinfofileMapper;
@Autowired
private HuzhouContractinfoMapper contractinfoMapper;
private String[] names ={"可研技术审查报告(初稿)确认","可研技术审查报告(复审稿)确认","可研技术审查报告(终稿)确认","造价评估报告确认","可行性研究报告审批(发改)","合同签订","首付支付","初验阶段","终验阶段","初步设计审批"};
private String[] tNames ={"可研报告初稿编制","可研报告第二稿编制","初步技术审查","造价评估"};
// private String[] names ={"可研技术审查报告(初稿)确认","可研技术审查报告(复审稿)确认","可研技术审查报告(终稿)确认","造价评估报告确认","可行性研究报告审批(发改)","合同签订","首付支付","初验阶段","终验阶段","初步设计审批"};
private String[] names ={"可研技术审查报告(初稿)确认","可研技术审查报告(终稿)确认","造价评估报告确认","可行性研究报告审批(发改)","合同签订","首付支付","初验阶段","终验阶段","初步设计审批"};
private String[] tNames ={"可研报告初稿编制","可研报告终稿编制","造价评估"};
@Override
public Page<HuzhouPlaninfofile> getplanFilePageList(HuzhouPlaninfofile planinfofile,Integer pageNo, Integer pageSize) {
Page<HuzhouPlaninfofile> page = new Page<>(pageNo,pageSize);
@ -61,6 +66,10 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
queryWrapper.eq(HuzhouPlaninfofile::getStage,planinfofile.getStage());
queryWrapper.orderByDesc(BaseEntity::getCreateDate);
Page<HuzhouPlaninfofile> planinfofilePage = this.page(page, queryWrapper);
planinfofilePage.getRecords().forEach(item->{
SysUser sysUser = userService.get(item.getCreateUser());
item.setCreateUser(sysUser.getNickname());
});
return planinfofilePage;
}
@ -247,7 +256,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
}
@Override
public void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, MultipartFile[] adviceFiles) throws IOException {
public void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, String modifyNum,MultipartFile[] adviceFiles) throws IOException {
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment);
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProcessinfo::getProjectid,planinfoid);
@ -271,6 +280,13 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
processinfoService.modifyStatusByProjectId(planinfoid,"0",processName);
return ;
}
if(StringUtils.isNotBlank(modifyNum)&&"1".equals(flag)){
LambdaUpdateWrapper<HuzhouPlaninfofile> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(HuzhouPlaninfofile::getPlaninfoid,planinfoid);
updateWrapper.eq(HuzhouPlaninfofile::getStatus,"1");
updateWrapper.set(HuzhouPlaninfofile::getModifyNum,modifyNum);
planinfofileMapper.update(null,updateWrapper);
}
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(workFlow.getProcessInstanceId()).singleResult();
if(processInstance==null&&"1".equals(flag)){
huzhouPlaninfo.setIsfinish("2");

29
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java

@ -56,6 +56,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class WorkflowServiceImpl implements IWorkflowService {
@Autowired
@ -166,7 +168,7 @@ public class WorkflowServiceImpl implements IWorkflowService {
List<HistoricTaskInstance> list = historyService
.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.orderByTaskCreateTime().finished()
.orderByHistoricTaskInstanceEndTime()
.desc()
.list();
HistoricTaskInstance taskInstance = null;
@ -193,17 +195,23 @@ public class WorkflowServiceImpl implements IWorkflowService {
String name = userTask.getName();
//当前用户id是上一个处理,且上一个处理不是撤回操作,上一个节点不是发起人
if(currentLoginuserId.equals(userid)&&!"发起人".equals(name)&&!fullMessage.contains("撤回")){
Select select = new Select();
select.setLabel("撤回");
select.setValue("2");
List<HistoricTaskInstance> filteredList = list.stream()
.filter(taskl -> taskl.getAssignee() != null && !taskl.getAssignee().equals(currentLoginuserId)&&taskl.getDeleteReason()==null)
.collect(Collectors.toList());
if(filteredList.size()==0){
Select select = new Select();
select.setLabel("撤回");
select.setValue("2");
// HashMap<String, String> hashMap = new HashMap<>();
// hashMap.put("label","撤回");
// hashMap.put("value","2");
actionButtons.add(select);
workflowActionParamOV.setButtons(actionButtons);
actionButtons.add(select);
workflowActionParamOV.setButtons(actionButtons);
// outRes.put("buttons",actionButtons);
// outRes.put("showApprovalForm",true);
workflowActionParamOV.setShowApprovalForm(true);
workflowActionParamOV.setShowApprovalForm(true);
}
}
}
}
@ -385,6 +393,7 @@ public class WorkflowServiceImpl implements IWorkflowService {
queryWrapper.isNull("art.assignee_")
.eq("ari.type_", "candidate")
.and(i -> i.eq("ari.user_id_", currentUser.getId()).or().in("ari.group_id_", ShiroUtil.getRoleIds(currentUser.getRoleList()).toArray()));
queryWrapper.and(qw -> qw.notExists("SELECT 1 FROM act_ru_task actr WHERE actr.proc_inst_id_ = art.proc_inst_id_ AND actr.name_=art.name_ and actr.assignee_='"+currentUser.getId()+"'"));
} else if (ActivitiTaskStatusConst.CLAIMED.equals(activitiTask.getStatus())) {
// 待办任务:签收人或委托人为当前用户
queryWrapper.and(i -> i.eq("art.assignee_", currentUser.getId()).or().eq("art.owner_", currentUser.getId()));
@ -395,7 +404,11 @@ public class WorkflowServiceImpl implements IWorkflowService {
}
// 待签、待办中只查询激活流程实例数据,已挂起的不查询
queryWrapper.eq("arp.suspension_state_", ActivitiSuspensionStatus.ACTIVATION.getCode());
page.setDefaultDesc("art.id_");
queryWrapper.and(qw ->
qw.notExists("SELECT 1 FROM act_ru_task actr WHERE actr.proc_inst_id_ = art.proc_inst_id_ AND actr.name_='发起人'")
.or().eq("art.name_", "发起人")
);
// page.setDefaultDesc("MAX(art.id_)");
List<ActivitiTask> select = activitiTaskMapper.select(page, queryWrapper);
select.forEach(item->{
String processInstanceId = item.getProcessInstanceId();

BIN
huzhou/src/main/resources/excelTemplate/项目计划模板.xlsx

Binary file not shown.
Loading…
Cancel
Save