From 0e066580ae71856470dd2b2f621cdad78fd0e608 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 26 五月 2025 18:12:53 +0800
Subject: [PATCH] 浏览足迹表适配适配播放记录、视频表增加时长字段

---
 framework/src/main/java/cn/lili/modules/member/entity/dto/FootPrintQueryParams.java  |    6 ++
 framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoForm.java               |    3 +
 framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java   |    3 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java                   |    3 +
 buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java                  |    7 ++
 framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoFootPrintForm.java      |   22 +++++++
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java       |   20 +++++-
 framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java             |   12 +++-
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java                 |    4 +
 framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java |   18 -----
 framework/src/main/resources/mapper/lmk/VideoMapper.xml                              |   17 +++--
 framework/src/main/java/cn/lili/modules/lmk/enums/general/ViewTypeEnum.java          |   46 +++++++++++++++
 framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java                |   13 +++-
 13 files changed, 140 insertions(+), 34 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 ec8ab0d..c3d16d2 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
@@ -3,6 +3,8 @@
 import cn.lili.base.AbsQuery;
 import cn.lili.group.Update;
 import cn.lili.group.Add;
+import cn.lili.modules.lmk.domain.form.VideoFootPrintForm;
+import cn.lili.modules.member.entity.dos.FootPrint;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
 import lombok.RequiredArgsConstructor;
@@ -70,4 +72,9 @@
         return videoService.recommendVideo(query);
     }
 
