refactor: redesign order flow - serve first, pay later

- Redesign order status flow: 0待接单→1已接单→2服务中→3待支付→4已完成
- Allow service start from status 1 (removed payment barrier)
- Add payment entry after service completion (status 3)
- Update Android/miniprogram UI status mappings
- Add order flow design document to docs/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
renjianbo
2026-05-21 00:56:17 +08:00
parent f3e2fd2829
commit 17e91fcf84
15 changed files with 230 additions and 15 deletions

View File

@@ -0,0 +1,170 @@
# 瑞来健康 — 订单流转设计方案
## 一、业务流程总览
```
患者端(小程序) 陪护端(Android) 后台管理员
│ │ │
│ 下单 │ │
├─────────────────────────────────────────────→ 0 待接单
│ │ │
│ [确认接单] │
├─────────────────────────────────────────────→ 1 已接单(待服务)
│ │ │
│ [开始服务] │
├─────────────────────────────────────────────→ 2 服务中
│ │ │
│ [完成服务] │
├─────────────────────────────────────────────→ 3 待支付
│ │ │
│ [微信支付] │ │
├─────────────────────────────────────────────→ 4 已完成(已支付)
│ │ │
│ │ [结算]→ 8 已结算
```
## 二、订单状态定义
| status | 名称 | 含义 | 触发方 | 触发动作 |
|--------|------|------|--------|----------|
| -2 | 已取消 | 订单已取消 | 患者/陪护员 | 取消订单 |
| -1 | 拒绝接单 | 陪护员拒绝了订单 | 陪护员 | 拒绝接单 |
| 0 | 待接单 | 患者已下单,等待陪护员接单 | 患者 | 提交订单 |
| 1 | 已接单 | 陪护员已接单,等待开始服务 | 陪护员 | 确认接单 |
| 2 | 服务中 | 陪护员已到场开始执行服务 | 陪护员 | 开始服务 |
| 3 | 待支付 | 服务已完成,等待患者付款 | 陪护员 | 完成服务 |
| 4 | 已完成 | 患者已付款,订单完结 | 患者 | 微信支付 |
| 5 | 申请退款 | 患者申请退款 | 患者 | 申请退款 |
| 6 | 退款中 | 微信退款处理中 | 系统 | 退款回调 |
| 7 | 已退款 | 退款已到账 | 系统 | 退款回调 |
| 8 | 已结算 | 平台已与陪护员完成结算 | 管理员 | 确认结算 |
## 三、各阶段取消/退款规则
| 状态 | 取消规则 |
|------|----------|
| 0 待接单 | 患者可自行取消;陪护员可拒绝接单 |
| 1 已接单 | 双方可取消(需填写原因) |
| 2 服务中 | **不可自行取消**,需联系平台客服介入调解 |
| 3 待支付 | **不可取消**,患者应按约定付款;如有争议联系客服 |
| 4 已完成 | 患者可申请退款 → 5申请退款 → 6退款中 → 7已退款 |
## 四、关键接口
### 4.1 接单
```
POST /system/view/acceptOrderYes
参数: { orderId }
作用: status 0 → 1, 绑定陪护员ID
调用方: Android 陪护端
```
文件: `OrderViewServiceImpl.java:100 acceptOrderYes()`
### 4.2 开始服务
```
POST /system/view/startServiceWithOrder
参数: { orderId }
作用: status 1 → 2(仅status=1时可执行)
调用方: Android 陪护端/Miniprogram
```
文件: `OrderViewServiceImpl.java:117 startServiceWithOrder()`
### 4.3 完成服务
```
GET /system/order/completeOrder/{orderId}
参数: orderId (路径参数)
作用: status 2 → 3(需当前时间 > 服务结束时间)
调用方: Android 陪护端
```
文件: `RlzOrderServiceImpl.java:276 completeOrderByOrderId()`
### 4.4 患者付款
```
GET /system/order/weixinPay/{orderId}
作用: status 3 → 4(微信支付回调触发)
调用方: 微信小程序端
```
文件: `RlzOrderController.java:191 weixinPay()`
### 4.5 支付回调(微信异步通知)
```
POST /system/weixin/wxPayNotify
作用: 支付成功后 status 3 → 4
```
文件: `RlzOrderServiceImpl.java:213 weixinPayOrderNext()`
### 4.6 取消订单
```
GET /system/order/concelOrder/{orderId}
作用: status 0/1 → -2
```
文件: `RlzOrderServiceImpl.java:179 concelOrderByOrderId()`
### 4.7 退款申请
```
GET /system/order/refundOrder/{orderId}
作用: status 4 → 5 → 6 → 7
```
文件: `RlzOrderController.java:213 refundOrder()`
### 4.8 管理员结算
```
PUT /system/view/settleOrder/{orderId}
作用: status 4 → 8
```
文件: `OrderViewController.java:289 settleOrder()`
## 五、改动清单
### 5.1 后端 (Java Spring Boot)
| 文件 | 改动内容 |
|------|----------|
| `OrderViewServiceImpl.java:120` | `"2"` → `"1"`:已接单即可开始服务 |
| `OrderViewServiceImpl.java:131` | `"3"` → `"2"`:服务中才能完成;设置 `status = "3"` |
| `RlzOrderServiceImpl.java:226` | 支付回调设置 `status = "4"` 而非 `"2"` |
| `RlzOrderServiceImpl.java:182` | 取消条件:status `"2","3"` 不可取消,仅 `"0","1","4"` 可取消 |
| `RlzOrderController.java:191-211` | weixinPay 接口增加 status=3 的校验 |
### 5.2 微信小程序 (coupon)
| 文件 | 改动内容 |
|------|----------|
| `pages/order/order.js:15-16` | 状态标签数组:替换"待服务"为"待支付",移除冗余项 |
| `pages/order/order.wxml:27,45` | status=1 时隐藏"去付款";status=3 时显示"去付款" |
| `pages/order/order.wxml:22-33` | 状态文案映射更新 |
| `pages/orderdetail/orderdetail.js` | 确认支付入口逻辑对应更新 |
### 5.3 Android 陪护端 (peizhen)
| 文件 | 改动内容 |
|------|----------|
| `TobeSerFragment.java:239` | 查询参数从 `"1,2"` 改为 `"1"`(待服务仅=已接单) |
| `SerFragment.java:225` | 查询参数从 `"1,2"` 改为 `"2"`(服务中仅=服务中) |
| `CusListAdapter.java:38-77` | status 标签映射更新:1=已接单, 2=服务中, 3=待支付, 4=已完成 |
| `CustomerDetailActivity.java:27-94` | 各状态的UI展示文案和样式更新 |
## 六、设计理由
### 6.1 为什么先服务后付款
1. **陪诊场景天然适配**:患者与陪护员在医院当面接触,服务过程透明可验证
2. **降低患者决策门槛**:无需先向陌生人付款,信任成本更低
3. **激励服务质量**:陪护员知道患者满意才会付款,有动力做好服务
4. **风险可控**:订单金额小(20-200元),且有平台客服兜底
### 6.2 风险控制措施
1. 有未支付订单的患者限制再次下单
2. 服务中状态锁定、不可取消,保护陪护员劳动
3. 管理员退款审核机制保留(status 5-7 流程)
4. 平台客服介入机制(status 2-3 争议时)
### 6.3 业务闭环
```
患者端(下单+付款) ←→ 陪护端(接单+服务) ←→ 管理后台(结算+纠纷处理)
│ │ │
└───────────────────────┴────────────────────────┘
三端数据实时同步
```