From 2226679bda25ddf977f12367a9a37fcf4e377249 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 17 六月 2025 11:00:53 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java |  318 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 294 insertions(+), 24 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
index fcc57e9..4fee572 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java
@@ -1,29 +1,25 @@
 package cn.lili.modules.lmk.service.impl;
 
-import cn.lili.base.AbsQuery;
 import cn.lili.common.security.context.UserContext;
-import cn.lili.modules.lmk.domain.entity.VideoAuditRecord;
-import cn.lili.modules.lmk.domain.entity.VideoTag;
-import cn.lili.modules.lmk.domain.entity.VideoTagRef;
+import cn.lili.modules.lmk.domain.entity.*;
 import cn.lili.modules.lmk.domain.form.*;
-import cn.lili.modules.lmk.domain.query.AuthorVideoQuery;
-import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
+import cn.lili.modules.lmk.domain.query.*;
 import cn.lili.modules.lmk.domain.vo.*;
-import cn.lili.modules.lmk.enums.general.TagCreateTypeEnum;
-import cn.lili.modules.lmk.enums.general.VideoStatusEnum;
-import cn.lili.modules.lmk.enums.general.ViewTypeEnum;
+import cn.lili.modules.lmk.enums.general.*;
 import cn.lili.modules.lmk.service.*;
 import cn.lili.modules.member.entity.dos.FootPrint;
+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.utils.COSUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import cn.lili.modules.lmk.domain.entity.Video;
 import cn.lili.modules.lmk.mapper.VideoMapper;
 import cn.lili.base.Result;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import cn.lili.modules.lmk.domain.query.VideoQuery;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -56,6 +52,11 @@
     private final COSUtil cosUtil;
     private final FootprintService footprintService;
     private final MySubscribeService mySubscribeService;
+    private final MemberService memberService;
+    private final VideoAccountService videoAccountService;
+    private final KitchenVideoTypeRefService kitchenVideoTypeRefService;
+    private final VideoGoodsService videoGoodsService;
+
 
     /**
      * 娣诲姞
@@ -63,8 +64,8 @@
      * @return
      */
     @Override
