天道酬勤

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

0%

电商经历之令人头疼的商品库存超卖

(1) 超卖是什么

这里的超卖是指商品个数超卖
超卖是商品的销售数量仓库里现有的商品数量多,会导致电商平台无法履约。

(1.1) 超卖的影响

超卖以后,会导致电商平台无法履约,同时会造成客户不信任平台。

(2) 为什么会超卖

1、数据不一致
2、系统架构设计不合理
3、需求迭代导致的系统问题

为什么不提前备好货?
备货需要钱,而且备了货卖不出去,滞销,相当于赔钱。

为什么供应商不每天送货?
供应商反馈,每天送货成本太高,所以每次都会多发货,希望我们多备货,不要让他每天都送。

运营系统库存 和 仓库库存 不一致
普通商品库存 和 秒杀库存不一致
缓存库存 和 数据库库存不一致
商品个数设置为0后,超时关单还库存 导致缓存又增加库存


(3) 超卖是怎么产生的

超卖问题有很多种情况

(3.1) 不同环境mq重复消费导致的库存超卖

2020-08-16 接到采购侧同学反馈部分商品出现超卖情况
由于供应商存货不足,再加上天气原因补货困难,导致超卖部分无法正常完成履约

超卖商品如下

商品名称 库存 实际卖出 超卖数量
辣些年 素大刀肉片 500g/袋 440 443 3
双汇 香辣香脆肠 32g/支 1500 1511 11
渝馨园 切片面包奶酪味 45g/袋 2000 2008 8

原因

背景:测试同学要打通各个系统之间的预发环境,方便于预发环境验证,直接修改各系统的预发环境配置。(研发同学没有参与)
原因:预发和线上售后mq共用一个topic,消息重复消费导致缓存库存数量偏多,最终导致超卖。

环境 mq 主题 消费组
预发 after_sale_finished after_sale_finished_goods_pre_group
线上 after_sale_finished after_sale_finished_goods_group

举例:【辣些年 素大刀肉片 500g/袋】商品在 2020-08-16 14:07:45 用户主动取消订单(购买数量为3件),由于重复还两次库存(实际还回3*2=6件库存),最终导致超卖3件。


(3.2) 测试时误更新线上商品信息导致超卖

原因:在一个商品批量上传需求中,调用ip地址错误导致调用到线上;

2020-11-06 16:57:28 触发批量更新商品信息操作,修改的商品id为1206,1030的商品,修改了商品的名称,库存,价格;
2020-11-06 17:32:46 发现调用错误,下架商品;
2020-11-06 18:01:00 【订单商品名称异常播报】群里收到反馈。

(3.3) 运营和仓库信息不一致导致的库存超卖

2020-12-02,接到采购同事的反馈,襄阳12-01订单存在大量超卖导致的缺货。

研发通过查询数据,发现从系统和数据角度看,并没有超卖,分析如下

分析 内容 备注
商品名称 好丽友 巧克力派 68g/盒
商城商品ID 184000366
SKUID 11003554067557
商城商品当日限售数量 211份
截止23:10商品库存剩余量 40份 从库存管理角度看1201日巧克力派销量应为171份
订单中心1201销量数据 171份
当日销售数据 当日销量(171)= 当日总库存(211)- 当日剩余库存(40)
结论 没有超卖

那么问题出在哪?

商品名称 商品id 采购系统 1130库存数量 11-30 采购给出的可售库存数量 12-01 商城上架数量 12-01 商城当日销量 12-01 上传当日销售剩余量 12-02分拣 仓库实际库存量 12-02 仓库分拣报缺 12-02实际缺货量 11-30销量 误差
好丽友 巧克力派 68g/盒 184000366 216 211 211 171 40 161 11 54 55 1

看四组数据就会发现一些很有意思的事情:
(T)日仓库库存 = (T+1)日销量 + (T+1)日库存销售剩余量 + (T)日销量
211 = 171 + 40

结论:那么问题来了,库存的数量是变化的,采购拿(T)日仓库库存去制定(T+1)销售计划,而没有去除(T)销量,相当于(T)日销量可能会卖两遍,原来”超卖“问题由来于此。

(3.4) 不同场景售卖导致的库存超卖

预期销量:5000
实际销量:7930

| 商品ID | 1021420 |
| 商品名称 |【秒杀】本地带泥圆白萝卜 1kg/份|
| 秒杀活动ID | 636521607504400 |
| 秒杀活动库存量 | 5000 |
| 普通商品库存量 | 5000 |

订单销售量:
秒杀:4990
普通商品:2940

原因

售卖时间线:
2020-12-09 17:00:03 开始当做秒杀商品开售,库存5000份
2020-12-09 17:35:11 秒杀库存5000份售罄
2020-12-09 18:29:00 操作该商品在秒杀列表中下架,系统自动转为普通商品库存在卖。
2020-12-09 18:29:21 开始当做普通商品开售,库存5000份
2020-12-09 19:59:47 售罄处理,卖出2940份

原因:由于普通商品库存和秒杀商品库存分离,但是没有做联动。
只要秒杀有这种在一天中把商品从活动中下掉就有可能卖超。

解决办法:
短期方案:商品当日在活动中有销量,不允许在作为普通商品再售卖。
长期方案:解决库存联动问题。

(3.5) 库存调整+超时未支付还库存导致的库存超卖

2020-12-21 有个问题麻烦帮忙看一下,cityid=22 goods_id= 15006456 缓存里是4 数据库里是0

找见原因了,运营改了一次库存数量
当时有4个人下单了未支付
运营改完 数据库库存个数为0 缓存库存个数为0
4个人超时未支付,又把4个商品的库存还回来了,这个时候数据库库存个数为0 缓存库存个数为4