Commit 14d8c2bb404caa337565a80b242c736822f3278a

Authored by YunaiV
1 parent c6458137

fix:【BPM 工作流】buildConditionExpression 在流程预测时,因为变量不存在,导致 Unknow property 异常的问题

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
5 import cn.hutool.core.map.MapUtil; 5 import cn.hutool.core.map.MapUtil;
6 import cn.hutool.core.util.*; 6 import cn.hutool.core.util.*;
7 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;  
8 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 7 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
9 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; 8 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
10 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.ConditionGroups; 9 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO.ConditionGroups;
@@ -17,13 +16,14 @@ import cn.iocoder.yudao.module.bpm.service.task.listener.BpmCallActivityListener @@ -17,13 +16,14 @@ import cn.iocoder.yudao.module.bpm.service.task.listener.BpmCallActivityListener
17 import cn.iocoder.yudao.module.bpm.service.task.listener.BpmUserTaskListener; 16 import cn.iocoder.yudao.module.bpm.service.task.listener.BpmUserTaskListener;
18 import org.flowable.bpmn.BpmnAutoLayout; 17 import org.flowable.bpmn.BpmnAutoLayout;
19 import org.flowable.bpmn.constants.BpmnXMLConstants; 18 import org.flowable.bpmn.constants.BpmnXMLConstants;
20 -import org.flowable.bpmn.model.Process;  
21 import org.flowable.bpmn.model.*; 19 import org.flowable.bpmn.model.*;
  20 +import org.flowable.bpmn.model.Process;
22 import org.flowable.engine.delegate.ExecutionListener; 21 import org.flowable.engine.delegate.ExecutionListener;
23 import org.flowable.engine.delegate.TaskListener; 22 import org.flowable.engine.delegate.TaskListener;
24 23
25 import java.util.*; 24 import java.util.*;
26 25
  26 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
27 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.*; 27 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.*;
28 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.*; 28 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.*;
29 import static java.util.Arrays.asList; 29 import static java.util.Arrays.asList;
@@ -684,15 +684,18 @@ public class SimpleModelUtils { @@ -684,15 +684,18 @@ public class SimpleModelUtils {
684 if (conditionGroups == null || CollUtil.isEmpty(conditionGroups.getConditions())) { 684 if (conditionGroups == null || CollUtil.isEmpty(conditionGroups.getConditions())) {
685 return null; 685 return null;
686 } 686 }
687 - List<String> strConditionGroups = CollectionUtils.convertList(conditionGroups.getConditions(), item -> { 687 + List<String> strConditionGroups = convertList(conditionGroups.getConditions(), item -> {
688 if (CollUtil.isEmpty(item.getRules())) { 688 if (CollUtil.isEmpty(item.getRules())) {
689 return ""; 689 return "";
690 } 690 }
691 // 构造规则表达式 691 // 构造规则表达式
692 - List<String> list = CollectionUtils.convertList(item.getRules(), (rule) -> { 692 + List<String> list = convertList(item.getRules(), (rule) -> {
693 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide() 693 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide()
694 : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号 694 : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号
695 - return String.format(" %s %s var:convertByType(%s,%s)", rule.getLeftSide(), rule.getOpCode(), rule.getLeftSide(), rightSide); 695 + return String.format(" vars:getOrDefault(%s, null) %s var:convertByType(%s,%s) ",
  696 + rule.getLeftSide(), // 左侧:读取变量
  697 + rule.getOpCode(), // 中间:操作符,比较
  698 + rule.getLeftSide(), rightSide); // 右侧:转换变量,VariableConvertByTypeExpressionFunction
696 }); 699 });
697 // 构造条件组的表达式 700 // 构造条件组的表达式
698 Boolean and = item.getAnd(); 701 Boolean and = item.getAnd();