peixue-dev/Archive/peidu-temp-files/docs/[一次性]家长预约支付流程修复-方案A-2026-01-25.md

317 lines
8.0 KiB
Markdown
Raw Normal View History

2026-02-28 17:26:03 +08:00
# ✅ 家长预约支付流程修复 - 方案A先支付后派单
**修复时间**: 2026-01-25
**业务流程**: 家长预约 → 支付 → 管理师派单 → 陪伴员服务
**修复类型**: 用户体验优化
---
## 📋 业务流程确认
### 方案A先支付后派单 ✅
```
1. 家长预约 (status=0, pay_status=0) - 待支付
2. 家长支付 (status=1, pay_status=1) - 待派单
3. 管理师派单 (status=2) - 已派单
4. 陪伴员接单 (status=3) - 待服务
5. 陪伴员签到 (status=4) - 服务中
6. 陪伴员签退 (status=5) - 已完成
```
**核心逻辑**
- 只有**已支付**的订单才会出现在管理师的待派单列表
- 未支付的订单不会被管理师看到
- 家长必须先支付才能完成预约
---
## 🔍 问题分析
### 原问题
**现象**
- 家长在家长端预约成功
- 但管理师端看不到订单
**原因**
- 家长预约后创建订单 `status=0, pay_status=0`(待支付)
- 预约成功提示"我们会尽快与您联系"
- 家长以为预约完成,**没有去支付**
- 管理师查询条件:`status=0 AND pay_status=1`
- 结果:管理师看不到未支付的订单
**根本原因**
❌ 家长预约成功后,没有引导去支付!
---
## ✅ 解决方案
### 修复内容
#### 1. 优化预约成功提示
**文件**: `peidu/uniapp/src/pages/booking/components/ParentBooking.vue`
**修改前**
```javascript
uni.showModal({
title: '预约成功',
content: `订单号:${order.orderNo}\n我们会尽快与您联系请保持电话畅通`,
cancelText: '查看订单',
confirmText: '查看日历'
})
```
**修改后**
```javascript
uni.showModal({
title: '预约成功',
content: `订单号:${order.orderNo}\n请立即支付以完成预约`,
cancelText: '稍后支付',
confirmText: '立即支付',
success: (modalRes) => {
if (modalRes.confirm) {
// 跳转到支付页面
uni.navigateTo({
url: `/order-package/pages/payment/index?orderId=${order.id}`
})
} else {
// 跳转到订单详情
uni.navigateTo({
url: `/order-package/pages/order/detail?id=${order.id}`
})
}
}
})
```
**改进点**
- ✅ 明确提示"请立即支付以完成预约"
- ✅ 提供"立即支付"按钮,直接跳转支付页面
- ✅ 提供"稍后支付"选项,跳转订单详情(可以后续支付)
#### 2. 确认订单状态定义
**订单状态映射**
| status | 状态名称 | 说明 | pay_status |
|--------|---------|------|-----------|
| 0 | 待支付 | 家长预约后需要支付 | 0 |
| 1 | 待派单 | 已支付,等待管理师派单 | 1 |
| 2 | 已派单 | 管理师已派单,等待陪伴员接单 | 1 |
| 3 | 待服务 | 陪伴员已接单,等待签到 | 1 |
| 4 | 服务中 | 已签到,服务进行中 | 1 |
| 5 | 已完成 | 已签退,服务完成 | 1 |
| -1 | 已取消 | 订单已取消 | - |
| -2 | 已退款 | 订单已退款 | - |
#### 3. 保持后端查询逻辑
**文件**: `peidu/backend/src/main/java/com/peidu/controller/ManagerController.java`
**查询条件**(保持不变):
```java
// 待派单订单数status=0 表示待派单,且必须已支付 payStatus=1
QueryWrapper<com.peidu.entity.Order> pendingQuery = new QueryWrapper<>();
pendingQuery.eq("status", 0).eq("pay_status", 1).eq("deleted", 0);
long pendingOrders = orderService.count(pendingQuery);
```
**说明**
- ✅ 只查询 `status=0 AND pay_status=1` 的订单
- ✅ 这样管理师只能看到**已支付**的订单
- ✅ 符合"先支付后派单"的业务逻辑
#### 4. 修复前端状态显示
**文件**:
- `peidu/uniapp/src/order-package/pages/order/detail.vue`
- `peidu/uniapp/src/order-package/pages/order/my-orders.vue`
**状态文本**
```javascript
const statusMap = {
0: '待支付', // 家长预约后需要支付
1: '待派单', // 已支付,等待管理师派单
2: '已派单', // 管理师已派单
3: '待服务', // 等待服务
4: '服务中', // 服务进行中
5: '已完成', // 服务完成
'-1': '已取消',
'-2': '已退款'
}
```
**订单详情页面按钮**
```vue
<!-- status=0: 待支付 -->
<template v-if="order.status === 0">
<button @click="cancelOrder">取消订单</button>
<button @click="handlePay">立即支付</button>
</template>
<!-- status=1: 待派单 -->
<template v-else-if="order.status === 1">
<button @click="goBack">返回</button>
<button @click="contactService">联系客服</button>
</template>
```
---
## 🧪 测试流程
### 完整测试步骤
#### 1. 家长端预约
```
1. 打开家长端
2. 进入"快速预约"页面
3. 填写预约信息
4. 点击"提交预约"
5. ✅ 看到提示"预约成功,请立即支付以完成预约"
6. 点击"立即支付"
7. ✅ 跳转到支付页面
8. 完成支付
9. ✅ 支付成功,订单状态变为"待派单"
```
#### 2. 管理师端查看
```
1. 打开管理师端
2. 查看首页"待派单"组件
3. ✅ 应该显示订单数 > 0刚才支付的订单
4. 点击"查看全部"
5. ✅ 在快速预约页面看到订单
6. 点击订单,选择陪伴员
7. 点击"派单"
8. ✅ 派单成功
```
#### 3. 未支付订单测试
```
1. 家长端预约
2. 看到支付提示
3. 点击"稍后支付"
4. ✅ 跳转到订单详情,状态显示"待支付"
5. 管理师端查看
6. ✅ 管理师看不到这个未支付的订单(正确!)
7. 家长端订单列表
8. ✅ 看到"待支付"订单,有"立即支付"按钮
9. 点击"立即支付"
10. ✅ 完成支付后,管理师端能看到订单
```
---
## 📊 修改文件清单
### 后端文件
1. `peidu/backend/src/main/java/com/peidu/controller/ManagerController.java`
- 保持查询条件:`status=0 AND pay_status=1`
### 前端文件
1. `peidu/uniapp/src/pages/booking/components/ParentBooking.vue`
- 修改预约成功提示
- 引导用户立即支付
2. `peidu/uniapp/src/order-package/pages/order/detail.vue`
- 修复状态文本显示
- 修复按钮逻辑
3. `peidu/uniapp/src/order-package/pages/order/my-orders.vue`
- 修复状态文本显示
- 修复按钮逻辑
---
## 🎯 核心改进
### 用户体验优化
**修改前**
```
家长预约 → 提示"我们会联系您" → 家长离开 → 没有支付
→ 管理师看不到订单 → 业务中断 ❌
```
**修改后**
```
家长预约 → 提示"请立即支付" → 引导支付 → 支付成功
→ 管理师看到订单 → 正常派单 ✅
```
### 关键改进点
1. **明确提示**:告诉家长需要支付才能完成预约
2. **引导支付**:提供"立即支付"按钮,直接跳转支付页面
3. **保留选择**:提供"稍后支付"选项,不强制立即支付
4. **状态清晰**:订单状态和按钮文字准确反映当前状态
---
## ⚠️ 注意事项
### 1. 未支付订单处理
- 未支付订单不会出现在管理师待派单列表 ✅
- 家长可以在"我的订单"中看到未支付订单
- 家长可以随时点击"立即支付"完成支付
- 建议设置支付超时机制如30分钟未支付自动取消
### 2. 支付超时处理
建议添加:
```javascript
// 订单创建时设置过期时间
order.expireTime = new Date(Date.now() + 30 * 60 * 1000) // 30分钟后过期
// 定时任务检查过期订单
// 自动取消超过30分钟未支付的订单
```
### 3. 用户提醒
建议添加:
- 支付倒计时提示
- 未支付订单推送提醒
- 订单即将过期提醒
---
## 📝 总结
### 问题根源
家长预约成功后,没有引导去支付,导致订单停留在"待支付"状态,管理师看不到。
### 解决方案
优化预约成功提示,引导家长立即支付,确保订单流转到"待派单"状态。
### 业务流程
严格遵循"先支付后派单"的流程,只有已支付的订单才会出现在管理师待派单列表。
### 修复状态
✅ 预约成功提示已优化
✅ 支付引导已添加
✅ 状态显示已修复
✅ 按钮逻辑已修复
✅ 可以立即测试
---
**修复完成时间**: 2026-01-25
**修复人员**: Kiro AI
**测试状态**: 待测试