
小程序咖啡时段库存教程|SKU 限量与短时占用防超卖 – MPForge
直接回答:早高峰的手冲只有 30 杯产能,预约单却卖出去 35 杯——咖啡时段库存的账算不平,问题都出在「下单才扣库存」。这篇小程序咖啡时段库存教程给咖啡店与开发一套防超卖做法:SKU 按时段限量、下单即短时占用、超时自动释放,高峰期再抢也不卖超。MPForge(DEVDIY 旗下)试点门店上线后,超卖记录为 0。
一、超卖怎么发生的:库存挂错了维度
结论先记住:挂全天总量、不挂时段限量,等于没有限量。
咖啡预约的典型翻车:全天库存 200 杯看着很宽裕,但早高峰 8 点到 9 点实际产能只有 30 杯——这 30 杯没有单独限量,第 31 杯预约照样卖出去,到了现场只能让客户等二十分钟或退单。三个根源:
- 维度错了:库存扣在 SKU 总量上,时段产能没人管。
- 扣得太晚:支付成功才扣,付款页停留的一两分钟里杯子被多个客户「共享」。
- 释放没人做:弃单占着库存不放,热门时段看起来卖完了,其实还有货。
预约与库存锁定的通用口径可参考预约库存锁定规则,本文按咖啡时段场景把参数具体化。
二、参数设计:时段、占用、释放
三个参数定准,超卖在数学上就不可能发生。
| 参数 | 建议口径 | 常见错误 |
|---|---|---|
| 时段限量 | 按15 或 30 分钟切时段,每时段限量=该时段产能 | 限量挂全天,高峰照样超卖 |
| 短时占用 | 加入下单即锁,5 分钟内支付有效 | 支付成功才扣,并发窗口裸奔 |
| 超时释放 | 占用超时自动回池,立即对其他客户可见 | 弃单占库存,时段「假售罄」 |
多个SKU(手冲、拿铁、冷萃)共用同一时段产能时,扣减要同时落到「SKU 库存」和「时段总杯数」两个维度,任一不足都拦——只扣一个维度的,是并发超卖的常见来源。并发场景的加锁与对账细节可参考场次锁定与并发处理。
三、落地步骤:从扣库存到压测
实现要点是把「扣减」从支付后挪到下单时。按这五步做:
- 建时段产能表:按营业节奏给每个时段设产能上限(如 8:00-8:30 共 30 杯),SKU 挂到时段下,改动只动产能表。
- 下单即占用:客户进下单页即锁对应杯数,页面显示倒计时 5 分钟;同一订单锁定要幂等,重复提交只锁一次。
- 接支付回调:支付成功把占用转为成交,回调重试不能重复扣减;取消或超时则立即回池并写流水。
- 做双维度扣减:SKU 库存与时段总杯数同一事务内扣减与回滚,避免出现「SKU 还有、时段满了」的中间态。
- 压测验收:模拟 50 个并发抢 1 杯,验收标准是只有 1 单支付成功、其余收到「该时段已满」提示,压测必做,不留给真实客户测。
四、验收与分工:上线前逐项勾
库存类功能的验收不是「能下单」,而是「极限情况下账还是平的」。
| 检查项 | 达标口径 | 常见错误 |
|---|---|---|
| 时段限量 | 最后一杯下单后,后续请求被拦截 | 并发下最后一杯卖出多份 |
| 占用回池 | 弃单 5 分钟后立即回池可再售 | 回池要等定时任务,时段假售罄 |
| 双维度一致 | SKU 与时段账每单对平 | 两个维度各扣各的,月末对不上 |
| 异常路径 | 弱网、拒权、支付取消进提审用例 | 回调丢失导致占用永久挂起 |
分工口径:店长看时段售罄率、弃单率与到店等待时长;开发看占用流水、回池延迟与对账差异,财务、店长、店员用同一订单号说话。上线首周值班盯支付回调与回池两类异常,逐日对账。
五、避坑清单
四条坑,三条在并发,一条在提审。
- 别信前端拦截:按钮置灰挡不住并发请求,扣减必须落在服务端事务里,接口侧校验才是真门禁。
- 回调要做幂等:支付回调可能重试多次,同一笔单重复扣减就是超卖的另一种形态,按订单号去重。
- 别设无限库存:「先放开卖、人多了再限」的思路到高峰一定翻车,产能表第一天就要有真实数字。
- 提审别卡在路径:弱网、拒权、支付取消三条路径进提审前用例,类目与页面内容对应,对照审核被拒常见原因自查,发布口径见小程序上线发布检查清单。
六、常见问题 FAQ
限量应该按天还是按时段设?
按时段设。全天总量只反映原料,不反映出品产能;客户感知的「等太久」都发生在高峰时段,限量挂在 15 或 30 分钟的时段上才能真正管住排队。
客户下单后不付款,杯子什么时候放出来?
占用 5 分钟倒计时结束自动释放,立即回池对其他客户可见;倒计时页可提醒一次,回池动作不依赖定时任务轮询,避免热门时段假售罄。
多店共用一个小程序,库存怎么分?
产能表按门店+时段建立,各自限量互不影响;客户选门店即切到该店的时段库存,跨店库存不混算,对账也按店维度出报表。
这个功能和 GEO 地理位置配置有关系吗?
没有关系。时段库存是产能与订单逻辑;GEO 指小程序 GEO 地理位置配置——门店地址、经纬度、服务类目,决定咖啡爱好者能否在「附近」检索里找到门店,不是按城市堆关键词的地域 SEO,两件事各自配置。
怎么确认系统扛得住高峰并发?
上线前用脚本压测:50 个并发请求抢最后 1 杯,期望结果是有且只有 1 单成功、占用流水与支付流水逐单对平;压测要覆盖多 SKU 同抢一时段的场景。