diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/service/impl/CheckApproverServiceImpl.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/service/impl/CheckApproverServiceImpl.java index 861d4052a..1abe6f472 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/service/impl/CheckApproverServiceImpl.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/task/service/impl/CheckApproverServiceImpl.java @@ -90,56 +90,56 @@ public class CheckApproverServiceImpl implements CheckApproverService { } ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(); processEngineConfiguration.getActivityInstanceEntityManager() - .findActivityInstancesByProcessInstanceId(delegateTask.getProcessInstanceId(), false) - .stream() - .filter(i -> !Objects.equals(i.getActivityId(), userTask.getId())) - .filter(i -> !Objects.equals(i.getActivityType(), "exclusiveGateway")) - .filter(i -> !Objects.equals(i.getActivityType(), "sequenceFlow")) + .findActivityInstancesByProcessInstanceId(delegateTask.getProcessInstanceId(), false) + .stream() + .filter(i -> !Objects.equals(i.getActivityId(), userTask.getId())) + .filter(i -> !Objects.equals(i.getActivityType(), "exclusiveGateway")) + .filter(i -> !Objects.equals(i.getActivityType(), "sequenceFlow")) .filter(i -> !Objects.equals(i.getActivityType(), "startEvent")) .max(Comparator.comparing(ActivityInstanceEntity::getEndTime)) - .ifPresent(i -> { - log.info("CheckApproverServiceImpl#checkApproverExists...上一个节点ID:{},类型:{}", i.getActivityId(), i.getActivityType()); - // 与发起人比对 - if (Objects.equals(NODE_STARTER.getType(), i.getActivityId())) { - log.info("CheckApproverServiceImpl#checkApproverExists...与发起人比对"); - BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR)); - if (Objects.nonNull(initiator) && initiator.comparePersonIdToOther(delegateTask.getAssignee())) { - exists.compareAndSet(false, true); - } - } else { - log.info("CheckApproverServiceImpl#checkApproverExists...与历史审批人比对, 上节点ID:{}", i.getActivityId()); - FlowElement flowElement = mainProcess.getFlowElement(i.getActivityId()); - BpmnMetaParserHelper.getNodeType(flowElement).ifPresent(j -> { - log.info("CheckApproverServiceImpl#checkApproverExists...上一个节点类型:{}", j); - //上一节点如果是业务节点,但是是人员审批,也需要加入到自动过审 - if (Objects.equals(NODE_TASK, j) || (Objects.equals(NODE_BUSINESS, j) && flowElement.getClass().isAssignableFrom(UserTask.class))) { - ExtHiTaskSearchDTO searchDTO = new ExtHiTaskSearchDTO(); - searchDTO.setProcessInstanceId(delegateTask.getProcessInstanceId()); - List extAxHiTaskInsts = extAxHiTaskInstService.queryList(searchDTO); - extAxHiTaskInsts.sort(Comparator.comparing(ExtAxHiTaskInst::getCreateAt)); - log.info("CheckApproverServiceImpl#checkApproverExists...历史审批任务列表:{}", JSON.toJSONString(extAxHiTaskInsts)); - List previousTasks = new ArrayList<>(); - for (int k = extAxHiTaskInsts.size() - 1; k > 0; k--) { - ExtAxHiTaskInst extAxHiTaskInst = extAxHiTaskInsts.get(k); - if (!extAxHiTaskInst.getTaskDefinitionKey().equals(i.getActivityId()) && !CollectionUtils.isEmpty(previousTasks)) { - break; - } - if (extAxHiTaskInst.getTaskDefinitionKey().equals(i.getActivityId())) { - previousTasks.add(extAxHiTaskInst); - } - } - log.info("CheckApproverServiceImpl#checkApproverExists...待比对的历史审批任务列表:{}", JSON.toJSONString(previousTasks)); - previousTasks.stream() - .filter(e -> Objects.equals(e.getStatus(), APPROVED.getStatus())) - .map(ExtAxHiTaskInst::getAssignee) - .filter(Objects::nonNull) - .filter(StringUtils::hasText) - .filter(k -> specialApproverComparison(k, delegateTask.getAssignee())) - .findAny().ifPresent(k -> exists.compareAndSet(false, true)); + .ifPresent(i -> { + log.info("CheckApproverServiceImpl#checkApproverExists...上一个节点ID:{},类型:{}", i.getActivityId(), i.getActivityType()); + // 与发起人比对 + if (Objects.equals(NODE_STARTER.getType(), i.getActivityId())) { + log.info("CheckApproverServiceImpl#checkApproverExists...与发起人比对"); + BpmnTaskDelegateAssigner initiator = BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR)); + if (Objects.nonNull(initiator) && initiator.comparePersonIdToOther(delegateTask.getAssignee())) { + exists.compareAndSet(false, true); } - }); - } - }); + } else { + log.info("CheckApproverServiceImpl#checkApproverExists...与历史审批人比对, 上节点ID:{}", i.getActivityId()); + FlowElement flowElement = mainProcess.getFlowElement(i.getActivityId()); + BpmnMetaParserHelper.getNodeType(flowElement).ifPresent(j -> { + log.info("CheckApproverServiceImpl#checkApproverExists...上一个节点类型:{}", j); + //上一节点如果是业务节点,但是是人员审批,也需要加入到自动过审 + if (Objects.equals(NODE_TASK, j) || (Objects.equals(NODE_BUSINESS, j) && flowElement.getClass().isAssignableFrom(UserTask.class))) { + ExtHiTaskSearchDTO searchDTO = new ExtHiTaskSearchDTO(); + searchDTO.setProcessInstanceId(delegateTask.getProcessInstanceId()); + List extAxHiTaskInsts = extAxHiTaskInstService.queryList(searchDTO); + extAxHiTaskInsts.sort(Comparator.comparing(ExtAxHiTaskInst::getCreateAt)); + log.info("CheckApproverServiceImpl#checkApproverExists...历史审批任务列表:{}", JSON.toJSONString(extAxHiTaskInsts)); + List previousTasks = new ArrayList<>(); + for (int k = extAxHiTaskInsts.size() - 1; k > 0; k--) { + ExtAxHiTaskInst extAxHiTaskInst = extAxHiTaskInsts.get(k); + if (!extAxHiTaskInst.getTaskDefinitionKey().equals(i.getActivityId()) && !CollectionUtils.isEmpty(previousTasks)) { + break; + } + if (extAxHiTaskInst.getTaskDefinitionKey().equals(i.getActivityId())) { + previousTasks.add(extAxHiTaskInst); + } + } + log.info("CheckApproverServiceImpl#checkApproverExists...待比对的历史审批任务列表:{}", JSON.toJSONString(previousTasks)); + previousTasks.stream() + .filter(e -> Objects.equals(e.getStatus(), APPROVED.getStatus())) + .map(ExtAxHiTaskInst::getAssignee) + .filter(Objects::nonNull) + .filter(StringUtils::hasText) + .filter(k -> specialApproverComparison(k, delegateTask.getAssignee())) + .findAny().ifPresent(k -> exists.compareAndSet(false, true)); + } + }); + } + }); return exists.get(); }