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

import com.tanpu.common.exception.BizException;
刘基明's avatar
刘基明 committed
4 5
import com.tanpu.community.api.beans.qo.TopicDetailQo;
import com.tanpu.community.api.beans.qo.TopicHotQo;
刘基明's avatar
刘基明 committed
6 7
import com.tanpu.community.api.beans.qo.TopicTitileQo;
import com.tanpu.community.api.beans.req.page.Page;
刘基明's avatar
刘基明 committed
8
import com.tanpu.community.api.beans.req.topic.TopicSearchReq;
刘基明's avatar
刘基明 committed
9 10
import com.tanpu.community.api.beans.vo.TopicDTO;
import com.tanpu.community.api.beans.vo.TopicDataAnalysDTO;
刘基明's avatar
刘基明 committed
11
import com.tanpu.community.api.constants.RedisKeyConstant;
刘基明's avatar
刘基明 committed
12
import com.tanpu.community.api.enums.CollectionTypeEnum;
刘基明's avatar
刘基明 committed
13
import com.tanpu.community.dao.entity.community.TopicEntity;
刘基明's avatar
刘基明 committed
14
import com.tanpu.community.service.*;
刘基明's avatar
刘基明 committed
15
import com.tanpu.community.util.ConvertUtil;
刘基明's avatar
刘基明 committed
16
import com.tanpu.community.util.PageUtils;
17
import org.apache.commons.collections4.CollectionUtils;
刘基明's avatar
刘基明 committed
18
import org.springframework.beans.BeanUtils;
刘基明's avatar
刘基明 committed
19 20 21
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

刘基明's avatar
刘基明 committed
22
import java.util.HashSet;
刘基明's avatar
刘基明 committed
23
import java.util.List;
刘基明's avatar
刘基明 committed
24
import java.util.Set;
刘基明's avatar
刘基明 committed
25 26 27 28 29 30 31

@Service
public class TopicManager {

    @Autowired
    private TopicService topicService;

刘基明's avatar
刘基明 committed
32 33 34 35 36 37 38 39 40 41 42 43
    @Autowired
    private RedisService redisService;

    @Autowired
    private ThemeService themeService;

    @Autowired
    private CollectionService collectionService;

    @Autowired
    private CommentService commentService;

刘基明's avatar
刘基明 committed
44 45
    @Autowired
    private VisitSummaryService visitSummaryService;
刘基明's avatar
刘基明 committed
46 47
    @Autowired
    private RankService rankService;
刘基明's avatar
刘基明 committed
48

刘基明's avatar
刘基明 committed
49
    //新增话题
刘基明's avatar
刘基明 committed
50
    public void insertTopic(String topicTitle, String userId) {
刘基明's avatar
刘基明 committed
51
        if (topicService.queryByTitile(topicTitle) == null) {
刘基明's avatar
刘基明 committed
52 53 54
            topicService.addTopic(topicTitle, userId);
        }
        return;
刘基明's avatar
刘基明 committed
55

刘基明's avatar
刘基明 committed
56
    }
刘基明's avatar
刘基明 committed
57

刘基明's avatar
刘基明 committed
58
    //话题详情列表
张辰's avatar
张辰 committed
59
    public List<TopicDTO> getAllTopicDetail() {
刘基明's avatar
刘基明 committed
60
        return ConvertUtil.topicEntitiesToDTOs(topicService.queryAll());
刘基明's avatar
刘基明 committed
61 62 63
    }


刘基明's avatar
刘基明 committed
64
    //话题简介列表
刘基明's avatar
刘基明 committed
65 66 67
    public Page<TopicTitileQo> getAllTopicBriefInfo(TopicSearchReq req) {
        List<TopicEntity> allTopic = topicService.queryByKeyword(req.getSearchKeyword());
        List<TopicTitileQo> topicTitileQos = ConvertUtil.topicEntitiesToBriefDTOs(allTopic);
刘基明's avatar
刘基明 committed
68

刘基明's avatar
刘基明 committed
69
        for (TopicTitileQo topicQo : topicTitileQos) {
刘基明's avatar
刘基明 committed
70 71 72
            //讨论数=发布主题贴数+回复总数
            List<String> themeIds = themeService.queryThemeIdsByTopic(topicQo.getTopicId());
            Integer commentCount = commentService.getCommentCountByThemeIds(themeIds);
刘基明's avatar
刘基明 committed
73 74 75 76 77
            topicQo.setDiscussionCount(String.valueOf(themeIds.size() + commentCount));
            //浏览量
            Integer topicPV = visitSummaryService.queryTopicDetailVisit(topicQo.getTopicId());
            Integer themePV = visitSummaryService.queryThemeVisit(themeIds);
            topicQo.setViewCount(String.valueOf(topicPV + themePV));
刘基明's avatar
刘基明 committed
78
        }
刘基明's avatar
刘基明 committed
79
        //TODO 判断顶置
刘基明's avatar
刘基明 committed
80
        return PageUtils.page(req.getPage(), topicTitileQos);
刘基明's avatar
刘基明 committed
81 82
    }

刘基明's avatar
刘基明 committed
83
    //话题详情页
刘基明's avatar
刘基明 committed
84 85 86 87 88 89
    public TopicDetailQo getDetail(String topicId) {
        TopicEntity topicEntity = topicService.queryById(topicId);
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
        }
        TopicDetailQo topicDetailQo = new TopicDetailQo();
刘基明's avatar
刘基明 committed
90
        BeanUtils.copyProperties(topicEntity, topicDetailQo);
刘基明's avatar
刘基明 committed
91
        List<String> themeIds = themeService.queryThemeIdsByTopic(topicId);
刘基明's avatar
刘基明 committed
92 93
        if (CollectionUtils.isEmpty(themeIds)) {
            topicDetailQo.setViewCount(visitSummaryService.queryTopicDetailVisit(topicId));
94 95 96
            topicDetailQo.setDisscussCount(0);
            return topicDetailQo;
        }
刘基明's avatar
刘基明 committed
97

刘基明's avatar
刘基明 committed
98 99 100 101
        //浏览量
        Integer topicPV = visitSummaryService.queryTopicDetailVisit(topicId);
        Integer themePV = visitSummaryService.queryThemeVisit(themeIds);
        topicDetailQo.setViewCount(topicPV + themePV);
刘基明's avatar
刘基明 committed
102 103
        //讨论数=发布主题贴数+回复总数
        Integer commentCount = commentService.getCommentCountByThemeIds(themeIds);
刘基明's avatar
刘基明 committed
104
        topicDetailQo.setDisscussCount(themeIds.size() + commentCount);
刘基明's avatar
刘基明 committed
105 106 107 108
        return topicDetailQo;
    }


