354 lines
13 KiB
Markdown
354 lines
13 KiB
Markdown
# 陪伴员消息通知联通检查报告
|
||
|
||
## 📋 检查目的
|
||
|
||
检查陪伴员端还有哪些消息通知功能没有和其他端(管理师、家长等)联通,确保消息能够正确地在不同角色之间流转。
|
||
|
||
## 🔍 系统中已实现的消息通知类型
|
||
|
||
根据代码分析,系统已经定义了以下消息通知场景:
|
||
|
||
### 1️⃣ 订单相关通知(Order)
|
||
|
||
| 通知类型 | 发送对象 | 触发场景 | 实现状态 | 联通状态 |
|
||
|---------|---------|---------|---------|---------|
|
||
| 订单创建 | 家长 | 创建订单成功 | ✅ 已实现 | ✅ 已联通 |
|
||
| 订单派单 | 家长 | 管理师分配陪伴员 | ✅ 已实现 | ⚠️ 需确认 |
|
||
| 订单接单 | 家长 | 陪伴员接受订单 | ✅ 已实现 | ✅ 已联通 |
|
||
| 订单取消 | 家长 + 陪伴员 | 订单被取消 | ✅ 已实现 | ✅ 已联通 |
|
||
| 订单完成 | 家长 | 订单自动确认完成 | ✅ 已实现 | ✅ 已联通 |
|
||
| 支付成功 | 家长 | 订单支付成功 | ✅ 已实现 | ✅ 已联通 |
|
||
| 退款成功 | 家长 | 订单退款成功 | ✅ 已实现 | ✅ 已联通 |
|
||
|
||
**陪伴员端缺失的订单通知:**
|
||
- ❌ **新订单通知**:当有新订单可接时,陪伴员应该收到通知
|
||
- ❌ **订单派单通知**:当管理师将订单分配给陪伴员时,陪伴员应该收到通知
|
||
- ❌ **订单即将开始提醒**:服务时间前1小时提醒陪伴员
|
||
|
||
### 2️⃣ 服务相关通知(Service)
|
||
|
||
| 通知类型 | 发送对象 | 触发场景 | 实现状态 | 联通状态 |
|
||
|---------|---------|---------|---------|---------|
|
||
| 服务开始(签到) | 家长 | 陪伴员签到 | ✅ 已实现 | ✅ 已联通 |
|
||
| 服务结束(签退) | 家长 | 陪伴员签退 | ✅ 已实现 | ✅ 已联通 |
|
||
| 服务提醒 | 家长 | 服务时间前提醒 | ✅ 已实现 | ⚠️ 需确认 |
|
||
|
||
**陪伴员端缺失的服务通知:**
|
||
- ❌ **服务即将开始提醒**:服务时间前提醒陪伴员准备
|
||
- ❌ **签退提醒**:服务结束时提醒陪伴员签退
|
||
- ❌ **超时服务提醒**:服务超过预定时间时提醒
|
||
|
||
### 3️⃣ 反馈相关通知(Feedback)
|
||
|
||
| 通知类型 | 发送对象 | 触发场景 | 实现状态 | 联通状态 |
|
||
|---------|---------|---------|---------|---------|
|
||
| 每日反馈提交 | 家长 | 陪伴员提交每日反馈 | ✅ 已实现 | ⚠️ 需确认 |
|
||
| 周反馈提交 | 家长 | 陪伴员提交周反馈 | ✅ 已实现 | ⚠️ 需确认 |
|
||
| 月反馈提交 | 家长 | 陪伴员提交月反馈 | ✅ 已实现 | ⚠️ 需确认 |
|
||
| 反馈需修改 | 陪伴员 | 管理师要求修改反馈 | ✅ 已实现 | ❌ 未联通 |
|
||
| 反馈审核通过 | 家长 | 管理师审核通过反馈 | ✅ 已实现 | ❌ 未联通 |
|
||
| 家长提出疑问 | 管理师 | 家长对反馈提出疑问 | ✅ 已实现 | ❌ 未联通 |
|
||
| 问题已解决 | 家长 | 管理师解决家长疑问 | ✅ 已实现 | ❌ 未联通 |
|
||
| 管理师回复反馈 | 家长/陪伴员 | 管理师回复反馈 | ✅ 已实现 | ❌ 未联通 |
|
||
|
||
**陪伴员端缺失的反馈通知:**
|
||
- ❌ **反馈需修改通知**:管理师要求修改反馈时,陪伴员应该收到通知
|
||
- ❌ **反馈审核通过通知**:反馈审核通过后,陪伴员应该收到确认通知
|
||
- ❌ **家长提出疑问通知**:家长对反馈提出疑问时,陪伴员应该收到通知
|
||
- ❌ **管理师回复通知**:管理师回复反馈时,陪伴员应该收到通知
|
||
- ❌ **反馈提交提醒**:每天提醒陪伴员提交当日反馈
|
||
|
||
### 4️⃣ 提醒管理通知(Reminder)
|
||
|
||
| 通知类型 | 发送对象 | 触发场景 | 实现状态 | 联通状态 |
|
||
|---------|---------|---------|---------|---------|
|
||
| 管理师发送提醒 | 所有陪伴员 | 管理师在提醒管理中发送 | ✅ 已实现 | ⚠️ 有问题 |
|
||
|
||
**当前问题:**
|
||
- ⚠️ 管理师发送提醒时,使用的是`teacher.getUserId()`,如果为null则使用`teacher.getId()`,可能导致消息发送给错误的用户
|
||
- ⚠️ 提醒管理接口被排除在JWT拦截器之外,存在安全隐患
|
||
|
||
### 5️⃣ 优惠券通知(Coupon)
|
||
|
||
| 通知类型 | 发送对象 | 触发场景 | 实现状态 | 联通状态 |
|
||
|---------|---------|---------|---------|---------|
|
||
| 优惠券领取成功 | 用户 | 领取优惠券 | ✅ 已实现 | ❌ 未调用 |
|
||
| 优惠券即将到期 | 用户 | 优惠券3天后到期 | ✅ 已实现 | ❌ 未调用 |
|
||
| 优惠券已过期 | 用户 | 优惠券过期 | ✅ 已实现 | ❌ 未调用 |
|
||
| 新优惠券上架 | 用户 | 新优惠券上架 | ✅ 已实现 | ❌ 未调用 |
|
||
|
||
**陪伴员端缺失的优惠券通知:**
|
||
- ❌ 所有优惠券通知都未在业务代码中调用
|
||
|
||
### 6️⃣ 系统通知(System)
|
||
|
||
| 通知类型 | 发送对象 | 触发场景 | 实现状态 | 联通状态 |
|
||
|---------|---------|---------|---------|---------|
|
||
| 系统公告 | 所有用户 | 发布系统公告 | ✅ 已实现 | ❌ 未调用 |
|
||
| 账户余额变动 | 用户 | 余额增加/减少 | ✅ 已实现 | ❌ 未调用 |
|
||
| 积分变动 | 用户 | 积分增加/减少 | ✅ 已实现 | ❌ 未调用 |
|
||
| 提现审核结果 | 陪伴员 | 提现审核通过/拒绝 | ✅ 已实现 | ❌ 未调用 |
|
||
|
||
**陪伴员端缺失的系统通知:**
|
||
- ❌ **提现审核结果通知**:陪伴员提现审核后应该收到通知
|
||
- ❌ **工资发放通知**:工资发放后应该收到通知
|
||
- ❌ **系统公告通知**:重要系统公告应该推送给陪伴员
|
||
|
||
## 🔄 消息流转分析
|
||
|
||
### 当前消息流转路径
|
||
|
||
```
|
||
1. 订单流程:
|
||
家长创建订单 → 家长收到"订单创建"通知
|
||
管理师派单 → 家长收到"订单派单"通知 ❌ 陪伴员未收到通知
|
||
陪伴员接单 → 家长收到"陪伴员接单"通知 ❌ 陪伴员未收到确认通知
|
||
陪伴员签到 → 家长收到"服务开始"通知
|
||
陪伴员签退 → 家长收到"服务结束"通知
|
||
|
||
2. 反馈流程:
|
||
陪伴员提交反馈 → 家长收到"收到新反馈"通知
|
||
管理师审核反馈 → ❌ 陪伴员未收到审核结果通知
|
||
家长提出疑问 → 管理师收到"家长提出疑问"通知 ❌ 陪伴员未收到通知
|
||
管理师回复疑问 → 家长收到"问题已解决"通知 ❌ 陪伴员未收到通知
|
||
|
||
3. 提醒流程:
|
||
管理师发送提醒 → 所有陪伴员收到提醒 ⚠️ 但可能发送给错误的用户
|
||
```
|
||
|
||
### 缺失的消息流转
|
||
|
||
```
|
||
❌ 陪伴员端缺失的消息流转:
|
||
|
||
1. 订单相关:
|
||
- 新订单可接 → 陪伴员应该收到通知
|
||
- 订单被派单 → 陪伴员应该收到通知
|
||
- 订单即将开始 → 陪伴员应该收到提醒
|
||
|
||
2. 反馈相关:
|
||
- 反馈需修改 → 陪伴员应该收到通知
|
||
- 反馈审核通过 → 陪伴员应该收到通知
|
||
- 家长提出疑问 → 陪伴员应该收到通知
|
||
- 管理师回复 → 陪伴员应该收到通知
|
||
- 每日反馈提醒 → 陪伴员应该收到提醒
|
||
|
||
3. 财务相关:
|
||
- 提现审核结果 → 陪伴员应该收到通知
|
||
- 工资发放 → 陪伴员应该收到通知
|
||
|
||
4. 系统相关:
|
||
- 系统公告 → 陪伴员应该收到通知
|
||
- 账户变动 → 陪伴员应该收到通知
|
||
```
|
||
|
||
## 📊 数据库检查SQL
|
||
|
||
运行以下SQL检查当前消息通知的分布情况:
|
||
|
||
```sql
|
||
-- 1. 查看各用户角色的消息数量
|
||
SELECT
|
||
n.user_id,
|
||
u.role,
|
||
u.nickname,
|
||
COUNT(*) as total_count,
|
||
SUM(CASE WHEN n.is_read = 0 THEN 1 ELSE 0 END) as unread_count
|
||
FROM notification n
|
||
LEFT JOIN user u ON n.user_id = u.id
|
||
WHERE n.deleted = 0
|
||
GROUP BY n.user_id, u.role, u.nickname
|
||
ORDER BY total_count DESC;
|
||
|
||
-- 2. 查看各类型消息的数量分布
|
||
SELECT
|
||
type,
|
||
COUNT(*) as count,
|
||
SUM(CASE WHEN is_read = 0 THEN 1 ELSE 0 END) as unread_count
|
||
FROM notification
|
||
WHERE deleted = 0
|
||
GROUP BY type
|
||
ORDER BY count DESC;
|
||
|
||
-- 3. 查看陪伴员收到的消息类型
|
||
SELECT
|
||
n.type,
|
||
COUNT(*) as count,
|
||
GROUP_CONCAT(DISTINCT n.title) as titles
|
||
FROM notification n
|
||
INNER JOIN teacher t ON n.user_id = t.user_id
|
||
WHERE n.deleted = 0
|
||
GROUP BY n.type
|
||
ORDER BY count DESC;
|
||
|
||
-- 4. 查看最近7天的消息创建情况
|
||
SELECT
|
||
DATE(create_time) as date,
|
||
type,
|
||
COUNT(*) as count
|
||
FROM notification
|
||
WHERE deleted = 0
|
||
AND create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
||
GROUP BY DATE(create_time), type
|
||
ORDER BY date DESC, count DESC;
|
||
|
||
-- 5. 检查是否有陪伴员没有收到任何消息
|
||
SELECT
|
||
t.id as teacher_id,
|
||
t.user_id,
|
||
t.name,
|
||
t.real_name,
|
||
COUNT(n.id) as notification_count
|
||
FROM teacher t
|
||
LEFT JOIN notification n ON t.user_id = n.user_id AND n.deleted = 0
|
||
WHERE t.audit_status = 1
|
||
GROUP BY t.id, t.user_id, t.name, t.real_name
|
||
HAVING notification_count = 0;
|
||
```
|
||
|
||
## 🎯 需要补充的功能
|
||
|
||
### 优先级1:高优先级(影响核心业务流程)
|
||
|
||
1. **订单派单通知给陪伴员**
|
||
- 场景:管理师将订单分配给陪伴员时
|
||
- 接收者:被分配的陪伴员
|
||
- 内容:您有新的订单被分配,订单号XXX
|
||
|
||
2. **反馈需修改通知**
|
||
- 场景:管理师要求陪伴员修改反馈时
|
||
- 接收者:陪伴员
|
||
- 内容:您提交的XX日期反馈需要修改,请查看审核意见
|
||
|
||
3. **家长提出疑问通知给陪伴员**
|
||
- 场景:家长对反馈提出疑问时
|
||
- 接收者:陪伴员 + 管理师
|
||
- 内容:家长对您的XX日期反馈提出疑问
|
||
|
||
### 优先级2:中优先级(提升用户体验)
|
||
|
||
4. **服务即将开始提醒**
|
||
- 场景:服务时间前1小时
|
||
- 接收者:陪伴员 + 家长
|
||
- 内容:您的服务将在1小时后开始,请做好准备
|
||
|
||
5. **每日反馈提交提醒**
|
||
- 场景:每天服务结束后
|
||
- 接收者:陪伴员
|
||
- 内容:请及时提交今日的服务反馈
|
||
|
||
6. **提现审核结果通知**
|
||
- 场景:提现审核通过/拒绝
|
||
- 接收者:陪伴员
|
||
- 内容:您的提现申请已审核通过/拒绝
|
||
|
||
### 优先级3:低优先级(锦上添花)
|
||
|
||
7. **工资发放通知**
|
||
- 场景:工资发放成功
|
||
- 接收者:陪伴员
|
||
- 内容:您的XX月工资已发放,金额XXX元
|
||
|
||
8. **系统公告推送**
|
||
- 场景:发布重要系统公告
|
||
- 接收者:所有用户
|
||
- 内容:系统公告内容
|
||
|
||
9. **新订单可接提醒**
|
||
- 场景:有新订单发布
|
||
- 接收者:符合条件的陪伴员
|
||
- 内容:有新的订单可接,请及时查看
|
||
|
||
## ⚠️ 当前存在的问题
|
||
|
||
### 问题1:消息通知接口权限问题(已修复)
|
||
|
||
**问题:** `/api/notification/**` 被排除在JWT拦截器之外
|
||
**影响:** 所有用户看到相同的消息列表
|
||
**状态:** ✅ 已修复
|
||
|
||
### 问题2:提醒管理userId获取问题(待修复)
|
||
|
||
**问题:** `ManagerReminderController.sendReminder()` 中获取userId的逻辑有问题
|
||
**代码位置:** `peidu/backend/src/main/java/com/peidu/controller/ManagerReminderController.java:203-210`
|
||
**问题代码:**
|
||
```java
|
||
for (Teacher teacher : teachers) {
|
||
if (teacher.getUserId() != null) {
|
||
userIds.add(teacher.getUserId());
|
||
} else if (teacher.getId() != null) {
|
||
userIds.add(teacher.getId()); // ⚠️ 可能发送给错误的用户
|
||
}
|
||
}
|
||
```
|
||
**影响:** 当teacher.userId为null时,使用teacher.id作为userId,可能导致消息发送给错误的用户
|
||
**状态:** ⚠️ 待修复
|
||
|
||
### 问题3:反馈流程通知未调用(待补充)
|
||
|
||
**问题:** 虽然定义了反馈相关的通知方法,但在业务代码中未调用
|
||
**影响:** 陪伴员和家长无法及时收到反馈相关的通知
|
||
**需要补充的调用位置:**
|
||
- `GrowthRecordServiceImpl` - 反馈提交、审核、修改时
|
||
- `ManagerFeedbackController` - 管理师回复反馈时
|
||
**状态:** ❌ 待补充
|
||
|
||
### 问题4:提现审核通知未调用(待补充)
|
||
|
||
**问题:** 定义了提现审核通知方法,但未在提现审核流程中调用
|
||
**影响:** 陪伴员无法及时知道提现审核结果
|
||
**需要补充的调用位置:**
|
||
- `WithdrawController` 或 `WithdrawService` - 提现审核通过/拒绝时
|
||
**状态:** ❌ 待补充
|
||
|
||
## 📝 建议的修复顺序
|
||
|
||
1. **第一步:修复权限问题**(已完成)
|
||
- ✅ 移除notification接口的JWT拦截器排除
|
||
- ✅ 修改getCurrentUserId()抛出异常
|
||
|
||
2. **第二步:修复提醒管理userId问题**
|
||
- 修改`ManagerReminderController.sendReminder()`的userId获取逻辑
|
||
- 添加日志记录
|
||
|
||
3. **第三步:补充反馈流程通知**
|
||
- 在反馈提交时调用通知方法
|
||
- 在反馈审核时调用通知方法
|
||
- 在家长提出疑问时调用通知方法
|
||
- 在管理师回复时调用通知方法
|
||
|
||
4. **第四步:补充提现审核通知**
|
||
- 在提现审核通过/拒绝时调用通知方法
|
||
|
||
5. **第五步:添加定时提醒**
|
||
- 服务即将开始提醒(定时任务)
|
||
- 每日反馈提交提醒(定时任务)
|
||
|
||
## 🔍 测试验证方案
|
||
|
||
### 测试1:验证消息按用户隔离
|
||
|
||
1. 使用陪伴员A登录,查看消息列表
|
||
2. 使用陪伴员B登录,查看消息列表
|
||
3. 确认两个陪伴员看到的消息不同
|
||
|
||
### 测试2:验证反馈流程通知
|
||
|
||
1. 陪伴员提交反馈 → 家长应该收到通知
|
||
2. 管理师审核反馈 → 陪伴员应该收到通知
|
||
3. 家长提出疑问 → 陪伴员和管理师应该收到通知
|
||
4. 管理师回复疑问 → 家长和陪伴员应该收到通知
|
||
|
||
### 测试3:验证提醒管理
|
||
|
||
1. 管理师发送提醒 → 所有陪伴员应该收到通知
|
||
2. 检查数据库确认userId正确
|
||
|
||
---
|
||
|
||
**检查完成时间:** 2026-01-26
|
||
|
||
**检查人员:** Kiro AI
|
||
|
||
**下一步行动:** 等待用户确认修复范围和优先级
|