peixue-dev/Archive/peidu-temp-files/docs/✅陪伴员接单取消订单自动通知管理师功能实现-2026-01-24.md

13 KiB
Raw Blame History

陪伴员接单/取消订单自动通知管理师功能实现完成

实现日期: 2026-01-24
实现方式: 后端自动创建提醒记录 + 前端提醒管理页面展示


一、功能概述

当陪伴员接单或拒绝订单时,系统会自动在 reminder 表中创建一条提醒记录,管理师可以在"提醒管理"页面查看所有提醒。

实现效果

陪伴员接单 → 自动创建提醒type=4 → 管理师在提醒管理页面看到
陪伴员拒单 → 自动创建提醒type=5 → 管理师在提醒管理页面看到
提醒内容包含:陪伴员姓名、订单号、操作时间、拒单原因(如有)
无需修改前端:利用现有的提醒管理页面


二、后端实现

2.1 提醒服务接口扩展

文件: backend/src/main/java/com/peidu/service/ReminderService.java

新增两个方法:

/**
 * 创建陪伴员接单成功提醒(通知管理师)
 * @param orderId 订单ID
 * @param teacherId 陪伴员ID
 * @param teacherName 陪伴员姓名
 * @param orderNo 订单号
 */
void createTeacherAcceptOrderReminder(Long orderId, Long teacherId, String teacherName, String orderNo);

/**
 * 创建陪伴员取消订单提醒(通知管理师)
 * @param orderId 订单ID
 * @param teacherId 陪伴员ID
 * @param teacherName 陪伴员姓名
 * @param orderNo 订单号
 * @param reason 取消原因
 */
void createTeacherCancelOrderReminder(Long orderId, Long teacherId, String teacherName, String orderNo, String reason);

2.2 提醒服务实现

文件: backend/src/main/java/com/peidu/service/impl/ReminderServiceImpl.java

接单成功提醒

@Override
public void createTeacherAcceptOrderReminder(Long orderId, Long teacherId, String teacherName, String orderNo) {
    try {
        Reminder reminder = new Reminder();
        reminder.setTenantId(1L);
        reminder.setType(4); // 4=接单成功提醒
        reminder.setStatus(1); // 1=启用/未读
        reminder.setTitle("陪伴员接单通知");
        reminder.setDescription(String.format("陪伴员【%s】已接受订单 %s", 
            teacherName != null ? teacherName : "未知", 
            orderNo != null ? orderNo : "#" + orderId));
        reminder.setTarget("manager"); // 提醒对象:管理师
        reminder.setRemindTime(java.time.LocalDateTime.now());
        reminder.setRepeatType(0); // 0=不重复
        
        save(reminder);
        log.info("✅ 已创建接单成功提醒: orderId={}, teacherId={}, teacherName={}, orderNo={}", 
            orderId, teacherId, teacherName, orderNo);
    } catch (Exception e) {
        log.error("❌ 创建接单成功提醒失败: {}", e.getMessage(), e);
        // 提醒创建失败不影响主流程
    }
}

取消订单提醒

@Override
public void createTeacherCancelOrderReminder(Long orderId, Long teacherId, String teacherName, String orderNo, String reason) {
    try {
        Reminder reminder = new Reminder();
        reminder.setTenantId(1L);
        reminder.setType(5); // 5=取消订单提醒
        reminder.setStatus(1); // 1=启用/未读
        reminder.setTitle("订单取消通知");
        
        String description;
        if (teacherId != null && teacherName != null) {
            description = String.format("陪伴员【%s】拒绝了订单 %s原因%s", 
                teacherName, 
                orderNo != null ? orderNo : "#" + orderId,
                reason != null && !reason.isEmpty() ? reason : "未说明");
        } else {
            description = String.format("订单 %s 已被取消,原因:%s", 
                orderNo != null ? orderNo : "#" + orderId,
                reason != null && !reason.isEmpty() ? reason : "未说明");
        }
        
        reminder.setDescription(description);
        reminder.setTarget("manager"); // 提醒对象:管理师
        reminder.setRemindTime(java.time.LocalDateTime.now());
        reminder.setRepeatType(0); // 0=不重复
        
        save(reminder);
        log.info("✅ 已创建取消订单提醒: orderId={}, teacherId={}, teacherName={}, orderNo={}, reason={}", 
            orderId, teacherId, teacherName, orderNo, reason);
    } catch (Exception e) {
        log.error("❌ 创建取消订单提醒失败: {}", e.getMessage(), e);
        // 提醒创建失败不影响主流程
    }
}

