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; /** *

* 服务实现类 *

* * @author 谭斌 * @since 2023-02-24 */ @Service @AllArgsConstructor @Api(tags = "用户消息") public class MsgUserMessageServiceImpl extends ServiceImpl implements MsgUserMessageService { private MsgSysMonitorNoticeServiceImpl msgSysMonitorNoticeService; @Override @ApiOperation("消息详情") public R obj(MsgUserMessageDto.Vo vo) { MsgUserMessageDto.SelectList selectList = copy(MsgUserMessageDto.SelectList.class, vo); List 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.SelectList selectList) { LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MsgUserMessage.class).build(); List list = list(lambdaQueryWrapper); return R.ok(copy(MsgUserMessageDto.Vo.class, list)); } @ApiOperation("我的消息-弹窗提示") @PostMapping("myMsgPopUp") public R> myMsgPopUp() { List voList = new ArrayList<>(); LambdaQueryWrapper 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 list = this.list(lambdaQueryWrapper); if (CollUtil.isEmpty(list)) { return R.ok(voList); } List msgList = BeanUtil.copyToList(list, MsgUserMessageDto.Vo.class); List msgIds = list.stream().map(MsgUserMessage::getMsgId).collect(Collectors.toList()); List msgSysMonitorNotices = msgSysMonitorNoticeService.listByIds(msgIds); if (CollUtil.isNotEmpty(msgSysMonitorNotices)) { Map 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 readById(@RequestBody MsgUserMessageDto.ReadOver dto) { List ids = dto.getIds(); Long loginId = AuthorizeUtils.getLoginId(Long.class); List msgUserMessages = this.list(Wrappers.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 myMsgUnRead() { long count = this.count(Wrappers.lambdaQuery() .eq(MsgUserMessage::getUserId, AuthorizeUtils.getLoginId(Long.class)) .eq(MsgUserMessage::getReadState, MsgReadStatus.UN_READ.getCode())); return R.ok(count); } @ApiOperation("我的消息-标记全部已读") @Override public R readAll() { Long loginId = AuthorizeUtils.getLoginId(Long.class); List list = this.list(Wrappers.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 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> pageBeanR) { PageBean pageBeanRData = pageBeanR.getData(); Long total = pageBeanRData.getTotal(); return total.intValue(); } @ApiOperation("我的消息") @Override public R> myMsgPage(MsgUserMessageDto.Page page) { //类型 1故障通知、2交易通知、3其他通知 String type = page.getType(); List msgTypes = new ArrayList<>(); List 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 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 iPage = page(toIPage(pageBean), lambdaQueryWrapper); PageBean pageVo = toPageBean(MsgUserMessageDto.PageVO.class, iPage); List records = pageVo.getRecords(); if (CollUtil.isNotEmpty(records)) { List msgIds = records.stream().map(MsgUserMessageDto.PageVO::getMsgId).collect(Collectors.toList()); List msgSysMonitorNotices = msgSysMonitorNoticeService.listByIds(msgIds); if (CollUtil.isNotEmpty(msgSysMonitorNotices)) { Map 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(); } }