Java生鲜电商平台-订单中心服务架构与异常订单逻辑
订单架构实战中阐述了订单系统的重要性,并从订单系统的信息架构和流程上对订单系统有了总体认知,同时还穿插着一些常见的订单业务规则和逻辑。上文写到订单的拆单部分时搁置了,现在接上文继续剖析订单中心的后台核心业务模块。
![](http://upload-images.jianshu.io/upload_images/18227144-b0aff8f6e9566d6e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/658/format/webp)
上文讲完了订单正向流程,本文从订单逆向流程继续一窥订单中心全貌。
订单正向流程相对常规,业务虽然从商品中心,物流,会员,仓库,内容等各大模块进行数据交互,但涉及的业务逻辑易于理解,所以难度并不大。
但在订单逆向流程中,业务流程和逻辑则相对复杂。因为在订单正向流程中,每一个环节都有可能触发逆向订单任务流;而在订单正向任务流中,每一个子环节上的商品在后台出库发货流程中所处的具体节点不一致,所以不同节点触发的订单逆向流程的处理规则则有差异。
订单逆向流程
定义:订单逆向流程是为了解决在订单流程中出现的退货退款的业务流程。在前端订单状态下,各个环节都有触发的可能,而订单的不同节点触发订单逆向流程的处理方式不同。订单触发订单逆向流程,可以按照主体与客体划分,可分为用户端触发和商家端触发两种。
用户主动发起
![](http://upload-images.jianshu.io/upload_images/18227144-0ddc8476a291921e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/849/format/webp)
1. 待付款取消订单
说明:待付款订单取消订单分为两种情况:
用户主动取消;
超时系统自动取消,此时订单状态变更为已取消。
在待付款订单状态下,取消订单无需客服审核。流程图如下:
![](http://upload-images.jianshu.io/upload_images/18227144-1ccee2d288bb0fd1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/865/format/webp)
2. 待发货取消订单
说明:在待发货订单状态下取消订单时,此时应根据订单此时所在的节点作出处理。
由于订单在支付完成后,发货单可能已经推送至WMS,甚至已经交接发货,状态未及时回传更新。为避免货款两失,要先暂停订单出库,在调度中心查询订单是否推送至仓库。
若尚未推送至仓库,则停止推送至仓库;若已经推送至仓库,则去wms中心去拦截,拦截成功则暂停出库。
若暂停失败,则拒绝取消订单申请,回复“订单已经出库”;
若暂停成功,取消订单申请通过,则进入退款流程,同时通知调度中心该订单取消。WMS订单进入返库流程。
![](http://upload-images.jianshu.io/upload_images/18227144-0b9308530d848faf.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/824/format/webp)
3. 待收货/交易成功退货
说明:在用户提交退货申请后,需经过客服审核。审核通过则回到原有状态,审核通过后则进入退货流程并告知用户退回地址及收件信息,此时进入退货流程。系统生成退货入库单,当仓库收货后,进行退款。
在待收货状态下平台设计者仍需考虑退货是否全退的问题。当SKU全退时,原订单则中止进入交易关闭状态。当订单中发生部分退货时,原订单的状态不变,维持待收货或交易成功状态,同时退货的部分生成交易售后订单。剩余未退货部分仍然允许申请售后。
![](http://upload-images.jianshu.io/upload_images/18227144-c2766384b9e45377.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/859/format/webp)
注意:在订单流程逆向流程中,涉及到财务数据的处理时 ,为了保证财务数据的真实性及可追溯性(这与会计数据的处理原则有关,具体问下会计或者财务同学),都不能直接在原订单状态下修改,因此在设计订单逆向流程时应注意这一点。