package org.jeecg.modules.message.handle.impl; import com.alibaba.fastjson.JSONObject; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.message.enums.Vue3MessageHrefEnum; import org.jeecg.modules.message.handle.ISendMsgHandle; 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.entity.SysUser; import org.jeecg.modules.system.mapper.SysAnnouncementMapper; import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper; import org.jeecg.modules.system.mapper.SysUserMapper; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.Map; /** * @Description: 发送系统消息 * @Author: wangshuai * @Date: 2022年3月22日 18:48:20 */ @Component("systemSendMsgHandle") public class SystemSendMsgHandle implements ISendMsgHandle { public static final String FROM_USER="system"; @Resource private SysAnnouncementMapper sysAnnouncementMapper; @Resource private SysUserMapper userMapper; @Resource private SysAnnouncementSendMapper sysAnnouncementSendMapper; @Resource private WebSocket webSocket; /** * 该方法会发送3种消息:系统消息、企业微信 钉钉 * @param esReceiver 发送人 * @param esTitle 标题 * @param esContent 内容 */ @Override public void sendMsg(String esReceiver, String esTitle, String esContent) { if(oConvertUtils.isEmpty(esReceiver)){ throw new JeecgBootException("被发送人不能为空"); } ISysBaseAPI sysBaseApi = SpringContextUtils.getBean(ISysBaseAPI.class); MessageDTO messageDTO = new MessageDTO(FROM_USER,esReceiver,esTitle,esContent); sysBaseApi.sendSysAnnouncement(messageDTO); } /** * 仅发送系统消息 * @param messageDTO */ @Override public void sendMessage(MessageDTO messageDTO) { //原方法不支持 sysBaseApi.sendSysAnnouncement(messageDTO); 有企业微信消息逻辑, String title = messageDTO.getTitle(); String content = messageDTO.getContent(); String fromUser = messageDTO.getFromUser(); Map data = messageDTO.getData(); String[] arr = messageDTO.getToUser().split(","); for(String username: arr){ doSend(title, content, fromUser, username, data); } } private void doSend(String title, String msgContent, String fromUser, String toUser, Map data){ 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()); } } 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("2"); announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); sysAnnouncementMapper.insert(announcement); // 2.插入用户通告阅读标记表记录 String userId = toUser; String[] userIds = userId.split(","); String anntId = announcement.getId(); for(int i=0;i