TopicManager.java 6.58 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.TopicBriefInfoDTO;
刘基明's avatar
刘基明 committed
5
import com.tanpu.community.api.beans.TopicDTO;
刘基明's avatar
刘基明 committed
6
import com.tanpu.community.api.beans.TopicDataAnalysDTO;
刘基明's avatar
刘基明 committed
7 8 9
import com.tanpu.community.api.constants.RedisKeyConstant;
import com.tanpu.community.api.constants.TopicStatusEnum;
import com.tanpu.community.dao.entity.community.ThemeEntity;
刘基明's avatar
刘基明 committed
10
import com.tanpu.community.dao.entity.community.TopicEntity;
刘基明's avatar
刘基明 committed
11
import com.tanpu.community.service.*;
刘基明's avatar
刘基明 committed
12
import com.tanpu.community.util.ConvertUtil;
刘基明's avatar
刘基明 committed
13 14 15 16
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
刘基明's avatar
刘基明 committed
17
import java.util.stream.Collectors;
刘基明's avatar
刘基明 committed
18 19 20 21 22 23 24

@Service
public class TopicManager {

    @Autowired
    private TopicService topicService;

刘基明's avatar
刘基明 committed
25 26 27 28 29 30 31 32 33 34 35 36
    @Autowired
    private RedisService redisService;

    @Autowired
    private ThemeService themeService;

    @Autowired
    private CollectionService collectionService;

    @Autowired
    private CommentService commentService;

刘基明's avatar
刘基明 committed
37
    public void insertTopic(String topicTitle,String userId){
刘基明's avatar
刘基明 committed
38
        TopicEntity topicEntity = new TopicEntity();
刘基明's avatar
刘基明 committed
39 40
        topicEntity.setCreateBy(userId);
        topicEntity.setUpdateBy(userId);
刘基明's avatar
刘基明 committed
41
        topicEntity.setTopicTitle(topicTitle);
刘基明's avatar
刘基明 committed
42 43
        topicEntity.setIsTop(TopicStatusEnum.FALSE.getCode());
        topicEntity.setIsConceal(TopicStatusEnum.FALSE.getCode());
刘基明's avatar
刘基明 committed
44
        topicEntity.setDeleteTag(TopicStatusEnum.FALSE.getCode());
刘基明's avatar
刘基明 committed
45
        topicService.addTopic(topicEntity);
刘基明's avatar
刘基明 committed
46 47 48
    }


刘基明's avatar
刘基明 committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62
    public List<TopicDTO> getAllTopicDetail() {
        return ConvertUtil.topicEntitiesToDTOs(topicService.queryTopicList());
    }


    public List<TopicBriefInfoDTO> getAllTopicBriefInfo() {
        List<TopicEntity> allTopic = topicService.queryTopicList();
        List<TopicBriefInfoDTO> topicDTOS = ConvertUtil.topicEntitiesToBriefDTOs(allTopic);
        //讨论数=发布主题贴数+回复总数
        for (TopicBriefInfoDTO topicDTO : topicDTOS) {
            Long discussAmount = redisService.getLong(RedisKeyConstant.TOPIC_DISCUSS_AMOUNT_ + topicDTO.getTopicId());
            topicDTO.setDiscussionAmount(discussAmount);
        }
        return topicDTOS;
刘基明's avatar
刘基明 committed
63 64
    }

张辰's avatar
张辰 committed
65 66 67 68
    public void setTopTopic(String topicId, boolean setTop) {
        TopicEntity topicEntity = topicService.queryById(topicId);
        if (topicEntity == null){
            throw new BizException("话题id不正确:" + topicId);
刘基明's avatar
刘基明 committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
        }
        if (setTop){
            topicService.updateTopicToTop(topicId);
        }else {
            topicService.updateTopicNotTop(topicId);
        }
    }

    public void setTopicConceal(String topicId, boolean setConceal) {
        TopicEntity topicEntity= topicService.queryById(topicId);
        if (topicEntity==null){
            throw new BizException("话题id不正确:"+topicId);
        }
        if (setConceal){
            topicService.updateTopicToConceal(topicId);
        }else {
            topicService.updateTopicNotConceal(topicId);
        }
    }
刘基明's avatar
刘基明 committed
88 89 90

