外观
超卖防护机制
本文讲解什么是超卖、系统如何防止超卖,以及你该注意什么。
什么是超卖
超卖是指:卖出的数量 > 实际库存数量。
经典场景:
- 仓库里实际只有 100 箱矿泉水
- 张三建了一张发货单要 80 箱(思考中……)
- 同时李四也建了一张发货单要 60 箱
- 两张单都确认发货 → 实际需要 140 箱,但仓库只有 100 箱
- 结果:必然有一个客户收不到货
系统如何防止超卖
《到可到对货》使用三层机制防止超卖:
第一层:库存锁定
- 创建草稿发货单时,系统立即锁定对应数量的库存
- 张三建 80 箱的单 → 锁定数量 +80,可用数量 -80
- 李四建 60 箱的单 → 此时可用数量只剩 20(100-80=20),系统提示库存不足
- 李四只能要 20 箱或更少
第二层:可用数量校验
- 库存可用数量不足时,系统在数据库层面进行原子扣减校验
- 可用数量不够直接拒绝创建,不允许强行创建
- 这是系统防超卖最核心的一道防线
第三层:数据库并发控制
- 发货确认的那一刻,系统在数据库层面做原子扣减
- 如果两个人的确认请求同时到达,数据库层面保证一条一条处理
- 不会出现「检查时够、扣减时不够」的情况
为什么还是可能出现库存不准
三层防护保证了系统不会出现负库存,但系统库存和实物仍可能不一致:
- 入库漏记:货到了但忘了在系统中入库,系统库存比实物少
- 出库漏记:实物已出库但没在系统中操作,系统库存比实物多
- 实物损耗未登记:发霉、破损、过期等未登记
- 盘点不准:上次盘点的基数就错了
发现库存不准该怎么处理
- 核查实物:实际库存到底是多少
- 核查最近流水:看入库、出库有没有遗漏登记
- 用盘点校准:创建盘点单,用实物数量校准系统数据
预防超卖的最佳实践
- 先入库、后发货:实物到货后第一时间入库,再建发货单
- 定期盘点:至少每月一次全盘,确保系统库存和实物一致
- 同一商品避免多人同时操作:防止并发下的数据冲突
- 关注预警商品:库存预警商品被超卖的风险最大
常见问题
Q:系统能设置「不允许超卖」吗?
A:系统默认就是不允许超卖的——库存不足时直接拒绝创建发货单,无法绕过。如果某些业务场景确实需要先录单后补货,建议先入库再建单,或拆单处理。
Q:锁定的库存什么时候释放?
A:两种情况:1)确认发货后,锁定自动转为实际出库;2)取消草稿后,锁定自动释放,可用库存恢复。
Q:已经超买了、有客户收不到货怎么办?
A:首先与客户沟通实际情况,部分发货或延期补发。其次在系统中通过拆单、修改数量等方式处理。最重要的是:查出为什么会超卖,从流程上堵住漏洞。
