库存可销售数量和订单对不上时,MSI inconsistency 命令很有用,但我不会看到输出就直接管道到 compensation。它根据订单状态推导差异并追加记录,不会修复造成差异的支付回调、取消流程或导入脚本。
先只读生成清单
php bin/magento inventory:reservation:list-inconsistencies -r
php bin/magento inventory:reservation:list-inconsistencies -c参数会随版本变化,先看 --help。保存结果后抽取订单核对:是否真实发货、取消、重复下单,或第三方系统直接改状态。
同一订单短时间多次变更时,重点查 webhook 重放和人工批量操作。错误业务状态会让工具生成数学上正确、业务上错误的补偿。
补偿是追加记录,不是修改历史
Reservation 设计为 append-only。正确修复通常是新增相反数量,使订单链合计回到预期,而不是删除旧行。生产前应在同版本副本演练,记录目标 SKU 修复前后 salable quantity,并分批执行,防止消费者瞬间积压。
修完必须复盘来源
常见根因是旧订单缺初始 reservation、外部 OMS 直接写状态、取消事件未触发、消费者停机或插件重复处理。结束条件是历史差异按范围归零,新订单链闭合,消费者无 backlog,前台数量符合业务预期。

