Commit 1e97ca282b26715fd3f96c9fb75bb4dffba3b593
Merge remote-tracking branch 'origin/feature/bpm' into feature/bpm
# Conflicts: # yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModelNodeType.java
Showing
2 changed files
with
26 additions
and
6 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModelNodeType.java
| ... | ... | @@ -30,6 +30,8 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 30 | 30 | EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), // TODO @jason:是不是改成叫 条件分支? |
| 31 | 31 | PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), // TODO @jason:是不是一个 并行分支 ?就可以啦? |
| 32 | 32 | PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"), |
| 33 | + INCLUSIVE_GATEWAY_FORK_NODE(7, "包容网关分叉节点"), | |
| 34 | + INCLUSIVE_GATEWAY_JOIN_NODE(8, "包容网关聚合节点"), | |
| 33 | 35 | ; |
| 34 | 36 | |
| 35 | 37 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray(); |
| ... | ... | @@ -38,9 +40,8 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 38 | 40 | private final String name; |
| 39 | 41 | |
| 40 | 42 | public static boolean isGatewayNode(Integer type) { |
| 41 | - // TODO 后续增加并行网关的支持 | |
| 42 | - return Objects.equals(EXCLUSIVE_GATEWAY_NODE.getType(), type) | |
| 43 | - || Objects.equals(PARALLEL_GATEWAY_FORK_NODE.getType(), type); | |
| 43 | + return Objects.equals(EXCLUSIVE_GATEWAY_NODE.getType(), type) || Objects.equals(PARALLEL_GATEWAY_FORK_NODE.getType(), type) | |
| 44 | + || Objects.equals(INCLUSIVE_GATEWAY_FORK_NODE.getType(), type) ; | |
| 44 | 45 | } |
| 45 | 46 | |
| 46 | 47 | 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
| ... | ... | @@ -387,14 +387,16 @@ public class BpmnModelUtils { |
| 387 | 387 | case START_EVENT_NODE: |
| 388 | 388 | case APPROVE_USER_NODE: |
| 389 | 389 | case SCRIPT_TASK_NODE: |
| 390 | - case PARALLEL_GATEWAY_JOIN_NODE:{ | |
| 390 | + case PARALLEL_GATEWAY_JOIN_NODE: | |
| 391 | + case INCLUSIVE_GATEWAY_JOIN_NODE:{ | |
| 391 | 392 | addBpmnSequenceFlowElement(mainProcess, node.getId(), childNode.getId(), null, null); |
| 392 | 393 | // 递归调用后续节点 |
| 393 | 394 | addBpmnSequenceFlow(mainProcess, childNode, endId); |
| 394 | 395 | break; |
| 395 | 396 | } |
| 396 | 397 | case PARALLEL_GATEWAY_FORK_NODE: |
| 397 | - case EXCLUSIVE_GATEWAY_NODE: { | |
| 398 | + case EXCLUSIVE_GATEWAY_NODE: | |
| 399 | + case INCLUSIVE_GATEWAY_FORK_NODE:{ | |
| 398 | 400 | String gateWayEndId = (childNode == null || childNode.getId() == null) ? BpmnModelConstants.END_EVENT_ID : childNode.getId(); |
| 399 | 401 | List<BpmSimpleModelNodeVO> conditionNodes = node.getConditionNodes(); |
| 400 | 402 | Assert.notEmpty(conditionNodes, "网关节点的条件节点不能为空"); |
| ... | ... | @@ -456,6 +458,12 @@ public class BpmnModelUtils { |
| 456 | 458 | case PARALLEL_GATEWAY_JOIN_NODE: |
| 457 | 459 | addBpmnParallelGatewayNode(mainProcess, simpleModelNode); |
| 458 | 460 | break; |
| 461 | + case INCLUSIVE_GATEWAY_FORK_NODE: | |
| 462 | + addBpmnInclusiveGatewayNode(mainProcess, simpleModelNode, Boolean.TRUE); | |
| 463 | + break; | |
| 464 | + case INCLUSIVE_GATEWAY_JOIN_NODE: | |
| 465 | + addBpmnInclusiveGatewayNode(mainProcess, simpleModelNode, Boolean.FALSE); | |
| 466 | + break; | |
| 459 | 467 | default: { |
| 460 | 468 | // TODO 其它节点类型的实现 |
| 461 | 469 | } |
| ... | ... | @@ -510,11 +518,22 @@ public class BpmnModelUtils { |
| 510 | 518 | Assert.notEmpty(node.getConditionNodes(), "网关节点的条件节点不能为空"); |
| 511 | 519 | ExclusiveGateway exclusiveGateway = new ExclusiveGateway(); |
| 512 | 520 | exclusiveGateway.setId(node.getId()); |
| 513 | - // 条件节点的最后一个条件为 网关的 default sequence flow | |
| 521 | + // 网关的最后一个条件为 网关的 default sequence flow | |
| 514 | 522 | exclusiveGateway.setDefaultFlow(String.format("%s_SequenceFlow_%d", node.getId(), node.getConditionNodes().size())); |
| 515 | 523 | mainProcess.addFlowElement(exclusiveGateway); |
| 516 | 524 | } |
| 517 | 525 | |
| 526 | + private static void addBpmnInclusiveGatewayNode(Process mainProcess, BpmSimpleModelNodeVO node, Boolean isFork) { | |
| 527 | + InclusiveGateway inclusiveGateway = new InclusiveGateway(); | |
| 528 | + inclusiveGateway.setId(node.getId()); | |
| 529 | + if (isFork) { | |
| 530 | + Assert.notEmpty(node.getConditionNodes(), "网关节点的条件节点不能为空"); | |
| 531 | + // 网关的最后一个条件为 网关的 default sequence flow | |
| 532 | + inclusiveGateway.setDefaultFlow(String.format("%s_SequenceFlow_%d", node.getId(), node.getConditionNodes().size())); | |
| 533 | + } | |
| 534 | + mainProcess.addFlowElement(inclusiveGateway); | |
| 535 | + } | |
| 536 | + | |
| 518 | 537 | private static void addBpmnEndEventNode(Process mainProcess) { |
| 519 | 538 | EndEvent endEvent = new EndEvent(); |
| 520 | 539 | endEvent.setId(BpmnModelConstants.END_EVENT_ID); | ... | ... |