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

刘基明's avatar
刘基明 committed
3
import com.tanpu.common.exception.BizException;
刘基明's avatar
刘基明 committed
4
import com.tanpu.common.util.JsonUtil;
张辰's avatar
张辰 committed
5
import com.tanpu.community.api.beans.qo.ESThemeQo;
刘基明's avatar
刘基明 committed
6
import com.tanpu.community.api.beans.qo.FormerThemeQo;
刘基明's avatar
刘基明 committed
7
import com.tanpu.community.api.beans.qo.ThemeContentQo;
刘基明's avatar
刘基明 committed
8
import com.tanpu.community.api.beans.qo.ThemeQo;
刘基明's avatar
刘基明 committed
9
import com.tanpu.community.api.beans.req.homepage.QueryRecordThemeReq;
刘基明's avatar
刘基明 committed
10
import com.tanpu.community.api.beans.req.theme.*;
刘基明's avatar
刘基明 committed
11
import com.tanpu.community.api.beans.resp.CreateThemeResp;
张辰's avatar
张辰 committed
12
import com.tanpu.community.api.beans.resp.ThemeFullSearchResp;
刘基明's avatar
刘基明 committed
13
import com.tanpu.community.api.enums.*;
刘基明's avatar
刘基明 committed
14
import com.tanpu.community.dao.entity.community.*;
刘基明's avatar
刘基明 committed
15
import com.tanpu.community.dao.entity.user.UserInfoEntity;
刘基明's avatar
刘基明 committed
16
import com.tanpu.community.service.*;
张辰's avatar
张辰 committed
17
import com.tanpu.community.service.base.ESService;
18
import com.tanpu.community.util.ConvertUtil;
张辰's avatar
张辰 committed
19
import lombok.extern.slf4j.Slf4j;
刘基明's avatar
刘基明 committed
20
import org.apache.commons.collections4.CollectionUtils;
刘基明's avatar
刘基明 committed
21
import org.apache.commons.lang3.StringUtils;
张辰's avatar
张辰 committed
22
import org.apache.commons.lang3.exception.ExceptionUtils;
刘基明's avatar
刘基明 committed
23
import org.springframework.beans.BeanUtils;
刘基明's avatar
刘基明 committed
24 25
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
刘基明's avatar
刘基明 committed
26
import org.springframework.transaction.annotation.Transactional;
刘基明's avatar
刘基明 committed
27

刘基明's avatar
刘基明 committed
28
import javax.annotation.Resource;
刘基明's avatar
刘基明 committed
29
import java.time.LocalDateTime;
刘基明's avatar
刘基明 committed
30 31
import java.util.*;
import java.util.stream.Collectors;
刘基明's avatar
刘基明 committed
32

张辰's avatar
张辰 committed
33
@Slf4j
刘基明's avatar
刘基明 committed
34 35
@Service
public class ThemeManager {
刘基明's avatar
刘基明 committed
36
    @Resource
刘基明's avatar
刘基明 committed
37
    private ThemeService themeService;
刘基明's avatar
刘基明 committed
38 39 40 41 42 43 44 45

    @Autowired
    private CollectionService collectionService;

    @Autowired
    private CommentService commentService;

