实现了完整的系统消息推送功能,包括在任务创建、任务分配用户、任务状态变更时自动推送消息给相关用户。
文件位置: sql/sys_message.sql
创建了 sys_message 表,包含以下字段:
- message_id: 消息ID(主键)
- message_type: 消息类型(CREATE-创建成功, PUSH-任务推送, STATUS-状态变更, ASSIGN-分配任务)
- message_title: 消息标题
- message_content: 消息内容
- task_id: 关联任务ID
- task_code: 任务编号
- receiver_id: 接收人ID
- receiver_name: 接收人姓名
- sender_id: 发送人ID
- sender_name: 发送人姓名
- is_read: 是否已读(0-未读, 1-已读)
- read_time: 读取时间
- create_time: 创建时间
- update_time: 更新时间
- del_flag: 删除标志
文件位置: ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMessage.java
文件位置:
- ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMessageMapper.java
- ruoyi-system/src/main/resources/mapper/system/SysMessageMapper.xml
提供的方法:
- selectSysMessageList: 查询消息列表
- selectSysMessageListByReceiverId: 查询用户消息列表
- countUnreadMessageByReceiverId: 查询未读消息数量
- insertSysMessage: 新增消息
- updateSysMessage: 修改消息
- deleteSysMessageByMessageIds: 批量删除消息
- markMessageAsRead: 标记消息为已读
- markAllMessagesAsRead: 标记所有消息为已读
文件位置:
- ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMessageService.java
- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMessageServiceImpl.java
提供的业务方法:
- 基础CRUD方法
- pushTaskCreateMessage: 推送任务创建成功消息
- pushTaskAssignMessage: 推送任务分配消息
- pushTaskStatusChangeMessage: 推送任务状态变更消息
文件位置: ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMessageController.java
提供的API接口:
- GET /system/message/list: 查询消息列表
- GET /system/message/my: 查询当前用户消息列表
- GET /system/message/unread/count: 查询未读消息数量
- GET /system/message/{messageId}: 获取消息详情
- POST /system/message: 新增消息
- PUT /system/message: 修改消息
- DELETE /system/message/{messageIds}: 删除消息
- PUT /system/message/read/{messageId}: 标记消息为已读
- PUT /system/message/read/all: 标记所有消息为已读
文件位置: ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
在以下场景自动推送消息:
insertSysTask 方法执行成功后insertSysTask 方法保存执行人员后、assignTask 方法执行后changeTaskStatusWithLocation 方法执行成功后文件位置: app/api/message.js
提供的方法:
- getMyMessages: 获取当前用户消息列表
- listMessage: 查询消息列表
- getMessage: 获取消息详情
- getUnreadCount: 获取未读消息数量
- addMessage: 新增消息
- updateMessage: 修改消息
- delMessage: 删除消息
- markAsRead: 标记消息为已读
- markAllAsRead: 标记所有消息为已读
文件位置: app/pages/message/index.vue
功能特性:
- 自动加载当前用户的消息列表
- 未读消息显示红点标记
- 未读消息排在前面
- 支持下拉刷新
- 点击消息自动标记为已读并跳转到任务详情
- 消息类型显示(创建成功、任务推送、状态变更、任务分配)
文件位置: app/pages/index.vue
功能特性:
- 消息中心入口
- 显示未读消息数量徽章
- 页面显示时自动刷新未读消息数量
| 消息类型 | 代码 | 触发场景 | 接收人 | 消息内容 |
|---|---|---|---|---|
| 创建成功 | CREATE | 任务创建成功 | 创建人 | 您创建的任务已成功提交 |
| 任务推送 | PUSH | 任务分配给执行人 | 执行人 | 您有新的任务,请及时处理 |
| 任务分配 | ASSIGN | 重新分配任务 | 新执行人 | 您有新的任务,请及时处理 |
| 状态变更 | STATUS | 任务状态变更 | 执行人+创建人 | 任务状态变更为:XXX |
执行数据库脚本bash mysql -u root -p your_database < sql/sys_message.sql
重新编译后端bash cd ruoyi-admin mvn clean package
重启后端服务
```bash
bin\run.bat
sh bin/run.sh
```
@Autowired(required = false) 确保服务可选可以集成WebSocket实现实时消息推送,而不需要用户刷新页面:
@Service
public class WebSocketMessageService {
@Autowired
private SimpMessagingTemplate messagingTemplate;
public void pushMessage(Long userId, SysMessage message) {
messagingTemplate.convertAndSendToUser(
userId.toString(),
"/queue/messages",
message
);
}
}
可以集成第三方推送服务(如极光推送、个推等)实现APP通知:
public void sendPushNotification(Long userId, String title, String content) {
// 调用推送服务SDK
JPushClient.push(userId, title, content);
}
可以配置消息模板,支持变量替换:
public class MessageTemplate {
private String type;
private String titleTemplate;
private String contentTemplate;
public String render(Map<String, Object> params) {
// 模板渲染逻辑
}
}
可以增加消息分组功能:
可以记录消息的详细阅读记录:
CREATE TABLE sys_message_read_log (
log_id BIGINT PRIMARY KEY,
message_id BIGINT,
user_id BIGINT,
read_time DATETIME,
device_type VARCHAR(20)
);
本次实现了完整的系统消息推送功能,涵盖了任务创建、分配、状态变更三个核心场景。后端采用Service层统一管理消息推送逻辑,前端提供友好的消息中心界面。整个系统设计合理,易于扩展和维护。