diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java index cfeb2c2..e9497a4 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java @@ -705,12 +705,21 @@ public class SimpleModelUtils { } // 构造规则表达式 List list = convertList(item.getRules(), (rule) -> { + // TODO @芋艿:官方文档中无convertByType方法,https://flowable.me/blog/2025/04/02/back-end-expressions/ String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide() : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号 - return String.format(" vars:getOrDefault(%s, null) %s var:convertByType(%s,%s) ", - rule.getLeftSide(), // 左侧:读取变量 - rule.getOpCode(), // 中间:操作符,比较 - rule.getLeftSide(), rightSide); // 右侧:转换变量,VariableConvertByTypeExpressionFunction + return switch (rule.getOpCode()) { + case "contain" -> String.format(" var:contains(%s, %s) ", + rule.getLeftSide(), + rightSide); + case "!contain" -> String.format(" !var:contains(%s, %s) ", + rule.getLeftSide(), + rightSide); + default -> String.format(" var:getOrDefault(%s, null) %s %s ", + rule.getLeftSide(), // 左侧:读取变量 + rule.getOpCode(), // 中间:操作符,比较 + rightSide); // 右侧:取值变量 + }; }); // 构造条件组的表达式 Boolean and = item.getAnd();