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 | 19 | |
| 20 | 20 | // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; |
| 21 | 21 | START_EVENT_NODE(0, "开始节点"), |
| 22 | - APPROVE_USER_NODE (1, "审批人节点"), | |
| 22 | + APPROVE_USER_NODE(1, "审批人节点"), | |
| 23 | 23 | // 抄送人节点、对应 BPMN 的 ScriptTask. 使用ScriptTask 原因。好像 ServiceTask 自定义属性不能写入 XML |
| 24 | 24 | SCRIPT_TASK_NODE(2, "抄送人节点"), |
| 25 | 25 | EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), |
| 26 | + PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), | |
| 27 | + PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"), | |
| 26 | 28 | END_EVENT_NODE(-2, "结束节点"); |
| 27 | 29 | |
| 28 | 30 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray(); |
| ... | ... | @@ -32,7 +34,8 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 32 | 34 | |
| 33 | 35 | public static boolean isGatewayNode(Integer type) { |
| 34 | 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 | 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 | 385 | switch (nodeType) { |
| 386 | 386 | case START_EVENT_NODE: |
| 387 | 387 | case APPROVE_USER_NODE: |
| 388 | - case SCRIPT_TASK_NODE: { | |
| 388 | + case SCRIPT_TASK_NODE: | |
| 389 | + case PARALLEL_GATEWAY_JOIN_NODE:{ | |
| 389 | 390 | addBpmnSequenceFlowElement(mainProcess, node.getId(), childNode.getId(), null, null); |
| 390 | 391 | // 递归调用后续节点 |
| 391 | 392 | addBpmnSequenceFlow(mainProcess, childNode, endId); |
| 392 | 393 | break; |
| 393 | 394 | } |
| 395 | + case PARALLEL_GATEWAY_FORK_NODE: | |
| 394 | 396 | case EXCLUSIVE_GATEWAY_NODE: { |
| 395 | 397 | String gateWayEndId = (childNode == null || childNode.getId() == null) ? BpmnModelConstants.END_EVENT_ID : childNode.getId(); |
| 396 | 398 | List<BpmSimpleModelNodeVO> conditionNodes = node.getConditionNodes(); |
| ... | ... | @@ -449,6 +451,10 @@ public class BpmnModelUtils { |
| 449 | 451 | case EXCLUSIVE_GATEWAY_NODE: |
| 450 | 452 | addBpmnExclusiveGatewayNode(mainProcess, simpleModelNode); |
| 451 | 453 | break; |
| 454 | + case PARALLEL_GATEWAY_FORK_NODE: | |
| 455 | + case PARALLEL_GATEWAY_JOIN_NODE: | |
| 456 | + addBpmnParallelGatewayNode(mainProcess, simpleModelNode); | |
| 457 | + break; | |
| 452 | 458 | default: { |
| 453 | 459 | // TODO 其它节点类型的实现 |
| 454 | 460 | } |
| ... | ... | @@ -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 | 487 | private static void addBpmnScriptTaSskNode(Process mainProcess, BpmSimpleModelNodeVO node) { |
| 476 | 488 | ScriptTask scriptTask = new ScriptTask(); |
| 477 | 489 | scriptTask.setId(node.getId()); | ... | ... |