Commit 1e97ca282b26715fd3f96c9fb75bb4dffba3b593

Authored by YunaiV
2 parents 95dbf4f8 98998cff

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
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);
... ...