package jnpf.message.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jnpf.base.DictionaryDataApi; import jnpf.base.Pagination; import jnpf.base.UserInfo; import jnpf.base.entity.DictionaryDataEntity; import jnpf.base.entity.SuperBaseEntity; import jnpf.base.service.SuperServiceImpl; import jnpf.message.entity.MessageEntity; import jnpf.message.entity.MessageMonitorEntity; import jnpf.message.entity.MessageReceiveEntity; import jnpf.message.mapper.MessageMapper; import jnpf.message.mapper.MessageMonitorMapper; import jnpf.message.mapper.MessagereceiveMapper; import jnpf.message.model.MessageInfoVO; import jnpf.message.model.NoticePagination; import jnpf.message.model.NoticeVO; import jnpf.message.model.PaginationMessage; import jnpf.message.service.MessageService; import jnpf.message.util.OnlineUserProvider; import jnpf.message.util.PushMessageUtil; import jnpf.permission.UserApi; import jnpf.permission.entity.UserEntity; import jnpf.util.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** * 消息实例 * * @author JNPF开发平台组 * @version V3.1.0 * @copyright 引迈信息技术有限公司 * @date 2019年9月27日 上午9:18 */ @Service @Slf4j public class MessageServiceImpl extends SuperServiceImpl implements MessageService { @Autowired private UserApi userApi; @Autowired private DictionaryDataApi dictionaryDataApi; @Autowired private MessagereceiveMapper messagereceiveMapper; @Autowired private MessageMonitorMapper messageMonitorMapper; @Override public List getNoticeList(NoticePagination pagination) { return this.baseMapper.getNoticeList(pagination); } @Override public List getDashboardNoticeList(List typeList) { List list = new ArrayList<>(16); // 判断哪些消息是自己接收的 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(MessageReceiveEntity::getUserId, UserProvider.getUser().getUserId()); queryWrapper.lambda().eq(MessageReceiveEntity::getType, 1); List receiveEntities = messagereceiveMapper.selectList(queryWrapper); for (int i = 0; i < receiveEntities.size(); i++) { // 得到message MessageReceiveEntity messageReceiveEntity = receiveEntities.get(i); try { MessageEntity entity = JsonUtil.getJsonToBean(messageReceiveEntity.getBodyText(), MessageEntity.class); if (entity != null) { if (StringUtil.isNotEmpty(entity.getId())) { MessageEntity messageEntity = this.getInfo(entity.getId()); if (messageEntity != null) { if ((typeList != null && typeList.size() > 0 && typeList.contains(messageEntity.getCategory()) || typeList == null || typeList.size() == 0)) { if (Objects.equals(messageEntity.getEnabledMark(), 1) && (entity.getExpirationTime() == null || entity.getExpirationTime().getTime() > System.currentTimeMillis())) { messageEntity.setId(messageReceiveEntity.getId()); list.add(messageEntity); } } } } else { entity.setId(messageReceiveEntity.getId()); list.add(entity); } } } catch (Exception e) { MessageEntity messageEntity = JsonUtil.getJsonToBean(messageReceiveEntity, MessageEntity.class); list.add(messageEntity); } if (list.size() > 49) { break; } } list = list.stream().sorted(Comparator.comparing(MessageEntity::getLastModifyTime, Comparator.nullsFirst(Comparator.naturalOrder())).reversed()).collect(Collectors.toList()); return list; } @Override public List getMessageList3(PaginationMessage pagination) { List messageColumnList = messagereceiveMapper.getMessageColumnList(pagination); return messageColumnList; } @Override public List getMessageList(Pagination pagination) { PaginationMessage paginationMessage = BeanUtil.copyProperties(pagination, PaginationMessage.class); return this.getMessageList3(paginationMessage); } @Override public MessageEntity getInfo(String id) { return this.baseMapper.getInfo(id); } @Override public MessageEntity getInfoDefault(int type) { return this.baseMapper.getInfoDefault(type); } @Override @DSTransactional public void delete(MessageEntity entity) { entity.setEnabledMark(-1); this.updateById(entity); this.removeById(entity.getId()); } @Override public void create(MessageEntity entity) { this.baseMapper.create(entity); } @Override public boolean update(String id, MessageEntity entity) { return this.baseMapper.update(id, entity); } @Override public MessageReceiveEntity messageRead(String messageId) { return messagereceiveMapper.messageRead(messageId); } @Override @DSTransactional public void messageRead(List idList) { messagereceiveMapper.messageRead(idList); } @Override @DSTransactional public void deleteRecord(List messageIds) { messagereceiveMapper.deleteRecord(messageIds); } @Override public int getUnreadCount(String userId, Integer type) { return this.baseMapper.getUnreadCount(userId, type); } @Override @DSTransactional public void sentMessage(List toUserIds, String title, String bodyText) { messagereceiveMapper.sentMessage(toUserIds, title, bodyText); } @Override @DSTransactional public void sentMessage(List toUserIds, String title, String bodyText, UserInfo userInfo, Integer source, Integer type) { sentMessage(toUserIds, title, bodyText, userInfo, source, type, false); } @Override @DSTransactional public void sentMessage(List toUserIds, String title, String bodyText, UserInfo userInfo, Integer source, Integer type, boolean testMessage) { MessageReceiveEntity messageReceiveEntity = new MessageReceiveEntity(); messageReceiveEntity.setTitle(title); messageReceiveEntity.setType(source); messageReceiveEntity.setFlowType(1); messageReceiveEntity.setBodyText(bodyText); messageReceiveEntity.setIsRead(0); Map map = new HashMap<>(); for (String item : toUserIds) { MessageReceiveEntity messageReceiveEntitys = new MessageReceiveEntity(); BeanUtils.copyProperties(messageReceiveEntity, messageReceiveEntitys); messageReceiveEntitys.setId(RandomUtil.uuId()); messageReceiveEntitys.setUserId(item); messagereceiveMapper.insert(messageReceiveEntitys); map.put(messageReceiveEntitys.getUserId(), messageReceiveEntitys); } //消息监控写入 MessageMonitorEntity monitorEntity = new MessageMonitorEntity(); monitorEntity.setId(RandomUtil.uuId()); monitorEntity.setTitle(title); monitorEntity.setMessageType(String.valueOf(type)); monitorEntity.setMessageSource(String.valueOf(source)); monitorEntity.setReceiveUser(JsonUtil.getObjectToString(toUserIds)); monitorEntity.setSendTime(DateUtil.getNowDate()); monitorEntity.setCreatorTime(DateUtil.getNowDate()); monitorEntity.setCreatorUserId(userInfo.getUserId()); messageMonitorMapper.insert(monitorEntity); PushMessageUtil.pushMessage(map, userInfo, source); } @Override public void logoutWebsocketByToken(String token, String userId) { if (StringUtil.isNotEmpty(token)) { OnlineUserProvider.removeWebSocketByToken(token.split(",")); } else { OnlineUserProvider.removeWebSocketByUser(userId); } } @Override public Boolean updateEnabledMark() { return this.baseMapper.updateEnabledMark(); } public List getNoticeList(List list) { List dashboardNoticeList = this.getDashboardNoticeList(list); List userList = userApi.getUserName(dashboardNoticeList.stream().map(MessageEntity::getCreatorUserId).collect(Collectors.toList())); List noticeType = dictionaryDataApi.getListByCode("NoticeType"); dashboardNoticeList.forEach(t -> { // 转换创建人、发布人 UserEntity user = userList.stream().filter(ul -> ul.getId().equals(t.getCreatorUserId())).findFirst().orElse(null); t.setCreatorUserId(user != null ? user.getRealName() + "/" + user.getAccount() : ""); if (t.getEnabledMark() != null && t.getEnabledMark() != 0) { UserEntity entity = userApi.getInfoById(t.getLastModifyUserId()); t.setLastModifyUserId(entity != null ? entity.getRealName() + "/" + entity.getAccount() : ""); } DictionaryDataEntity dictionaryDataEntity = noticeType.stream().filter(notice -> notice.getEnCode().equals(t.getCategory())).findFirst().orElse(new DictionaryDataEntity()); t.setCategory(dictionaryDataEntity.getFullName()); }); List jsonToList = new ArrayList<>(); dashboardNoticeList.forEach(t -> { NoticeVO vo = JsonUtil.getJsonToBean(t, NoticeVO.class); vo.setReleaseTime(t.getLastModifyTime() != null ? t.getLastModifyTime().getTime() : null); vo.setReleaseUser(t.getLastModifyUserId()); vo.setCreatorUser(t.getCreatorUserId()); jsonToList.add(vo); }); return jsonToList; } @Override public List getUserMessageList() { List listVO = new ArrayList<>(); PaginationMessage pagination = new PaginationMessage(); pagination.setPageSize(5); pagination.setUserId(UserProvider.getUser().getUserId()); List list = this.getMessageList3(pagination); List userList = userApi.getUserName(list.stream().map(SuperBaseEntity.SuperCBaseEntity::getCreatorUserId).collect(Collectors.toList())); List msgSourceTypeList = dictionaryDataApi.getListByCode("msgSourceType"); list.forEach(t -> { MessageInfoVO vo = JsonUtil.getJsonToBean(t, MessageInfoVO.class); UserEntity user = userList.stream().filter(ul -> ul.getId().equals(t.getCreatorUserId())).findFirst().orElse(null); if (user != null) { vo.setReleaseTime(t.getCreatorTime() != null ? t.getCreatorTime().getTime() : null); vo.setReleaseUser(user.getRealName() + "/" + user.getAccount()); vo.setCreatorUser(user.getRealName() + "/" + user.getAccount()); } if (t.getType() != null) { msgSourceTypeList.stream().filter(m -> t.getType().toString().equals(m.getEnCode())).findFirst() .ifPresent(n -> vo.setTypeName(n.getFullName())); } listVO.add(vo); }); return listVO; } }