inventorySetQuantities 覆盖写入冲掉当天销量
现象#
ERP 每小时把 WMS 的库存绝对值写回 Shopify,下午三点那次同步后 Available 从 18 跳到 40,当天已经卖出的 22 件又被算成可售。
原因#
- inventorySetQuantities 是绝对值覆盖,不关心 Shopify 期间发生的订单与调整
- 写 on_hand 时可用量会同步变化,覆盖前若没有差额校验就会把销量抹掉
- changeFromQuantity 传 null 等于跳过 compare-and-swap,并发下直接盖掉别人的写入
- ERP 的库存口径含未上架与已预留数量,和 available 不是同一个含义
处理步骤#
- 先定清楚写
name: "on_hand"还是available,两者不要混着发 - 每次写入带
changeFromQuantity,遇到CHANGE_FROM_QUANTITY_STALE就重读再试 - 同步前比对
inventoryLevel.updatedAt,比 ERP 快照新就放弃本次写入 - 把 ERP 侧的预留量与在途量剔除,只推实物可售数
- 高频场景改增量:用
inventoryAdjustQuantities传 delta,而不是绝对值
验收标准#
两次同步之间下单 5 件,第二次写入后 Available 等于 WMS 数量减 5,不再出现凭空回涨。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。