package cn.iocoder.yudao.module.qcreport.engine.rule; import java.util.List; /** * 规则语法树节点。 *

* 与前端 {@code engine/rule-engine.ts} 的 RuleNode 联合类型一一对应: * 递归下降解析成这棵树后自己求值,全程不碰 eval / 脚本引擎—— * 规则文本来自用户,一旦能被当作代码执行就是注入口子。 */ public sealed interface RuleNode { /** 字面量:数字(Double)/ 字符串 / 布尔 / null */ record Literal(Object value) implements RuleNode { } /** 上下文路径取值,如 item.actualValue */ record Path(String path) implements RuleNode { } /** 白名单函数调用 */ record Call(String name, List args) implements RuleNode { } /** 一元运算:- 或 ! */ record Unary(String operator, RuleNode operand) implements RuleNode { } /** 二元运算:AND / OR / = / != / > / >= / < / <= / + / - / * / / */ record Binary(String operator, RuleNode left, RuleNode right) implements RuleNode { } /** value BETWEEN lower AND upper */ record Between(RuleNode value, RuleNode lower, RuleNode upper, boolean negated) implements RuleNode { } /** value IN (items) / value NOT IN (items) */ record In(RuleNode value, List items, boolean negated) implements RuleNode { } }