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