ImContentServiceImpl.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package jnpf.message.service.impl;
  2. import jnpf.base.service.SuperServiceImpl;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import jnpf.base.PageModel;
  8. import jnpf.message.entity.ImContentEntity;
  9. import jnpf.message.entity.ImReplyEntity;
  10. import jnpf.message.mapper.ImContentMapper;
  11. import jnpf.message.model.ImReplySavaModel;
  12. import jnpf.message.service.ImContentService;
  13. import jnpf.message.model.ImUnreadNumModel;
  14. import jnpf.message.service.ImReplyService;
  15. import jnpf.permission.service.UserService;
  16. import jnpf.util.*;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.Optional;
  24. /**
  25. * 聊天内容
  26. *
  27. * @author JNPF开发平台组
  28. * @version V3.1.0
  29. * @copyright 引迈信息技术有限公司
  30. * @date 2019年9月27日 上午9:18
  31. */
  32. @Service
  33. public class ImContentServiceImpl extends SuperServiceImpl<ImContentMapper, ImContentEntity> implements ImContentService {
  34. @Autowired
  35. private ImReplyService imReplyService;
  36. @Override
  37. public List<ImContentEntity> getMessageList(String sendUserId, String receiveUserId, PageModel pageModel) {
  38. QueryWrapper<ImContentEntity> queryWrapper = new QueryWrapper<>();
  39. //发件人、收件人
  40. if (!StringUtil.isEmpty(sendUserId) && !StringUtil.isEmpty(receiveUserId)) {
  41. queryWrapper.lambda().and(wrapper -> {
  42. wrapper.eq(ImContentEntity::getSendUserId, sendUserId);
  43. wrapper.eq(ImContentEntity::getReceiveUserId, receiveUserId);
  44. wrapper.or().eq(ImContentEntity::getSendUserId, receiveUserId);
  45. wrapper.eq(ImContentEntity::getReceiveUserId, sendUserId);
  46. });
  47. queryWrapper.lambda().and(wrapper -> {
  48. wrapper.isNull(ImContentEntity::getDeleteUserId);
  49. wrapper.or(). ne(ImContentEntity::getDeleteUserId,receiveUserId);
  50. // wrapper.ne(ImContentEntity::getDeleteMark, 1);
  51. });
  52. }
  53. //关键字查询
  54. if (pageModel != null && pageModel.getKeyword() != null) {
  55. queryWrapper.lambda().like(ImContentEntity::getContent, pageModel.getKeyword());
  56. //排序
  57. pageModel.setSidx("f_send_time");
  58. }
  59. if (StringUtil.isEmpty(pageModel.getSidx())) {
  60. queryWrapper.lambda().orderByDesc(ImContentEntity::getSendTime);
  61. } else {
  62. queryWrapper = "asc".equals(pageModel.getSord().toLowerCase()) ? queryWrapper.orderByAsc(pageModel.getSidx()) : queryWrapper.orderByDesc(pageModel.getSidx());
  63. }
  64. Page<ImContentEntity> page = new Page<>(pageModel.getPage(), pageModel.getRows());
  65. IPage<ImContentEntity> iPage = this.page(page, queryWrapper);
  66. return pageModel.setData(iPage.getRecords(), page.getTotal());
  67. }
  68. @Override
  69. public List<ImUnreadNumModel> getUnreadList(String receiveUserId) {
  70. List<ImUnreadNumModel> list = this.baseMapper.getUnreadList(receiveUserId);
  71. List<ImUnreadNumModel> list1 = this.baseMapper.getUnreadLists(receiveUserId);
  72. for (ImUnreadNumModel item : list) {
  73. Optional<ImUnreadNumModel> first = list1.stream().filter(q -> q.getSendUserId().equals(item.getSendUserId())).findFirst();
  74. if(first.isPresent()){
  75. ImUnreadNumModel defaultItem = first.get();
  76. item.setDefaultMessage(defaultItem.getDefaultMessage());
  77. item.setDefaultMessageType(defaultItem.getDefaultMessageType());
  78. item.setDefaultMessageTime(defaultItem.getDefaultMessageTime());
  79. }
  80. }
  81. return list;
  82. }
  83. @Override
  84. public int getUnreadCount(String sendUserId, String receiveUserId) {
  85. QueryWrapper<ImContentEntity> queryWrapper = new QueryWrapper<>();
  86. queryWrapper.lambda().eq(ImContentEntity::getSendUserId, sendUserId).eq(ImContentEntity::getReceiveUserId, receiveUserId).eq(ImContentEntity::getEnabledMark, 0);
  87. return (int) this.count(queryWrapper);
  88. }
  89. @Override
  90. @DSTransactional
  91. public void sendMessage(String sendUserId, String receiveUserId, String message, String messageType) {
  92. if (StringUtil.isEmpty(sendUserId)) return;
  93. ImContentEntity entity = new ImContentEntity();
  94. entity.setId(RandomUtil.uuId());
  95. entity.setSendUserId(sendUserId);
  96. entity.setSendTime(new Date());
  97. entity.setReceiveUserId(receiveUserId);
  98. entity.setEnabledMark(0);
  99. entity.setContent(message);
  100. entity.setContentType(messageType);
  101. this.save(entity);
  102. //写入到会话表中
  103. ImReplySavaModel imReplySavaModel = new ImReplySavaModel(sendUserId, receiveUserId, entity.getSendTime());
  104. ImReplyEntity imReplyEntity = JsonUtil.getJsonToBean(imReplySavaModel, ImReplyEntity.class);
  105. imReplyService.savaImReply(imReplyEntity);
  106. }
  107. @Override
  108. public void readMessage(String sendUserId, String receiveUserId) {
  109. QueryWrapper<ImContentEntity> queryWrapper = new QueryWrapper<>();
  110. queryWrapper.lambda().eq(ImContentEntity::getSendUserId, sendUserId);
  111. queryWrapper.lambda().eq(ImContentEntity::getReceiveUserId, receiveUserId);
  112. queryWrapper.lambda().eq(ImContentEntity::getEnabledMark, 0);
  113. List<ImContentEntity> list = this.list(queryWrapper);
  114. for (ImContentEntity entity : list) {
  115. entity.setEnabledMark(1);
  116. entity.setReceiveTime(new Date());
  117. this.updateById(entity);
  118. }
  119. }
  120. // @Override
  121. // public ImContentEntity getList(String userId, String receiveUserId) {
  122. // QueryWrapper<ImContentEntity> queryWrapper = new QueryWrapper<>();
  123. // queryWrapper.lambda().eq(ImContentEntity::getSendUserId, userId)
  124. // .and(t -> t.eq(ImContentEntity::getReceiveUserId, receiveUserId)).orderByDesc(ImContentEntity::getReceiveTime);
  125. // List<ImContentEntity> list = this.list(queryWrapper);
  126. // return list.size() > 0 ? list.get(0) : null;
  127. // }
  128. @Override
  129. public boolean deleteChatRecord(String sendUserId, String receiveUserId) {
  130. QueryWrapper<ImContentEntity> queryWrapper = new QueryWrapper<>();
  131. queryWrapper.lambda().and(t-> {
  132. t.eq(ImContentEntity::getSendUserId, receiveUserId)
  133. .eq(ImContentEntity::getReceiveUserId, sendUserId).or();
  134. t.eq(ImContentEntity::getReceiveUserId, receiveUserId)
  135. .eq(ImContentEntity::getSendUserId, sendUserId);
  136. });
  137. List<ImContentEntity> list = this.list(queryWrapper);
  138. for (ImContentEntity entity : list) {
  139. if(entity.getDeleteUserId()!=null){
  140. if(!entity.getDeleteUserId().equals(sendUserId)) {
  141. entity.setDeleteMark(1);
  142. this.updateById(entity);
  143. }
  144. }
  145. entity.setDeleteUserId(sendUserId);
  146. this.updateById(entity);
  147. }
  148. QueryWrapper<ImContentEntity> wrapper = new QueryWrapper<>();
  149. wrapper.lambda().eq(ImContentEntity::getDeleteMark,1);
  150. this.remove(wrapper);
  151. return false;
  152. }
  153. }