刘基明's avatar
刘基明 committed
109
    public List<TopicHotQo> getHotTopicTitles() {
刘基明's avatar
刘基明 committed
110 111 112 113 114
        List<TopicHotQo> rankTopicList = rankService.rankTopicList;
        if (rankTopicList.size()==0){
            rankService.rankTopics();
        }
        return rankService.rankTopicList;
刘基明's avatar
刘基明 committed
115
    }
刘基明's avatar
刘基明 committed
116

张辰's avatar
张辰 committed
117 118
    public void setTopTopic(String topicId, boolean setTop) {
        TopicEntity topicEntity = topicService.queryById(topicId);
刘基明's avatar
刘基明 committed
119 120
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
刘基明's avatar
刘基明 committed
121
        }
刘基明's avatar
刘基明 committed
122
        if (setTop) {
刘基明's avatar
刘基明 committed
123
            topicService.updateTopicToTop(topicId);
刘基明's avatar
刘基明 committed
124
        } else {
刘基明's avatar
刘基明 committed
125 126 127 128 129
            topicService.updateTopicNotTop(topicId);
        }
    }

    public void setTopicConceal(String topicId, boolean setConceal) {
刘基明's avatar
刘基明 committed
130 131 132
        TopicEntity topicEntity = topicService.queryById(topicId);
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
刘基明's avatar
刘基明 committed
133
        }
刘基明's avatar
刘基明 committed
134
        if (setConceal) {
刘基明's avatar
刘基明 committed
135
            topicService.updateTopicToConceal(topicId);
刘基明's avatar
刘基明 committed
136
        } else {
刘基明's avatar
刘基明 committed
137 138 139
            topicService.updateTopicNotConceal(topicId);
        }
    }
刘基明's avatar
刘基明 committed
140

刘基明's avatar
刘基明 committed
141

刘基明's avatar
刘基明 committed
142
    public void modifyViewCount(String topicId, Long modifyMount) {
刘基明's avatar
刘基明 committed
143 144 145 146
        TopicEntity topicEntity = topicService.queryById(topicId);
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
        }
刘基明's avatar
刘基明 committed
147
        topicService.modifyViewCount(topicId, modifyMount);
刘基明's avatar
刘基明 committed
148
        if (modifyMount > 0) {
刘基明's avatar
刘基明 committed
149
            redisService.incr(RedisKeyConstant.TOPIC_TOTAL_VIEW_COUNT_ + topicId, modifyMount);
刘基明's avatar
刘基明 committed
150
        } else {
刘基明's avatar
刘基明 committed
151
            redisService.decr(RedisKeyConstant.TOPIC_TOTAL_VIEW_COUNT_ + topicId, -modifyMount);
刘基明's avatar
刘基明 committed
152 153 154 155 156
        }

    }


