Commit df936deecaf6bc1db9d40d0ae1c8dec84524bd08
1 parent
32809c3e
仿钉钉流程设计-并行网关的实现
Showing
2 changed files
with
18 additions
and
3 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModelNodeType.java
| @@ -19,10 +19,12 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { | @@ -19,10 +19,12 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { | ||
| 19 | 19 | ||
| 20 | // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; | 20 | // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; |
| 21 | START_EVENT_NODE(0, "开始节点"), | 21 | START_EVENT_NODE(0, "开始节点"), |
| 22 | - APPROVE_USER_NODE (1, "审批人节点"), | 22 | + APPROVE_USER_NODE(1, "审批人节点"), |
| 23 | // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML | 23 | // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML |
| 24 | SCRIPT_TASK_NODE(2, "抄送人节点"), | 24 | SCRIPT_TASK_NODE(2, "抄送人节点"), |
| 25 | EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), | 25 | EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), |
| 26 | + PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), | ||
| 27 | + PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"), | ||
| 26 | END_EVENT_NODE(-2, "结束节点"); | 28 | END_EVENT_NODE(-2, "结束节点"); |
| 27 | 29 | ||
| 28 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray(); | 30 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray(); |
| @@ -32,7 +34,8 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { | @@ -32,7 +34,8 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { | ||
| 32 | 34 | ||
| 33 | public static boolean isGatewayNode(Integer type) { | 35 | public static boolean isGatewayNode(Integer type) { |
| 34 | // TODO 后续增加并行网关的支持 | 36 | // TODO 后续增加并行网关的支持 |
| 35 | - return Objects.equals(EXCLUSIVE_GATEWAY_NODE.getType(), type); | 37 | + return Objects.equals(EXCLUSIVE_GATEWAY_NODE.getType(), type) |
| 38 | + || Objects.equals(PARALLEL_GATEWAY_FORK_NODE.getType(), type); | ||
| 36 | } | 39 | } |
| 37 | 40 | ||
| 38 | public static BpmSimpleModelNodeType valueOf(Integer type) { | 41 | public static BpmSimpleModelNodeType valueOf(Integer type) { |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| @@ -385,12 +385,14 @@ public class BpmnModelUtils { | @@ -385,12 +385,14 @@ public class BpmnModelUtils { | ||
| 385 | switch (nodeType) { | 385 | switch (nodeType) { |
| 386 | case START_EVENT_NODE: | 386 | case START_EVENT_NODE: |
| 387 | case APPROVE_USER_NODE: | 387 | case APPROVE_USER_NODE: |
| 388 | - case SCRIPT_TASK_NODE: { | 388 | + case SCRIPT_TASK_NODE: |
| 389 | + case PARALLEL_GATEWAY_JOIN_NODE:{ | ||
| 389 | addBpmnSequenceFlowElement(mainProcess, node.getId(), childNode.getId(), null, null); | 390 | addBpmnSequenceFlowElement(mainProcess, node.getId(), childNode.getId(), null, null); |
| 390 | // 递归调用后续节点 | 391 | // 递归调用后续节点 |
| 391 | addBpmnSequenceFlow(mainProcess, childNode, endId); | 392 | addBpmnSequenceFlow(mainProcess, childNode, endId); |
| 392 | break; | 393 | break; |
| 393 | } | 394 | } |
| 395 | + case PARALLEL_GATEWAY_FORK_NODE: | ||
| 394 | case EXCLUSIVE_GATEWAY_NODE: { | 396 | case EXCLUSIVE_GATEWAY_NODE: { |
| 395 | String gateWayEndId = (childNode == null || childNode.getId() == null) ? BpmnModelConstants.END_EVENT_ID : childNode.getId(); | 397 | String gateWayEndId = (childNode == null || childNode.getId() == null) ? BpmnModelConstants.END_EVENT_ID : childNode.getId(); |
| 396 | List<BpmSimpleModelNodeVO> conditionNodes = node.getConditionNodes(); | 398 | List<BpmSimpleModelNodeVO> conditionNodes = node.getConditionNodes(); |
| @@ -449,6 +451,10 @@ public class BpmnModelUtils { | @@ -449,6 +451,10 @@ public class BpmnModelUtils { | ||
| 449 | case EXCLUSIVE_GATEWAY_NODE: | 451 | case EXCLUSIVE_GATEWAY_NODE: |
| 450 | addBpmnExclusiveGatewayNode(mainProcess, simpleModelNode); | 452 | addBpmnExclusiveGatewayNode(mainProcess, simpleModelNode); |
| 451 | break; | 453 | break; |
| 454 | + case PARALLEL_GATEWAY_FORK_NODE: | ||
| 455 | + case PARALLEL_GATEWAY_JOIN_NODE: | ||
| 456 | + addBpmnParallelGatewayNode(mainProcess, simpleModelNode); | ||
| 457 | + break; | ||
| 452 | default: { | 458 | default: { |
| 453 | // TODO 其它节点类型的实现 | 459 | // TODO 其它节点类型的实现 |
| 454 | } | 460 | } |
| @@ -472,6 +478,12 @@ public class BpmnModelUtils { | @@ -472,6 +478,12 @@ public class BpmnModelUtils { | ||
| 472 | } | 478 | } |
| 473 | } | 479 | } |
| 474 | 480 | ||
| 481 | + private static void addBpmnParallelGatewayNode(Process mainProcess, BpmSimpleModelNodeVO node) { | ||
| 482 | + ParallelGateway parallelGateway = new ParallelGateway(); | ||
| 483 | + parallelGateway.setId(node.getId()); | ||
| 484 | + mainProcess.addFlowElement(parallelGateway); | ||
| 485 | + } | ||
| 486 | + | ||
| 475 | private static void addBpmnScriptTaSskNode(Process mainProcess, BpmSimpleModelNodeVO node) { | 487 | private static void addBpmnScriptTaSskNode(Process mainProcess, BpmSimpleModelNodeVO node) { |
| 476 | ScriptTask scriptTask = new ScriptTask(); | 488 | ScriptTask scriptTask = new ScriptTask(); |
| 477 | scriptTask.setId(node.getId()); | 489 | scriptTask.setId(node.getId()); |