MessageServiceImpl.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package com.kym.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.kym.common.utils.IDGenerator;
  6. import com.kym.entity.AdminUser;
  7. import com.kym.entity.Message;
  8. import com.kym.entity.common.PageBean;
  9. import com.kym.entity.queryParams.MessageQueryParams;
  10. import com.kym.entity.vo.MessageVo;
  11. import com.kym.mapper.MessageMapper;
  12. import com.kym.service.AdminUserService;
  13. import com.kym.service.MessageService;
  14. import com.kym.service.mybatisplus.MyBaseServiceImpl;
  15. import org.springframework.beans.BeanUtils;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.time.LocalDateTime;
  19. import java.util.ArrayList;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;
  23. /**
  24. * 消息通知服务实现类
  25. *
  26. * @author skyline
  27. * @since 2024-01-15
  28. */
  29. @Service
  30. public class MessageServiceImpl extends MyBaseServiceImpl<MessageMapper, Message> implements MessageService {
  31. private final AdminUserService adminUserService;
  32. public MessageServiceImpl(AdminUserService adminUserService) {
  33. this.adminUserService = adminUserService;
  34. }
  35. @Override
  36. @Transactional
  37. public void sendMessage(MessageVo vo) {
  38. Message message = new Message();
  39. BeanUtils.copyProperties(vo, message);
  40. // 设置发送者信息
  41. Long senderId = StpUtil.getLoginIdAsLong();
  42. String senderName = StpUtil.getSession().getString("username");
  43. message.setSenderId(senderId)
  44. .setSenderName(senderName)
  45. .setStatus(0)
  46. .setBaseId(IDGenerator.INS().nextId());
  47. // 设置接收者名称
  48. if (vo.getReceiverId() != null) {
  49. AdminUser receiver = adminUserService.getById(vo.getReceiverId());
  50. if (receiver != null) {
  51. message.setReceiverName(receiver.getNickname());
  52. }
  53. }
  54. save(message);
  55. }
  56. @Override
  57. @Transactional
  58. public void batchSendMessage(MessageVo vo) {
  59. if (vo.getReceiverIds() == null || vo.getReceiverIds().isEmpty()) {
  60. return;
  61. }
  62. Long senderId = StpUtil.getLoginIdAsLong();
  63. String senderName = StpUtil.getSession().getString("username");
  64. List<Message> messages = new ArrayList<>();
  65. for (Long receiverId : vo.getReceiverIds()) {
  66. Message message = new Message();
  67. message.setTitle(vo.getTitle())
  68. .setContent(vo.getContent())
  69. .setType(vo.getType())
  70. .setSenderId(senderId)
  71. .setSenderName(senderName)
  72. .setReceiverId(receiverId)
  73. .setStatus(0)
  74. .setPriority(vo.getPriority() != null ? vo.getPriority() : 0)
  75. .setBizType(vo.getBizType())
  76. .setBizId(vo.getBizId())
  77. .setIsPush(vo.getIsPush() != null ? vo.getIsPush() : 0)
  78. .setBaseId(IDGenerator.INS().nextId());
  79. // 设置接收者名称
  80. AdminUser receiver = adminUserService.getById(receiverId);
  81. if (receiver != null) {
  82. message.setReceiverName(receiver.getNickname());
  83. }
  84. messages.add(message);
  85. }
  86. saveBatch(messages);
  87. }
  88. @Override
  89. public PageBean<Message> listMessage(MessageQueryParams params) {
  90. com.github.pagehelper.PageHelper.startPage(params.getPageNum(), params.getPageSize());
  91. MessageQueryParams queryParams = new MessageQueryParams();
  92. queryParams.setReceiverId(params.getReceiverId());
  93. queryParams.setType(params.getType());
  94. queryParams.setStatus(params.getStatus());
  95. queryParams.setTitle(params.getTitle());
  96. queryParams.setPriority(params.getPriority());
  97. List<Message> list = lambdaQuery()
  98. .ne(Message::getStatus, 2)
  99. .eq(params.getReceiverId() != null, Message::getReceiverId, params.getReceiverId())
  100. .eq(params.getType() != null, Message::getType, params.getType())
  101. .eq(params.getStatus() != null, Message::getStatus, params.getStatus())
  102. .like(params.getTitle() != null, Message::getTitle, params.getTitle())
  103. .eq(params.getPriority() != null, Message::getPriority, params.getPriority())
  104. .orderByDesc(Message::getPriority)
  105. .orderByDesc(Message::getCreateTime)
  106. .list();
  107. return new PageBean<>(list);
  108. }
  109. @Override
  110. public Message getMessageDetail(Long messageId) {
  111. Message message = getById(messageId);
  112. // 自动标记已读
  113. if (message != null && message.getStatus() == 0) {
  114. message.setStatus(1);
  115. message.setReadTime(LocalDateTime.now());
  116. updateById(message);
  117. }
  118. return message;
  119. }
  120. @Override
  121. @Transactional
  122. public void markAsRead(Long messageId) {
  123. Message message = getById(messageId);
  124. if (message != null && message.getStatus() == 0) {
  125. message.setStatus(1);
  126. message.setReadTime(LocalDateTime.now());
  127. updateById(message);
  128. }
  129. }
  130. @Override
  131. @Transactional
  132. public void batchMarkAsRead(List<Long> messageIds) {
  133. if (messageIds == null || messageIds.isEmpty()) {
  134. return;
  135. }
  136. List<Message> messages = listByIds(messageIds);
  137. LocalDateTime now = LocalDateTime.now();
  138. for (Message message : messages) {
  139. if (message.getStatus() == 0) {
  140. message.setStatus(1);
  141. message.setReadTime(now);
  142. }
  143. }
  144. updateBatchById(messages);
  145. }
  146. @Override
  147. @Transactional
  148. public void markAllAsRead(Long receiverId, Integer type) {
  149. baseMapper.batchMarkRead(receiverId, type);
  150. }
  151. @Override
  152. @Transactional
  153. public void deleteMessage(Long messageId) {
  154. Message message = getById(messageId);
  155. if (message != null) {
  156. message.setStatus(2); // 已删除
  157. updateById(message);
  158. }
  159. }
  160. @Override
  161. @Transactional
  162. public void batchDeleteMessage(List<Long> messageIds) {
  163. if (messageIds == null || messageIds.isEmpty()) {
  164. return;
  165. }
  166. List<Message> messages = listByIds(messageIds);
  167. for (Message message : messages) {
  168. message.setStatus(2); // 已删除
  169. }
  170. updateBatchById(messages);
  171. }
  172. @Override
  173. public int getUnreadCount(Long receiverId) {
  174. return baseMapper.countUnread(receiverId);
  175. }
  176. @Override
  177. public Map<Integer, Integer> getUnreadCountByType(Long receiverId) {
  178. Map<Integer, Integer> result = new HashMap<>();
  179. // 类型:1-系统通知,2-站内信,3-待办事项,4-公告通知
  180. for (int type = 1; type <= 4; type++) {
  181. result.put(type, baseMapper.countUnreadByType(receiverId, type));
  182. }
  183. return result;
  184. }
  185. @Override
  186. public List<Message> getLatestUnread(Long receiverId, int limit) {
  187. MessageQueryParams params = new MessageQueryParams();
  188. params.setReceiverId(receiverId);
  189. params.setStatus(0);
  190. params.setPageNum(1);
  191. params.setPageSize(limit);
  192. IPage<Message> page = new Page<>(1, limit);
  193. return baseMapper.selectMessagePage(page, params).getRecords();
  194. }
  195. }