From 5d39fe7043c893f2601c8e51a5973304774eb6f9 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Sat, 28 Oct 2023 21:32:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=81=E6=A0=87=E7=AB=8B=E9=A1=B9?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E6=B5=81=E7=A8=8BBug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/service/ActFlowCommonService.java | 42 ++++- .../ProcessEsAnnualReportServiceImpl.java | 10 +- .../ProcessESInitChangeController.java | 1 + .../entity/EsInitChangeConstant.java | 19 ++ .../ProcessESInitChangeEndListener.java | 5 + .../service/ProcessEsInitChangeService.java | 1 + .../impl/ProcessEsInitChangeServiceImpl.java | 175 +++++++++--------- 7 files changed, 152 insertions(+), 101 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/EsInitChangeConstant.java diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java index 56bc6605..34a02dfb 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/service/ActFlowCommonService.java @@ -1,14 +1,13 @@ package com.jero.modules.activiti.process.common.service; import com.jero.common.exception.JeroBootException; -import com.jero.common.system.api.ISysBaseAPI; +import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; -import com.jero.modules.activiti.entity.ProcessNode; import com.jero.modules.activiti.enums.CommitFlagEnum; import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.process.common.entity.CommonVO; +import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; -import com.jero.modules.activiti.service.ProcessNodeService; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; @@ -40,7 +39,7 @@ public class ActFlowCommonService { private TaskService taskService; @Resource - private ProcessNodeService processNodeService; + private ProcessAllService processAllService; @Resource private ProcessApprovalRecordService processApprovalRecordService; @@ -63,8 +62,24 @@ public class ActFlowCommonService { return processInstance; } + /** + * 循环设置流程变量 + * @param processInstanceId + * @param variables + */ + public void setProcessVariables(String processInstanceId, Map variables) { + for (Map.Entry entry : variables.entrySet()) { + runtimeService.setVariable(processInstanceId, entry.getKey(), entry.getValue()); + } + } + + /** + * 更新审批表为完成,填充数据 + * @param commonVO + * @param taskId + * @param pass + */ public void updateApprovalInfo(CommonVO commonVO, String taskId, boolean pass) { - //更新审批表为完成,填充数据 ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); approvalRecord.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue()); approvalRecord.setCommitText(commonVO.getCommitText()); @@ -203,4 +218,21 @@ public class ActFlowCommonService { throw new JeroBootException("未找到流程定义Id"); } } + + /** + * 更新流程主表 + * @param processInstanceId + * @param userId + * @param prcName + * @param prcMes + * @param dueTime + */ + public void updateProcessAll(String processInstanceId, String userId, String prcName, String prcMes, Date dueTime) { + ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); + process.setCreateUserId(userId); + process.setPrcName(prcName); + process.setPrcMes(prcMes); + process.setDueTime(dueTime); + processAllService.updateById(process); + } } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java index e0739215..21747dd7 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java @@ -8,10 +8,7 @@ import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.SysDictItemCore; import com.jero.modules.activiti.entity.ProcessAll; -import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.entity.ProcessNode; -import com.jero.modules.activiti.enums.CommitFlagEnum; -import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.process.common.entity.CommonVO; import com.jero.modules.activiti.process.common.enums.ProcessType; import com.jero.modules.activiti.process.common.service.ActFlowCommonService; @@ -21,10 +18,7 @@ import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportDa import com.jero.modules.activiti.process.esAnnualReport.entity.vo.AnnualReportFlowUserVO; import com.jero.modules.activiti.process.esAnnualReport.mapper.ProcessEsAnnualReportMapper; import com.jero.modules.activiti.process.esAnnualReport.service.ProcessEsAnnualReportService; -import com.jero.modules.activiti.process.esInitChange.entity.ProcessEsInitChange; import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType; -import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeDataVO; -import com.jero.modules.activiti.process.esInitChange.entity.vo.InitChangeFlowUserVO; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.service.ProcessNodeLinkService; @@ -107,10 +101,10 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl variables = setVariables(annualReportData); // 启动流程 ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables); - // 获取流程实例ID String processDefinitionId = processInstance.getProcessDefinitionId(); String processInstanceId = processInstance.getId(); + runtimeService.setVariable(processInstanceId, "contactUserList", variables.get("contactUserList")); // 自动完成第一个任务 actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId); // 设置流程实例Id @@ -158,7 +152,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl esInitChangeList = initChangeData.getDataList(); + // 设置流程变量 + Map variables = this.setVariables(initChangeData); + // 启动流程 + ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables); + // 获取流程实例ID + String processDefinitionId = processInstance.getProcessDefinitionId(); + String processInstanceId = processInstance.getId(); + // 手动设置所有流程变量 + actFlowCommonService.setProcessVariables(processInstanceId, variables); + // 自动完成第一个任务 + actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId); + // 设置流程实例Id + esInitChangeList.forEach(e -> e.setProcessInstanceId(processInstanceId)); + // 保存到业务流程表 + saveBatch(esInitChangeList); + // 保存选人信息 + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables)); + // 根据流程实例id更新流程总表 + String prcName = initChangeData.getCommonVO().getPrcName(); + String prcMes = initChangeData.getCommonVO().getPrcMes(); + Date dueTime = initChangeData.getCommonVO().getDueTime(); + actFlowCommonService.updateProcessAll(processInstanceId, userId, prcName, prcMes, dueTime); + } + + public Map setVariables(InitChangeDataVO initChangeData) { + InitChangeFlowUserVO initChangeFlowUserVO = initChangeData.getFlowUserInfoVO(); + ProcessEsInitChange initChange = initChangeData.getDataList().get(0); + HashMap map = new HashMap<>(); + // 使用一个通用方法来只在不为空时添加键值对 + putIfNotNull(map, "createUser", initChangeFlowUserVO.getCreateUser()); + putIfNotNull(map, "contactUser", initChangeFlowUserVO.getContactUser()); + List standardExpertList = new ArrayList<>(Objects.requireNonNull(Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(null))); + putIfNotNull(map, "standardExpertList", standardExpertList); + putIfNotNull(map, "mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); + putIfNotNull(map, "mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); + putIfNotNull(map, "standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); + putIfNotNull(map, "newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); + putIfNotNull(map, "newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); + putIfNotNull(map, "relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(map, "copyUser", initChangeFlowUserVO.getCopyUser()); + putIfNotNull(map, "applicationCategory", initChange.getApplicationCategory()); + putIfNotNull(map, "projectType", initChange.getProjectType()); + return map; + } + + public Map setUserVariables(InitChangeFlowUserVO initChangeFlowUserVO) { + HashMap map = new HashMap<>(); + // 使用一个通用方法来只在不为空时添加键值对 + putIfNotNull(map, "createUser", initChangeFlowUserVO.getCreateUser()); + putIfNotNull(map, "contactUser", initChangeFlowUserVO.getContactUser()); + putIfNotNull(map, "standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(map, "mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); + putIfNotNull(map, "mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); + putIfNotNull(map, "standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); + putIfNotNull(map, "newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); + putIfNotNull(map, "newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); + putIfNotNull(map, "relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(map, "copyUser", initChangeFlowUserVO.getCopyUser()); + return map; + } + + private void putIfNotNull(Map map, String key, Object value) { + Optional.ofNullable(value).ifPresent(v -> map.put(key, v)); + } + @Override public InitChangeDataVO getHandleData(String taskId) { if (!actFlowCommonService.taskExists(taskId)) { @@ -120,52 +195,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl esInitChangeList = initChangeData.getDataList(); - - // 设置流程变量 - Map variables = setVariables(initChangeData); - // 启动流程 - ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, variables); - - // 获取流程实例ID - String processDefinitionId = processInstance.getProcessDefinitionId(); - String processInstanceId = processInstance.getId(); - // 自动完成第一个任务 - runtimeService.setVariable(processInstanceId, "createUser", variables.get("createUser")); - runtimeService.setVariable(processInstanceId, "contactUser", variables.get("contactUser")); - runtimeService.setVariable(processInstanceId, "projectType", variables.get("projectType")); - runtimeService.setVariable(processInstanceId, "mainDraftUserLeader", variables.get("mainDraftUserLeader")); - runtimeService.setVariable(processInstanceId, "contactUser", variables.get("contactUser")); - runtimeService.setVariable(processInstanceId, "standardExpertList", variables.get("standardExpertList")); - runtimeService.setVariable(processInstanceId, "standardizationApprovalUser", variables.get("standardizationApprovalUser")); - actFlowCommonService.autoCompleteFirstTask(userId, processInstanceId, processDefinitionId); - // 设置流程实例Id - for (ProcessEsInitChange esInitChange : esInitChangeList) { - esInitChange.setProcessInstanceId(processInstance.getId()); - } - // 保存到业务流程表 - saveBatch(esInitChangeList); - // 保存选人信息 - processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables)); - - // 根据流程实例id更新流程总表 - ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); - process.setCreateUserId(userId); - process.setPrcName(initChangeData.getCommonVO().getPrcName()); - process.setPrcMes(initChangeData.getCommonVO().getPrcMes()); - process.setDueTime(initChangeData.getCommonVO().getDueTime()); - process.setProjectId(esInitChangeList.get(0).getId()); - processAllService.updateById(process); - } - @Override public void transfer(String taskId, String userId) { actFlowCommonService.transfer(taskId, userId); @@ -179,7 +208,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl variables = new HashMap<>(); String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId); if (pass) { @@ -188,14 +216,13 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl userMap = new HashMap<>(); this.setUserMap(userMap, flowUserInfoVO); processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap); + Map variables = setUserVariables(flowUserInfoVO); + actFlowCommonService.setProcessVariables(processInstanceId, variables); } runtimeService.setVariable(processInstanceId, "pass", true); } else { // 设置流程变量 -// InitChangeFlowUserVO processUserInfo = this.getProcessUserInfo(processDefinitionId, processInstanceId); -// initChangeDataVO.setFlowUserInfoVO(processUserInfo); runtimeService.setVariable(processInstanceId, "pass", false); -// variables.put("pass", false); } //更新审批表为完成,填充数据 ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); @@ -225,16 +252,16 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl variables, InitChangeFlowUserVO initChangeFlowUserVO) { // 设置流程中各个节点的人 - variables.put("createUser", initChangeFlowUserVO.getCreateUser()); - variables.put("contactUser", initChangeFlowUserVO.getContactUser()); - variables.put("standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList())); - variables.put("mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); - variables.put("mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); - variables.put("standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); - variables.put("newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); - variables.put("newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); - variables.put("relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList())); - variables.put("copyUser", initChangeFlowUserVO.getCopyUser()); + putIfNotNull(variables, "createUser", initChangeFlowUserVO.getCreateUser()); + putIfNotNull(variables, "contactUser", initChangeFlowUserVO.getContactUser()); + putIfNotNull(variables, "standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(variables, "mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); + putIfNotNull(variables, "mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); + putIfNotNull(variables, "standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); + putIfNotNull(variables, "newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); + putIfNotNull(variables, "newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); + putIfNotNull(variables, "relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null)); + putIfNotNull(variables, "copyUser", initChangeFlowUserVO.getCopyUser()); } @Override @@ -276,34 +303,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl setVariables(InitChangeDataVO initChangeData) { - InitChangeFlowUserVO initChangeFlowUserVO = initChangeData.getFlowUserInfoVO(); - ProcessEsInitChange initChange = initChangeData.getDataList().get(0); - Map map = new HashMap<>(); - - // 使用一个通用方法来只在不为空时添加键值对 - putIfNotNull(map, "createUser", initChangeFlowUserVO.getCreateUser()); - putIfNotNull(map, "contactUser", initChangeFlowUserVO.getContactUser()); - putIfNotNull(map, "standardExpertList", Optional.ofNullable(initChangeFlowUserVO.getStandardExpert()).map(s -> Arrays.asList(s.split(","))).orElse(null)); - putIfNotNull(map, "mainDraftUserLeader", initChangeFlowUserVO.getMainDraftUserLeader()); - putIfNotNull(map, "mainDraftUserLeaderLeader", initChangeFlowUserVO.getMainDraftUserLeaderLeader()); - putIfNotNull(map, "standardizationApprovalUser", initChangeFlowUserVO.getStandardizationApprovalUser()); - putIfNotNull(map, "newMainDraftUserLeaderLeader", initChangeFlowUserVO.getNewMainDraftUserLeaderLeader()); - putIfNotNull(map, "newMainDraftUserLeader", initChangeFlowUserVO.getNewMainDraftUserLeader()); - putIfNotNull(map, "relatedUserList", Optional.ofNullable(initChangeFlowUserVO.getRelatedUser()).map(s -> Arrays.asList(s.split(","))).orElse(null)); - putIfNotNull(map, "copyUser", initChangeFlowUserVO.getCopyUser()); - putIfNotNull(map, "applicationCategory", initChange.getApplicationCategory()); - putIfNotNull(map, "projectType", initChange.getProjectType()); - - return map; - } - - private void putIfNotNull(Map map, String key, Object value) { - if (value != null) { - map.put(key, value); - } - } - public void startRunTask(InitChangeDataVO initChangeData) { List esInitChangeList = initChangeData.getDataList(); // 校验企标编号是否冲突