03 · ERP & SUPPLY CHAINP014 MIN
订单状态、取消与幂等
把订单从草稿到交付的合法变化和库存副作用建成显式流程。
MENTAL MODELORDER LIFECYCLE
01DRAFT
→02CONFIRMED
→03PROCESSING
→04SHIPPED
→05DELIVERED
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
Order Status
描述订单生命周期阶段,如 DRAFT、CONFIRMED、PROCESSING、SHIPPED、DELIVERED。
Order Cancel
在允许阶段终止未完成承诺,并释放预占、停止任务、记录原因。
Idempotent Command
同一取消或确认命令重复到达时只产生一次有效业务结果。
取消按钮点两次释放了两遍库存
两个请求都读取 CONFIRMED,分别增加 available 并减少 reserved。
- 01
状态更新带 expected_status 条件。
- 02
库存释放与状态迁移同事务。
- 03
重复请求返回已取消结果,不重复写 movement。
取消只发生一次,库存流水与订单状态保持一致。
马上动手
- 列出 CONFIRMED 可执行的命令与角色。
- 说明 shipped 后为何需要 Return 而非 Cancel。
常见坑
- 任何状态都能直接改成任意状态
- 先发外部消息再提交状态
- 取消只改 status 不释放资源
05 · KNOWLEDGE CHECK订单状态为什么不应该由前端直接 PATCH 任意字符串?查看答案⌄
答案
合法迁移依赖当前状态、角色、业务条件和副作用;应暴露 confirm/cancel/ship 等命令,由领域服务统一执行。