diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/NodeType.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/NodeType.java
index 8fd5b43c..d2829684 100644
--- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/NodeType.java
+++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/enums/NodeType.java
@@ -8,8 +8,8 @@ import com.fasterxml.jackson.annotation.JsonValue;
* @date 2024-12-11
*/
public enum NodeType {
- START("start"),
- END("end"),
+ START_EVENT("startEvent"),
+ END_EVENT("endEvent"),
USER_TASK("userTask"),
SERVICE_TASK("serviceTask"),
SCRIPT_TASK("scriptTask"),
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 afb79072..ad3809e6 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
@@ -99,9 +99,9 @@ public class BpmnConverter {
}
switch (node.getType()) {
- case START:
+ case START_EVENT:
return createStartEvent(node);
- case END:
+ case END_EVENT:
return createEndEvent(node);
case SERVICE_TASK:
return createServiceTask(node);
diff --git a/backend/src/main/resources/db/migration/V1.0.1__init_data.sql b/backend/src/main/resources/db/migration/V1.0.1__init_data.sql
index 56029c8e..15f28e3c 100644
--- a/backend/src/main/resources/db/migration/V1.0.1__init_data.sql
+++ b/backend/src/main/resources/db/migration/V1.0.1__init_data.sql
@@ -166,8 +166,8 @@ INSERT INTO workflow_definition (
-- 简单流程:开始 -> 服务任务 -> 结束
(
'简单服务任务流程', 'simple_service_flow', 1, '一个包含服务任务的简单流程', 'test',
- '',
- '{"nodes":[{"id":"start1","type":"start","name":"开始","position":{"x":100,"y":100},"config":{"type":"start"},"properties":{},"size":{"width":40,"height":40}},{"id":"service1","type":"serviceTask","name":"服务任务","position":{"x":300,"y":100},"config":{"type":"serviceTask","implementation":"shell","fields":{"script":{"string":"echo \\"Hello World\\""}}},"properties":{},"size":{"width":100,"height":60}},{"id":"end1","type":"end","name":"结束","position":{"x":500,"y":100},"config":{"type":"end"},"properties":{},"size":{"width":40,"height":40}}],"edges":[{"id":"flow1","source":"start1","target":"service1","name":"","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow2","source":"service1","target":"end1","name":"","config":{"type":"sequenceFlow"},"properties":{}}],"properties":{}}',
+ '',
+ '{"nodes":[{"id":"startEvent1","type":"startEvent","name":"开始","position":{"x":100,"y":100},"config":{"type":"startEvent"},"properties":{},"size":{"width":40,"height":40}},{"id":"service1","type":"serviceTask","name":"服务任务","position":{"x":300,"y":100},"config":{"type":"serviceTask","implementation":"shell","fields":{"script":{"string":"echo \\"Hello World\\""}}},"properties":{},"size":{"width":100,"height":60}},{"id":"endEvent1","type":"endEvent","name":"结束","position":{"x":500,"y":100},"config":{"type":"endEvent"},"properties":{},"size":{"width":40,"height":40}}],"edges":[{"id":"flow1","source":"startEvent1","target":"service1","name":"","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow2","source":"service1","target":"endEvent1","name":"","config":{"type":"sequenceFlow"},"properties":{}}],"properties":{}}',
'{"formItems":[]}',
'["simple","test","service"]',
'PUBLISHED', TRUE, 'http://www.flowable.org/test',
@@ -177,8 +177,8 @@ INSERT INTO workflow_definition (
-- 用户任务流程:开始 -> 用户任务 -> 结束
(
'用户审批流程', 'user_approval_flow', 1, '一个简单的用户审批流程', 'approval',
- '',
- '{"nodes":[{"id":"start1","type":"start","name":"开始","position":{"x":100,"y":100},"config":{"type":"start"},"properties":{},"size":{"width":40,"height":40}},{"id":"user1","type":"userTask","name":"审批任务","position":{"x":300,"y":100},"config":{"type":"userTask","assignee":"user1"},"properties":{},"size":{"width":100,"height":60}},{"id":"end1","type":"end","name":"结束","position":{"x":500,"y":100},"config":{"type":"end"},"properties":{},"size":{"width":40,"height":40}}],"edges":[{"id":"flow1","source":"start1","target":"user1","name":"提交审批","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow2","source":"user1","target":"end1","name":"审批完成","config":{"type":"sequenceFlow"},"properties":{}}],"properties":{}}',
+ '',
+ '{"nodes":[{"id":"startEvent1","type":"startEvent","name":"开始","position":{"x":100,"y":100},"config":{"type":"startEvent"},"properties":{},"size":{"width":40,"height":40}},{"id":"user1","type":"userTask","name":"审批任务","position":{"x":300,"y":100},"config":{"type":"userTask","assignee":"user1"},"properties":{},"size":{"width":100,"height":60}},{"id":"endEvent1","type":"endEvent","name":"结束","position":{"x":500,"y":100},"config":{"type":"endEvent"},"properties":{},"size":{"width":40,"height":40}}],"edges":[{"id":"flow1","source":"startEvent1","target":"user1","name":"提交审批","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow2","source":"user1","target":"endEvent1","name":"审批完成","config":{"type":"sequenceFlow"},"properties":{}}],"properties":{}}',
'{"formItems":[{"type":"input","label":"意见","name":"comment","required":true}]}',
'["approval","user-task"]',
'PUBLISHED', TRUE, 'http://www.flowable.org/test',
@@ -188,8 +188,8 @@ INSERT INTO workflow_definition (
-- 复杂流程:开始 -> 服务任务 -> 用户任务 -> 脚本任务 -> 结束
(
'复杂业务流程', 'complex_business_flow', 1, '包含多种任务节点的复杂业务流程', 'business',
- '$${condition}',
- '{"nodes":[{"id":"start1","type":"start","name":"开始","position":{"x":100,"y":100},"config":{"type":"start"},"properties":{},"size":{"width":40,"height":40}},{"id":"service1","type":"serviceTask","name":"服务任务","position":{"x":300,"y":100},"config":{"type":"serviceTask","implementation":"com.example.ServiceTask"},"properties":{},"size":{"width":100,"height":60}},{"id":"user1","type":"userTask","name":"用户任务","position":{"x":500,"y":100},"config":{"type":"userTask","assignee":"user1"},"properties":{},"size":{"width":100,"height":60}},{"id":"script1","type":"scriptTask","name":"脚本任务","position":{"x":700,"y":100},"config":{"type":"scriptTask","scriptFormat":"groovy","script":"println \\"Hello\\""},"properties":{},"size":{"width":100,"height":60}},{"id":"end1","type":"end","name":"结束","position":{"x":900,"y":100},"config":{"type":"end"},"properties":{},"size":{"width":40,"height":40}}],"edges":[{"id":"flow1","source":"start1","target":"service1","name":"","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow2","source":"service1","target":"user1","name":"条件分支","config":{"type":"sequenceFlow","conditionExpression":"$${condition}"},"properties":{}},{"id":"flow3","source":"user1","target":"script1","name":"","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow4","source":"script1","target":"end1","name":"","config":{"type":"sequenceFlow"},"properties":{}}],"properties":{}}',
+ '',
+ '{"nodes":[{"id":"startEvent1","type":"startEvent","name":"开始","position":{"x":100,"y":100},"config":{"type":"startEvent"},"properties":{},"size":{"width":40,"height":40}},{"id":"service1","type":"serviceTask","name":"服务任务","position":{"x":300,"y":100},"config":{"type":"serviceTask","implementation":"com.example.ServiceTask"},"properties":{},"size":{"width":100,"height":60}},{"id":"user1","type":"userTask","name":"用户任务","position":{"x":500,"y":100},"config":{"type":"userTask","assignee":"user1"},"properties":{},"size":{"width":100,"height":60}},{"id":"script1","type":"scriptTask","name":"脚本任务","position":{"x":700,"y":100},"config":{"type":"scriptTask","scriptFormat":"groovy","script":"println \\"Hello\\""},"properties":{},"size":{"width":100,"height":60}},{"id":"endEvent1","type":"endEvent","name":"结束","position":{"x":900,"y":100},"config":{"type":"endEvent"},"properties":{},"size":{"width":40,"height":40}}],"edges":[{"id":"flow1","source":"startEvent1","target":"service1","name":"","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow2","source":"service1","target":"user1","name":"条件分支","config":{"type":"sequenceFlow","conditionExpression":"$${condition}"},"properties":{}},{"id":"flow3","source":"user1","target":"script1","name":"","config":{"type":"sequenceFlow"},"properties":{}},{"id":"flow4","source":"script1","target":"endEvent1","name":"","config":{"type":"sequenceFlow"},"properties":{}}],"properties":{}}',
'{"formItems":[{"type":"input","label":"业务参数","name":"businessParam","required":true},{"type":"select","label":"审批结果","name":"approvalResult","options":[{"label":"同意","value":"approve"},{"label":"拒绝","value":"reject"}]}]}',
'["complex","business","multi-task"]',
'PUBLISHED', TRUE, 'http://www.flowable.org/test',
diff --git a/backend/src/test/java/com/qqchen/deploy/backend/workflow/util/BpmnConverterTest.java b/backend/src/test/java/com/qqchen/deploy/backend/workflow/util/BpmnConverterTest.java
index 53b36459..c9b5f50c 100644
--- a/backend/src/test/java/com/qqchen/deploy/backend/workflow/util/BpmnConverterTest.java
+++ b/backend/src/test/java/com/qqchen/deploy/backend/workflow/util/BpmnConverterTest.java
@@ -34,8 +34,8 @@ class BpmnConverterTest {
// 开始节点
WorkflowNode startNode = new WorkflowNode();
- startNode.setId("start");
- startNode.setType(NodeType.START);
+ startNode.setId("startEvent1");
+ startNode.setType(NodeType.START_EVENT);
startNode.setName("开始");
startNode.setPosition(new Position(100.0, 100.0));
nodes.add(startNode);
@@ -48,7 +48,7 @@ class BpmnConverterTest {
serviceNode.setPosition(new Position(300.0, 100.0));
NodeConfig serviceConfig = new NodeConfig();
- serviceConfig.setImplementation("${shellTaskDelegate}");
+ serviceConfig.setImplementation("$${shellTaskDelegate}");
Map fields = new HashMap<>();
fields.put("script", "echo 'Hello World'");
fields.put("workDir", "/tmp");
@@ -59,8 +59,8 @@ class BpmnConverterTest {
// 结束节点
WorkflowNode endNode = new WorkflowNode();
- endNode.setId("end");
- endNode.setType(NodeType.END);
+ endNode.setId("endEvent1");
+ endNode.setType(NodeType.END_EVENT);
endNode.setName("结束");
endNode.setPosition(new Position(500.0, 100.0));
nodes.add(endNode);
@@ -71,7 +71,7 @@ class BpmnConverterTest {
// 开始 -> 服务任务
WorkflowEdge edge1 = new WorkflowEdge();
edge1.setId("flow1");
- edge1.setSource("start");
+ edge1.setSource("startEvent1");
edge1.setTarget("service1");
edge1.setName("流转到服务任务");
edges.add(edge1);
@@ -80,7 +80,7 @@ class BpmnConverterTest {
WorkflowEdge edge2 = new WorkflowEdge();
edge2.setId("flow2");
edge2.setSource("service1");
- edge2.setTarget("end");
+ edge2.setTarget("endEvent1");
edge2.setName("流转到结束");
edges.add(edge2);
@@ -107,7 +107,7 @@ class BpmnConverterTest {
assertEquals(5, process.getFlowElements().size());
// 验证开始节点
- StartEvent startEvent = (StartEvent) process.getFlowElement("start");
+ StartEvent startEvent = (StartEvent) process.getFlowElement("startEvent1");
assertNotNull(startEvent);
assertEquals("开始", startEvent.getName());
@@ -115,7 +115,7 @@ class BpmnConverterTest {
ServiceTask serviceTask = (ServiceTask) process.getFlowElement("service1");
assertNotNull(serviceTask);
assertEquals("服务任务", serviceTask.getName());
- assertEquals("${shellTaskDelegate}", serviceTask.getImplementation());
+ assertEquals("$${shellTaskDelegate}", serviceTask.getImplementation());
// 验证服务任务字段
List fieldExtensions = serviceTask.getFieldExtensions();
@@ -132,7 +132,7 @@ class BpmnConverterTest {
assertEquals("30", fieldMap.get("timeout"));
// 验证结束节点
- EndEvent endEvent = (EndEvent) process.getFlowElement("end");
+ EndEvent endEvent = (EndEvent) process.getFlowElement("endEvent1");
assertNotNull(endEvent);
assertEquals("结束", endEvent.getName());
@@ -140,14 +140,14 @@ class BpmnConverterTest {
SequenceFlow flow1 = (SequenceFlow) process.getFlowElement("flow1");
assertNotNull(flow1);
assertEquals("流转到服务任务", flow1.getName());
- assertEquals("start", flow1.getSourceRef());
+ assertEquals("startEvent1", flow1.getSourceRef());
assertEquals("service1", flow1.getTargetRef());
SequenceFlow flow2 = (SequenceFlow) process.getFlowElement("flow2");
assertNotNull(flow2);
assertEquals("流转到结束", flow2.getName());
assertEquals("service1", flow2.getSourceRef());
- assertEquals("end", flow2.getTargetRef());
+ assertEquals("endEvent1", flow2.getTargetRef());
}
@Test
@@ -160,8 +160,8 @@ class BpmnConverterTest {
// 开始节点
WorkflowNode startNode = new WorkflowNode();
- startNode.setId("start");
- startNode.setType(NodeType.START);
+ startNode.setId("startEvent1");
+ startNode.setType(NodeType.START_EVENT);
startNode.setName("开始");
startNode.setPosition(new Position(100.0, 100.0));
nodes.add(startNode);
@@ -174,10 +174,10 @@ class BpmnConverterTest {
userNode.setPosition(new Position(300.0, 100.0));
NodeConfig userConfig = new NodeConfig();
- userConfig.setAssignee("${initiator}");
+ userConfig.setAssignee("$${initiator}");
userConfig.setCandidateUsers(Arrays.asList("user1", "user2"));
userConfig.setCandidateGroups(Arrays.asList("group1", "group2"));
- userConfig.setDueDate("${dueDate}");
+ userConfig.setDueDate("$${dueDate}");
userConfig.setPriority(1);
userConfig.setFormKey("form1");
userNode.setConfig(userConfig);
@@ -185,8 +185,8 @@ class BpmnConverterTest {
// 结束节点
WorkflowNode endNode = new WorkflowNode();
- endNode.setId("end");
- endNode.setType(NodeType.END);
+ endNode.setId("endEvent1");
+ endNode.setType(NodeType.END_EVENT);
endNode.setName("结束");
endNode.setPosition(new Position(500.0, 100.0));
nodes.add(endNode);
@@ -197,7 +197,7 @@ class BpmnConverterTest {
// 开始 -> 用户任务
WorkflowEdge edge1 = new WorkflowEdge();
edge1.setId("flow1");
- edge1.setSource("start");
+ edge1.setSource("startEvent1");
edge1.setTarget("user1");
edge1.setName("提交审批");
edges.add(edge1);
@@ -206,7 +206,7 @@ class BpmnConverterTest {
WorkflowEdge edge2 = new WorkflowEdge();
edge2.setId("flow2");
edge2.setSource("user1");
- edge2.setTarget("end");
+ edge2.setTarget("endEvent1");
edge2.setName("审批完成");
edges.add(edge2);
@@ -233,10 +233,10 @@ class BpmnConverterTest {
UserTask userTask = (UserTask) process.getFlowElement("user1");
assertNotNull(userTask);
assertEquals("审批任务", userTask.getName());
- assertEquals("${initiator}", userTask.getAssignee());
+ assertEquals("$${initiator}", userTask.getAssignee());
assertEquals(Arrays.asList("user1", "user2"), userTask.getCandidateUsers());
assertEquals(Arrays.asList("group1", "group2"), userTask.getCandidateGroups());
- assertEquals("${dueDate}", userTask.getDueDate());
+ assertEquals("$${dueDate}", userTask.getDueDate());
assertEquals("1", userTask.getPriority());
assertEquals("form1", userTask.getFormKey());
}
@@ -258,8 +258,8 @@ class BpmnConverterTest {
// 开始节点
WorkflowNode startNode = new WorkflowNode();
- startNode.setId("start");
- startNode.setType(NodeType.START);
+ startNode.setId("startEvent1");
+ startNode.setType(NodeType.START_EVENT);
startNode.setName("开始");
startNode.setPosition(new Position(100.0, 100.0));
nodes.add(startNode);
@@ -272,7 +272,7 @@ class BpmnConverterTest {
serviceNode.setPosition(new Position(250.0, 100.0));
NodeConfig serviceConfig = new NodeConfig();
- serviceConfig.setImplementation("${shellTaskDelegate}");
+ serviceConfig.setImplementation("$${shellTaskDelegate}");
Map serviceFields = new HashMap<>();
serviceFields.put("script", "echo 'Hello World'");
serviceFields.put("workDir", "/tmp");
@@ -288,7 +288,7 @@ class BpmnConverterTest {
userNode.setPosition(new Position(400.0, 100.0));
NodeConfig userConfig = new NodeConfig();
- userConfig.setAssignee("${initiator}");
+ userConfig.setAssignee("$${initiator}");
List candidateUsers = Arrays.asList("user1", "user2");
List candidateGroups = Arrays.asList("group1", "group2");
userConfig.setCandidateUsers(candidateUsers);
@@ -315,8 +315,8 @@ class BpmnConverterTest {
// 结束节点
WorkflowNode endNode = new WorkflowNode();
- endNode.setId("end");
- endNode.setType(NodeType.END);
+ endNode.setId("endEvent1");
+ endNode.setType(NodeType.END_EVENT);
endNode.setName("结束");
endNode.setPosition(new Position(700.0, 100.0));
nodes.add(endNode);
@@ -327,7 +327,7 @@ class BpmnConverterTest {
// 开始 -> 服务任务
WorkflowEdge edge1 = new WorkflowEdge();
edge1.setId("flow1");
- edge1.setSource("start");
+ edge1.setSource("startEvent1");
edge1.setTarget("service1");
edge1.setName("流转到服务任务");
EdgeConfig edgeConfig1 = new EdgeConfig();
@@ -343,7 +343,7 @@ class BpmnConverterTest {
edge2.setName("流转到用户任务");
EdgeConfig edgeConfig2 = new EdgeConfig();
edgeConfig2.setType("sequence");
- edgeConfig2.setCondition("${approved}");
+ edgeConfig2.setCondition("$${approved}");
edge2.setConfig(edgeConfig2);
edges.add(edge2);
@@ -362,7 +362,7 @@ class BpmnConverterTest {
WorkflowEdge edge4 = new WorkflowEdge();
edge4.setId("flow4");
edge4.setSource("script1");
- edge4.setTarget("end");
+ edge4.setTarget("endEvent1");
edge4.setName("流转到结束");
EdgeConfig edgeConfig4 = new EdgeConfig();
edgeConfig4.setType("sequence");
@@ -402,7 +402,7 @@ class BpmnConverterTest {
assertEquals(9, process.getFlowElements().size()); // 5个节点 + 4个连线
// 验证开始节点
- StartEvent startEvent = (StartEvent) process.getFlowElement("start");
+ StartEvent startEvent = (StartEvent) process.getFlowElement("startEvent1");
assertNotNull(startEvent);
assertEquals("开始", startEvent.getName());
@@ -410,13 +410,13 @@ class BpmnConverterTest {
ServiceTask serviceTask = (ServiceTask) process.getFlowElement("service1");
assertNotNull(serviceTask);
assertEquals("服务任务", serviceTask.getName());
- assertEquals("${shellTaskDelegate}", serviceTask.getImplementation());
+ assertEquals("$${shellTaskDelegate}", serviceTask.getImplementation());
// 验证用户任务
UserTask userTask = (UserTask) process.getFlowElement("user1");
assertNotNull(userTask);
assertEquals("用户任务", userTask.getName());
- assertEquals("${initiator}", userTask.getAssignee());
+ assertEquals("$${initiator}", userTask.getAssignee());
assertEquals(Arrays.asList("user1", "user2"), userTask.getCandidateUsers());
assertEquals(Arrays.asList("group1", "group2"), userTask.getCandidateGroups());
@@ -427,13 +427,13 @@ class BpmnConverterTest {
assertEquals("groovy", scriptTask.getScriptFormat());
// 验证结束节点
- EndEvent endEvent = (EndEvent) process.getFlowElement("end");
+ EndEvent endEvent = (EndEvent) process.getFlowElement("endEvent1");
assertNotNull(endEvent);
assertEquals("结束", endEvent.getName());
// 验证连线
SequenceFlow flow2 = (SequenceFlow) process.getFlowElement("flow2");
assertNotNull(flow2);
- assertEquals("${approved}", flow2.getConditionExpression());
+ assertEquals("$${approved}", flow2.getConditionExpression());
}
}
\ No newline at end of file