大家好,我是汤师爷~
订单模型作为整个交易系统的核心,支撑着所有交易环节。
订单域核心概念模型
如图所示,为订单核心概念模型。
1、订单
在实际交易业务处理中,订单会根据不同的业务规则(如店铺、收货地址、配送方式等)拆分成多个子订单,形成一个父订单对应多个子订单的结构。这种拆分机制便于后续的订单履约和商家结算。订单包含以下核心字段:
- 租户ID:标识订单所属的租户
- 订单ID:订单的唯一标识
- 父订单ID:关联的父级订单ID(如有)
- 商家ID:关联的商家标识
- 订单类型:区分普通订单、预售订单、跨境订单等类型
- 下单时间:订单创建的具体时间
- 支付方式:如现金、银行卡、移动支付、标记支付等
- 订单状态:反映订单当前所处环节
- 订单备注:存储订单相关的补充说明
- 合计金额:订单商品的原始总金额
- 实付金额:扣除优惠后的实际支付金额
- 优惠金额:各类促销、优惠券等减免金额
2、订单明细
订单明细是订单中每一个具体商品的详细信息记录,包含以下关键信息:
- 订单明细ID:每条明细的唯一标识
- 订单ID:关联的订单编号
- 商品ID和SKU ID:标识具体商品及其规格
- 商品编码:商品的内部编码标识
- 商品数量:购买的数量
- 商品原价:单个商品价格
- 商品金额:该商品的总金额
- 商品实付:
- 明细类型:区分普通商品、赠品等
- 优惠金额:应用到该商品的优惠金额
2、渠道信息
记录订单的购买渠道,如电商平台、O2O平台或门店。这些信息有助于分析销售策略和客户购买行为。
3、客户信息
客户的基本信息,包括客户名称、客户类型、客户生日等,用于支持后续的营销活动和客户服务。
4、营销信息
包括订单中应用的促销活动、折扣、积分使用等信息。这些数据帮助商家追踪促销效果并了解客户购买偏好。
5、收货信息
详细记录商品买家的收货信息,包括收货人姓名、手机号码、联系电话和收货地址。
6、支付信息
记录客户的支付方式、支付状态、支付时间和支付金额。这些信息对财务管理和订单结算流程至关重要。
7、交付信息
记录了商品交付的详细情况,包括:预计送货时间、预计送达时间、预约送达时间范围(开始和结束时间)、预约自提时间范围(开始和结束时间)、自提位置、配送方式等。
8、费用明细
费用明细记录订单中的各项费用,包括运费、打包费、服务费等额外收费项目。
订单拆单场景
订单拆单是指在订单创建时,根据预设的业务规则,将一个完整订单分解为多个子订单的过程。规则通常涉及多个维度,包括商家主体、交易模式、商品属性和物流要求等。
通过拆单,系统能够满足复杂的业务需求,提高订单处理效率。以下为常见拆单场景与案例说明:
1、按商家(店铺)拆分
当订单包含多个商家的商品时,系统会按商家将其拆分为独立子订单。例如,你同时购买了服装店和数码配件店的商品,系统会将订单拆分为两个子订单,分别由各自商家备货和发货。
这样拆分可以让每个商家能独立处理订单履约、售后服务和财务结算,确保账务清晰,避免纠纷。
2、按交易模式拆分
不同交易模式往往有特定的资质要求和结算方式。以海外购为例,商品需通过跨境资质认证和海关申报,并计算关税。如果订单中既有普通国内商品,又有海外购商品,系统会将海外购部分独立成子订单,以便专门处理相关资质与税费事宜。
3、按品类拆分(如药品、生鲜)
不同品类的商品处理要求大不相同。药品需要严格遵循处方审核和药剂师复核流程。如果订单中既有处方药,也有普通日用品,系统将药品部分独立拆分,确保合规处理。
同样,生鲜食品需冷链运输。当订单同时包含生鲜与普通商品时,系统会将生鲜部分单独划分成子订单,确保冷链物流的顺利执行,避免商品的新鲜度。
4、按收货地址拆分
当用户想将订单中的商品分别送给不同城市的亲友,并且在一个订单中享受最多的优惠,系统会按收货地址进行拆分。例如,一份订单需分别配送至北京、上海和广州。系统会生成三个子订单,每个子订单对应一个收货地址,确保为各自的配送线路选择合适的物流服务。
通过合理的拆单策略,交易系统可以更灵活地满足复杂的业务场景,实现精确的分工与高效的履约。
订单状态机
订单状态机是指在订单处理流程中,用类似有限状态机的方式来定义和管理订单所经历的不同状态,以及状态间转换逻辑的机制。
通过状态机的设计,可以清晰、结构化地定义订单从生成到最终完成或取消的整个生命周期,明确订单在每个阶段所处的状态,以及不同状态之间的转换条件和业务规则。
订单金额计算
订单金额计算是电商交易系统中的一个核心环节,它不仅涉及基础的商品价格计算,还需要处理各类优惠、折扣、运费等多个维度的金额。下面我们通过具体示例,详细分析订单金额的计算方法和优惠分摊机制。
1、订单金额的计算示例
让我们设定一个简单场景。用户在购物车中添加了 2 个吐司面包,每个售价 20 元,共计 40 元。该订单满足两个优惠活动:
- 当购买吐司面包时,满 40 元减免 5 元。
- 订单金额满30,可减免 6 元配送费。
另外,还需支付 1 元的包装费用,订单的各金额计算如图所示。
- 订单合计金额为 47 元(商品总价 40 元 + 配送费 6 元 + 包装费 1 元)。
- 优惠金额为 11 元(包括 5 元商品减免与 6 元配送费减免)。
- 最终用户支付金额为 36 元(47 元 - 11 元 = 36 元)。
2、订单优惠分摊示例
优惠分摊是指将订单中的整体优惠,合理分配到各个商品上。优惠分摊非常重要,主要作用有:
- 准确计算每件商品在享受优惠后的实付金额,用于后续计算商品额实际收入和利润。
- 出现售后时,可快速计算出应退还的合理金额,避免计算误差与纠纷。
下面是一个更复杂的案例,展示优惠分摊的计算过程。假设顾客的购物清单为:
- 吐司面包 2 个,合计 40 元
- 草莓蛋糕 1 个,合计 150 元
上述商品总计 190 元,并参与 "满 180 减 20 元" 的促销活动。此外,订单还包含 20 元的配送费和 6 元的包装费。
此时需要将 20 元的总优惠分配到各商品上,分摊逻辑是根据商品金额占比来计算:
- 吐司面包(2 个)的分摊金额:20 元 × (40 元 / 190 元) = 4.21 元
- 草莓蛋糕的分摊金额:20 元 × (150 元 / 190 元) = 15.79 元
当出现除不尽的情况时,系统会将最后一分钱的差额计入订单中的最后一个商品,从而保证商品的优惠金额总和与实际优惠金额完全一致。
分摊完成后,订单金额为 216 元(商品 190 元 + 配送费 20 元 + 包装费 6 元),减去 20 元优惠,顾客实际支付 196 元。
本文已收录于,我的技术网站:tangshiye.cn 里面有,算法Leetcode详解,面试八股文、BAT面试真题、简历模版、架构设计,等经验分享。