Skip to content

超卖防护机制

本文讲解什么是超卖、系统如何防止超卖,以及你该注意什么。

什么是超卖

超卖是指:卖出的数量 > 实际库存数量。

经典场景:

  1. 仓库里实际只有 100 箱矿泉水
  2. 张三建了一张发货单要 80 箱(思考中……)
  3. 同时李四也建了一张发货单要 60 箱
  4. 两张单都确认发货 → 实际需要 140 箱,但仓库只有 100 箱
  5. 结果:必然有一个客户收不到货

系统如何防止超卖

《到可到对货》使用三层机制防止超卖:

第一层:库存锁定

  • 创建草稿发货单时,系统立即锁定对应数量的库存
  • 张三建 80 箱的单 → 锁定数量 +80,可用数量 -80
  • 李四建 60 箱的单 → 此时可用数量只剩 20(100-80=20),系统提示库存不足
  • 李四只能要 20 箱或更少

第二层:可用数量校验

  • 库存可用数量不足时,系统在数据库层面进行原子扣减校验
  • 可用数量不够直接拒绝创建,不允许强行创建
  • 这是系统防超卖最核心的一道防线

第三层:数据库并发控制

  • 发货确认的那一刻,系统在数据库层面做原子扣减
  • 如果两个人的确认请求同时到达,数据库层面保证一条一条处理
  • 不会出现「检查时够、扣减时不够」的情况

为什么还是可能出现库存不准

三层防护保证了系统不会出现负库存,但系统库存和实物仍可能不一致:

  1. 入库漏记:货到了但忘了在系统中入库,系统库存比实物少
  2. 出库漏记:实物已出库但没在系统中操作,系统库存比实物多
  3. 实物损耗未登记:发霉、破损、过期等未登记
  4. 盘点不准:上次盘点的基数就错了

发现库存不准该怎么处理

  1. 核查实物:实际库存到底是多少
  2. 核查最近流水:看入库、出库有没有遗漏登记
  3. 用盘点校准:创建盘点单,用实物数量校准系统数据

预防超卖的最佳实践

  1. 先入库、后发货:实物到货后第一时间入库,再建发货单
  2. 定期盘点:至少每月一次全盘,确保系统库存和实物一致
  3. 同一商品避免多人同时操作:防止并发下的数据冲突
  4. 关注预警商品:库存预警商品被超卖的风险最大

常见问题

Q:系统能设置「不允许超卖」吗?

A:系统默认就是不允许超卖的——库存不足时直接拒绝创建发货单,无法绕过。如果某些业务场景确实需要先录单后补货,建议先入库再建单,或拆单处理。

Q:锁定的库存什么时候释放?

A:两种情况:1)确认发货后,锁定自动转为实际出库;2)取消草稿后,锁定自动释放,可用库存恢复。

Q:已经超买了、有客户收不到货怎么办?

A:首先与客户沟通实际情况,部分发货或延期补发。其次在系统中通过拆单、修改数量等方式处理。最重要的是:查出为什么会超卖,从流程上堵住漏洞。