# WMS 出库流程文档

> 来源：`C:\work\gitlab\shopee\ttx-project-doc\集波\WMS出库流程.pdf`
>
> 说明：本稿为 PDF 独立整理版，主要覆盖 vendor 交互视角的出库流程。PDF 共 6 页，图示较多、可抽取文字较少，因此以下内容以“PDF补充 / 待代码确认 / 当前实现”方式标注边界，避免误写成 `WaveRuleMatchService` 已完全落地。
>
> 名词口径：`vendor` 是当前项目 / WES-WMS 实现侧，`Shopee` 是需要调用或接收交互的外部接口方。

---

## 1. 文档范围

这份文档只描述 PDF 中出现的 WMS 出库流程，不替代现有集波接口文档，也不展开 `WaveRuleMatchService` 的规则匹配细节。

重点关注三类边界：

| 关注点 | 说明 |
|---|---|
| 任务创建 | 调用 Shopee 外部接口还是当前项目 vendor 侧创建任务 |
| 任务拆分 | WaveID、PickingTask、SubPickingTask 的关系 |
| 接口交互 | WMS-api、WMS-automation、iWMS、Shopee 外部接口之间的任务流转 |

---

## 2. 术语表

| 术语 | PDF补充 | 待代码确认 / 当前实现 |
|---|---|---|
| `WMS-api` | WMS 对外接口层 | 对应具体接口契约时再落到 API 文档 |
| `WMS-automation` | 自动化流程层 | 属任务分流和自动化作业链路 |
| `iWMS` | WMS 内部作业系统 / 核心执行层 | PDF 中作为内部系统名出现 |
| `vendor` | 当前项目 / WES-WMS 实现侧 | 负责接收任务、创建任务、执行任务 |
| `WaveID` | 约等于 WMS 拣货任务 | 一次只生成一个拣货任务 |
| `PickingTask` | 通常对应多个业务订单 | 当前项目 vendor 侧不需要感知多拣货员层 |
| `SubPickingTask` | 任务过大或跨区时的拆分单元 | 一个销售出库波次 ID 对应一个 SubPickingTask |
| `Prehit` | 预命中自动化区 | PDF 术语，具体落点待进一步确认 |
| `RTS` | RTS 业务线 | 需求池模式主要走当前项目 vendor 侧创建任务链路 |
| `MTO` | MTO 业务线 | 同时存在需求池与非需求池两类流程 |

---

## 3. 总体链路

```mermaid
flowchart TB
  A["WMS 出库流程 PDF"]
  B["调用 Shopee 外部接口"]
  C["当前项目 vendor 侧创建任务"]
  A --> B
  A --> C
  B --> B1["销售出库自动化 SubPickingTask"]
  B --> B2["MTO 非需求池模式"]
  C --> C1["销售出库自动化 Order"]
  C --> C2["RTS 需求池模式"]
  C --> C3["MTO 需求池模式"]
```

PDF 的主线可以拆成两类：

| 类别 | PDF补充 | 当前实现/边界 |
|---|---|---|
| 调用 Shopee 外部接口 | 销售出库自动化 `SubPickingTask`、MTO 非需求池模式 | 属于与 Shopee 外部接口交互后当前项目 vendor 侧承接执行的链路，不是当前集波匹单本身 |
| 当前项目 vendor 侧创建任务 | 销售出库自动化 `Order`、RTS 需求池模式、MTO 需求池模式 | 属于当前项目 vendor 侧按需求/订单创建和执行任务的链路 |

---

## 4. 五类出库流程

### 4.1 销售出库自动化 SubPickingTask

| 项 | 内容 |
|---|---|
| 创建源 | Shopee |
| PDF补充 | `RunWave` 生成的拣货任务进入自动化区后，会拆成 normal 拣货任务和自动化拣货任务；自动化部分下发到当前项目 vendor 侧 |
| 任务关系 | 一个销售出库波次 ID 对应一个 `SubPickingTask` |
| 执行方式 | 当前项目 vendor 侧执行 WMS 创建的拣货任务，不能混合拣货 |
| 当前实现 | 与 `WaveRuleMatchService` 只存在上下游关系，不属于该服务直接创建任务的职责 |

### 4.2 销售出库自动化 Order

| 项 | 内容 |
|---|---|
| 创建源 | vendor |
| PDF补充 | 订单预命中自动化区时，由当前项目 vendor 侧接收/组织任务 |
| 执行方式 | 当前项目 vendor 侧合并多个订单后，创建并执行混合拣货任务 |
| 任务边界 | 属当前项目 vendor 侧创建任务链路 |
| 当前实现 | 需要看 `wms-api / edi-shopee` 对 Shopee 外部接口的链路，不应写成当前集波服务已完成 |

