CommentManager.java 5.42 KB
Newer Older
刘基明's avatar
刘基明 committed
1 2
package com.tanpu.community.manager;

刘基明's avatar
刘基明 committed
3 4
import com.tanpu.common.api.CommonResp;
import com.tanpu.common.exception.BizException;
刘基明's avatar
刘基明 committed
5
import com.tanpu.community.api.beans.qo.CommentQo;
刘基明's avatar
刘基明 committed
6
import com.tanpu.community.api.beans.req.comment.CreateCommentReq;
刘基明's avatar
刘基明 committed
7
import com.tanpu.community.api.beans.req.comment.LikeCommentReq;
8
import com.tanpu.community.api.beans.req.comment.ReportCommentReq;
刘基明's avatar
刘基明 committed
9
import com.tanpu.community.api.beans.vo.feign.fatools.UserInfoNew;
刘基明's avatar
刘基明 committed
10 11
import com.tanpu.community.api.enums.CollectionTypeEnum;
import com.tanpu.community.api.enums.CommentTypeEnum;
刘基明's avatar
刘基明 committed
12
import com.tanpu.community.api.enums.OperationTypeEnum;
13
import com.tanpu.community.api.enums.ReportTypeEnum;
张辰's avatar
张辰 committed
14
import com.tanpu.community.cache.RedisCache;
刘基明's avatar
刘基明 committed
15
import com.tanpu.community.dao.entity.community.CommentEntity;
刘基明's avatar
刘基明 committed
16
import com.tanpu.community.feign.fatools.FeignClientForFatools;
刘基明's avatar
刘基明 committed
17 18
import com.tanpu.community.service.CollectionService;
import com.tanpu.community.service.CommentService;
19
import com.tanpu.community.service.ReportLogService;
刘基明's avatar
刘基明 committed
20
import com.tanpu.community.util.ConvertUtil;
张辰's avatar
张辰 committed
21
import org.apache.commons.lang3.StringUtils;
刘基明's avatar
刘基明 committed
22 23 24
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

刘基明's avatar
刘基明 committed
25
import javax.annotation.Resource;
刘基明's avatar
刘基明 committed
26
import java.util.Comparator;
刘基明's avatar
刘基明 committed
27 28
import java.util.List;
import java.util.Set;
刘基明's avatar
刘基明 committed
29
import java.util.stream.Collectors;
刘基明's avatar
刘基明 committed
30

刘基明's avatar
刘基明 committed
31
import static com.tanpu.community.api.constants.RedisKeyConstant.CACHE_FEIGN_USER_INFO;
张辰's avatar
张辰 committed
32

刘基明's avatar
刘基明 committed
33 34 35 36 37 38 39
@Service
public class CommentManager {

    @Autowired
    private CommentService commentService;

    @Autowired
刘基明's avatar
刘基明 committed
40
    private FeignClientForFatools feignClientForFatools;
刘基明's avatar
刘基明 committed
41 42 43 44

