Commit bd73cfdf951487b82477a9224a1c1aff54dfca7c

Authored by LesanOuO
1 parent 07a879fd

feat: 条件表达式操作符使用枚举表示

yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmConditionOpCodeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.bpm.enums.definition;
  2 +
  3 +import lombok.Getter;
  4 +import lombok.RequiredArgsConstructor;
  5 +
  6 +/**
  7 + * BPM 条件表达式操作符枚举
  8 + *
  9 + * @author Lesan
  10 + */
  11 +@RequiredArgsConstructor
  12 +@Getter
  13 +public enum BpmConditionOpCodeEnum {
  14 + EQ("==", "等于", " var:getOrDefault(%s, null) == %s "),
  15 + NE("!=", "不等于", " var:getOrDefault(%s, null) != %s "),
  16 + GT(">", "大于", " var:getOrDefault(%s, null) > %s "),
  17 + GE(">=", "大于等于", " var:getOrDefault(%s, null) >= %s "),
  18 + LT("<", "小于", " var:getOrDefault(%s, null) < %s "),
  19 + LE("<=", "小于等于", " var:getOrDefault(%s, null) <= %s "),
  20 + CONTAINS("contain", "包含", " var:contains(%s, %s) "),
  21 + NOT_CONTAINS("!contain", "不包含", " !var:contains(%s, %s) ");
  22 +
  23 + private final String code;
  24 + private final String des;
  25 + private final String symbol;
  26 +
  27 + public static BpmConditionOpCodeEnum fromCode(String code) {
  28 + for (BpmConditionOpCodeEnum op : BpmConditionOpCodeEnum.values()) {
  29 + if (op.code.equalsIgnoreCase(code)) {
  30 + return op;
  31 + }
  32 + }
  33 + throw new IllegalArgumentException("未知操作符: " + code);
  34 + }
  35 +
  36 +}
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
@@ -708,18 +708,9 @@ public class SimpleModelUtils { @@ -708,18 +708,9 @@ public class SimpleModelUtils {
708 // TODO @芋艿:官方文档中无convertByType方法,https://flowable.me/blog/2025/04/02/back-end-expressions/ 708 // TODO @芋艿:官方文档中无convertByType方法,https://flowable.me/blog/2025/04/02/back-end-expressions/
709 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide() 709 String rightSide = NumberUtil.isNumber(rule.getRightSide()) ? rule.getRightSide()
710 : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号 710 : "\"" + rule.getRightSide() + "\""; // 如果非数值类型加引号
711 - return switch (rule.getOpCode()) {  
712 - case "contain" -> String.format(" var:contains(%s, %s) ",  
713 - rule.getLeftSide(),  
714 - rightSide);  
715 - case "!contain" -> String.format(" !var:contains(%s, %s) ",  
716 - rule.getLeftSide(),  
717 - rightSide);  
718 - default -> String.format(" var:getOrDefault(%s, null) %s %s ",  
719 - rule.getLeftSide(), // 左侧:读取变量  
720 - rule.getOpCode(), // 中间:操作符,比较  
721 - rightSide); // 右侧:取值变量  
722 - }; 711 + return String.format(BpmConditionOpCodeEnum.fromCode(rule.getOpCode()).getSymbol(),
  712 + rule.getLeftSide(), // 左侧:读取变量
  713 + rightSide); // 右侧:取值变量
723 }); 714 });
724 // 构造条件组的表达式 715 // 构造条件组的表达式
725 Boolean and = item.getAnd(); 716 Boolean and = item.getAnd();