编辑 | blame | 历史 | 原始文档

系统消息推送功能 - 快速开始

功能说明

实现了在任务创建、状态变更、分配用户时自动推送消息给相关人员的功能。

快速部署

1. 执行数据库脚本

# 进入项目sql目录
cd d:\project\急救转运\code\Api\RuoYi-Vue-master\sql

# 执行消息表创建脚本
mysql -u root -p your_database < sys_message.sql

或者手动执行SQL:
sql -- 在MySQL客户端中执行 source d:/project/急救转运/code/Api/RuoYi-Vue-master/sql/sys_message.sql;

2. 重启后端服务

# Windows
cd d:\project\急救转运\code\Api\RuoYi-Vue-master
bin\run.bat

# Linux
cd /path/to/RuoYi-Vue-master
sh bin/run.sh

3. 前端已自动集成,无需额外操作

快速测试

测试1:创建任务消息推送

  1. 在前端创建一个任务
  2. 进入"消息中心"页面
  3. 应该看到一条"创建成功"消息

测试2:任务分配消息推送

  1. 创建任务时选择执行人员
  2. 执行人员登录系统
  3. 进入"消息中心"页面
  4. 应该看到一条"任务推送"消息

测试3:状态变更消息推送

  1. 在首页点击任务的"出发"按钮
  2. 相关人员(执行人+创建人)进入"消息中心"
  3. 应该看到一条"状态变更"消息

消息类型

类型 场景 接收人 内容
创建成功 创建任务 创建人 您创建的任务已成功提交
任务推送 分配执行人 执行人 您有新的任务,请及时处理
状态变更 更新状态 执行人+创建人 任务状态变更为:XXX

核心文件

后端

  • sql/sys_message.sql - 数据库表
  • SysMessage.java - 实体类
  • SysMessageMapper.java - Mapper接口
  • SysMessageMapper.xml - MyBatis映射
  • ISysMessageService.java - Service接口
  • SysMessageServiceImpl.java - Service实现
  • SysMessageController.java - Controller
  • SysTaskServiceImpl.java - 任务服务(已集成消息推送)

前端

  • app/api/message.js - API接口
  • app/pages/message/index.vue - 消息中心页面
  • app/pages/index.vue - 首页(显示未读数量)

主要API

后端接口

GET  /system/message/my              - 获取当前用户消息列表
GET  /system/message/unread/count    - 获取未读消息数量
PUT  /system/message/read/{id}       - 标记消息为已读
PUT  /system/message/read/all        - 标记所有消息为已读

前端调用示例

import { getMyMessages, getUnreadCount, markAsRead } from '@/api/message'

// 获取消息列表
const messages = await getMyMessages()

// 获取未读数量
const count = await getUnreadCount()

// 标记已读
await markAsRead(messageId)

消息推送时机

1. 创建任务(insertSysTask)

// 推送创建成功消息(给创建人)
if (result > 0 && sysMessageService != null) {
    sysMessageService.pushTaskCreateMessage(task);
}

// 推送任务分配消息(给执行人)
if (result > 0 && createVO.getAssignees() != null && !createVO.getAssignees().isEmpty()) {
    List<Long> assigneeIds = createVO.getAssignees().stream()
        .map(assignee -> assignee.getUserId())
        .collect(Collectors.toList());
    sysMessageService.pushTaskAssignMessage(task, assigneeIds);
}

2. 分配任务(assignTask)

// 推送任务分配消息
if (result > 0 && sysMessageService != null) {
    List<Long> assigneeIds = new ArrayList<>();
    assigneeIds.add(assigneeId);
    sysMessageService.pushTaskAssignMessage(task, assigneeIds);
}

3. 状态变更(changeTaskStatusWithLocation)

// 推送任务状态变更消息
if (result > 0 && sysMessageService != null) {
    sysMessageService.pushTaskStatusChangeMessage(
        oldTask, 
        oldTaskStatus.getCode(), 
        newStatus.getCode()
    );
}

常见问题

Q1: 消息没有推送怎么办?

A: 检查以下几点:
1. 数据库表是否创建成功
2. 后端服务是否重启
3. 查看后端日志是否有异常
4. 确认 ISysMessageService 是否注入成功

Q2: 消息推送失败会影响主业务吗?

A: 不会。消息推送使用 @Autowired(required = false),且所有异常都被捕获,不会影响任务的创建、分配和状态变更。

Q3: 如何查看消息推送日志?

A: 查看后端日志,搜索关键字:
- "推送任务创建成功消息"
- "推送任务分配消息"
- "推送任务状态变更消息"

Q4: 未读消息数量不更新怎么办?

A:
1. 确认 app/pages/index.vue 已更新
2. 确认 app/api/message.js 已创建
3. 重新编译前端:npm run build:h5

扩展建议

  1. WebSocket实时推送:集成WebSocket实现消息实时推送
  2. 推送通知:集成极光推送等第三方推送服务
  3. 消息模板:配置消息模板,支持变量替换
  4. 消息分组:增加消息分组(系统通知、任务提醒等)

详细文档

请查看完整文档:prd/系统消息推送功能实现总结.md


更新时间: 2025-10-25
版本: v1.0