    @Autowired
    private CollectionService collectionService;

刘基明's avatar
刘基明 committed
45
    @Resource
46
    private ReportLogService reportLogService;
刘基明's avatar
刘基明 committed
47

张辰's avatar
张辰 committed
48 49 50
    @Autowired
    private RedisCache redisCache;

刘基明's avatar
刘基明 committed
51
    // 评论(对主题)
刘基明's avatar
刘基明 committed
52
    // 发表评论(对主题)
刘基明's avatar
刘基明 committed
53 54 55 56 57 58
    public void comment(CreateCommentReq req, String userId) {
        CommentEntity commentEntity = CommentEntity.builder()
                .themeId(req.getThemeId())
                .parentId(req.getParentId())
                .replyId(req.getReplyId())
                .authorId(userId)
刘基明's avatar
刘基明 committed
59
                .content(req.getComment())
刘基明's avatar
刘基明 committed
60 61 62 63 64 65
                .commentType(CommentTypeEnum.THEME.getCode())
                .build();

        commentService.insertComment(commentEntity);
    }

刘基明's avatar
刘基明 committed
66
    // 查询评论
刘基明's avatar
刘基明 committed
67
    public List<CommentQo> queryComments(String themeId, String userId) {
刘基明's avatar
刘基明 committed
68 69
        // 因为需要排序,所以从库中查询所有评论
        List<CommentEntity> commentEntities = commentService.selectByThemeId(themeId);
刘基明's avatar
刘基明 committed
70 71 72 73 74
        List<CommentQo> commentQos = ConvertUtil.commentEntity2Qos(commentEntities);

        Set<String> likeCommentList = collectionService.getListByUser(userId, CollectionTypeEnum.LIKE_COMMENT);

        for (CommentQo commentQo : commentQos) {
刘基明's avatar
刘基明 committed
75
            //查询用户信息
刘基明's avatar
刘基明 committed
76
            String authorId = commentQo.getAuthorId();
刘基明's avatar
刘基明 committed
77
            UserInfoNew userInfo = redisCache.getObject(StringUtils.joinWith("_", CACHE_FEIGN_USER_INFO, authorId),
刘基明's avatar
刘基明 committed
78
                    60 * 10, () ->this.getUserInfo(authorId) , UserInfoNew.class);
刘基明's avatar
刘基明 committed
79
            if (userInfo != null) {
刘基明's avatar
刘基明 committed
80 81 82 83 84 85 86
                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());
刘基明's avatar
刘基明 committed
87
            }
刘基明's avatar
刘基明 committed
88 89
            //是否点赞及点赞数
            String commentId = commentQo.getCommentId();
刘基明's avatar
刘基明 committed
90
            commentQo.setHasLiked(likeCommentList.contains(commentId));
刘基明's avatar
刘基明 committed
91
            Integer countByTypeAndId = collectionService.getCountByTypeAndId(commentId, CollectionTypeEnum.LIKE_COMMENT);
刘基明's avatar
刘基明 committed
92 93 94
            commentQo.setLikeCount(countByTypeAndId);

        }
刘基明's avatar
刘基明 committed
95
        //排序:点赞降序+时间降序
刘基明's avatar
刘基明 committed
96 97
        return commentQos.stream().sorted(Comparator.comparing(CommentQo::getLikeCount, Comparator.reverseOrder()).
                thenComparing(CommentQo::getUpdateTime, Comparator.reverseOrder()))
刘基明's avatar
刘基明 committed
98
                .collect(Collectors.toList());
刘基明's avatar
刘基明 committed
99
    }
刘基明's avatar
刘基明 committed
100

刘基明's avatar
刘基明 committed
101 102 103 104 105 106 107 108
    private UserInfoNew getUserInfo(String authorId){
        CommonResp<UserInfoNew> userInfoNewCommonResp = feignClientForFatools.queryUsersListNew(authorId);
        if (userInfoNewCommonResp.isNotSuccess()) {
            throw new BizException("内部接口调用失败");
        }
        return userInfoNewCommonResp.getData();
    }

刘基明's avatar
刘基明 committed
109 110
    //点赞评论/取消点赞
    public void likeComment(LikeCommentReq req, String userId) {
刘基明's avatar
刘基明 committed
111
        if (OperationTypeEnum.CONFIRM.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
112
            collectionService.saveOrUpdate(req.getCommentId(), userId, CollectionTypeEnum.LIKE_COMMENT);
刘基明's avatar
刘基明 committed
113
        } else if (OperationTypeEnum.CANCEL.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
114 115 116 117
            collectionService.delete(req.getCommentId(), userId, CollectionTypeEnum.LIKE_COMMENT);
        }

    }
118 119 120 121 122

    //举报评论
    public void report(ReportCommentReq req, String userId) {
        //更改举报状态
        commentService.updateReportStatus(req.getCommentId());
刘基明's avatar
刘基明 committed
123
        //写入举报记录表
124
        CommentEntity commentEntity = commentService.queryByCommentId(req.getCommentId());
刘基明's avatar
刘基明 committed
125
        reportLogService.insert(ReportTypeEnum.COMMENT, userId, req.getCommentId(), commentEntity.getAuthorId(), req.getReason());
126
    }
刘基明's avatar
刘基明 committed
127
}