317 lines
8.0 KiB
Markdown
317 lines
8.0 KiB
Markdown
|
|
# ✅ 家长预约支付流程修复 - 方案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
|
|||
|
|
**测试状态**: 待测试
|