From 9c906be60a0239e13281b16123bf4a60bac16fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=9A=E8=BE=B0=E5=85=88=E7=94=9F?= Date: Tue, 10 Dec 2024 21:51:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/mvnw | 0 .../workflow/constants/BpmnConstants.java | 59 +++++++++++++++++++ .../handler/impl/ShellTaskHandler.java | 5 +- .../backend/workflow/util/BpmnConverter.java | 44 ++++++++------ 4 files changed, 87 insertions(+), 21 deletions(-) mode change 100644 => 100755 backend/mvnw create mode 100644 backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java diff --git a/backend/mvnw b/backend/mvnw old mode 100644 new mode 100755 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java new file mode 100644 index 00000000..0a17b3c0 --- /dev/null +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/constants/BpmnConstants.java @@ -0,0 +1,59 @@ +package com.qqchen.deploy.backend.workflow.constants; + +/** + * BPMN相关常量 + */ +public class BpmnConstants { + + /** + * 节点类型 + */ + public static class NodeShape { + public static final String START = "start"; + public static final String END = "end"; + public static final String EDGE = "edge"; + } + + /** + * 节点属性 + */ + public static class NodeAttribute { + public static final String SHAPE = "shape"; + public static final String ID = "id"; + public static final String LABEL = "label"; + public static final String SOURCE = "source"; + public static final String TARGET = "target"; + public static final String DATA = "data"; + public static final String CONDITION = "condition"; + } + + /** + * 默认节点ID + */ + public static class DefaultNodeId { + public static final String START_EVENT = "startEvent"; + public static final String END_EVENT = "endEvent"; + public static final String START_FLOW = "flow_start"; + public static final String END_FLOW = "flow_end"; + } + + /** + * 默认节点名称 + */ + public static class DefaultNodeName { + public static final String START_EVENT = "开始"; + public static final String END_EVENT = "结束"; + } + + /** + * 委托表达式类型 + */ + public static class DelegateExpression { + public static final String TYPE = "delegateExpression"; + public static final String SHELL_TASK = "${shellTaskDelegate}"; + } + + private BpmnConstants() { + // 防止实例化 + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/handler/impl/ShellTaskHandler.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/handler/impl/ShellTaskHandler.java index 7d6e8452..640660be 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/handler/impl/ShellTaskHandler.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/handler/impl/ShellTaskHandler.java @@ -1,6 +1,7 @@ package com.qqchen.deploy.backend.workflow.handler.impl; import com.fasterxml.jackson.databind.JsonNode; +import com.qqchen.deploy.backend.workflow.constants.BpmnConstants; import com.qqchen.deploy.backend.workflow.enums.BpmnNodeType; import com.qqchen.deploy.backend.workflow.handler.BpmnNodeHandler; import com.qqchen.deploy.backend.workflow.model.BpmnNodeConfig; @@ -20,8 +21,8 @@ public class ShellTaskHandler implements BpmnNodeHandler { @Override public void handle(JsonNode nodeData, ServiceTask element, BpmnNodeConfig config) { - element.setImplementationType("delegateExpression"); - element.setImplementation("${shellTaskDelegate}"); + element.setImplementationType(BpmnConstants.DelegateExpression.TYPE); + element.setImplementation(BpmnConstants.DelegateExpression.SHELL_TASK); element.setAsynchronous(true); // Shell任务默认异步执行 // 从配置中获取字段 diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java index 5fc8f888..c90a107a 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/util/BpmnConverter.java @@ -2,6 +2,7 @@ package com.qqchen.deploy.backend.workflow.util; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.qqchen.deploy.backend.workflow.constants.BpmnConstants; import com.qqchen.deploy.backend.workflow.enums.BpmnNodeType; import com.qqchen.deploy.backend.workflow.handler.BpmnNodeHandler; import com.qqchen.deploy.backend.workflow.model.BpmnNodeConfig; @@ -49,7 +50,7 @@ public class BpmnConverter { Process process = new Process(); process.setId(processId); process.setName(processId); - process.setExecutable(true); // 设置为可执行 + process.setExecutable(true); bpmnModel.addProcess(process); // 处理节点 @@ -63,19 +64,20 @@ public class BpmnConverter { continue; } - String shape = cell.path("shape").asText(); - String id = cell.path("id").asText(); - String label = cell.path("data").path("label").asText(""); + String shape = cell.path(BpmnConstants.NodeAttribute.SHAPE).asText(); + String id = cell.path(BpmnConstants.NodeAttribute.ID).asText(); + String label = cell.path(BpmnConstants.NodeAttribute.DATA) + .path(BpmnConstants.NodeAttribute.LABEL).asText(""); // 处理特殊节点类型 - if ("start".equals(shape)) { + if (BpmnConstants.NodeShape.START.equals(shape)) { StartEvent startEvent = new StartEvent(); startEvent.setId(id); startEvent.setName(label); process.addFlowElement(startEvent); elementMap.put(id, startEvent); continue; - } else if ("end".equals(shape)) { + } else if (BpmnConstants.NodeShape.END.equals(shape)) { EndEvent endEvent = new EndEvent(); endEvent.setId(id); endEvent.setName(label); @@ -140,14 +142,14 @@ public class BpmnConverter { // 如果没有开始事件,创建一个并连接到第一个任务 if (startEvent == null && firstElement != null) { startEvent = new StartEvent(); - startEvent.setId("startEvent"); - startEvent.setName("开始"); + startEvent.setId(BpmnConstants.DefaultNodeId.START_EVENT); + startEvent.setName(BpmnConstants.DefaultNodeName.START_EVENT); process.addFlowElement(startEvent); elementMap.put(startEvent.getId(), startEvent); // 创建从开始事件到第一个任务的连线 SequenceFlow startFlow = new SequenceFlow(); - startFlow.setId("flow_start"); + startFlow.setId(BpmnConstants.DefaultNodeId.START_FLOW); startFlow.setSourceRef(startEvent.getId()); startFlow.setTargetRef(firstElement.getId()); process.addFlowElement(startFlow); @@ -156,14 +158,14 @@ public class BpmnConverter { // 如果没有结束事件,创建一个并从最后一个任务连接到它 if (endEvent == null && lastElement != null) { endEvent = new EndEvent(); - endEvent.setId("endEvent"); - endEvent.setName("结束"); + endEvent.setId(BpmnConstants.DefaultNodeId.END_EVENT); + endEvent.setName(BpmnConstants.DefaultNodeName.END_EVENT); process.addFlowElement(endEvent); elementMap.put(endEvent.getId(), endEvent); // 创建从最后一个任务到结束事件的连线 SequenceFlow endFlow = new SequenceFlow(); - endFlow.setId("flow_end"); + endFlow.setId(BpmnConstants.DefaultNodeId.END_FLOW); endFlow.setSourceRef(lastElement.getId()); endFlow.setTargetRef(endEvent.getId()); process.addFlowElement(endFlow); @@ -171,11 +173,13 @@ public class BpmnConverter { } private boolean isNode(JsonNode cell) { - return cell.has("shape") && !cell.path("shape").asText().equals("edge"); + return cell.has(BpmnConstants.NodeAttribute.SHAPE) && + !BpmnConstants.NodeShape.EDGE.equals(cell.path(BpmnConstants.NodeAttribute.SHAPE).asText()); } private boolean isEdge(JsonNode cell) { - return cell.has("shape") && cell.path("shape").asText().equals("edge"); + return cell.has(BpmnConstants.NodeAttribute.SHAPE) && + BpmnConstants.NodeShape.EDGE.equals(cell.path(BpmnConstants.NodeAttribute.SHAPE).asText()); } @SuppressWarnings("unchecked") @@ -187,9 +191,9 @@ public class BpmnConverter { } private void handleSequenceFlow(JsonNode cell, Process process, Map elementMap) { - String sourceId = cell.path("source").asText(); - String targetId = cell.path("target").asText(); - String id = cell.path("id").asText(); + String sourceId = cell.path(BpmnConstants.NodeAttribute.SOURCE).asText(); + String targetId = cell.path(BpmnConstants.NodeAttribute.TARGET).asText(); + String id = cell.path(BpmnConstants.NodeAttribute.ID).asText(); FlowElement sourceElement = elementMap.get(sourceId); FlowElement targetElement = elementMap.get(targetId); @@ -201,13 +205,15 @@ public class BpmnConverter { sequenceFlow.setTargetRef(targetId); // 设置连线名称 - JsonNode label = cell.path("data").path("label"); + JsonNode label = cell.path(BpmnConstants.NodeAttribute.DATA) + .path(BpmnConstants.NodeAttribute.LABEL); if (!label.isMissingNode()) { sequenceFlow.setName(label.asText()); } // 设置条件表达式 - JsonNode condition = cell.path("data").path("condition"); + JsonNode condition = cell.path(BpmnConstants.NodeAttribute.DATA) + .path(BpmnConstants.NodeAttribute.CONDITION); if (!condition.isMissingNode()) { sequenceFlow.setConditionExpression(condition.asText()); }