+    @PostMapping("/view/record")
+    @ApiOperation(value = "淇濆瓨瑙傜湅璁板綍", notes = "淇濆瓨瑙傜湅璁板綍")
+    public Result saveViewRecord(VideoFootPrintForm form) {
+        return videoService.saveViewRecord(form);
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
index b71b1ea..adc30c3 100644
--- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
@@ -37,6 +37,7 @@
 import cn.lili.modules.goods.service.WholesaleService;
 import cn.lili.modules.goods.sku.GoodsSkuBuilder;
 import cn.lili.modules.goods.sku.render.SalesModelRender;
+import cn.lili.modules.lmk.enums.general.ViewTypeEnum;
 import cn.lili.modules.member.entity.dos.FootPrint;
 import cn.lili.modules.promotion.entity.dos.Coupon;
 import cn.lili.modules.promotion.entity.dos.PromotionGoods;
@@ -365,7 +366,7 @@
 
         //璁板綍鐢ㄦ埛瓒宠抗
         if (currentUser != null) {
-            FootPrint footPrint = new FootPrint(currentUser.getId(), goodsIndex.getStoreId(), goodsId, skuId);
+            FootPrint footPrint = new FootPrint(currentUser.getId(), goodsIndex.getStoreId(), goodsId, skuId, ViewTypeEnum.GOODS.getValue(), null);
             String destination = rocketmqCustomProperties.getGoodsTopic() + ":" + GoodsTagsEnum.VIEW_GOODS.name();
             rocketMQTemplate.asyncSend(destination, footPrint, RocketmqSendCallbackBuilder.commonCallback());
         }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java
index 5956199..c385ca4 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/Video.java
@@ -37,6 +37,10 @@
     /** 瑙嗛濉厖妯″紡 */
     private String videoFit;
 
+    @TableField("video_duration")
+    /** 瑙嗛闀垮害(绉�) */
+    private Long videoDuration;
+
     @TableField("title")
     /** 瑙嗛鏍囬 */
     private String title;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoFootPrintForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoFootPrintForm.java
new file mode 100644
index 0000000..aa5b957
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoFootPrintForm.java
@@ -0,0 +1,22 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/5/26 15:15
+ */
+@Data
+@ApiModel("娴忚瓒宠抗-瑙嗛")
+public class VideoFootPrintForm extends AbsForm {
+
+    @ApiModelProperty("瑙嗛id")
+    private String videoId;
+
+    @ApiModelProperty("瑙傜湅鏃堕暱")
+    private Long viewDuration;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoForm.java
index a349f7e..cccd50b 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoForm.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/VideoForm.java
@@ -49,6 +49,9 @@
     @ApiModelProperty("瑙嗛濉厖妯″紡")
     private String videoFit;
 
+    @ApiModelProperty("瑙嗛闀垮害锛氱")
+    private Long videoDuration;
+
     @ApiModelProperty("鏂囦欢淇℃伅")
     @Valid
     private FileInfoForm fileInfo;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
index 8f82ae3..a862552 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoVO.java
@@ -42,6 +42,9 @@
     @ApiModelProperty("瑙嗛濉厖妯″紡")
     private String videoFit;
 
+    @ApiModelProperty("瑙嗛闀垮害锛氱")
+    private Long videoDuration;
+
     /** 瑙嗛鏍囬 */
     @ApiModelProperty("瑙嗛鏍囬")
     private String title;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/ViewTypeEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ViewTypeEnum.java
new file mode 100644
index 0000000..10ede6e
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ViewTypeEnum.java
@@ -0,0 +1,46 @@
+package cn.lili.modules.lmk.enums.general;
+
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 娴忚绫诲瀷
+ *
+ * @author锛歺p
+ * @date锛�2025/5/14 10:30
+ */
+@Getter
+public enum ViewTypeEnum {
+
+    VIDEO("video", "瑙嗛"),
+    GOODS("goods", "鍟嗗搧"),
+    ;
+
+    private final String value;
+
+
+    private final String desc;
+
+    ViewTypeEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    /**
+     * 鑾峰彇鍚箟
+     *
+     * @param value
+     * @return
+     */
+    public static String getDescByValue(String value) {
+        if (StringUtils.isBlank(value)) {
+            return null;
+        }
+        for (ViewTypeEnum e : ViewTypeEnum.values()){
+            if (value.equals(e.getValue())) {
+                return e.getDesc();
+            }
+        }
+        return null;
+    }
+}
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 5f0ce49..a781e88 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
@@ -2,14 +2,11 @@
 
 import cn.lili.base.AbsQuery;
 import cn.lili.modules.lmk.domain.entity.Video;
-import cn.lili.modules.lmk.domain.form.VideoAuditingForm;
-import cn.lili.modules.lmk.domain.form.VideoDownForm;
-import cn.lili.modules.lmk.domain.form.VideoRecommendForm;
+import cn.lili.modules.lmk.domain.form.*;
 import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
 import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import cn.lili.base.Result;
-import cn.lili.modules.lmk.domain.form.VideoForm;
 import cn.lili.modules.lmk.domain.query.VideoQuery;
 import java.util.List;
 
@@ -130,4 +127,12 @@
      * @param numList
      */
     void updateCollectNumBatch(List<CollectTypeNumVO> numList);
+
+    /**
+     * 淇濆瓨瑙嗛瑙傜湅璁板綍
+     *
+     * @param form
+     * @return
+     */
+    Result saveViewRecord(VideoFootPrintForm form);
 }
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 053fbfc..68137f4 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
@@ -5,14 +5,15 @@
 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.form.VideoAuditingForm;
-import cn.lili.modules.lmk.domain.form.VideoDownForm;
-import cn.lili.modules.lmk.domain.form.VideoRecommendForm;
+import cn.lili.modules.lmk.domain.form.*;
 import cn.lili.modules.lmk.domain.query.ManagerVideoQuery;
 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.service.*;
+import cn.lili.modules.member.entity.dos.FootPrint;
+import cn.lili.modules.member.service.FootprintService;
 import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import cn.lili.modules.lmk.domain.entity.Video;
@@ -21,7 +22,6 @@
 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.form.VideoForm;
 import cn.lili.modules.lmk.domain.query.VideoQuery;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.ListUtils;
@@ -53,6 +53,7 @@
     private final VideoAuditRecordService videoAuditRecordService;
     private final MyCollectService myCollectService;
     private final COSUtil cosUtil;
+    private final FootprintService footprintService;
 
     /**
      * 娣诲姞
@@ -289,4 +290,15 @@
             baseMapper.updateCollectNumBatch(chunk);
         }
     }
+
+    @Override
+    public Result saveViewRecord(VideoFootPrintForm form) {
+        FootPrint footPrint = new FootPrint();
+        footPrint.setViewType(ViewTypeEnum.VIDEO.getValue());
+        footPrint.setRefId(form.getVideoId());
+        footPrint.setMemberId(UserContext.getCurrentUserId());
+        footPrint.setViewDuration(form.getViewDuration());
+        footprintService.saveFootprint(footPrint);
+        return Result.ok();
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java
index 355df4a..513d979 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/FootPrint.java
@@ -33,10 +33,16 @@
     @ApiModelProperty(value = "搴楅摵Id")
     private String storeId;
 
-    @ApiModelProperty(value = "鍟嗗搧ID")
-    private String goodsId;
+    @ApiModelProperty(value = "鍟嗗搧ID/瑙嗛ID")
+    private String refId;
 
     @ApiModelProperty(value = "瑙勬牸ID")
     private String skuId;
 
-}
\ No newline at end of file
+    @ApiModelProperty(value = "娴忚绫诲瀷锛歡oods鍟嗗搧銆乿iew瑙嗛")
+    private String viewType;
+
+    @ApiModelProperty(value = "瑙傜湅鏃堕暱锛氱")
+    private Long viewDuration;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/FootPrintQueryParams.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/FootPrintQueryParams.java
index d2a5ec5..6d5d41d 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dto/FootPrintQueryParams.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/FootPrintQueryParams.java
@@ -21,6 +21,9 @@
     @ApiModelProperty("搴楅摵Id")
     private String storeId;
 
+    @ApiModelProperty("娴忚绫诲瀷锛歡oods鍟嗗搧銆乿iew瑙嗛")
+    private String viewType;
+
     public <T> QueryWrapper<T> queryWrapper() {
         QueryWrapper<T> queryWrapper = new QueryWrapper<>();
         if (CharSequenceUtil.isNotEmpty(memberId)) {
@@ -29,6 +32,9 @@
         if (CharSequenceUtil.isNotEmpty(storeId)) {
             queryWrapper.eq("store_id", storeId);
         }
+        if (CharSequenceUtil.isNotEmpty(viewType)) {
+            queryWrapper.eq("view_type", viewType);
+        }
         queryWrapper.eq("delete_flag",false);
         queryWrapper.orderByDesc("create_time");
         return queryWrapper;
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
index 714157a..f74fd3f 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java
@@ -39,21 +39,7 @@
 
     @Override
     public FootPrint saveFootprint(FootPrint footPrint) {
-        LambdaQueryWrapper<FootPrint> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(FootPrint::getMemberId, footPrint.getMemberId());
-        queryWrapper.eq(FootPrint::getGoodsId, footPrint.getGoodsId());
-        //濡傛灉宸插瓨鍦ㄦ煇鍟嗗搧璁板綍锛屽垯鏇存柊鍏朵慨鏀规椂闂�
-        //濡傛灉涓嶅瓨鍦ㄥ垯娣诲姞璁板綍
-        //涓轰簡淇濊瘉瓒宠抗鐨勬帓搴�,灏嗗師鏈冻杩瑰垹闄ゅ悗閲嶆柊娣诲姞
-        List<FootPrint> oldPrints = list(queryWrapper);
-        if (oldPrints != null && !oldPrints.isEmpty()) {
-            FootPrint oldPrint = oldPrints.get(0);
-            this.removeById(oldPrint.getId());
-        }
-        footPrint.setCreateTime(new Date());
         this.save(footPrint);
-        //鍒犻櫎瓒呰繃100鏉″悗鐨勮褰�
-        this.baseMapper.deleteLastFootPrint(footPrint.getMemberId());
         return footPrint;
     }
 
@@ -68,7 +54,7 @@
     public boolean deleteByIds(List<String> ids) {
         LambdaQueryWrapper<FootPrint> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(FootPrint::getMemberId, UserContext.getCurrentUser().getId());
-        lambdaQueryWrapper.in(FootPrint::getGoodsId, ids);
+        lambdaQueryWrapper.in(FootPrint::getRefId, ids);
         return this.remove(lambdaQueryWrapper);
     }
 
@@ -112,4 +98,4 @@
         lambdaQueryWrapper.eq(FootPrint::getDeleteFlag, false);
         return this.count(lambdaQueryWrapper);
     }
-}
\ No newline at end of file
+}
diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
index 6259ce8..12e953f 100644
--- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -13,6 +13,7 @@
         <result column="title" property="title" />
         <result column="goods_id" property="goodsId" />
         <result column="goods_view_num" property="goodsViewNum" />
+        <result column="video_duration" property="videoDuration" />
         <result column="goods_order_num" property="goodsOrderNum" />
         <result column="recommend" property="recommend" />
         <result column="status" property="status" />
@@ -44,6 +45,7 @@
             LV.author_id,
             LV.cover_url,
             LV.video_fit,
+            LV.video_duration,
             LV.video_file_key,
             LV.title,
             LV.goods_id,
@@ -72,6 +74,7 @@
             LV.author_id,
             LV.cover_url,
             LV.video_fit,
+            LV.video_duration,
             LV.video_file_key,
             LV.title,
             LV.goods_id,
@@ -80,13 +83,13 @@
             LV.recommend,
             LV.status,
             LV.play_num,
+            LV.collect_num,
             LV.comment_num,
             LV.weight,
             LV.audit_pass_time,
             LV.update_time,
             LV.id,
-            LM.nick_name as authorName,
-            (SELECT COUNT(*) FROM lmk_my_collect WHERE ref_id = LV.id AND collect_type = 'video' AND delete_flag = 0) as collect_num
+            LM.nick_name as authorName
         FROM
             lmk_video LV
                 LEFT JOIN li_member LM ON LV.author_id = LM.id
@@ -100,6 +103,7 @@
             LV.author_id,
             LV.cover_url,
             LV.video_fit,
+            LV.video_duration,
             LV.video_file_key,
             LV.title,
             LV.goods_id,
@@ -108,13 +112,13 @@
             LV.recommend,
             LV.status,
             LV.play_num,
+            LV.collect_num,
             LV.comment_num,
             LV.weight,
             LV.audit_pass_time,
             LV.update_time,
             LV.id,
-            LM.nick_name as authorName,
-            (SELECT COUNT(*) FROM lmk_my_collect WHERE ref_id = LV.id AND collect_type = 'video' AND delete_flag = 0) as collect_num
+            LM.nick_name as authorName
         FROM
             lmk_video LV
                 LEFT JOIN li_member LM ON LV.author_id = LM.id
@@ -139,6 +143,7 @@
             LV.author_id,
             LV.cover_url,
             LV.video_fit,
+            LV.video_duration,
             LV.video_file_key,
             LV.title,
             LV.goods_id,
@@ -148,13 +153,13 @@
             LV.status,
             LV.play_num,
             LV.comment_num,
+            LV.collect_num,
             LV.weight,
             LV.audit_pass_time,
             LV.update_time,
             LV.id,
             LM.nick_name as authorName,
-            LM.face as authorAvatar,
-            (SELECT COUNT(*) FROM lmk_my_collect WHERE ref_id = LV.id AND collect_type = 'video' AND delete_flag = 0) as collect_num
+            LM.face as authorAvatar
         FROM
             lmk_video LV
             LEFT JOIN li_member LM ON LV.author_id = LM.id

--
Gitblit v1.8.0