# 多仓就近发货路由推荐

客户：全棉时代｜库存、距离与仓内容量的履约分配方案

上海艾哲智网络科技 · 后台产品实习项目 · 2024.06—2024.09

## 一、背景与问题

### 1.1 业务背景与核心问题

在上海艾哲智网络科技的后台产品实习中，我在全棉时代客户的多仓履约项目中，独立梳理订单分仓条件、候选仓排序及人工调整规则。该项目在实习前已由团队立项，本人加入后负责候选仓排序、人工调整规则及试点验收。

订单能否从某仓发出，不仅取决于收货地，还取决于商品库存、仓库启停、处理负载和数据时效。固定区域分仓难以覆盖临时缺货与拥堵；只按距离选择最近仓，也可能把订单分给无法承接的节点。项目需要在完整履约的前提下选择合适的发货仓，并让运营能理解、调整和追溯分配结果。

方案在支付后、仓库开始拣货前进行路由决策，先过滤不满足条件的仓，再按距离推荐。以深圳收货、购买棉柔巾2包及棉湿巾1包为例：佛山节点满足库存与容量条件时进入候选；缺货、停用或拥堵时展示剔除原因，选择下一可行节点。所有节点均不满足条件时，订单转待处理。

### 1.2 用户故事

| 角色 | 我希望 | 以便 |
| --- | --- | --- |
| 仓储运营 | 查看推荐仓、候选排名及剔除原因 | 理解系统决策，必要时有依据地调整 |
| 物流专员 | 确认换仓后重新获取承运与面单方案 | 避免旧面单和揽收地址继续使用 |
| 运营主管 | 查看有效换仓率、无可用仓及人工覆盖 | 判断规则是否需要调整 |
| 仓库负责人 | 配置启停和允许承接的容量 | 防止最近仓被持续分配到超负荷 |

### 1.3 名词说明

| 名词 | 定义 |
| --- | --- |
| 原分配仓 | 路由计算前的默认履约节点，不等于已锁定库存 |
| 推荐仓 | 在当前限制内选出的完整履约候选 |
| 换仓 | 确认发货节点与原分配节点不同 |
| 直线距离 | 城市经纬度计算的空间距离，用于排序而非物流里程 |
| 预计负载 | 计划待处理量/该时段可承接量，用于容量准入 |
| 路由快照 | 订单、库存和规则版本组成的本次推荐依据 |

### 1.4 数据表现与口径说明

以下为 10 条固定场景的测算演示，用于验证路由规则按设计运行，非真实业务订单统计。展示参数采用佛山、苏州、武汉、成都、天津五个区域节点，固定武汉节点为演示基线，不代表客户真实分仓策略。5 条正常配置场景用于成对比较，5 条节点变化场景用于异常验收（关闭原仓后改选可行仓）。换仓率统计发货仓与原分配仓是否一致，远距离分配率统计直线距离是否超过 500km 阈值，两者分别计算。

| 指标 | 计算口径 | 本方案数据来源 |
| --- | --- | --- |
| 换仓率 | 发货仓≠原分配仓的已确认订单数/已确认订单数 | 原型操作及场景计算 |
| 无可用仓率 | 无完整可行候选的订单数/尝试路由数 | 无库存、停用、容量等原因分别统计 |
| 远距离分配率 | 推荐直线距离>500km的订单数/有候选订单数 | 仅为场景分类，非真实运输距离 |
| 距离变化 | 原节点直线距离－推荐节点直线距离 | 同地址、同库存条件前后对照 |
| 预计费用变化 | 基线费率－推荐费率 | 方案费率表测算，非结算运费 |

| 指标（5 条正常场景） | 固定分仓基线 | 路由推荐测算 | 变化 |
| --- | --- | --- | --- |
| 远距离分配率（直线>500km） | 80% | 40% | ↓ 40 个百分点 |
| 换仓率（发货仓≠原分配仓） | —（固定分仓，无换仓） | 40% | 新增能力 |
| 单均估算运费（方案费率测算） | 6.92 元 | 6.36 元 | ↓ 0.56 元 |

