日期:2026-08-18
我们服务的连锁书店,线上商城和门店库存是两套,顾客网上下单到店自提,门店说没货,线上显示有,吵架的不少。教辅季一到,热门练习册线上线下抢同一批库存,超卖频发,店长被投诉到怀疑人生。我们进场时,线上库存是凌晨跑批从门店同步一次的,白天卖掉的永远慢半拍,顾客到店才发现书被别人买走了,体验相当糟。更糟的是,有些门店自己还有私域团购,卖的也是同一批书,三套库存互不知道,超卖之后只能给顾客退款加道歉,口碑掉得厉害,店长都不敢推爆品了。
现在线上线下共用一个库存中心,每笔门店销售、每笔线上订单、每笔门店私域团购都实时占库。顾客线上下单选到店自提,系统先预占库存再通知门店备书,顾客到店核销,核销同时回写库存释放待提占位。教辅季热门品种开启预占保护,线上抢不到自动就近调拨其他门店,调拨在途也占源店库存,避免双卖。店长在自己的平板上看得到全渠道实时库存,不用再打电话问隔壁店有没有货,调拨申请也能一键发起。
库存实时同步是第一道关,门店 POS、线上商城、私域团购三套库,我们没去合并数据库,而是在中间架了一层库存中心做唯一真相源,任一方卖一本就调接口减一本,加购就预占。自提履约协同难在核销和回写的时序,顾客核销了库存没减,下一个顾客还能买,我们把它做成核销即回写的一笔事务。教辅季超卖靠预占加就近调拨压住,热门书一上线就锁一部分给线上专供,门店留一部分保供。就近调拨要算好物流时效,调拨慢于顾客到店就白搭,所以调拨触发设在库存低于阈值且本地无货时提前跑。私域团购那套库存也得并进来,我们专门做了团购占库接口,不然它永远是个盲区,超卖就从这漏。
案例片段(已脱敏): 库存预占与自提核销配置片段(字段示意):
inventory: source_of_truth: center reserve: online_cart: 30min pickup_order: until_verified transfer: trigger: stock_below_and_local_empty eta_hours: 6 verify: on_pickup: release_reserved_and_decr一次超卖拦截:教辅季某练习册总库存 50,线上预占 30、门店在售 20,顾客到店自提核销瞬间回写,未出现双卖;此前无预占时同款一天超卖 8 本,店长被投诉到门店群炸锅。
门店系统老旧是绕不开的坑,POS 接口文档不全,占库调用的字段名和现网对不上,我们派人对接两周才摸清单子,这弯路本来能少走。后来我们把库存中心的接口做成幂等且可回放的,门店网络抖一下重发也不会重复减库存,这点上线前没重视,第一次断网就重复减了库存,连夜补了幂等才稳。私域团购的占库我们专门留了接口监控,哪天它超占了一眼能看见。
超卖率从教辅季高峰的约百分之三降到千分位,顾客到店无货的投诉基本消失。自提履约时效从原来人工核对平均十几分钟,降到核销即走。库存周转因为我们看得清全局,滞销门店的货能及时调去热门店,整体周转快了一截。线上线下转化也上来了,顾客线上看到有货才敢下单,到店核销又带一波连带购买,连带购买率比纯线上高。文中数据为项目复盘口径,已做脱敏。
书店库存这坑,分两套库就是定时炸弹,我们一开始也想图省事只做凌晨同步,被教辅季的超卖打脸后才下决心做实时库存中心。预占比事后纠错便宜太多,热门书提前锁库存,门店和线上各取所需。核销回写必须是一笔事务,这点在设计评审时被我们忽略过一次,上线当天就出了双卖,连夜补的。库存中心做唯一真相源,比去合并两套数据库稳,门店系统老,动它的风险比架一层大。私域团购那套库存别当盲区,它卖的也是同一批书,漏进来就超卖。
线上线下库存不分家,对书店来说不是优化是救命。我们吃过教辅季超卖的亏,店长被顾客堵在收银台,那种场面不想再来,后来把私域团购那套库存也并进来,三套账才第一次合一块。实时库存中心是我们顶着门店系统老旧的压力架的,没去动 POS 数据库,只在上面盖了一层,这选择后来证明稳。预占这门手艺看着简单,阈值和时间设错就全乱,我们调了三周才把线上购物车预占时长和自提预占逻辑理顺。就近调拨的时效是灵魂,调拨比顾客到店还慢就纯属添乱,所以触发条件卡在库存低于阈值且本地无货才提前跑。核销回写那笔事务,是我们上线当天翻车补的,现在看是常识,当时真没想到。连带购买这块,自提顾客顺手带本杂志的比率比纯线上高,运营后来专门在核销页推了关联书单。库存周转能快一截,是因为全局看得见,滞销店的货挪去热门店,死库存活了。