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 条件表达式设计流程

  1. 梳理业务规则:与采购、财务、法务等部门确认审批触发条件
  2. 拆解原子条件:将每条规则拆分为不可再分的比较操作(如金额 > 10万)
  3. 确定逻辑关系:分析原子条件之间是“且”还是“或”的关系
  4. 构建表达式:使用括号明确优先级,形成完整的条件表达式
  5. 验证与测试:使用边界值测试表达式在不同输入下的真值结果
常见陷阱:不要将AND和OR混合使用时省略括号。例如“金额 > 10万 AND 品类 = 服务 OR 紧急采购 = 是”会被解析为“(金额 > 10万 AND 品类 = 服务) OR 紧急采购 = 是”,导致所有紧急采购单都触发审批,与预期不符。

4.5 条件表达式可视化结构

下图展示了AND/OR组合条件表达式的树形结构,帮助理解逻辑运算的层次关系:

条件表达式树形结构(AND + OR 混合组合) AND 采购金额 > 100000 OR 采购品类 = "服务" 供应商等级 = "A级" 表达式解析: (采购金额 > 100000) AND ( (采购品类 = "服务") OR (供应商等级 = "A级") )

4.6 条件表达式真值表验证

使用真值表验证表达式在不同输入下的结果,确保配置正确:

金额 > 10万 品类 = 服务 供应商等级 = A级 表达式结果 说明
✅ 真 ✅ 真 ❌ 假 ✅ 真 金额满足,且品类满足(OR分支为真)
✅ 真 ❌ 假 ✅ 真 ✅ 真 金额满足,且供应商等级满足(OR分支为真)
✅ 真 ❌ 假 ❌ 假 ❌ 假 金额满足,但OR分支全部为假
❌ 假 ✅ 真 ✅ 真 ❌ 假 金额不满足,AND条件失败
❌ 假 ❌ 假 ❌ 假 ❌ 假 所有条件均不满足

4.7 条件表达式在审批流中的位置

下图展示了条件表达式在采购审批流程中的实际应用位置:

条件表达式在审批流程中的位置 采购申请提交 条件表达式评估 (金额 > 10万) AND (品类 = 服务) 真 假 触发高级审批节点 自动通过 / 跳过审批 条件表达式位于审批流程的决策节点,根据表达式真值决定流程走向 真 → 进入审批链;假 → 自动通过或进入下一级判断

4.8 条件表达式配置清单

在采购管理平台中配置条件表达式时,建议按以下清单逐项检查:

  • ☐ 原子条件完整性:每个比较操作是否都包含字段、运算符、值三要素
  • ☐ 括号使用正确性:混合AND/OR时是否使用括号明确分组
  • ☐ 数据类型匹配:金额字段与数值比较,品类字段与字符串比较,避免类型错误
  • ☐ 边界值覆盖:测试等于、大于、小于边界时的表达式结果
  • ☐ 空值处理:当字段为空时,表达式是否按预期返回假(或可配置为真)
  • ☐ 性能考量:避免在单个表达式中组合超过10个原子条件,必要时拆分为多级判断
最佳实践:在采购管理平台中,建议将条件表达式配置为可复用的“条件模板”。例如“大额服务采购审批条件”模板包含“(金额 > 10万) AND (品类 = 服务)”,可在多个审批流程中直接引用,减少重复配置和出错概率。