之前介绍了订单生命周期中不可或缺的几个系统,但是订单的生命周期是怎样的呢?我自己是这么定义的:
其中类似于票务类订单的出票过程、酒店的预定过程在这里也归结到物流流转过程中了。
这里先解释一下第一行的流程,从用户角度来看只有三步:提交订单,选择支付方式、支付,但是背后的逻辑其实挺复杂的,毕竟用户的一小步,产品的一大步。
对于订单生成时核心信息为商品和金额,而订单设计到物流结算、供应商结算等问题,因此一般都会进行拆单,分为主订单和子订单,从逻辑分析的角度来看可这样理解:
从系统角度来分析,应该是这个样子(基于之前提到的各个系统介绍,优惠系统1代指金币系统,优惠系统2代指礼券系统,其中会员折扣金额是业务系统自己根据会员折扣规则直接计算出来的,订单中心不再进行二次计算):
一、用户选择商品后进入订单结算页,此时需要判断:
1、根据商品结算信息计算订单总金额;
2、结算信息中是否有可用的礼券,选择礼券后需要计算礼券抵扣的订单金额;
3、判断用户的会员身份,计算可享受会员优惠的订单金额;
4、判断用户自由币账户是否有可抵扣金币,选择使用金币抵扣后计算金币抵扣的订单金额;
根据这些结算信息,得出订单金额明细,确定用户最终需要支付金额。
这四步背后的计算逻辑为:
1、该页面对应服务端是各个业务系统,业务系统可直接获取商品信息和会员抵扣金额信息;
2、选择可用礼券,进入礼券选择页面后礼券系统根据获取到的商品信息判断可用礼券,用户选中后业务系统根据礼券选择结果计算出礼券抵扣金额;
3、客户端请求自由币系统获取该用户可用结果,用户选择使用后,业务系统计算出金币抵扣金额;
二、用户提交订单后,业务系统将订单信息根据订单拆分结构穿给订单中心,包括:商品基本信息、礼券信息、自由币信息、商品总金额、礼券抵扣金额、金币抵扣金额、会员抵扣金额、运费等
首先,订单中心根据订单拆分结构将主订单进行拆单;
然后,金额拆分:
关于金币,请求金币系统,根据金币系统返回的金币可抵扣金额,将抵扣金额拆分到每个子订单上;
关于礼券,需要请求礼券中心,以便确定订单中的哪些商品可参与礼券抵扣,根据返回结果将礼券抵扣金额拆分到每个子订单上;
关于会员折扣:由业务系统直接拆分好每个商品可抵扣的金额,订单中心拆单后直接计算出每个子订单的会员抵扣金额;
关于运费:不参与任何优惠金额抵扣,业务系统需指定好每个子订单的运费信息。
根据订单拆分规则和金额拆分规则,订单中心可以完成订单拆分,生成主订单和子订单
三、订单提交后,进入收银台:
订单基于主订单进行支付,支付完成后交易中心通知订单中心订单支付成功,订单中心更新订单支付状态(包括子订单),然后订单中心通知业务系统订单支付成功,业务系统也会更新订单支付状态,以便订单生效后进入后续状态
总结如下: