Compare commits

..

2 Commits

Author SHA1 Message Date
GoCo
7dda8cae1c Merge branch 'dev2' of http://110.42.96.64:19890/GoCo/OL-LearnPlatform-Backend into dev2
merge
2025-09-17 09:55:23 +08:00
GoCo
8b45b63bbe feat: 🎸 通知中心接口 2025-09-17 04:33:04 +08:00
2 changed files with 183 additions and 1 deletions

View File

@ -0,0 +1,116 @@
package org.jeecg.modules.aiol.controller;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.constant.enums.MessageTypeEnum;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.jeecg.common.api.vo.Result;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.springframework.web.bind.annotation.RequestParam;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.system.model.AnnouncementSendModel;
import org.jeecg.modules.system.service.ISysAnnouncementSendService;
import org.apache.commons.lang3.StringUtils;
@RestController
@RequestMapping("/aiol/message")
public class AiolMessageController {
@Autowired
private ISysBaseAPI sysBaseApi;
@Autowired
private ISysAnnouncementSendService sysAnnouncementSendService;
@GetMapping("/test")
public void test() {
// //推送消息
// MessageDTO messageDTO = new MessageDTO();
// messageDTO.setToAll(false);
// messageDTO.setToUser("202121200873");
// messageDTO.setTitle("评论和@");
// messageDTO.setCategory("3");
// //推送消息类型
// messageDTO.setType(MessageTypeEnum.XT.getType());
// messageDTO.setIsMarkdown(false);
// messageDTO.setFromUser("202121200874");
// messageDTO.setContent("{\"sender\":{\"id\":\"1966804797404344321\",\"username\":\"小明\"},\"comment\":{\"id\":456,\"content\":\"老师讲得真棒![user:789:李四] 快来看这个课程!\"},\"entity\":{\"type\":\"course\",\"id\":\"1954463468539371522\",\"title\":\"python语言基础与应用\"},\"actionTime\":\"2025-09-16T15:30:00Z\"}");
// sysBaseApi.sendTemplateMessage(messageDTO);
//推送消息
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToAll(false);
messageDTO.setToUser("202121200873");
messageDTO.setTitle("赞和收藏");
messageDTO.setCategory("4");
//推送消息类型
messageDTO.setType(MessageTypeEnum.XT.getType());
messageDTO.setIsMarkdown(false);
messageDTO.setFromUser("202121200874");
messageDTO.setContent("{\"sender\":{\"id\":\"202121200874\",\"username\":\"202121200874\"},\"entity\":{\"type\":\"course\",\"id\":\"1954463468539371522\",\"title\":\"python语言基础与应用\"},\"action\":\"like\",\"actionTime\":\"2025-09-16T15:35:00Z\"}");
sysBaseApi.sendTemplateMessage(messageDTO);
}
@GetMapping("/comments_at")
public Result<IPage<AnnouncementSendModel>> queryCommentsAndAt(
AnnouncementSendModel model,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
try {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = sysUser.getId();
model.setUserId(userId);
model.setPageNo((pageNo - 1) * pageSize);
model.setPageSize(pageSize);
// 处理时间范围与SysAnnouncementSendController一致
if (StringUtils.isNotEmpty(model.getSendTimeBegin())) {
model.setSendTimeBegin(model.getSendTimeBegin() + " 00:00:00");
}
if (StringUtils.isNotEmpty(model.getSendTimeEnd())) {
model.setSendTimeEnd(model.getSendTimeEnd() + " 23:59:59");
}
// 评论和@ 消息类别 = 3
model.setMsgCategory("3");
Page<AnnouncementSendModel> page = new Page<>(pageNo, pageSize);
IPage<AnnouncementSendModel> pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model);
return Result.OK(pageList);
} catch (Exception e) {
return Result.error("查询评论/@消息失败: " + e.getMessage());
}
}
@GetMapping("/likes")
public Result<IPage<AnnouncementSendModel>> queryLikes(
AnnouncementSendModel model,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
try {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = sysUser.getId();
model.setUserId(userId);
model.setPageNo((pageNo - 1) * pageSize);
model.setPageSize(pageSize);
if (StringUtils.isNotEmpty(model.getSendTimeBegin())) {
model.setSendTimeBegin(model.getSendTimeBegin() + " 00:00:00");
}
if (StringUtils.isNotEmpty(model.getSendTimeEnd())) {
model.setSendTimeEnd(model.getSendTimeEnd() + " 23:59:59");
}
// 点赞 消息类别 = 4
model.setMsgCategory("4");
Page<AnnouncementSendModel> page = new Page<>(pageNo, pageSize);
IPage<AnnouncementSendModel> pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model);
return Result.OK(pageList);
} catch (Exception e) {
return Result.error("查询点赞消息失败: " + e.getMessage());
}
}
}

