package com.tanpu.community.manager; import com.tanpu.common.api.CommonResp; import com.tanpu.common.exception.BizException; import com.tanpu.community.api.beans.qo.CommentQo; import com.tanpu.community.api.beans.req.comment.CreateCommentReq; import com.tanpu.community.api.beans.req.comment.LikeCommentReq; import com.tanpu.community.api.beans.req.comment.ReportCommentReq; import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoNew; import com.tanpu.community.api.enums.CollectionTypeEnum; import com.tanpu.community.api.enums.CommentTypeEnum; import com.tanpu.community.api.enums.OperationTypeEnum; import com.tanpu.community.api.enums.ReportTypeEnum; import com.tanpu.community.dao.entity.community.CommentEntity; import com.tanpu.community.feign.fatools.FeignClientForFatools; import com.tanpu.community.service.CollectionService; import com.tanpu.community.service.CommentService; import com.tanpu.community.service.ReportLogService; import com.tanpu.community.util.ConvertUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @Service public class CommentManager { @Autowired private CommentService commentService; @Autowired private FeignClientForFatools feignClientForFatools; @Autowired private CollectionService collectionService; @Resource private ReportLogService reportLogService; // 发表评论(对主题) public void comment(CreateCommentReq req, String userId) { CommentEntity commentEntity = CommentEntity.builder() .themeId(req.getThemeId()) .parentId(req.getParentId()) .replyId(req.getReplyId()) .authorId(userId) .content(req.getComment()) .commentType(CommentTypeEnum.THEME.getCode()) .build(); commentService.insertComment(commentEntity); } //查询评论 public List<CommentQo> queryComments(String themeId, String userId) { List<CommentEntity> commentEntities = commentService.selectByThemeIdAndParentId(themeId, null); List<CommentQo> commentQos = ConvertUtil.commentEntity2Qos(commentEntities); Set<String> likeCommentList = collectionService.getListByUser(userId, CollectionTypeEnum.LIKE_COMMENT); for (CommentQo commentQo : commentQos) { //查询用户信息 String authorId = commentQo.getAuthorId(); CommonResp<UserInfoNew> userInfoNewCommonResp = feignClientForFatools.queryUsersListNew(authorId); if (userInfoNewCommonResp.isNotSuccess()) { throw new BizException("内部接口调用失败"); } UserInfoNew userInfo = userInfoNewCommonResp.getData(); if (userInfo != null) { commentQo.setUserImg(userInfo.getHeadImageUrl()); commentQo.setNickName(userInfo.getNickName()); commentQo.setUserType(userInfo.getUserType()); commentQo.setLevelGrade(userInfo.getLevelGrade()); commentQo.setUserInvestorType(userInfo.getUserInvestorType()); commentQo.setBelongUserOrgId(userInfo.getBelongUserOrgId()); commentQo.setBelongUserOrgName(userInfo.getBelongUserOrgName()); } //是否点赞及点赞数 String commentId = commentQo.getCommentId(); commentQo.setHasLiked(likeCommentList.contains(commentId)); Integer countByTypeAndId = collectionService.getCountByTypeAndId(commentId, CollectionTypeEnum.LIKE_COMMENT); commentQo.setLikeCount(countByTypeAndId); } //排序:点赞降序+时间降序 return commentQos.stream().sorted(Comparator.comparing(CommentQo::getLikeCount, Comparator.reverseOrder()). thenComparing(CommentQo::getUpdateTime, Comparator.reverseOrder())) .collect(Collectors.toList()); } //点赞评论/取消点赞 public void likeComment(LikeCommentReq req, String userId) { if (OperationTypeEnum.CONFIRM.getCode().equals(req.getType())) { collectionService.addIfNotExist(req.getCommentId(), userId, CollectionTypeEnum.LIKE_COMMENT); } else if (OperationTypeEnum.CANCEL.getCode().equals(req.getType())) { collectionService.delete(req.getCommentId(), userId, CollectionTypeEnum.LIKE_COMMENT); } } //举报评论 public void report(ReportCommentReq req, String userId) { //更改举报状态 commentService.updateReportStatus(req.getCommentId()); //写入举报记录表 CommentEntity commentEntity = commentService.queryByCommentId(req.getCommentId()); reportLogService.insert(ReportTypeEnum.COMMENT, userId, req.getCommentId(), commentEntity.getAuthorId(), req.getReason()); } }