详解:电商前端库存逻辑的设计

23 评论 21509 浏览 197 收藏 12 分钟

本文主要对电商平台的订单系统相关库存逻辑进行了详细的阐述,一起来文中看看~

一、库存的概念

电商的业务场景中订单的流程常常伴随着库存的变化;对于erp来说,库存可能涉及入库、出库、分库等操作,这里暂且不讨论erp中库存的处理逻辑,主要就电商平台的订单系统相关库存逻辑进行说明。

  1. 总库存指:供应商仓库该商品的实际库存;
  2. 冻结库存指:订单临时占用的库存,冻结库存可以根据订单取消或发货等情况进行释放;
  3. 可用库存指:即总库存-冻结库存,一般指在前端显示且用户可下单的最大数量。

库存的使用场景:

  1. 常规订单流程:需要运用到总库存,冻结库存和可用库存;
  2. 运营活动:特价商品活动需要占用一定的库存,以保证能有充足的库存支撑活动的进行;
  3. 赠品库存:如果把赠品当做一款SKU的情况下,即和正常下单路径一样,当把赠品单独出来的情况下,需要设置赠品库存(在我们的业务系统中,赠品由商家手动添加并设置库存),同时需要建立一套单独的库存处理体系。

二、常规订单流程中库存的处理

总库存的数量可以同步ERP或人工设置,人工设置的情况下,供应商点击“确认发货”后减少,退款时若订单已发货则供应商点击“同意退款”/系统自动同意退款则增加,退货时供应商点击“确认收货”/系统自动确认收货则增加。

同步ERP数据的条件下,总库存可以不受订单状态的影响(值得注意的是:如果在ERP系统中,确认发货的节点和扣减总库存的节点存在时间差的情况下,这个时间段,实际上会造成系统已扣减冻结库存了,但是ERP总库存不变,所以会造成可用库存短时间偏大),也可以先扣减/增加总库存,因为总库同步肯定会覆盖之前修改后的数量。

冻结库存在用户从app下单时增加,在供应商确认发货/取消订单时减少,“待发货”的订单申请退款成功则减少。

另外,取消退款和退款失败的情况下,对库存无影响。

结合订单流程的中各个节点进一步说明:

用户下单:下单时由于订单生成之后需要预定一定的库存,保证该订单能发货,所以需要增加对应商品的冻结库存;这里需要注意的是,不同的业务场景对于增加冻结库存的节点定义不一样。

一般来说在两个节点考虑增加冻结库存:一个是在生成订单时,一个是在付款成功时。

对于库存有限,时间紧迫的下单场景来说(比如:秒杀),在付款成功的时候增加冻结库存会比较合理,因为未付款的订单会影响到其他人购买这款商品。但对于常规场景来说,在生成订单时占用库存会比较好,否则会影响用户的下单体验(但是一定要有系统自动取消订单的功能以释放冻结库存)。

确认发货:确认发货的动作可以是ERP订单出库的时候自动确认发货,也可以是手动确认发货。无论哪种场景,只要触发发货动作的话,均需扣减总库存,同时扣减冻结库存。若ERP自动同步总库存的情况下,则ERP中会扣减总库存并自动同步至系统。

取消订单:首页,在我们系统中定义在付款成功之前可以取消订单,取消订单的时候需要扣减冻结库存(即去除库存的占用)。

申请退款:若系统定义为商品付款后,发货前可以申请退款的情况下,退款成功则需要扣减冻结库存(商家操作“同意退款”或系统超时自动审核)。

申请退货:若系统定义为商品发货后,可以进行申请退货的情况下,退款成功且供应商已收货的情况下需要增加总库存(商家操作“确认收货”或系统自动确认收货),若ERP自动同步库存的情况下,则ERP中会增加总库存并自动同步至系统。

附:下单流程图

三、活动库存的处理

