会员价 + 优惠券:当 policy 不输出准/拒,而是算一个价
收银台那行「应付 ¥XX」,本质和 01–05 页的判定一模一样:把一套促销规则 (rule) 应用到购物车 (context) 上。
唯一的推广是 —— 这次决策不再是 permit / deny,而是一个值 (最终价) + 用上了哪些优惠。
这就是规则引擎 (rule engine),policy 的近亲。四个轴照样在:
who
会员等级
普通 / 银卡 / 金卡 / PLUS → 会员价
what
购物车商品
品类 / 单价 / 数量 → 满减门槛、限品类券
action
结算
触发定价
when
券有效期 / 活动时段
本页从略,同 03-when-where 的情境
effect 从「permit/deny」变成「改价」:
{ 条件 when(cart): 满200 / 限图书 / 限新人, 效果 effect: −¥30 / ×0.95 / 包邮, 互斥组, 优先级 }
而「会员价和券能不能叠?多张券怎么算?谁先谁后?」就是 05-decide 中组合算法的促销版 —— 而且它顺序敏感。
收银台促销引擎
🛒 购物车 (what) —— 调数量看满减门槛
👤 会员等级 (who) —— 决定会员价
🎟️ 持有的优惠券 (选中 = 尝试使用)
🔧 叠加策略 (组合算法) —— 同一车,不同策略不同价
优惠应用明细 (绿 = 已用并省了多少;灰 = 跳过及原因)
同一辆车,三种叠加策略三个价
叠加策略不是细节,它直接决定你付多少 —— 也决定商家让不让你这么省。用当前购物车同时跑三种:
first-applicable「顺序即优先级」的同一机制。
促销概念 → policy 概念
| 促销里的说法 | policy 里的概念 (第 01–05 页) |
|---|---|
| 满200 / 限图书 / 限新人 | 规则条件 when(req) (eligibility / applicability) |
| −¥30 / ×0.95 / 包邮 | 规则效果 effect (这里不是 permit/deny,是改价) |
| 券与券 / 券与会员价 互斥 | combining algorithm:互斥 ≈ 选一个 (这里选最优) |
| 先满减还是先打折 | 应用顺序 ≈ first-applicable「顺序即优先级」 |
| 折扣封顶 / 最低实付 ¥0 | 约束 / obligation (上限下限) |
| 没有任何券命中 | 默认决策 = 原价 (default,no-op 的 permit) |
| 最终「应付」 | decision 的返回值 (一个数,不是布尔) |
相关链接
- 回看:决策与组合算法 (deny/permit-overrides·first-applicable·default·obligation)@vega/playground本页的互斥/叠加/顺序/封顶/默认价,逐条对应这里。
- Business rules engineen.wikipedia.org促销/定价引擎所属的「规则引擎」家族 (Drools 等),policy 的近亲。