CommentManager.java 4.9 KB
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());
    }
}