4. 条件表达式设计:使用逻辑运算符(AND/OR)组合条件
在采购管理平台的多级审批流程中,单一条件往往无法覆盖复杂的业务场景。例如,“采购金额大于10万”且“属于IT设备类”才触发总监审批,这就需要将多个原子条件通过逻辑运算符组合成条件表达式。本节将深入讲解AND与OR运算符的语义、组合规则及实战设计方法。
4.1 逻辑运算符核心语义
| 运算符 | 语义 | 组合效果 | 典型场景 |
|---|---|---|---|
| AND(&&) | 所有子条件必须同时满足 | 条件A 且 条件B 同时为真,表达式才为真 | 金额 > 5万 且 品类 = 固定资产 |
| OR(||) | 任意一个子条件满足即可 | 条件A 或 条件B 任一为真,表达式即为真 | 申请人 = 部门经理 或 金额 > 20万 |
| NOT(!) | 对单个条件取反 | 条件A为假时,表达式为真 | 供应商等级 不是 黑名单 |
设计原则:AND运算符会缩小审批触发范围(更严格),OR运算符会扩大触发范围(更宽松)。在配置多级审批时,建议将最严格的条件组合放在审批链前端,减少不必要的审批流转。
4.2 条件表达式构建语法
条件表达式采用前缀或中缀表示法,平台通常支持以下两种格式:
4.2.1 中缀表达式(推荐用于可视化配置)
# 示例1:AND组合
(采购金额 > 100000) AND (采购品类 = "IT设备")
# 示例2:OR组合
(申请人部门 = "研发部") OR (申请人部门 = "产品部")
# 示例3:混合组合(AND优先级高于OR,建议使用括号明确)
(采购金额 > 50000) AND ((采购品类 = "服务") OR (供应商等级 = "A级"))
4.2.2 前缀表达式(用于底层规则引擎)
# 示例1:AND组合
AND(>(采购金额, 100000), =(采购品类, "IT设备"))
# 示例2:OR组合
OR(=(申请人部门, "研发部"), =(申请人部门, "产品部"))
# 示例3:混合组合
AND(>(采购金额, 50000), OR(=(采购品类, "服务"), =(供应商等级, "A级")))
实战建议:在采购管理平台的可视化配置界面中,优先使用中缀表达式配合拖拽式条件卡片。底层存储时转换为前缀表达式,便于规则引擎高效解析执行。
4.3 条件表达式组合规则与优先级
当表达式中同时出现AND和OR时,必须明确运算符优先级,否则会产生歧义:
- 默认优先级:NOT > AND > OR(与大多数编程语言一致)
- 强制使用括号:在混合组合中,始终使用小括号明确分组,避免依赖默认优先级
- 嵌套深度限制:建议嵌套不超过3层,超过时拆分为多个子表达式或使用决策表
| 表达式 | 实际解析结果 | 是否推荐 |
|---|---|---|
| A AND B OR C | (A AND B) OR C | ❌ 不推荐,易误解 |
| (A AND B) OR C | A和B同时满足,或C满足 | ✅ 推荐,语义清晰 |
| A AND (B OR C) | A满足,且B或C中至少一个满足 | ✅ 推荐,语义清晰 |
4.4 条件表达式设计流程
- 梳理业务规则:与采购、财务、法务等部门确认审批触发条件
- 拆解原子条件:将每条规则拆分为不可再分的比较操作(如金额 > 10万)
- 确定逻辑关系:分析原子条件之间是“且”还是“或”的关系
- 构建表达式:使用括号明确优先级,形成完整的条件表达式
- 验证与测试:使用边界值测试表达式在不同输入下的真值结果
常见陷阱:不要将AND和OR混合使用时省略括号。例如“金额 > 10万 AND 品类 = 服务 OR 紧急采购 = 是”会被解析为“(金额 > 10万 AND 品类 = 服务) OR 紧急采购 = 是”,导致所有紧急采购单都触发审批,与预期不符。
4.5 条件表达式可视化结构
下图展示了AND/OR组合条件表达式的树形结构,帮助理解逻辑运算的层次关系:
4.6 条件表达式真值表验证
使用真值表验证表达式在不同输入下的结果,确保配置正确:
| 金额 > 10万 | 品类 = 服务 | 供应商等级 = A级 | 表达式结果 | 说明 |
|---|---|---|---|---|
| ✅ 真 | ✅ 真 | ❌ 假 | ✅ 真 | 金额满足,且品类满足(OR分支为真) |
| ✅ 真 | ❌ 假 | ✅ 真 | ✅ 真 | 金额满足,且供应商等级满足(OR分支为真) |
| ✅ 真 | ❌ 假 | ❌ 假 | ❌ 假 | 金额满足,但OR分支全部为假 |
| ❌ 假 | ✅ 真 | ✅ 真 | ❌ 假 | 金额不满足,AND条件失败 |
| ❌ 假 | ❌ 假 | ❌ 假 | ❌ 假 | 所有条件均不满足 |
4.7 条件表达式在审批流中的位置
下图展示了条件表达式在采购审批流程中的实际应用位置:
4.8 条件表达式配置清单
在采购管理平台中配置条件表达式时,建议按以下清单逐项检查:
- ☐ 原子条件完整性:每个比较操作是否都包含字段、运算符、值三要素
- ☐ 括号使用正确性:混合AND/OR时是否使用括号明确分组
- ☐ 数据类型匹配:金额字段与数值比较,品类字段与字符串比较,避免类型错误
- ☐ 边界值覆盖:测试等于、大于、小于边界时的表达式结果
- ☐ 空值处理:当字段为空时,表达式是否按预期返回假(或可配置为真)
- ☐ 性能考量:避免在单个表达式中组合超过10个原子条件,必要时拆分为多级判断
最佳实践:在采购管理平台中,建议将条件表达式配置为可复用的“条件模板”。例如“大额服务采购审批条件”模板包含“(金额 > 10万) AND (品类 = 服务)”,可在多个审批流程中直接引用,减少重复配置和出错概率。