Commit bd73cfdf951487b82477a9224a1c1aff54dfca7c
1 parent
07a879fd
feat: 条件表达式操作符使用枚举表示
Showing
2 changed files
with
39 additions
and
12 deletions
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(); |