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 4 import cn.hutool.core.lang.Assert;
5 5 import cn.hutool.core.map.MapUtil;
6 6 import cn.hutool.core.util.*;
7   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 7 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
9 8 import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
10 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 16 import cn.iocoder.yudao.module.bpm.service.task.listener.BpmUserTaskListener;
18 17 import org.flowable.bpmn.BpmnAutoLayout;
19 18 import org.flowable.bpmn.constants.BpmnXMLConstants;
20   -import org.flowable.bpmn.model.Process;
21 19 import org.flowable.bpmn.model.*;
  20 +import org.flowable.bpmn.model.Process;
22 21 import org.flowable.engine.delegate.ExecutionListener;
23 22 import org.flowable.engine.delegate.TaskListener;
24 23  
25 24 import java.util.*;
26 25  
  26 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
27 27 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.*;
28 28 import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.*;
29 29 import static java.util.Arrays.asList;
... ... @@ -684,15 +684,18 @@ public class SimpleModelUtils {
684 684 if (conditionGroups == null || CollUtil.isEmpty(conditionGroups.getConditions())) {
685 685 return null;
686 686 }
687   - List<String> strConditionGroups = CollectionUtils.convertList(conditionGroups.getConditions(), item -> {
  687 + List<String> strConditionGroups = convertList(conditionGroups.getConditions(), item -> {
688 688 if (CollUtil.isEmpty(item.getRules())) {
689 689 return "";
690 690 }
691 691 // 构造规则表达式
692   - List<String> list = CollectionUtils.convertList(item.getRules(), (rule) -> {
  692 + List<String> list = convertList(item.getRules(), (rule) -> {
693 693 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide()
694 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 701 Boolean and = item.getAnd();
... ...