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

刘基明's avatar
刘基明 committed
3
import com.tanpu.common.api.CommonResp;
刘基明's avatar
刘基明 committed
4
import com.tanpu.common.exception.BizException;
刘基明's avatar
刘基明 committed
5
import com.tanpu.community.api.beans.req.theme.ForwardThemeReq;
刘基明's avatar
刘基明 committed
6
import com.tanpu.community.api.beans.qo.AttachmentQo;
刘基明's avatar
刘基明 committed
7 8
import com.tanpu.community.api.beans.qo.MainTextQo;
import com.tanpu.community.api.beans.qo.ThemeQo;
刘基明's avatar
刘基明 committed
9
import com.tanpu.community.api.beans.req.theme.CreateThemeReq;
刘基明's avatar
刘基明 committed
10
import com.tanpu.community.api.beans.req.theme.ThemeListByTopicReq;
刘基明's avatar
刘基明 committed
11
import com.tanpu.community.api.beans.req.theme.ThemeListReq;
刘基明's avatar
刘基明 committed
12 13 14
import com.tanpu.community.api.enums.BlockTypeEnum;
import com.tanpu.community.api.enums.CollectionTypeEnum;
import com.tanpu.community.api.enums.ThemeTypeEnum;
刘基明's avatar
刘基明 committed
15 16 17 18
import com.tanpu.community.dao.entity.community.BlackListEntity;
import com.tanpu.community.dao.entity.community.HomePageEntity;
import com.tanpu.community.dao.entity.community.ThemeAttachmentEntity;
import com.tanpu.community.dao.entity.community.ThemeEntity;
刘基明's avatar
刘基明 committed
19
import com.tanpu.community.feign.course.FeignClientForCourse;
刘基明's avatar
刘基明 committed
20
import com.tanpu.community.api.beans.vo.feign.CourseDetailExt;
刘基明's avatar
刘基明 committed
21 22
import com.tanpu.community.feign.product.FeignClientForProducts;
import com.tanpu.community.feign.tanpuroom.FeignClientForTanpuroom;
刘基明's avatar
刘基明 committed
23 24
import com.tanpu.community.api.beans.vo.feign.ProductInfoVO;
import com.tanpu.community.api.beans.vo.feign.ShortVideoBaseInfoResp;
刘基明's avatar
刘基明 committed
25
import com.tanpu.community.feign.zhibo.FeignClientForZhibo;
刘基明's avatar
刘基明 committed
26
import com.tanpu.community.api.beans.vo.feign.ZhiboDetailVO;
刘基明's avatar
刘基明 committed
27
import com.tanpu.community.service.*;
刘基明's avatar
刘基明 committed
28
import com.tanpu.community.service.other.*;
29
import com.tanpu.community.util.ConvertUtil;
刘基明's avatar
刘基明 committed
30
import org.apache.commons.collections4.CollectionUtils;
刘基明's avatar
刘基明 committed
31
import org.springframework.beans.BeanUtils;
刘基明's avatar
刘基明 committed
32 33 34
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

刘基明's avatar
刘基明 committed
35
import javax.annotation.Resource;
刘基明's avatar
刘基明 committed
36 37 38
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
刘基明's avatar
刘基明 committed
39
import java.util.*;
刘基明's avatar
刘基明 committed
40

刘基明's avatar
刘基明 committed
41 42
@Service
public class ThemeManager {
刘基明's avatar
刘基明 committed
43
    @Resource
刘基明's avatar
刘基明 committed
44
    private ThemeService themeService;
刘基明's avatar
刘基明 committed
45 46 47 48 49 50 51 52

    @Autowired
    private CollectionService collectionService;

    @Autowired
    private CommentService commentService;

    @Autowired
刘基明's avatar
刘基明 committed
53
    private FollowRelService followRelService;
刘基明's avatar
刘基明 committed
54

刘基明's avatar
刘基明 committed
55 56 57
    @Autowired
    private BlackListService blackListService;

58 59 60
    @Autowired
    private FinProResService finProResService;

刘基明's avatar
刘基明 committed
61 62 63
    @Autowired
    private RedisService redisService;

64 65 66 67 68 69
    @Autowired
    private ZhiboService zhiboService;

