# 订单列表接口前端对接文档

## 通用说明

- 三个端各自独立的 `orderList` 接口，通过 `tab` 参数区分 Tab
- 返回格式统一：`{ code, msg, data: { records, total, page, size } }`
- `records` 中每条数据为 PosOrder 全字段，新增字段：
  - `deliveryStatus` — 配送状态（Long，自取/堂食为 null）
  - `payStatus` — 支付状态（Long）
  - `afterSaleStatus` — 售后状态（Long）
- **状态展示文字由前端根据 `type + state + deliveryStatus + payStatus + afterSaleStatus` 组合计算**，后端不返回 statusText
- 所有接口需要 `token` Header

---

## 一、用户端

**接口**: `GET /system/userOrder/orderList`

### 参数

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| token | Header | 是 | 用户身份 |
| page | int | 是 | 页码，从 1 开始 |
| size | int | 是 | 每页条数 |
| tab | String | 是 | 见下表 |
| type | String | 否 | 订单类型筛选：`0` 外送 / `1` 自取 / `2` 堂食，不传查所有 |

### Tab 列表

| Tab 名称 | tab 值 | 含义 | 请求示例 |
|----------|--------|------|---------|
| 待付款 | `unpaid` | 仅外送未支付订单 | `?tab=unpaid&page=1&size=10` |
| 进行中 | `active` | 进行中的订单 | `?tab=active&page=1&size=10` |
| 已完成 | `completed` | 已完成订单 | `?tab=completed&page=1&size=10` |
| 已取消 | `cancelled` | 已取消订单 | `?tab=cancelled&page=1&size=10` |
| 退款/售后 | `refund` | 有售后记录的订单 | `?tab=refund&page=1&size=10` |

### 前端展示文字对照表（对齐美团精简方案）

用户只关心关键节点，多个内部状态合并为一个展示文字。前端根据字段组合判断，`afterSaleStatus` 优先。

**外送 (type=0) 用户看到的文字**

| 原来的文字 | 美团方案 | 对应字段条件 |
|-----------|---------|-------------|
| 待付款 | 待支付 | payStatus=0 |
| 待商家确认 + 商家备餐中 | 商家已接单 | state=0/1, payStatus=1, afterSaleStatus=0 |
| 待骑手配送 + 骑手已接单 + 配送中 | 配送中 | state=2, deliveryStatus=0/1/2 |
| 已送达 | 已送达 | state=2, deliveryStatus=3 |
| 已完成 | 已完成 | state=3 |
| 已取消 | 已取消 | state=4, afterSaleStatus=0 |
| 退款申请中/退款中/已退款 | 退款中/已退款 | afterSaleStatus=1/2/3 |

**自取 (type=1) 用户看到的文字**

| 美团方案 | 条件 |
|---------|------|
| 待支付 | payStatus=0 |
| 商家已接单 | state=0/1 |
| 待取餐 | state=2 |
| 已完成 | state=3 |
| 已取消 | state=4 |

**堂食 (type=2) 用户看到的文字**

| 美团方案 | 条件 |
|---------|------|
| 待支付 | payStatus=0 |
| 商家已接单 | state=0/1 |
| 备餐完成 | state=2 |
| 已完成 | state=3 |
| 已取消 | state=4 |

---

## 二、商家端

**接口**: `GET /system/orderShOprate/orderList`

### 参数

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| token | Header | 是 | 商家身份 |
| page | int | 是 | 页码，从 1 开始 |
| size | int | 是 | 每页条数 |
| tab | String | 是 | 见下表 |
| mdId | Long | 是 | 门店 ID |
| type | String | 否 | 订单类型筛选：`0` / `1` / `2`，不传显示全部 |

### Tab 列表

| Tab 名称 | tab 值 | 含义 | 请求示例 |
|----------|--------|------|---------|
| 待受理 | `pending` | 已支付待接单（自取/堂食下单即可见） | `?tab=pending&page=1&size=10&mdId=100` |
| 待出餐 | `preparing` | 已接单备餐中 | `?tab=preparing&page=1&size=10&mdId=100` |
| 已出餐 | `ready` | 出餐完成待取/待配送 | `?tab=ready&page=1&size=10&mdId=100` |
| 已完成 | `completed` | 已完成订单 | `?tab=completed&page=1&size=10&mdId=100` |
| 已取消 | `cancelled` | 已取消订单 | `?tab=cancelled&page=1&size=10&mdId=100` |
| 退款/售后 | `refund` | 有售后记录的订单 | `?tab=refund&page=1&size=10&mdId=100` |

### 商家端操作接口

| 操作 | 接口 | 方法 | 参数 | 说明 |
|------|------|------|------|------|
| 接单 | `/system/orderShOprate/acceptOrder` | POST | `id`(订单ID) | state 0→1 |
| 出餐 | `/system/orderShOprate/dispatchOrder` | GET | `id`(订单ID) | state 1→2，外送额外设 deliveryStatus=0 |
| 完成(自取/堂食) | `/system/orderShOprate/completeOrder` | POST | `id`(订单ID) | state 2→3，payStatus 0→1 |
| 取消 | `/system/orderShOprate/cancelOrder` | POST | `id`(订单ID) | state→4，仅限 state=0 或 1 |

