Files
medical-mall/pages/mall/delivery/doc/需求文档(现用)/状态映射表.md
2026-03-17 11:06:26 +08:00

72 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 状态映射表(第三方/Mock -> 平台统一状态)
本表用于将第三方(或 Mock Server产生的 `event_code/event_text` 映射为平台统一 `status_code`,以保证前端时间线与告警规则可复用。
关联文档:
- `接口规范.md`:统一事件模型与接入模式
- `前端字段清单.md`时间线字段契约status_history/status_code
平台统一状态(建议,尽量少且稳定):
- ORDER_PLACED已下单平台侧订单状态通常不是第三方快递事件
- SHIPPED已发货已绑定运单/待揽收)
- IN_TRANSIT运输中含“中转中/发往下一站/分拨/到达节点/在途”等)
- OUT_FOR_DELIVERY派送中
- READY_FOR_PICKUP待取件到驿站/自提柜等,等待收件人取件)
- DELIVERED已签收含本人签收/代收点签收)
- EXCEPTION异常地址不详、拒收、破损、丢件、派送失败等
- RETURNED退回/退件
说明:
- `ORDER_PLACED` 通常来自平台订单系统(下单成功),不一定存在 `tracking_no`;在“统一时间线展示”场景下可作为平台生成事件出现在物流时间线里。
- 第三方事件原文(`event_text`)尽量保留;平台只用 `status_code` 做标签/筛选/告警。
第三方/Mock 事件码(建议) -> 平台统一状态(示例映射)
- ORDERED / CREATED -> SHIPPED若该事件表示“快递单已创建/已出库”,而非平台下单)
- PICKED / COLLECTED -> IN_TRANSIT已揽收后进入物流网络
- ARRIVED_HUB / ARRIVAL -> IN_TRANSIT中转/到达节点统一视为运输中)
- DEPARTED_HUB / TRANSIT / IN_TRANSIT -> IN_TRANSIT
- ARRIVED_DEST_CITY -> IN_TRANSIT
- OUT_FOR_DELIVERY -> OUT_FOR_DELIVERY
- AT_PICKUP_POINT / READY_FOR_PICKUP / DELIVERED_TO_PICKUP -> READY_FOR_PICKUP
- SIGNED / DELIVERED -> DELIVERED
- FAILED_DELIVERY / REJECTED / ADDRESS_INVALID / DAMAGED / LOST -> EXCEPTION
- RETURNED / RETURNING -> RETURNED
平台生成事件(用于统一时间线,可选) -> 平台统一状态
- ORDER_PLACED -> ORDER_PLACED
- MERCHANT_CONFIRMED_SHIPMENT / SHIPPED -> SHIPPED
示例(用于 UI 文案)
- IN_TRANSIT运输中
- OUT_FOR_DELIVERY快件正在派送中
- SIGNED客户已签收可带 POD 图片)
注意事项
- 平台入库请保留原始 `event_text``raw_payload`,前端默认展示 `event_text`,状态标签使用 `status_code`
- Mock Server 应支持故障注入(重复/乱序/延迟/验签失败),平台状态映射必须在幂等入库后执行。
为尽量保证事件状态保持一致(基础要求):
- `event_code/event_text` 视为第三方“事实记录”,尽量不改写;统一口径(标签、颜色、筛选)交由 `status_code` 承担。
- 映射必须确定性:同一承运方、同一 `event_code` 在同一套映射规则下应得到同一 `status_code`
备选方案:映射版本化(`mapping_version`)(可选增强)
为什么要做:
- 防止“状态漂移”:映射规则一旦调整,历史订单的已入库事件如果重新计算 `status_code`,可能出现“昨天运输中,今天变异常/又变回运输中”,引发用户与客服争议。
- 提升可审计性:当出现纠纷或对账问题时,需要能回答“当时按哪一版规则映射出来的”。
- 降低排障成本:多承运方/多渠道(直连+聚合)并存时,版本信息能快速定位是“第三方事件变了”还是“平台映射变了”。
什么时候启用:
- 状态映射会随运营/产品频繁调整,且希望历史展示稳定、可解释。
- 客服/售后对轨迹状态一致性有明确 SLA 或合规/审计要求。
怎么落地(从轻到重):
- 轻量做法(推荐起步):将映射表作为配置/代码资产管理,使用 Git tag/发布号作为 `mapping_version`,并在发布记录中保留变更原因与生效时间。
- 加强做法:在事件入库时把 `mapping_version` 一并存入事件记录(或运单聚合记录),对外查询接口可返回该版本用于排查。
- 变更策略建议:
- 小改动优先“仅影响未来事件”(不回刷历史)。
- 如必须修正历史映射,采用回放/回填任务,并对已对外展示的结果做备注或审计记录,避免静默改写。
代价与取舍:
- 会引入配置治理与发布流程的管理成本;若当前映射很稳定、承运方少、无强审计诉求,可以先不启用该方案。