peng
2 天以前 6d95ff17f7d0de0b3efafe033ba1e3b4487d4f2e
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -19,6 +19,8 @@
import cn.lili.modules.member.entity.dos.Member;
import cn.lili.modules.member.service.FootprintService;
import cn.lili.modules.member.service.MemberService;
import cn.lili.modules.permission.entity.dos.AdminUser;
import cn.lili.modules.permission.service.AdminUserService;
import cn.lili.modules.search.entity.dos.EsGoodsIndex;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
import cn.lili.rocketmq.tags.CommentTagsEnum;
@@ -85,7 +87,7 @@
    private final VideoGoodsService videoGoodsService;
    private final KitchenTypeService kitchenTypeService;
    private final Cache cache;
    private final AdminUserService adminUserService;
    private final RocketmqCustomProperties rocketmqCustomProperties;
    private final RocketMQTemplate rocketMQTemplate;
    private final ThumbsUpRecordService thumbsUpRecordService;
@@ -251,7 +253,9 @@
        String destination = rocketmqCustomProperties.getVideoTopic() + ":" + VideoTagsEnum.ES_DOC_ADD_OR_UPDATE.name();
        rocketMQTemplate.asyncSend(destination, JSON.toJSONString(videoIndex), RocketmqSendCallbackBuilder.commonCallback());
        return Result.ok("发布成功,视频审核中~");
    }    @Override
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result systemPublish(WxVideoForm form) {
        // 1.保存视频
@@ -426,7 +430,10 @@
            // 3. 获取视频临时访问地址、设置视频标签
            page.getRecords().forEach(v -> {
                v.setTagList(tagMap.get(v.getId()));
                v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
                String coverUrl = v.getCoverUrl();
                if (StringUtils.isNotBlank(coverUrl)&&!coverUrl.contains("http")) {
                    v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
                }
                v.getGoodsList().forEach(goods ->{
                    if (StringUtils.isNotBlank(goods.getThumbnail())&&!goods.getThumbnail().contains("http")) {
                        goods.setThumbnail(cosUtil.getPreviewUrl(goods.getThumbnail()));
@@ -558,8 +565,16 @@
            case "recommend":// 加载推荐视频
                baseMapper.recommendVideo(page, query);
                //推荐视频重新排序
                List<WxVideoVO> records = page.getRecords();
                Collections.shuffle(records);
                buildRecommendVideoList(page, query.getVideoId());
//                WxVideoVO wxVideoVO = null;
//                if (StringUtils.isNotBlank(query.getVideoId())) {
//                    wxVideoVO  = baseMapper.recommendVideoByVideoId(query);
//                }
//                List<WxVideoVO> records = page.getRecords();
//                Collections.shuffle(records);
//                if (wxVideoVO!=null) {
//                    records.set(0, wxVideoVO);
//                }
                break;
            case "author":  // 加载视频主页我发布的视频
                AuthorVideoQuery query1 = new AuthorVideoQuery();
@@ -619,7 +634,10 @@
                v.setCommentNum(this.getCommentNum(v.getId(), v.getCommentNum()));
                v.setCollectNum(this.getCollectNum(v.getId(), v.getCollectNum()));
                v.setThumbsUpNum(this.getThumbsUpNum(v.getId(), v.getThumbsUpNum()));
                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                String authorAvatar = v.getAuthorAvatar();
                if (StringUtils.isNotBlank(authorAvatar)&&!authorAvatar.contains("http")) {
                    v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
                }
                if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                    v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                    v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -644,7 +662,7 @@
     * @param mysqlNum
     * @return
     */
    private Integer getCommentNum(String videoId, Integer mysqlNum) {
    public Integer getCommentNum(String videoId, Integer mysqlNum) {
        Object redisNum = cache.get(CachePrefix.VIDEO_COMMENT_NUM.getPrefixWithId(videoId));
        if (Objects.isNull(redisNum)) {
            // redis中没有就把数据库的写到redis中
@@ -661,7 +679,7 @@
     * @param mysqlNum
     * @return
     */
    private Integer getCollectNum(String videoId, Integer mysqlNum) {
    public Integer getCollectNum(String videoId, Integer mysqlNum) {
        Object redisNum = cache.get(CachePrefix.VIDEO_COLLECT_NUM.getPrefixWithId(videoId));
        if (Objects.isNull(redisNum)) {
            // redis中没有就把数据库的写到redis中
@@ -678,7 +696,7 @@
     * @param mysqlNum
     * @return
     */
    private Integer getThumbsUpNum(String videoId, Integer mysqlNum) {
    public Integer getThumbsUpNum(String videoId, Integer mysqlNum) {
        Object redisNum = cache.get(CachePrefix.VIDEO_THUMBS_UP_NUM.getPrefixWithId(videoId));
        if (Objects.isNull(redisNum)) {
            // redis中没有就把数据库的写到redis中
@@ -692,7 +710,10 @@
    public Result healthRecommendVideo(WxHealthVideoQuery query) {
        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
        //获取大健康视频列表
        baseMapper.recommendHealthVideo(page,query);
        buildRecommendVideoList(page, query.getVideoId());
        if (page.getTotal() > 0) {
            page.getRecords().forEach(v -> {
                v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
@@ -716,8 +737,11 @@
    @Override
    public Result kitchenRecommendVideo(WxKitchenVideoQuery query) {
        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
         baseMapper.wxKitchenVideoQuery(page, query);
         page.getRecords().forEach(v -> {
        baseMapper.wxKitchenVideoQuery(page, query);
        buildRecommendVideoList(page, query.getVideoId());
        page.getRecords().forEach(v -> {
             v.setAuthorAvatar(cosUtil.getPreviewUrl(v.getAuthorAvatar()));
             if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                 v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
@@ -725,6 +749,51 @@
             }
         });
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
    /**
     *
     * @param page
     * @param videoId videoId推荐的视频id
     */
    private void buildRecommendVideoList(IPage<WxVideoVO> page, String videoId) {
        //查询到有视频列表
        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(page.getRecords())){
            //现将视频顺序打乱
            Collections.shuffle(page.getRecords());
            WxVideoVO wxVideoVO = null;
            if (StringUtils.isNotBlank(videoId)){
                VideoQuery videoQuery = new VideoQuery();
                videoQuery.setVideoId(videoId);
                wxVideoVO  = baseMapper.recommendVideoByVideoId(videoQuery);
                boolean found = false;
                int foundIndex = -1;
                List<WxVideoVO> records = page.getRecords();
                //判断二维码过来的videoId是否存在与page.getRecords重复 记录下标
                for (int i = 0; i < records.size(); i++) {
                    if (wxVideoVO.getId().equals(records.get(i).getId())) {
                        found = true;
                        foundIndex = i;
                        break;
                    }
                }
                if (found){
                    WxVideoVO matchedRecord = records.remove(foundIndex);
                    records.add(0, matchedRecord);
                }else {
                    // 如果没找到,替换首位
                    records.set(0, wxVideoVO);
                }
            }
        }
    }
    @Override
@@ -792,7 +861,13 @@
    @Override
    public Result getAuthorInfo(String authorId) {
        VideoAccountVO vo = baseMapper.getAuthorInfo(authorId, UserContext.getCurrentUserId());
        AdminUser adminUser = adminUserService.getById(authorId);
        VideoAccountVO vo;
        if (Objects.isNull(adminUser)) {
            vo  = baseMapper.getAuthorInfo(authorId, UserContext.getCurrentUserId());
        }else {
            vo = baseMapper.getAuthorInfoAdmin(authorId, UserContext.getCurrentUserId());
        }
        vo.setSelf(authorId.equals(UserContext.getCurrentUserId()));
        // 查询获赞数
        List<String> videoIds = baseMapper.getVideoIdsByAuthor(authorId);