From 93be14a821655e212411b5dffdcbfd8d05333a6b Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 19 Apr 2024 09:58:15 +0800 Subject: [PATCH] =?UTF-8?q?update=20-=20=E5=AE=8C=E5=96=84=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E8=8A=82=E7=82=B9=E6=8E=A8=E6=B5=8B=E5=8A=9F=E8=83=BD?= =?UTF-8?q?,=E4=BB=85=E5=85=81=E8=AE=B8=E8=BF=90=E8=A1=8C=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E4=BE=8B=E6=9D=A5=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/code/BpmnInstanceRespCode.java | 1 + .../impl/BpmnProcessInstanceServiceImpl.java | 35 ++++++------------- .../support/FlowNodeForecastService.java | 18 +--------- 3 files changed, 13 insertions(+), 41 deletions(-) diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/code/BpmnInstanceRespCode.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/code/BpmnInstanceRespCode.java index dc3094271..02d029de7 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/code/BpmnInstanceRespCode.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/code/BpmnInstanceRespCode.java @@ -25,6 +25,7 @@ public enum BpmnInstanceRespCode implements IModuleRespCode { PROCESS_INSTANCE_CANT_DELETE("010", "流程实例不能删除"), PROCESS_INSTANCE_CANT_START("011", "流程实例不能启动"), TASK_CANT_COMMENT_INSTANCE_NOT_EXISTS("012", "流程实例【{}】不存在, 不能评论"), + RUNNING_INSTANCE_ONLY_FORECAST("013", "仅运行中的实例可以推测"), ; private String code; private String message; 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 7c38531d8..6597189d8 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,8 +111,8 @@ 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.BpmnInstanceRespCode.RUNNING_INSTANCE_ONLY_FORECAST; 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; import static cn.axzo.workflow.core.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_KEY_NOT_EXISTS; @@ -780,25 +780,12 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic query.processInstanceTenantId(tenantId); } ProcessInstance instance = query.singleResult(); + if (Objects.isNull(instance)) { + throw new WorkflowEngineException(RUNNING_INSTANCE_ONLY_FORECAST); + } List flowElements = forecastService.performProcessForecasting(processInstanceId, instance); - 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); + BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId()); List resultList = new ArrayList<>(flowElements.size()); // 发起人节点,也是一个 UserTask 节点, 所以这里默认就包含了发起人节点 flowElements.stream() @@ -817,19 +804,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, skipAllNode, nodeDefinitionKeys); + parseUserTask(processInstanceId, (UserTask) i, node, nodeDefinitionKeys); } else if (i instanceof ServiceTask) { - parseServiceTask(processInstanceId, (ServiceTask) i, node, skipAllNode, nodeDefinitionKeys); + parseServiceTask(processInstanceId, (ServiceTask) i, node, nodeDefinitionKeys); } resultList.add(node); }); return resultList; } - private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node, boolean skipAllNode, List skipTaskDefinitionKeys) { + private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node, List skipTaskDefinitionKeys) { // ServiceTask 主要作用于抄送 node.setId(i.getId()).setName(i.getName()); - if (skipAllNode || skipTaskDefinitionKeys.contains(i.getId())) { + if (skipTaskDefinitionKeys.contains(i.getId())) { return; } getCarbonCopyConfigs(i).ifPresent(carbons -> @@ -839,7 +826,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic historicTaskInstanceConverter, serviceVersion)))); } - private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node, boolean skipAllNode, List skipTaskDefinitionKeys) { + private void parseUserTask(String processInstanceId, UserTask i, ProcessNodeDetailVO node, List skipTaskDefinitionKeys) { node.setFormKey(i.getFormKey()); // 设置审批模式, if (i.getBehavior() instanceof MultiInstanceActivityBehavior) { @@ -852,7 +839,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic node.setNodeMode(BpmnFlowNodeMode.GENERAL); } - if (skipAllNode || skipTaskDefinitionKeys.contains(i.getId())) { + if (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 12dfe3d92..727eda0ff 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 @@ -9,7 +9,6 @@ import org.flowable.bpmn.model.StartEvent; import org.flowable.engine.HistoryService; import org.flowable.engine.RepositoryService; import org.flowable.engine.RuntimeService; -import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.ResolvableType; @@ -27,7 +26,6 @@ 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; @@ -125,22 +123,8 @@ 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(processDefinitionId); + BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId()); // 保持推测出来的节点执行顺序的容器 List orderedNodes = new ArrayList<>();