diff --git a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java index 1396a3828..d68306211 100644 --- a/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java +++ b/workflow-engine-api/src/main/java/cn/axzo/workflow/client/feign/bpmn/ProcessInstanceApi.java @@ -8,6 +8,7 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQue import cn.axzo.workflow.common.model.response.BpmPageResult; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO; import cn.azxo.framework.common.model.CommonResponse; import com.fasterxml.jackson.databind.node.ObjectNode; import io.swagger.v3.oas.annotations.Operation; @@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Nullable; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.util.List; /** * 流程实例 API @@ -95,4 +97,12 @@ public interface ProcessInstanceApi { CommonResponse processInstanceGraphical(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, @Nullable @RequestParam(required = false) String tenantId); + /** + * 推断指定流程实例的所有节点执行顺序 + * + * @return + */ + @GetMapping("/api/process/instance/node/calc") + CommonResponse> processInstanceNodeCalc(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId, + @Nullable @RequestParam(required = false) String tenantId); } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/ProcessNodeDetailVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/ProcessNodeDetailVO.java new file mode 100644 index 000000000..716da6488 --- /dev/null +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/bpmn/process/ProcessNodeDetailVO.java @@ -0,0 +1,17 @@ +package cn.axzo.workflow.common.model.response.bpmn.process; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 流程实例下的节点信息 + * + * @author wangli + * @since 2023/10/7 16:24 + */ +@Data +@Accessors(chain = true) +public class ProcessNodeDetailVO { + + +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java index 0337a072b..7d08ad7dc 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessInstanceService.java @@ -1,16 +1,23 @@ package cn.axzo.workflow.core.service; -import cn.axzo.workflow.common.model.request.bpmn.process.*; +import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCancelDTO; +import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO; +import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO; +import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceMyPageReqVO; +import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO; +import cn.axzo.workflow.common.model.request.bpmn.process.HistoricProcessInstanceSearchDTO; import cn.axzo.workflow.common.model.response.BpmPageResult; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO; import cn.axzo.workflow.common.model.response.bpmn.process.HistoricProcessInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO; import com.fasterxml.jackson.databind.node.ObjectNode; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.form.api.FormInfo; import javax.annotation.Nullable; import javax.validation.Valid; +import java.util.List; public interface BpmnProcessInstanceService { @@ -90,4 +97,6 @@ public interface BpmnProcessInstanceService { ObjectNode getProcessInstanceGraphical(String processInstanceId, @Nullable String tenantId); BpmPageResult historicProcessInstancePage(HistoricProcessInstanceSearchDTO dto); + + List getProcessNodes(String processInstanceId, @Nullable String tenantId); } 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 4e88353f1..3707f7b0e 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 @@ -13,6 +13,7 @@ import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessDefinition import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO; import cn.axzo.workflow.common.model.response.bpmn.process.HistoricProcessInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO; import cn.axzo.workflow.core.common.enums.BpmnProcessTaskResultEnum; import cn.axzo.workflow.core.common.exception.WorkflowEngineException; import cn.axzo.workflow.core.common.utils.BpmCollectionUtils; @@ -91,6 +92,7 @@ import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_DEFINITION import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCELLED; import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS; import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF; +import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_ID_NOT_EXISTS; import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_NOT_EXISTS; import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_OPERATION_PARAM_VALID_ERROR; @@ -541,6 +543,17 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic } } + @Override + public List getProcessNodes(String processInstanceId, @Nullable String tenantId) { + HistoricProcessInstance instance = + historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + if (Objects.isNull(instance)) { + throw new WorkflowEngineException(PROCESS_INSTANCE_ID_NOT_EXISTS, processInstanceId); + } + BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId()); + bpmnModel.getMainProcess().getFlowElements(); + return null; + } private List gatherCompletedFlows(Set completedActivityInstances, Set currentActivityinstances, BpmnModel pojoModel) { diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java index cc30938fa..200d8ccb2 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessInstanceController.java @@ -11,6 +11,7 @@ import cn.axzo.workflow.common.model.response.BpmPageResult; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstancePageItemVO; import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO; import cn.axzo.workflow.common.model.response.bpmn.process.HistoricProcessInstanceVO; +import cn.axzo.workflow.common.model.response.bpmn.process.ProcessNodeDetailVO; import cn.axzo.workflow.core.common.exception.WorkflowEngineException; import cn.axzo.workflow.core.service.BpmnProcessInstanceService; import cn.azxo.framework.common.model.CommonResponse; @@ -33,6 +34,7 @@ import javax.annotation.Nullable; import javax.annotation.Resource; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.util.List; import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_OPERATION_PARAM_VALID_ERROR; import static cn.azxo.framework.common.model.CommonResponse.success; @@ -130,6 +132,13 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi { return success(bpmnProcessInstanceService.getProcessInstanceGraphical(processInstanceId, tenantId)); } + @GetMapping("/node/calc") + @Override + public CommonResponse> processInstanceNodeCalc(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam String processInstanceId, + @Nullable String tenantId) { + return success(bpmnProcessInstanceService.getProcessNodes(processInstanceId, tenantId)); + } + /** * 枢智业务(审批台账专用) *