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(预留) |