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 d90334ad..621f559e 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 @@ -19,6 +19,7 @@ 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.process.standardinterpret.common.StandardInterpretCommon; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.service.ProcessNodeService; @@ -412,14 +413,21 @@ public class MyGlobalEventListener implements ActivitiEventListener { int i = processAllService.countByParentTaskId(parentTaskId); if (i == 0) { TaskService taskService = SpringContextUtil.getBean(TaskService.class); - Object variable = taskService.getVariable(parentTaskId, UNALLOCATED_QUANTITY); - if (variable != null) { - int unallocatedQuantity = (int) variable; - if (unallocatedQuantity == 0) { + if (StandardInterpretCommon.KEY_1.equals(processDefinitionId)){ + boolean b = isChildrenNodeAllComplete(processInstanceId, parentTaskId); + if (b){ + taskService.complete(parentTaskId); + } + }else { + Object variable = taskService.getVariable(parentTaskId, UNALLOCATED_QUANTITY); + if (variable != null) { + int unallocatedQuantity = (int) variable; + if (unallocatedQuantity == 0) { + taskService.complete(parentTaskId); + } + } else { taskService.complete(parentTaskId); } - } else { - taskService.complete(parentTaskId); } } } else { @@ -459,4 +467,30 @@ public class MyGlobalEventListener implements ActivitiEventListener { .eq(ProcessNode::getSort, 1)); return record.getNodeId().equals(node.getXmlNodeId()) && record.getTaskName().equals(node.getNodeName()); } + + /** + * 判断所有子流程是否都完成 + * @param processInstanceId + * @param parentTaskId + * @return true:都完成 false:未都完成 + */ + private boolean isChildrenNodeAllComplete(String processInstanceId, String parentTaskId){ + // 判断当前parentTaskId是否是第一个自动处理任务节点 + ProcessApprovalRecordService processApprovalRecordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class); + int count = processApprovalRecordService.count( + new LambdaQueryWrapper() + .eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId) + .eq(ProcessApprovalRecord::getNodeId, StandardInterpretCommon.INTERPRETING_PEOPLE_FILLOUT) + .eq(ProcessApprovalRecord::getParentTaskId, parentTaskId)); + if (count > 0){ + // 判断子流程是否还有未完成的节点 + int childCount = processApprovalRecordService.count( + new LambdaQueryWrapper() + .eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId) + .isNotNull(ProcessApprovalRecord::getParentTaskId) + .eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.INCOMPLETE.getValue())); + return childCount == 0; + } + return false; + } }