摘要:规则引擎听起来很高大上,但如果你用过Excel的IF/VLOOKUP/条件格式,你就已经懂了它的核心逻辑。本文从一个开发者的视角,用Excel类比拆解规则引擎,附带实际落地中的踩坑经验。先说个事。
去年我们团队给一个制造业客户做规则引擎落地,客户那边的PMC负责人听完技术讲解后说了一句话:
"你们说的这些我都没听懂。但你刚才那个Demo,不就是个高级版的Excel吗?"
说实话,他说对了。
规则引擎的核心逻辑,就是把你用Excel写的那些IF函数、VLOOKUP、条件格式,搬到一个专门的系统里,让它跑得更快、更可维护。
一、从Excel到规则引擎:我踩过的坑
坑1:用Excel管规则,改到第50层IF嵌套就崩了
客户的报价规则是这样的:
- 不同产品系列,不同基础价
- 不同客户等级,不同折扣
- 不同区域,不同运费
- 不同季节,不同促销
- 订单量大的,还有阶梯价
一开始他们全写在Excel里,用IF嵌套。
=IF(AND(A2>10000, B2="VIP"), C2*0.8,
IF(AND(A2>5000, B2="VIP"), C2*0.85,
IF(AND(A2>10000, B2="NORMAL"), C2*0.95,
IF(AND(A2>5000, B2="NORMAL"), C2*0.98,
C2))))
写到第五层的时候,已经没人敢动了。
因为改一个条件,可能影响后面所有的分支。
踩坑教训:当规则超过20条且经常变动时,Excel就不再是工具,而是定时炸弹。
坑2:规则散落在多个系统,改一处其他地方不知道
客户的报价规则,在三个地方都有:
- CRM系统里一份(给销售算报价)
- ERP系统里一份(给财务算成本)
- 订单系统里一份(给客服查价格)
三个系统各写各的逻辑。
有一次改了VIP折扣从8折改成85折,只改了CRM,忘了改ERP和订单系统。结果销售报出去的价格和财务对不上,客服查到的价格也不对。
踩坑教训:规则散落在多个系统,是数据不一致的根源。
坑3:出了问题没法追溯
客户投诉:"我上个月下的单,为什么收的是标准价?我当时应该是VIP折扣啊。"
查系统日志,只有"计算结果:100元"。
但当时的规则是什么?输入参数是什么?为什么没有应用折扣?
不知道。因为规则是硬编码在代码里的,没有执行日志。
踩坑教训:没有审计日志的规则,等于没有规则。
二、用Excel的思路理解规则引擎
为了让你直观理解,我用Excel的功能来类比规则引擎的核心概念。
1. IF函数 = 规则判断
Excel:
=IF(订单金额>10000, "大客户折扣", "标准价格")
规则引擎:
当 订单金额 > 10000
则 应用 大客户折扣
否则 应用 标准价格
本质一样,只是表达方式不同。
2. VLOOKUP = 决策表
Excel:
=VLOOKUP(产品型号, 工艺参数表, 对应列, FALSE)
规则引擎里的决策表:
输入:产品型号=A, 设备类型=1
输出:温度=180, 压力=50, 时间=30
VLOOKUP是查一张表,规则引擎可以同时查多张表,表之间还能有联动关系。
3. 条件格式 = 触发告警
Excel:
如果 设备温度 > 80℃ → 单元格标红
规则引擎:
如果 设备温度 > 80℃
→ 触发告警
→ 通知值班工程师
→ 记录日志
→ 自动降速
条件格式只是让你"看到"异常,规则引擎是让你"看到"异常后还能自动"做点什么"。
4. 数据验证 = 规则约束
Excel:
这个单元格只能输入1-100的整数
规则引擎:
排产方案中,每台设备的日工作时长不能超过24小时
如果超过 → 方案自动驳回
三、实际落地:从Excel迁移到规则引擎
分享一下我们客户的迁移过程,给想做类似事情的兄弟参考。
第一步:梳理现有规则
把Excel里所有的IF/VLOOKUP/条件格式整理出来,形成一份规则清单。
## 报价规则清单
### 规则1:大客户折扣
- 条件:订单金额 > 10000 AND 客户等级 = VIP
- 动作:价格 × 0.8
- 优先级:100
### 规则2:普通客户折扣
- 条件:订单金额 > 5000
- 动作:价格 × 0.95
- 优先级:50
### 规则3:标准价格
- 条件:无条件(兜底)
- 动作:原价
- 优先级:0
第二步:选择规则引擎
我们当时评估了几个方案,最终选了JVS-Rules规则引擎。
选型理由:
- 支持可视化规则配置,业务人员可以自己改规则
- 支持私有化部署,数据不出内网
- 支持版本管理和回滚
- 有完整的执行日志和审计功能
(不是广告,只是分享选型经验。具体选哪个根据你的业务需求来。)
第三步:规则迁移
把Excel里的规则逐条迁移到规则引擎。
以报价规则为例,迁移后的配置大概是这样的:
{
"rule_name": "大客户折扣",
"conditions": [
{"field": "order_amount", "operator": ">", "value": 10000},
{"field": "customer_level", "operator": "==", "value": "VIP"}
],
"action": {
"type": "discount",
"value": 0.8
},
"priority": 100
}
第四步:验证和切换
- 先并行运行:Excel和规则引擎同时算,对比结果
- 确认无误后,切换到规则引擎
- Excel保留作为备份
四、迁移后的真实收益
客户用了一段时间后,反馈了几个明显的变化:
1. 规则修改效率提升
以前改一个折扣规则,需要找程序员改代码、测试、发版,周期1-2周。
现在业务人员在可视化界面改规则,3分钟搞定,实时生效。
2. 数据一致性问题消失
CRM、ERP、订单系统都调用同一个规则服务,不再有"三个系统三个价格"的问题。
3. 问题可追溯
客户再投诉价格问题,直接查规则执行日志:什么时间、用了什么规则、输入参数是什么、输出结果是什么。
一目了然。
4. 业务人员参与度高了
以前规则都在程序员脑子里,业务人员想改规则只能提需求等排期。
现在业务人员自己就能改规则,参与度高了,规则也更贴合实际业务了。
五、一些踩坑经验总结
经验1:不要试图一步到位
先从一个简单的场景开始,跑通流程,再逐步扩展。
我们客户第一版只迁移了报价规则,跑了两个月没问题后,才开始迁移排产规则、质检规则。
经验2:规则梳理比技术实现更重要
80%的时间花在梳理规则上,20%的时间花在技术实现上。
很多规则散落在Excel/代码/人脑里,整理清楚本身就是一项大工程。
经验3:建立规则治理机制
谁负责维护规则?改规则的流程是什么?出了问题谁负责?
规则引擎是工具,治理才是关键。
经验4:保留回退能力
迁移初期,建议并行运行新旧系统,确认无误后再完全切换。
万一有问题,可以快速回退。
写在最后
规则引擎不是新技术,但它是被严重低估的技术。
很多企业的业务规则管理,还停留在Excel+硬编码的阶段。不是不知道有问题,是不知道有更好的方式,或者觉得规则引擎很复杂。
其实没那么复杂。
如果你会用Excel的IF函数,你就已经理解了规则引擎的核心逻辑。
剩下的,只是选一个合适的工具,把规则从Excel里"搬"出来。
希望这篇分享对你有帮助。如果你也在做规则引擎落地,欢迎评论区交流踩坑经验。
#规则引擎 #Java #Python #企业软件 #业务规则管理 #踩坑经验 #数字化转型 #制造业 #代码实战 #架构设计