实际做法:由于在数据库中没有活动库存这个字段,导致原公式:可用库存=总库存-冻结库存,无法统一修改;在实际开发中冻结库存=普通商品冻结库存+活动库存之和,另外活动库存仍将保留在活动表中,活动表中包括字段活动库存,活动已用库存。

1. 活动库存概念

特价商品在设置活动时,可设置活动库存,目的为限制本商品以特价销售的数量(设置的活动库存不能大于总库存),同时也保证参加活动的商品的数量,超出活动数量的商品(活动库存用光的时候)将以原价购买。

2. 数据库库存相关字段

商品表相关字段:总库存、冻结库存;活动表相关字段:活动库存、活动冻结库存。

普通商品可用库存=总库存-冻结库存-活动库存之和

活动商品可用库存=活动库存-活动冻结库存

(实际上在我们开发过程中,由于初期数据库设计未能考虑到后面的拓展性,页面取数据的时候,普通商品可用库存=总库存-冻结库存,到后面增加促销活动时,这个公式若需要变动则影响太大了。所以我们保持原来的公式不变,让冻结库存=普通商品冻结库存+活动库存之和,这个问题凸显了技术架构的重要性。)

3. 下单过程中的库存逻辑

活动创建成功,则对应的商品需将活动库存A件从总库存B件中间分出 ,此时普通商品可用库存为(B-A)件,特价商品活动可用库存为A件。

用户下单时,以活动价购买商品C件,则普通商品可用库存仍为(B-A)件,特价商品可用库存为(A-C)件,活动冻冻结库存为C件。

活动库存不足/超出限购数量时,下单D件,其中以特价购买的为D1件,以普通价购买的商品为D2件。则普通商品可用库存为(B-A-D2)件,普通商品冻结库存D2件,特价商品活动可用库存为(A-D1),活动冻结库存为D1件。

当特价商品可用库存不足时,特价商品售完,所有商品都以普通价购买。当活动期间若有订单取消或退款、退货,则活动库存重新>0时,可继续以剩余的数量按特价购买商品。

4. 活动商品库存扣减及回滚

活动商品售出之后,增加活动冻结库存,活动有效期间取消订单/退款成功则减少活动冻结库存;普通商品的库存不受影响,但是特价商品的可购数量需要增加/减少。

活动中若ERP由于发货需要调整冻结库存和总库存,此时不管发货的是不是特价商品,都是直接扣减冻结库存和总库存(因为ERP没有分库而且库存自动同步的情况下,总库存一定会减少,那边此时也需要扣减冻结库存保证普通商品的可购数量保持不变,而活动商品的库存不需要处理)。

活动结束:如活动库存100件,卖了20件,则将该商品的活动库存清零,且活动冻结库存的数量合并到冻结库存后活动冻结库存也清零。最终冻结库存加20,此外由于活动库存变小,普通商品可用库存也变大(等于是把活动库存没用完的还回去)。

四、赠品库存的处理

赠品库存基于我当前的业务系统情况进行说明,我们目前的赠品总库存及赠品活动库存都是在后台手动设置的,所以是一套单独的逻辑。

赠品表相关字段:赠品总库存,赠品活动库存可用;活动表相关字段:赠品活动库存,赠品已用库存;

赠品总库存可人工设置,每个使用赠品的活动都会设置对应的赠品活动库存。赠品活动库存可用=赠品总库存-赠品活动库存之和。(注意这个赠品库存可用,是指在后台添加赠品活动时可以设置的最大活动库存数量)

购买商品时,所送的赠品不能大于赠品活动库存;赠品活动库存不够送的情况下,要友好提示客户。当提交订单后,若有送赠品,则自动扣减对应的赠品活动库存和赠品总库存。

活动有效期间,取消订单/退货,退款审核通过则自动增加赠品活动库存和赠品总库存;活动失效后,取消订单/退货,退款审核通过则自动增加赠品总库存。活动失效时,对应的赠品活动库存清零。

五、前端库存展示

