Commit 093e563b80ef8c34ccc6fb88e1d3e54502bd8a70

Authored by smallNorthLee
1 parent 6c6992c8

feat: add TODO

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
... ... @@ -529,7 +529,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
529 529 String taskDefinitionKey = task.getTaskDefinitionKey();
530 530 List<FlowNode> nextFlowNodes = getNextFlowNodes(taskDefinitionKey, bpmnModel, variables);
531 531 System.out.println(nextFlowNodes);
532   - validateNextAssignees(userId, reqVO.getVariables(), task.getProcessInstanceId(), reqVO.getNextAssignees());
  532 +// validateNextAssignees(userId, reqVO.getVariables(), task.getProcessInstanceId(), reqVO.getNextAssignees());
533 533 // 下个节点审批人如果不存在,则由前端传递
534 534 if (CollUtil.isNotEmpty(reqVO.getNextAssignees())) {
535 535 // 获取实例中的全部节点数据,避免后续节点的审批人被覆盖
... ... @@ -548,34 +548,44 @@ public class BpmTaskServiceImpl implements BpmTaskService {
548 548 }
549 549  
550 550 /**
551   - *
552   - * @param taskDefinitionKey 当前节点id
553   - * @param bpmnModel bpmnModel
  551 + * 根据当前节点 ID 获取下一个执行的 FlowNode 列表
  552 + * @param taskDefinitionKey 当前节点 ID
  553 + * @param bpmnModel BPMN 模型
  554 + * @param variables 流程变量,用于条件判断
  555 + * @return 下一个执行的 FlowNode 列表
554 556 */
555   - private List<FlowNode> getNextFlowNodes(String taskDefinitionKey, BpmnModel bpmnModel, Map<String, Object> variables){
556   - FlowNode flowElement = (FlowNode) bpmnModel.getFlowElement(taskDefinitionKey);
557   - // 存储下一个执行的节点
  557 + public List<FlowNode> getNextFlowNodes(String taskDefinitionKey, BpmnModel bpmnModel, Map<String, Object> variables) {
  558 + if (taskDefinitionKey == null || bpmnModel == null) {
  559 + throw new IllegalArgumentException("taskDefinitionKey and bpmnModel cannot be null");
  560 + }
  561 + FlowNode currentNode = (FlowNode) bpmnModel.getFlowElement(taskDefinitionKey);
  562 + if (currentNode == null) {
  563 + throw new IllegalArgumentException("FlowElement with given taskDefinitionKey not found in BpmnModel");
  564 + }
558 565 List<FlowNode> nextFlowNodes = new ArrayList<>();
559   - resolveNextNodes(flowElement, bpmnModel, variables, nextFlowNodes);
  566 + resolveNextNodes(currentNode, bpmnModel, variables, nextFlowNodes);
560 567 return nextFlowNodes;
561 568 }
562 569  
  570 + /**
  571 + * 递归解析下一个执行节点
  572 + * @param currentNode 当前节点
  573 + * @param bpmnModel BPMN 模型
  574 + * @param variables 流程变量,用于条件判断
  575 + * @param nextFlowNodes 存储下一个执行节点的列表
  576 + */
563 577 private void resolveNextNodes(FlowNode currentNode, BpmnModel bpmnModel, Map<String, Object> variables, List<FlowNode> nextFlowNodes) {
564 578 List<SequenceFlow> outgoingFlows = currentNode.getOutgoingFlows();
565 579 for (SequenceFlow sequenceFlow : outgoingFlows) {
566   - // 如果是排他网关,需要根据条件表达式判断
567   - if (currentNode instanceof ExclusiveGateway) {
568   - String conditionExpression = sequenceFlow.getConditionExpression();
569   - if (conditionExpression != null && !BpmnModelUtils.evalConditionExpress(variables,conditionExpression)) {
570   - continue;
571   - }
  580 + if (!shouldFollowSequenceFlow(currentNode, sequenceFlow, variables)) {
  581 + continue;
572 582 }
573 583 FlowElement targetElement = bpmnModel.getFlowElement(sequenceFlow.getTargetRef());
574 584 if (targetElement instanceof FlowNode targetNode) {
575 585 if (targetNode instanceof Gateway) {
576   - // 如果目标节点还是网关,递归处理
  586 + // 如果目标节点是网关,递归处理
577 587 resolveNextNodes(targetNode, bpmnModel, variables, nextFlowNodes);
578   - } else {
  588 + }else {
579 589 nextFlowNodes.add(targetNode);
580 590 }
581 591 }
... ... @@ -583,6 +593,22 @@ public class BpmTaskServiceImpl implements BpmTaskService {
583 593 }
584 594  
585 595 /**
  596 + * 判断是否应该遵循当前序列流
  597 + * @param currentNode 当前节点
  598 + * @param sequenceFlow 序列流
  599 + * @param variables 流程变量,用于条件判断
  600 + * @return 是否应该遵循该序列流
  601 + */
  602 + private boolean shouldFollowSequenceFlow(FlowNode currentNode, SequenceFlow sequenceFlow, Map<String, Object> variables) {
  603 + if (currentNode instanceof ExclusiveGateway) {
  604 + String conditionExpression = sequenceFlow.getConditionExpression();
  605 + return conditionExpression == null || BpmnModelUtils.evalConditionExpress(variables, conditionExpression);
  606 + }
  607 + return true;
  608 + }
  609 +
  610 +
  611 + /**
586 612 * 校验传递的参数中是否存在不是下一个执行的节点
587 613 *
588 614 * @param loginUserId 流程发起人
... ...