-    public Result add(VideoForm form) {
-        Video entity = VideoForm.getEntityByForm(form, null);
+    public Result add(WxVideoForm form) {
+        Video entity = WxVideoForm.getEntityByForm(form, null);
         baseMapper.insert(entity);
         return Result.ok("娣诲姞鎴愬姛");
     }
@@ -75,7 +76,7 @@
      * @return
      */
     @Override
-    public Result update(VideoForm form) {
+    public Result update(WxVideoForm form) {
         Video entity = baseMapper.selectById(form.getId());
 
         // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
@@ -130,7 +131,11 @@
         Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
         List<SimpleVideoTagVO> tags = videoTagRefService.getTagsByVideoIds(Arrays.asList(id));
         vo.setTagList(tags);
-        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+        if (VideoContentTypeEnum.VIDEO.getValue().equals(vo.getVideoContentType())) {
+            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+        } else if (VideoContentTypeEnum.IMG.getValue().equals(vo.getVideoContentType()) && StringUtils.isNotBlank(vo.getVideoImgs())) {
+            vo.setImgs(JSON.parseArray(vo.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
+        }
         return Result.ok().data(vo);
     }
 
@@ -149,11 +154,16 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Result publish(VideoForm form) {
+    public Result publish(WxVideoForm form) {
         // 1.淇濆瓨瑙嗛
-        Video video = VideoForm.getEntityByForm(form, null);
+        Video video = WxVideoForm.getEntityByForm(form, null);
         video.setAuthorId(UserContext.getCurrentUserId());
         video.setStatus(VideoStatusEnum.AUDITING.getValue());
+        video.setCoverUrl(form.getCover());
+        video.setVideoType(VideoTypeEnum.VIDEO.getValue());
+        if (VideoContentTypeEnum.IMG.getValue().equals(form.getVideoContentType())) {
+            video.setVideoImgs(JSON.toJSONString(form.getVideoImgs()));
+        }
         baseMapper.insert(video);
         // 2.澶勭悊鏍囩
         List<VideoTagRef> videoTagRefs = form.getTags().stream().map(tag -> {
@@ -178,8 +188,21 @@
             return videoTagRef;
         }).collect(Collectors.toList());
         videoTagRefService.saveBatch(videoTagRefs);
-        // 3.淇濆瓨瑙嗛鏂囦欢淇℃伅
+        // 3. 淇濆瓨瑙嗛鏂囦欢淇℃伅
         lmkFileService.addByForm(form.getFileInfo());
+        // 4. 澶勭悊閫夋嫨鐨勫晢鍝�
+        if (CollectionUtils.isNotEmpty(form.getGoodsList())) {
+            List<VideoGoods> videoGoods = new ArrayList<>(2);
+            for (int i = 0; i < form.getGoodsList().size(); i++) {
+                VideoGoods e = new VideoGoods();
+                e.setVideoId(video.getId());
+                e.setGoodsId(form.getGoodsList().get(i).getGoodsId());
+                e.setGoodsNum(form.getGoodsList().get(i).getGoodsNum());
+                e.setOrderNum(i);
+                videoGoods.add(e);
+            }
+            videoGoodsService.saveBatch(videoGoods);
+        }
         return Result.ok("鍙戝竷鎴愬姛锛岃棰戝鏍镐腑~");
     }
 
@@ -193,11 +216,11 @@
         if (page.getTotal() > 0) {
             Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(
                     page.getRecords().stream().map(VideoVO::getId).collect(Collectors.toList())
-            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));;
+            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));
             // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛�
             page.getRecords().forEach(v -> {
                 v.setTagList(tagMap.get(v.getId()));
-//                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
             });
         }
         return Result.ok().data(page.getRecords()).total(page.getTotal());
@@ -260,10 +283,26 @@
     }
 
     @Override
-    public Result recommendVideo(AbsQuery query) {
+    public Result recommendVideo(VideoQuery query) {
         // 鎺ㄨ崘绠楁硶锛� 1. 鏍规嵁鐢ㄦ埛鐨勬敹钘忚棰戠殑鏍囩  2. 鏍规嵁鐢ㄦ埛鍏虫敞鐨勪綔鑰呯殑鍏跺畠瑙嗛  3. 鏍规嵁鐢ㄦ埛鐨勮鐪嬭褰曪紙瑙傜湅鏃堕暱杈冮暱鐨勩�侀噸澶嶈鐪嬫鏁拌緝澶氱殑锛� 4. 鍩轰簬鐩镐技鐢ㄦ埛鐨勮鐪嬭涓烘潵缁欒鐢ㄦ埛鎺ㄨ崘
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
-        baseMapper.recommendVideo(page);
+        switch (query.getVideoFrom()) {
+            case "recommend":
+                baseMapper.recommendVideo(page, query);
+                break;
+            case "author":
+                AuthorVideoQuery query1 = new AuthorVideoQuery();
+                query1.setAuthorId(query.getAuthorId());
+                baseMapper.getAuthorVideoPage(page, query1);
+                break;
+            case "collect":
+                AuthorVideoQuery query2 = new AuthorVideoQuery();
+                query2.setAuthorId(query.getAuthorId());
+                baseMapper.getAuthorCollectVideoPage(page, query2);
+                break;
+            default:
+                break;
+        }
         if (page.getTotal() > 0) {
             List<String> videoIds = page.getRecords().stream().map(WxVideoVO::getId).collect(Collectors.toList());
             Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(videoIds)
@@ -275,11 +314,35 @@
             List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId());
             // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佷綔鑰呮槸鍚﹀叧娉�
             page.getRecords().forEach(v -> {
-                v.setGoods(new VideoGoodsVO());
                 v.setTagList(tagMap.get(v.getId()));
                 v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId())));
-                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
+                                    v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+//                    v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+                } else if (VideoContentTypeEnum.IMG.getValue().equals(v.getVideoContentType()) && StringUtils.isNotBlank(v.getVideoImgs())) {
+                    v.setImgs(JSON.parseArray(v.getVideoImgs(), String.class).stream().map(fileKey -> cosUtil.getPreviewUrl(fileKey)).collect(Collectors.toList()));
+                }
+                v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
                 v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId()));
+            });
+        }
+        return Result.ok().data(page.getRecords());
+    }
+
+    @Override
+    public Result healthRecommendVideo(WxHealthVideoQuery query) {
+        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
+        //鑾峰彇澶у仴搴疯棰戝垪琛�
+                baseMapper.recommendHealthVideo(page,query);
+        if (page.getTotal() > 0) {
+            page.getRecords().forEach(v -> {
+                if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
+                    v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+//                    v.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+                } else if (VideoContentTypeEnum.IMG.getValue().equals(v.getVideoContentType()) && StringUtils.isNotBlank(v.getVideoImgs())) {
+                    v.setImgs(JSON.parseArray(v.getVideoImgs(), String.class).stream().map(cosUtil::getPreviewUrl).collect(Collectors.toList()));
+                }
+                v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
             });
         }
         return Result.ok().data(page.getRecords());