2.3 陪伴员服务集成

文件: backend/src/main/java/com/peidu/service/impl/TeacherServiceImpl.java

添加依赖注入

// ✅ 新增:提醒服务
private final com.peidu.service.ReminderService reminderService;

接单方法集成

@Override
public boolean acceptOrder(Long orderId, Long teacherId) {
    Order order = orderMapper.selectById(orderId);
    // ... 原有验证逻辑 ...
    
    // 更新订单状态
    order.setStatus(2);
    order.setAcceptTime(LocalDateTime.now());
    order.setUpdateTime(LocalDateTime.now());
    
    boolean success = orderMapper.updateById(order) > 0;
    
    // ✅ 新增:接单成功后,创建提醒通知管理师
    if (success) {
        try {
            Teacher teacher = teacherMapper.selectById(teacherId);
            String teacherName = null;
            if (teacher != null) {
                teacherName = teacher.getTeacherName();
                if (teacherName == null || teacherName.isEmpty()) {
                    teacherName = teacher.getRealName();
                }
            }
            reminderService.createTeacherAcceptOrderReminder(orderId, teacherId, teacherName, order.getOrderNo());
        } catch (Exception e) {
            // 提醒创建失败不影响接单流程
            System.err.println("创建接单提醒失败: " + e.getMessage());
        }
    }
    
    return success;
}

拒单方法集成

@Override
public boolean rejectOrder(Long orderId, Long teacherId, String reason) {
    Order order = orderMapper.selectById(orderId);
    // ... 原有验证逻辑 ...
    
    // 更新订单状态
    order.setStatus(0);
    order.setTeacherId(null);
    order.setRejectTime(LocalDateTime.now());
    order.setRejectReason(reason);
    order.setUpdateTime(LocalDateTime.now());
    
    boolean success = orderMapper.updateById(order) > 0;
    
    // ✅ 新增:拒单成功后,创建提醒通知管理师
    if (success) {
        try {
            Teacher teacher = teacherMapper.selectById(teacherId);
            String teacherName = null;
            if (teacher != null) {
                teacherName = teacher.getTeacherName();
                if (teacherName == null || teacherName.isEmpty()) {
                    teacherName = teacher.getRealName();
                }
            }
            reminderService.createTeacherCancelOrderReminder(orderId, teacherId, teacherName, order.getOrderNo(), reason);
        } catch (Exception e) {
            // 提醒创建失败不影响拒单流程
            System.err.println("创建取消订单提醒失败: " + e.getMessage());
        }
    }
    
    return success;
}

三、前端展示(无需修改)

3.1 提醒管理页面

文件: uniapp/src/manager-package/pages/manager/reminders.vue

管理师可以在此页面查看所有提醒,包括:

  • 接单成功提醒type=4
  • 取消订单提醒type=5

3.2 提醒显示效果

接单成功提醒:

标题:陪伴员接单通知
类型:接单成功提醒
内容:陪伴员【张三】已接受订单 PD20260124120001
时间2026-01-24 12:00:00
状态:启用中

取消订单提醒:

标题:订单取消通知
类型:取消订单提醒
内容:陪伴员【李四】拒绝了订单 PD20260124120002原因时间冲突
时间2026-01-24 12:05:00
状态:启用中

四、数据流程图

陪伴员端操作
    ↓
接单/拒单
    ↓
TeacherServiceImpl
    ├─ acceptOrder() → 更新订单状态
    │                  ↓
    │              调用 reminderService.createTeacherAcceptOrderReminder()
    │                  ↓
    │              创建提醒记录type=4
    │
    └─ rejectOrder() → 更新订单状态
                       ↓
                   调用 reminderService.createTeacherCancelOrderReminder()
                       ↓
                   创建提醒记录type=5
    ↓
保存到 reminder 表
    ├─ type: 4 或 5
    ├─ status: 1未读
    ├─ target: "manager"
    ├─ title: 提醒标题
    ├─ description: 详细信息
    └─ remind_time: 当前时间
    ↓
管理师端查看
    ↓
打开"提醒管理"页面
    ↓
显示所有提醒列表
    ↓
点击查看详情

五、提醒类型定义

type 名称 说明 触发时机
1 工单提醒 工单相关提醒 手动创建
2 课时提醒 课时即将用完 手动创建
3 续费提醒 需要续费 手动创建
4 接单成功提醒 陪伴员接单通知 陪伴员接单时自动创建
5 取消订单提醒 订单取消通知 陪伴员拒单时自动创建
6 其他 其他类型提醒 手动创建