### 4.3 RTS 需求池模式

| 项 | 内容 |
|---|---|
| 创建源 | vendor |
| PDF补充 | RTS 需求到自动化区后，由当前项目 vendor 侧承接需求 |
| 执行方式 | 当前项目 vendor 侧按需求创建并执行任务 |
| 任务边界 | 属需求池链路 |
| 当前实现 | 当前集波服务只按 `ticketType` 做入口分流和匹单，不负责完整的 vendor 侧任务创建 |

### 4.4 MTO 需求池模式

| 项 | 内容 |
|---|---|
| 创建源 | vendor |
| PDF补充 | MTO 需求到自动化区后，由当前项目 vendor 侧承接需求 |
| 执行方式 | 当前项目 vendor 侧按需求创建并执行任务 |
| 任务边界 | 属需求池链路 |
| 当前实现 | 与 RTS 一样，属于下游任务执行链路 |

### 4.5 MTO 非需求池模式

| 项 | 内容 |
|---|---|
| 创建源 | Shopee |
| PDF补充 | 库存占用到自动化库位后，拆分 `PickingTask` 并下发到当前项目 vendor 侧 |
| 执行方式 | 不允许混合拣货 |
| 任务关系 | 更接近与 Shopee 外部接口交互后由当前项目 vendor 侧执行 |
| 当前实现 | 与销售自动化 SubPickingTask 类似，属于任务下发与执行链路，不是当前集波匹单核心 |

---

## 5. 关键流程要点

### 5.1 任务粒度

PDF 的核心口径是：

- `WaveID` 基本等于 WMS 拣货任务。
- 一次只生成一个拣货任务。
- `PickingTask` 可以对应多个业务订单。
- `PickingTask` 可能由多个拣货员执行，但当前项目 vendor 侧不需要感知多拣货员层。
- `SubPickingTask` 用于任务过大或跨区拆分。

### 5.2 混拣限制

PDF 强调两类限制：

- 当前项目 vendor 侧执行 WMS 创建的任务时，不能混合拣货。
- 自动化区拆分出来的任务，按既定任务边界执行，不在当前项目 vendor 侧再做混合。

### 5.3 任务分层

PDF 可理解为两层：

| 层级 | 说明 |
|---|---|
| Shopee 外部接口交互层 | 负责调用或接收 `WaveID` / `PickingTask` / `SubPickingTask` 相关任务 |
| 当前项目 vendor 执行层 | 负责接收任务、创建任务、执行任务、回传状态 |

---

## 6. 与当前集波服务的关系

这部分只做边界说明，避免把 PDF 的完整 vendor 流程写进 `WaveRuleMatchService` 本体。

| 范围 | PDF补充 | 当前实现 |
|---|---|---|
| 集波入口 | 先匹单、再分流、再生成后续任务 | `WaveRuleMatchService` 负责入口与规则匹配 |
| 订单/波次分流 | 按销售、RTS、MTO 等业务线区分 | 当前服务已按 `pickType`、`ticketType`、`waveType` 等规则做分流 |
| vendor 任务创建 | 当前项目 vendor 侧创建/执行任务，并按接口要求与 Shopee 交互 | 当前服务不负责完整的 vendor 侧任务拆分和执行 |
| 取消/缺货/补单 | PDF 体现为上下游任务流转的一部分 | 当前服务只覆盖自己能控制的集波和补缺口边界 |

### 当前实现

`WaveRuleMatchService` 现阶段更适合归类为“集波入口与规则匹配服务”，而不是“vendor 出库任务全链路服务”。

### 待代码确认

PDF 中涉及 `create_picking_task`、`bind_picking_task`、`complete_picking_task`、`cancel_*` 等任务生命周期接口时，应落到对应 `wms-api / edi-shopee` 对 Shopee 的接口文档，不应在本流程文档里写成该服务已实现。

---

## 7. 结论

这份 PDF 主要补充的是“任务如何被拆分，并由当前项目 vendor 侧执行或调用 Shopee 接口”，而不是“集波规则如何匹单”。

因此，最合适的归档方式是：

- 本文件作为 `WMS出库流程.pdf` 的独立流程文档。
- 现有 `WaveRuleMatchService` 文档继续只描述集波服务自身。
- API 文档只保留接口契约和入参出参，不混写完整 vendor 任务执行细节。
