订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节;因此订单模块对一电商系统来说,重要性不言而喻。
同时,订单是一个公司生存甚至盈利的核心,而电商系统中的订单系统则是支撑订单处理的载体,因此订单系统的设计则十分重要。
要了解订单系统,首先我们要从订单系统的信息架构上去认识订单系统,从而对订单系统建立整体认知;
定义:为适应组织分工的需求和提升效率,系统将整个交易业务流程拆分成若干个可控的环节。
待付款:用户提交订单后,尚未付款,等待用户支付,由于待付款订单会锁定库存,所以会设置超时自动取消功能。
待发货:用户付款之后等待商家发货。
待收货:商家以发货,等待用户收货。
已完成:用户确认收货后,订单交易完成。
已取消:付款之前取消订单。超时未付款或用户取消订单都会产生这种订单状态。
售后中:用户在付款后发货前申请退款,或商家发货后用户申请退,换货。
待审核:用户提交退换货申请后,等待审核的状态,在用户已付款待发货的状态下,订单尚未推送至仓库或在仓库拦截发货成功,系统可直接审核通过。当审核不通过时,回转至正常流程中。
待退货入库:退货申请审核通过之后,等待用户退货入库。
待退款:退货入库成功后,等待退款给用户。
待换货入库:换货申请审核通过,等待用户换货入库。
换货出库中: 换货入库之后,生成换货出库单,订单出库。
售后成功:当退货,退款成功之后,流转至售后成功状态,退货,退款的售后成功在主流程下属于交易关闭。
1.在订单过程中进行安全校验,主要是为了检测用户是否在黑名单上,用户购买行为是否正常等,当检测到不正常时终止下单;
2.从商品中心获取商品信息(SKU,规格,价格等)
3.从营销中心获取商品,订单促销信息(优惠券,促销活动),判断是否满足优惠条件,计算出优惠金额。
4.在会员中心获取会员权益,例如平台抵扣积分,优惠券折扣条件等。
5.在调度中心检验销售层库存,按照调度规则锁定区域库存。
6.根据拆单规则(商家,仓库,订单类型等)将订单拆分成若干个子订单,根据运费模板计算运费,根据商品金额,运费,优惠金额计算应付金额(实付款)。
定义:是指在实际销售中将订单的优惠去分摊到每一件SKU中去结算。
订单实付金额=商品金额(SKU金额总计)+运费-总优惠金额
总优惠金额=促销活动优惠金额+优惠券优惠金额+虚拟币抵扣金额
按照商品比例分摊。
案例:
订单中有甲乙两店的商品A、B、C、D、E 包邮。商品A,D参加跨店满200减40的活动(活动1),商品B,C参加满100减10的活动(活动2)另外用户还使用了100元现金券。
订单优惠金额=40+10+100=150元.
依据优惠分摊原则:则各项的优惠金额为:
定义:为了方便订单的发货与结算,系统依据一定的规则(物流、仓库等因素)将用户订单拆分成若干个发货单。
不同店铺:在电商平台类架构下,由于商品归属权不同,涉及财务结算和物流发货的问题,需要根据店铺归属问题对订单进行拆单。例如淘宝,天猫的商品在下单时会将订单根据不同店铺进行拆分成若干个子订单。
不同仓库:若同一订单分散在不同仓库,则应按照仓库归属进行拆分订单。当一件商品在多个仓库有货时,应根据物流的区域的时效选择仓库进行拆单。
不同品类:由于商品的属性不同一样会产生拆单需求,例如易碎品需要特殊包装,超大物品(钢琴,座椅)需要单独包装。有些商品不能放在一起,同样需要拆单。
物流因素:不同物流公司对单个包裹的重量或体积都有特殊要求,需要根据SKU的毛重和体积来计算包裹的总重量和体积,超出物流公司限制的也需要拆单。
商品价值:根据商品价值需要拆单的主要涉及海淘和跨境的商品;国家对每笔跨境订单有单次限额,对年度跨境商品订单总金额也有限制,当单次购买金额超过限制金额时,也需要对订单进行拆单。
订单正向流程相对常规,业务虽然从商品中心,物流,会员,仓库,内容等各大模块进行数据交互,但涉及的业务逻辑易于理解,所以难度并不大。
但在订单逆向流程中,业务流程和逻辑则相对复杂。因为在订单正向流程中,每一个环节都有可能触发逆向订单任务流;而在订单正向任务流中,每一个子环节上的商品在后台出库发货流程中所处的具体节点不一致,所以不同节点触发的订单逆向流程的处理规则则有差异。
定义:订单逆向流程是为了解决在订单流程中出现的退货退款的业务流程。在前端订单状态下,各个环节都有触发的可能,而订单的不同节点触发订单逆向流程的处理方式不同。订单触发订单逆向流程,可以按照主体与客体划分,可分为用户端触发和商家端触发两种。
1. 待付款取消订单
说明:待付款订单取消订单分为两种情况:
用户主动取消;
超时系统自动取消,此时订单状态变更为已取消。
在待付款订单状态下,取消订单无需客服审核。流程图如下:
2. 待发货取消订单
说明:在待发货订单状态下取消订单时,此时应根据订单此时所在的节点作出处理。
由于订单在支付完成后,发货单可能已经推送至WMS,甚至已经交接发货,状态未及时回传更新。为避免货款两失,要先暂停订单出库,在调度中心查询订单是否推送至仓库。
若尚未推送至仓库,则停止推送至仓库;若已经推送至仓库,则去wms中心去拦截,拦截成功则暂停出库。
若暂停失败,则拒绝取消订单申请,回复“订单已经出库”;
若暂停成功,取消订单申请通过,则进入退款流程,同时通知调度中心该订单取消。WMS订单进入返库流程。
3. 待收货/交易成功退货
说明:在用户提交退货申请后,需经过客服审核。审核通过则回到原有状态,审核通过后则进入退货流程并告知用户退回地址及收件信息,此时进入退货流程。系统生成退货入库单,当仓库收货后,进行退款。
在待收货状态下平台设计者仍需考虑退货是否全退的问题。当SKU全退时,原订单则中止进入交易关闭状态。当订单中发生部分退货时,原订单的状态不变,维持待收货或交易成功状态,同时退货的部分生成交易售后订单。剩余未退货部分仍然允许申请售后。
注意:在订单流程逆向流程中,涉及到财务数据的处理时 ,为了保证财务数据的真实性及可追溯性(这与会计数据的处理原则有关,具体问下会计或者财务同学),都不能直接在原订单状态下修改,因此在设计订单逆向流程时应注意这一点。
SpringBoot 配置文件中的敏感信息如何保护?
图解 Spring 循环依赖,顶呱呱的好
SpringCloud微服务的熔断机制和熔断的意义?
java项目线上JVM调优实践,FullGC大大减少
Java 并发异步编程,原来十个接口的活现在只需要一个接口就搞定!
JAVA多线程和并发基础面试问答
一篇文章让你搞懂如何通过Nginx来解决跨域问题