From 8b45b63bbea74add5c3ddb23753d1db62af13a18 Mon Sep 17 00:00:00 2001 From: GoCo Date: Wed, 17 Sep 2025 04:33:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AiolMessageController.java | 116 ++++++++++++++++++ .../handle/impl/SystemSendMsgHandle.java | 68 +++++++++- 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java new file mode 100644 index 00000000..c5ccb4a5 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java @@ -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> 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 page = new Page<>(pageNo, pageSize); + IPage pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model); + return Result.OK(pageList); + } catch (Exception e) { + return Result.error("查询评论/@消息失败: " + e.getMessage()); + } + } + + @GetMapping("/likes") + public Result> 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 page = new Page<>(pageNo, pageSize); + IPage pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model); + return Result.OK(pageList); + } catch (Exception e) { + return Result.error("查询点赞消息失败: " + e.getMessage()); + } + } +} diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java index 855f28dd..05dab4b6 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java @@ -76,7 +76,7 @@ public class SystemSendMsgHandle implements ISendMsgHandle { String[] arr = messageDTO.getToUser().split(","); for(String username: arr){ //update-begin---author:wangshuai---date:2025-06-26---for:【QQYUN-12162】OA项目改造,系统重消息拆分,目前消息都在一起 需按分类进行拆分--- - 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-12162】OA项目改造,系统重消息拆分,目前消息都在一起 需按分类进行拆分--- } } @@ -145,4 +145,70 @@ public class SystemSendMsgHandle implements ISendMsgHandle { } } } + + // 扩展msgCategory + private void doSend(String title, String msgContent, String fromUser, String toUser, Map 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