From 2f12bfe4894981303a7d8dd09efb95eec71831f8 Mon Sep 17 00:00:00 2001 From: wangli Date: Fri, 19 Apr 2024 00:35:41 +0800 Subject: [PATCH] =?UTF-8?q?update=20-=20=E4=BC=98=E5=8C=96=E5=B7=B2?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=9A=84=E5=8E=86=E5=8F=B2=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=E7=9A=84=E8=8A=82=E7=82=B9=E6=8E=A8=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/BpmnProcessInstanceServiceImpl.java | 31 ++++++++++++++----- .../support/FlowNodeForecastService.java | 9 +++++- 2 files changed, 32 insertions(+), 8 deletions(-) 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 11a5c9271..7c38531d8 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 @@ -111,6 +111,7 @@ import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.GENERAL; import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR; import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_STARTER; import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING; +import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS; import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS; import static cn.axzo.workflow.core.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_ID_NOT_EXISTS; import static cn.axzo.workflow.core.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_IS_SUSPENDED; @@ -781,7 +782,23 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic ProcessInstance instance = query.singleResult(); List flowElements = forecastService.performProcessForecasting(processInstanceId, instance); - BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId()); + String processDefinitionId; + boolean skipAllNode; + if (Objects.isNull(instance)) { + HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .singleResult(); + if (Objects.isNull(processInstance)) { + throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, processInstanceId); + } + processDefinitionId = processInstance.getProcessDefinitionId(); + skipAllNode = true; + } else { + skipAllNode = false; + processDefinitionId = instance.getProcessDefinitionId(); + } + + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); List resultList = new ArrayList<>(flowElements.size()); // 发起人节点,也是一个 UserTask 节点, 所以这里默认就包含了发起人节点 flowElements.stream() @@ -800,19 +817,19 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic node.setNodeMode(GENERAL); node.setId(i.getId()).setName(i.getName()); if (i instanceof UserTask) { - parseUserTask(processInstanceId, (UserTask) i, node, nodeDefinitionKeys); + parseUserTask(processInstanceId, (UserTask) i, node, skipAllNode, nodeDefinitionKeys); } else if (i instanceof ServiceTask) { - parseServiceTask(processInstanceId, (ServiceTask) i, node, nodeDefinitionKeys); + parseServiceTask(processInstanceId, (ServiceTask) i, node, skipAllNode, nodeDefinitionKeys); } resultList.add(node); }); return resultList; } - private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node, List skipTaskDefinitionKeys) { + private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node, boolean skipAllNode, List skipTaskDefinitionKeys) { // ServiceTask 主要作用于抄送 node.setId(i.getId()).setName(i.getName()); - if (skipTaskDefinitionKeys.contains(i.getId())) { + if (skipAllNode || skipTaskDefinitionKeys.contains(i.getId())) { return; } getCarbonCopyConfigs(i).ifPresent(carbons -> @@ -822,7 +839,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic historicTaskInstanceConverter, serviceVersion)))); } - private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node, List skipTaskDefinitionKeys) { + private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node, boolean skipAllNode, List skipTaskDefinitionKeys) { node.setFormKey(i.getFormKey()); // 设置审批模式, if (i.getBehavior() instanceof MultiInstanceActivityBehavior) { @@ -835,7 +852,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic node.setNodeMode(BpmnFlowNodeMode.GENERAL); } - if (skipTaskDefinitionKeys.contains(i.getId())) { + if (skipAllNode || skipTaskDefinitionKeys.contains(i.getId())) { return; } if (Objects.equals(node.getApprovalMethod(), human)) { diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/FlowNodeForecastService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/FlowNodeForecastService.java index 037037a7c..12dfe3d92 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/FlowNodeForecastService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/support/FlowNodeForecastService.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS; import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS; @@ -124,16 +125,22 @@ public class FlowNodeForecastService implements InitializingBean { // .includeProcessVariables() .singleResult(); } + String processDefinitionId; if (Objects.isNull(instance)) { HistoricProcessInstance processInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); + if (Objects.isNull(processInstance)) { + throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, processInstanceId); + } processInstanceId = processInstance.getId(); + processDefinitionId = processInstance.getProcessDefinitionId(); } else { processInstanceId = instance.getProcessInstanceId(); + processDefinitionId = instance.getProcessDefinitionId(); } - BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId()); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); // 保持推测出来的节点执行顺序的容器 List orderedNodes = new ArrayList<>();