电商-减库存方式
在订单的模块中,有两种减库存的方法,一种是下单减库存,一种是付款减库存,还有广大网友说的一种预扣的方式。简单说一下三种方式的概念。
预扣:
预扣就是下单的时候,先减掉库存,如果此时库存有的话,通知用户下单成功,可以付款支付。在指定的时间没有付款,库存回库。
付款减:
在下单的时候并没有减库存,在支付成功之后才减库存。
下单减:
下单的时候减库存。
总结起来,我认为其实就是两种方式:*1 下单减库存 *2.付款减库存
接下来主要说明这两种方式的优缺点;
下单减和支付减
对于用户下单直接付款的情况来说,这两种方式相差并不大(先不讨论极端情况,在下单付款成功的几十秒到一两分钟之间,库存发生有到无得变化)。所以主要的区别就是用户拍下之后放弃支付,此时订单的状态是未付款状态,它的下一个状态有三种,一种是取消之后的已取消(订单关闭),一种是继续支付导致的待发货,还有一种是用户再次放弃支付或者支付失败而继续是未付款的状态。
分别对这三种行为作出分析:
1. 已取消状态:
由用户手动取消和系统设置的过期时间到了自动取消。这种状态会导致一个恶刷的问题,比如,A商品一种有100件,库存量并不大,此时竞争对手派出水军恶刷,只下单不购买,虽然系统有自动过期时间,过期时间过了,库存回回库,但是假设说A商品在24小时之内的价格是促销价,竞争对手恶意刷,导致一直没有库存,活动结束,极端情况就是A商品还有100件,一件也没有卖掉。
这种情况是在库存少的条件下,系统过期时间长,非常不利。目前我们在做的系统库存并不少,默认100万件,过期时间也比较短,半个小时,所以影响可控。还有就是客户端或者服务器端可以防止恶刷。比如,淘宝,一直下单会被限制继续操作,需要验证才能继续操作。
2.待发货状态:
此时,用户有明确的购买意图,只是由于账户余额不足,或者是想再思考一下要不要购买。此时,如果是下单减,我们为用户保留了这个库存(尤其是当参与活动的时候,一般商品都有促销时间,当商品倒计时10分钟就可以进入五折优惠的时候,如果是下单减,那么付款的应该是原来的价格库存减得也是原来的;如果是支付减,那么如果十分钟之后付款,照理说应该减得是五折优惠的库存,但是由于创建订单记录的快照还是优惠前的价格,支付价格还是优惠前的价格,库存却是优惠后的库存。一般活动促销,运营都会有一个促销销售量的统计)。此种优惠活动,如果采用支付减。会导致超卖。目前这一版本的商城没有采用优惠券或者限时抢购的活动,所以这一版本不用考虑超卖的问题。私以为淘宝2012年11月以前采用下单减,就是考虑到超卖的问题。
但是项目有娃娃兑换的功能,用娃娃兑换,考虑极端情况的话,一个娃娃兑换一个skII,这个时候就相当于超卖了,如果skII公司只打算出两个(成本太高,并且希望用户兑换不到skII去兑换其他的商品,带动兑换量,抓娃娃的激情),那么这个情况下,几秒钟都是可能出现库存不足的情况的。如果是支付减(此时支付的是娃娃),我们把用户的娃娃都锁定了,最后告诉用户没库存了,体验似乎不是太好。而如果下单减,只锁定前两位用户,后面的之间告诉用户没有库存了,此时数据库的订单表也不会有很多的无效订单。
3.待支付状态:
这种情况虽然也有发生,但是支付失败或者再次放弃支付并不是用户不想买(竞争者应该不会恶刷然后二次恶刷吧),而且系统设置的过期时间依然是创建订单之后的半个小时,影响并不大。
综上
我目前觉得项目有一个兑换商品的功能,而且库存足够,且不想淘宝保留72小时,只保留半个小时。采用下单减比较合理。
亲测,淘宝虽然2012年11月之后,增加卖家自己选减库存的方式,但是大部分还是采用下单减得方式。除了技术实现应该还有营销、产品的考虑。