# Data Model: 订单状态四字段分离

## 变更的实体

### PosOrder（pos_order 表）

#### 新增字段

| 字段名 | Java 类型 | 数据库列 | 数据库类型 | 默认值 | 说明 |
|--------|----------|---------|-----------|-------|------|
| `deliveryStatus` | Long | `delivery_status` | BIGINT | NULL | 配送状态：0待接单,1骑手已接单,2配送中,3已送达。自取/堂食为 NULL |
| `payStatus` | Long | `pay_status` | BIGINT | 0 | 支付状态：0未支付,1已支付,2已退款 |
| `afterSaleStatus` | Long | `after_sale_status` | BIGINT | 0 | 售后状态：0无售后,1申请中,2退款中,3已退款,4退款拒绝,5客服介入,6售后完成 |

#### 重新定义的字段

| 字段名 | 旧值 → 新值 | 说明 |
|--------|-----------|------|
| `state` | 0-13 → 0-4 | 旧值废弃，新值：0待处理,1已接单,2已出餐,3已完成,4已取消 |

#### 废弃但保留的字段

| 字段名 | 替代方案 |
|--------|---------|
| `diningStatus` | 由 state=2（已出餐）替代 |
| `isAccepted` | 由 state=1（已接单）替代 |

## 状态机定义

### state（订单状态）— 所有类型共用

```
0(待处理) → 1(已接单) → 2(已出餐) → 3(已完成)
0(待处理) → 4(已取消)
1(已接单) → 4(已取消)
```

转换规则：
- 0→1：商家接单
- 1→2：商家出餐
- 2→3：骑手送达(外送) / 商家确认完成(自取/堂食) / 自动完成兜底
- *→4：取消（商家/系统/用户超时/全额退款）

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

```
0(待接单) → 1(骑手已接单) → 2(配送中) → 3(已送达)
```

- 商家出餐时设 deliveryStatus=0
- 自取/堂食始终为 NULL

### payStatus（支付状态）— 所有类型共用

```
0(未支付) → 1(已支付)
1(已支付) → 2(已退款)
```

- 外送到付：创建时直接 payStatus=1
- 自取/堂食现金：创建时 payStatus=0，商家收款+完成时设 1
- 在线支付：支付回调后设 1

### afterSaleStatus（售后状态）— 独立状态机

```
0(无售后) → 1(申请中) → 2(退款中) → 3(已退款) → 6(售后完成)
                       → 4(退款拒绝) → 5(客服介入) → 6(售后完成)
```

- 本次不实现退款流程（afterSaleStatus 预留，值保持 0）
- 用户/商家取消订单时 afterSaleStatus 保持 0

## 各类型订单字段使用

| 订单类型 | state | deliveryStatus | payStatus | afterSaleStatus |
|---------|-------|----------------|-----------|-----------------|
| 外送(type=0) | 0→1→2→3 | 0→1→2→3 | 0→1 或 创建时1 | 0（预留） |
| 自取(type=1) | 0→1→2→3 | NULL | 0→1（完成时） | 0（预留） |
| 堂食(type=2) | 0→1→2→3 | NULL | 0→1（完成时） | 0（预留） |
