Commit df936deecaf6bc1db9d40d0ae1c8dec84524bd08

Authored by jason
1 parent 32809c3e

仿钉钉流程设计-并行网关的实现

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