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.UserInfoResp; 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.cache.RedisCache; 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.apache.commons.lang3.StringUtils; 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; import static com.tanpu.community.api.constants.RedisKeyConstant.CACHE_FEIGN_USER_INFO; @Service public class CommentManager { @Autowired private CommentService commentService; @Autowired private FeignClientForFatools feignClientForFatools; @Autowired private CollectionService collectionService; @Resource private ReportLogService reportLogService; @Autowired private RedisCache redisCache; // 评论(对主题) // 发表评论(对主题) 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.selectByThemeId(themeId); List<CommentQo> commentQos = ConvertUtil.commentEntity2Qos(commentEntities); Set<String> likeCommentList = collectionService.getSetByUser(userId, CollectionTypeEnum.LIKE_COMMENT); for (CommentQo commentQo : commentQos) { //查询用户信息 String authorId = commentQo.getAuthorId(); UserInfoResp userInfo = redisCache.getObject(StringUtils.joinWith("_", CACHE_FEIGN_USER_INFO, authorId), 60, () ->this.getUserInfo(authorId) , UserInfoResp.class); 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()); } private UserInfoResp getUserInfo(String authorId){ CommonResp<UserInfoResp> userInfoNewCommonResp = feignClientForFatools.queryUsersListNew(authorId); if (userInfoNewCommonResp.isNotSuccess()) { throw new BizException("内部接口调用失败"); } return userInfoNewCommonResp.getData(); } //点赞评论/取消点赞 public void likeComment(LikeCommentReq req, String userId) { if (OperationTypeEnum.CONFIRM.getCode().equals(req.getType())) { collectionService.saveOrUpdate(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.queryByIdIncludeDelete(req.getCommentId()); reportLogService.insert(ReportTypeEnum.COMMENT, userId, req.getCommentId(), commentEntity.getAuthorId(), req.getReason()); } //删除评论 public void delete(String commentId, String userId) { commentService.delete(commentId,userId); } }