这是《复杂业务下的订单中心演进实践》系列的第 1 篇。
本系列将基于一次真实的订单中心重构经历,系统性拆解:
订单中心为什么会出现、该承担什么能力、以及如何在复杂业务中持续演进。
一、很多文章里的“订单系统”,一开始就不真实
在不少技术文章中,订单系统的起点往往是这样的:
-
一个订单表
-
下单 → 同步调用 ERP
-
成功 or 失败
但在真实的企业级业务中,订单系统几乎从来不是这样演进的。
至少在我们的业务里,一开始面对的,就不是一个“简单订单系统”,而是一个从诞生之初就高度复杂的局面。
二、真实的业务起点:订单从一开始就“各玩各的”
1️⃣ 线下业务先行:ERP 本身就是订单系统
最早的订单来自线下地推业务:
-
业务员拜访药店
-
代客户下单
-
订单直接录入流通 ERP
这一阶段:
-
没有统一订单入口
-
没有统一订单模型
-
ERP 本身承担了订单的全部职责
可以理解为:
订单系统 = ERP
2️⃣ 线上渠道出现:订单开始分流
随着业务发展,线上渠道逐步上线:
-
商城
-
App
-
微信小程序
客户开始可以自行下单。
但问题在于:
这些渠道并不是通过一个统一的订单系统接入的,而是各自实现了一套下单逻辑,各自对接下游系统。
3️⃣ 业务线拆分:复杂度真正爆发的起点
医药行业本身的特点,订单天然就分为多条业务线:
-
西药
-
医美
-
器械
-
中药
-
管控类
同时叠加:
-
药店经营类型不同
-
客户资质不同
-
可售商品范围不同
📌 同一个客户,在不同业务线、不同渠道,看到的商品、价格、库存规则完全不同。
4️⃣ 多 ERP 并存:复杂度指数级上升
在商品维度上,又进一步区分出:
-
自营商品 → 流通 ERP
-
合营商品 → 线上 ERP
最终形成的真实现状是:
多个渠道 × 多个系统 × 多条业务线 × 多套 ERP
全部直连
任何一个变化,都会牵一发而动全身。
三、真正的问题:复杂性被错误地分摊了
这个阶段,我们开始频繁遇到一些问题:
-
渠道系统需要知道商品是自营还是合营
-
渠道系统需要感知 ERP 的差异
-
下发失败、重试、补偿逻辑散落在各个系统
表面看是“系统复杂”,但本质上是一个更深层的问题:
订单的复杂性,被错误地分摊给了渠道系统。
而渠道系统,本不应该承担这些职责。
四、订单中心的出现:不是“多一个系统”,而是“换一种边界划分”
在这种背景下,我们开始引入订单中心。
但订单中心并不是为了:
-
抽象一个统一订单表
-
做一个“更大的下单接口”
而是为了完成一件更重要的事情:
把“订单相关的业务决策”,从渠道系统中收回来。
一个非常贴切的类比:斗拱支付
商户在接入支付时,不应该关心:
-
银行接口差异
-
支付渠道的失败重试
-
对账、清算、补偿
所以有了斗拱支付。
而在我们的业务中:
订单中心,扮演的正是“订单领域里的斗拱”。
- 对上,统一承接各类订单渠道
- 对下,屏蔽不同 ERP 的差异
- 中间,负责订单的路由与决策
五、在这种业务背景下,订单中心必须承载什么?
在多渠道、多业务线、多 ERP 并行的情况下,订单中心至少需要具备以下能力。
1️⃣ 统一订单语义,而不是统一字段
订单中心的第一职责,不是设计一个“通用订单表”,而是:
让公司内部对“什么是一张订单”达成共识。
例如:
-
商品归属(自营 / 合营)
-
所属公司主体
-
库存策略
-
下游执行方式
这些语义,不能再由渠道系统各自理解。
2️⃣ 承担订单路由与业务决策责任
订单中心真正需要回答的问题是:
这张订单,应该由哪个系统来执行?
而不是:
“接口有没有调用成功?”
3️⃣ 隔离渠道与 ERP 的演进节奏
-
渠道变化快
-
ERP 变化慢
-
业务规则变化最频繁
订单中心,正是这三者之间的缓冲层。
六、为什么要按这些维度去设计?
这些设计维度并不是“架构师拍脑袋想出来的”,而是业务自然逼出来的结果。
| 设计维度 | 来源 |
|---|---|
| 商品归属 | 多 ERP 并存 |
| 库存策略 | 是否共享分公司库存 |
| 订单路由 | 下游执行差异 |
| 状态机 | 下发必然失败 |
| 幂等 | 多渠道高并发 |
七、这样设计的好处是什么?
对上游渠道
- 接口稳定
- 不感知 ERP 差异
- 新业务线接入成本低
对下游 ERP
- 单一职责,只负责执行
- 不感知渠道复杂性
- 失败可控、可追溯
对系统整体演进
- 新渠道 = 新 Adapter
- 新 ERP = 新路由实现
- 核心模型长期稳定
八、结语
当一个系统开始面对
多渠道、多业务线、多 ERP 并行
那么订单中心就不再是“可选项”,
而是唯一还能继续演进的形态。
在下一篇中,我会继续拆解:
👉 订单中心到底应该具备哪些核心能力,又有哪些能力不应该放进去。