电商产品最复杂的模块莫过于“后台模块”,而后台模块中较为复杂的又莫过于“库存管理”,而一般来讲b2c电商产品中的库存包括七大部分,分别是:可销售库存、订单占用库存、不可销售库存、锁定库存、调配占用库存、调配中库存、虚库存。而这几个的关系是这样的:总库存=可销售库存+订单占用库存+不可销售库存+锁定库存+调配占用库存-调配中库存-虚库存。
可销售库存
可销售库存就是普通用户在电商前端看到的的库存。而一般为了防止竞品通过前端库存来预测其销量和总库存,因此前端只显示“有货”或“无货”,当某sku的可销售库存>0时,前端显示“有货”,用户可加入购物车或者立即购买;当某sku的可销售库存≤0时,前端显示“无货”,用户无法加入购物车或立即购买,并提示“商品已下架”,同时可进行“到货提醒”的功能设置。
其实除此之外,电商产品在出于提高转化率的目的上还可以再次优化,例如,在库存管理上,可以根据某商品的销售情况得出一个风险库存预警值x,当该sku的可销售库存>x时,前端显示库存充足,当该sku可销售库存情况:0<可销售库存≤x时,前端提示库存紧张,以促进消费,当该sku可销售库存≤0时,则提示商品已下架,设置“到货提醒”。
到货提醒
不可销售库存
经常讲要理论符合实际,这句话套用到库存管理上来讲,就是库存的系统记录需要与库存实物相对应。
产品由于破损无法销售,在系统中也必须有相应的状态。实际操作中,无法作正常销售的原因很多,例如包装破损、性能故障、型号标错等等。为了理论符合实际,在系统中也会定义出这一部分的库存为不可销售状态(unsellable inventory)。
不可销售库存在系统中的标注方法有两类。一类是使用不同的sku代号来区别,例如某一正常商品的sku编码是351038,它所对应的不可销售库存的sku编码则是351038u;另外一种方式是使用同一种sku,但是专门开辟一个不可销售库存区,所有不可销售的库存统一管理。
订单占用库存
当生成订单时,可用库存数量减少,订单占用库存(order occupied inventory)数量增多,变化的数量即订单中的产品数量,这个很容易理解。
设立订单占用库存的原因在于:订单的生成和库房的发货在时间上是异步的。这样做的优点在于:保证已经生成订单的库存,这部分客户可以顺利收货;而且客户在下订单时,能够保证有产品发货。若不设立订单占用库存,则会产生客户下订单后,库存发现无货可发的尴尬情况。
而处理订单时,针对的只是已经被订单所占用的库存,与前台的销售无关。订单出库后,系统中扣减的也只是订单所占用库存。
为了方便理解,这里以下单后锁库存为例,举个理想化的例子:假设一个袜子的可销售库存是100,那么在未下单前,可销售库存与订单占用库存为以下情况:
当然,现实中还有许多异常情况导致用户下单后未立即付款造成可销售库存的减少从而影响后续用户的购买,最终造成库存积压。比如:
1)某个用户下单后,由于各种原因不想买或者出现网络异常而没有立即进行支付。
2)竞争对手或者其他居心叵测的用户持续下多个单而不支付。
因此,针对以上情况,一般的解决方案如下
1)若用户下单后未进行支付,进入到待支付环节,同时进行时间限制(半小时或者1小时),过时后释放订单占用库存,增加相应的可销售库存。
2)对每个用户单次购买的数量进行限制(比如每个用户最多购买5件),当用户下单后未支付且再次进行下单时,提示其有相应的未支付订单。
3)通过技术手段对设备id及ip地址检测,防止其通过多个设备及ip地址进行破坏性下单。
锁定库存
在销售中,经常会使用的一种促销方式是降价,这一方式的效果会非常好,成功的降价促销可以在很短时间内将商品一售而空,可销售库存直接转化为订单占用库存。
但是有一些情况下,销售方并不希望这么快就将所有的库存都售出。有的时候是因为所有库存全部作降价促销的成本很高,有的时候是防止竞争对手的恶意采购,更多的情况下,则是希望将这一产品的降价作为引子,带动网站的流量和整体销售,这就需要将促销分批次进行。
为达到以上的目的,会采用锁定库存(locked inventory)的方式。库存被锁定后,无法直接销售。促销进行一段时间后,可用库存为0,无法继续销售,必须在解除锁定后才能转化为可销售库存,继续进行销售。
虚库存(v)
以上所说的,都是指在实物在库房中的库存。但库房的总容积量是一定的,不可能无限制的扩展。而依据长尾理论,电子商务的最大优势则是几乎无限的商品展示和销售能力。如何将有限的库房处理能力和无限的可销售商品联系赶来呢?方法早就有了,虚库存(virtual inventory)。
有一些产品,虽然库房中并没有,或者并没有很多,但是供应渠道非常通畅,可以在很短的时间内送到库房中,变为库存;另外一些产品,销售量少,库存的管理难度大,只有当产生订单后,才向供应商采购。这部分不在实际的库存中,但是可以很快采购到的货品就叫做虚库存。
虚库存的存在,是为了使前台网站的可销售数量大于实际可销售数量。当存在虚库存时,电商库存公式会变成:
s=i-o-u-l+v
(s-可销售库存 i-总库存 o-订单占用库存 u-不可销售库存 l-锁定库存 v-虚库存)
调拨占用库存
很多b2c企业有着超过一个以上的库房。多个库房的设置,主要是因为规模发展到一定程度后,库存量很大,很难在一个单独的库房中存储,另外,也经常会在客户聚集地附近设立库房,以满足当地客户的需求。
各个库房之间,必然存在着库存的分派和调拨。当产生调拨计划后,调出地库房的某一部分库存就会被占用,这部分库存被称为调拨占用库存(transport inventory)。调拨占用库存和订单占用库存的性质相似。当存在调拨占用库存后,电商库存公式变成:
s=i-o-u-l+v-t
(s-可销售库存 i-总库存 o-订单占用库存 u-不可销售库存 l-锁定库存 v-虚库存 t-调拨占用库存)
调拨中库存
库存的调拨,必然会存在一段时间,库存既不存在于调拨出库房,也不存在于调拨入库房,这一部分库存就像漂在空中一样,称为调拨中库存(air inventory)。设1号库房为调拨出库房,2号库房为调拨出库房,在调拨发货前,这两个库房的库存结构为:
i1=s1+o1+u1+l1-v1+t1
i2=s2+o2+u2+l2-v2+t2
i=s+o+u+l-v+t
若从1号库房调拨出量为a的库存到b库房,在1号库房调拨发出后,2号库房收到调拨前,两库房的库存结构为:
i1=s1+o1+u1+l1-v1+t1-a
i=s+o+u+l-v+t-a
(s-可销售库存 i-总库存 o-订单占用库存 u-不可销售库存 l-锁定库存 v-虚库存 t-调拨占用库存 a-调拨中库存)
可以看到,两个库房的总库存减少了,调拨中库存在路上,只能计在财务库存中,而并不能计入实物库存。只有当调拨完成后,库存进入2号库房,总库存才会恢复。
i2=s2+o2+u2+l2-v2+t2+a
以上是通用性的一些库存结构综述,在各家公司不同的商业模式和运营流程中,有着各自的特殊性,会使用到更加复杂的库存结构方式,以适应本公司的实际情况,这里就不一一说明了。
总结
到这里,防止库存超卖设计解析就结束了,,不足之处还望大家多多包涵!!觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持。(吹一波,233~~)
下面和大家交流几点编程的经验:
1、多写多敲代码,好的代码与扎实的基础知识一定是实践出来的
2丶 测试、测试再测试,如果你不彻底测试自己的代码,那恐怕你开发的就不只是代码,可能还会声名狼藉。
3丶 简化算法,代码如恶魔,在你完成编码后,应回头并且优化它。从长远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。
4、可以去腾讯课堂的图灵学院学习一下java架构实战案例,还挺不错的。
最后,每一位读到这里的网友,感谢你们能耐心地看完。希望在成为一名更优秀的java程序员的道路上,我们可以一起学习、一起进步。
内部交流群469717771 欢迎各位前来交流和分享, 验证:(009)必过!!