    @Autowired
刘基明's avatar
刘基明 committed
46
    private FollowRelService followRelService;
刘基明's avatar
刘基明 committed
47

刘基明's avatar
刘基明 committed
48 49 50
    @Autowired
    private BlackListService blackListService;

51
    @Autowired
刘基明's avatar
刘基明 committed
52
    private UserInfoService userInfoService;
53

刘基明's avatar
刘基明 committed
54 55 56
    @Autowired
    private ThemeAttachmentService themeAttachmentService;

刘基明's avatar
刘基明 committed
57
    @Resource
刘基明's avatar
刘基明 committed
58
    private BatchFeignCallService batchFeignCallService;
刘基明's avatar
刘基明 committed
59

刘基明's avatar
刘基明 committed
60
    @Autowired
刘基明's avatar
刘基明 committed
61
    private VisitSummaryService visitSummaryService;
刘基明's avatar
刘基明 committed
62

刘基明's avatar
刘基明 committed
63 64 65
    @Autowired
    private RankService rankService;

张辰's avatar
张辰 committed
66 67 68
    @Autowired
    private ESService esService;

张辰's avatar
张辰 committed
69
    public ThemeFullSearchResp themeFullSearch(String keyword, Integer pageNo, Integer pageSize, List<String> excludeIds, String userId) {
张辰's avatar
张辰 committed
70
        Integer from = (pageNo - 1) * pageSize;
张辰's avatar
张辰 committed
71
        ThemeFullSearchResp resp = new ThemeFullSearchResp();
张辰's avatar
张辰 committed
72 73

        // 按时间倒叙查询
张辰's avatar
张辰 committed
74 75 76 77
        // todo redis
        List<ESThemeQo> esIds = esService.queryThemeIdByContentAndTitle(keyword, from, pageSize * 5);
        if (esIds.isEmpty()) {
            return resp;
张辰's avatar
张辰 committed
78 79
        }

张辰's avatar
张辰 committed
80 81 82 83 84 85 86 87 88
        // 排除已经展示过的id
        List<String> filterEsIds = esIds.stream().map(ESThemeQo::getThemeId).filter(tId -> {
            return !excludeIds.contains(tId);
        }).limit(pageSize).collect(Collectors.toList());

        resp.themes = convertEntityToQo(themeService.queryByThemeIds(filterEsIds), userId);
        resp.excludeIds.addAll(filterEsIds);

        return resp;
张辰's avatar
张辰 committed
89
    }
刘基明's avatar
刘基明 committed
90

刘基明's avatar
刘基明 committed
91
    @Transactional
刘基明's avatar
刘基明 committed
92
    public CreateThemeResp publishTheme(CreateThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
93 94 95

        //TODO 敏感词过滤

刘基明's avatar
刘基明 committed
96
        //保存主题表
刘基明's avatar
刘基明 committed
97
        ThemeEntity themeEntity = new ThemeEntity();
刘基明's avatar
刘基明 committed
98
        BeanUtils.copyProperties(req, themeEntity);
刘基明's avatar
刘基明 committed
99
        themeEntity.setAuthorId(userId);
刘基明's avatar
刘基明 committed
100
        themeEntity.setContent(JsonUtil.toJson(req.getContent()));
刘基明's avatar
刘基明 committed
101

刘基明's avatar
刘基明 committed
102

刘基明's avatar
刘基明 committed
103
        if (StringUtils.isEmpty(req.getEditThemeId())) {
刘基明's avatar
刘基明 committed
104 105
            //新建
            themeService.insertTheme(themeEntity);
刘基明's avatar
刘基明 committed
106
        } else {
刘基明's avatar
刘基明 committed
107
            //修改
刘基明's avatar
刘基明 committed
108
            themeService.update(themeEntity, req.getEditThemeId());
刘基明's avatar
刘基明 committed
109
            themeEntity.setThemeId(req.getEditThemeId());
刘基明's avatar
刘基明 committed
110
        }
刘基明's avatar
刘基明 committed
111
        //保存附件表
刘基明's avatar
刘基明 committed
112
        List<ThemeAttachmentEntity> themeAttachments = ConvertUtil.themeReqToAttachmentList(req, themeEntity.getThemeId());
刘基明's avatar
刘基明 committed
113 114
        if (StringUtils.isNotEmpty(req.getEditThemeId())) {
            //修改需要刪除
刘基明's avatar
刘基明 committed
115
            themeAttachmentService.deleteByThemeId(req.getEditThemeId());
刘基明's avatar
刘基明 committed
116
        }
刘基明's avatar
刘基明 committed
117
        themeAttachmentService.insertList(themeAttachments);
刘基明's avatar
刘基明 committed
118

张辰's avatar
张辰 committed
119 120 121 122 123
        try {
            esService.insertOrUpdateTheme(ConvertUtil.convert(themeEntity));
        } catch (Exception e) {
            log.error("error in save theme to ES. themeId:{}, error:{}", themeEntity.getThemeId(), ExceptionUtils.getStackTrace(e));
        }
刘基明's avatar
刘基明 committed
124

刘基明's avatar
刘基明 committed
125
        return CreateThemeResp.builder().themeId(themeEntity.getThemeId()).build();
刘基明's avatar
刘基明 committed
126
    }
刘基明's avatar
刘基明 committed
127

刘基明's avatar
刘基明 committed
128 129
    /**
     * 返回主题列表
刘基明's avatar
刘基明 committed
130
     *
刘基明's avatar
刘基明 committed
131 132 133 134
     * @param req
     * @param userId
     * @return
     */
刘基明's avatar
刘基明 committed
135
    public List<ThemeQo> queryThemes(ThemeListReq req, String userId) {
刘基明's avatar
刘基明 committed
136
        List<ThemeEntity> themeEntities = new ArrayList<>();
刘基明's avatar
刘基明 committed
137 138
        if (ThemeListTypeEnum.RECOMMEND.getCode().equals(req.getType())) {
            // TODO:推荐
刘基明's avatar
刘基明 committed
139
//            themeEntities = themeService.selectExcludeUser(userId, req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
140
            List<String> recommendThemeIds = rankService.getHotAndNewThemes(100, 100);
刘基明's avatar
刘基明 committed
141 142
            themeEntities = themeService.queryByThemeIdsExcludeUser( recommendThemeIds,userId, req.getLastId(), req.getPageSize());

刘基明's avatar
刘基明 committed
143
        } else if (ThemeListTypeEnum.FOLLOW.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
144
            //根据关注列表查询
刘基明's avatar
刘基明 committed
145
            List<String> fansList = followRelService.queryFansByFollowerId(userId);
刘基明's avatar
刘基明 committed
146
            themeEntities = themeService.queryByUserIds(fansList, req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
147

刘基明's avatar
刘基明 committed
148
        } else if (ThemeListTypeEnum.TOPIC_HOT.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
149 150 151
            //TODO 根据话题查询热门
            if (StringUtils.isEmpty(req.getTopicId())) throw new BizException("TopicId为空");
            themeEntities = themeService.queryByTopic(req.getTopicId(), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
152
        } else if (ThemeListTypeEnum.TOPIC_LATEST.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
153 154 155
            //TODO 根据话题查询最新
            if (StringUtils.isEmpty(req.getTopicId())) throw new BizException("TopicId为空");
            themeEntities = themeService.queryByTopic(req.getTopicId(), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
156
        }
157
        //组装详情
刘基明's avatar
刘基明 committed
158
        return convertEntityToQo(themeEntities, userId);
刘基明's avatar
刘基明 committed
159 160
    }

刘基明's avatar
刘基明 committed
161 162
    public List<ThemeQo> searchThemes(ThemeSearchReq req, String userId) {

刘基明's avatar
刘基明 committed
163
        List<ThemeEntity> themeEntities = themeService.search(req.getKeyword(), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
164 165 166 167
        return convertEntityToQo(themeEntities, userId);
    }


刘基明's avatar
刘基明 committed
168
    // 返回用户发布、回复、收藏的主题列表
刘基明's avatar
刘基明 committed
169
    public List<ThemeQo> queryThemesByUser(QueryRecordThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
170 171 172 173

        List<ThemeEntity> themeEntities = Collections.emptyList();
        switch (req.getRecordType()) {
            case 1://发布
刘基明's avatar
刘基明 committed
174
                themeEntities = themeService.queryThemesByUserId(req.getUserId(), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
175
                break;
刘基明's avatar
刘基明 committed
176
            case 2://回复
刘基明's avatar
刘基明 committed
177 178
                List<ThemeQo> commentThemeList = new ArrayList<>();
                //评论列表
刘基明's avatar
刘基明 committed
179
                List<CommentEntity> commentEntities = commentService.queryThemesByUserId(req.getUserId(), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
180
                //当前用户信息
刘基明's avatar
刘基明 committed
181
                UserInfoEntity userInfoEntity = userInfoService.queryUserById(req.getUserId());
刘基明's avatar
刘基明 committed
182
                Set<String> replyThemeIds = commentEntities.stream().map(CommentEntity::getThemeId).collect(Collectors.toSet());
刘基明's avatar
刘基明 committed
183
                if (CollectionUtils.isEmpty(replyThemeIds)) {
刘基明's avatar
刘基明 committed
184 185
                    return commentThemeList;
                }
刘基明's avatar
刘基明 committed
186 187
                themeEntities = themeService.queryByThemeIds(new ArrayList<>(replyThemeIds));
                List<ThemeQo> themeQos = convertEntityToQo(themeEntities, userId);
刘基明's avatar
刘基明 committed
188
                //组装附件
刘基明's avatar
刘基明 committed
189
                batchFeignCallService.getAttachDetailByBatch(themeQos);
刘基明's avatar
刘基明 committed
190 191 192 193 194 195 196
                //主题列表
                Map<String, ThemeQo> themeMap = themeQos.stream()
                        .collect(Collectors.toMap(ThemeQo::getThemeId, o -> o));
                //主题+评论封装转发对象
                for (CommentEntity commentEntity : commentEntities) {
                    String themeId = commentEntity.getThemeId();
                    //评论内容包装到ThemeContentQo里
刘基明's avatar
刘基明 committed
197 198
                    ThemeContentQo commentContent = ThemeContentQo.builder()
                            .type(RelTypeEnum.TEXT.type)
刘基明's avatar
刘基明 committed
199
                            .value(commentEntity.getContent())
刘基明's avatar
刘基明 committed
200
                            .build();
刘基明's avatar
刘基明 committed
201 202 203 204 205
                    //原主题包装到FormerThemeQo中
                    ThemeQo themeQo = themeMap.get(themeId);
                    FormerThemeQo f = ConvertUtil.themeQo2FormerThemeQo(themeQo);
                    //ThemeContentQo和原主题包装到FormerThemeQo中包装到ThemeQo中
                    ThemeQo commentThemeQo = ThemeQo.builder()
刘基明's avatar
刘基明 committed
206
                            .authorId(userInfoEntity.getId())
刘基明's avatar
刘基明 committed
207 208
                            .nickName(userInfoEntity.getUiUsernameMp())
                            .userImg(userInfoEntity.getUiHeadimgMp())
刘基明's avatar
刘基明 committed
209
                            .content(Arrays.asList(commentContent))
刘基明's avatar
刘基明 committed
210 211
                            .formerTheme(f)
                            .commentId(commentEntity.getCommentId())
刘基明's avatar
刘基明 committed
212
                            .themeType(ThemeTypeEnum.RES_COMMENT.getCode())
刘基明's avatar
刘基明 committed
213
                            .build();
刘基明's avatar
刘基明 committed
214

刘基明's avatar
刘基明 committed
215
                    commentThemeList.add(commentThemeQo);
刘基明's avatar
刘基明 committed
216
                }
刘基明's avatar
刘基明 committed
217
                return commentThemeList;
刘基明's avatar
刘基明 committed
218
            case 3://点赞
刘基明's avatar
刘基明 committed
219
                Set<String> likeThemeIds = collectionService.getListByUser(req.getLastId(), CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
220
                themeEntities = themeService.queryByThemeIds(new ArrayList<>(likeThemeIds), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
221
                break;
刘基明's avatar
刘基明 committed
222
            case 4://收藏
刘基明's avatar
刘基明 committed
223
                Set<String> collectThemeIds = collectionService.getListByUser(req.getLastId(), CollectionTypeEnum.COLLECT_THEME);
刘基明's avatar
刘基明 committed
224
                themeEntities = themeService.queryByThemeIds(new ArrayList<>(collectThemeIds), req.getLastId(), req.getPageSize());
刘基明's avatar
刘基明 committed
225 226 227 228 229 230
                break;
        }
        List<ThemeQo> themeQos = convertEntityToQo(themeEntities, userId);
        return themeQos;
    }

刘基明's avatar
刘基明 committed
231

刘基明's avatar
刘基明 committed
232 233
    //查询正文
    public ThemeQo getDetail(String themeId, String userId) {
刘基明's avatar
刘基明 committed
234
        ThemeEntity themeEntity = themeService.queryByThemeId(themeId);
刘基明's avatar
刘基明 committed
235 236
        if (themeEntity == null) {
            throw new BizException("找不到帖子id:" + themeId);
刘基明's avatar
刘基明 committed
237
        }
刘基明's avatar
刘基明 committed
238
        ThemeQo themeQo = ConvertUtil.themeEntityToQo(themeEntity);
刘基明's avatar
刘基明 committed
239
        batchFeignCallService.getAttachDetail(themeQo);
刘基明's avatar
刘基明 committed
240
        buildThemeQoExtraInfo(userId, themeQo);
刘基明's avatar
刘基明 committed
241
        return themeQo;
刘基明's avatar
刘基明 committed
242 243
    }

刘基明's avatar
刘基明 committed
244 245
    // 点赞/取消点赞
    public void like(LikeThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
246
        if (OperationTypeEnum.CONFIRM.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
247
            collectionService.addIfNotExist(req.getThemeId(), userId, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
248
        } else if (OperationTypeEnum.CANCEL.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
249 250 251
            collectionService.delete(req.getThemeId(), userId, CollectionTypeEnum.LIKE_THEME);
        }

刘基明's avatar
刘基明 committed
252 253
    }

刘基明's avatar
刘基明 committed
254 255
    //收藏/取消收藏
    public void collect(CollectThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
256
        if (OperationTypeEnum.CONFIRM.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
257
            collectionService.addIfNotExist(req.getThemeId(), userId, CollectionTypeEnum.COLLECT_THEME);
刘基明's avatar
刘基明 committed
258
        } else if (OperationTypeEnum.CANCEL.getCode().equals(req.getType())) {
刘基明's avatar
刘基明 committed
259 260
            collectionService.delete(req.getThemeId(), userId, CollectionTypeEnum.COLLECT_THEME);
        }
张辰's avatar
张辰 committed
261 262
    }

刘基明's avatar
刘基明 committed
263
    //转发
刘基明's avatar
刘基明 committed
264
    public CreateThemeResp forward(ForwardThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
265
        ThemeEntity targetTheme = themeService.queryByThemeId(req.getFormerThemeId());
刘基明's avatar
刘基明 committed
266
        ThemeEntity themeEntity = ThemeEntity.builder()
刘基明's avatar
刘基明 committed
267
                .content(JsonUtil.toJson(req.getContent()))
刘基明's avatar
刘基明 committed
268 269
                .topicId(req.getTopicId())
                .formerThemeId(req.getFormerThemeId())
270
                .authorId(userId)
刘基明's avatar
刘基明 committed
271
                .themeType(ThemeTypeEnum.FORWARD.getCode())
272 273
                .build();

刘基明's avatar
刘基明 committed
274
        if (StringUtils.isEmpty(req.getEditThemeId()) || req.getEditThemeId() == req.getFormerThemeId()) {
刘基明's avatar
刘基明 committed
275
            //新建
刘基明's avatar
刘基明 committed
276
            themeService.insertTheme(themeEntity);
刘基明's avatar
刘基明 committed
277
        } else {
刘基明's avatar
刘基明 committed
278
            //修改
刘基明's avatar
刘基明 committed
279 280 281
            themeService.update(themeEntity, req.getEditThemeId());
            themeEntity.setThemeId(req.getEditThemeId());

刘基明's avatar
刘基明 committed
282
        }
刘基明's avatar
刘基明 committed
283
        return CreateThemeResp.builder().themeId(themeEntity.getThemeId()).build();
刘基明's avatar
刘基明 committed
284 285 286
    }


刘基明's avatar
刘基明 committed
287 288 289 290 291 292
    //    屏蔽(用户)
    public void blockUser(String blockUser, String userId) {
        BlackListEntity selectOne = blackListService.selectOne(blockUser, userId, BlockTypeEnum.USER.getCode());
        if (selectOne == null) {
            blackListService.addBlock(blockUser, userId, BlockTypeEnum.USER);
        }
刘基明's avatar
刘基明 committed
293
    }
刘基明's avatar
刘基明 committed
294

张辰's avatar
张辰 committed
295
    // 解除屏蔽(用户)
刘基明's avatar
刘基明 committed
296
    public void unblockUser(String blockUser, String userId) {
刘基明's avatar
刘基明 committed
297
        //todo
张辰's avatar
张辰 committed
298 299 300 301 302
    }

    // 屏蔽(主题)
    public void blockTheme(String themeId, String userId) {
        blackListService.addBlock(themeId, userId, BlockTypeEnum.THEME);
刘基明's avatar
刘基明 committed
303
        BlackListEntity selectOne = blackListService.selectOne(themeService.queryByThemeId(themeId).getAuthorId(), userId, BlockTypeEnum.USER.getCode());
刘基明's avatar
刘基明 committed
304
        if (selectOne == null) {
刘基明's avatar
刘基明 committed
305
            blackListService.addBlock(themeService.queryByThemeId(themeId).getAuthorId(), userId, BlockTypeEnum.USER);
刘基明's avatar
刘基明 committed
306
        }
刘基明's avatar
刘基明 committed
307
    }
刘基明's avatar
刘基明 committed
308

张辰's avatar
张辰 committed
309 310 311
    // 解除屏蔽(主题)
    public void unblockTheme(String themeId, String userId) {
        blackListService.removeBlackList(themeId, userId, BlockTypeEnum.USER);
刘基明's avatar
刘基明 committed
312
    }
张辰's avatar
张辰 committed
313

刘基明's avatar
刘基明 committed
314

刘基明's avatar
刘基明 committed
315 316
    //主题Entity转QO
    private List<ThemeQo> convertEntityToQo(List<ThemeEntity> themeEntities, String userId) {
317
        //Entity转Qo
刘基明's avatar
刘基明 committed
318
        List<ThemeQo> themeQos = ConvertUtil.themeEntitiesToDTOs(themeEntities);
319
        //批量查询附件detail
刘基明's avatar
刘基明 committed
320
        batchFeignCallService.getAttachDetailByBatch(themeQos);
刘基明's avatar
刘基明 committed
321
        //其他信息
刘基明's avatar
刘基明 committed
322
        for (ThemeQo themeQO : themeQos) {
刘基明's avatar
刘基明 committed
323 324
            buildThemeQoExtraInfo(userId, themeQO);
        }
刘基明's avatar
刘基明 committed
325

刘基明's avatar
刘基明 committed
326 327
        return themeQos;
    }
刘基明's avatar
刘基明 committed
328 329


刘基明's avatar
刘基明 committed
330
    //组装主题详情
刘基明's avatar
刘基明 committed
331
    private void buildThemeQoExtraInfo(String userId, ThemeQo themeQo) {
刘基明's avatar
刘基明 committed
332

刘基明's avatar
刘基明 committed
333 334 335
        //封装转发对象
        buildFormerTheme(themeQo);

刘基明's avatar
刘基明 committed
336
        String themeId = themeQo.getThemeId();
刘基明's avatar
刘基明 committed
337

刘基明's avatar
刘基明 committed
338
        //是否关注作者
刘基明's avatar
刘基明 committed
339
        String authorId = themeQo.getAuthorId();
刘基明's avatar
刘基明 committed
340
        Set<String> fansSet = new HashSet<>(followRelService.queryFansByFollowerId(userId));
刘基明's avatar
刘基明 committed
341
        themeQo.setFollow(fansSet.contains(authorId));
刘基明's avatar
刘基明 committed
342
        //是否点赞
刘基明's avatar
刘基明 committed
343
        CollectionEntity likeEntity = collectionService.getNotDeleteTargetCollection(themeId, userId, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
344
        themeQo.setHasLiked(likeEntity != null);
刘基明's avatar
刘基明 committed
345 346
        //是否转发
        Integer forwardCountByUser = themeService.getForwardCountByUser(themeId, userId);
刘基明's avatar
刘基明 committed
347
        themeQo.setHasForward(forwardCountByUser > 0);
刘基明's avatar
刘基明 committed
348
        //是否收藏
刘基明's avatar
刘基明 committed
349
        CollectionEntity collectionEntity = collectionService.getNotDeleteTargetCollection(themeId, userId, CollectionTypeEnum.COLLECT_THEME);
刘基明's avatar
刘基明 committed
350
        themeQo.setHasCollect(collectionEntity != null);
刘基明's avatar
刘基明 committed
351
        //点赞,收藏,转发
刘基明's avatar
刘基明 committed
352
        Integer likeCount = collectionService.getCountByTypeAndId(themeId, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
353 354
//        Integer bookCount = collectionService.getCountByTypeAndId(themeId, CollectionTypeEnum.COLLECT_THEME);
        Integer commentCount = commentService.getCommentCountByThemeId(themeId);
刘基明's avatar
刘基明 committed
355
        Integer forwardCount = themeService.getForwardCountById(themeId);
刘基明's avatar
刘基明 committed
356
        themeQo.setCommentCount(commentCount);
刘基明's avatar
刘基明 committed
357 358
        themeQo.setLikeCount(likeCount);
        themeQo.setForwardCount(forwardCount);
刘基明's avatar
刘基明 committed
359 360
    }

刘基明's avatar
刘基明 committed
361

刘基明's avatar
刘基明 committed
362
    //组装被转发主题
刘基明's avatar
刘基明 committed
363
    private void buildFormerTheme(ThemeQo themeQo) {
刘基明's avatar
刘基明 committed
364
        String formerThemeId = themeQo.getFormerThemeId();
刘基明's avatar
刘基明 committed
365
        if (StringUtils.isNotEmpty(formerThemeId)) {
刘基明's avatar
刘基明 committed
366
            ThemeQo formerTheme = ConvertUtil.themeEntityToQo(themeService.queryByThemeId(formerThemeId));
刘基明's avatar
刘基明 committed
367 368 369
            if (formerTheme != null) {

                //单个查询详情
刘基明's avatar
刘基明 committed
370
                batchFeignCallService.getAttachDetail(formerTheme);
刘基明's avatar
刘基明 committed
371 372
                FormerThemeQo f = ConvertUtil.themeQo2FormerThemeQo(formerTheme);
                themeQo.setFormerTheme(f);
刘基明's avatar
刘基明 committed
373
            }
刘基明's avatar
刘基明 committed
374

刘基明's avatar
刘基明 committed
375
        }
刘基明's avatar
刘基明 committed
376 377
    }

刘基明's avatar
刘基明 committed
378

刘基明's avatar
刘基明 committed
379
    //逻辑删除
刘基明's avatar
刘基明 committed
380 381 382
    public void delete(String themeId) {
        themeService.deleteById(themeId);
    }
刘基明's avatar
刘基明 committed
383 384 385 386 387 388

    //投诉(主题)
    public void complaint(String themeId, String user) {
        //TODO
    }

刘基明's avatar
刘基明 committed
389 390 391 392 393
    public Integer getFollowUpdateCount(String userId) {
        LocalDateTime lastViewTime = visitSummaryService.queryLatestViewFollow(userId);
        List<String> fansList = followRelService.queryFansByFollowerId(userId);
        return themeService.queryCountFromLastTime(fansList, lastViewTime);
    }
刘基明's avatar
刘基明 committed
394 395


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