From 0bffb9215583214680f86893ebdb2eb147c5ac3e Mon Sep 17 00:00:00 2001 From: wangqi <1942460489@qq.com> Date: Tue, 1 Oct 2024 23:51:19 +0800 Subject: [PATCH] feature: update workflow demo --- .../WorkflowDefinitionController.java | 55 +++++++++++++ .../WorkflowInstanceController.java | 56 +++++++++++++ .../workflow/api/domain/WorkflowDagNode.java | 37 --------- .../WorkflowInstanceEventDispatcher.java} | 12 +-- .../WorkflowTaskInstanceEventDispatcher.java} | 8 +- .../event/WorkflowInstanceStatusEvent.java} | 10 +-- .../WorkflowTaskInstanceStatusEvent.java} | 8 +- .../WorkflowInstanceEventHandler.java} | 19 ++--- .../WorkflowTaskInstanceEventHandler.java | 29 +++++++ .../WorkflowInstanceEventPublisher.java} | 11 +-- .../WorkflowTaskInstanceEventPublisher.java | 26 ++++++ .../domain/definition/WorkflowDefinition.java | 46 +++++++++++ .../WorkflowDefinitionGraphEdge.java | 48 +++++++++++ .../definition/WorkflowParamOption.java} | 22 ++--- .../instance/WorkflowExecutionGraph.java | 37 +++++++++ .../domain/instance/WorkflowInstance.java} | 19 +++-- .../WorkflowInstanceStatusListener.java} | 19 ++--- .../WorkflowTaskInstanceStatusListener.java | 29 +++++++ .../api/graph/WorkflowTaskDefinitionMeta.java | 26 ------ .../api/manager/WorkflowInstanceManager.java | 2 +- .../api/service/WorkflowDagService.java | 3 +- .../service/WorkflowDefinitionService.java | 8 +- .../api/service/WorkflowInstanceService.java | 13 ++- .../convert/WorkflowDefinitionConvert.java | 60 ++++++++++++++ ...> WorkflowDefinitionGraphEdgeConvert.java} | 27 +++---- .../WorkflowExecutionGraphConvert.java | 73 +++++++++++++++++ .../convert/WorkflowInstanceConvert.java | 52 ++++++++++++ .../convert/WorkflowTaskInstanceConvert.java | 12 ++- .../service/dto/WorkflowDefinitionDTO.java | 54 +++++++++++++ .../service/impl/WorkflowDagServiceImpl.java | 4 +- .../impl/WorkflowDefinitionServiceImpl.java | 80 +++++++++---------- .../api/service/param/WorkflowRunParam.java | 18 +++++ .../param/WorkflowStopParam.java} | 5 +- 33 files changed, 720 insertions(+), 208 deletions(-) create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowDefinitionController.java create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowInstanceController.java delete mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagNode.java rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowDefinitionGraph.java => engine/dispatch/WorkflowInstanceEventDispatcher.java} (76%) rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowDefinitionAttrs.java => engine/dispatch/WorkflowTaskInstanceEventDispatcher.java} (75%) rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowExecutionGraph.java => engine/dispatch/event/WorkflowInstanceStatusEvent.java} (78%) rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowDefinitionMeta.java => engine/dispatch/event/WorkflowTaskInstanceStatusEvent.java} (77%) rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowTaskDefinition.java => engine/dispatch/handler/WorkflowInstanceEventHandler.java} (68%) create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowTaskInstanceEventHandler.java rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{domain/WorkflowDagEdge.java => engine/dispatch/publisher/WorkflowInstanceEventPublisher.java} (75%) create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowTaskInstanceEventPublisher.java create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinition.java create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinitionGraphEdge.java rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{domain/Workflow.java => engine/domain/definition/WorkflowParamOption.java} (69%) create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowExecutionGraph.java rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowTaskInstance.java => engine/domain/instance/WorkflowInstance.java} (71%) rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{domain/WorkflowDAG.java => engine/listener/WorkflowInstanceStatusListener.java} (68%) create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowTaskInstanceStatusListener.java delete mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionMeta.java create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionConvert.java rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/{WorkflowTaskDefinitionConvert.java => WorkflowDefinitionGraphEdgeConvert.java} (54%) create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowExecutionGraphConvert.java create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowInstanceConvert.java create mode 100644 carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/dto/WorkflowDefinitionDTO.java rename carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/{graph/WorkflowTaskDefinitionAttrs.java => service/param/WorkflowStopParam.java} (86%) diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowDefinitionController.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowDefinitionController.java new file mode 100644 index 00000000..0325e115 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowDefinitionController.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.controller; + +import cn.sliew.carp.framework.web.response.ApiResponseWrapper; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinition; +import cn.sliew.carp.module.workflow.api.service.WorkflowDefinitionService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@ApiResponseWrapper +@RequestMapping("/api/carp/workflow/definition") +@Tag(name = "Workflow模块-Definition管理") +public class WorkflowDefinitionController { + + @Autowired + private WorkflowDefinitionService workflowDefinitionService; + + @GetMapping("{id}") + @Operation(summary = "查询详情", description = "查询详情") + public WorkflowDefinition get(@PathVariable("id") Long id) { + return workflowDefinitionService.get(id); + } + + @GetMapping("{id}/graph") + @Operation(summary = "查询详情-图", description = "查询详情-图") + public WorkflowDefinition getGraph(@PathVariable("id") Long id) { + return workflowDefinitionService.getGraph(id); + } + + @PutMapping + @Operation(summary = "新增", description = "新增") + public Long add() { + return null; + } +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowInstanceController.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowInstanceController.java new file mode 100644 index 00000000..198881c4 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/controller/WorkflowInstanceController.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.controller; + +import cn.sliew.carp.framework.common.security.annotations.AnonymousAccess; +import cn.sliew.carp.framework.web.response.ApiResponseWrapper; +import cn.sliew.carp.module.workflow.api.service.WorkflowInstanceService; +import cn.sliew.carp.module.workflow.api.service.param.WorkflowRunParam; +import cn.sliew.carp.module.workflow.api.service.param.WorkflowStopParam; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@AnonymousAccess +@RestController +@ApiResponseWrapper +@RequestMapping("/api/carp/workflow/instance") +@Tag(name = "Workflow模块-Instance管理") +public class WorkflowInstanceController { + + @Autowired + private WorkflowInstanceService workflowInstanceService; + + @PostMapping("run") + @Operation(summary = "启动", description = "启动") + public Long run(@Valid @RequestBody WorkflowRunParam param) { + return workflowInstanceService.run(param); + } + + @PostMapping("stop") + @Operation(summary = "停止", description = "停止") + public void stop(@Valid @RequestBody WorkflowStopParam param) { + workflowInstanceService.stop(param); + } +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagNode.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagNode.java deleted file mode 100644 index 62c06212..00000000 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagNode.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.sliew.carp.module.workflow.api.domain; - -import cn.sliew.carp.framework.common.dict.workflow.WorkflowTaskType; -import com.fasterxml.jackson.databind.JsonNode; -import lombok.Data; - -@Data -public class WorkflowDagNode { - - private String name; - // 如果是 java,则为 dag_step id,如果是 sub_workflow,则为 dag id - private Long refId; - private WorkflowTaskType type; - private JsonNode inputParams; - private JsonNode outputParams; - - private Long maxRetryTimes; - private Long timeout; -} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionGraph.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/WorkflowInstanceEventDispatcher.java similarity index 76% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionGraph.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/WorkflowInstanceEventDispatcher.java index 28a4f1cf..6982d2ee 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionGraph.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/WorkflowInstanceEventDispatcher.java @@ -16,15 +16,11 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.engine.dispatch; -import cn.sliew.carp.framework.dag.algorithm.DAG; -import lombok.Data; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowInstanceStatusEvent; -@Data -public class WorkflowDefinitionGraph { +public interface WorkflowInstanceEventDispatcher { - private Long dagConfigId; - - private DAG dag; + void dispatch(WorkflowInstanceStatusEvent event); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionAttrs.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/WorkflowTaskInstanceEventDispatcher.java similarity index 75% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionAttrs.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/WorkflowTaskInstanceEventDispatcher.java index c6b503a1..97e8b212 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionAttrs.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/WorkflowTaskInstanceEventDispatcher.java @@ -16,11 +16,11 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.engine.dispatch; -import lombok.Data; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowTaskInstanceStatusEvent; -@Data -public class WorkflowDefinitionAttrs { +public interface WorkflowTaskInstanceEventDispatcher { + void dispatch(WorkflowTaskInstanceStatusEvent event); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowExecutionGraph.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/event/WorkflowInstanceStatusEvent.java similarity index 78% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowExecutionGraph.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/event/WorkflowInstanceStatusEvent.java index db813c5d..c9699598 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowExecutionGraph.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/event/WorkflowInstanceStatusEvent.java @@ -16,13 +16,11 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.engine.dispatch.event; -import cn.sliew.carp.framework.dag.algorithm.DAG; -import lombok.Data; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowInstanceEvent; -@Data -public class WorkflowExecutionGraph { +public interface WorkflowInstanceStatusEvent { - private DAG dag; + WorkflowInstanceEvent getEvent(); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionMeta.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/event/WorkflowTaskInstanceStatusEvent.java similarity index 77% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionMeta.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/event/WorkflowTaskInstanceStatusEvent.java index a0e20eb2..dddf0a30 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowDefinitionMeta.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/event/WorkflowTaskInstanceStatusEvent.java @@ -16,11 +16,11 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.engine.dispatch.event; -import lombok.Data; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowTaskInstanceEvent; -@Data -public class WorkflowDefinitionMeta { +public interface WorkflowTaskInstanceStatusEvent { + WorkflowTaskInstanceEvent getEvent(); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinition.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowInstanceEventHandler.java similarity index 68% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinition.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowInstanceEventHandler.java index ada05730..7b525739 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinition.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowInstanceEventHandler.java @@ -16,21 +16,14 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.engine.dispatch.handler; -import cn.sliew.carp.framework.common.model.BaseDTO; -import lombok.Data; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowInstanceEvent; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowInstanceStatusEvent; -@Data -public class WorkflowTaskDefinition extends BaseDTO { +public interface WorkflowInstanceEventHandler { - private Long dagId; + WorkflowInstanceEvent getType(); - private String stepId; - - private String name; - - private WorkflowTaskDefinitionMeta meta; - - private WorkflowTaskDefinitionAttrs attrs; + void handle(WorkflowInstanceStatusEvent event); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowTaskInstanceEventHandler.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowTaskInstanceEventHandler.java new file mode 100644 index 00000000..cbfa259b --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/handler/WorkflowTaskInstanceEventHandler.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.engine.dispatch.handler; + +import cn.sliew.carp.framework.common.dict.workflow.WorkflowTaskInstanceEvent; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowTaskInstanceStatusEvent; + +public interface WorkflowTaskInstanceEventHandler { + + WorkflowTaskInstanceEvent getType(); + + void handle(WorkflowTaskInstanceStatusEvent event); +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagEdge.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowInstanceEventPublisher.java similarity index 75% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagEdge.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowInstanceEventPublisher.java index 13470b01..f10806cc 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDagEdge.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowInstanceEventPublisher.java @@ -16,14 +16,11 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.domain; +package cn.sliew.carp.module.workflow.api.engine.dispatch.publisher; -import lombok.Data; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowInstanceStatusEvent; -@Data -public class WorkflowDagEdge { +public interface WorkflowInstanceEventPublisher { - private Long sourceId; - private Long targetId; - private String expression; + void publish(WorkflowInstanceStatusEvent event); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowTaskInstanceEventPublisher.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowTaskInstanceEventPublisher.java new file mode 100644 index 00000000..9da284c2 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/dispatch/publisher/WorkflowTaskInstanceEventPublisher.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.engine.dispatch.publisher; + +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowTaskInstanceStatusEvent; + +public interface WorkflowTaskInstanceEventPublisher { + + void publish(WorkflowTaskInstanceStatusEvent event); +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinition.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinition.java new file mode 100644 index 00000000..da423ef1 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinition.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.engine.domain.definition; + +import cn.sliew.carp.framework.common.model.BaseDTO; +import lombok.Data; + +import java.util.List; + +@Data +public class WorkflowDefinition extends BaseDTO { + + private String type; + + private String name; + + private String uuid; + + private WorkflowDefinitionGraph graph; + + private WorkflowDefinitionMeta meta; + + private WorkflowDefinitionAttrs attrs; + + private List inputOptions; + + private List outputOptions; + + private String remark; +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinitionGraphEdge.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinitionGraphEdge.java new file mode 100644 index 00000000..98c8eecb --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowDefinitionGraphEdge.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.engine.domain.definition; + +import cn.sliew.carp.framework.common.model.BaseDTO; +import lombok.Data; + +@Data +public class WorkflowDefinitionGraphEdge extends BaseDTO { + + private Long workflowDefinitionId; + + private String linkId; + + private String linkName; + + private String fromStepId; + + private String toStepId; + + private Integer positionX; + + private Integer positionY; + + private String shape; + + private String stype; + + private WorkflowDefinitionGraphEdgeMeta meta; + + private WorkflowDefinitionGraphEdgeAttrs attrs; +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/Workflow.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowParamOption.java similarity index 69% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/Workflow.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowParamOption.java index cb91cd0c..525c191d 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/Workflow.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/definition/WorkflowParamOption.java @@ -16,20 +16,22 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.domain; +package cn.sliew.carp.module.workflow.api.engine.domain.definition; -import cn.sliew.carp.framework.common.model.BaseDTO; -import com.fasterxml.jackson.databind.JsonNode; +import cn.sliew.carp.framework.common.dict.data.DataType; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data -public class Workflow extends BaseDTO { +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WorkflowParamOption { private String name; - - private WorkflowDAG dag; - - private JsonNode inputParams; - - private String remark; + private Object value; + private DataType type; + private Boolean isOverWrite; } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowExecutionGraph.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowExecutionGraph.java new file mode 100644 index 00000000..09257e79 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowExecutionGraph.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.engine.domain.instance; + +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphEdge; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphNode; +import lombok.Data; + +import java.util.List; + +@Data +public class WorkflowExecutionGraph { + + private WorkflowTaskInstance preTask; + + private WorkflowTaskInstance postTask; + + private List tasks; + + private List edges; +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskInstance.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowInstance.java similarity index 71% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskInstance.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowInstance.java index 292ce682..2354f9d0 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskInstance.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/domain/instance/WorkflowInstance.java @@ -16,34 +16,33 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.engine.domain.instance; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowInstanceState; import cn.sliew.carp.framework.common.model.BaseDTO; -import cn.sliew.carp.framework.dag.service.dto.DagConfigStepDTO; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinition; import com.fasterxml.jackson.databind.JsonNode; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.util.Date; @Data -public class WorkflowTaskInstance extends BaseDTO { +public class WorkflowInstance extends BaseDTO { - private Long dagInstanceId; - - @Schema(description = "步骤") - private WorkflowTaskDefinition definition; + private WorkflowDefinition definition; private String uuid; private JsonNode inputs; - private JsonNode outputs; + private JsonNode ouputs; - private String status; + private WorkflowInstanceState status; private Date startTime; private Date endTime; + private WorkflowExecutionGraph graph; + } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDAG.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowInstanceStatusListener.java similarity index 68% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDAG.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowInstanceStatusListener.java index e4e19483..86546dfd 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/domain/WorkflowDAG.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowInstanceStatusListener.java @@ -16,21 +16,14 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.domain; +package cn.sliew.carp.module.workflow.api.engine.listener; -import com.fasterxml.jackson.databind.JsonNode; -import lombok.Data; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowInstanceState; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowInstanceStatusEvent; -import java.util.List; +public interface WorkflowInstanceStatusListener { -@Data -public class WorkflowDAG { + WorkflowInstanceState getState(); - private WorkflowDagNode preNode; - - private WorkflowDagNode postNode; - - private List nodes; - - private List edges; + void onEvent(WorkflowInstanceStatusEvent event); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowTaskInstanceStatusListener.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowTaskInstanceStatusListener.java new file mode 100644 index 00000000..477af600 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/engine/listener/WorkflowTaskInstanceStatusListener.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.engine.listener; + +import cn.sliew.carp.framework.common.dict.workflow.WorkflowTaskInstanceStage; +import cn.sliew.carp.module.workflow.api.engine.dispatch.event.WorkflowTaskInstanceStatusEvent; + +public interface WorkflowTaskInstanceStatusListener { + + WorkflowTaskInstanceStage getStage(); + + void onEvent(WorkflowTaskInstanceStatusEvent event); +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionMeta.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionMeta.java deleted file mode 100644 index e6dcbe45..00000000 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionMeta.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.sliew.carp.module.workflow.api.graph; - -import lombok.Data; - -@Data -public class WorkflowTaskDefinitionMeta { - -} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/manager/WorkflowInstanceManager.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/manager/WorkflowInstanceManager.java index 21b26cc4..1501f974 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/manager/WorkflowInstanceManager.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/manager/WorkflowInstanceManager.java @@ -20,7 +20,7 @@ public interface WorkflowInstanceManager { - void deploy(Long workflowDefinitionId); + void deploy(Long id); void shutdown(Long id); diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDagService.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDagService.java index f871b864..691fe50e 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDagService.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDagService.java @@ -22,10 +22,11 @@ import cn.sliew.carp.framework.dag.service.dto.DagConfigStepDTO; import cn.sliew.carp.framework.dag.service.dto.DagInstanceComplexDTO; import cn.sliew.carp.framework.dag.x6.graph.DagGraphVO; +import com.fasterxml.jackson.databind.JsonNode; public interface WorkflowDagService { - Long initialize(String name, String remark); + Long initialize(String name, JsonNode inputParams, String remark); void destroy(Long dagId); diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDefinitionService.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDefinitionService.java index a6ab6f85..f7edf499 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDefinitionService.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowDefinitionService.java @@ -18,12 +18,12 @@ package cn.sliew.carp.module.workflow.api.service; -import cn.sliew.carp.module.workflow.api.graph.WorkflowDefinitionGraph; -import cn.sliew.carp.module.workflow.api.graph.WorkflowExecutionGraph; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinition; public interface WorkflowDefinitionService { - WorkflowDefinitionGraph get(Long dagId); + WorkflowDefinition get(Long id); + + WorkflowDefinition getGraph(Long id); - WorkflowExecutionGraph getExecutionGraph(Long dagInstanceId); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowInstanceService.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowInstanceService.java index 1a36dddb..6b3d82b0 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowInstanceService.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/WorkflowInstanceService.java @@ -18,11 +18,22 @@ package cn.sliew.carp.module.workflow.api.service; +import cn.sliew.carp.module.workflow.api.engine.domain.instance.WorkflowInstance; +import cn.sliew.carp.module.workflow.api.engine.domain.instance.WorkflowTaskInstance; import cn.sliew.carp.module.workflow.api.service.param.WorkflowRunParam; +import cn.sliew.carp.module.workflow.api.service.param.WorkflowStopParam; public interface WorkflowInstanceService { + WorkflowInstance get(Long workflowInstanceId); + + WorkflowInstance getGraph(Long workflowInstanceId); + + WorkflowTaskInstance getTask(Long workflowTaskInstanceId); + + Long simpleInitialize(Long workflowDefinitionId); + Long run(WorkflowRunParam param); - void stop(Long workflowInstanceId); + void stop(WorkflowStopParam param); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionConvert.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionConvert.java new file mode 100644 index 00000000..f8bd278d --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionConvert.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.service.convert; + +import cn.sliew.carp.framework.common.convert.BaseConvert; +import cn.sliew.carp.framework.dag.service.dto.DagConfigDTO; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinition; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionAttrs; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionMeta; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowParamOption; +import cn.sliew.milky.common.util.JacksonUtil; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; +import org.springframework.beans.BeanUtils; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface WorkflowDefinitionConvert extends BaseConvert { + WorkflowDefinitionConvert INSTANCE = Mappers.getMapper(WorkflowDefinitionConvert.class); + + @Override + default DagConfigDTO toDo(WorkflowDefinition dto) { + throw new UnsupportedOperationException(); + } + + @Override + default WorkflowDefinition toDto(DagConfigDTO entity) { + WorkflowDefinition dto = new WorkflowDefinition(); + BeanUtils.copyProperties(entity, dto); + if (entity.getDagMeta() != null) { + dto.setMeta(JacksonUtil.toObject(entity.getDagMeta(), WorkflowDefinitionMeta.class)); + } + if (entity.getDagAttrs() != null) { + dto.setAttrs(JacksonUtil.toObject(entity.getDagAttrs(), WorkflowDefinitionAttrs.class)); + } + if (entity.getIntputOptions() != null) { + dto.setInputOptions(JacksonUtil.parseJsonArray(entity.getIntputOptions().toString(), WorkflowParamOption.class)); + } + if (entity.getOutputOptions() != null) { + dto.setOutputOptions(JacksonUtil.parseJsonArray(entity.getOutputOptions().toString(), WorkflowParamOption.class)); + } + return dto; + } +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskDefinitionConvert.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionGraphEdgeConvert.java similarity index 54% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskDefinitionConvert.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionGraphEdgeConvert.java index d6f2eb03..e382faa5 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskDefinitionConvert.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowDefinitionGraphEdgeConvert.java @@ -19,10 +19,10 @@ package cn.sliew.carp.module.workflow.api.service.convert; import cn.sliew.carp.framework.common.convert.BaseConvert; -import cn.sliew.carp.framework.dag.service.dto.DagConfigStepDTO; -import cn.sliew.carp.module.workflow.api.graph.WorkflowTaskDefinition; -import cn.sliew.carp.module.workflow.api.graph.WorkflowTaskDefinitionAttrs; -import cn.sliew.carp.module.workflow.api.graph.WorkflowTaskDefinitionMeta; +import cn.sliew.carp.framework.dag.service.dto.DagConfigLinkDTO; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphEdge; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphEdgeAttrs; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphEdgeMeta; import cn.sliew.milky.common.util.JacksonUtil; import org.mapstruct.Mapper; import org.mapstruct.ReportingPolicy; @@ -30,24 +30,23 @@ import org.springframework.beans.BeanUtils; @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) -public interface WorkflowTaskDefinitionConvert extends BaseConvert { - WorkflowTaskDefinitionConvert INSTANCE = Mappers.getMapper(WorkflowTaskDefinitionConvert.class); +public interface WorkflowDefinitionGraphEdgeConvert extends BaseConvert { + WorkflowDefinitionGraphEdgeConvert INSTANCE = Mappers.getMapper(WorkflowDefinitionGraphEdgeConvert.class); @Override - default DagConfigStepDTO toDo(WorkflowTaskDefinition dto) { + default DagConfigLinkDTO toDo(WorkflowDefinitionGraphEdge dto) { throw new UnsupportedOperationException(); } @Override - default WorkflowTaskDefinition toDto(DagConfigStepDTO entity) { - WorkflowTaskDefinition dto = new WorkflowTaskDefinition(); + default WorkflowDefinitionGraphEdge toDto(DagConfigLinkDTO entity) { + WorkflowDefinitionGraphEdge dto = new WorkflowDefinitionGraphEdge(); BeanUtils.copyProperties(entity, dto); - dto.setName(entity.getStepName()); - if (entity.getStepMeta() != null) { - dto.setMeta(JacksonUtil.toObject(entity.getStepMeta(), WorkflowTaskDefinitionMeta.class)); + if (entity.getLinkMeta() != null) { + dto.setMeta(JacksonUtil.toObject(entity.getLinkMeta(), WorkflowDefinitionGraphEdgeMeta.class)); } - if (entity.getStepAttrs() != null) { - dto.setAttrs(JacksonUtil.toObject(entity.getStepAttrs(), WorkflowTaskDefinitionAttrs.class)); + if (entity.getLinkAttrs() != null) { + dto.setAttrs(JacksonUtil.toObject(entity.getLinkAttrs(), WorkflowDefinitionGraphEdgeAttrs.class)); } return dto; } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowExecutionGraphConvert.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowExecutionGraphConvert.java new file mode 100644 index 00000000..7f0a0572 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowExecutionGraphConvert.java @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.service.convert; + +import cn.sliew.carp.framework.common.convert.BaseConvert; +import cn.sliew.carp.framework.dag.algorithm.DAG; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphEdge; +import cn.sliew.carp.module.workflow.api.engine.domain.instance.WorkflowExecutionGraph; +import cn.sliew.carp.module.workflow.api.engine.domain.instance.WorkflowTaskInstance; +import com.google.common.collect.Maps; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +import java.util.Map; +import java.util.Set; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface WorkflowExecutionGraphConvert extends BaseConvert> { + WorkflowExecutionGraphConvert INSTANCE = Mappers.getMapper(WorkflowExecutionGraphConvert.class); + + @Override + default WorkflowExecutionGraph toDo(DAG dag) { + throw new UnsupportedOperationException(); + } + + @Override + default DAG toDto(WorkflowExecutionGraph graph) { + DAG dag = new DAG<>(); + + Map taskInstanceMap = Maps.newHashMap(); + for (WorkflowTaskInstance taskInstance : graph.getTasks()) { + taskInstanceMap.put(taskInstance.getNode().getStepId(), taskInstance); + dag.addNode(taskInstance); + } + for (WorkflowDefinitionGraphEdge edge : graph.getEdges()) { + dag.addEdge(taskInstanceMap.get(edge.getFromStepId()), taskInstanceMap.get(edge.getToStepId())); + } + + if (graph.getPreTask() != null) { + dag.addNode(graph.getPreTask()); + Set sources = dag.getSources(); + for (WorkflowTaskInstance source : sources) { + dag.addEdge(graph.getPreTask(), source); + } + } + + if (graph.getPostTask() != null) { + dag.addNode(graph.getPostTask()); + Set sinks = dag.getSinks(); + for (WorkflowTaskInstance sink : sinks) { + dag.addEdge(sink, graph.getPostTask()); + } + } + return dag; + } +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowInstanceConvert.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowInstanceConvert.java new file mode 100644 index 00000000..137c71b5 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowInstanceConvert.java @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.service.convert; + +import cn.sliew.carp.framework.common.convert.BaseConvert; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowInstanceState; +import cn.sliew.carp.framework.dag.service.dto.DagInstanceDTO; +import cn.sliew.carp.module.workflow.api.engine.domain.instance.WorkflowInstance; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; +import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface WorkflowInstanceConvert extends BaseConvert { + WorkflowInstanceConvert INSTANCE = Mappers.getMapper(WorkflowInstanceConvert.class); + + @Override + default DagInstanceDTO toDo(WorkflowInstance dto) { + throw new UnsupportedOperationException(); + } + + @Override + default WorkflowInstance toDto(DagInstanceDTO entity) { + WorkflowInstance dto = new WorkflowInstance(); + BeanUtils.copyProperties(entity, dto); + if (entity.getDagConfig() != null) { + dto.setDefinition(WorkflowDefinitionConvert.INSTANCE.toDto(entity.getDagConfig())); + } + if (StringUtils.hasText(entity.getStatus())) { + dto.setStatus(WorkflowInstanceState.of(entity.getStatus())); + } + return dto; + } +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskInstanceConvert.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskInstanceConvert.java index cddd3255..f04898f5 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskInstanceConvert.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/convert/WorkflowTaskInstanceConvert.java @@ -19,12 +19,14 @@ package cn.sliew.carp.module.workflow.api.service.convert; import cn.sliew.carp.framework.common.convert.BaseConvert; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowTaskInstanceStage; import cn.sliew.carp.framework.dag.service.dto.DagStepDTO; -import cn.sliew.carp.module.workflow.api.graph.WorkflowTaskInstance; +import cn.sliew.carp.module.workflow.api.engine.domain.instance.WorkflowTaskInstance; import org.mapstruct.Mapper; import org.mapstruct.ReportingPolicy; import org.mapstruct.factory.Mappers; import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface WorkflowTaskInstanceConvert extends BaseConvert { @@ -39,7 +41,13 @@ default DagStepDTO toDo(WorkflowTaskInstance dto) { default WorkflowTaskInstance toDto(DagStepDTO entity) { WorkflowTaskInstance dto = new WorkflowTaskInstance(); BeanUtils.copyProperties(entity, dto); - dto.setDefinition(WorkflowTaskDefinitionConvert.INSTANCE.toDto(entity.getDagConfigStep())); + dto.setWorkflowInstanceId(entity.getDagInstanceId()); + if (entity.getDagConfigStep() != null) { + dto.setNode(WorkflowDefinitionGraphNodeConvert.INSTANCE.toDto(entity.getDagConfigStep())); + } + if (StringUtils.hasText(entity.getStatus())) { + dto.setStatus(WorkflowTaskInstanceStage.of(entity.getStatus())); + } return dto; } } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/dto/WorkflowDefinitionDTO.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/dto/WorkflowDefinitionDTO.java new file mode 100644 index 00000000..dd4f8eb6 --- /dev/null +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/dto/WorkflowDefinitionDTO.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.sliew.carp.module.workflow.api.service.dto; + +import cn.sliew.carp.framework.common.model.BaseDTO; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionAttrs; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionMeta; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowParamOption; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class WorkflowDefinitionDTO extends BaseDTO { + + @Schema(description = "DAG名称") + private String name; + + @Schema(description = "DAG ID") + private String uuid; + + @Schema(description = "DAG元信息") + private WorkflowDefinitionMeta meta; + + @Schema(description = "DAG属性") + private WorkflowDefinitionAttrs attrs; + + @Schema(description = "输入参数声明") + private List intputOptions; + + @Schema(description = "输出参数声明") + private List outputOptions; + + @Schema(description = "备注") + private String remark; + +} diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDagServiceImpl.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDagServiceImpl.java index db8bc0fd..fec20343 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDagServiceImpl.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDagServiceImpl.java @@ -27,6 +27,7 @@ import cn.sliew.carp.framework.dag.service.param.DagConfigSimpleAddParam; import cn.sliew.carp.framework.dag.x6.graph.DagGraphVO; import cn.sliew.carp.module.workflow.api.service.WorkflowDagService; +import com.fasterxml.jackson.databind.JsonNode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -41,10 +42,11 @@ public class WorkflowDagServiceImpl implements WorkflowDagService { private DagInstanceComplexService dagInstanceComplexService; @Override - public Long initialize(String name, String remark) { + public Long initialize(String name, JsonNode inputParams, String remark) { DagConfigSimpleAddParam param = new DagConfigSimpleAddParam(); param.setType("WorkFlow"); param.setName(name); + param.setInputOptions(inputParams); param.setRemark(remark); return dagConfigComplexService.insert(param); } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDefinitionServiceImpl.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDefinitionServiceImpl.java index a5c0a315..dd7851f1 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDefinitionServiceImpl.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/impl/WorkflowDefinitionServiceImpl.java @@ -18,63 +18,55 @@ package cn.sliew.carp.module.workflow.api.service.impl; -import cn.sliew.carp.framework.dag.algorithm.DAG; -import cn.sliew.carp.framework.dag.algorithm.DefaultDagEdge; -import cn.sliew.carp.framework.dag.service.dto.*; -import cn.sliew.carp.module.workflow.api.graph.WorkflowDefinitionGraph; -import cn.sliew.carp.module.workflow.api.graph.WorkflowExecutionGraph; -import cn.sliew.carp.module.workflow.api.graph.WorkflowTaskDefinition; -import cn.sliew.carp.module.workflow.api.graph.WorkflowTaskInstance; -import cn.sliew.carp.module.workflow.api.service.WorkflowDagService; +import cn.sliew.carp.framework.common.dict.workflow.WorkflowStepType; +import cn.sliew.carp.framework.dag.service.DagConfigComplexService; +import cn.sliew.carp.framework.dag.service.dto.DagConfigComplexDTO; +import cn.sliew.carp.framework.dag.service.dto.DagConfigDTO; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinition; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraph; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphEdge; +import cn.sliew.carp.module.workflow.api.engine.domain.definition.WorkflowDefinitionGraphNode; import cn.sliew.carp.module.workflow.api.service.WorkflowDefinitionService; -import cn.sliew.carp.module.workflow.api.service.convert.WorkflowTaskDefinitionConvert; -import cn.sliew.carp.module.workflow.api.service.convert.WorkflowTaskInstanceConvert; +import cn.sliew.carp.module.workflow.api.service.convert.WorkflowDefinitionConvert; +import cn.sliew.carp.module.workflow.api.service.convert.WorkflowDefinitionGraphEdgeConvert; +import cn.sliew.carp.module.workflow.api.service.convert.WorkflowDefinitionGraphNodeConvert; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.Map; +import java.util.List; +import java.util.stream.Collectors; @Service public class WorkflowDefinitionServiceImpl implements WorkflowDefinitionService { @Autowired - private WorkflowDagService workflowDagService; + private DagConfigComplexService dagConfigComplexService; @Override - public WorkflowDefinitionGraph get(Long dagId) { - DagConfigComplexDTO complexDTO = workflowDagService.getDag(dagId); - WorkflowDefinitionGraph graph = new WorkflowDefinitionGraph(); - DAG dag = new DAG<>(); - Map taskDefinitionMap = new HashMap<>(); - for (DagConfigStepDTO stepDTO : complexDTO.getSteps()) { - WorkflowTaskDefinition taskDefinition = WorkflowTaskDefinitionConvert.INSTANCE.toDto(stepDTO); - taskDefinitionMap.put(taskDefinition.getStepId(), taskDefinition); - dag.addNode(taskDefinition); - } - for (DagConfigLinkDTO linkDTO : complexDTO.getLinks()) { - dag.addEdge(taskDefinitionMap.get(linkDTO.getFromStepId()), taskDefinitionMap.get(linkDTO.getToStepId())); - } - graph.setDag(dag); - return graph; + public WorkflowDefinition get(Long id) { + DagConfigDTO dagConfigDTO = dagConfigComplexService.selectSimpleOne(id); + return WorkflowDefinitionConvert.INSTANCE.toDto(dagConfigDTO); } @Override - public WorkflowExecutionGraph getExecutionGraph(Long dagInstanceId) { - DagInstanceComplexDTO complexDTO = workflowDagService.getDagInstance(dagInstanceId); - WorkflowDefinitionGraph definitionGraph = get(complexDTO.getDagConfig().getId()); - WorkflowExecutionGraph executionGraph = new WorkflowExecutionGraph(); - DAG dag = new DAG<>(); - Map taskInstanceMap = new HashMap<>(); - for (DagStepDTO stepDTO : complexDTO.getSteps()) { - WorkflowTaskInstance taskInstance = WorkflowTaskInstanceConvert.INSTANCE.toDto(stepDTO); - taskInstanceMap.put(taskInstance.getDefinition().getStepId(), taskInstance); - dag.addNode(taskInstance); - } - for (DefaultDagEdge edge : definitionGraph.getDag().edges()) { - dag.addEdge(taskInstanceMap.get(edge.getSource().getStepId()), taskInstanceMap.get(edge.getTarget().getStepId())); - } - executionGraph.setDag(dag); - return executionGraph; + public WorkflowDefinition getGraph(Long id) { + DagConfigComplexDTO complexDTO = dagConfigComplexService.selectOne(id); + WorkflowDefinition dto = WorkflowDefinitionConvert.INSTANCE.toDto(complexDTO); + WorkflowDefinitionGraph graph = new WorkflowDefinitionGraph(); + dto.setGraph(graph); + + List edges = WorkflowDefinitionGraphEdgeConvert.INSTANCE.toDto(complexDTO.getLinks()); + List allNodes = WorkflowDefinitionGraphNodeConvert.INSTANCE.toDto(complexDTO.getSteps()); + WorkflowDefinitionGraphNode preNode = allNodes.stream().filter(node -> node.getMeta().getStepType() == WorkflowStepType.PRE).findFirst().orElse(null); + WorkflowDefinitionGraphNode postNode = allNodes.stream().filter(node -> node.getMeta().getStepType() == WorkflowStepType.POST).findFirst().orElse(null); + List normalNodes = allNodes.stream().filter(node -> node.getMeta().getStepType() == WorkflowStepType.NORMAL).collect(Collectors.toList()); + + graph.setEdges(edges); + graph.setPreNode(preNode); + graph.setPostNode(postNode); + graph.setNodes(normalNodes); + + return dto; } + } diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowRunParam.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowRunParam.java index e94d4753..5df264b5 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowRunParam.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowRunParam.java @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package cn.sliew.carp.module.workflow.api.service.param; import com.fasterxml.jackson.databind.JsonNode; diff --git a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionAttrs.java b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowStopParam.java similarity index 86% rename from carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionAttrs.java rename to carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowStopParam.java index b3d67c00..f46e36e9 100644 --- a/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/graph/WorkflowTaskDefinitionAttrs.java +++ b/carp-modules/carp-module-workflow/carp-module-workflow-api/src/main/java/cn/sliew/carp/module/workflow/api/service/param/WorkflowStopParam.java @@ -16,11 +16,12 @@ * limitations under the License. */ -package cn.sliew.carp.module.workflow.api.graph; +package cn.sliew.carp.module.workflow.api.service.param; import lombok.Data; @Data -public class WorkflowTaskDefinitionAttrs { +public class WorkflowStopParam { + private Long workflowInstanceId; }