Skip to content

Commit 699b347

Browse files
pythonHuangclaude
andcommitted
feat: 条件/赋值节点表达式引擎扩展-支持算术运算+字符串拼接/切片/replace、toString数字与日期格式化,赋值节点新增EXPRESSION表达式来源+帮助弹窗
Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 639358a commit 699b347

7 files changed

Lines changed: 718 additions & 379 deletions

File tree

‎DesignDoc.md‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -615,19 +615,27 @@ public class HttpApiCaller
615615

616616
### 3.5 条件表达式求值
617617

618-
由 `Juggle.Domain/Engine/ConditionExpressionEvaluator.cs` 递归下降解析,支持的语法:
618+
由 `Juggle.Domain/Engine/ExpressionEvaluator.cs` 递归下降解析(条件节点与赋值节点 EXPRESSION 共用),支持的语法:
619619

620620
| 类型 | 语法 | 示例 |
621621
|--------|---------|------|
622622
| 比较运算 | == != > < >= <= | `env_score >= 60`、`input_name == '张三'` |
623623
| 逻辑运算 | &&(且) \|\|(或) !(非) 括号 | `env_score >= 60 && env_score < 90`、`(env_a > 1 \|\| env_b > 2) && env_c == 'yes'` |
624+
| 算术运算 | + - * / %(先运算再比较) | `(env_price - env_cost) * env_qty >= 100`、`env_total % 2 == 0` |
624625
| 变量对变量 | 左右两边都可以是变量 | `env_total >= input_min` |
625626
| 子属性 | 变量.属性 | `input_user.name == '张三'` |
626-
| 数组长度 | 变量.length | `input_list.length > 0` |
627+
| 数组/字符串长度 | 变量.length | `input_list.length > 0`、`env_name.length == 6` |
627628
| 数组元素 | 变量[索引](从 0 开始),可继续取子属性 | `input_list[0].name == '张三'` |
629+
| 字符串拼接 | +(两边都是数字时做加法,否则拼接) | `env_name + '_done' == 'abc_done'` |
630+
| 字符串切片 | [..5] 前5位 / [2..5] 第2~5位 / [2..] 到最后 | `input_phone[..3] == '138'`、`env_code[2..5] == 'abc'` |
631+
| 字符串替换 | replace('旧','新') | `env_name.replace('a','b') == 'xbcdef'` |
632+
| 数字格式化 | toString("#.0##") / toString("0.00") | `env_amount.toString('0.00') == '12.35'` |
633+
| 日期格式化 | toString("yyyy-MM-dd HH:mm:ss") | `env_time.toString('yyyy-MM-dd') == '2024-01-02'` |
628634
| 裸变量 | 无比较符时按真值判断 | `env_flag` 等价于 `env_flag == true` |
629635

630-
字面量支持:数字、单/双引号字符串、`true`/`false`/`null`。解析失败或变量缺失时表达式返回 false(走默认分支)。
636+
规则:字面量支持数字、单/双引号字符串、`true`/`false`/`null`;`*` 会把数字字符串转为数字计算;未加引号且不存在的标识符按字符串字面量处理(兼容 `env_status == paid` 旧写法);除零返回 null;解析失败返回 false(条件节点走默认分支)。
637+
638+
赋值节点(ASSIGN)来源类型新增 `EXPRESSION`:规则 source 填表达式,求值结果写入目标变量(支持以上全部语法,无比较符时返回计算结果值)。
631639

632640
### 3.6 数据库节点 SQL 设计辅助
633641

‎Juggle.Domain/Engine/ConditionExpressionEvaluator.cs‎

Lines changed: 0 additions & 367 deletions
This file was deleted.

0 commit comments

Comments
 (0)