View File

@ -76,7 +76,7 @@ public class SystemSendMsgHandle implements ISendMsgHandle {
String[] arr = messageDTO.getToUser().split(","); String[] arr = messageDTO.getToUser().split(",");
for(String username: arr){ for(String username: arr){
//update-begin---author:wangshuai---date:2025-06-26---for:QQYUN-12162OA项目改造系统重消息拆分目前消息都在一起 需按分类进行拆分--- //update-begin---author:wangshuai---date:2025-06-26---for:QQYUN-12162OA项目改造系统重消息拆分目前消息都在一起 需按分类进行拆分---
doSend(title, content, fromUser, username, data, messageDTO.getNoticeType()); doSend(title, content, fromUser, username, data, messageDTO.getNoticeType(), messageDTO.getCategory());
//update-end---author:wangshuai---date:2025-06-26---for:QQYUN-12162OA项目改造系统重消息拆分目前消息都在一起 需按分类进行拆分--- //update-end---author:wangshuai---date:2025-06-26---for:QQYUN-12162OA项目改造系统重消息拆分目前消息都在一起 需按分类进行拆分---
} }
} }
@ -145,4 +145,70 @@ public class SystemSendMsgHandle implements ISendMsgHandle {
} }
} }
} }
// 扩展msgCategory
private void doSend(String title, String msgContent, String fromUser, String toUser, Map<String, Object> data, String noticeType, String msgCategory){
SysAnnouncement announcement = new SysAnnouncement();
if(data!=null){
//摘要信息
Object msgAbstract = data.get(CommonConstant.NOTICE_MSG_SUMMARY);
if(msgAbstract!=null){
announcement.setMsgAbstract(msgAbstract.toString());
}
// 任务节点ID
Object taskId = data.get(CommonConstant.NOTICE_MSG_BUS_ID);
if(taskId!=null){
announcement.setBusId(taskId.toString());
announcement.setBusType(Vue3MessageHrefEnum.BPM_TASK.getBusType());
noticeType = NoticeTypeEnum.NOTICE_TYPE_FLOW.getValue();
}
// 流程内消息节点 发消息会传一个busType
Object busType = data.get(CommonConstant.NOTICE_MSG_BUS_TYPE);
if(busType!=null){
announcement.setBusType(busType.toString());
noticeType = NoticeTypeEnum.NOTICE_TYPE_FLOW.getValue();
}
}
announcement.setTitile(title);
announcement.setMsgContent(msgContent);
announcement.setSender(fromUser);
announcement.setPriority(CommonConstant.PRIORITY_M);
announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
announcement.setSendStatus(CommonConstant.HAS_SEND);
announcement.setSendTime(new Date());
//系统消息
announcement.setMsgCategory(msgCategory);
announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
if(oConvertUtils.isEmpty(noticeType)){
noticeType = NoticeTypeEnum.NOTICE_TYPE_SYSTEM.getValue();
}
announcement.setNoticeType(noticeType);
announcement.setIzTop(CommonConstant.IZ_TOP_0);
sysAnnouncementMapper.insert(announcement);
// 2.插入用户通告阅读标记表记录
String userId = toUser;
String[] userIds = userId.split(",");
String anntId = announcement.getId();
for(int i=0;i<userIds.length;i++) {
if(oConvertUtils.isNotEmpty(userIds[i])) {
SysUser sysUser = userMapper.getUserByName(userIds[i]);
if(sysUser==null) {
continue;
}
SysAnnouncementSend announcementSend = new SysAnnouncementSend();
announcementSend.setAnntId(anntId);
announcementSend.setUserId(sysUser.getId());
announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
sysAnnouncementSendMapper.insert(announcementSend);
JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
obj.put(WebsocketConst.MSG_ID, announcement.getId());
obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
obj.put(CommonConstant.NOTICE_TYPE,noticeType);
webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
}
}
}
} }