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

import com.tanpu.common.exception.BizException;
刘基明's avatar
刘基明 committed
4
import com.tanpu.community.api.beans.TopicDO;
刘基明's avatar
刘基明 committed
5
import com.tanpu.community.api.beans.TopicDataAnalysDTO;
刘基明's avatar
刘基明 committed
6 7
import com.tanpu.community.api.beans.qo.TopicDetailQo;
import com.tanpu.community.api.beans.qo.TopicHotQo;
刘基明's avatar
刘基明 committed
8 9
import com.tanpu.community.api.beans.qo.TopicTitileQo;
import com.tanpu.community.api.beans.req.page.Page;
刘基明's avatar
刘基明 committed
10
import com.tanpu.community.api.beans.req.topic.TopicSearchReq;
刘基明'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
    //新增话题
刘基明's avatar
刘基明 committed
45
    public void insertTopic(String topicTitle, String userId) {
刘基明's avatar
刘基明 committed
46
        if (topicService.queryByTitile(topicTitle) == null) {
刘基明's avatar
刘基明 committed
47 48 49
            topicService.addTopic(topicTitle, userId);
        }
        return;
刘基明's avatar
刘基明 committed
50

刘基明's avatar
刘基明 committed
51
    }
刘基明's avatar
刘基明 committed
52

刘基明's avatar
刘基明 committed
53
    //话题详情列表
刘基明's avatar
刘基明 committed
54
    public List<TopicDO> getAllTopicDetail() {
刘基明's avatar
刘基明 committed
55
        return ConvertUtil.topicEntitiesToDTOs(topicService.queryAll());
刘基明's avatar
刘基明 committed
56 57 58
    }


刘基明's avatar
刘基明 committed
59
    //话题简介列表
刘基明's avatar
刘基明 committed
60 61 62
    public Page<TopicTitileQo> getAllTopicBriefInfo(TopicSearchReq req) {
        List<TopicEntity> allTopic = topicService.queryByKeyword(req.getSearchKeyword());
        List<TopicTitileQo> topicTitileQos = ConvertUtil.topicEntitiesToBriefDTOs(allTopic);
刘基明's avatar
刘基明 committed
63

刘基明's avatar
刘基明 committed
64
        for (TopicTitileQo topicQo : topicTitileQos) {
刘基明's avatar
刘基明 committed
65
            //TODO 讨论数=发布主题贴数+回复总数
刘基明's avatar
刘基明 committed
66 67
//            Integer commentCountByThemeIds = commentService.getCommentCountByThemeIds(themeIds);
            topicQo.setDiscussionCount(0);
刘基明's avatar
刘基明 committed
68
        }
刘基明's avatar
刘基明 committed
69
        //TODO 判断顶置
刘基明's avatar
刘基明 committed
70
        return PageUtils.page(req.getPage(),topicTitileQos);
刘基明's avatar
刘基明 committed
71 72
    }

刘基明's avatar
刘基明 committed
73 74 75 76 77 78 79 80
    public TopicDetailQo getDetail(String topicId) {
        TopicEntity topicEntity = topicService.queryById(topicId);
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
        }
        TopicDetailQo topicDetailQo = new TopicDetailQo();
        BeanUtils.copyProperties(topicEntity,topicDetailQo);
        List<String> themeIds = themeService.queryThemeIdsByTopic(topicId);
81 82 83 84 85
        if (CollectionUtils.isEmpty(themeIds)){
            topicDetailQo.setViewCount(1000);
            topicDetailQo.setDisscussCount(0);
            return topicDetailQo;
        }
刘基明's avatar
刘基明 committed
86 87

        //TODO 浏览量
刘基明's avatar
刘基明 committed
88
        topicDetailQo.setViewCount(1000);
刘基明's avatar
刘基明 committed
89 90 91 92 93 94 95 96 97 98 99
        //讨论数=发布主题贴数+回复总数
        Integer commentCount = commentService.getCommentCountByThemeIds(themeIds);
        topicDetailQo.setDisscussCount(themeIds.size()+commentCount);
        return topicDetailQo;
    }


    public List<TopicHotQo> getHotTopicTitles(){
        List<TopicEntity> topicEntities = topicService.queryAll();
        List<TopicHotQo> topicHotQos = ConvertUtil.topicEntityToHotQos(topicEntities);
        //TODO 添加类型:热 新 顶
刘基明's avatar
刘基明 committed
100 101
        topicHotQos.get(0).setType(1);
        topicHotQos.get(2).setType(2);
刘基明's avatar
刘基明 committed
102 103 104
        return topicHotQos;

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

张辰's avatar
张辰 committed
106 107
    public void setTopTopic(String topicId, boolean setTop) {
        TopicEntity topicEntity = topicService.queryById(topicId);
刘基明's avatar
刘基明 committed
108 109
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
刘基明's avatar
刘基明 committed
110
        }
刘基明's avatar
刘基明 committed
111
        if (setTop) {
刘基明's avatar
刘基明 committed
112
            topicService.updateTopicToTop(topicId);
刘基明's avatar
刘基明 committed
113
        } else {
刘基明's avatar
刘基明 committed
114 115 116 117 118
            topicService.updateTopicNotTop(topicId);
        }
    }

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

