diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java index a6c640a6e..d2f217535 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java @@ -1,6 +1,5 @@ package cn.axzo.workflow.core.service.impl; -import cn.axzo.workflow.common.enums.ApprovalMethodEnum; import cn.axzo.workflow.common.enums.BpmnFlowNodeMode; import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO; import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO; @@ -75,6 +74,8 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR; import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_SPECIFY_NEXT_APPROVER; import static cn.axzo.workflow.common.constant.BpmnConstants.OLD_INTERNAL_INITIATOR; +import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.autoPassed; +import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.autoRejection; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AND; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.EXCEPTIONAL; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.GENERAL; @@ -573,9 +574,6 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic node.setNodeType(NODE_STARTER); } - // 设置审批方式 - getApprovalMethod(userTask).ifPresent(node::setApprovalMethod); - // 设置审批模式, if (userTask.getBehavior() instanceof MultiInstanceActivityBehavior) { MultiInstanceActivityBehavior behavior = @@ -587,28 +585,31 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic node.setNodeMode(BpmnFlowNodeMode.GENERAL); } - // 推测当前节点的审批人,并且如果审批人为空,也会根据审批人为空的策略去找人 - List forecastAssigners = - springProcessEngineConfiguration.getCommandExecutor() - .execute(new CustomForecastUserTaskAssigneeCmd(processInstanceId, - userTask, engineExecutionStartListener)); - node.setForecastAssigners(forecastAssigners); - if (CollectionUtils.isEmpty(forecastAssigners)) { - getApproverEmptyHandleType(userTask).ifPresent(emptyHandleType -> { - switch (emptyHandleType) { - case autoPassed: - node.setApprovalMethod(ApprovalMethodEnum.autoPassed); - break; - case autoRejection: - node.setApprovalMethod(ApprovalMethodEnum.autoRejection); - break; - default: - node.setNodeMode(EXCEPTIONAL); - break; - } - }); + // 设置审批方式 + getApprovalMethod(userTask).ifPresent(node::setApprovalMethod); + if (!Objects.equals(node.getApprovalMethod(), autoPassed) && !Objects.equals(node.getApprovalMethod(), autoRejection)) { + // 推测当前节点的审批人,并且如果审批人为空,也会根据审批人为空的策略去找人 + List forecastAssigners = + springProcessEngineConfiguration.getCommandExecutor() + .execute(new CustomForecastUserTaskAssigneeCmd(processInstanceId, + userTask, engineExecutionStartListener)); + node.setForecastAssigners(forecastAssigners); + if (CollectionUtils.isEmpty(forecastAssigners)) { + getApproverEmptyHandleType(userTask).ifPresent(emptyHandleType -> { + switch (emptyHandleType) { + case autoPassed: + node.setApprovalMethod(autoPassed); + break; + case autoRejection: + node.setApprovalMethod(autoRejection); + break; + default: + node.setNodeMode(EXCEPTIONAL); + break; + } + }); + } } - } else if (i instanceof ReceiveTask) { ReceiveTask receiveTask = (ReceiveTask) i; node.setId(receiveTask.getId())