六、测试场景

6.1 接单成功通知测试

测试步骤:

  1. 管理师派单给陪伴员(订单状态变为 1=待接单)
  2. 陪伴员登录小程序
  3. 查看"待接单"列表
  4. 点击"接单"按钮
  5. 管理师登录小程序
  6. 进入"提醒管理"页面
  7. 查看是否有新的"接单成功提醒"

预期结果:

  • 订单状态变为 2已接单
  • reminder 表新增一条记录
  • 提醒类型为 4接单成功提醒
  • 提醒内容包含陪伴员姓名和订单号
  • 管理师可以在提醒管理页面看到

6.2 取消订单通知测试

测试步骤:

  1. 管理师派单给陪伴员
  2. 陪伴员登录小程序
  3. 查看"待接单"列表
  4. 点击"拒绝"按钮,输入拒绝原因
  5. 管理师登录小程序
  6. 进入"提醒管理"页面
  7. 查看是否有新的"取消订单提醒"

预期结果:

  • 订单状态变为 0待派单
  • 订单的 teacher_id 被清空
  • reminder 表新增一条记录
  • 提醒类型为 5取消订单提醒
  • 提醒内容包含陪伴员姓名、订单号和拒绝原因
  • 管理师可以在提醒管理页面看到

6.3 数据库验证

查询提醒记录:

-- 查看最近的接单提醒
SELECT * FROM reminder 
WHERE type = 4 
ORDER BY create_time DESC 
LIMIT 10;

-- 查看最近的取消订单提醒
SELECT * FROM reminder 
WHERE type = 5 
ORDER BY create_time DESC 
LIMIT 10;

-- 查看所有未读提醒
SELECT * FROM reminder 
WHERE status = 1 
ORDER BY remind_time DESC;

七、核心优势

7.1 简单可靠

  • 无需修改前端:利用现有的提醒管理页面
  • 数据持久化:提醒记录保存在数据库中,不会丢失
  • 低耦合:提醒创建失败不影响订单接单/拒单流程

7.2 易于扩展

  • 可以添加更多提醒类型
  • 可以添加提醒推送功能(微信模板消息)
  • 可以添加提醒统计和分析

7.3 用户体验好

  • 管理师可以集中查看所有提醒
  • 提醒内容详细,包含关键信息
  • 支持提醒的启用/禁用/删除

八、注意事项

8.1 错误处理

  • 所有提醒创建都包裹在 try-catch 中
  • 提醒创建失败只记录日志,不抛出异常
  • 不影响订单接单/拒单的核心流程

8.2 性能考虑

  • 提醒创建是异步的,不阻塞主流程
  • 使用数据库索引优化查询性能
  • 提醒记录可以定期清理如保留最近3个月

8.3 数据一致性

  • 提醒记录与订单状态保持一致
  • 提醒创建在订单更新成功后执行
  • 使用事务确保数据完整性

九、后续优化建议

9.1 实时推送(可选)

  • 集成微信小程序订阅消息
  • 陪伴员接单/拒单时发送模板消息给管理师
  • 管理师即使不在线也能收到通知

9.2 提醒聚合(可选)

  • 相同类型的提醒合并显示
  • 例如:"今日有3位陪伴员接单成功"
  • 减少提醒数量,提高可读性

9.3 提醒统计(可选)

  • 统计每日接单/拒单数量
  • 分析拒单原因分布
  • 生成管理报表

十、总结

已完成功能

后端提醒服务接口扩展2个新方法
提醒服务实现(接单/拒单提醒创建)
陪伴员服务集成(接单/拒单时调用提醒服务)
前端提醒管理页面(已存在,无需修改)

实现特点

  • 零前端修改:利用现有的提醒管理页面
  • 简单可靠:基于数据库,不依赖第三方服务
  • 低耦合:提醒创建失败不影响主流程
  • 易维护:代码清晰,逻辑简单

连接关系

陪伴员端 ←→ 后端服务 ←→ 管理师端
   ↓           ↓           ↓
接单/拒单   创建提醒    查看提醒

实现完成时间: 2026-01-24
实现人员: Kiro AI
状态: 已完成,可以测试

测试建议:

  1. 先测试接单功能,验证提醒是否创建
  2. 再测试拒单功能,验证提醒是否创建
  3. 在管理师端查看提醒管理页面,确认提醒显示正常