ThemeManager.java 12.7 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.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.CreateThemeReq;
刘基明's avatar
刘基明 committed
10
import com.tanpu.community.api.beans.req.theme.ThemeListReq;
刘基明's avatar
刘基明 committed
11 12 13
import com.tanpu.community.api.enums.BlockTypeEnum;
import com.tanpu.community.api.enums.CollectionTypeEnum;
import com.tanpu.community.api.enums.ThemeTypeEnum;
刘基明's avatar
刘基明 committed
14 15 16 17
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
18 19
import com.tanpu.community.feign.course.FeignClientForCourse;
import com.tanpu.community.feign.course.vo.CourseDetailExt;
刘基明's avatar
刘基明 committed
20 21
import com.tanpu.community.feign.product.FeignClientForProducts;
import com.tanpu.community.feign.tanpuroom.FeignClientForTanpuroom;
刘基明's avatar
刘基明 committed
22 23
import com.tanpu.community.feign.vo.ProductInfoVO;
import com.tanpu.community.feign.vo.ShortVideoBaseInfoResp;
刘基明's avatar
刘基明 committed
24 25
import com.tanpu.community.feign.zhibo.FeignClientForZhibo;
import com.tanpu.community.feign.zhibo.vo.ZhiboDetailVO;
刘基明's avatar
刘基明 committed
26
import com.tanpu.community.service.*;
刘基明's avatar
刘基明 committed
27
import com.tanpu.community.service.other.*;
28
import com.tanpu.community.util.ConvertUtil;
刘基明's avatar
刘基明 committed
29
import org.apache.commons.collections4.CollectionUtils;
刘基明's avatar
刘基明 committed
30
import org.springframework.beans.BeanUtils;
刘基明's avatar
刘基明 committed
31 32 33
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

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

    @Autowired
    private CollectionService collectionService;

    @Autowired
    private CommentService commentService;

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

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

57 58 59
    @Autowired
    private FinProResService finProResService;

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

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

    @Autowired
    private CurriculumResService curriculumResService;

69 70 71
    @Autowired
    private OrderFlowService orderFlowService;

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

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

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

    @Resource
    private FeignClientForZhibo feignClientForZhibo;

    @Resource
    private FeignClientForProducts feignClientForProducts;

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

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


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

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

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

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

112

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

刘基明's avatar
刘基明 committed
121 122 123 124 125 126
    //返回正文
    public MainTextQo getMainText(String themeId, String userId) {

        ThemeEntity themeEntity = themeService.selectById(themeId);
        if (themeEntity == null) {
            throw new BizException("找不到帖子id:" + themeId);
刘基明's avatar
刘基明 committed
127
        }
刘基明's avatar
刘基明 committed
128 129 130 131
        MainTextQo mainTextQo = new MainTextQo();
        BeanUtils.copyProperties(themeEntity, mainTextQo);
         buildMainTestExtraInfo(mainTextQo, userId);
        return mainTextQo;
刘基明's avatar
刘基明 committed
132 133
    }

刘基明's avatar
刘基明 committed
134
    // 点赞
刘基明's avatar
刘基明 committed
135
    public void like(String themeId, String userId) {
刘基明's avatar
刘基明 committed
136
        collectionService.addIfNotExist(themeId, userId, CollectionTypeEnum.LIKE_THEME);
刘基明's avatar
刘基明 committed
137 138
    }

张辰's avatar
张辰 committed
139 140 141
    public void unlike(String themeId, String userId) {
    }

刘基明's avatar
刘基明 committed
142

刘基明's avatar
刘基明 committed
143 144

    //转发
