diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmConditionOpCodeEnum.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmConditionOpCodeEnum.java new file mode 100644 index 0000000..71fc8ae --- /dev/null +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmConditionOpCodeEnum.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.bpm.enums.definition; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * BPM 条件表达式操作符枚举 + * + * @author Lesan + */ +@RequiredArgsConstructor +@Getter +public enum BpmConditionOpCodeEnum { + EQ("==", "等于", " var:getOrDefault(%s, null) == %s "), + NE("!=", "不等于", " var:getOrDefault(%s, null) != %s "), + GT(">", "大于", " var:getOrDefault(%s, null) > %s "), + GE(">=", "大于等于", " var:getOrDefault(%s, null) >= %s "), + LT("<", "小于", " var:getOrDefault(%s, null) < %s "), + LE("<=", "小于等于", " var:getOrDefault(%s, null) <= %s "), + CONTAINS("contain", "包含", " var:contains(%s, %s) "), + NOT_CONTAINS("!contain", "不包含", " !var:contains(%s, %s) "); + + private final String code; + private final String des; + private final String symbol; + + public static BpmConditionOpCodeEnum fromCode(String code) { + for (BpmConditionOpCodeEnum op : BpmConditionOpCodeEnum.values()) { + if (op.code.equalsIgnoreCase(code)) { + return op; + } + } + throw new IllegalArgumentException("未知操作符: " + code); + } + +} 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 e9497a4..f11ab26 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 @@ -708,18 +708,9 @@ public class SimpleModelUtils { // TODO @芋艿:官方文档中无convertByType方法,https://flowable.me/blog/2025/04/02/back-end-expressions/ String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide() : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号 - 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); // 右侧:取值变量 - }; + return String.format(BpmConditionOpCodeEnum.fromCode(rule.getOpCode()).getSymbol(), + rule.getLeftSide(), // 左侧:读取变量 + rightSide); // 右侧:取值变量 }); // 构造条件组的表达式 Boolean and = item.getAnd();