From ae2f87e9ac4e81e6479c726634411f4634d494f4 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 03 七月 2025 16:08:48 +0800
Subject: [PATCH] 相似视频

---
 framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java         |    4 +
 framework/src/main/resources/mapper/lmk/VideoMapper.xml                           |   45 +++++++++++++++
 buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java               |    6 ++
 framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java             |    1 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java    |   16 +++-
 framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java          |   21 ++++++
 framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java               |   10 +++
 framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java |   27 +++++++++
 8 files changed, 123 insertions(+), 7 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
index 8078d3f..9881fd1 100644
--- a/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java
@@ -148,4 +148,10 @@
     public Result esSearch(VideoEsQuery query) {
         return videoService.esSearch(query);
     }
+
+    @PostMapping("/goods/similarly")
+    @ApiOperation(value = "鎸傜浉鍚屽晢鍝佺殑瑙嗛", notes = "鎸傜浉鍚屽晢鍝佺殑瑙嗛")
+    public Result goodsSimilarly(@RequestBody VideoQuery query) {
+        return videoService.recommendVideo(query);
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
index eebf1e0..20890a2 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java
@@ -28,4 +28,8 @@
     @ApiModelProperty("鏂囦欢鍘熷鍚�")
     private String originalFileName;
 
+    private String url;
+
+    private String cover;
+
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java
new file mode 100644
index 0000000..fa27d6e
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java
@@ -0,0 +1,27 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/7/2 10:08
+ */
+@Data
+@ApiModel("鐩稿悓鍟嗗搧瑙嗛")
+public class GoodsSimilarlyQuery extends AbsQuery {
+
+    // TODO 鏌ヨ鎸備簡鍚屼竴鍟嗗搧鐨勮棰戜笉搴旇鍖哄垎鏄帹鑽愯棰戣繕鏄ぇ鍋ュ悍锛岃瀛楁鍙槸鍏堝啓鍦ㄨ繖锛屾殏鏃朵笉鐢�
+    @ApiModelProperty("瑙嗛绫诲瀷")
+    private String videoType;
+
+    @ApiModelProperty("鍟嗗搧id锛岃繖閲岀敤鍟嗗搧id鑰屼笉鏄痵kuId")
+    private List<String> goodsIds;
+
+    @ApiModelProperty("褰撳墠鐨勮棰慽d锛屾煡璇㈡椂鐩存帴鎺掗櫎璇ヨ棰�")
+    private String currentVideoId;
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
index 3aa3b2a..23800fd 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java
@@ -21,11 +21,16 @@
 @ApiModel(value = "Video鏌ヨ鍙傛暟", description = "瑙嗛鍐呭鏌ヨ鍙傛暟")
 public class VideoQuery extends AbsQuery {
 
+    /* ----------------------------- author鏌愪綔鑰呯殑瑙嗛銆乧ollect鏌愪綔鑰呮敹钘忕殑瑙嗛銆乴ike鏌愪綔鑰呯偣璧炵殑瑙嗛 ------------------------------- */
     @ApiModelProperty("浣滆�卛d")
     private String authorId;
 
-    @ApiModelProperty("瑙嗛鏉ユ簮锛歳ecommend鎺ㄨ崘銆乤uthor鏌愪綔鑰呯殑瑙嗛銆乧ollect鏌愪綔鑰呮敹钘忕殑瑙嗛銆乴ike鏌愪綔鑰呯偣璧炵殑瑙嗛")
+    @ApiModelProperty("瑙嗛鏉ユ簮锛歳ecommend鎺ㄨ崘銆乤uthor鏌愪綔鑰呯殑瑙嗛銆乧ollect鏌愪綔鑰呮敹钘忕殑瑙嗛銆乴ike鏌愪綔鑰呯偣璧炵殑瑙嗛銆乻earch鎼滅储銆乬oodsSimilarly鏌ユ寕鍚屼竴鍟嗗搧鐨勮棰�")
     private String videoFrom;
+
+
+
+
 
     /**
      * @see cn.lili.modules.lmk.enums.general.VideoTypeEnum
@@ -33,7 +38,21 @@
     @ApiModelProperty("瑙嗛绫诲瀷锛氳棰戙�佸ぇ鍋ュ悍銆佺鍘紝榛樿涓嶄紶鏌ヨ棰�")
     private String videoType = VideoTypeEnum.VIDEO.getValue();
 
+
+
+
+
+
+
+    /* ----------------------------- search鎼滅储 ------------------------------- */
     @ApiModelProperty("鎼滅储瑙嗛鐨勫叧閿瘝")
     private String keyword;
+
+    /* ----------------------------- goodsSimilarly鏌ユ寕鍚屼竴鍟嗗搧鐨勮棰� ------------------------------- */
+    @ApiModelProperty("鍟嗗搧id锛岃繖閲岀敤鍟嗗搧id鑰屼笉鏄痵kuId")
+    private List<String> goodsIds;
+
+    @ApiModelProperty("褰撳墠鐨勮棰慽d锛屾煡璇㈡椂鐩存帴鎺掗櫎璇ヨ棰�")
+    private String currentVideoId;
 }
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
index 252babb..8aa2612 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java
@@ -41,7 +41,7 @@
     IPage managerPage(IPage page, @Param("query") ManagerVideoQuery query);
 
     /**
-     * 鏌ュ嚭5涓帹鑽愯棰�
+     * 鏌ユ帹鑽愯棰�
      *
      * @return
      */
@@ -155,4 +155,12 @@
      * @return
      */
     List<VideoIndex> getEsPage(@Param("start") int start, @Param("pageSize") int pageSize);
+
+    /**
+     * 鏌ヨ鎸備簡鍚屼竴鍟嗗搧鐨勮棰�
+     *
+     * @param page
+     * @param goodsSimilarlyQuery
+     */
+    IPage goodsSimilarlyPage(IPage page, @Param("query") GoodsSimilarlyQuery goodsSimilarlyQuery);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
index 2592ed4..2dbf275 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java
@@ -297,4 +297,5 @@
      * @return
      */
     Result esSearch(VideoEsQuery query);
+
 }
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 ad439e9..4f22dc3 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
@@ -492,11 +492,16 @@
                 baseMapper.getAuthorLikeVideoPage(page, query3);
                 break;
             case "search":  // 鍔犺浇es鎼滅储瑙嗛
-                VideoEsQuery query4 = new VideoEsQuery();
-                BeanUtils.copyProperties(query, query4);
-                query4.setPageNumber((int) query.getPageNumber());
-                query4.setPageSize((int) query.getPageSize());
-                return this.esSearch(query4);
+                VideoEsQuery videoEsQuery = new VideoEsQuery();
+                BeanUtils.copyProperties(query, videoEsQuery);
+                videoEsQuery.setPageNumber((int) query.getPageNumber());
+                videoEsQuery.setPageSize((int) query.getPageSize());
+                return this.esSearch(videoEsQuery);
+            case "goodsSimilarly":
+                GoodsSimilarlyQuery goodsSimilarlyQuery = new GoodsSimilarlyQuery();
+                BeanUtils.copyProperties(query, goodsSimilarlyQuery);
+                baseMapper.goodsSimilarlyPage(page, goodsSimilarlyQuery);
+                break;
             default:
                 break;
         }
