Digital Consumer Order Lifecycle Solution
Background
由于目前电商订单全生命周期各阶段的系统分散、格式不统一,现阶段报表不能完全准确描述订单状态。于是考虑构建一套解决方案,彻底补齐这一处短板,理想情况下,希望为电商数据分析、报表展示提供现有数据基础下最准确的一个入口。
该解决方案和历史解决方案最大的不同在于,历史方案主要通过表和表关联去补全信息,由于系统的不统一,以及系统的口径、格式、信息完整程度存在不同,关联过程中势必造成一定的信息丢失,而这些丢失被证明是可以避免的。
优化的方案是先将订单商品数量、状态相关的最少必须的信息提出,应用数量扣减的思路,依次从订单取消、订单出库、订单物流、订单换货、订单退货的数据中寻找信息,进行数量扣减和状态标识。使用这样的计算思路,即使存在部分信息的缺失,也能按照先到货的先退、先到货的先换这种逻辑去补全状态,最后形成 order_nbr & upc & status 为主键的一个状态表,最后再关联进来门店、订单属性、仓库、物流、产品主数据等维度信息,形成一张可供所有电商报告场景使用的较为准确的数据宽表。
Solution Version 1
数据源层面,订单来源包含官网、天猫旗舰店、官方 APP、抖音店铺、京东、微信小程序,发货方式包括自有城市大仓发货、直营门店代发货、物流中心发货、经销商门店发货、定制商品工厂发货等,快递则一般选用 EMS、顺丰,工厂是用 DHL(后面会改成顺丰)。
Step 1: Product Final Status
1. 先将各生命周期的数据源整合
Order Placement
| order_nbr | upc | order_payment_tmst | order_qty |
| dummy_number | dummy_code | 2024-10-26 00:00:00.0 | 1 |
Order Cancellation
| order_nbr | upc | order_cancel_tmst | cancel_qty |
| dummy_number | dummy_code | 2024-10-26 01:00:00 | 1 |
Order Fulfillment & Exchange
| order_nbr | delivery_nbr | upc | shipped_qty | order_shipped_tmst |
| dummy_number | SFxxxxxxxxxxxxxxx | dummy_code | 1 | 2024-10-26 08:00:00 |
| order_nbr | upc | exchange_qty | order_exchange_tmst |
| dummy_number | dummy_code | 1 | 2024-10-29 08:00:00 |
Order Delivery
| cn_carrier_pick_up_tmst | delivery_nbr | cn_first_attempt_tmst | cn_delivered_tmst |
| 2024-10-26 09:00:00 | SFxxxxxxxxxxxxxxx | 2024-10-27 08:00:00 | 2024-10-27 10:00:00 |
Order Return
| return_order_nbr | order_nbr | upc | order_return_tmst | return_qty |
| Rxxxxxxxxxx | dummy_number | dummy_code | 2024-10-31 10:00:00 | 1 |
2. 将订单中单件单的情况单独拿出来计算
电商渠道购买商品的消费记录中,一个订单中一个 sku + size 只买 1 件的情况占了绝大多数,而且判断状态相对简单,所以单独考虑。
主要判断逻辑是: 1) 当存在取消数量,判定为 Cancelled;否则,当存在退货数量,判定为 Returned;否则,当存在换货数量,判定为 Exchanged;否则,当有送达时间,判定为 Delivered;否则,当存在出库数量,判定为 Shipped;其余情况标 Order Created。 2) 额外处理了一些数据一场缺失的情况,例如,订单状态正常,仓库发货数据缺失时,对于 shipped_qty 的取值,shipped_qty 为空时,优先去看 exchange_qty,再看 return_qty,都没有就填 0(谨慎填 Null,后续涉及到数量拆分,由于各类意想不到的数据缺失,Null 值会带来较大的麻烦)。 3) 另外,增加了一列 issue_type 标注出从现有数据交叉对比中发现的问题,用以全局了解数据准确度和问题来源,如 “Canceled but Shipped”、”Ship qty > Order qty” 等。
3. 针对多件单,首先剔除出取消的订单 / 订单中取消的商品
处理逻辑是先用订单数据关联取消订单数据,并且开窗计算订单下同一 upc 的总取消数量。拿出关联后 cancel_qty 不为空的部分,将这部分数据标上 Cancelled。cancel_qty 为空的 以及 cancel_qty 不为空但 order_qty > total_cancel_qty 的 (order_qty - total_cancel_qty) 这部分拿出来进行后续的状态判断。
4. 将上一步中剩下的部分拿来判断发货情况
将剔除了 cancel 商品后的(按理来说存在取消后仓库依然发货的情况,去除 cancel 这一步应该放在判断发货后面进行,后面再说)订单按照 booking_qty 拆分,确保一个 order_nbr 下一个 upc 每一件商品一行,按 row_number 编号。以同样的做法,将仓库发货数据按照 order_nbr + upc 的 shipped_qty 拆分,按 row_number 编号。用订单数据关联发货数据,关联字段加上 row_number,由此能关联到 shipped_qty 的数据被认为已经发货,将这部分数据标上 Shipped,两部分数据分别聚合再 union 后,去往下一步。
5. 为已发货的订单数据关联快递信息
利用发货数据中带有的快递单号,关联快递数据,为能找到送达时间的数据标上 Delivered,再将两部分数据 union 后去下一步。
6. 按照送达时间,结合退货数据,判断退货情况
将上一步数据中 shipped_qty 拆分,按照 delivered_tmst 做由小到大排序取 row_number。退货数据一样的做法,将 return_qty 拆分,按照 order_return_tmst 由小到大排序取 row_number。两部分数据,将能关联上 return_qty 的数据标为 Returned 聚合后放到一边,剩下的数据继续往下判断。
7. 按照送达时间,结合换货数据,判断换货情况
类似上一步处理,将剩下的数据重新按照送达时间排序,将换货数据中 exchange_qty 拆分,按照 order_exchange_tmst 由小到大排序取 row_number。关联换货数据,将能关联到 exchange_qty 的数据标为 Exchanged,两部分结果数据分别聚合。
8. 将状态结果合并写入中间表中
将以上各阶段结果 single_orders_result、canceled_orders、returned_orders、exchanged_orders、 remaining_orders_after_exchange 合并写入中间表。
| order_nbr | order_status | upc | delivery_nbr | return_order_nbr | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst | order_cancel_tmst | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
| dummy_number | Cancelled | dummy_code | null | null | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 2024-08-07 22:20:09.0 | 2024-08-07 22:20:41 | null | null | null | null | null | null | Normal | 2024-08 |
Step 2: Exchange Order Workround
因为存在换货,部分多件单原始订单中存在一个 sku 多个 color 或多个 size,订单中某件商品换货后也可能和原始订单中的 sku & size 相同。在 Step 1 中粗放式地看订单下 upc 在各系统中的状态就会出现:某件商品只订了一件但发了两件或者退了两件的情况,造成统计结果的偏差。
1. Exchanged Order Style
为了修复这部分偏差,处理的逻辑是,在所有渠道的仓库数据中,找到存在换货入库的 order_nbr + style_code,作为判断这类订单下这个类目的商品出现换货的依据。
2. Net Outbound
以 order_nbr + style_code 作为主键,将所有出库(销售出库、换货出库)的商品件数减去所有入库(换货入库、退货入库)的商品件数,得到主键净出库的数量。
3. Net Outbound of Exchanged Order Style
结合以上两个结果,拿到有过换货的 order_nbr + style_code 的净出库数量。
4. 修正所有有过换货的数据
读取 Step 1 的结果数据,将有过换货的所有数据(包括订单中和换货商品有同样 style_code 的商品)拿出来,将数据按照 shipped_qty 拆分,以 order_nbr + style_code 为分区取 row_number,将上一步有过换货的 order_nbr + style_code 净出库数量按照同样的方法拆分。两部分数据关联,将能关联到净出库的标记为 Exchange,不能关联到净出库的标记为 Return。
5. 将以上结果合并写入第二张中间表
将修复了换货记录的结果写入另一张中间表中。
| order_nbr | order_status | upc | delivery_nbr | return_order_nbr | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst | order_cancel_tmst | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
| dummy_number | Exchanged | dummy_code | SFxxxxxxxxxxxxxxx | null | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 2024-08-07 22:20:09.0 | null | 2024-08-08 11:10:58 | 2024-08-08 11:11:08 | 2024-08-10 07:50:22 | 2024-08-12 09:13:51 | null | 2024-08-15 11:32:26 | Normal | 2024-08 |
Step 3: Join Dimensional Information
为了运算性能最优,前面两步只引入了最少的和主键、数量、日期相关的字段参与计算。在第三步中将订单相关(订单渠道、订单金额)、快递相关(发货仓库、承运公司、运输方式、消费者区域)、产品相关(品类、颜色、尺码、吊牌价)、预计送达时间(发货仓库和送货地址的路线决定)这些维度信息通过关联加入,写到最终结果表中。
| order_nbr | order_status | sourcing_order_nbr | platform | order_store_cd | order_store_nm | upc_cd | product_line | product_code | size_code | division_code | presale_ind | from_node | ship_mode | warehouse_region_nm | consumer_region_nm | fulfillment_channel | delivery_nbr | express_company_nm | express_company_service_nm | province_nm | city_nm | district_nm | route_lead_time_day | return_order_nbr | msrp | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst | order_cancel_tmst | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_estimate_delivery_tmst | cn_delivered_tmst | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
| dummy_number | Delivered | null | XXXX.COM | xx | XXXX XXX | dummy_code | XXX | dummy_code | dummy_code | xx | x | XX XXXX | XX | EAST | EAST | XX | SFxxxxxxxxxxxxx | 顺丰快递 | 顺丰标快 | 上海 | 上海市 | 浦东新区 | 1 | null | xxx.xx | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 2024-08-25 00:58:54.0 | null | 2024-08-25 10:36:19 | 2024-08-25 10:37:10 | 2024-08-26 07:11:35 | 2024-08-26 23:59:59 | 2024-08-26 08:54:29 | null | null | Normal | 2024-08 |
Solution Version 2
由于第一版的代码中存在几点逻辑问题:
-
先关联取消订单信息,后关联发货信息,导致部分取消后但发货的单号部分实际信息丢失;
-
无法追溯换货出库商品的物流信息,对于全局的物流时效、成本控制造成一定程度的失真;
-
缺少官网原始单号和换货单号的对应关系,无法统计出准确的换货数量。
为此第二版结果主要做的调整是:
- 为天猫订单生成换货单号;
- 建立官网换货单号和原始单号的关联关系;
- 由此精确计算各平台换货数量;
- 不按单件单多件单分开考虑,所有订单通盘计算;
- 订单生命周期各阶段只分拆不聚合,最终生成结果时聚合相同状态的数量;
- 为了数据准确性和完整性调整扣减先后顺序,调整后的扣减顺序为:订单、仓库发货、物流、取消订单、换货、退货。
Step 1: digital consumer order lifecycle kpi integration
为了补全换货的物流信息,将仓库中换货出库的商品模拟生成一个换货订单,在数据源整合阶段扩充这部分到创建订单。
1. 先将各生命周期的数据源整合
Order Placement
| order_nbr | upc | order_payment_tmst | order_qty | notes |
|:------------ | ---------- | --------------------- | --------- |:---------- |
| dummy_number | dummy_code | 2024-08-30 21:44:17.0 | 1 | (创建订单) |
| dummy_number | dummy_code | 2024-09-05 14:33:13 | 1 | (换货出库) |
Order Fulfillment
| order_nbr | delivery_nbr | upc | shipped_qty | order_shipped_tmst | notes |
|:------------------- | ----------------- | -------------- | ----------- | ------------------- |:---------- |
| dummy_number | SFxxxxxxxxxxxxxxx | dummy_code | 1 | 2024-09-05 14:33:13 | (换货出库) |
| dummy_number | SFxxxxxxxxxxxxxxx | dummy_code | 1 | 2024-08-31 03:09:26 | (销售出库) |
Order Delivery
| delivery_nbr | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | notes |
|:----------------- | ----------------------- | --------------------- | ------------------- |:---------- |
| SFxxxxxxxxxxxxxxx | 2024-09-05 14:33:45 | 2024-09-07 07:03:39 | 2024-09-07 09:52:22 | (Exchange) |
| SFxxxxxxxxxxxxxxx | 2024-08-31 11:14:54 | 2024-09-02 06:58:24 | 2024-09-02 10:04:56 | (Sales) |
Order Cancellation
| order_nbr | upc | order_cancel_tmst | cancel_qty |
Order Exchange
| order_nbr | upc | exchange_qty | order_exchange_tmst | notes |
|:------------------- | -------------- | ------------ | ------------------- |:---------|
| dummy_number | dummy_code | 1 | 2024-09-05 12:32:09 | (换货入库) |
Order Return
| return_order_nbr | order_nbr | upc | order_return_tmst | return_qty |
2. 将单件单、多件单、换货出库生成订单拉通考虑,关联发货信息
将所有订单数据拆成一件一行,并按 order_nbr & upc 分区 进行 row_number 排序生成序列号 schedule_line_nbr;应用同样的逻辑,将发货数据分拆。订单表左关联发货表,能关联到发货数量的 order_status 设为 Shipped,其余为 Order Created。
| order_nbr | upc | order_status | gross_booking_qty | order_payment_tmst | shipped_qty | order_shipped_tmst | delivery_nbr |
|:------------ | ---------- | ------------ | ----------------- | --------------------- | ----------- | ------------------- | --------------- |
| dummy_number | dummy_code | Shipped | 1 | 2024-08-30 21:44:17.0 | 1 | 2024-08-31 03:09:26 | SFxxxxxxxxxxxxx |
| dummy_number | dummy_code | Shipped | 1 | 2024-09-05 14:33:13 | 1 | 2024-09-05 14:33:13 | SFxxxxxxxxxxxxx |
3. 关联物流信息
将上一步所有数据通过快递单号关联物流信息,能关联到送达时间 / 首次派送时间的订单 order_status 设为 Delivered,其余状态不变。
| order_nbr | upc | order_status | gross_booking_qty | order_payment_tmst | shipped_qty | order_shipped_tmst | delivery_nbr | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | delivered_tmst |
|:------------ | ---------- | ------------ | ----------------- | --------------------- | ----------- | ------------------- | --------------- | ----------------------- | --------------------- | ------------------- | ------------------- |
| dummy_number | dummy_code | Delivered | 1 | 2024-08-30 21:44:17.0 | 1 | 2024-08-31 03:09:26 | SFxxxxxxxxxxxxx | 2024-08-31 11:14:54 | 2024-09-02 06:58:24 | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 |
| dummy_number | dummy_code | Delivered | 1 | 2024-09-05 14:33:13 | 1 | 2024-09-05 14:33:13 | SFxxxxxxxxxxxxx | 2024-09-05 14:33:45 | 2024-09-07 07:03:39 | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 |
4. 关联订单取消信息
将订单取消数据拆行,通过 order_nbr & upc & schedule_line_nbr 关联到上一步结果中,能关联到取消订单数量的订单 order_status 设为 Cancelled,其余状态保持不变。
| order_nbr | upc | order_status | gross_booking_qty | order_payment_tmst | cancel_qty | order_cancel_tmst | shipped_qty | order_shipped_tmst | delivery_nbr | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | delivered_tmst |
|:------------ | ---------- | ------------ | ----------------- | --------------------- | ---------- | ----------------- | ----------- | ------------------- | --------------- | ----------------------- | --------------------- | ------------------- | ------------------- |
| dummy_number | dummy_code | Delivered | 1 | 2024-08-30 21:44:17.0 | 0 | null | 1 | 2024-08-31 03:09:26 | SFxxxxxxxxxxxxx | 2024-08-31 11:14:54 | 2024-09-02 06:58:24 | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 |
| dummy_number | dummy_code | Delivered | 1 | 2024-09-05 14:33:13 | 0 | null | 1 | 2024-09-05 14:33:13 | SFxxxxxxxxxxxxx | 2024-09-05 14:33:45 | 2024-09-07 07:03:39 | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 |
5. 关联换货信息
维护一张官网换货订单和原始订单的关联关系表,通过这个表得到换货订单的原始订单号 parent_order_nbr,非换货的订单 parent_order_nbr 为 order_nbr 本身。
全表根据 order_nbr 分区计算最小的 order_payment_tmst 设为 initial_payment_tmst,将所有 order_payment_tmst > initial_payment_tmst 的非官网订单 order_nbr 加上前缀 E,以此标识天猫换货订单。
将换货数据拆行,通过 order_nbr & upc & schedule_line_nbr 关联到以上结果中,能关联到换货数量的 order_status 标识为 Exchanged,其余保持不变。
| order_nbr | parent_order_nbr | order_status | upc | delivery_nbr | gross_booking_qty | order_payment_tmst | cancel_qty | order_cancel_tmst | shipped_qty | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | delivered_tmst | exchange_qty | order_exchange_tmst |
|:------------- | ---------------- | ------------ | ---------- | --------------- | ----------------- | --------------------- | ---------- | ----------------- | ----------- | ------------------- | ----------------------- | --------------------- | ------------------- | ------------------- | ------------ | ------------------- |
| dummy_number | dummy_number | Exchanged | dummy_code | SFxxxxxxxxxxxxx | 1 | 2024-08-30 21:44:17.0 | 0 | null | 1 | 2024-08-31 03:09:26 | 2024-08-31 11:14:54 | 2024-09-02 06:58:24 | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 | 1 | 2024-09-05 12:32:09 |
| Edummy_number | dummy_number | Delivered | dummy_code | SFxxxxxxxxxxxxx | 1 | 2024-09-05 14:33:13 | 0 | null | 1 | 2024-09-05 14:33:13 | 2024-09-05 14:33:45 | 2024-09-07 07:03:39 | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 | 0 | null |
6. 关联退货信息
将退货数据拆行,通过 order_nbr & upc & schedule_line_nbr 关联到上一步结果中,能关联到退货数量的订单 order_status 设为 Returned,其余状态保持不变。
| order_nbr | parent_order_nbr | order_status | upc | delivery_nbr | gross_booking_qty | order_payment_tmst | cancel_qty | order_cancel_tmst | shipped_qty | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | delivered_tmst | exchange_qty | order_exchange_tmst | return_order_nbr | return_qty | order_return_tmst |
|:------------- | ---------------- | ------------ | ---------- | --------------- | ----------------- | --------------------- | ---------- | ----------------- | ----------- | ------------------- | ----------------------- | --------------------- | ------------------- | ------------------- | ------------ | ------------------- | ---------------- | ---------- | ----------------- |
| dummy_number | dummy_number | Exchanged | dummy_code | SFxxxxxxxxxxxxx | 1 | 2024-08-30 21:44:17.0 | 0 | null | 1 | 2024-08-31 03:09:26 | 2024-08-31 11:14:54 | 2024-09-02 06:58:24 | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 | 1 | 2024-09-05 12:32:09 | null | 0 | null |
| Edummy_number | dummy_number | Delivered | dummy_code | SFxxxxxxxxxxxxx | 1 | 2024-09-05 14:33:13 | 0 | null | 1 | 2024-09-05 14:33:13 | 2024-09-05 14:33:45 | 2024-09-07 07:03:39 | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 | 0 | null | null | 0 | null |
7. 加上 issue_type
分析每一行数据,为数据进行打标。
- 有取消记录但也有发货记录,标记 Canceled but Shipped;
- 没有发货记录但是有退货记录,标记 Not Shipped but Returned;
- 没有发货记录但是有换货记录,标记 Not Shipped but Exchanged;
- 有发货记录但是没有快递单号,标记 Shipped but Missing Delivery No.;
- 其余被认定为 Normal。
8. 计算 net_booking_qty
net_booking_qty = gross_booking_qty - cancel_qty - return_qty - exchange_qty
9. 将换货记录的数据 gross_booking_qty 设为 0
10. 聚合数量
将最终结果根据 order_nbr & upc & order_status & delivery_nbr & return_order_nbr & issue_type 进行聚合。
| order_nbr | parent_order_nbr | order_status | upc | delivery_nbr | gross_booking_qty | order_payment_tmst | net_booking_qty | cancel_qty | order_cancel_tmst | shipped_qty | remaining_to_ship_qty | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | delivered_tmst | exchange_qty | order_exchange_tmst | return_order_nbr | return_qty | order_return_tmst | issue_type |
|:------------- | ---------------- | ------------ | ---------- | --------------- | ----------------- | --------------------- | --------------- | ---------- | ----------------- | ----------- | --------------------- | ------------------- | ----------------------- | --------------------- | ------------------- | ------------------- | ------------ | ------------------- | ---------------- | ---------- | ----------------- | ---------- |
| dummy_number | dummy_number | Exchanged | dummy_code | SFxxxxxxxxxxxxx | 1 | 2024-08-30 21:44:17.0 | 1 | 0 | null | 1 | 0 | 2024-08-31 03:09:26 | 2024-08-31 11:14:54 | 2024-09-02 06:58:24 | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 | 1 | 2024-09-05 12:32:09 | null | 0 | null | Normal |
| Edummy_number | dummy_number | Delivered | dummy_code | SFxxxxxxxxxxxxx | 1 | 2024-09-05 14:33:13 | 0 | 0 | null | 1 | 0 | 2024-09-05 14:33:13 | 2024-09-05 14:33:45 | 2024-09-07 07:03:39 | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 | 0 | null | null | 0 | null | Normal |
Step 2: Join Dimensional Information
与 Version 1 的 Step 3 完全一致。跳过单独处理换货的步骤,直接读取 Step 1 的结果,关联维度信息写入最终结果表。
| order_nbr | parent_order_nbr | order_status | sourcing_order_nbr | platform | order_store_cd | order_store_nm | upc_cd | product_line | product_code | size_code | division_code | presale_ind | from_node | ship_mode | warehouse_region_nm | consumer_region_nm | fulfillment_channel | delivery_nbr | express_company_nm | express_company_service_nm | province_nm | city_nm | district_nm | route_lead_time_day | return_order_nbr | msrp | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst | order_cancel_tmst | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_estimate_delivery_tmst | cn_delivered_tmst | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
|:------------- | ---------------- | ------------ | ------------------ | -------- | -------------- | ----------------------- | ---------- | ------------ | ------------ | --------- | ------------- | ----------- | ----------------------- | --------- | ------------------- | ------------------ | ------------------- | --------------- | ------------------ | -------------------------- | ----------- | ------- | ----------- | ------------------- | ---------------- | ------ | ----------------- | --------------- | --------------------- | ---------- | ----------- | ---------- | ------------ | --------------------- | ----------------- | ------------------- | ----------------------- | --------------------- | ------------------------- | ------------------- | ----------------- | ------------------- | ---------- | --------------- |
| dummy_number | dummy_number | Exchanged | null | TMALL | XXXX | xxxxxxxxxxxxxxxxxxxxxxx | dummy_code | TBD | dummy_code | 10 | 20 | 0 | xxxxxxxxxxxxxxxxxxxxxxx | 陆运 | EAST | EAST | DC | SFxxxxxxxxxxxxx | 顺丰快递 | 顺丰标快 | 上海 | 上海市 | 松江区 | null | null | 249.00 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 2024-08-29 14:08:04.0 | null | 2024-08-29 12:06:24 | 2024-08-29 20:17:26 | 2024-08-30 06:52:38 | 2024-08-29 23:59:59 | 2024-08-30 13:06:14 | null | 2024-08-31 14:20:35 | Normal | 2024-08 |
| Edummy_number | dummy_number | Delivered | null | TMALL | XXXX | xxxxxxxxxxxxxxxxxxxxxxx | dummy_code | TBD | dummy_code | 10 | 20 | 0 | xxxxxxxxxxxxxxxxxxxxxxx | 陆运 | EAST | EAST | DC | SFxxxxxxxxxxxxx | 顺丰快递 | 顺丰次日(空运) | 上海 | 上海市 | 松江区 | 1 | null | 249.00 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 2024-09-01 12:41:13 | null | 2024-09-01 12:41:13 | 2024-09-01 12:41:21 | 2024-09-02 06:52:49 | null | 2024-09-02 11:16:55 | null | null | Normal | 2024-09 |