    public TopicDTO getDetail(String topicId) {
        TopicEntity topicEntity = topicService.queryById(topicId);
刘基明's avatar
刘基明 committed
91
        TopicDTO topicDTO = ConvertUtil.topicEntityToDTO(topicEntity);
刘基明's avatar
刘基明 committed
92 93 94
        topicDTO.setViewAmount(redisService.getLong(RedisKeyConstant.TOPIC_VIEW_AMOUNT_+topicId));
        topicDTO.setLikeAmount(redisService.getLong(RedisKeyConstant.TOPIC_LIKE_AMOUNT_+topicId));
        topicDTO.setUserAmount(redisService.getLong(RedisKeyConstant.TOPIC_USER_AMOUNT_+topicId));
刘基明's avatar
刘基明 committed
95 96
        return topicDTO;
    }
刘基明's avatar
刘基明 committed
97

刘基明's avatar
刘基明 committed
98 99
    public void modifyViewAmount(String topicId, Long modifyMount) {
        topicService.modifyViewAmount(topicId,modifyMount);
刘基明's avatar
刘基明 committed
100
        if (modifyMount>0){
刘基明's avatar
刘基明 committed
101
            redisService.incr(RedisKeyConstant.TOPIC_TOTAL_VIEW_AMOUNT_+topicId,modifyMount);
刘基明's avatar
刘基明 committed
102
        }else {
刘基明's avatar
刘基明 committed
103
            redisService.decr(RedisKeyConstant.TOPIC_TOTAL_VIEW_AMOUNT_+topicId,-modifyMount);
刘基明's avatar
刘基明 committed
104 105 106 107 108 109
        }

    }



刘基明's avatar
刘基明 committed
110 111

    public void refreshRedisCache(){
刘基明's avatar
刘基明 committed
112 113 114 115 116 117 118 119 120 121
        List<String> topicIds = topicService.queryTopicList().stream().map(TopicEntity::getId).collect(Collectors.toList());
        for (String topicId : topicIds) {
            List<ThemeEntity> themeEntities = themeService.selectByTopic(topicId);
            List<String> themeIds = themeEntities.stream().map(ThemeEntity::getId).collect(Collectors.toList());
            Long likeAmountByThemeIds = collectionService.getLikeAmountByThemeIds(themeIds);
            Long bookAmountByThemeIds = collectionService.getBookAmountByThemeIds(themeIds);
            Long commentAmountByThemeIds = commentService.getCommentAmountByThemeIds(themeIds);
            redisService.set(RedisKeyConstant.TOPIC_LIKE_AMOUNT_+topicId, likeAmountByThemeIds);
            redisService.set(RedisKeyConstant.TOPIC_BOOK_AMOUNT_+topicId, bookAmountByThemeIds);
            redisService.set(RedisKeyConstant.TOPIC_COMMENT_AMOUNT_+topicId, commentAmountByThemeIds);
刘基明's avatar
刘基明 committed
122 123 124 125 126 127 128 129 130 131 132
            redisService.set(RedisKeyConstant.TOPIC_DISCUSS_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());


            redisService.set(RedisKeyConstant.TOPIC_TOTAL_VIEW_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_THEME_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_COMENT_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_TOTAOL_USER_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_DISCUSS_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_POSTER_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());
            redisService.set(RedisKeyConstant.TOPIC_REPLIER_AMOUNT_+topicId, commentAmountByThemeIds+themeIds.size());

刘基明's avatar
刘基明 committed
133 134 135
        }

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

刘基明's avatar
刘基明 committed
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
    //后台管理:返回数据分析
    public TopicDataAnalysDTO queryDataAnalysis(String topicId) {
        TopicDataAnalysDTO topicDataAnalysDTO = new TopicDataAnalysDTO();
        TopicEntity topicEntity = topicService.queryById(topicId);
        this.refreshRedisCache();
        topicDataAnalysDTO.setId(topicId);
        topicDataAnalysDTO.setTopicTitle(topicEntity.getTopicTitle());
//        topicDataAnalysDTO.setCommentAmount();
//        topicDataAnalysDTO.setPosterAmount();
//        topicDataAnalysDTO.setReplIierAmount();
//        topicDataAnalysDTO.setThemeAmount();
//        topicDataAnalysDTO.setUserTotalAmount();
//        topicDataAnalysDTO.setViewTotalAmount();
//        topicDataAnalysDTO.setViewPageAmount();
//        topicDataAnalysDTO.setCommentAmount();
        return topicDataAnalysDTO;
刘基明's avatar
刘基明 committed
153
    }
刘基明's avatar
刘基明 committed
154
}
刘基明's avatar
刘基明 committed
155