按正常逻辑:如果商品不存在特价/秒杀活动的情况下,直接以普通价购买,显示普通商品可用库存即可;如果商品存在秒杀/特价活动的情况下,应该要显示活动商品的库存。

但是存在一种情况就是购买的一批商品中部分商品需要按照活动价算,剩余商品按照普通价算,那么这时候取普通商品可用库存/活动商品可用库存都是不对的。

所以最终我们在权衡之下,还是用了普通商品可用库存+活动商品可用库存之和(即总库存-冻结库存-活动冻结库存之和)。

 

本文由 @不桡 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 好文必须点赞,学到了!

    来自四川 回复
  2. 讲得好,赞一下!!

    来自四川 回复
  3. 咨询一下,关于消费者已经收到货后的退货退款,您图中是先审核再退款,退款成功后再生成退货订单,仓库收货是在哪个环节呢?如果是在生成退货订单之后,是否会造成仓库积压退货产品呢?

    来自湖南 回复
  4. 有问题咨询下:是否存在一个商品同时参加多个促销活动,且多个促销活动均有活动库存,如果存在这种情况,扣库存的时候,是不是就有问题了,不知道应该扣哪个库存

    来自广东 回复
    1. 这种后台不支持设置的,后台能设置的是产品活动价+活动库存+促销截止时间,同一时间内不会支持创建另一个促销价

      来自黑龙江 回复
  5. 咨询一个问题,对于多仓商家,活动库存需要指定仓库吗,还是只指定一个总数。
    举例,要做一个秒杀活动,活动库存总数100个,这100个是分派到各个仓库呢,还是只是一个总数;
    如果是指定一个总数;
    1、普通商品购买时如何处理呢;每一笔交易难道都去检查一下,对应商品,所有仓的库存总剩余吗;
    2、会不会出现一种情况,热点地区的仓库按照普通销售卖太多了,秒杀的时候达不到促销效果呢;

    来自广东 回复
  6. 这个下单流程图 能传一份清晰的给我吗 感谢

    来自广东 回复
  7. “活动中若ERP由于发货需要调整冻结库存和总库存,此时不管发货的是不是特价商品,都是直接扣减冻结库存和总库存(因为ERP没有分库而且库存自动同步的情况下,总库存一定会减少,那边此时也需要扣减冻结库存保证普通商品的可购数量保持不变,而活动商品的库存不需要处理)。”
    您好,这一段没太看懂。个人认为活动中如果需要临时调货,应当增加活动库存,同时减少普通商品库存,而总库存不变,冻结商品库存也不应当改变(因为冻结商品库存是用户已经下单购买的)。

    来自北京 回复
    1. ERP里是不存在设置活动价格和活动库存的,ERP里只有总库存和冻结库存,它不管你拿这个产品来干啥。活动库存在商品中台完成设置

      来自黑龙江 回复
  8. 收!

    回复
  9. 我们后台是没有做冻结库存这种逻辑的,在提交订单扣减库存、取消订单、退款成功增加库存的增减库存是同样时,就只有一个总库存,例如一个普通商品的总库存为100个,设为秒杀商品,库存为10个,普通商品和秒杀商品共用总库存,如果普通商品比秒杀商品先卖完,则秒杀商品也不能秒杀了,前台显示已秒完,这种没有冻结库存的逻辑会引发什么问题么?

    来自广东 回复
    1. 第一,就像你描述的,普通商品卖完之后,秒杀商品就没得卖的,那你们秒杀商品库存的意义仅仅在于限制了最大可秒数量,而不能保证本次活动的数量,自然就达不到引流的目的
      第二,为什么我们系统引入了冻结库存的概念:如果把系统按照“前台”“中台”“后台”来区分的话,商家的ERP等于是后台,ERP中的总库存是真实库存,erp中发货了就是真实库存减少了同时也扣减了总库存,那么自然是不需要冻结库存的;但是站在平台方的角度,我的库存同步于ERP的,但是下单之后且ERP未发货之前,ERP的库存不会减少,那么对于已下单的商品来说,要占用对应数量的库存(冻结库存),同时也告诉其他客户可以采购的数量减少了(即可用库存),否则下单到发货的这个时间差会导致商品超卖

      来自广东 回复
    2. 感谢,受教受教

      来自广东 回复
    3. 没库存照样卖,对于秒杀只需要定好秒杀数量就行。没有谁铁定说没库存就不能秒杀,规则人定的,可以变的。没库存抓紧进货,这种情况PO的配合很重要。O(∩_∩)O~~

      来自广东 回复
    4. 商品及时补货这个在活动及运营策略上的确是需要注意的点,但是目前讨论的问题是指系统库存在前、中、后台的增减流程逻辑合理性问题,不是指运营及商品上的人为增减库存

      来自广东 回复
    5. 主要还是前台库存取自商品中台,商品中台库存取自ERP,前台和中台可以频繁交互,而中台和ERP如果频繁交互会比较耗资源。而且诚如作者回复,会产生在两次交互的中间空档期导致前台产品多卖,而erp实际库存不够的问题。

      来自黑龙江 回复
  10. 你好,有几个疑问烦请赐教。

    关于赠品库存的处理,文章有提到“当提交订单后,若有送赠品,则自动扣减对应的赠品活动库存和赠品总库存。”
    1、“赠品可用库存”这个名词,按照前面2种(常规和活动)增扣库存的名词定义,功能为什么不类比它们的“xx商品可用库存”;并且增加一个“赠品活动冻结库存”呢?
    这句话即变为,“当提交订单后,若有送赠品,则自动扣减对应的赠品可用库存,增加冻结库存。”
    2、按照你的思路,我理解为:赠品可用库存=某一赠品活动预设的的库存阈值,赠品活动库存=该赠品活动的可用库存,是否正确?
    3、常规订单,确认发货时“扣减总库存,同时扣减冻结库存”;赠品库存的处理,提交订单后,怎么就磨刀霍霍向赠品总库存了呢?

    来自上海 回复
    1. 关于第2点,你的理解是正确的; 第三点:因为我们这边系统往ERP系统中同步订单明细的时候,赠品不会同步过去;所以赠品就采用了一种简单方式来处理; 没有对于错,只是因为这样更符合我们的业务场景

      来自广东 回复
    2. 好的,谢谢啦

      来自上海 回复
  11. 您好,有个商品入库的问题想请教下。
    现在公司打算重新打造供应链系统,每个商品入库的时候都需要按照后台系统规则重新贴条形码。
    我的问题是应该买什么样的机器才能按照系统规则生成对应的条形码?
    这个机器怎么连接到后台系统,在入库时按照采购单以及sku信息实时去生成条形码?

    回复
    1. 对于ERP的商品入库这一块没有做过深入了解,所以提几条建议仅供参考:
      1,条形码与商品是一一对应的,这个应该是由厂家去报备申请,所以你们肯定不是后台按照一定的规则去生成条形码
      2,市场上有对应的扫条枪,按照我的理解:每个扫码枪都会有一个独特的设备ID号,而你们的erp需要先有一个条形码库,条形码库应该至少包括商品ID和条形码两个字段,那么在使用机器进行扫码并输入对应的数量的时候,扫码枪可以对商品上的条形码进行解析,erp就可以获取到哪个商品进货了多少数量;但是需要注意的是进货的信息还包括商品的生成日期,有效期,这些信息应该是不包含在条形码内的

      来自广东 回复
    2. 条形码是和商品对应的,但是存在的问题是有些商品厂家存在一个条形码对应多个SKU的情况,所以就没有办法按照商品条码扫码入库。

      来自北京 回复
    3. 这么看来应该是厂家有问题呢,条形码和SKU必须是一一对应的,否则很难开展后续的入库工作呀

      来自黑龙江 回复