1.什么是超卖问题?
商城平台中超卖问题是经常发生的,那什么是超卖问题?超卖问题就是已售商品库存 > 实际库存,现实中存在哪些超卖的情况,1.产品设计逻辑不严密导致超卖;2.高并发导致商品超卖;今天我们讨论的是产品设计的超卖问题。
2.超卖问题现状
- 商城端用户下单扣减库存,下单未支付取消订单、支付未发货取消订单、已发货退货成功:商城库存+1;
- ERP发货、退货库存+1,支付同步后会冻结库存,发货释放冻结库粗;采购出入库、盘点等也会更新库存;
-
ERP与商城对接:ERP库存发生变化会更通知商城更新更新商品库存(已ERP为主)
image.png
3.解决方案一
image1.目前ERP在订单支付之后会冻结订单中商品库存,实际订单同步是ERP可售卖库存(ERP总库存-ERP冻结库存),因此订单支付之后理论上不存在超卖问题(极端情况除外),那么用户下单到用户支付之间的时间段可能会发生超卖情况,解决方案如下:
(1) ERP同步可售库存到商城,ERP可售库存=ERP总库存-ERP冻结库存;BBC库存=ERP可售库存-BBC冻结库存;
(2) 商城冻结库存逻辑及操作举例如下:
下单:商城库存-1,商城冻结+1,ERP库存不变,ERP冻结不变;
支付:商城库存不变,商城冻结-1,ERP库存不变,ERP冻结+1;
发货:商城库存不变,商城冻结不变,ERP库存-1,ERP冻结-1;
下单未支付取消订单成功:商城库存+1,商城冻结-1,ERP库存不变,ERP冻结不变;
支付未发货取消订单成功:商城库存+1,商城冻结不变,ERP库存不变,ERP冻结-1;
已发货退货成功:商城库存+1,商城冻结不变,ERP库存+1,ERP冻结不变;
已发货退款成功:商城库存不变,商城冻结不变,ERP库存不变,ERP冻结不变;
(3) 推演一下数据:商城初始库存10,ERP初始库存10,用户购买1个商品;
模块 | 操作 | 商城库存 | 商城冻结 | ERP库存 | ERP冻结 |
---|---|---|---|---|---|
购物 | 发货下单 | 9=10-1 | 1=0+1 | 10 | 0 |
购物 | 支付 | 9 | 0=1-1 | 10 | 1=0+1 |
购物 | 发货 | 9 | 0 | 9=10-1 | 0=1-1 |
取消订单 | 下单未支付取消订单 | 10=9+1 | 0=1-1 | 10 | 0 |
取消订单 | 支付未发货取消订单 | 10=9+1 | 0 | 10 | 0=1-1 |
售后退货、退款 | 已发货退货成功 | 10=9+1 | 0 | 10=9+1 | 0 |
售后退货、退款 | 已发货退款成功 | 9 | 0 | 9 | 0 |
网友评论