---

## 三、骑手端

**接口**: `GET /system/orderQsOprate/orderList`

### 参数

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| token | Header | 是 | 骑手身份（JwtUtil 解析即 qsId） |
| page | int | 是 | 页码，从 1 开始 |
| size | int | 是 | 每页条数 |
| tab | String | 是 | 见下表 |
| longitude | BigDecimal | 条件必填 | 骑手当前经度（**newTask Tab 必填**） |
| latitude | BigDecimal | 条件必填 | 骑手当前纬度（**newTask Tab 必填**） |

### Tab 列表

| Tab 名称 | tab 值 | 含义 | 排序 | 请求示例 |
|----------|--------|------|------|---------|
| 新任务 | `newTask` | 可抢的外送订单 | 距离从近到远 | `?tab=newTask&page=1&size=10&longitude=106.7&latitude=10.8` |
| 待取货 | `toPickup` | 已接单待取餐 | 时间从旧到新 | `?tab=toPickup&page=1&size=10` |
| 配送中 | `delivering` | 正在配送 | 时间从旧到新 | `?tab=delivering&page=1&size=10` |
| 已完成 | `completed` | 已完成订单 | 时间从新到旧 | `?tab=completed&page=1&size=10` |
| 已取消 | `cancelled` | 已取消订单 | 时间从新到旧 | `?tab=cancelled&page=1&size=10` |
| 退款/售后 | `refund` | 有售后记录的订单 | 时间从新到旧 | `?tab=refund&page=1&size=10` |

### 骑手端操作接口

| 操作 | 接口 | 方法 | 参数 | 说明 |
|------|------|------|------|------|
| 接单 | `/system/orderQsOprate/acceptOrder` | POST | `id`(订单ID) | deliveryStatus→1，绑定 qsId |
| 取餐 | `/system/orderQsOprate/pickupOrder` | POST | `id`(订单ID) | deliveryStatus→2 |
| 送达 | `/system/orderQsOprate/deliverOrder` | POST | `id`(订单ID) | deliveryStatus→3，state→3 |

---

## 四、字段值速查

### state（订单状态）

| 值 | 含义 |
|----|------|
| 0 | 待处理 |
| 1 | 已接单 |
| 2 | 已出餐 |
| 3 | 已完成 |
| 4 | 已取消 |

### deliveryStatus（配送状态，仅外送 type=0）

| 值 | 含义 |
|----|------|
| null | 自取/堂食不适用 |
| 0 | 待接单（等待骑手） |
| 1 | 骑手已接单 |
| 2 | 配送中 |
| 3 | 已送达 |

### payStatus（支付状态）

| 值 | 含义 |
|----|------|
| 0 | 未支付 |
| 1 | 已支付 |
| 2 | 已退款 |

### afterSaleStatus（售后状态）

| 值 | 含义 |
|----|------|
| 0 | 无售后 |
| 1 | 申请中 |
| 2 | 退款中 |
| 3 | 已退款 |
| 4 | 退款拒绝 |
| 5 | 客服介入 |
| 6 | 售后完成 |

### type（订单类型）

| 值 | 含义 |
|----|------|
| 0 | 外送 |
| 1 | 自取 |
| 2 | 堂食 |

---

## 五、商家端订单卡片状态显示规则

参考美团商家端：每个订单卡片只显示**一个状态文字**，用商家视角（"我该做什么"）。

### 外送订单 (type=0)

| 条件 | 显示文字 | 颜色 |
|------|---------|------|
| state=0, payStatus=0 | 待支付 | 灰色 |
| state=0, payStatus=1 | 待接单 | 橙色 |
| state=1 | 制作中 | 蓝色 |
| state=2, deliveryStatus=0/1 | 待骑手取餐 | 蓝色 |
| state=2, deliveryStatus=2 | 配送中 | 蓝色 |
| state=2, deliveryStatus=3 | 已送达 | 绿色 |
| state=3 | 已完成 | 灰色 |
| state=4 | 已取消 | 红色 |

### 自取 (type=1) + 堂食 (type=2) 统一

| 条件 | 显示文字 | 颜色 |
|------|---------|------|
| state=0 | 待接单 | 橙色 |
| state=1 | 制作中 | 蓝色 |
| state=2 | 备餐完成 | 橙色 |
| state=3 | 已完成 | 灰色 |
| state=4 | 已取消 | 红色 |

### 售后状态（所有类型，afterSaleStatus > 0 时覆盖上面的状态文字）

| 条件 | 显示文字 | 颜色 |
|------|---------|------|
| afterSaleStatus=1 | 退款申请中 | 橙色 |
| afterSaleStatus=2 | 退款中 | 橙色 |
| afterSaleStatus=3 | 已退款 | 红色 |
| afterSaleStatus=4 | 退款已拒绝 | 灰色 |

### 判断优先级

1. 先检查 afterSaleStatus，如果 > 0，显示售后状态文字
2. 否则根据 type + state + deliveryStatus 组合判断显示文字
