update - 审批人去重后, 调整审批日志处理逻辑

This commit is contained in:
wangli 2024-01-10 11:37:58 +08:00
parent 5cf4cb8be4
commit 0b85ade654

View File

@ -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<BpmnTaskDelegateAssigner> 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<BpmnTaskDelegateAssigner> 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())