刘基明's avatar
刘基明 committed
145 146
    public void forward(ForwardThemeReq req, String userId) {
        ThemeEntity targetTheme = themeService.selectById(req.getFormerThemeId());
147
        ThemeEntity newTheme = ThemeEntity.builder()
刘基明's avatar
刘基明 committed
148 149 150
                .content(req.getContent())
                .topicId(req.getTopicId())
                .formerThemeId(req.getFormerThemeId())
151
                .authorId(userId)
刘基明's avatar
刘基明 committed
152
                .themeType(ThemeTypeEnum.DISCUSSION.getCode())
153 154 155
                .build();

        themeService.insertTheme(newTheme);
刘基明's avatar
刘基明 committed
156 157 158 159
    }


    //收藏
张辰's avatar
张辰 committed
160
    public void favorite(String themeId, String userId) {
刘基明's avatar
刘基明 committed
161
        collectionService.addIfNotExist(themeId, userId, CollectionTypeEnum.BOOK_THEME);
张辰's avatar
张辰 committed
162 163 164
    }

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

刘基明's avatar
刘基明 committed
168
    //投诉(主题)
刘基明's avatar
刘基明 committed
169
    public void complaint(String themeId, String user) {
刘基明's avatar
刘基明 committed
170
        //TODO
刘基明's avatar
刘基明 committed
171
    }
张辰's avatar
张辰 committed
172

刘基明's avatar
刘基明 committed
173 174 175 176 177 178
    //    屏蔽(用户)
    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
179
    }
刘基明's avatar
刘基明 committed
180

张辰's avatar
张辰 committed
181
    // 解除屏蔽(用户)
刘基明's avatar
刘基明 committed
182
    public void unblockUser(String blockUser, String userId) {
刘基明's avatar
刘基明 committed
183
        //todo
张辰's avatar
张辰 committed
184 185 186 187 188
    }

    // 屏蔽(主题)
    public void blockTheme(String themeId, String userId) {
        blackListService.addBlock(themeId, userId, BlockTypeEnum.THEME);
刘基明's avatar
刘基明 committed
189
        BlackListEntity selectOne = blackListService.selectOne(themeService.selectById(themeId).getAuthorId(), userId, BlockTypeEnum.USER.getCode());
刘基明's avatar
刘基明 committed
190
        if (selectOne == null) {
191
            blackListService.addBlock(themeService.selectById(themeId).getAuthorId(), userId, BlockTypeEnum.USER);
刘基明's avatar
刘基明 committed
192
        }
刘基明's avatar
刘基明 committed
193
    }
刘基明's avatar
刘基明 committed
194

张辰's avatar
张辰 committed
195 196 197
    // 解除屏蔽(主题)
    public void unblockTheme(String themeId, String userId) {
        blackListService.removeBlackList(themeId, userId, BlockTypeEnum.USER);
刘基明's avatar
刘基明 committed
198
    }
张辰's avatar
张辰 committed
199

刘基明's avatar
刘基明 committed
200

刘基明's avatar
刘基明 committed
201 202 203 204
    //主题Entity转QO
    private List<ThemeQo> convertEntityToQo(List<ThemeEntity> themeEntities, String userId) {
        List<ThemeQo> themeQos = ConvertUtil.themeEntitiesToDTOs(themeEntities);
        for (ThemeQo themeQO : themeQos) {
刘基明's avatar
刘基明 committed
205 206 207 208
            buildThemeQoExtraInfo(userId, themeQO);
        }
        return themeQos;
    }
刘基明's avatar
刘基明 committed
209 210