刘基明's avatar
刘基明 committed
157
    public void refreshRedisCache() {
刘基明's avatar
刘基明 committed
158 159
        List<TopicEntity> topicEntities = topicService.queryAll();
        for (TopicEntity topic : topicEntities) {
刘基明's avatar
刘基明 committed
160
            String topicId = topic.getTopicId();
刘基明's avatar
刘基明 committed
161
            Long viewCountModify = topic.getviewCntAdjust();
刘基明's avatar
刘基明 committed
162
            List<String> themeIds = themeService.queryThemeIdsByTopic(topicId);
刘基明's avatar
刘基明 committed
163
            Integer likeCountByThemeIds = collectionService.getCountByTypeAndIds(themeIds, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
164
            Integer bookCountByThemeIds = collectionService.getCountByTypeAndIds(themeIds, CollectionTypeEnum.COLLECT_THEME);
刘基明's avatar
刘基明 committed
165
            Long commentCountByThemeIds = (long) commentService.getCommentCountByThemeIds(themeIds);
刘基明's avatar
刘基明 committed
166 167
            Set<String> postUsers = themeService.getPostUserCount(themeIds);
            Set<String> commentUsers = commentService.getCommentUserCount(themeIds);
刘基明's avatar
刘基明 committed
168 169
            HashSet<String> totalUsers = new HashSet<>(postUsers);
            totalUsers.addAll(commentUsers);
刘基明's avatar
刘基明 committed
170 171 172
            redisService.set(RedisKeyConstant.TOPIC_LIKE_COUNT_ + topicId, likeCountByThemeIds);
            redisService.set(RedisKeyConstant.TOPIC_BOOK_COUNT_ + topicId, bookCountByThemeIds);
            redisService.set(RedisKeyConstant.TOPIC_COMMENT_COUNT_ + topicId, commentCountByThemeIds);
刘基明's avatar
刘基明 committed
173 174


刘基明's avatar
刘基明 committed
175 176 177 178 179 180
            redisService.set(RedisKeyConstant.TOPIC_TOTAL_VIEW_COUNT_ + topicId, commentCountByThemeIds + themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_THEME_COUNT_ + topicId, commentCountByThemeIds + themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_DISCUSS_COUNT_ + topicId, commentCountByThemeIds + themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_POST_USER_COUNT_ + topicId, (long) postUsers.size());
            redisService.set(RedisKeyConstant.TOPIC_COMMENT_USER_COUNT_ + topicId, (long) commentUsers.size());
            redisService.set(RedisKeyConstant.TOPIC_TOTAL_USER_COUNT_ + topicId, (long) totalUsers.size());
刘基明's avatar
刘基明 committed
181

刘基明's avatar
刘基明 committed
182

刘基明's avatar
刘基明 committed
183 184 185
        }

    }
刘基明's avatar
刘基明 committed
186

刘基明's avatar
刘基明 committed
187 188 189 190
    //后台管理:返回数据分析
    public TopicDataAnalysDTO queryDataAnalysis(String topicId) {
        TopicDataAnalysDTO topicDataAnalysDTO = new TopicDataAnalysDTO();
        TopicEntity topicEntity = topicService.queryById(topicId);
刘基明's avatar
刘基明 committed
191 192 193
        if (topicEntity == null) {
            throw new BizException("话题未找到,id:" + topicId);
        }
刘基明's avatar
刘基明 committed
194 195 196
        this.refreshRedisCache();
        topicDataAnalysDTO.setId(topicId);
        topicDataAnalysDTO.setTopicTitle(topicEntity.getTopicTitle());
刘基明's avatar
刘基明 committed
197 198 199 200 201 202 203
        topicDataAnalysDTO.setCommentCount(redisService.getInteger(RedisKeyConstant.TOPIC_COMMENT_COUNT_ + topicId));
        topicDataAnalysDTO.setPosterCount(redisService.getInteger(RedisKeyConstant.TOPIC_POST_USER_COUNT_ + topicId));
        topicDataAnalysDTO.setReplIierCount(redisService.getInteger(RedisKeyConstant.TOPIC_COMMENT_USER_COUNT_ + topicId));
        topicDataAnalysDTO.setThemeCount(redisService.getInteger(RedisKeyConstant.TOPIC_THEME_COUNT_ + topicId));
        topicDataAnalysDTO.setUserTotalCount(redisService.getInteger(RedisKeyConstant.TOPIC_TOTAL_USER_COUNT_ + topicId));
        topicDataAnalysDTO.setViewTotalCount(redisService.getInteger(RedisKeyConstant.TOPIC_TOTAL_VIEW_COUNT_ + topicId));
        topicDataAnalysDTO.setViewPageCount(redisService.getInteger(RedisKeyConstant.TOPIC_PAGE_VIEW_COUNT_ + topicId));
刘基明's avatar
刘基明 committed
204
        return topicDataAnalysDTO;
刘基明's avatar
刘基明 committed
205
    }
刘基明's avatar
刘基明 committed
206
}
刘基明's avatar
刘基明 committed
207