/** * Copyright (c) 2019 人人开源 All rights reserved. * * https://www.renren.io * * 版权所有,侵权必究! */ package com.zt.modules.message.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.zt.common.db.query.QueryFilter; import com.zt.common.service.BaseService; import com.zt.core.context.UserContext; import com.zt.core.sys.service.ISysUserService; import com.zt.modules.message.dao.SysNoticeDao; import com.zt.modules.message.enums.NoticeReadStatus; import com.zt.modules.message.enums.NoticeStatus; import com.zt.modules.message.enums.ReceiverType; import com.zt.modules.message.model.SysNotice; import com.zt.modules.message.model.SysNoticeUser; import com.zt.modules.message.websocket.WebSocketServer; import com.zt.modules.message.websocket.data.MessageData; /** * 通知管理 * * @author hehz */ @Service public class SysNoticeService extends BaseService { @Autowired private SysNoticeUserService sysNoticeUserService; @Autowired private ISysUserService sysUserService; @Autowired private WebSocketServer webSocketServer; public List page(QueryFilter queryFilter) { return super.query(queryFilter); } /** * 获取我的通知列表 */ public List getMyNoticePage(QueryFilter queryFilter) { // 查询 List list = baseDao.getMyNoticeList(UserContext.getUserId()); return queryFilter.getPageList(list); } @Transactional(rollbackFor = Exception.class) public void insert(SysNotice entity) { // 更新发送者信息 if (entity.getStatus() == NoticeStatus.SEND.value()) { entity.setSenderId(UserContext.getUser().getId()); entity.setSendDate(new Date()); } entity.setReceiverIds(StringUtils.join(entity.getReceiverList(), ",")); baseDao.insert(entity); // 发送通知 sendNotice(entity); } @Transactional(rollbackFor = Exception.class) public void update(SysNotice entity) { // 更新发送者信息 if (entity.getStatus() == NoticeStatus.SEND.value()) { entity.setSenderId(UserContext.getUser().getId()); entity.setSendDate(new Date()); } entity.setReceiverIds(StringUtils.join(entity.getReceiverList(), ",")); baseDao.updateById(entity); // 发送通知 sendNotice(entity); } /** * 发送通知 */ public void sendNotice(SysNotice notice) { // 如果是草稿,在不发送通知 if (notice.getStatus() == NoticeStatus.DRAFT.value()) { return; } List userIdList = new ArrayList<>(); if (ReceiverType.DEPT.getValue().equals(notice.getReceiverType())) {// 部门 userIdList.addAll(sysUserService.getByDeptIds(notice.getReceiverList()).stream().map(user -> user.getId()) .collect(Collectors.toList())); } else { // 选中用户 userIdList.addAll(notice.getReceiverList()); } if (userIdList.size() > 0) { // 发送给用户 userIdList.forEach(userId -> { SysNoticeUser noticeUser = new SysNoticeUser().setNoticeId(notice.getId()).setReceiverId(userId) .setStatus(NoticeReadStatus.UNREAD.value()); sysNoticeUserService.insert(noticeUser); }); // 通过WebSocket,提示选中用户,有新通知 MessageData message = new MessageData().msg(notice.getTitle()); webSocketServer.sendMessage(userIdList, message); } } }