    @Autowired
    private CurriculumResService curriculumResService;

70 71 72
    @Autowired
    private OrderFlowService orderFlowService;

刘基明's avatar
刘基明 committed
73 74 75
    @Autowired
    private ThemeAttachmentService themeAttachmentService;

刘基明's avatar
刘基明 committed
76 77 78
    @Autowired
    private HomePageService homePageService;

刘基明's avatar
刘基明 committed
79 80 81 82 83 84 85 86 87
    @Resource
    private FeignClientForTanpuroom feignClientForTanpuroom;

    @Resource
    private FeignClientForZhibo feignClientForZhibo;

    @Resource
    private FeignClientForProducts feignClientForProducts;

刘基明's avatar
刘基明 committed
88 89 90
    @Autowired
    private FeignClientForCourse feignClientForCourse;

刘基明's avatar
刘基明 committed
91 92


刘基明's avatar
刘基明 committed
93
    public void publishTheme(CreateThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
94
        ThemeEntity themeEntity = new ThemeEntity();
刘基明's avatar
刘基明 committed
95
        BeanUtils.copyProperties(req, themeEntity);
刘基明's avatar
刘基明 committed
96 97 98
        themeEntity.setAuthorId(userId);

        themeService.insertTheme(themeEntity);
刘基明's avatar
刘基明 committed
99
        List<ThemeAttachmentEntity> themeAttachments = ConvertUtil.themeReqToAttachmentList(req, themeEntity.getThemeId());
刘基明's avatar
刘基明 committed
100
        //TODO 敏感词过滤
刘基明's avatar
刘基明 committed
101 102 103
        themeAttachmentService.insertList(themeAttachments);

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

刘基明's avatar
刘基明 committed
105
    // 返回推荐主题文章
刘基明's avatar
刘基明 committed
106
    public List<ThemeQo> selectHotThemes(ThemeListReq req, String userId) {
刘基明's avatar
刘基明 committed
107
        // TODO:推荐
刘基明's avatar
刘基明 committed
108
        List<ThemeEntity> themeEntities = themeService.selectAll(req.getLastId(),req.getPageSize());
刘基明's avatar
刘基明 committed
109
        List<ThemeQo> themeQos = convertEntityToQo(themeEntities, userId);
刘基明's avatar
刘基明 committed
110
        return themeQos;
刘基明's avatar
刘基明 committed
111 112
    }

113

刘基明's avatar
刘基明 committed
114
    // 返回关注主题
刘基明's avatar
刘基明 committed
115
    public List<ThemeQo> selectInterestThemes(ThemeListReq req,String userId) {
刘基明's avatar
刘基明 committed
116
        List<String> fansList = followRelService.queryFansByFollowerId(userId);
刘基明's avatar
刘基明 committed
117 118 119 120 121 122 123 124
        List<ThemeEntity> themeEntities = themeService.queryByFans(fansList,req.getLastId(),req.getPageSize());
        List<ThemeQo> themeQos = convertEntityToQo(themeEntities, userId);
        return themeQos;
    }

    public List<ThemeQo> queryByTopic(ThemeListByTopicReq req, String userId) {
        //TODO
        List<ThemeEntity> themeEntities = themeService.queryByTopic(req.getTopicId(),req.getLastId(),req.getPageSize());
刘基明's avatar
刘基明 committed
125
        List<ThemeQo> themeQos = convertEntityToQo(themeEntities, userId);
刘基明's avatar
刘基明 committed
126
        return themeQos;
刘基明's avatar
刘基明 committed
127 128
    }

刘基明's avatar
刘基明 committed
129 130 131
    //返回正文
    public MainTextQo getMainText(String themeId, String userId) {

刘基明's avatar
刘基明 committed
132
        ThemeEntity themeEntity = themeService.queryById(themeId);
刘基明's avatar
刘基明 committed
133 134
        if (themeEntity == null) {
            throw new BizException("找不到帖子id:" + themeId);
刘基明's avatar
刘基明 committed
135
        }
刘基明's avatar
刘基明 committed
136 137 138 139
        MainTextQo mainTextQo = new MainTextQo();
        BeanUtils.copyProperties(themeEntity, mainTextQo);
         buildMainTestExtraInfo(mainTextQo, userId);
        return mainTextQo;
刘基明's avatar
刘基明 committed
140 141
    }

刘基明's avatar
刘基明 committed
142
    // 点赞
刘基明's avatar
刘基明 committed
143
    public void like(String themeId, String userId) {
刘基明's avatar
刘基明 committed
144
        collectionService.addIfNotExist(themeId, userId, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
145 146
    }

张辰's avatar
张辰 committed
147 148 149
    public void unlike(String themeId, String userId) {
    }

刘基明's avatar
刘基明 committed
150

刘基明's avatar
刘基明 committed
151 152

    //转发
刘基明's avatar
刘基明 committed
153
    public void forward(ForwardThemeReq req, String userId) {
刘基明's avatar
刘基明 committed
154
        ThemeEntity targetTheme = themeService.queryById(req.getFormerThemeId());
155
        ThemeEntity newTheme = ThemeEntity.builder()
刘基明's avatar
刘基明 committed
156 157 158
                .content(req.getContent())
                .topicId(req.getTopicId())
                .formerThemeId(req.getFormerThemeId())
159
                .authorId(userId)
刘基明's avatar
刘基明 committed
160
                .themeType(ThemeTypeEnum.DISCUSSION.getCode())
161 162 163
                .build();

        themeService.insertTheme(newTheme);
刘基明's avatar
刘基明 committed
164 165 166 167
    }


    //收藏
张辰's avatar
张辰 committed
168
    public void favorite(String themeId, String userId) {
刘基明's avatar
刘基明 committed
169
        collectionService.addIfNotExist(themeId, userId, CollectionTypeEnum.BOOK_THEME);
张辰's avatar
张辰 committed
170 171 172
    }

    public void unFavorite(String themeId, String userId) {
刘基明's avatar
刘基明 committed
173
        collectionService.delete(themeId, userId, CollectionTypeEnum.BOOK_THEME);
刘基明's avatar
刘基明 committed
174
    }
张辰's avatar
张辰 committed
175

刘基明's avatar
刘基明 committed
176
    //投诉(主题)
刘基明's avatar
刘基明 committed
177
    public void complaint(String themeId, String user) {
刘基明's avatar
刘基明 committed
178
        //TODO
刘基明's avatar
刘基明 committed
179
    }
张辰's avatar
张辰 committed
180

刘基明's avatar
刘基明 committed
181 182 183 184 185 186
    //    屏蔽(用户)
    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
187
    }
刘基明's avatar
刘基明 committed
188

张辰's avatar
张辰 committed
189
    // 解除屏蔽(用户)
刘基明's avatar
刘基明 committed
190
    public void unblockUser(String blockUser, String userId) {
刘基明's avatar
刘基明 committed
191
        //todo
张辰's avatar
张辰 committed
192 193 194 195 196
    }

    // 屏蔽(主题)
    public void blockTheme(String themeId, String userId) {
        blackListService.addBlock(themeId, userId, BlockTypeEnum.THEME);
刘基明's avatar
刘基明 committed
197
        BlackListEntity selectOne = blackListService.selectOne(themeService.queryById(themeId).getAuthorId(), userId, BlockTypeEnum.USER.getCode());
刘基明's avatar
刘基明 committed
198
        if (selectOne == null) {
刘基明's avatar
刘基明 committed
199
            blackListService.addBlock(themeService.queryById(themeId).getAuthorId(), userId, BlockTypeEnum.USER);
刘基明's avatar
刘基明 committed
200
        }
刘基明's avatar
刘基明 committed
201
    }
刘基明's avatar
刘基明 committed
202

张辰's avatar
张辰 committed
203 204 205
    // 解除屏蔽(主题)
    public void unblockTheme(String themeId, String userId) {
        blackListService.removeBlackList(themeId, userId, BlockTypeEnum.USER);
刘基明's avatar
刘基明 committed
206
    }
张辰's avatar
张辰 committed
207

刘基明's avatar
刘基明 committed
208

刘基明's avatar
刘基明 committed
209 210 211 212
    //主题Entity转QO
    private List<ThemeQo> convertEntityToQo(List<ThemeEntity> themeEntities, String userId) {
        List<ThemeQo> themeQos = ConvertUtil.themeEntitiesToDTOs(themeEntities);
        for (ThemeQo themeQO : themeQos) {
刘基明's avatar
刘基明 committed
213 214 215 216
            buildThemeQoExtraInfo(userId, themeQO);
        }
        return themeQos;
    }
刘基明's avatar
刘基明 committed
217 218


刘基明's avatar
刘基明 committed
219 220 221
    //组装主题列表
    private void buildThemeQoExtraInfo(String userId, ThemeQo themeQO) {
        //附件列表
刘基明's avatar
刘基明 committed
222 223
        String themeId = themeQO.getThemeId();
        List<ThemeAttachmentEntity> attachments = themeAttachmentService.selectByThemeId(themeId);
刘基明's avatar
刘基明 committed
224
        if (!CollectionUtils.isEmpty(attachments)) {
刘基明's avatar
刘基明 committed
225 226
            ThemeAttachmentEntity attachmentEntity = attachments.get(0);
            AttachmentQo attachmentQo = AttachmentQo.builder().type(attachmentEntity.getAttachType()).attachment(transferAttachment(attachmentEntity, userId)).build();
刘基明's avatar
刘基明 committed
227
            //TODO CONTENT添加附件detail
刘基明's avatar
刘基明 committed
228
        }
刘基明's avatar
刘基明 committed
229 230 231 232
        //迄今时间
        themeQO.setUpToNowTime(calUpToNowTime(themeQO.getCreateTime()));
        //是否关注作者
        String authorId = themeQO.getAuthorId();
刘基明's avatar
刘基明 committed
233
        Set<String> fansSet = new HashSet<>(followRelService.queryFansByFollowerId(userId));
刘基明's avatar
刘基明 committed
234 235 236 237 238
        themeQO.setFollow(fansSet.contains(authorId));
        //用户信息:头像、昵称
        HomePageEntity userEntity = homePageService.selectByUserId(userId);
        themeQO.setUserImg(userEntity.getHeadImg());
        themeQO.setNickName(userEntity.getNickName());
刘基明's avatar
刘基明 committed
239 240 241 242 243 244 245
        //热点数据:点赞,收藏,转发
        Integer likeCount = collectionService.getCountByTypeAndId(themeId, CollectionTypeEnum.LIKE_THEME);
        Integer bookCount = collectionService.getCountByTypeAndId(themeId, CollectionTypeEnum.BOOK_THEME);
        Integer forwardCount = themeService.getForwardCountById(themeId);
        themeQO.setCommentCount(bookCount);
        themeQO.setLikeCount(likeCount);
        themeQO.setForwardCount(forwardCount);
刘基明's avatar
刘基明 committed
246 247 248 249 250
    }

    //组装正文详情
    private void buildMainTestExtraInfo(MainTextQo maintTextQo, String userId) {
        //附件列表
刘基明's avatar
刘基明 committed
251
        List<ThemeAttachmentEntity> attachments = themeAttachmentService.selectByThemeId(maintTextQo.getThemeId());
刘基明's avatar
刘基明 committed
252
        if (!CollectionUtils.isEmpty(attachments)) {
刘基明's avatar
刘基明 committed
253 254 255 256 257
            List<AttachmentQo> attachmentQos = new ArrayList<>();
            attachments.forEach(o -> attachmentQos.add(AttachmentQo.builder()
                    .type(o.getAttachType())
                    .attachment(transferAttachment(o,userId))
                    .build()));
刘基明's avatar
刘基明 committed
258 259 260 261 262
            maintTextQo.setAttachment(attachmentQos);
        }
        //迄今时间
        maintTextQo.setUpToNowTime(calUpToNowTime(maintTextQo.getCreateTime()));
        //用户信息:头像、昵称
刘基明's avatar
刘基明 committed
263 264 265
        HomePageEntity author = homePageService.selectByUserId(userId);
        maintTextQo.setUserImg(author.getHeadImg());
        maintTextQo.setNickName(author.getNickName());
刘基明's avatar
刘基明 committed
266

刘基明's avatar
刘基明 committed
267
        return;
刘基明's avatar
刘基明 committed
268 269
    }

刘基明's avatar
刘基明 committed
270 271

    public Object transferAttachment(ThemeAttachmentEntity themeAttachment, String userId) {
刘基明's avatar
刘基明 committed
272
        String attachmentId = themeAttachment.getAttachId();
刘基明's avatar
刘基明 committed
273
        switch (themeAttachment.getAttachType()) {
274 275 276
            //附件类型 1:产品 2:直播 3:短视频 4:课程
            //TODO ENTITY 转 DTO
            case 1:
刘基明's avatar
刘基明 committed
277 278 279 280
                CommonResp<ProductInfoVO> productDetailInfo = feignClientForProducts.getProductDetailInfo(attachmentId);
                return productDetailInfo.getData();
//                return finProResService.selectById(themeAttachment.getAttchId());

281
            case 2:
刘基明's avatar
刘基明 committed
282 283 284
                CommonResp<ZhiboDetailVO> zhiboDetailVOCommonResp = feignClientForZhibo.queryZhiboDetail(attachmentId);
                return zhiboDetailVOCommonResp.getData();
//                return zhiboService.selectByid(themeAttachment.getAttchId());
285
            case 3:
刘基明's avatar
刘基明 committed
286
                String[] attachmentIds = new String[]{attachmentId};
刘基明's avatar
刘基明 committed
287 288 289 290 291
                CommonResp<List<ShortVideoBaseInfoResp>> shortVideoBaseInfo =
                        feignClientForTanpuroom.getShortVideoBaseInfo(Arrays.asList(attachmentIds));
                return shortVideoBaseInfo.getData().get(0);
//                CurriculumResEntity curriculumResEntity = curriculumResService.selectShortVideo(themeAttachment.getAttchId());
//                return curriculumResEntity;
292
            case 4:
刘基明's avatar
刘基明 committed
293 294 295 296 297 298 299 300 301 302 303 304
                String[] split = attachmentId.split(",");
                if (split.length != 2) {
                    throw new BizException("课程id格式错误:" + attachmentId);
                }
                String courseId = split[0];
                String packageId = split[1];
                CommonResp<CourseDetailExt> courseIdDetailInfo = feignClientForCourse.getCourseIdDetailInfo(courseId, packageId);
                return courseIdDetailInfo.getData();

//                CurriCulumInfoDetailDto curriCulumInfoDetailDto = CurriCulumInfoDetailDto.builder().curriculumId(attachmentId).userId(userId).build();
//                CommonResp<CurriculumDetailVo> curriculumDetailVoCommonResp = feignClientForTanpuroom.queryCurriculumDetail(curriCulumInfoDetailDto);
//                return curriculumDetailVoCommonResp.getData();
刘基明's avatar
刘基明 committed
305 306 307 308
//                curriculumResEntity = curriculumResService.selectById(themeAttachment.getAttchId());
//
//                OrderFlowEntity orderFlowEntity = orderFlowService.queryByUserAndProId(themeAttachment.getThemeId(), userId);
//                return curriculumResEntity;
309
            default:
刘基明's avatar
刘基明 committed
310
                return null;
311 312 313 314 315


        }
    }

刘基明's avatar
刘基明 committed
316

刘基明's avatar
刘基明 committed
317 318 319 320 321 322 323 324 325 326 327 328 329 330
    //计算迄今时间
    private String calUpToNowTime(LocalDateTime start) {
        Duration between = Duration.between(start, LocalDateTime.now());
        long duration = between.toMinutes();
        if (duration < 1) {
            return "刚刚";
        } else if (duration < 60) {
            return duration + "分钟前";
        } else if (duration < 60 * 24) {
            return duration / 60 + "小时前";
        } else if (start.getYear() == LocalDateTime.now().getYear()) {
            return start.format(DateTimeFormatter.ofPattern("MM-dd HH:mm:ss"));
        }
        return start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
刘基明's avatar
刘基明 committed
331
    }
刘基明's avatar
刘基明 committed
332

刘基明's avatar
刘基明 committed
333

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