From 00b59bf9e13617ceeb35580b96da729f46254ab9 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 15 Jan 2024 14:06:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=2080778=20=E4=BC=81=E6=A0=87=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E6=B5=81=E7=A8=8B--=E4=BA=BA=E5=91=98=E4=BF=A1?= =?UTF-8?q?=E6=81=AF--=E5=8F=91=E8=B5=B7=E8=8A=82=E7=82=B9=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E8=AE=B0=E5=BD=95=E7=9A=84=E5=AE=A1=E6=89=B9=E6=84=8F?= =?UTF-8?q?=E8=A7=81=E6=98=AF=E5=90=8C=E6=84=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/MyGlobalEventListener.java | 36 ++++++--- .../common/service/ActFlowCommonService.java | 74 +------------------ 2 files changed, 28 insertions(+), 82 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java index 37cc3a4a..a166a4a3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java @@ -8,12 +8,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.enums.ProcessStatusEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import com.jero.modules.activiti.service.ProcessNodeService; import com.jero.modules.activiti.util.SpringContextUtil; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.delegate.event.ActivitiEvent; @@ -69,7 +71,7 @@ public class MyGlobalEventListener implements ActivitiEventListener { return false; } - private void activityStarted(ActivitiEvent event){ + private void activityStarted(ActivitiEvent event) { log.info("===================流程开始事件==================="); ActivitiEntityEventImpl activitiEntityEvent = (ActivitiEntityEventImpl) event; ExecutionEntityImpl execution = (ExecutionEntityImpl) activitiEntityEvent.getEntity(); @@ -160,19 +162,23 @@ public class MyGlobalEventListener implements ActivitiEventListener { ProcessApprovalRecord approvalRecord = recordService.getOne(wrapper); Date createTime = approvalRecord.getCreateTime(); DateTime date = DateUtil.date(); + // 如果date小于createTime+一秒,说明是在同一秒内完成的,需要加一秒,解决流程审批信息发起节点和下一节点创建时间一致,排序错乱问题 + if (date.isBeforeOrEquals(DateUtil.offsetSecond(createTime, 1))) { + date.setTime(createTime.getTime() + 1000); + } DateBetween between = date.between(createTime); approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue()); approvalRecord.setEndTime(date); approvalRecord.setOverTime(between.toString()); Map variables = delegateTask.getVariables(); - if (variables.containsKey("pass")){ - if ((Boolean)variables.get("pass")){ + // 第一个节点不需要设置commitFlag + if (variables.containsKey("pass") && !isFirstNodeTask(approvalRecord)) { + if ((Boolean) variables.get("pass")) { approvalRecord.setCommitFlag(CommitFlagEnum.PASS.getValue()); - }else { + } else { approvalRecord.setCommitFlag(CommitFlagEnum.REJECT.getValue()); } - } recordService.updateById(approvalRecord); @@ -186,7 +192,7 @@ public class MyGlobalEventListener implements ActivitiEventListener { log.info("taskEntity.getVariables() = " + variables); } - private void activityComplete(ActivitiEvent event){ + private void activityComplete(ActivitiEvent event) { log.info("===================流程完成事件==================="); ActivitiEntityEventImpl activitiEntityEvent = (ActivitiEntityEventImpl) event; ExecutionEntityImpl execution = (ExecutionEntityImpl) activitiEntityEvent.getEntity(); @@ -201,10 +207,10 @@ public class MyGlobalEventListener implements ActivitiEventListener { //更新流程总表信息为已完成 LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); - wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId); + wrapper.eq(ProcessAll::getProcessInstanceId, processInstanceId); wrapper.set(ProcessAll::getPrcStatus, ProcessStatusEnum.COMPLETED.getValue()); - wrapper.set(ProcessAll::getEndTime,date); - wrapper.set(ProcessAll::getOverTime,between.toString()); + wrapper.set(ProcessAll::getEndTime, date); + wrapper.set(ProcessAll::getOverTime, between.toString()); processAllService.update(wrapper); log.info("id = " + execution.getId()); log.info("name = " + execution.getName()); @@ -212,4 +218,16 @@ public class MyGlobalEventListener implements ActivitiEventListener { log.info("taskEntity.getDeploymentId() = " + execution.getDeploymentId()); log.info("taskEntity.getProcessDefinitionId() = " + execution.getProcessDefinitionId()); } + + private boolean isFirstNodeTask(ProcessApprovalRecord record) { + String processInstanceId = record.getProcessInstanceId(); + ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class); + ProcessAll process = processAllService.getOne(new LambdaQueryWrapper() + .eq(ProcessAll::getProcessInstanceId, processInstanceId)); + ProcessNodeService processNodeService = SpringContextUtil.getBean(ProcessNodeService.class); + ProcessNode node = processNodeService.getOne(new LambdaQueryWrapper() + .eq(ProcessNode::getProcessDefinitionId, process.getProcessDefinitionId()) + .eq(ProcessNode::getSort, 1)); + return record.getNodeId().equals(node.getXmlNodeId()) && record.getTaskName().equals(node.getNodeName()); + } } 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 ce759de9..3dff69a3 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 @@ -167,25 +167,6 @@ public class ActFlowCommonService { processApprovalRecordService.updateById(approvalRecord); } - /** - * 发起流程之后更新审批表(审批意见置空) - * @param commonVO - * @param taskId - * @param pass - */ - public void updateApprovalInfoStart(CommonVO commonVO, String taskId, boolean pass) { - ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); - approvalRecord.setCommitText(commonVO.getCommitText()); - approvalRecord.setCommitFile(commonVO.getCommitFile()); - approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue()); - approvalRecord.setEndTime(new Date()); - // 使用流程引擎根据TaskId找到NodeId - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); - String nodeId = task.getTaskDefinitionKey(); - approvalRecord.setNodeId(nodeId); - processApprovalRecordService.updateById(approvalRecord); - } - public ProcessApprovalRecord getNodeIdByTaskId(String taskId) { return processApprovalRecordService.getToDoByTaskId(taskId); } @@ -285,8 +266,6 @@ public class ActFlowCommonService { log.info("当前用户ID:{},相关联的流程定义ID:{}", userId, map.get("processDefinitionId").toString()); log.info("匹配到的任务ID:{}", map.get("taskId").toString()); String taskId = map.get("taskId").toString(); - // 更新审批表为完成,填充数据 - this.updateApprovalInfoStart(commonVO, taskId, true); this.completeTask(taskId, userId); break; } @@ -383,43 +362,6 @@ public class ActFlowCommonService { processDraftService.remove(draftWrapper); } - public void addDraft(CommonVO common, ProcessTypeEnum processTypeEnum, String newBusinessId) { - String taskId = common.getTaskId(); - String processInstanceId = common.getProcessInstanceId(); - // 新增草稿表数据 - ProcessDraft draft = new ProcessDraft(); - if (StrUtil.isNotBlank(taskId) && StrUtil.isNotBlank(processInstanceId)) { - draft.setProcessInstanceId(processInstanceId); - draft.setTaskId(taskId); - } - draft.setPrcName(common.getPrcName()); - draft.setPrcType(processTypeEnum.getValue()); - draft.setHandleText(common.getCommitText()); // 流程审批信息-备注 - draft.setHandleFile(common.getCommitFile()); // 流程审批信息-附件 - draft.setProcessDueDate(common.getDueTime()); // 流程审批信息-附件 - draft.setProcessDescription(common.getPrcMes()); // 流程审批信息-附件 - draft.setUserId(CurrentUserUtil.getId()); // 用户id - draft.setProjectId(newBusinessId); - processDraftService.save(draft); - } - - public CommonVO getDraftCommon(ProcessDraft draft) { - String taskId = draft.getTaskId(); - CommonVO commonVO = new CommonVO(); - commonVO.setPrcName(draft.getPrcName()); - commonVO.setCommitText(draft.getHandleText()); - commonVO.setCommitFile(draft.getHandleFile()); - commonVO.setDueTime(draft.getProcessDueDate()); - commonVO.setPrcMes(draft.getProcessDescription()); - commonVO.setTaskId(taskId); - commonVO.setProcessInstanceId(draft.getProcessInstanceId()); - if (StrUtil.isNotBlank(taskId)) { - ProcessApprovalRecord record = this.getNodeIdByTaskId(taskId); - commonVO.setNodeId(record.getNodeId()); - } - return commonVO; - } - public CommonVO getHandleCommon(String taskId) { String processInstanceId = this.getProcessInstanceIdByTaskId(taskId); String processDefinitionId = this.getProcessDefId(processInstanceId); @@ -466,21 +408,6 @@ public class ActFlowCommonService { processApprovalRecordService.update(updateWrapper); } - /** - * 会签节点驳回后,将其余节点recode设置为 未处理 状态 - * - * @param prcId - * @param nodeName - */ - public void cleanOtherCountersignTask(String prcId, String nodeName) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, prcId); - updateWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue()); - updateWrapper.eq(ProcessApprovalRecord::getTaskName, nodeName); - updateWrapper.set(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.COMPLETE.getValue()); - processApprovalRecordService.update(updateWrapper); - } - /** * 根据指定的执行Id递归获取所有子执行Id * @@ -518,6 +445,7 @@ public class ActFlowCommonService { /** * 强制撤回流程-保存草稿 + * * @param common * @param processTypeEnum * @param data