123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- package com.xy.service;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.ObjectUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.xy.dto.MsgUserMessageDto;
- import com.xy.entity.MsgSysMonitorNotice;
- import com.xy.entity.MsgUserMessage;
- import com.xy.enums.MsgReadStatus;
- import com.xy.enums.MsgType;
- import com.xy.mapper.MsgUserMessageMapper;
- import com.xy.utils.*;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.AllArgsConstructor;
- import org.springframework.stereotype.Service;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- import static com.xy.utils.Beans.copy;
- import static com.xy.utils.PlusBeans.toIPage;
- import static com.xy.utils.PlusBeans.toPageBean;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author 谭斌
- * @since 2023-02-24
- */
- @Service
- @AllArgsConstructor
- @Api(tags = "用户消息")
- public class MsgUserMessageServiceImpl extends ServiceImpl<MsgUserMessageMapper, MsgUserMessage> implements MsgUserMessageService {
- private MsgSysMonitorNoticeServiceImpl msgSysMonitorNoticeService;
- @Override
- @ApiOperation("消息详情")
- public R<MsgUserMessageDto.Vo> obj(MsgUserMessageDto.Vo vo) {
- MsgUserMessageDto.SelectList selectList = copy(MsgUserMessageDto.SelectList.class, vo);
- List<MsgUserMessageDto.Vo> list = list(selectList).getData();
- MsgUserMessageDto.Vo myMsg = new MsgUserMessageDto.Vo();
- if (Emptys.check(list)) {
- myMsg = list.get(0);
- //更新已读
- MsgUserMessage msgUserMessage = new MsgUserMessage();
- msgUserMessage.setId(myMsg.getId()).setReadState(MsgReadStatus.READ.getCode().toString());
- if (ObjectUtil.isNotEmpty(myMsg)) {
- Integer msgId = myMsg.getMsgId();
- MsgSysMonitorNotice msgSysMonitorNotice = msgSysMonitorNoticeService.getById(msgId);
- if (ObjectUtil.isNotEmpty(msgSysMonitorNotice)) {
- myMsg.setContent(msgSysMonitorNotice.getContent());
- myMsg.setTitle(msgSysMonitorNotice.getTitle());
- }
- }
- this.updateById(msgUserMessage);
- return R.ok(myMsg);
- }
- return R.ok(myMsg);
- }
- public R<List<MsgUserMessageDto.Vo>> list(MsgUserMessageDto.SelectList selectList) {
- LambdaQueryWrapper<MsgUserMessage> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MsgUserMessage.class).build();
- List<MsgUserMessage> list = list(lambdaQueryWrapper);
- return R.ok(copy(MsgUserMessageDto.Vo.class, list));
- }
- @ApiOperation("我的消息-弹窗提示")
- @PostMapping("myMsgPopUp")
- public R<List<MsgUserMessageDto.Vo>> myMsgPopUp() {
- List<MsgUserMessageDto.Vo> voList = new ArrayList<>();
- LambdaQueryWrapper<MsgUserMessage> lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode());
- lambdaQueryWrapper.eq(MsgUserMessage::getUserId, AuthorizeUtils.getLoginId(Long.class));
- lambdaQueryWrapper.eq(MsgUserMessage::getPopUp, Boolean.TRUE);
- List<MsgUserMessage> list = this.list(lambdaQueryWrapper);
- if (CollUtil.isEmpty(list)) {
- return R.ok(voList);
- }
- List<MsgUserMessageDto.Vo> msgList = BeanUtil.copyToList(list, MsgUserMessageDto.Vo.class);
- List<Integer> msgIds = list.stream().map(MsgUserMessage::getMsgId).collect(Collectors.toList());
- List<MsgSysMonitorNotice> msgSysMonitorNotices = msgSysMonitorNoticeService.listByIds(msgIds);
- if (CollUtil.isNotEmpty(msgSysMonitorNotices)) {
- Map<Integer, MsgSysMonitorNotice> msgSysMonitorNoticeMap = msgSysMonitorNotices.stream().collect(Collectors.toMap(MsgSysMonitorNotice::getMsgId, i -> i));
- for (MsgUserMessageDto.Vo record : msgList) {
- Integer msgId = record.getMsgId();
- MsgSysMonitorNotice msgSysMonitorNotice = msgSysMonitorNoticeMap.get(msgId);
- if (msgSysMonitorNotice != null) {
- record.setContent(msgSysMonitorNotice.getContent());
- record.setTitle(msgSysMonitorNotice.getTitle());
- }
- }
- }
- return R.ok(msgList);
- }
- @ApiOperation("我的消息-标记已读")
- @PostMapping("readById")
- public R<Boolean> readById(@RequestBody MsgUserMessageDto.ReadOver dto) {
- List<Long> ids = dto.getIds();
- Long loginId = AuthorizeUtils.getLoginId(Long.class);
- List<MsgUserMessage> msgUserMessages = this.list(Wrappers.<MsgUserMessage>lambdaQuery()
- .eq(MsgUserMessage::getUserId, loginId)
- .in(MsgUserMessage::getId, ids)
- .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode()));
- if (CollUtil.isNotEmpty(msgUserMessages)) {
- msgUserMessages.forEach(mum -> {
- mum.setReadState(String.valueOf(MsgReadStatus.READ.getCode()));
- });
- this.saveOrUpdateBatch(msgUserMessages);
- }
- return R.ok(Boolean.TRUE);
- }
- @ApiOperation("我的消息-未读数量")
- @Override
- public R<Long> myMsgUnRead() {
- long count = this.count(Wrappers.<MsgUserMessage>lambdaQuery()
- .eq(MsgUserMessage::getUserId, AuthorizeUtils.getLoginId(Long.class))
- .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode()));
- return R.ok(count);
- }
- @ApiOperation("我的消息-标记全部已读")
- @Override
- public R<Boolean> readAll() {
- Long loginId = AuthorizeUtils.getLoginId(Long.class);
- List<MsgUserMessage> list = this.list(Wrappers.<MsgUserMessage>lambdaQuery()
- .eq(MsgUserMessage::getUserId, loginId)
- .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode()));
- if (CollUtil.isNotEmpty(list)) {
- list.forEach(mum -> {
- mum.setReadState(String.valueOf(MsgReadStatus.READ.getCode()));
- });
- this.saveOrUpdateBatch(list);
- }
- return R.ok(Boolean.TRUE);
- }
- @ApiOperation("我的未读消息统计")
- @Override
- public R<MsgUserMessageDto.PageCount> myMsgPageCount(MsgUserMessageDto.Page page) {
- page.setReadState(MsgReadStatus.UN_READ.getCode().toString());
- page.setType(null);
- Integer allNum = getTotalMsgNum(myMsgPage(page));
- //类型 1故障通知、2交易通知、3其他通知
- page.setType("1");
- Integer riskNum = getTotalMsgNum(myMsgPage(page));
- page.setType("2");
- Integer tradeNum = getTotalMsgNum(myMsgPage(page));
- //其他
- page.setType("3");
- Integer otherNum = getTotalMsgNum(myMsgPage(page));
- //费用
- page.setType("4");
- Integer costNum = getTotalMsgNum(myMsgPage(page));
- MsgUserMessageDto.PageCount pageCount = new MsgUserMessageDto.PageCount()
- .setAllNum(allNum)
- .setOtherNum(otherNum)
- .setRiskNum(riskNum)
- .setCostNum(costNum)
- .setTradeNum(tradeNum);
- return R.ok(pageCount);
- }
- private Integer getTotalMsgNum(R<PageBean<MsgUserMessageDto.PageVO>> pageBeanR) {
- PageBean<MsgUserMessageDto.PageVO> pageBeanRData = pageBeanR.getData();
- Long total = pageBeanRData.getTotal();
- return total.intValue();
- }
- @ApiOperation("我的消息")
- @Override
- public R<PageBean<MsgUserMessageDto.PageVO>> myMsgPage(MsgUserMessageDto.Page page) {
- //类型 1故障通知、2交易通知、3其他通知
- String type = page.getType();
- List<Integer> msgTypes = new ArrayList<>();
- List<Integer> msgTypesNotIn = new ArrayList<>();
- if ("1".equals(type)) {
- msgTypes.add(MsgType.TYPE6.getCode());
- }
- if ("2".equals(type)) {
- msgTypes.add(MsgType.TYPE8.getCode());
- }
- //费用
- if ("4".equals(type)) {
- msgTypes.add(MsgType.TYPE9.getCode());
- }
- if ("3".equals(type)) {
- msgTypesNotIn.add(MsgType.TYPE6.getCode());
- msgTypesNotIn.add(MsgType.TYPE8.getCode());
- }
- page.setUserId(AuthorizeUtils.getLoginId(Long.class));
- PageBean pageBean = page.getPage();
- LambdaQueryWrapper<MsgUserMessage> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, MsgUserMessage.class)
- .ge(MsgUserMessage::getCreateTime, page.getBeginCreateTime())
- .le(MsgUserMessage::getCreateTime, page.getEndCreateTime())
- .build()
- .in(CollUtil.isNotEmpty(msgTypes), MsgUserMessage::getMsgType, msgTypes)
- .notIn(CollUtil.isNotEmpty(msgTypesNotIn), MsgUserMessage::getMsgType, msgTypesNotIn)
- .orderByDesc(MsgUserMessage::getCreateTime);
- IPage<MsgUserMessage> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
- PageBean<MsgUserMessageDto.PageVO> pageVo = toPageBean(MsgUserMessageDto.PageVO.class, iPage);
- List<MsgUserMessageDto.PageVO> records = pageVo.getRecords();
- if (CollUtil.isNotEmpty(records)) {
- List<Integer> msgIds = records.stream().map(MsgUserMessageDto.PageVO::getMsgId).collect(Collectors.toList());
- List<MsgSysMonitorNotice> msgSysMonitorNotices = msgSysMonitorNoticeService.listByIds(msgIds);
- if (CollUtil.isNotEmpty(msgSysMonitorNotices)) {
- Map<Integer, MsgSysMonitorNotice> msgSysMonitorNoticeMap = msgSysMonitorNotices.stream().collect(Collectors.toMap(MsgSysMonitorNotice::getMsgId, i -> i));
- for (MsgUserMessageDto.PageVO record : records) {
- Integer msgId = record.getMsgId();
- MsgSysMonitorNotice msgSysMonitorNotice = msgSysMonitorNoticeMap.get(msgId);
- if (msgSysMonitorNotice != null) {
- record.setContent(msgSysMonitorNotice.getContent());
- record.setTitle(msgSysMonitorNotice.getTitle());
- }
- }
- }
- }
- return R.ok(pageVo);
- }
- @ApiOperation("新增我的消息")
- @Override
- public R save(@RequestBody @Validated MsgUserMessageDto.Save save) {
- MsgUserMessage saveInfo = Beans.copy(MsgUserMessage.class, save);
- save(saveInfo);
- return R.ok();
- }
- @ApiOperation("更新")
- @Override
- public R update(@RequestBody @Validated MsgUserMessageDto.Update update) {
- MsgUserMessage updateInfo = Beans.copy(MsgUserMessage.class, update);
- updateById(updateInfo);
- return R.ok();
- }
- }
|