远距离分配率的 500km 为分析分组阈值，用于粗筛远距离分配，不代表必然的运输里程、成本或时效边界。试点期承运商分段费率：≤500km 为 5.80 元、500—1200km 为 7.20 元、>1200km 为 9.00 元，统一计费重量、无附加费，与单均估算运费 6.36 元的方案测算口径一致。以五个收货城市、每城两条订单构成 10 条固定场景，另在第二条中关闭第一条推荐的可行节点，检查替代推荐；[查看十组路由对照与节点参数](/data/supply/#routes)。

## 二、竞品分析

### 2.1 主流产品方案对比

本案例对标「分仓 / 多仓履约能力」，选取京东全渠道履约、旺店通 ERP、Shopify 三类具备就近分仓与容量分配能力的代表产品；与订单拆单案例对标「平台缺货拆单规则」（京东、淘宝、抖店）的视角不同。

| 产品 | 分配思路 | 决策环节与能力 | 适用特点 | 对本项目的启发 |
| --- | --- | --- | --- | --- |
| 京东全渠道履约 | 匹配靠近消费者且有货的门店或仓储节点 | 将线上订单与附近可用库存连接 | 仓店协同，缩短从库存到消费者的履约路径 | 先确认节点有货，再考虑就近，避免只按固定区域派单 |
| 旺店通 ERP | 智能分仓、多仓管理、就近发货 | 在订单处理与仓储管理中配置分仓能力 | 适用于多平台店铺与多仓协同 | 分仓应嵌入订单处理流程，并向运营提供规则配置入口 |
| Shopify | 先减少拆分，再考虑目的市场，最后选择最近地点 | 按规则顺序筛选和排序，可使用地点优先级及容量属性 | 规则顺序可配置，便于适配多履约地点 | 将库存、容量准入与距离排序分开，明确优先级 |

本项目落点：支付后检查候选仓的库存、启停、容量和时效，再推荐最近可行仓；运营可改选合格候选，确认时重新校验库存并占用。

### 2.2 差异化定位

| 选择 | 理由 | 代价 |
| --- | --- | --- |
| 整单单仓优先 | 先减少包裹，再优化距离 | 部分库存分布可能无法直接满足 |
| 负载作为明确准入条件 | 有可核实容量时剔除>85%的节点 | 容量未知时需转人工核查 |
| 推荐后确认，再占用库存 | 推荐并非锁库成功 | 确认必须重新校验并可能重算 |
| 人工可选但不可越过硬限制 | 特殊业务需要调整，但不允许缺货出库 | 需要填写调整原因 |

### 2.3 可借鉴的点与后续规划

| 参照产品 | 借鉴内容 | 本项目应用 | 后续落地条件 |
| --- | --- | --- | --- |
| 京东全渠道履约 | 将距离与可用库存一起考虑 | 从完整有货的候选中选择最近节点 | 扩充节点前先统一库存口径与地址精度 |
| 旺店通 ERP | 分仓与订单、仓储协同 | 路由推荐、规则配置、健康监控三页联动 | 将启停、容量和异常处理纳入日常运营 |
| Shopify | 按顺序执行路由规则 | 候选准入后排序，保留剔除原因和人工覆盖记录 | 后续接入仓内处理时长与承运时效，再评估组合权重 |

## 三、产品方案

### 3.1 核心思路

**把“固定仓发货”改为“最近的可行仓发货”。** 收货地址确定后，先筛选全量SKU有货、已启用且容量允许的仓库，再按距离排序。推荐结果供运营确认或改选；确认时复核库存，成功占用后再下发WMS。

### 3.2 旧流程与新流程

![旧流程：固定原仓发货，缺货时人工处理](/assets/route-old-flow.svg)

![新流程：库存过滤、距离排序、运营确认与仓库执行](/assets/route-new-flow.svg)

| 比较基线 | 本方案 |
| --- | --- |
| 支付→固定原仓→库存不足人工处理 | 支付→地址校验→候选筛选→距离排序→确认占用→下发仓库 |
| 换仓后人工更换物流信息 | 原履约任务尚未下发时才允许调整，确认后生成新仓发运参数 |
| 无完整有货仓仍沿用原仓 | 明确进入待处理，交给拆单方案或补货协商 |

### 3.3 路由推荐规则

| 顺序 | 规则 | 处理 |
| --- | --- | --- |
| 1 | 地址可解析且数据有效 | 地址优先解析到明细坐标；失败时确认城市或转人工 |
| 2 | 节点已启用，库存与容量数据≤60秒 | 未启用、数据过期或容量未知均剔除 |
| 3 | 全部SKU可用量≥订单需求量 | 缺任何商品均不进入整单候选 |
| 4 | 预计负载≤85% | 超限剔除；本期不把负载作为模糊评分权重 |
| 5 | 候选直线距离升序 | 精确到0.1km；同距离优先原仓，再按节点ID稳定排序 |
| 6 | 确认前重新校验及占用 | 旧快照拒绝并重算；不自动确认另一个仓 |

### 3.4 极端情况与异常处理

| 场景 | 处理 | 恢复条件 |
| --- | --- | --- |
| 所有仓缺货 | 不返回有效发货仓，转待补或拆单评估 | 获得可履约库存或批准分批 |
| 最近仓库存被占用 | 原推荐失效，展示新的候选 | 操作者核对新方案后重新确认 |
| 地址不完整 | 不凭空猜详细坐标 | 核实城市；使用市级坐标时标注精度 |
| 容量过载或数据陈旧 | 剔除并显示原因 | 更新数据或释放容量后重算 |
| 人工指定不可行仓 | 阻断，不因人工操作跳过库存校验 | 换选可行仓，填写原因 |
| 已开始拣货 | 停止直接改仓 | 先完成撤销/拦截及库存释放流程 |
| 消息重复或下发失败 | 请求去重、重试并显示处理中 | 收到WMS确认才标记已接单 |

### 3.5 关键接口设计

| 接口 | 输入 | 输出与约束 |
| --- | --- | --- |
| POST /routes/recommend | 订单版本、地址精度、SKU需求 | 候选、距离、准入原因、推荐快照版本 |
| POST /routes/confirm | 请求号、快照版本、目标仓、调整原因 | 重新校验后占用库存并生成履约任务 |
| POST /routes/release | 履约号、原仓、取消原因 | 确认撤销后释放占用；已拣货需先拦截 |
| GET /routes/statistics | 订单创建窗口与统计截止时间 | 无可用仓率、换仓率及待处理原因；缺失单据单列 |

路由由OMS履约编排层决定，WMS提供库存与接单结果，物流侧重新计算面单和揽收信息。

## 四、原型交互与数据字典

### 4.1 原型交互

[打开路由运营原型](/demos/warehouse-routing/)。包含“路由推荐—规则配置—健康监控”三个页面。推荐页展示订单、收货城市、候选表、当前建议及确认入口；人工调整只能选择满足条件的节点并填写原因。

配置页可修改节点启停、SKU库存、负载与数据时效；修改后旧推荐失效。监控页按当前输入显示缺货、超载与过期节点，不使用预置“已处理成功”的假通知。确认后展示实际选择节点与占用结果；刷新恢复场景初始值。

### 4.2 数据字典

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| order_id / order_wh_id | String | 是 | PC-ROUTE-001 / WH-WH |
| items[].sku / qty | String / Int | 是 | 棉柔巾2包、棉湿巾1包 |
| address_coord / precision | Number[] / Enum | 是 | 场景城市中心；生产区分精确与市级 |
| recommended_wh_id | String或null | 否 | 无候选时为空，不用原仓伪造成功 |
| stock / enabled / load_pct | Map / Bool / Number | 是 | 各SKU可用量、节点启用及负载 |
| age_seconds / data_version | Int / Int | 是 | 快照时效及版本 |
| distance_km / estimated_fen | Number / Int | 否 | 直线距离与场景运费估算 |
| reason | String | 人工覆盖时必填 | 1—200字，采用推荐节点时可省略 |
| request_id | String | 生产确认接口必填 | 请求去重标识；本地原型尚未实现请求号幂等返回 |

## 五、项目资源

### 5.1 排期与资源

| 维度 | 配置内容 |
| --- | --- |
| 团队配置方案 | 产品经理1人＋产品实习生1人（本人）＋后端1人＋前端1人＋QA 1人，核心交付小组共5人；运营、客服与仓库负责人按评审和验收节点参与 |
| 迭代计划 | 2个迭代、4周：第1周完成规则评审及核心开发；第2周联调；第3周异常用例与UAT；第4周灰度观察及放量评估 |
| 上线策略 | 先对白名单渠道开放单区域路由，核对推荐、人工改仓和WMS接单；通过后逐步扩大区域与节点范围 |
| 回滚方案 | 关闭新订单路由推荐，恢复原分仓规则；已确认任务保持既定仓库，已开始拣货的订单按拦截流程处理 |
| 监控埋点 | 推荐成功率、无可用仓率、人工覆盖率、确认失败率；结合出库时长与物流费用跟踪效果 |

### 5.2 我在其中的角色

| 环节 | 我做了什么 | 具体交付 |
| --- | --- | --- |
| 问题梳理 | 在产品经理指导下，独立拆解原分仓流程，完成远距离分配、最近仓缺货和仓内拥堵三类场景的梳理，区分库存问题与路由问题 | 现状流程、路由场景清单和指标口径 |
| 方案设计 | 主笔库存过滤、距离排序、负载降级及人工改仓规则，独立设计候选仓表、剔除原因和确认交互，提交产品经理及研发评审 | PRD、路由原型、规则优先级表和数据字典 |
| 跟进交付 | 独立维护接口字段清单和配置说明，与研发核对地址精度、库存快照及WMS下发字段，跟踪推荐失效、无可用仓及改仓失败问题 | 接口字段清单、配置说明、问题跟踪表 |
| 验收复盘 | 独立执行不同城市、缺货、停用、超载和旧快照场景的UAT用例，核对人工覆盖原因和库存扣减，跟进修复与复测 | 路由对照表、UAT用例、异常处理说明 |

## 六、预期价值与验收标准

### 6.1 场景测算与预期价值

10 条固定场景（5 条正常配置、5 条节点变化）验证路由规则按设计运行：5 条正常场景中远距离分配率从 80% 降至 40%、换仓率 40%、单均估算运费从 6.92 元降至 6.36 元；节点变化场景用于异常验收，不用于降本效果。出库时效与真实业务改善为后续观测指标。以下目标与验证口径用于后续放量复评。

| 目标 | 验证方式 | 验证口径 |
| --- | --- | --- |
| 减少可避免的远距离分配 | 同订单、同库存下对比原仓及推荐仓 | 可复算直线距离变化，不能等同配送里程 |
| 控制发运费用 | 相同计费条件下对比报价，结算后核对账单 | 按分段费率测算，再核对结算账单 |
| 降低错误改仓 | 缺货、停用、超载、过期均不能确认 | 由规则用例及交互检查验证 |
| 改善履约时效 | 支付到首批出库、全部签收分别统计 | 按支付、出库、签收三个时间点统计 |

### 6.2 验收标准

| 验收项 | 通过条件 |
| --- | --- |
| 深圳正常场景 | 推荐佛山节点；有货、启用、负载与时效均满足 |
| 最近节点停用或缺货 | 剔除后推荐下一可行节点，并显示原因 |
| 负载边界 | 85%允许，超过85%剔除 |
| 全部缺货 | 推荐为空，确认禁用，显示待处理 |
| 数据变更 | 修改配置后旧推荐不可提交，必须重算 |
| 人工调整 | 仅允许可行节点且原因非空，不绕过库存占用 |
| 重复确认 | 已确认订单不能再次扣库 |
| 生产接入验收 | 另验证并发占用、WMS失败补偿和6000次/小时容量，检查容量与失败恢复 |

