售后退款单显示已完成,158.00 已原路退回,商品库存仍然是 0。运营手工改了三次库存,隔天又被打回原值。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,退款流程只调了渠道退款接口和订单状态更新,回滚库存那段写在发货取消的分支里,退款走的是另一条路径。库存流水表里查不到这笔退款对应的入库记录。

「退款库存回滚」这类改动最怕改一半,回滚脚本先准备好,再动生产。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

UPDATE wp_sku s JOIN wp_order_item i ON i.sku_id = s.id
SET s.stock = s.stock + i.qty
WHERE i.order_id = 8812;
INSERT INTO wp_stock_log (sku_id, qty, type) VALUES (9, 2, 'refund');

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,退款成功后按订单明细逐条回滚库存,并写一条 type=refund 的库存流水,方便对账;回滚用 stock = stock + n 的形式,别先查再写,避免并发覆盖;退款单加唯一索引,回滚前判断是否已有对应流水,防止重复入库。

最后用这个标准收尾,退款完成后库存加回原数量,流水里出现一条 refund 记录,重复点退款不会再加。

作者 9823189