Commit ae3c63eb29977d069dd986a16842411b977eb0a9

Authored by YunaiV
1 parent 34c8f4ca

【代码评审】BPM:Simple 设计器 - 路由分支

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO.java
... ... @@ -39,6 +39,7 @@ public class BpmSimpleModelNodeVO {
39 39 @Schema(description = "条件节点")
40 40 private List<BpmSimpleModelNodeVO> conditionNodes; // 补充说明:有且仅有条件、并行、包容等分支会使用
41 41  
  42 + // TODO @jason:conditionType、conditionExpression、defaultFlow、conditionGroups 搞成一个 condition 属性,会好点么?
42 43 @Schema(description = "条件类型", example = "1")
43 44 @InEnum(BpmSimpleModeConditionType.class)
44 45 private Integer conditionType; // 仅用于条件节点 BpmSimpleModelNodeType.CONDITION_NODE
... ... @@ -251,6 +252,7 @@ public class BpmSimpleModelNodeVO {
251 252 @Schema(description = "运算符右边的值", example = "1")
252 253 @NotEmpty(message = "运算符右边的值不能为空")
253 254 private String rightSide;
  255 +
254 256 }
255 257  
256 258 @Schema(description = "延迟器设置", example = "{}")
... ... @@ -269,8 +271,10 @@ public class BpmSimpleModelNodeVO {
269 271 @Schema(description = "延迟时间表达式", example = "PT1H,2025-01-01T00:00:00")
270 272 @NotEmpty(message = "延迟时间表达式不能为空")
271 273 private String delayTime;
  274 +
272 275 }
273 276  
  277 + // TODO @lesan:routeGroups
274 278 @Schema(description = "路由分支组", example = "[]")
275 279 private List<RouteCondition> routeGroup;
276 280  
... ... @@ -282,10 +286,11 @@ public class BpmSimpleModelNodeVO {
282 286 @Valid
283 287 public static class RouteCondition {
284 288  
285   - @Schema(description = "节点Id", example = "Activity_xxx")
286   - @NotEmpty(message = "节点Id不能为空")
  289 + @Schema(description = "节点 Id", example = "Activity_xxx")
  290 + @NotEmpty(message = "节点 Id 不能为空")
287 291 private String nodeId;
288 292  
  293 + // TODO @lesan:type、expression、groups;(可以晚点改,在和 conditionType、conditionExpression、defaultFlow、conditionGroups 讨论!)
289 294 @Schema(description = "条件类型", example = "1")
290 295 @InEnum(BpmSimpleModeConditionType.class)
291 296 @NotNull(message = "条件类型不能为空")
... ... @@ -296,6 +301,7 @@ public class BpmSimpleModelNodeVO {
296 301  
297 302 @Schema(description = "条件组", example = "{}")
298 303 private ConditionGroups conditionGroups;
  304 +
299 305 }
300 306  
301 307 }
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
... ... @@ -42,8 +42,7 @@ public class SimpleModelUtils {
42 42 List<NodeConvert> converts = asList(new StartNodeConvert(), new EndNodeConvert(),
43 43 new StartUserNodeConvert(), new ApproveNodeConvert(), new CopyNodeConvert(),
44 44 new DelayTimerNodeConvert(),
45   - new ConditionBranchNodeConvert(), new ParallelBranchNodeConvert(), new InclusiveBranchNodeConvert(),
46   - new RouteBranchNodeConvert());
  45 + new ConditionBranchNodeConvert(), new ParallelBranchNodeConvert(), new InclusiveBranchNodeConvert(), new RouteBranchNodeConvert());
47 46 converts.forEach(convert -> NODE_CONVERTS.put(convert.getType(), convert));
48 47 }
49 48  
... ... @@ -185,7 +184,7 @@ public class SimpleModelUtils {
185 184 BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType());
186 185 BpmSimpleModelNodeVO childNode = node.getChildNode();
187 186 List<BpmSimpleModelNodeVO> conditionNodes = node.getConditionNodes();
188   - // TODO @芋艿 路由分支没有conditionNodes 这里注释会影响吗?
  187 + // TODO @芋艿 路由分支没有conditionNodes 这里注释会影响吗?@jason:一起帮忙瞅瞅!
189 188 // Assert.notEmpty(conditionNodes, "分支节点的条件节点不能为空");
190 189 // 分支终点节点 ID
191 190 String branchEndNodeId = null;
... ... @@ -204,8 +203,8 @@ public class SimpleModelUtils {
204 203 if (nodeType == BpmSimpleModelNodeType.ROUTE_BRANCH_NODE) {
205 204 // 路由分支遍历
206 205 for (BpmSimpleModelNodeVO.RouteCondition route : node.getRouteGroup()) {
207   - SequenceFlow sFlow = RouteBranchNodeConvert.buildSequenceFlow(node.getId(), route);
208   - process.addFlowElement(sFlow);
  206 + SequenceFlow sequenceFlow = RouteBranchNodeConvert.buildSequenceFlow(node.getId(), route);
  207 + process.addFlowElement(sequenceFlow);
209 208 }
210 209 } else {
211 210 // 下面的注释,以如下情况举例子。分支 1:A->B->C->D->E,分支 2:A->D->E。其中,A 为分支节点, D 为 A 孩子节点
... ... @@ -228,15 +227,14 @@ public class SimpleModelUtils {
228 227 }
229 228 }
230 229  
231   - // 4. 各分支节点所需特殊处理
  230 + // 4.1 如果是并行分支、包容分支,由于是程序创建的聚合网关,需要手工创建聚合网关和下一个节点的连线
232 231 if (nodeType == BpmSimpleModelNodeType.PARALLEL_BRANCH_NODE
233   - || nodeType == BpmSimpleModelNodeType.INCLUSIVE_BRANCH_NODE ) {
234   - // 如果是并行分支、包容分支,由于是程序创建的聚合网关,需要手工创建聚合网关和下一个节点的连线
  232 + || nodeType == BpmSimpleModelNodeType.INCLUSIVE_BRANCH_NODE) {
235 233 String nextNodeId = isValidNode(childNode) ? childNode.getId() : targetNodeId;
236 234 SequenceFlow sequenceFlow = buildBpmnSequenceFlow(branchEndNodeId, nextNodeId);
237 235 process.addFlowElement(sequenceFlow);
  236 + // 4.2 如果是路由分支,需要连接后续节点为默认路由
238 237 } else if (nodeType == BpmSimpleModelNodeType.ROUTE_BRANCH_NODE) {
239   - // 如果是路由分支,需要连接后续节点为默认路由
240 238 SequenceFlow sequenceFlow = buildBpmnSequenceFlow(node.getId(), branchEndNodeId, node.getDefaultFlowId(),
241 239 null, null);
242 240 process.addFlowElement(sequenceFlow);
... ... @@ -617,10 +615,12 @@ public class SimpleModelUtils {
617 615 return buildConditionExpression(node.getConditionType(), node.getConditionExpression(),
618 616 node.getConditionGroups());
619 617 }
  618 +
620 619 public static String buildConditionExpression(BpmSimpleModelNodeVO.RouteCondition route) {
621 620 return buildConditionExpression(route.getConditionType(), route.getConditionExpression(),
622 621 route.getConditionGroups());
623 622 }
  623 +
624 624 public static String buildConditionExpression(Integer conditionType, String conditionExpression,
625 625 ConditionGroups conditionGroups) {
626 626 BpmSimpleModeConditionType conditionTypeEnum = BpmSimpleModeConditionType.valueOf(conditionType);
... ... @@ -711,6 +711,7 @@ public class SimpleModelUtils {
711 711 String conditionExpression = ConditionNodeConvert.buildConditionExpression(route);
712 712 return buildBpmnSequenceFlow(nodeId, route.getNodeId(), null, null, conditionExpression);
713 713 }
  714 +
714 715 }
715 716  
716 717 private static String buildGatewayJoinId(String id) {
... ...