package com.aurora.service.impl; import com.alibaba.fastjson.JSON; import com.aurora.enums.CommentTypeEnum; import com.aurora.model.dto.CommentCountDTO; import com.aurora.model.dto.TalkAdminDTO; import com.aurora.model.dto.TalkDTO; import com.aurora.entity.Talk; import com.aurora.exception.BizException; import com.aurora.mapper.CommentMapper; import com.aurora.mapper.TalkMapper; import com.aurora.service.TalkService; import com.aurora.util.BeanCopyUtil; import com.aurora.util.CommonUtil; import com.aurora.util.PageUtil; import com.aurora.util.UserUtil; import com.aurora.model.vo.ConditionVO; import com.aurora.model.dto.PageResultDTO; import com.aurora.model.vo.TalkVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import static com.aurora.enums.TalkStatusEnum.PUBLIC; @Service public class TalkServiceImpl extends ServiceImpl implements TalkService { @Autowired private TalkMapper talkMapper; @Autowired private CommentMapper commentMapper; @Override public PageResultDTO listTalks() { Integer count = talkMapper.selectCount((new LambdaQueryWrapper() .eq(Talk::getStatus, PUBLIC.getStatus()))); if (count == 0) { return new PageResultDTO<>(); } List talkDTOs = talkMapper.listTalks(PageUtil.getLimitCurrent(), PageUtil.getSize()); List talkIds = talkDTOs.stream() .map(TalkDTO::getId) .collect(Collectors.toList()); Map commentCountMap = commentMapper.listCommentCountByTypeAndTopicIds(CommentTypeEnum.TALK.getType(), talkIds) .stream() .collect(Collectors.toMap(CommentCountDTO::getId, CommentCountDTO::getCommentCount)); talkDTOs.forEach(item -> { item.setCommentCount(commentCountMap.get(item.getId())); if (Objects.nonNull(item.getImages())) { item.setImgs(CommonUtil.castList(JSON.parseObject(item.getImages(), List.class), String.class)); } }); return new PageResultDTO<>(talkDTOs, count); } @Override public TalkDTO getTalkById(Integer talkId) { TalkDTO talkDTO = talkMapper.getTalkById(talkId); if (Objects.isNull(talkDTO)) { throw new BizException("说说不存在"); } if (Objects.nonNull(talkDTO.getImages())) { talkDTO.setImgs(CommonUtil.castList(JSON.parseObject(talkDTO.getImages(), List.class), String.class)); } CommentCountDTO commentCountDTO = commentMapper.listCommentCountByTypeAndTopicId(CommentTypeEnum.TALK.getType(), talkId); if (Objects.nonNull(commentCountDTO)) { talkDTO.setCommentCount(commentCountDTO.getCommentCount()); } return talkDTO; } @Override public void saveOrUpdateTalk(TalkVO talkVO) { Talk talk = BeanCopyUtil.copyObject(talkVO, Talk.class); talk.setUserId(UserUtil.getUserDetailsDTO().getUserInfoId()); this.saveOrUpdate(talk); } @Override public void deleteTalks(List talkIds) { talkMapper.deleteBatchIds(talkIds); } @Override public PageResultDTO listBackTalks(ConditionVO conditionVO) { Integer count = talkMapper.selectCount(new LambdaQueryWrapper() .eq(Objects.nonNull(conditionVO.getStatus()), Talk::getStatus, conditionVO.getStatus())); if (count == 0) { return new PageResultDTO<>(); } List talkDTOs = talkMapper.listTalksAdmin(PageUtil.getLimitCurrent(), PageUtil.getSize(), conditionVO); talkDTOs.forEach(item -> { if (Objects.nonNull(item.getImages())) { item.setImgs(CommonUtil.castList(JSON.parseObject(item.getImages(), List.class), String.class)); } }); return new PageResultDTO<>(talkDTOs, count); } @Override public TalkAdminDTO getBackTalkById(Integer talkId) { TalkAdminDTO talkBackDTO = talkMapper.getTalkByIdAdmin(talkId); if (Objects.nonNull(talkBackDTO.getImages())) { talkBackDTO.setImgs(CommonUtil.castList(JSON.parseObject(talkBackDTO.getImages(), List.class), String.class)); } return talkBackDTO; } }