Lius
2024-03-07 c51323e6fcc84f08bc8c01e3dd6c916427f83f4e
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
@@ -1,18 +1,25 @@
package org.jeecg.modules.system.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.CommonSendStatus;
import org.jeecg.common.constant.WebsocketConst;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.message.websocket.WebSocket;
import org.jeecg.modules.system.entity.SysAnnouncement;
import org.jeecg.modules.system.entity.SysAnnouncementSend;
import org.jeecg.modules.system.mapper.SysAnnouncementMapper;
import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.util.XssUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,6 +44,15 @@
   
   @Resource
   private SysAnnouncementSendMapper sysAnnouncementSendMapper;
   @Resource
   private ISysDictService sysDictService;
   @Resource
   private ISysUserService sysUserService;
   @Resource
   private WebSocket webSocket;
   
   @Transactional(rollbackFor = Exception.class)
   @Override
@@ -185,4 +201,62 @@
      sysAnnouncementSendMapper.updateReaded(sysUser.getId(), annoceIdList);
   }
   @Override
   public void jobSendMessage(String jobDescription, String exceptionDetail) {
      SysAnnouncement sysAnnouncement = new SysAnnouncement();
      String title = XssUtils.scriptXss(jobDescription + "失败!");
      // 标题
      sysAnnouncement.setTitile(title);
      // 消息类型
      sysAnnouncement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
      // 优先级
      sysAnnouncement.setPriority(CommonConstant.PRIORITY_H);
      // 通告对象类型
      sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);
      // 删除状态
      sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
      // 发布状态
      sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);
      // 发布时间
      sysAnnouncement.setSendTime(new Date());
      // 发布人
      sysAnnouncement.setSender("admin");
      // 消息内容
      sysAnnouncement.setMsgContent(exceptionDetail);
      // 获取用户
      // step1. 从字典数据中查询需要发送的角色编码
      String roleCode = sysDictService.queryDictTextByKey(CommonConstant.JOB_SEND_MSG, CommonConstant.STATUS_NORMAL.toString());
      // step2. 根据角色编码查询用户id集合
      List<String> userIds = sysUserService.getUserByRoleCode(roleCode);
      if (userIds != null && !userIds.isEmpty()) {
         sysAnnouncement.setUserIds(String.join(",", userIds));
         sysAnnouncementMapper.insert(sysAnnouncement);
         String anntId = sysAnnouncement.getId();
         Date refDate = new Date();
         for (String userId : userIds) {
            SysAnnouncementSend announcementSend = new SysAnnouncementSend();
            announcementSend.setAnntId(anntId);
            announcementSend.setUserId(userId);
            announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
            announcementSend.setReadTime(refDate);
            sysAnnouncementSendMapper.insert(announcementSend);
         }
         // 发送消息
         JSONObject obj = new JSONObject();
         obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
         obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId());
         obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile());
         webSocket.sendMessage(sysAnnouncement.getUserIds().split(","), obj.toJSONString());
      }
   }
   /**
    * 根据消息内容查询消息通知
    */
   @Override
   public SysAnnouncement findLastMessage(String messageContent) {
      return sysAnnouncementSendMapper.findLastMessage(messageContent);
   }
}