MsgUserMessageServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package com.xy.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.xy.dto.MsgUserMessageDto;
  10. import com.xy.entity.MsgSysMonitorNotice;
  11. import com.xy.entity.MsgUserMessage;
  12. import com.xy.enums.MsgReadStatus;
  13. import com.xy.enums.MsgType;
  14. import com.xy.mapper.MsgUserMessageMapper;
  15. import com.xy.utils.*;
  16. import io.swagger.annotations.Api;
  17. import io.swagger.annotations.ApiOperation;
  18. import lombok.AllArgsConstructor;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.validation.annotation.Validated;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.RequestBody;
  23. import java.util.ArrayList;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.stream.Collectors;
  27. import static com.xy.utils.Beans.copy;
  28. import static com.xy.utils.PlusBeans.toIPage;
  29. import static com.xy.utils.PlusBeans.toPageBean;
  30. /**
  31. * <p>
  32. * 服务实现类
  33. * </p>
  34. *
  35. * @author 谭斌
  36. * @since 2023-02-24
  37. */
  38. @Service
  39. @AllArgsConstructor
  40. @Api(tags = "用户消息")
  41. public class MsgUserMessageServiceImpl extends ServiceImpl<MsgUserMessageMapper, MsgUserMessage> implements MsgUserMessageService {
  42. private MsgSysMonitorNoticeServiceImpl msgSysMonitorNoticeService;
  43. @Override
  44. @ApiOperation("消息详情")
  45. public R<MsgUserMessageDto.Vo> obj(MsgUserMessageDto.Vo vo) {
  46. MsgUserMessageDto.SelectList selectList = copy(MsgUserMessageDto.SelectList.class, vo);
  47. List<MsgUserMessageDto.Vo> list = list(selectList).getData();
  48. MsgUserMessageDto.Vo myMsg = new MsgUserMessageDto.Vo();
  49. if (Emptys.check(list)) {
  50. myMsg = list.get(0);
  51. //更新已读
  52. MsgUserMessage msgUserMessage = new MsgUserMessage();
  53. msgUserMessage.setId(myMsg.getId()).setReadState(MsgReadStatus.READ.getCode().toString());
  54. if (ObjectUtil.isNotEmpty(myMsg)) {
  55. Integer msgId = myMsg.getMsgId();
  56. MsgSysMonitorNotice msgSysMonitorNotice = msgSysMonitorNoticeService.getById(msgId);
  57. if (ObjectUtil.isNotEmpty(msgSysMonitorNotice)) {
  58. myMsg.setContent(msgSysMonitorNotice.getContent());
  59. myMsg.setTitle(msgSysMonitorNotice.getTitle());
  60. }
  61. }
  62. this.updateById(msgUserMessage);
  63. return R.ok(myMsg);
  64. }
  65. return R.ok(myMsg);
  66. }
  67. public R<List<MsgUserMessageDto.Vo>> list(MsgUserMessageDto.SelectList selectList) {
  68. LambdaQueryWrapper<MsgUserMessage> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MsgUserMessage.class).build();
  69. List<MsgUserMessage> list = list(lambdaQueryWrapper);
  70. return R.ok(copy(MsgUserMessageDto.Vo.class, list));
  71. }
  72. @ApiOperation("我的消息-弹窗提示")
  73. @PostMapping("myMsgPopUp")
  74. public R<List<MsgUserMessageDto.Vo>> myMsgPopUp() {
  75. List<MsgUserMessageDto.Vo> voList = new ArrayList<>();
  76. LambdaQueryWrapper<MsgUserMessage> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  77. lambdaQueryWrapper.eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode());
  78. lambdaQueryWrapper.eq(MsgUserMessage::getUserId, AuthorizeUtils.getLoginId(Long.class));
  79. lambdaQueryWrapper.eq(MsgUserMessage::getPopUp, Boolean.TRUE);
  80. List<MsgUserMessage> list = this.list(lambdaQueryWrapper);
  81. if (CollUtil.isEmpty(list)) {
  82. return R.ok(voList);
  83. }
  84. List<MsgUserMessageDto.Vo> msgList = BeanUtil.copyToList(list, MsgUserMessageDto.Vo.class);
  85. List<Integer> msgIds = list.stream().map(MsgUserMessage::getMsgId).collect(Collectors.toList());
  86. List<MsgSysMonitorNotice> msgSysMonitorNotices = msgSysMonitorNoticeService.listByIds(msgIds);
  87. if (CollUtil.isNotEmpty(msgSysMonitorNotices)) {
  88. Map<Integer, MsgSysMonitorNotice> msgSysMonitorNoticeMap = msgSysMonitorNotices.stream().collect(Collectors.toMap(MsgSysMonitorNotice::getMsgId, i -> i));
  89. for (MsgUserMessageDto.Vo record : msgList) {
  90. Integer msgId = record.getMsgId();
  91. MsgSysMonitorNotice msgSysMonitorNotice = msgSysMonitorNoticeMap.get(msgId);
  92. if (msgSysMonitorNotice != null) {
  93. record.setContent(msgSysMonitorNotice.getContent());
  94. record.setTitle(msgSysMonitorNotice.getTitle());
  95. }
  96. }
  97. }
  98. return R.ok(msgList);
  99. }
  100. @ApiOperation("我的消息-标记已读")
  101. @PostMapping("readById")
  102. public R<Boolean> readById(@RequestBody MsgUserMessageDto.ReadOver dto) {
  103. List<Long> ids = dto.getIds();
  104. Long loginId = AuthorizeUtils.getLoginId(Long.class);
  105. List<MsgUserMessage> msgUserMessages = this.list(Wrappers.<MsgUserMessage>lambdaQuery()
  106. .eq(MsgUserMessage::getUserId, loginId)
  107. .in(MsgUserMessage::getId, ids)
  108. .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode()));
  109. if (CollUtil.isNotEmpty(msgUserMessages)) {
  110. msgUserMessages.forEach(mum -> {
  111. mum.setReadState(String.valueOf(MsgReadStatus.READ.getCode()));
  112. });
  113. this.saveOrUpdateBatch(msgUserMessages);
  114. }
  115. return R.ok(Boolean.TRUE);
  116. }
  117. @ApiOperation("我的消息-未读数量")
  118. @Override
  119. public R<Long> myMsgUnRead() {
  120. long count = this.count(Wrappers.<MsgUserMessage>lambdaQuery()
  121. .eq(MsgUserMessage::getUserId, AuthorizeUtils.getLoginId(Long.class))
  122. .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode()));
  123. return R.ok(count);
  124. }
  125. @ApiOperation("我的消息-标记全部已读")
  126. @Override
  127. public R<Boolean> readAll() {
  128. Long loginId = AuthorizeUtils.getLoginId(Long.class);
  129. List<MsgUserMessage> list = this.list(Wrappers.<MsgUserMessage>lambdaQuery()
  130. .eq(MsgUserMessage::getUserId, loginId)
  131. .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode()));
  132. if (CollUtil.isNotEmpty(list)) {
  133. list.forEach(mum -> {
  134. mum.setReadState(String.valueOf(MsgReadStatus.READ.getCode()));
  135. });
  136. this.saveOrUpdateBatch(list);
  137. }
  138. return R.ok(Boolean.TRUE);
  139. }
  140. @ApiOperation("我的未读消息统计")
  141. @Override
  142. public R<MsgUserMessageDto.PageCount> myMsgPageCount(MsgUserMessageDto.Page page) {
  143. page.setReadState(MsgReadStatus.UN_READ.getCode().toString());
  144. page.setType(null);
  145. Integer allNum = getTotalMsgNum(myMsgPage(page));
  146. //类型 1故障通知、2交易通知、3其他通知
  147. page.setType("1");
  148. Integer riskNum = getTotalMsgNum(myMsgPage(page));
  149. page.setType("2");
  150. Integer tradeNum = getTotalMsgNum(myMsgPage(page));
  151. //其他
  152. page.setType("3");
  153. Integer otherNum = getTotalMsgNum(myMsgPage(page));
  154. //费用
  155. page.setType("4");
  156. Integer costNum = getTotalMsgNum(myMsgPage(page));
  157. MsgUserMessageDto.PageCount pageCount = new MsgUserMessageDto.PageCount()
  158. .setAllNum(allNum)
  159. .setOtherNum(otherNum)
  160. .setRiskNum(riskNum)
  161. .setCostNum(costNum)
  162. .setTradeNum(tradeNum);
  163. return R.ok(pageCount);
  164. }
  165. private Integer getTotalMsgNum(R<PageBean<MsgUserMessageDto.PageVO>> pageBeanR) {
  166. PageBean<MsgUserMessageDto.PageVO> pageBeanRData = pageBeanR.getData();
  167. Long total = pageBeanRData.getTotal();
  168. return total.intValue();
  169. }
  170. @ApiOperation("我的消息")
  171. @Override
  172. public R<PageBean<MsgUserMessageDto.PageVO>> myMsgPage(MsgUserMessageDto.Page page) {
  173. //类型 1故障通知、2交易通知、3其他通知
  174. String type = page.getType();
  175. List<Integer> msgTypes = new ArrayList<>();
  176. List<Integer> msgTypesNotIn = new ArrayList<>();
  177. if ("1".equals(type)) {
  178. msgTypes.add(MsgType.TYPE6.getCode());
  179. }
  180. if ("2".equals(type)) {
  181. msgTypes.add(MsgType.TYPE8.getCode());
  182. }
  183. //费用
  184. if ("4".equals(type)) {
  185. msgTypes.add(MsgType.TYPE9.getCode());
  186. }
  187. if ("3".equals(type)) {
  188. msgTypesNotIn.add(MsgType.TYPE6.getCode());
  189. msgTypesNotIn.add(MsgType.TYPE8.getCode());
  190. }
  191. page.setUserId(AuthorizeUtils.getLoginId(Long.class));
  192. PageBean pageBean = page.getPage();
  193. LambdaQueryWrapper<MsgUserMessage> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, MsgUserMessage.class)
  194. .ge(MsgUserMessage::getCreateTime, page.getBeginCreateTime())
  195. .le(MsgUserMessage::getCreateTime, page.getEndCreateTime())
  196. .build()
  197. .in(CollUtil.isNotEmpty(msgTypes), MsgUserMessage::getMsgType, msgTypes)
  198. .notIn(CollUtil.isNotEmpty(msgTypesNotIn), MsgUserMessage::getMsgType, msgTypesNotIn)
  199. .orderByDesc(MsgUserMessage::getCreateTime);
  200. IPage<MsgUserMessage> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
  201. PageBean<MsgUserMessageDto.PageVO> pageVo = toPageBean(MsgUserMessageDto.PageVO.class, iPage);
  202. List<MsgUserMessageDto.PageVO> records = pageVo.getRecords();
  203. if (CollUtil.isNotEmpty(records)) {
  204. List<Integer> msgIds = records.stream().map(MsgUserMessageDto.PageVO::getMsgId).collect(Collectors.toList());
  205. List<MsgSysMonitorNotice> msgSysMonitorNotices = msgSysMonitorNoticeService.listByIds(msgIds);
  206. if (CollUtil.isNotEmpty(msgSysMonitorNotices)) {
  207. Map<Integer, MsgSysMonitorNotice> msgSysMonitorNoticeMap = msgSysMonitorNotices.stream().collect(Collectors.toMap(MsgSysMonitorNotice::getMsgId, i -> i));
  208. for (MsgUserMessageDto.PageVO record : records) {
  209. Integer msgId = record.getMsgId();
  210. MsgSysMonitorNotice msgSysMonitorNotice = msgSysMonitorNoticeMap.get(msgId);
  211. if (msgSysMonitorNotice != null) {
  212. record.setContent(msgSysMonitorNotice.getContent());
  213. record.setTitle(msgSysMonitorNotice.getTitle());
  214. }
  215. }
  216. }
  217. }
  218. return R.ok(pageVo);
  219. }
  220. @ApiOperation("新增我的消息")
  221. @Override
  222. public R save(@RequestBody @Validated MsgUserMessageDto.Save save) {
  223. MsgUserMessage saveInfo = Beans.copy(MsgUserMessage.class, save);
  224. save(saveInfo);
  225. return R.ok();
  226. }
  227. @ApiOperation("更新")
  228. @Override
  229. public R update(@RequestBody @Validated MsgUserMessageDto.Update update) {
  230. MsgUserMessage updateInfo = Beans.copy(MsgUserMessage.class, update);
  231. updateById(updateInfo);
  232. return R.ok();
  233. }
  234. }