电商技术解密之取消订单
一个简单的取消订单操作背后的业务逻辑是多么的复杂。
在网购的流程中,大家一般接触的比较多的都是正向流程,即下单的流程:浏览商详、加入购物车、提交订单、确认收货等。但是系统设计的时候往往会发现逆向流程比较正向流程更加的复杂,大家经常接触的逆向流程一般主要两类:取消订单和售后退货。
今天先跟大家聊下取消订单背后的逻辑,对用户来说只是一个简单的申请取消的按钮,但是后台确实做了比较复杂的逻辑。例如要判断订单能不能取消?关联订单需不需要一起被取消?应该退多少钱给用户?等等一系列的问题。
下面先看下取消订单一个比较典型的业务流程,我拿京东作为举例。
当在京东上下过一单之后,在我的订单里面可以看到这个订单的详情,这时候会看到“申请退款”这个选择。这里叫法不一样,有的平台这里叫做“取消订单”,这个时候你可以进行申请。
然后你可以看到取消的状态,刚刚取消后查看状态为“取消处理中”,下面的进度里面可以看到是正在进行仓库的拦截。因为订单已经产生了,系统会将订单推送到仓库系统进行生产,库内作业是有一段时间的,要拣货、打包等。如果此时订单还没出库,你发起取消订单的申请,这时候会到仓库进行拦截,找到这单告诉仓库的人不要发了。如果订单已经出库,这时候你再发起取消订单的申请,那么你的申请可能会失败,一般主流的做法是可以收货的时候进行拒收或者申请售后退货。但是要付出代价的,有的会扣你的运费,有的会扣经验值;也有免费的,但是有次数限制。
当取消成功后,取消状态会变成已经完成,订单状态会变成已经取消。
上面只是取消订单一个比较简单的场景:一单只有一个商品。
如果一张订单中有多个商品,并且被拆成多个包裹后事情就变得复杂了。
首先一个问题是,多个包裹支不支持按照包裹维度进行取消?不支持的话只能整单取消,用户体验不是很友好,所以主流电商平台都是支持按照包裹维度进行取消的。
那么问题就来了
先看下运费的问题
原来你因为买了多个商品,达到了免邮的标准,这时候你取消其中一个包裹,那么可能达不到免邮的条件了,这个时候怎么办?
如果不收运费这其实是一个业务的漏洞,有的电商平台为了用户体验更好些,或者是避免后台逻辑过于复杂是真的没有收运费的,主要是靠风控体系来控制风险,如果一个人经常采用这种方式套运费的话是会被拉黑的。但是大部分的电商平台还是需要收运费的,当发现取消一个子单后,剩下的订单无法满足包邮的条件,那么需要用户支付运费,或者是从取消订单的退款金额里面把运费扣掉,或者是从你的虚拟账号里面把运费扣掉(比如扣你的积分)。
促销的相关问题
另外跟运费类似的是各种促销,满减、满赠、满返等也存在类似问题。
我们这里以满减作为例子,如果买了多个商品达到了满减的条件,享受了满减的优惠。当取消一个包裹单后如果满减的条件还满足,那么就可以正常取消。如果由于取消了这个包裹单满减条件达不到了,这个时候是需要把关联订单也一起取消的,不然也会存在业务漏洞。
资源回退问题
上面的条件都达到了可以正常取消订单,但是还需要考虑把生成订单时所占用的资源回退掉,这里主要是库存、券、积分等。
库存:生成订单的时候会先锁定库存,保证仓库可以正常生产,如果取消订单后,需要把这个库存释放,增加前台销售库存的可用量。具体库存的逻辑可以参考之前的文章电商技术解密—管好库存没那么容易
积分:生成订单后也会给用户发放一些虚拟资源,例如积分、经验值。订单取消后也需要把之前发放的资源进行回收。
优惠券:如果之前下单的时候使用了优惠券,那么订单取消后也需要把原来用掉的优惠券返还到用户的账号中,方便用户后面继续使用。
具体流程可以看下面的业务序列图
可以看到一个简单的取消订单操作背后的业务逻辑是多么的复杂。上面的流程是用户自己发起取消订单,还有一种情况也会触发取消订单这个流程。当你下单后没有在规定的时间内进行付款,那么系统会自动把你的订单进行取消。因为要释放资源,主要是库存的资源。
取消订单后台的业务逻辑就先介绍到这里,可能有些遗漏或者错误,欢迎大家拍砖、讨论!
相关阅读:
本文由 @DearNicole 原创发布于人人都是产品经理。未经许可,禁止转载。
很棒的文章,退货环节要细分场景会更好,比如收到货退货,没发货退货等等会更好
很棒的一篇文章
bug点击流程图再点击会消失
很干货的文章。
但是现在的满减大部分都是取消后依然享受优惠啊,
凑单后最后把凑单产品退掉,优惠依然有,淘宝跟京东都是
只有前台的逻辑,没有物流生产的取消流程
不满足促销条件,需要整单进行取消???应该依然子订单取消,退款时考虑有无促销情况下的差价,算好退款价格就行了啊。
有一次我就是取消订单后不满足促销条件,但依然享受了促销的优惠。。。。不知道会不会被记录,哈哈。写的很好,特别是泳道图画的很好,上下都有角色名称,用户体验很好,点赞。
作者对于促销商品如满减等活动的描述 我不敢苟同 如果对于满减的商品取消订单 就简单得把所有参与满减的商品订单都取消取消 是不是会流失很多单子啊 如果采取部分商品退款 且退款金额按照退款商品金额占总订单商品优惠金额比例进行退款比较合理呢? 而且貌似淘宝 京东都是这么设计的把!
你说的这个也是一种解决方案,但是也会存在一个漏洞,比如淘宝出一个满300减100的活动,我实际就想买一双200的鞋,这时候我就需要再买100的背心,这样就可以满减了,之后再把100的背心退掉,就相当于钻空子了,其实这种思想,作者的文章中有所体现,这个例子和他提到的免邮是一个道理的。如果实行部分退款,从程序逻辑上可能会变复杂,而且也不好衡量推多少合适,而淘宝推出这个活动的本意就带有点捆绑销售。
如果满300减100,最后把100的背心退了,不可能完全退100的啊,应该也要减去相应的优惠吧
那如果鞋子250,背心50,这种情况收回优惠的话,平台还会亏50
鞋子200,背心100,满300减100实际支付200,折算鞋子133.33,背心66.67。
如果退掉背心会退66.67元,用户以133.33买到价值200的鞋子。淘宝现在也是这样处理的,让钻空子。
厉害厉害,前京东既是产品经理又是研发经理
如果身居两个角色 耦合性太强
我之前做的淘宝天猫售后的,没毛病的 取消订单 后台会经常很多操作
泳道图里有个小问题,订单取消不会存在修改积分的问题,因为积分这玩意都是在确认收货时才会增加,若下单就添加,就会出现之前有位也提过的一样,若下单就加了积分,积分被使用了,那还如何扣减,那就再加个未收货积分锁定?那就变的复杂了
哈哈哈 有道理 你的分析把我给整笑了。哈哈哈 简单粗暴
感谢分享!
感谢分享~
有一部分商品比如易碎品,损坏确实不需要退货的,是不是审核的时候有一项“是否要退货”选项?
管理商品的时候就应该定义好这个商品是否能退
在返还用户积分那一项,如果积分已被用户消耗了呢?
根据自己平台积分的定位和使用场景与结果,设定积分对应的收回规则。
请教下,我理解的取消订单和申请退款是两种状态,取消是指已下单未付款,只涉及退回优惠信息,而申请退款是已经付了款,还要涉及款项处理
嗯,我也这么认为!
不错。这些逻辑上的东西,如何更好的处理的更好,泳道图不错。
还有一个问题,申请退款旁边的修改订单是做什么用的?我在京东购物,没有发现这个按钮哦
请教一下,申请退款为什么是包裹维度而非SKU维度?是因为只有包裹能查询到出库状态,sku查询不到吗?还是因为一个包裹中虽然可以知道部分sku未出库,但包裹纸箱之类的已经产生成本,所以不能再取消了?
无形之中和京东的取消订单流程完全一致,绝对没有抄袭,因为后台一般是抄袭不了。当时我坚持要在订单中加一个状态“取消处理中”,为这个状态和团队争论了好久。但是我们优惠券限于技术的障碍,没有返还。公司的财务需求都是我处理,填了一堆坑啊! 🙁
退积分的逻辑还有点问题,比如这在退货之前把积分用了。那么积分就退不会来了 😥
如果他历史积分还有余额就扣历史余额,如果没有就扣到0为止,这里是有点空子可以钻。。。。
没有就扣到负数。JD这样干过。只是用户体验不好。所以还是要设置规则,对于频繁搞事的用户就要拉黑,就要扣到负数,退货运费自理等方式。
1.积分在于什么时间节点发放;2.积分是及时可使用还是分冻结、可用等其它类型;
积分应该不是在这个时候到你账户上吧,积分一般是确认收货之后的事吧
现在公司在做商城系统,涉及到退款的时候,已经想了很多,但限于网上找到的资料有限,还是挖了一些坑。
这方面资料确实很少
后悔没早点看到这一系列文章……走了好多弯路。。。
现在也不晚,希望可以让你后面少走点。