探讨一次订单拆单流程

640 阅读6分钟

1 文章概述

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

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

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


2 相关概念

2.1 父子订单

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


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

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

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


3 一次拆单流程

3.1 购物车

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

  • 商家S1(平台自营)
    • A商品:冰箱 1个 100元
    • B商品:纸巾 1包 20元
    • C商品:书本 1本 20元
    • D商品:饼干 1盒 20元
  • 商家S2(第三方商家)
    • E商品:充电器 1个 20元
    • F商品:显示器 1个 20元

3.2 父订单

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


3.3 第一次拆单(销售层)

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

  • 拆单次数:第一次
  • 拆单维度:销售层
  • 解决问题:财务独立

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

  • orderId_1-1:对应商家S1
  • orderId_1-2:对应商家S2

3.4 第二次拆单(调度层)

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

  • 拆单次数:第二次
  • 拆单维度:调度层
  • 解决问题:同一笔子订单商品能否放在一个包裹

对于S1自营商家:

  • 体积因素:冰箱体积远大于其它商品,所以独立成发货单
  • 仓库位置:纸巾在上海仓库,书本和饼干在杭州仓库,纸巾独立成单,书本和饼干属于同一个发货单

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

  • order_1_1
    • delivery_order_id_1-1:A
    • delivery_order_id_1-2:B
    • delivery_order_id_1-3:C D
  • order_1_2
    • delivery_order_id_2-1:E充电器
    • delivery_order_id_2-2:F显示器

3.5 第三次拆单(仓库层)

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


3.6 优惠策略

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

  • 平台优惠1
    • 商品AF参与跨店满100元减10元活动
  • 平台优惠2
    • 所有商品参与跨店满180件10元活动
  • 店铺优惠
    • 商品BCD参与A店满50元减9元活动
  • 用户权益
    • 注册时赠送10个积分抵扣5元

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

  • A冰箱
    • 平台优惠1:(100/120) x 10 = 8.33
    • 平台优惠2:(100/200) x 10 = 5
    • 用户权益:(100/200) x 5 = 2.5
  • B纸巾
    • 平台优惠2:(20/200) x 10 = 1
    • 店铺优惠:(20/60) x 9 = 3
    • 用户权益:(20/200) x 5 = 0.5
  • C书本
    • 平台优惠2:(20/200) x 10 = 1
    • 店铺优惠:(20/60) x 9 = 3
    • 用户权益:(20/200) x 5 = 0.5
  • D饼干
    • 平台优惠2:(20/200) x 10 = 1
    • 店铺优惠:(20/60) x 9 = 3
    • 用户权益:(20/200) x 5 = 0.5
  • E充电器
    • 平台优惠2:(20/200) x 10 = 1
    • 用户权益:(20/200) x 5 = 0.5
  • F显示器:
    • 平台优惠2:(20/200) x 10 = 1
    • 平台优惠:(20/120) x 10 = 1.67
    • 用户权益:(20/200) x 5 = 0.5

3.7 订单支付

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

  • orderId_1_1:84.17 + 15.5 x 3 = 130.67
  • orderId_1_2:18.5 + 16.83 = 35.33

4 子订单表设计

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

  • 父订单Id
  • 子订单Id
  • skuId
  • 购买数量
  • sku单价
  • 分摊后平台优惠金额
  • 分摊后店铺优惠金额
  • 分摊后用户权益抵扣金额
  • 实付金额
  • 供应商
  • 订单状态
  • 售后状态
  • 发货单号

5 文章总结

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

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