From e925b4d4f5a6d95449a874601a954eb868cea7ef Mon Sep 17 00:00:00 2001 From: wangqi Date: Thu, 11 Apr 2024 17:31:22 +0800 Subject: [PATCH] feature: update workflow task dag --- .../WorkflowInstanceDeployEventListener.java | 7 +++++++ .../service/impl/WorkflowDefinitionServiceImpl.java | 2 +- .../service/impl/WorkflowTaskInstanceServiceImpl.java | 11 ++++++++--- .../statemachine/WorkflowInstanceStateMachine.java | 5 +++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/listener/workflowinstance/WorkflowInstanceDeployEventListener.java b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/listener/workflowinstance/WorkflowInstanceDeployEventListener.java index c5d2a078c..a3b9499a0 100644 --- a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/listener/workflowinstance/WorkflowInstanceDeployEventListener.java +++ b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/listener/workflowinstance/WorkflowInstanceDeployEventListener.java @@ -68,6 +68,8 @@ public static class DeployRunner implements Runnable, Serializable { private WorkflowInstanceService workflowInstanceService; @Autowired private WorkflowTaskInstanceService workflowTaskInstanceService; + @Autowired + private WorkflowInstanceStateMachine stateMachine; public DeployRunner(WorkflowInstanceEventDTO event) { this.event = event; @@ -82,6 +84,11 @@ public void run() { // 找到 root 节点,批量启动 root 节点 Graph dag = workflowDefinitionService.getDag(workflowDefinitionDTO.getId()); + // 无节点,直接成功 + if (dag.nodes().size() == 0) { + stateMachine.onSuccess(workflowInstanceDTO); + return; + } Graph workflowTaskInstanceGraph = workflowTaskInstanceService.initialize(event.getWorkflowInstanceId(), dag); Set nodes = workflowTaskInstanceGraph.nodes(); diff --git a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowDefinitionServiceImpl.java b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowDefinitionServiceImpl.java index 4ae852071..412c14090 100644 --- a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowDefinitionServiceImpl.java +++ b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowDefinitionServiceImpl.java @@ -83,7 +83,7 @@ private MutableGraph buildGraph(Long id, DagDTO dag) MutableGraph graph = GraphBuilder.directed().build(); List steps = dag.getSteps(); List links = dag.getLinks(); - if (CollectionUtils.isEmpty(steps) || CollectionUtils.isEmpty(links)) { + if (CollectionUtils.isEmpty(steps)) { return graph; } Map stepMap = new HashMap<>(); diff --git a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowTaskInstanceServiceImpl.java b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowTaskInstanceServiceImpl.java index b582b045d..77c4e6bfb 100644 --- a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowTaskInstanceServiceImpl.java +++ b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/service/impl/WorkflowTaskInstanceServiceImpl.java @@ -141,10 +141,15 @@ public void updateTaskId(Long id, String taskId) { @Override public Graph initialize(Long workflowInstanceId, Graph graph) { - for (WorkflowTaskDefinitionDTO2 node : graph.nodes()) { - createWorkflowTaskInstance(workflowInstanceId, node); + try { + for (WorkflowTaskDefinitionDTO2 node : graph.nodes()) { + createWorkflowTaskInstance(workflowInstanceId, node); + } + return getDag(workflowInstanceId, graph); + } catch (Exception e) { + e.printStackTrace(); } - return getDag(workflowInstanceId, graph); + return null; } private WorkflowTaskInstanceDTO createWorkflowTaskInstance(Long workflowInstanceId, WorkflowTaskDefinitionDTO2 node) { diff --git a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/statemachine/WorkflowInstanceStateMachine.java b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/statemachine/WorkflowInstanceStateMachine.java index 645ad7767..0d7b75463 100644 --- a/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/statemachine/WorkflowInstanceStateMachine.java +++ b/scaleph-workflow/scaleph-workflow-api/src/main/java/cn/sliew/scaleph/workflow/statemachine/WorkflowInstanceStateMachine.java @@ -58,6 +58,11 @@ public void afterPropertiesSet() throws Exception { .to(WorkflowInstanceState.RUNNING) .on(WorkflowInstanceEvent.COMMAND_DEPLOY) .perform(doPerform()); + builder.externalTransition() + .from(WorkflowInstanceState.PENDING) + .to(WorkflowInstanceState.SUCCESS) + .on(WorkflowInstanceEvent.PROCESS_SUCCESS) + .perform(doPerform()); builder.internalTransition() .within(WorkflowInstanceState.RUNNING)