MessageServiceImpl.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package nju.seec.helper.service.impl;
  2. import nju.seec.helper.aspect.auth.LoginUser;
  3. import nju.seec.helper.dao.MessageDAO;
  4. import nju.seec.helper.dto.message.MessageDTO;
  5. import nju.seec.helper.entity.Message;
  6. import nju.seec.helper.enums.MessageType;
  7. import nju.seec.helper.service.MessageService;
  8. import org.springframework.data.domain.Page;
  9. import org.springframework.data.domain.Pageable;
  10. import org.springframework.scheduling.annotation.Async;
  11. import org.springframework.stereotype.Service;
  12. import org.springframework.transaction.annotation.Transactional;
  13. import java.util.Set;
  14. import java.util.stream.Collectors;
  15. /**
  16. * @author cst
  17. */
  18. @Service
  19. public class MessageServiceImpl implements MessageService {
  20. private final MessageDAO messageDAO;
  21. public MessageServiceImpl(MessageDAO messageDAO) {
  22. this.messageDAO = messageDAO;
  23. }
  24. @Async
  25. @Override
  26. public void createMessage(Set<Long> toUserIds, MessageType type, String content, Long refId) {
  27. messageDAO.saveAll(
  28. toUserIds.parallelStream()
  29. .map(toUserId -> new Message()
  30. .setToUserId(toUserId)
  31. .setType(type)
  32. .setContent(content)
  33. .setRefId(refId))
  34. .collect(Collectors.toSet()));
  35. }
  36. @Transactional(rollbackFor = Exception.class)
  37. @Override
  38. public void deleteMessages(LoginUser user, MessageDTO messageDTO) {
  39. messageDAO.deleteByToUserIdAndIdIn(user.getId(), messageDTO.getIds());
  40. }
  41. @Async
  42. @Override
  43. public void deleteMessages(Long refId, MessageType messageType) {
  44. messageDAO.deleteByRefIdAndType(refId, messageType);
  45. }
  46. @Transactional(rollbackFor = Exception.class)
  47. @Override
  48. public void readMessages(LoginUser user, MessageDTO messageDTO) {
  49. messageDAO.updateRead(user.getId(), messageDTO.getIds());
  50. }
  51. @Transactional(readOnly = true)
  52. @Override
  53. public Page<Message> getUnreadMessages(LoginUser user, String key, Pageable pageable) {
  54. return messageDAO.findByToUserIdAndReadAndContentContains(user.getId(), false, key, pageable);
  55. }
  56. @Transactional(readOnly = true)
  57. @Override
  58. public Page<Message> getReadMessages(LoginUser user, String key, Pageable pageable) {
  59. return messageDAO.findByToUserIdAndReadAndContentContains(user.getId(), true, key, pageable);
  60. }
  61. }