package com.ruoyi.article.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.article.controller.forepart.dto.ArticleCommentsDTO; import com.ruoyi.article.controller.management.dto.MgtArticleCommentsQuery; import com.ruoyi.article.controller.management.vo.MgtArticleCommentsVO; import com.ruoyi.article.domain.Article; import com.ruoyi.article.domain.ArticleComments; import com.ruoyi.article.mapper.ArticleCommentsMapper; import com.ruoyi.article.mapper.ArticleMapper; import com.ruoyi.article.service.IArticleCommentsService; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.dto.MemberDTO; import com.ruoyi.system.api.feignClient.MemberClient; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** *

* 资讯评论回复表 服务实现类 *

* * @author mitao * @since 2024-05-16 */ @Service public class ArticleCommentsServiceImpl extends ServiceImpl implements IArticleCommentsService { @Resource private ArticleMapper articleMapper; @Resource private MemberClient memberClient; @Override public void saveMemberArticleComments(ArticleCommentsDTO articleCommentsDTO) { ArticleComments articleComments=new ArticleComments(); if (articleCommentsDTO.getId()!=null){ articleComments= this.getById(articleCommentsDTO.getId()); } if (articleCommentsDTO.getMemberId()==null){ throw new ServiceException("用户id错误"); } if (articleCommentsDTO.getType()==1){ articleComments.setMemberId(articleCommentsDTO.getMemberId()); articleComments.setArticleId(articleCommentsDTO.getArticleId()); articleComments.setContent(articleCommentsDTO.getContent()); articleComments.setState(articleCommentsDTO.getState()); articleComments.setType(1); }else{ articleComments.setMemberId(articleCommentsDTO.getMemberId()); articleComments.setArticleId(articleCommentsDTO.getArticleId()); articleComments.setReplyId(articleCommentsDTO.getReplyId()); articleComments.setContent(articleCommentsDTO.getContent()); articleComments.setBmemberId(articleCommentsDTO.getBmemberId()); articleComments.setState(articleCommentsDTO.getState()); articleComments.setType(2); } Article byId = articleMapper.selectById(articleCommentsDTO.getArticleId()); byId.setCommentCount(byId.getCommentCount()+1); articleMapper.updateById(byId); this.saveOrUpdate(articleComments); } @Override public void delMemberArticleComments(ArticleCommentsDTO articleCommentsDTO) { ArticleComments byId1 = this.getById(articleCommentsDTO.getId()); Article byId = articleMapper.selectById(byId1.getArticleId()); byId.setCommentCount(byId.getCommentCount()-1); articleMapper.updateById(byId); this.removeById(articleCommentsDTO.getId()); } /** * 查看详情-评论详情 * * @param query 资讯评论回复查询对象 * @return PageDTO */ @Override public PageDTO getArticleCommentsPage(MgtArticleCommentsQuery query) { PageDTO result; Set memberIdSet = null; Page page = new Page<>(query.getPageCurr(), query.getPageSize()); if (StringUtils.isNotBlank(query.getNickname())) { MemberDTO memberDTO = new MemberDTO(); memberDTO.setNickname(query.getNickname()); List data = memberClient.getMemberListByCondition(memberDTO, SecurityConstants.INNER).getData(); if (StringUtils.isEmpty(data)) { // 搜索结果为空,直接返回空 return PageDTO.empty(page); } memberIdSet = data.stream().map(Member::getId).collect(Collectors.toSet()); } page = this.lambdaQuery() .eq(ArticleComments::getArticleId, query.getArticleId()) .in(StringUtils.isNotEmpty(memberIdSet), ArticleComments::getMemberId, memberIdSet) .orderByDesc(ArticleComments::getCreateTime) .page(new Page<>(query.getPageCurr(), query.getPageSize())); if (StringUtils.isEmpty(page.getRecords())) { result = PageDTO.empty(page); } else { PageDTO pageVO = PageDTO.of(page, MgtArticleCommentsVO.class);// 获取会员信息 Set memIdSet = pageVO.getList().stream().map(MgtArticleCommentsVO::getMemberId) .collect(Collectors.toSet()); List memberList = memberClient.getMemberListByIds(memIdSet, SecurityConstants.INNER).getData(); Map memberMap = memberList.stream() .collect(Collectors.toMap(Member::getId, Function.identity())); pageVO.getList().forEach(item -> { Member member = memberMap.get(item.getMemberId()); if (StringUtils.isNotNull(member)) { item.setNickname(member.getNickname()); item.setPhone(member.getPhone()); } }); result = pageVO; } return result; } @Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void delArticleComments(Long id) { ArticleComments articleComments = this.getById(id); if (StringUtils.isNull(articleComments)) { throw new ServiceException("评论不存在"); } // 查询资讯 Article article = articleMapper.selectById(articleComments.getArticleId()); if (articleComments.getType() == 2) { this.removeById(id); article.setCommentCount(Math.max(article.getCommentCount() - 1, 0)); } else if (articleComments.getType() == 1) { List list = this.lambdaQuery().eq(ArticleComments::getReplyId, id) .list(); List commentsIds = list.stream().map(ArticleComments::getId) .collect(Collectors.toList()); commentsIds.add(articleComments.getId()); this.removeByIds(commentsIds); article.setCommentCount(Math.max((article.getCommentCount() - list.size()), 0)); } articleMapper.updateById(article); } }