首页/新闻资讯/正文详情

微服务架构落地:业务域基建(下) —— 如动态定价与规则引擎,告别“改个价格发个版”

发布时间:2026/11/5 6:50:32 来源:云帆数科 栏目:资讯中心
微服务架构落地:业务域基建(下) —— 如动态定价与规则引擎,告别“改个价格发个版”
大宗商品销采运储系统・六层架构连载业务服务层上一篇我们通过状态机解决了单据流转的合规性问题。单据跑到哪一步红绿灯说了算。但大宗商品交易中还有一个比状态更敏感、变化更频繁的要素价格。与普通电商“商品标价 100 元直接下单”不同大宗商品的定价极度复杂基准价期货/指数 运输方式 地区运费 质量加减价如水分超标扣款 - 付款方式折扣如现款优惠。不仅如此不同客户大客户/散户、不同仓库、不同采购量级计算公式全都不一样。如果把定价逻辑写死在 Java 代码里结局只有一个业务规则每变一次研发就要改代码、走测试、重新发版。业务跑得越快研发越像个“无情的发版机器”。一句话定调业务流程靠状态机管业务规则靠规则引擎管。让懂业务的人去配规则让研发回归架构本身。一、痛点为什么大宗商品的定价不能写死代码我们先看一个大宗商品结算价计算公式示例最终结算价 (期货主力合约结算价 品牌 - 运费) × (1 - 水分扣杂率) × 付款方式系数如果用代码写public BigDecimal calculatePrice(OrderDTO order) { BigDecimal basePrice getFuturesPrice(order.getDate()); BigDecimal premium 0; if (X钢.equals(order.getBrand())) { premium new BigDecimal(50); } else if (Y钢.equals(order.getBrand())) { premium new BigDecimal(30); } BigDecimal freight 0; if (order.getWarehouse().equals(Z海)) { freight new BigDecimal(100); } else if (...) if (现款.equals(order.getPayType())) { // 现款打折 } // ... 几百行 if-else 嵌套 }痛点爆发频繁变更逢年过节促销或者上游钢厂调整了升贴水这段代码就要改测试完再上线。规则冲突销售部说必须打 9 折财务部说大客户打折后不能低于成本线。代码里的if往往顾此失彼。无法追溯半年前那张单子为什么算出来是 3800 块代码早改了根本无法复盘当时的计算逻辑。二、技术选型为什么选择轻量级规则引擎为了解决这种“多条件、易变化”的判定逻辑我们需要把“规则”从“代码”里抽离出来。业界有几种方案方案代表技术优点缺点项目适配重量级规则引擎Drools功能极强支持复杂 RETE 算法学习成本极高太重性能有损耗❌ 杀鸡用牛刀轻量级表达式引擎AviatorScript性能极高编译为字节码语法简单逻辑编排能力较弱✅ 适合简单的公式计算动态脚本引擎QLExpress (阿里开源)轻量、灵活支持宏定义和自定义操作符复杂脚本有安全风险✅本项目首选适合计价与校验本项目选型结论引入QLExpress或Aviator作为动态定价引擎并将规则脚本存放在配置中心Nacos中实现热更新。三、实战落地基于规则引擎的定价中心我们把计价能力抽成一个独立的通用服务或业务域内的PricingEngine。1. 定义定价上下文Context传给引擎的数据必须标准化包含计算所需的全部要素。Data public class PricingContext { private BigDecimal basePrice; // 基准价 private String brand; // 品牌 private String warehouse; // 仓库 private BigDecimal weight; // 重量吨 private String payType; // 付款方式 private Integer customerLevel; // 客户等级 }2. 规则脚本示例存在配置中心业务人员或实施人员可以在后台配置这段脚本无需写 Java。// 计算品牌升水 if (brand X钢) { premium 50.0; } else if (brand Y钢) { premium 30.0; } else { premium 0.0; } // 地区运费 if (warehouse Z海) { freight 100.0; } else if (warehouse M安) { freight 150.0; } // 客户等级折扣V1 大客户 98折现款再减 10块 priceBeforePay (basePrice premium - freight); if (customerLevel 1) { priceBeforePay priceBeforePay * 0.98; } if (payType 现款) { finalPrice priceBeforePay - 10.0; } else { finalPrice priceBeforePay; } return finalPrice;3. 核心代码用 QLExpress 执行脚本Service Slf4j public class PricingEngineService { Autowired private NacosConfigManager configManager; // 动态拉取规则 public BigDecimal calculate(PricingContext context) { // 1. 从配置中心获取当前生效的计价脚本 (支持按业务线/租户隔离) String script configManager.getConfig(pricing-rule-steel.js); if (StringUtils.isBlank(script)) { throw new BusinessException(未找到计价规则); } // 2. 初始化 QLExpress 引擎 ExpressRunner runner new ExpressRunner(); // 3. 准备执行参数 DefaultContextString, Object expressContext new DefaultContext(); expressContext.put(basePrice, context.getBasePrice()); expressContext.put(brand, context.getBrand()); expressContext.put(warehouse, context.getWarehouse()); expressContext.put(customerLevel, context.getCustomerLevel()); expressContext.put(payType, context.getPayType()); try { // 4. 执行脚本 Object result runner.execute(script, expressContext, null, true, false); return new BigDecimal(result.toString()); } catch (Exception e) { log.error(动态计价执行失败, 上下文: {}, context, e); // 兜底策略降级到系统默认的最保守价格或抛出异常 throw new BusinessException(价格计算异常请联系管理员); } } }四、架构融合规则引擎与公共中间件的联动规则引擎并不孤立它深度依赖我们前面搭建的中间件底座结合配置中心Nacos把上述的脚本pricing-rule-steel.js直接放在 Nacos 里。当价格机制改变时业务人员在后台改完脚本点击“发布”。Nacos 自动推送到各个微服务节点无需重启服务。结合 Redis 缓存计价引擎极其高频不可能每次开单都去查一次配置中心和编译脚本。可以在应用启动时把脚本编译为Runner缓存到 JVM 内存本地缓存或者针对计算结果做短时间的 Redis 缓存如同一个客户在 1 分钟内查询同一种商品的价格直接走 Redis。结合日志与可观测每一次计算必须把PricingContext和最终结果存到数据库或日志系统。大宗商品客户来扯皮“为什么比昨天贵了10块”你可以立刻把当时的计算要素和命中的规则调出来自证清白。五、生产级避坑指南死循环与恶意脚本如果业务人员在脚本里写了while(true)会直接把服务 CPU 打满。必须使用 QLExpress 提供的超时控制机制设置execute方法的超时时间参数。规则冲突多头配置同一个商品如果在不同规则里都被定义系统必须明确优先级如专属客户规则 区域规则 全局默认规则这就需要在业务层设计好“规则加载顺序”。金额精度丢失脚本引擎底层可能用Double算涉及到钱一定要在脚本或返回结果后统一用BigDecimal处理并指定四舍五入模式如保留两位小数。六、本篇小结把复杂多变的定价逻辑抽离出来不仅救了研发的头发更赋予了业务极大的灵活性。记住三句话流程与规则分离状态机管流转规则引擎管判定。规则动态下发利用配置中心实现热更新告别发版。安全底线超时控制、金额精度、执行审计缺一不可。下篇预告采购业务上长协合同与分批到货大宗供应链的源头设计。

相关推荐

时间线 | CPO 光互联:从「推迟到 2029」到「量产元年」,只隔一个月
时间线 | CPO 光互联:从「推迟到 2029」到「量产元年」,只隔一个月

英伟达说 2026 是 CPO 光互联的商用元年,SemiAnalysis 一个月前却判断大规模量产要拖到 2028 之后。同一个技术,7 月被说成「再等两年」,8 月被宣布「今年就量产」,两句之间几乎没有中间地带。 大概率谁都没说谎,只是两… · 2026/11/5 6:49:32

Matter 生态|Matter 设备量产时,DAC 到底该提前备好,还是现做现发?
Matter 生态|Matter 设备量产时,DAC 到底该提前备好,还是现做现发?

Matter 产品从研发、认证走到量产阶段,工程团队会遇到这些问题:每台设备的 DAC(Device Attestation Certificate,设备认证证书) 和对应私钥,到底从哪来?怎么安全地进设备?目前行业里… · 2026/11/5 6:49:32

clinpubr 模型评估与比较:从 AUC 到 DCA 的全面指南
clinpubr 模型评估与比较:从 AUC 到 DCA 的全面指南

写在前面 在临床预测模型的研究中,仅仅报告”模型的 AUC 为 0.85”是远远不够的。一个完整的模型评估需要从判别力(Discrimination)、校准度(Calibration)和临床实用性(Clinical Utility)三个维… · 2026/11/5 6:49:32

UCOS-II多任务与系统时钟实战:嵌入式课程设计避坑指南
UCOS-II多任务与系统时钟实战:嵌入式课程设计避坑指南

简介:这份资源是面向嵌入式专业学生与初学者的UCOS-II课程设计完整工程,围绕多任务调度与系统时钟展开,可用于课程实验、自学练手或作为RTOS入门的参考项目。压缩包共63个文件、约283KB,以35个h头文件、3个c源文件为核心代码&… · 2026/11/5 8:12:00

阿童木机器人港股冲刺:服务机器人行业商业逻辑解析
阿童木机器人港股冲刺:服务机器人行业商业逻辑解析

1. 阿童木机器人港股冲刺背后的商业逻辑 阿童木机器人近期披露的招股书显示,这家服务机器人企业在9个月内实现了1.57亿元营收,但净利润仅有94万元。这个看似矛盾的数据背后,藏着服务机器人行业怎样的生存法则?作为联想基金和车好多… · 2026/11/5 8:12:00

冥府技术体系架构:业力计算与轮回调度系统解析
冥府技术体系架构:业力计算与轮回调度系统解析

1. 冥府技术体系架构解析 在冥府技术团队中,我们建立了一套融合硅谷工程文化与东方玄学智慧的技术架构。这套系统需要处理每秒数百万级的因果事件,同时保证六道轮回的绝对公平性。作为从阳间晋升而来的技术管理者,我深刻理解两个世界的技术差… · 2026/11/5 8:12:00

OpenClaw技能库:提升开发效率的即插即用解决方案
OpenClaw技能库:提升开发效率的即插即用解决方案

1. 项目概述OpenClaw "Skills军火库"是一个专注于收集和整理各类OpenClaw技能的精选资源库。这个项目类似于一个数字化的工具箱,里面装满了各种可以直接拿来使用的"技能武器"。作为一名长期关注自动化工具和效率提升的技术从业者,我… · 2026/11/5 8:12:00

小公司如何高效利用大模型API降低成本
小公司如何高效利用大模型API降低成本

1. 为什么小公司应该避开大模型训练微调 去年接触过一家20人规模的AI创业团队,他们花了三个月时间和80%的研发预算在LLaMA模型微调上,结果做出的客服机器人还不如直接调用GPT-3.5的API效果好。这个案例很典型——当前阶段,模型训练和微调就像… · 2026/11/5 8:12:00

智能推荐算法在全屋定制系统中的应用与实践
智能推荐算法在全屋定制系统中的应用与实践

1. 项目背景与核心价值全屋定制行业近年来呈现爆发式增长,消费者对个性化家居解决方案的需求与日俱增。传统定制流程存在方案匹配度低、设计周期长、沟通成本高等痛点。这个毕业设计项目正是瞄准这一市场缺口,通过智能推荐算法重构线上定制流程。我在实际… · 2026/11/5 8:11:00

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码