package com.xy.service;
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.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.RequestBody;
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)) {
Long 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("我的消息-未读数量")
@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> myMsgPage(MsgUserMessageDto.Page page) {
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().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();
}
}