刘基明's avatar
刘基明 committed
130

刘基明's avatar
刘基明 committed
131

刘基明's avatar
刘基明 committed
132
    public void modifyViewCount(String topicId, Long modifyMount) {
刘基明's avatar
刘基明 committed
133 134 135 136
        TopicEntity topicEntity = topicService.queryById(topicId);
        if (topicEntity == null) {
            throw new BizException("找不到话题,id:" + topicId);
        }
刘基明's avatar
刘基明 committed
137
        topicService.modifyViewCount(topicId, modifyMount);
刘基明's avatar
刘基明 committed
138
        if (modifyMount > 0) {
刘基明's avatar
刘基明 committed
139
            redisService.incr(RedisKeyConstant.TOPIC_TOTAL_VIEW_COUNT_ + topicId, modifyMount);
刘基明's avatar
刘基明 committed
140
        } else {
刘基明's avatar
刘基明 committed
141
            redisService.decr(RedisKeyConstant.TOPIC_TOTAL_VIEW_COUNT_ + topicId, -modifyMount);
刘基明's avatar
刘基明 committed
142 143 144 145 146
        }

    }


刘基明's avatar
刘基明 committed
147
    public void refreshRedisCache() {
刘基明's avatar
刘基明 committed
148 149
        List<TopicEntity> topicEntities = topicService.queryAll();
        for (TopicEntity topic : topicEntities) {
刘基明's avatar
刘基明 committed
150
            String topicId = topic.getTopicId();
刘基明's avatar
刘基明 committed
151
            Long viewCountModify = topic.getviewCntAdjust();
刘基明's avatar
刘基明 committed
152
            List<String> themeIds = themeService.queryThemeIdsByTopic(topicId);
刘基明's avatar
刘基明 committed
153
            Integer likeCountByThemeIds = collectionService.getCountByTypeAndIds(themeIds, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
154
            Integer bookCountByThemeIds = collectionService.getCountByTypeAndIds(themeIds, CollectionTypeEnum.COLLECT_THEME);
刘基明's avatar
刘基明 committed
155 156 157
            Long commentCountByThemeIds = (long)commentService.getCommentCountByThemeIds(themeIds);
            Set<String> postUsers = themeService.getPostUserCount(themeIds);
            Set<String> commentUsers = commentService.getCommentUserCount(themeIds);
刘基明's avatar
刘基明 committed
158 159
            HashSet<String> totalUsers = new HashSet<>(postUsers);
            totalUsers.addAll(commentUsers);
刘基明's avatar
刘基明 committed
160 161 162
            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
163 164


刘基明's avatar
刘基明 committed
165 166 167 168 169 170
            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
171

刘基明's avatar
刘基明 committed
172

刘基明's avatar
刘基明 committed
173 174 175
        }

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

刘基明's avatar
刘基明 committed
177 178 179 180
    //后台管理:返回数据分析
    public TopicDataAnalysDTO queryDataAnalysis(String topicId) {
        TopicDataAnalysDTO topicDataAnalysDTO = new TopicDataAnalysDTO();
        TopicEntity topicEntity = topicService.queryById(topicId);
刘基明's avatar
刘基明 committed
181 182 183
        if (topicEntity == null) {
            throw new BizException("话题未找到,id:" + topicId);
        }
刘基明's avatar
刘基明 committed
184 185 186
        this.refreshRedisCache();
        topicDataAnalysDTO.setId(topicId);
        topicDataAnalysDTO.setTopicTitle(topicEntity.getTopicTitle());
刘基明's avatar
刘基明 committed
187 188 189 190 191 192 193
        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
194
        return topicDataAnalysDTO;
刘基明's avatar
刘基明 committed
195
    }
刘基明's avatar
刘基明 committed
196
}
刘基明's avatar
刘基明 committed
197