用户点取消,页面提示「取消成功」,商品详情页仍显示「仅剩 0 件」。locked_stock 表里这笔订单的两件货还挂着,三天没动。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,取消接口只把订单状态改成 cancelled,解锁库存的调用写在一个 try 块后面,前面抛了异常就跳过。异常被 catch 吞掉,只留一行 debug 日志。
碰到「取消订单库存解锁」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。报错里带路径的,先去看那个路径在不在、权限对不对。
UPDATE wp_sku s JOIN wp_order_item i ON i.sku_id = s.id
SET s.locked_stock = s.locked_stock - i.qty,
s.stock = s.stock + i.qty
WHERE i.order_id = 8812;
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,把解锁库存放进和状态更新同一个事务,任何一步失败整体回滚;解锁前查库存流水,确认这笔订单没解过,避免重复加回;catch 里至少写一条 error 日志带订单号,别再用 debug。
最后用这个标准收尾,取消后立刻刷新商品页,可售数量加回两件,locked_stock 归零。
