• 作者:老汪软件技巧
  • 发表时间:2024-11-17 21:02
  • 浏览量:

1 文章概述

消费者在购物时,电商平台会生成订单。订单相当于是购物者和电商平台签订的合同,后续电商平台会进行履约。

消费者一般只关心买什么东西、付多少钱、货什么时候送达,对底层订单逻辑并不关心,对订单拆单这个概念也比较陌生,本文我们探讨一次基本订单拆单流程。

需要说明真实拆单场景非常复杂,不同公司拆单策略也不同,本文只是讲解一个简单实例,复杂场景需要根据策略具体分析。本文使用的是测试数据仅供演示。

2 相关概念2.1 父子订单

为什么要有父子订单?父子订单分别解决了什么问题,这是本章节需要回答的问题。简而言之,父订单存在的意义是记录一次下单行为,如果有平台级满减赠活动,需要用父订单金额计算优惠。子订单是最核心概念,资金、物流、售后全部与子订单强关联。

2.2 订单、发货单、仓库出库单

父子订单是销售层概念,发货单是调度层概念,仓库出库单(包裹)是仓库层概念。这三者不要混为一谈。

常见拆单场景是:在销售层父订单根据店铺不同拆分出多个子订单。子订单下推到调度层后,根据仓库位置、重量、体积、品类、价值不同,拆分出多个发货单。发货单下推到仓库后,仓库根据实际情况拆分为多个包裹,即仓库出库单。

3 一次拆单流程3.1 购物车

小明在电商平台购物车增加六件商品:

商家S2(第三方商家)

3.2 父订单

父订单是为了记录一次下单行为,所以即使小明在不同商家购买商品,也记录在同一个父订单。此时产生了父订单order_1,金额200元。

3.3 第一次拆单(销售层)

小明在购物车选择上述商品点击结算按钮,发生一次拆单:

S1和S2是两个不同商家,在财务上完全独立,所以不能作为同一个子订单,需要拆成两个子订单:

3.4 第二次拆单(调度层)

小明点击提交订单按钮发生第二次拆单:从节省物流成本考虑,商家希望将同一个用户同一次购买的所有商品,放在同一个包裹。但是由于商品体积、数量、存储条件不同,仓库位置不同,不可以放在同一个包裹,所以需要拆单。

对于S1自营商家:

对于S2第三方商家,E和F商品分别由不同供应商供货,因为不同供应商各自发货,所以E和F各自独立成单。需要注意在财务维度电商平台还是与S2商家结算。

order_1_2

3.5 第三次拆单(仓库层)

如果在调度层规则足够完善情况下,一般不需要仓库层拆单,一笔发货单即对应一个仓库出库单(包裹)。但是也有可能出现意外情况,例如仓库工作人员在打包时发现一个包裹装不下,那么会拆成多个仓库出库单。

3.6 优惠策略

对于用户而言,优惠策略体现在销售层,所以优惠明细记录在子订单。现在小明在下单时使用以下优惠策略:

平台优惠2店铺优惠用户权益

优惠金额按照商品价格比例分摊:

B纸巾C书本D饼干E充电器F显示器:

3.7 订单支付

在支付时小明不小心退出支付页,如果点开订单列表再完成支付时会看到两笔子订单,付款时需要支付两次:

4 子订单表设计

父订单有多个子订单,子订单非常重要,后续订单履约与售后按照子订单维度流转,子订单至少需要承载如下信息:

5 文章总结

第一本文引出订单拆单这个概念,第二本文通过一次购物流程讲解了拆单发生原因和时机,优惠策略计算,第三本分析子订单表如何设计。

需要说明真实拆单场景非常复杂,不同公司拆单策略也不同,本文只是讲解一个简单实例,复杂场景需要根据策略具体分析,总体上可以从销售层、调度层、仓库层三个维度思考。


上一条查看详情 +Redis数据结构之String->SDS分析
下一条 查看详情 +没有了