@@ -1210,4 +1215,5 @@
         }).collect(Collectors.toList());
         return Result.ok().data(vos).total(searchHits.getTotalHits());
     }
+
 }
diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
index e9b22bf..c0482ca 100644
--- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -243,6 +243,51 @@
         ORDER BY
             LV.create_time DESC
     </select>
+
+    <select id="goodsSimilarlyPage" resultMap="WxResultMap">
+        SELECT
+            LV.author_id,
+            LV.cover_url,
+            LV.video_fit,
+            LV.video_duration,
+            LV.video_file_key,
+            LV.title,
+            LV.goods_view_num,
+            LV.goods_order_num,
+            LV.recommend,
+            LV.status,
+            LV.play_num,
+            LV.comment_num,
+            LV.collect_num,
+            LV.thumbs_up_num,
+            LV.weight,
+            LV.audit_pass_time,
+            LV.update_time,
+            LV.create_time,
+            LV.video_content_type,
+            LV.video_type,
+            LV.video_imgs,
+            LV.id,
+            CASE
+                WHEN LM.nick_name IS NOT NULL THEN LM.nick_name
+                WHEN LM.nick_name IS NULL THEN (SELECT nick_name FROM li_admin_user WHERE id = LV.author_id)
+                ELSE ''
+            END as authorName,
+            CASE
+                WHEN LM.face IS NOT NULL THEN LM.face
+                WHEN LM.face IS NULL THEN (SELECT avatar FROM li_admin_user WHERE id = LV.author_id)
+                ELSE ''
+            END as authorAvatar
+        FROM
+            lmk_video LV
+                INNER JOIN lmk_video_goods LVG ON LVG.video_id = LV.id AND LVG.goods_id in <foreach collection="query.goodsIds" open="(" item="goodsId" close=")" separator=",">#{goodsId}</foreach>
+                LEFT JOIN li_member LM ON LV.author_id = LM.id
+        WHERE
+            LV.delete_flag = 0 AND LV.status = '1' AND LV.id != #{query.currentVideoId}
+        ORDER BY
+            LV.create_time DESC
+    </select>
+
     <select id="recommendHealthVideo" resultMap="WxResultMap">
         SELECT
             LV.author_id,

--
Gitblit v1.8.0