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