刘基明's avatar
刘基明 committed
211 212 213
    //组装主题列表
    private void buildThemeQoExtraInfo(String userId, ThemeQo themeQO) {
        //附件列表
刘基明's avatar
刘基明 committed
214 215
        String themeId = themeQO.getThemeId();
        List<ThemeAttachmentEntity> attachments = themeAttachmentService.selectByThemeId(themeId);
刘基明's avatar
刘基明 committed
216
        if (!CollectionUtils.isEmpty(attachments)) {
刘基明's avatar
刘基明 committed
217 218 219
            ThemeAttachmentEntity attachmentEntity = attachments.get(0);
            AttachmentQo attachmentQo = AttachmentQo.builder().type(attachmentEntity.getAttachType()).attachment(transferAttachment(attachmentEntity, userId)).build();
            themeQO.setAttachmentQo(attachmentQo);
刘基明's avatar
刘基明 committed
220
        }
刘基明's avatar
刘基明 committed
221 222 223 224
        //迄今时间
        themeQO.setUpToNowTime(calUpToNowTime(themeQO.getCreateTime()));
        //是否关注作者
        String authorId = themeQO.getAuthorId();
刘基明's avatar
刘基明 committed
225
        Set<String> fansSet = new HashSet<>(followRelService.queryFansByFollowerId(userId));
刘基明's avatar
刘基明 committed
226 227 228 229 230
        themeQO.setFollow(fansSet.contains(authorId));
        //用户信息:头像、昵称
        HomePageEntity userEntity = homePageService.selectByUserId(userId);
        themeQO.setUserImg(userEntity.getHeadImg());
        themeQO.setNickName(userEntity.getNickName());
刘基明's avatar
刘基明 committed
231 232 233 234 235 236 237
        //热点数据:点赞,收藏,转发
        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
238 239 240 241 242 243 244
    }

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

刘基明's avatar
刘基明 committed
259
        return;
刘基明's avatar
刘基明 committed
260 261
    }

刘基明's avatar
刘基明 committed
262 263

    public Object transferAttachment(ThemeAttachmentEntity themeAttachment, String userId) {
刘基明's avatar
刘基明 committed
264
        String attachmentId = themeAttachment.getAttachId();
刘基明's avatar
刘基明 committed
265
        switch (themeAttachment.getAttachType()) {
266 267 268
            //附件类型 1:产品 2:直播 3:短视频 4:课程
            //TODO ENTITY 转 DTO
            case 1:
刘基明's avatar
刘基明 committed
269 270 271 272
                CommonResp<ProductInfoVO> productDetailInfo = feignClientForProducts.getProductDetailInfo(attachmentId);
                return productDetailInfo.getData();
//                return finProResService.selectById(themeAttachment.getAttchId());

273
            case 2:
刘基明's avatar
刘基明 committed
274 275 276
                CommonResp<ZhiboDetailVO> zhiboDetailVOCommonResp = feignClientForZhibo.queryZhiboDetail(attachmentId);
                return zhiboDetailVOCommonResp.getData();
//                return zhiboService.selectByid(themeAttachment.getAttchId());
277
            case 3:
刘基明's avatar
刘基明 committed
278
                String[] attachmentIds = new String[]{attachmentId};
刘基明's avatar
刘基明 committed
279 280 281 282 283
                CommonResp<List<ShortVideoBaseInfoResp>> shortVideoBaseInfo =
                        feignClientForTanpuroom.getShortVideoBaseInfo(Arrays.asList(attachmentIds));
                return shortVideoBaseInfo.getData().get(0);
//                CurriculumResEntity curriculumResEntity = curriculumResService.selectShortVideo(themeAttachment.getAttchId());
//                return curriculumResEntity;
284
            case 4:
刘基明's avatar
刘基明 committed
285 286 287 288 289 290 291 292 293 294 295 296
                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
297 298 299 300
//                curriculumResEntity = curriculumResService.selectById(themeAttachment.getAttchId());
//
//                OrderFlowEntity orderFlowEntity = orderFlowService.queryByUserAndProId(themeAttachment.getThemeId(), userId);
//                return curriculumResEntity;
301
            default:
刘基明's avatar
刘基明 committed
302
                return null;
303 304 305 306 307


        }
    }

刘基明's avatar
刘基明 committed
308

刘基明's avatar
刘基明 committed
309 310 311 312 313 314 315 316 317 318 319 320 321 322
    //计算迄今时间
    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
323
    }
刘基明's avatar
刘基明 committed
324

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