update - 优化代码结构

This commit is contained in:
wangli 2024-04-04 21:59:17 +08:00
parent 71a114186f
commit 0bd3403b95
2 changed files with 54 additions and 48 deletions

View File

@ -115,8 +115,7 @@ public class CustomCarbonCopyUserSelectorCmd implements Command<List<BpmnTaskDel
break;
case approver_relation:
assigners.addAll(getApproverRelationUser(carbon, carbonCopyObjectType,
(DelegateExecution) list.get(0),
processEngineConfiguration, processInstanceId));
(DelegateExecution) list.get(0), processEngineConfiguration, processInstanceId));
break;
case specify_user:
assigners.addAll(JSON.parseArray(carbon.getSpecifyValue(), BpmnTaskDelegateAssigner.class));
@ -173,8 +172,7 @@ public class CustomCarbonCopyUserSelectorCmd implements Command<List<BpmnTaskDel
.parameter("processInstanceId", processInstanceId)
.list().stream()
.collect(Collectors.toMap(HistoricVariableInstance::getVariableName,
Function.identity(),
(s, t) -> s));
Function.identity(), (s, t) -> s));
vos.forEach(vo -> {
HistoricVariableInstance assginerSnapshot =
variableInstanceMap.getOrDefault(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + vo.getTaskId(),

View File

@ -753,57 +753,65 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
node.setNodeMode(GENERAL);
node.setId(i.getId()).setName(i.getName());
if (i instanceof UserTask) {
UserTask userTask = (UserTask) i;
node.setFormKey(userTask.getFormKey());
// 设置审批模式,
if (userTask.getBehavior() instanceof MultiInstanceActivityBehavior) {
MultiInstanceActivityBehavior behavior =
(MultiInstanceActivityBehavior) userTask.getBehavior();
node.setNodeMode(Objects.equals(AND_SIGN_EXPRESSION,
behavior.getCompletionCondition()) ?
AND : OR);
} else {
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
}
if (Objects.equals(node.getApprovalMethod(), human)) {
// 推测当前节点的审批人,并且如果审批人为空,也会根据审批人为空的策略去找人
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;
}
});
}
}
parseUserTask(processInstanceId, (UserTask) i, node);
} else if (i instanceof ServiceTask) {
// ServiceTask 主要作用于抄送
ServiceTask serviceTask = (ServiceTask) i;
node.setId(serviceTask.getId()).setName(serviceTask.getName());
getCarbonCopyConfigs(serviceTask).ifPresent(carbons ->
node.setForecastAssigners(springProcessEngineConfiguration.getCommandExecutor()
.execute(new CustomCarbonCopyUserSelectorCmd(processInstanceId, carbons,
serviceTask, engineExecutionStartListener,
historicTaskInstanceConverter, serviceVersion))));
parseServiceTask(processInstanceId, (ServiceTask) i, node);
}
resultList.add(node);
});
return resultList;
}
private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node) {
// ServiceTask 主要作用于抄送
ServiceTask serviceTask = i;
node.setId(serviceTask.getId()).setName(serviceTask.getName());
getCarbonCopyConfigs(serviceTask).ifPresent(carbons ->
node.setForecastAssigners(springProcessEngineConfiguration.getCommandExecutor()
.execute(new CustomCarbonCopyUserSelectorCmd(processInstanceId, carbons,
serviceTask, engineExecutionStartListener,
historicTaskInstanceConverter, serviceVersion))));
}
private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node) {
UserTask userTask = i;
node.setFormKey(userTask.getFormKey());
// 设置审批模式,
if (userTask.getBehavior() instanceof MultiInstanceActivityBehavior) {
MultiInstanceActivityBehavior behavior =
(MultiInstanceActivityBehavior) userTask.getBehavior();
node.setNodeMode(Objects.equals(AND_SIGN_EXPRESSION,
behavior.getCompletionCondition()) ?
AND : OR);
} else {
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
}
if (Objects.equals(node.getApprovalMethod(), human)) {
// 推测当前节点的审批人,并且如果审批人为空,也会根据审批人为空的策略去找人
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;
}
});
}
}
}
@Override
public List<String> getTenantIds() {
NativeHistoricProcessInstanceQuery query = historyService.createNativeHistoricProcessInstanceQuery();