@@ -334,7 +397,214 @@
     @Override
     public Result getAuthorVideoPage(AuthorVideoQuery query) {
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
+        query.setAuthorSelf(UserContext.getCurrentUserId().equals(query.getAuthorId()));
         baseMapper.getAuthorVideoPage(page, query);
+        for (WxVideoVO vo : page.getRecords()) {
+            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
+//            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+            vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+            vo.setOptions(VideoSupportOpEnum.getVideoOpByStatus(vo.getStatus()));
+        }
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
+
+    @Override
+    public Result getAuthorCollectVideoPage(AuthorVideoQuery query) {
+        IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
+        baseMapper.getAuthorCollectVideoPage(page, query);
+        for (WxVideoVO vo : page.getRecords()) {
+            vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
+//            vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+            vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+            vo.setCollected(Boolean.TRUE);
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    public Result getGoodsDetail(String videoId) {
+        List<VideoGoodsDetailVO> goodsList = baseMapper.getVideoGoods(videoId);
+        return Result.ok().data(goodsList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result homePageInfoEdit(VideoHomePageInfoForm form) {
+        new LambdaUpdateChainWrapper<>(memberService.getBaseMapper())
+                .eq(Member::getId, UserContext.getCurrentUserId())
+                .set(Member::getNickName, form.getNickName())
+                .set(Member::getFace, form.getAvatar())
+                .update();
+        new LambdaUpdateChainWrapper<>(videoAccountService.getBaseMapper())
+                .eq(VideoAccount::getUserId, UserContext.getCurrentUserId())
+                .set(VideoAccount::getMotto, form.getMotto())
+                .update();
+        return Result.ok("淇濆瓨鎴愬姛");
+    }
+
+    @Override
+    public Result wxDetail(String id) {
+        WxEditVideoVO vo = baseMapper.wxDetail(id);
+        if (Objects.isNull(vo)) {
+            return Result.error("瑙嗛涓嶅瓨鍦�");
+        }
+        vo.setCoverUrl(cosUtil.getPreviewUrl(vo.getCoverFileKey()));
+//        vo.setVideoUrl(cosUtil.getPreviewUrl(vo.getVideoFileKey()));
+        vo.setVideoUrl("https://videos.pexels.com/video-files/13602965/13602965-hd_1920_1080_30fps.mp4");
+        List<WxVideoTagForm> tags = videoTagRefService.getTagsByVideoIds(Arrays.asList(vo.getId()))
+                .stream()
+                .map(i -> {
+                    WxVideoTagForm tag = new WxVideoTagForm();
+                    tag.setTagName(i.getTagName());
+                    tag.setId(i.getId());
+                    return tag;
+                })
+                .collect(Collectors.toList());
+        vo.setTags(tags);
+        return Result.ok().data(vo);
+    }
+
+    @Override
+    public Result healthVideo(HealthVideoForm form) {
+        Video video = new Video();
+        BeanUtils.copyProperties(form, video);
+        video.setAuthorId(UserContext.getCurrentUserId());
+        video.setVideoType(VideoTypeEnum.HEALTH.getValue());
+        //璁剧疆濉厖妯″紡 淇濇寔姣斾緥锛屽畬鏁存樉绀�
+        video.setVideoFit("contain");
+        video.setVideoContentType(VideoContentTypeEnum.VIDEO.getValue());
+        video.setStatus(VideoStatusEnum.PUBLISHED.getValue());
+        baseMapper.insert(video);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    public Result healthPage(HealthVideoQuery query) {
+        IPage<VideoVO> page = PageUtil.getPage(query, VideoVO.class);
+        // 1. 鍏堟煡鍑鸿棰戜俊鎭�
+        baseMapper.healthPage(page, query);
+        // 2. 鍗曠嫭鏌ュ嚭鏍囩淇℃伅
+        if (page.getTotal() > 0) {
+            Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(
+                    page.getRecords().stream().map(VideoVO::getId).collect(Collectors.toList())
+            ).stream().collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));;
+            // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛�
+            page.getRecords().forEach(v -> {
+                v.setTagList(tagMap.get(v.getId()));
+                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                v.setCoverShowUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
+            });
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    public Result updateHealthVideo(HealthVideoForm form) {
+        Video entity = baseMapper.selectById(form.getId());
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    @Override
+    public Result delHealth(String id) {
+        Video entity = baseMapper.selectById(id);
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        String videoType = entity.getVideoType();
+        if (!VideoTypeEnum.HEALTH.getValue().equals(videoType)) {
+            log.error("鍒犻櫎闈炲ぇ鍋ュ悍瑙嗛瑙嗛id涓�------->"+id);
+            return Result.error("鍒犻櫎澶辫触");
+        }
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result addKitchenVideo(KitchenVideoForm form) {
+        Video video = new Video();
+        BeanUtils.copyProperties(form, video);
+        video.setAuthorId(UserContext.getCurrentUserId());
+        video.setVideoType(VideoTypeEnum.COOK.getValue());
+        //璁剧疆濉厖妯″紡 淇濇寔姣斾緥锛屽畬鏁存樉绀�
+        video.setVideoFit("contain");
+        video.setVideoContentType(VideoContentTypeEnum.VIDEO.getValue());
+        video.setStatus(VideoStatusEnum.PUBLISHED.getValue());
+        baseMapper.insert(video);
+        String id = video.getId();
+        List<KitchenVideoTypeRef> collect = form.getCheckKitchenType().stream().map(item -> {
+                    KitchenVideoTypeRef kitchenVideoTypeRef = new KitchenVideoTypeRef();
+                    //璁剧疆瑙嗛id
+                    kitchenVideoTypeRef.setVideoId(id);
+                    //璁剧疆鏍囩id
+                    kitchenVideoTypeRef.setKitchenTypeId(item);
+                    return kitchenVideoTypeRef;
+                }
+        ).collect(Collectors.toList());
+        kitchenVideoTypeRefService.saveBatch(collect);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result updateKitchenVideo(KitchenVideoForm form) {
+        Video video = baseMapper.selectById(form.getId());
+        Assert.notNull(video, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, video);
+        baseMapper.updateById(video);
+        //鍒犻櫎鍘熸潵鐨勭被鍨嬪叧绯�
+        kitchenVideoTypeRefService.remove(Wrappers.<KitchenVideoTypeRef>lambdaQuery()
+                .eq(KitchenVideoTypeRef::getVideoId, form.getId()));
+        String id = video.getId();
+        List<KitchenVideoTypeRef> collect = form.getCheckKitchenType().stream().map(item -> {
+                    KitchenVideoTypeRef kitchenVideoTypeRef = new KitchenVideoTypeRef();
+                    //璁剧疆瑙嗛id
+                    kitchenVideoTypeRef.setVideoId(id);
+                    //璁剧疆鏍囩id
+                    kitchenVideoTypeRef.setKitchenTypeId(item);
+                    return kitchenVideoTypeRef;
+                }
+        ).collect(Collectors.toList());
+        kitchenVideoTypeRefService.saveBatch(collect);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    @Override
+    public Result KitchenVideoQuery(KitchenVideoQuery query) {
+        IPage<KitchenVideoVO> page = PageUtil.getPage(query, KitchenVideoVO.class);
+        // 1. 鍏堟煡鍑鸿棰戜俊鎭�
+        baseMapper.kitchenPage(page, query);
+        // 2. 鍗曠嫭鏌ュ嚭鏍囩淇℃伅
+        if (page.getTotal() > 0) {
+            Map<String, List<KitchenVideoTypeVO>> typeMap = kitchenVideoTypeRefService
+                    .getTypeByVideoIds(
+                            page.getRecords()
+                                    .stream().map(KitchenVideoVO::getId).collect(Collectors.toList()))
+                    .stream().collect(Collectors.groupingBy(KitchenVideoTypeVO::getVideoId));
+            // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛�
+            page.getRecords().forEach(v -> {
+                v.setTypeList(typeMap.get(v.getId()));
+                v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                v.setCoverShowUrl(cosUtil.getPreviewUrl(v.getCoverUrl()));
+            });
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result delKitchen(String id) {
+        Video entity = baseMapper.selectById(id);
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        String videoType = entity.getVideoType();
+        if (!VideoTypeEnum.COOK.getValue().equals(videoType)) {
+            log.error("鍒犻櫎闈炲ぇ绁炲帹瑙嗛瑙嗛id涓�------->"+id);
+            return Result.error("鍒犻櫎澶辫触");
+        }
+        baseMapper.deleteById(id);
+        kitchenVideoTypeRefService.remove(Wrappers.<KitchenVideoTypeRef>lambdaQuery()
+                .eq(KitchenVideoTypeRef::getVideoId, id));
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
 }

--
Gitblit v1.8.0