From b83b070dc8cc823c877aa3a2ade134272ec0641a Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期一, 07 七月 2025 17:02:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java    |   92 ++++
 framework/src/main/java/cn/lili/modules/lmk/domain/form/FileInfoForm.java            |    4 
 framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java      |    9 
 buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java            |    2 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java               |   28 
 buyer-api/src/main/java/cn/lili/controller/lmk/VideoController.java                  |   27 
 framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java           |   52 ++
 framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java             |   51 ++
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java       |  100 ++++
 framework/src/main/resources/mapper/lmk/CustomerMapper.xml                           |    4 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoQuery.java             |   21 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java            |   26 +
 framework/src/main/java/cn/lili/modules/lmk/domain/query/GoodsSimilarlyQuery.java    |   27 +
 framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java      |   18 
 framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java                |    2 
 framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java               |    4 
 framework/src/main/java/cn/lili/modules/member/serviceimpl/FootprintServiceImpl.java |    5 
 framework/src/main/resources/mapper/lmk/VideoMapper.xml                              |  117 +++++
 framework/src/main/resources/mapper/lmk/MemberMapper.xml                             |   41 +
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java              |   13 
 framework/src/main/java/cn/lili/modules/lmk/service/VideoService.java                |    8 
 framework/src/main/java/cn/lili/modules/lmk/mapper/VideoMapper.java                  |   19 
 framework/src/main/resources/mapper/lmk/MemberTagMapper.xml                          |   43 ++
 buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java           |   11 
 framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml                        |    3 
 framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml                           |   15 
 framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java  |    3 
 framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java  |    3 
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java             |   13 
 framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java            |   29 
 framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java         |    2 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java   |  158 +++++++
 framework/src/main/resources/mapper/lmk/MyCollectMapper.xml                          |    3 
 framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java              |    2 
 framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java               |   16 
 /dev/null                                                                            |   51 --
 framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java              |   16 
 framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java               |    2 
 framework/src/main/resources/mapper/lmk/TagMapper.xml                                |    5 
 buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java               |   24 
 manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java             |   38 -
 framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java            |   51 ++
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java                |   33 
 framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java    |   25 +
 framework/src/main/java/cn/lili/modules/member/service/FootprintService.java         |    6 
 45 files changed, 1,035 insertions(+), 187 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
index 1478a62..4a7a4d2 100644
--- a/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
@@ -3,13 +3,13 @@
 import cn.lili.base.Result;
 import cn.lili.group.Add;
 import cn.lili.group.Update;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
 import cn.lili.modules.lmk.domain.form.CustomerTagRefForm;
 import cn.lili.modules.lmk.domain.query.CustomerQuery;
 import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
 import cn.lili.modules.lmk.service.CustomerService;
 import cn.lili.modules.lmk.service.CustomerTagRefService;
-import cn.lili.modules.lmk.service.CustomerTagService;
+import cn.lili.modules.lmk.service.MemberTagService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -27,7 +27,7 @@
 public class CustomerController {
 
     private final CustomerService customerService;
-    private final CustomerTagService customerTagService;
+    private final MemberTagService memberTagService;
     private final CustomerTagRefService customerTagRefService;
 
     @ApiOperation(value = "鍟嗛摵涓嬫媺鍒楄〃")
@@ -45,39 +45,39 @@
 
     @PostMapping("/addTag")
     @ApiOperation(value = "娣诲姞鏍囩", notes = "娣诲姞鏍囩")
-    public Result add(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.add(form);
+    public Result add(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.add(form);
     }
 
     @PutMapping("/editTag")
     @ApiOperation(value = "淇敼鏍囩", notes = "淇敼鏍囩")
-    public Result update(@RequestBody @Validated(Update.class) CustomerTagForm form) {
-        return customerTagService.update(form);
+    public Result update(@RequestBody @Validated(Update.class) MemberTagForm form) {
+        return memberTagService.update(form);
     }
 
     @DeleteMapping("/tag/{id}")
     @ApiOperation(value = "ID鍒犻櫎鏍囩", notes = "ID鍒犻櫎")
     public Result removeById(@PathVariable("id") String id) {
-        return customerTagService.removeById(id);
+        return memberTagService.removeById(id);
     }
 
 
     @GetMapping("/tagList")
     @ApiOperation(value = "鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result list() {
-        return customerTagService.all();
+        return memberTagService.all();
     }
     @GetMapping("/pageTagList")
     @ApiOperation(value = "鍒嗛〉鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result pageList(CustomerTagQuery query) {
-        return customerTagService.page(query);
+        return memberTagService.page(query);
     }
 
 
     @PostMapping("/customerAddTag")
     @ApiOperation(value = "娣诲姞瀹㈡埛鏍囩鏍囪瘑", notes = "娣诲姞瀹㈡埛鏍囩鏍囪瘑")
-    public Result addCustomerTag(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.addCustomerTag(form);
+    public Result addCustomerTag(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.addMemberTag(form);
     }
 
 //    @PostMapping("/customerAddTag")
diff --git a/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java b/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
index c741b90..88446a9 100644
--- a/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
@@ -38,7 +38,7 @@
     }
 
     @GetMapping("/page")
-    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @ApiOperation(value = "鎴戠殑鍏虫敞鐢ㄦ埛鍒嗛〉", notes = "鎴戠殑鍏虫敞鐢ㄦ埛鍒嗛〉")
     public Result page(MySubscribeQuery query) {
         return mySubscribeService.page(query);
     }
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..32fc3b6 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
@@ -1,21 +1,22 @@
 package cn.lili.controller.lmk;
 
-import cn.lili.group.Update;
+import cn.lili.base.Result;
 import cn.lili.group.Add;
+import cn.lili.group.Update;
 import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
 import cn.lili.modules.lmk.domain.form.VideoFootPrintForm;
 import cn.lili.modules.lmk.domain.form.VideoHomePageInfoForm;
 import cn.lili.modules.lmk.domain.form.WxVideoForm;
 import cn.lili.modules.lmk.domain.query.*;
-import org.springframework.validation.annotation.Validated;
-import lombok.RequiredArgsConstructor;
-import java.util.List;
-import javax.validation.constraints.NotEmpty;
+import cn.lili.modules.lmk.service.VideoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import cn.lili.modules.lmk.service.VideoService;
-import cn.lili.base.Result;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 /**
  * 瑙嗛鍐呭 鍓嶇鎺у埗鍣�
@@ -148,4 +149,16 @@
     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);
+    }
+
+    @GetMapping("/history")
+    @ApiOperation(value = "鑾峰彇鍘嗗彶鎾斁璁板綍")
+    public Result getHistoryPage(VideoHistoryQuery query) {
+        return videoService.getHistoryPage(query);
+    }
 }
diff --git a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
index 43318e5..caf0910 100644
--- a/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/member/FootprintController.java
@@ -3,7 +3,6 @@
 import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.security.context.UserContext;
 import cn.lili.common.utils.StringUtils;
-import cn.lili.common.vo.PageVO;
 import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
 import cn.lili.modules.member.service.FootprintService;
@@ -13,7 +12,6 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
-import org.apache.catalina.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -40,6 +38,7 @@
 
     @Autowired
     private COSUtil cosUtil;
+
     @ApiOperation(value = "鍒嗛〉鑾峰彇")
     @GetMapping
     public ResultMessage<IPage<EsGoodsIndex>> getByPage(FootPrintQueryParams params) {
@@ -65,10 +64,10 @@
     }
 
     @ApiOperation(value = "鏍规嵁id鍒犻櫎")
-    @ApiImplicitParam(name = "ids", value = "鍟嗗搧ID", required = true, allowMultiple = true, dataType = "String", paramType = "path")
-    @DeleteMapping(value = "/delByIds/{ids}")
-    public ResultMessage<Object> delAllByIds(@NotNull(message = "鍟嗗搧ID涓嶈兘涓虹┖") @PathVariable("ids") List ids) {
-        footprintService.deleteByIds(ids);
+    @ApiImplicitParam(name = "ids", value = "鍏宠仈ID", required = true, allowMultiple = true, dataType = "String", paramType = "path")
+    @DeleteMapping(value = "/delByIds/{viewType}/{ids}")
+    public ResultMessage<Object> delAllByIds(@NotNull(message = "鍏宠仈ID涓嶈兘涓虹┖") @PathVariable("ids") List ids, @PathVariable("viewType") String viewType) {
+        footprintService.deleteByIds(ids, viewType);
         return ResultUtil.success();
 
     }
diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
index e270ab4..f0c599a 100644
--- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java
@@ -259,7 +259,8 @@
             user.setUsername(UuidUtils.getUUID());
             user.setNickName("寰俊鐢ㄦ埛");
             user.setPassword(DEFAULT_PASSWORD);
-            user.setFace("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png");
+            user.setFace("");
+            user.setDisabled(Boolean.TRUE);
             memberService.registerHandler(user);
         }
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java
similarity index 72%
rename from framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
rename to framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java
index 3a5ae77..7ead7dc 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/GoodsTag.java
@@ -3,21 +3,24 @@
 import cn.lili.mybatis.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
 import lombok.Data;
 
 /**
- *
- *
  * @author zxl
  * @since 2025-05-14
  */
 @Data
-@TableName("lmk_customer_tag")
-public class CustomerTag extends BaseEntity {
+@TableName("lmk_goods_tag")
+public class GoodsTag extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    @TableField("tag_id")
+    private String tagId;
+
+    @TableField("goods_id")
+    private String goodsId;
+
     @TableField("tag_name")
     /**  鏍囩鍚嶇О*/
     private String tagName;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java
similarity index 72%
copy from framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
copy to framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java
index 3a5ae77..45c334a 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/CustomerTag.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MemberTag.java
@@ -3,21 +3,24 @@
 import cn.lili.mybatis.BaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.time.LocalDateTime;
 import lombok.Data;
 
 /**
- *
- *
  * @author zxl
  * @since 2025-05-14
  */
 @Data
-@TableName("lmk_customer_tag")
-public class CustomerTag extends BaseEntity {
+@TableName("lmk_member_tag")
+public class MemberTag extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    @TableField("tag_id")
+    private String tagId;
+
+    @TableField("member_id")
+    private String memberId;
+
     @TableField("tag_name")
     /**  鏍囩鍚嶇О*/
     private String tagName;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/CustomerTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/CustomerTagForm.java
deleted file mode 100644
index 9117724..0000000
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/CustomerTagForm.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package cn.lili.modules.lmk.domain.form;
-
-import cn.lili.base.AbsForm;
-import cn.lili.group.Add;
-import cn.lili.group.Update;
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.mybatis.BaseEntity;
-import org.springframework.beans.BeanUtils;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import org.springframework.lang.NonNull;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import java.util.Date;
-
-/**
- * 琛ㄥ崟
- *
- * @author zxl
- * @since 2025-05-14
- */
-@Data
-@ApiModel(value = "CustomerTag琛ㄥ崟", description = "琛ㄥ崟")
-public class CustomerTagForm extends AbsForm {
-
-    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鏍囩鍚�")
-    private String tagName;
-
-    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("")
-    private String createType;
-
-
-    /**
-     * 瀹㈡埛id
-     * */
-    @ApiModelProperty("瀹㈡埛id")
-    private String customerId;
-
-    public static CustomerTag getEntityByForm(@NonNull CustomerTagForm form, CustomerTag entity) {
-        if(entity == null) {
-          entity = new CustomerTag();
-        }
-        BeanUtils.copyProperties(form, entity);
-        return entity;
-    }
-
-}
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/form/GoodsTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java
new file mode 100644
index 0000000..2dda2bd
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/GoodsTagForm.java
@@ -0,0 +1,51 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * 琛ㄥ崟
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Data
+@ApiModel(value = "GoodsTag琛ㄥ崟", description = "琛ㄥ崟")
+public class GoodsTagForm extends AbsForm {
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏍囩Id")
+    private List<String> tagIds;
+
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private String createType;
+
+
+    /**
+     * 瀹㈡埛id
+     */
+    @ApiModelProperty("鍟嗗搧id")
+    private String goodsId;
+
+    public static GoodsTag getEntityByForm(@NonNull GoodsTagForm form, GoodsTag entity) {
+        if (entity == null) {
+            entity = new GoodsTag();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java
new file mode 100644
index 0000000..da6ff44
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/MemberTagForm.java
@@ -0,0 +1,52 @@
+package cn.lili.modules.lmk.domain.form;
+
+import cn.lili.base.AbsForm;
+import cn.lili.group.Add;
+import cn.lili.group.Update;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import org.springframework.beans.BeanUtils;
+
+import javax.validation.constraints.NotBlank;
+
+import org.springframework.lang.NonNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 琛ㄥ崟
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Data
+@ApiModel(value = "MemberTag琛ㄥ崟", description = "琛ㄥ崟")
+public class MemberTagForm extends AbsForm {
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鏍囩Id")
+    private List<String> tagIds;
+
+
+    @NotBlank(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private String createType;
+
+
+    /**
+     * 瀹㈡埛id
+     */
+    @ApiModelProperty("瀹㈡埛id")
+    private String memberId;
+
+    public static MemberTag getEntityByForm(@NonNull MemberTagForm form, MemberTag entity) {
+        if (entity == null) {
+            entity = new MemberTag();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
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/TagQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java
index 605e894..f2e7006 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/TagQuery.java
@@ -26,6 +26,8 @@
     @ApiModelProperty("鏍囩鍒嗙被")
     private String tagTypeId;
 
+    @ApiModelProperty("鏍囩绫诲埆key")
+    private String tagTypeKey;
 
 }
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java
new file mode 100644
index 0000000..bd940c4
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/VideoHistoryQuery.java
@@ -0,0 +1,18 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import lombok.Data;
+
+/**
+ * 瑙嗛鏍囩鏌ヨ
+ *
+ * @author xp
+ * @since 2025-05-13
+ */
+@Data
+public class VideoHistoryQuery extends AbsQuery {
+
+    private String userId;
+
+}
+
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/domain/vo/CustomerTagVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java
similarity index 60%
copy from framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
copy to framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java
index e0a9236..336360e 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/GoodsTagVO.java
@@ -1,16 +1,12 @@
 package cn.lili.modules.lmk.domain.vo;
 
 import cn.lili.base.AbsVo;
-
-import java.util.List;
-
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import org.springframework.lang.NonNull;
-import org.springframework.beans.BeanUtils;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import java.util.Date;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
 
 /**
  * 灞曠ず
@@ -20,21 +16,30 @@
  */
 @Data
 @ApiModel(value = "鍝嶅簲鏁版嵁", description = "鍝嶅簲鏁版嵁")
-public class CustomerTagVO extends AbsVo {
+public class GoodsTagVO extends AbsVo {
 
-    /**  */
+    @ApiModelProperty("鏍囩Id")
+    private String tagId;
+
+    @ApiModelProperty("瀹㈡埛id")
+    private String goodsId;
+
+    /**
+     *
+     */
     @ApiModelProperty("鏍囩鍚嶇О")
     private String tagName;
 
-    /**  */
+    /**
+     *
+     */
     @ApiModelProperty("鍒涘缓鏂瑰紡")
     private String createType;
 
 
-
-    public static CustomerTagVO getVoByEntity(@NonNull CustomerTag entity, CustomerTagVO vo) {
-        if(vo == null) {
-            vo = new CustomerTagVO();
+    public static GoodsTagVO getVoByEntity(@NonNull MemberTag entity, GoodsTagVO vo) {
+        if (vo == null) {
+            vo = new GoodsTagVO();
         }
         BeanUtils.copyProperties(entity, vo);
         return vo;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java
similarity index 60%
rename from framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
rename to framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java
index e0a9236..3595151 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CustomerTagVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MemberTagVO.java
@@ -2,15 +2,12 @@
 
 import cn.lili.base.AbsVo;
 
-import java.util.List;
-
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
 import org.springframework.lang.NonNull;
 import org.springframework.beans.BeanUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import java.util.Date;
 
 /**
  * 灞曠ず
@@ -20,21 +17,30 @@
  */
 @Data
 @ApiModel(value = "鍝嶅簲鏁版嵁", description = "鍝嶅簲鏁版嵁")
-public class CustomerTagVO extends AbsVo {
+public class MemberTagVO extends AbsVo {
 
-    /**  */
+    @ApiModelProperty("鏍囩Id")
+    private String tagId;
+
+    @ApiModelProperty("瀹㈡埛id")
+    private String memberId;
+
+    /**
+     *
+     */
     @ApiModelProperty("鏍囩鍚嶇О")
     private String tagName;
 
-    /**  */
+    /**
+     *
+     */
     @ApiModelProperty("鍒涘缓鏂瑰紡")
     private String createType;
 
 
-
-    public static CustomerTagVO getVoByEntity(@NonNull CustomerTag entity, CustomerTagVO vo) {
-        if(vo == null) {
-            vo = new CustomerTagVO();
+    public static MemberTagVO getVoByEntity(@NonNull MemberTag entity, MemberTagVO vo) {
+        if (vo == null) {
+            vo = new MemberTagVO();
         }
         BeanUtils.copyProperties(entity, vo);
         return vo;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java
new file mode 100644
index 0000000..00f0c02
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/VideoHistoryVO.java
@@ -0,0 +1,26 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author锛歺p
+ * @date锛�2025/7/4 17:43
+ */
+@Data
+@ApiModel("瑙嗛鎾斁璁板綍")
+public class VideoHistoryVO extends WxVideoVO {
+
+    @ApiModelProperty("鍘嗗彶璁板綍id")
+    private String historyId;
+
+    @ApiModelProperty("鎾斁鑷�")
+    private String playAt;
+
+    @ApiModelProperty("瑙傜湅鏃ユ湡")
+    private Date playTime;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/CustomerTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/CustomerTagMapper.java
deleted file mode 100644
index 908b2f6..0000000
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/CustomerTagMapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.lili.modules.lmk.mapper;
-
-import java.util.List;
-
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
-import cn.lili.modules.lmk.domain.vo.CustomerTagVO;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- *  Mapper 鎺ュ彛
- *
- * @author zxl
- * @since 2025-05-14
- */
-@Mapper
-public interface CustomerTagMapper extends BaseMapper<CustomerTag> {
-
-    /**
-     * id鏌ユ壘
-     * @param id
-     * @return
-     */
-    CustomerTagVO getById(Integer id);
-
-    /**
-    *  鍒嗛〉
-    */
-    IPage getPage(IPage page, @Param("query") CustomerTagQuery query);
-
-}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java
new file mode 100644
index 0000000..1525508
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/GoodsTagMapper.java
@@ -0,0 +1,16 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Mapper
+public interface GoodsTagMapper extends BaseMapper<GoodsTag> {
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java
new file mode 100644
index 0000000..bc602b5
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/MemberTagMapper.java
@@ -0,0 +1,16 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *  Mapper 鎺ュ彛
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Mapper
+public interface MemberTagMapper extends BaseMapper<MemberTag> {
+
+}
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..acd674a 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,21 @@
      * @return
      */
     List<VideoIndex> getEsPage(@Param("start") int start, @Param("pageSize") int pageSize);
+
+    /**
+     * 鏌ヨ鎸備簡鍚屼竴鍟嗗搧鐨勮棰�
+     *
+     * @param page
+     * @param goodsSimilarlyQuery
+     */
+    IPage goodsSimilarlyPage(IPage page, @Param("query") GoodsSimilarlyQuery goodsSimilarlyQuery);
+
+    /**
+     * 鑾峰彇鎾斁璁板綍
+     *
+     * @param page
+     * @param query
+     * @return
+     */
+    IPage getHistoryPage(IPage page, @Param("query") VideoHistoryQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java b/framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java
new file mode 100644
index 0000000..e3afa30
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/GoodsTagService.java
@@ -0,0 +1,51 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import cn.lili.modules.lmk.domain.form.GoodsTagForm;
+import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 鏈嶅姟绫�
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+public interface GoodsTagService extends IService<GoodsTag> {
+
+    /**
+     * 娣诲姞
+     *
+     * @param form
+     * @return
+     */
+    Result addGoodsTag(GoodsTagForm form);
+
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+
+    /**
+     * 鍒楄〃
+     *
+     * @return
+     */
+    Result getByGoodsId(String goodsId);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/CustomerTagService.java b/framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java
similarity index 64%
rename from framework/src/main/java/cn/lili/modules/lmk/service/CustomerTagService.java
rename to framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java
index e17f760..19c2da5 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/CustomerTagService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/MemberTagService.java
@@ -1,37 +1,40 @@
 package cn.lili.modules.lmk.service;
 
 import cn.lili.base.Result;
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
 import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
 
 /**
- *  鏈嶅姟绫�
+ * 鏈嶅姟绫�
  *
  * @author zxl
  * @since 2025-05-14
  */
-public interface CustomerTagService extends IService<CustomerTag> {
+public interface MemberTagService extends IService<MemberTag> {
 
     /**
      * 娣诲姞
+     *
      * @param form
      * @return
      */
-    Result add(CustomerTagForm form);
+    Result add(MemberTagForm form);
 
     /**
      * 淇敼
+     *
      * @param form
      * @return
      */
-    Result update(CustomerTagForm form);
+    Result update(MemberTagForm form);
 
     /**
      * 鎵归噺鍒犻櫎
+     *
      * @param ids
      * @return
      */
@@ -39,6 +42,7 @@
 
     /**
      * id鍒犻櫎
+     *
      * @param id
      * @return
      */
@@ -46,23 +50,22 @@
 
     /**
      * 鍒嗛〉鏌ヨ
+     *
      * @param query
      * @return
      */
     Result page(CustomerTagQuery query);
 
-    /**
-     * 鏍规嵁id鏌ユ壘
-     * @param id
-     * @return
-     */
-    Result detail(Integer id);
 
     /**
      * 鍒楄〃
+     *
      * @return
      */
     Result all();
 
-    Result addCustomerTag(CustomerTagForm form);
+    Result addMemberTag(MemberTagForm form);
+
+    Result getByMemberId(String memberId);
+
 }
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..95b6784 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,12 @@
      * @return
      */
     Result esSearch(VideoEsQuery query);
+
+    /**
+     * 鑾峰彇鎾斁璁板綍
+     *
+     * @param query
+     * @return
+     */
+    Result getHistoryPage(VideoHistoryQuery query);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerTagServiceImpl.java
deleted file mode 100644
index 59d7a94..0000000
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CustomerTagServiceImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package cn.lili.modules.lmk.service.impl;
-
-import cn.lili.base.Result;
-import cn.lili.modules.lmk.domain.entity.CustomerTag;
-import cn.lili.modules.lmk.domain.entity.CustomerTagRef;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
-import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
-import cn.lili.modules.lmk.domain.vo.CustomerTagVO;
-import cn.lili.modules.lmk.mapper.CustomerTagMapper;
-import cn.lili.modules.lmk.mapper.CustomerTagRefMapper;
-import cn.lili.modules.lmk.service.CustomerTagService;
-import cn.lili.utils.PageUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
-import org.springframework.util.Assert;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- *  鏈嶅姟瀹炵幇绫�
- *
- * @author zxl
- * @since 2025-05-14
- */
-@Service
-@RequiredArgsConstructor
-public class CustomerTagServiceImpl extends ServiceImpl<CustomerTagMapper, CustomerTag> implements CustomerTagService {
-
-    private final CustomerTagMapper customerTagMapper;
-
-    private final CustomerTagRefMapper customerTagRefMapper;
-    /**
-     * 娣诲姞
-     * @param form
-     * @return
-     */
-    @Override
-    public Result add(CustomerTagForm form) {
-        CustomerTag entity = CustomerTagForm.getEntityByForm(form, null);
-        baseMapper.insert(entity);
-        return Result.ok("娣诲姞鎴愬姛");
-    }
-
-    /**
-     * 淇敼
-     * @param form
-     * @return
-     */
-    @Override
-    public Result update(CustomerTagForm form) {
-        CustomerTag entity = baseMapper.selectById(form.getId());
-
-        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
-        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
-        BeanUtils.copyProperties(form, entity);
-        baseMapper.updateById(entity);
-        return Result.ok("淇敼鎴愬姛");
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎
-     * @param ids
-     * @return
-     */
-    @Override
-    public Result remove(List<String> ids) {
-        baseMapper.deleteBatchIds(ids);
-        return Result.ok("鍒犻櫎鎴愬姛");
-    }
-
-    /**
-     * id鍒犻櫎
-     * @param id
-     * @return
-     */
-    @Override
-    public Result removeById(String id) {
-        baseMapper.deleteById(id);
-        return Result.ok("鍒犻櫎鎴愬姛");
-    }
-
-    /**
-     * 鍒嗛〉鏌ヨ
-     * @param query
-     * @return
-     */
-    @Override
-    public Result page(CustomerTagQuery query) {
-        IPage<CustomerTagVO> page = PageUtil.getPage(query, CustomerTagVO.class);
-        baseMapper.getPage(page, query);
-        return Result.ok().data(page.getRecords()).total(page.getTotal());
-    }
-
-    /**
-     * 鏍规嵁id鏌ユ壘
-     * @param id
-     * @return
-     */
-    @Override
-    public Result detail(Integer id) {
-        CustomerTagVO vo = baseMapper.getById(id);
-        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
-        return Result.ok().data(vo);
-    }
-
-    /**
-     * 鍒楄〃
-     * @return
-     */
-    @Override
-    public Result all() {
-        List<CustomerTag> entities = baseMapper.selectList(null);
-        List<CustomerTagVO> vos = entities.stream()
-                .map(entity -> CustomerTagVO.getVoByEntity(entity, null))
-                .collect(Collectors.toList());
-        return Result.ok().data(vos);
-    }
-
-    @Override
-    public Result addCustomerTag(CustomerTagForm form) {
-        //鎻掑叆瀹㈡埛鏍囩
-        CustomerTag entity = CustomerTagForm.getEntityByForm(form, null);
-        baseMapper.insert(entity);
-
-        //鎻掑叆瀹㈡埛鏍囩涓棿琛�
-        CustomerTagRef ref = new CustomerTagRef();
-        ref.setCustomerTagId(entity.getId());
-        ref.setCustomerId(form.getCustomerId());
-        customerTagRefMapper.insert(ref);
-        return Result.ok("娣诲姞鎴愬姛");
-    }
-
-
-
-    public Result delCustomerTag(String id) {
-
-        return null;
-    }
-}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java
new file mode 100644
index 0000000..e70fb07
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/GoodsTagServiceImpl.java
@@ -0,0 +1,92 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.entity.GoodsTag;
+import cn.lili.modules.lmk.domain.entity.Tag;
+import cn.lili.modules.lmk.domain.form.GoodsTagForm;
+import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
+import cn.lili.modules.lmk.domain.vo.MemberTagVO;
+import cn.lili.modules.lmk.mapper.GoodsTagMapper;
+import cn.lili.modules.lmk.service.GoodsTagService;
+import cn.lili.modules.lmk.service.TagService;
+import cn.lili.utils.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Service
+@RequiredArgsConstructor
+public class GoodsTagServiceImpl extends ServiceImpl<GoodsTagMapper, GoodsTag> implements GoodsTagService {
+
+    private final TagService tagService;
+
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @Override
+    public Result getByGoodsId(String goodsId) {
+        LambdaQueryWrapper<GoodsTag> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(GoodsTag::getGoodsId, goodsId);
+        return Result.ok().data(baseMapper.selectList(queryWrapper));
+    }
+
+
+    @Override
+    public Result addGoodsTag(GoodsTagForm form) {
+        LambdaQueryWrapper<Tag> query = new LambdaQueryWrapper<>();
+        query.in(Tag::getId, form.getTagIds());
+        List<Tag> tags = tagService.list(query);
+        List<GoodsTag> GoodsTags = tags.stream().map(tag -> {
+            GoodsTag GoodsTag = new GoodsTag();
+            GoodsTag.setTagId(tag.getId());
+            GoodsTag.setGoodsId(form.getGoodsId());
+            GoodsTag.setTagName(tag.getTagName());
+            GoodsTag.setCreateType(form.getCreateType());
+            return GoodsTag;
+        }).collect(Collectors.toList());
+
+        this.saveBatch(GoodsTags);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+
+    public Result delCustomerTag(String id) {
+
+        return null;
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java
new file mode 100644
index 0000000..73a7d1a
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/MemberTagServiceImpl.java
@@ -0,0 +1,158 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.entity.MemberTag;
+import cn.lili.modules.lmk.domain.entity.Tag;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
+import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
+import cn.lili.modules.lmk.domain.vo.MemberTagVO;
+import cn.lili.modules.lmk.mapper.MemberTagMapper;
+import cn.lili.modules.lmk.service.MemberTagService;
+import cn.lili.modules.lmk.service.TagService;
+import cn.lili.utils.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.Assert;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 鏈嶅姟瀹炵幇绫�
+ *
+ * @author zxl
+ * @since 2025-05-14
+ */
+@Service
+@RequiredArgsConstructor
+public class MemberTagServiceImpl extends ServiceImpl<MemberTagMapper, MemberTag> implements MemberTagService {
+
+    private final TagService tagService;
+
+    /**
+     * 娣诲姞
+     *
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(MemberTagForm form) {
+        MemberTag entity = MemberTagForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     *
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(MemberTagForm form) {
+        MemberTag entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(CustomerTagQuery query) {
+        IPage<MemberTag> page = PageUtil.getPage(query, MemberTag.class);
+
+        LambdaQueryWrapper<MemberTag> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+
+        baseMapper.selectPage(page, lambdaQueryWrapper);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+
+    /**
+     * 鍒楄〃
+     *
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<MemberTag> entities = baseMapper.selectList(null);
+        List<MemberTagVO> vos = entities.stream()
+                .map(entity -> MemberTagVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+    @Override
+    public Result addMemberTag(MemberTagForm form) {
+
+        LambdaQueryWrapper<MemberTag> deleteQuery = new LambdaQueryWrapper<>();
+        deleteQuery.eq(MemberTag::getMemberId, form.getMemberId());
+        baseMapper.delete(deleteQuery);
+
+        LambdaQueryWrapper<Tag> query = new LambdaQueryWrapper<>();
+        query.in(Tag::getId, form.getTagIds());
+        List<Tag> tags = tagService.list(query);
+        List<MemberTag> memberTags = tags.stream().map(tag -> {
+            MemberTag memberTag = new MemberTag();
+            memberTag.setTagId(tag.getId());
+            memberTag.setMemberId(form.getMemberId());
+            memberTag.setTagName(tag.getTagName());
+            memberTag.setCreateType(form.getCreateType());
+            return memberTag;
+        }).collect(Collectors.toList());
+
+        this.saveBatch(memberTags);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    public Result getByMemberId(String memberId) {
+        LambdaQueryWrapper<MemberTag> query = new LambdaQueryWrapper<>();
+        query.eq(MemberTag::getMemberId, memberId);
+        List<MemberTag> memberTags = baseMapper.selectList(query);
+        return Result.ok().data(memberTags);
+    }
+
+
+    public Result delCustomerTag(String id) {
+
+        return null;
+    }
+}
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..204b995 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,22 @@
                 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;
+            case "history":
+                VideoHistoryQuery videoHistoryQuery = new VideoHistoryQuery();
+                BeanUtils.copyProperties(query, videoHistoryQuery);
+                videoHistoryQuery.setUserId(UserContext.getCurrentUserId());
+                baseMapper.getHistoryPage(page, videoHistoryQuery);
+                break;
             default:
                 break;
         }
@@ -520,6 +531,7 @@
                 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()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -592,9 +604,10 @@
     public Result healthRecommendVideo(WxHealthVideoQuery query) {
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
         //鑾峰彇澶у仴搴疯棰戝垪琛�
-                baseMapper.recommendHealthVideo(page,query);
+        baseMapper.recommendHealthVideo(page,query);
         if (page.getTotal() > 0) {
             page.getRecords().forEach(v -> {
+                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()));
@@ -617,6 +630,7 @@
         IPage<WxVideoVO> page = PageUtil.getPage(query, WxVideoVO.class);
          baseMapper.wxKitchenVideoQuery(page, query);
          page.getRecords().forEach(v -> {
+             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()));
@@ -667,13 +681,24 @@
 
     @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());
-        footPrint.setPlayAt(form.getPlayAt());
-        footprintService.saveFootprint(footPrint);
+        FootPrint one = new LambdaQueryChainWrapper<>(footprintService.getBaseMapper())
+                .eq(FootPrint::getRefId, form.getVideoId())
+                .eq(FootPrint::getMemberId, UserContext.getCurrentUserId())
+                .eq(FootPrint::getViewType, ViewTypeEnum.VIDEO.getValue())
+                .one();
+        if (Objects.nonNull(one)) {
+            one.setViewDuration(one.getViewDuration() + form.getViewDuration());
+            one.setPlayAt(form.getPlayAt());
+            footprintService.updateById(one);
+        } else {
+            FootPrint footPrint = new FootPrint();
+            footPrint.setViewType(ViewTypeEnum.VIDEO.getValue());
+            footPrint.setRefId(form.getVideoId());
+            footPrint.setMemberId(UserContext.getCurrentUserId());
+            footPrint.setViewDuration(form.getViewDuration());
+            footPrint.setPlayAt(form.getPlayAt());
+            footprintService.saveFootprint(footPrint);
+        }
         return Result.ok();
     }
 
@@ -715,6 +740,7 @@
                 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()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -753,6 +779,7 @@
                 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()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -790,6 +817,7 @@
                 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()));
                 if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
                     v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
                     v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
@@ -1194,6 +1222,7 @@
             // 鍒ゆ柇鏄惁鍏虫敞浣滆�呫�佹槸鍚︾偣璧炪�佹槸鍚︽敹钘�
             wxVideoVO.setCollected(CollectionUtils.isNotEmpty(collectMap.get(wxVideoVO.getId())));
             wxVideoVO.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(wxVideoVO.getId())));
+            wxVideoVO.setAuthorAvatar(cosUtil.getPreviewUrl(wxVideoVO.getAuthorAvatar()));
             if (UserContext.getCurrentUserId().equals(wxVideoVO.getAuthorId())) {
                 wxVideoVO.setSubscribeThisAuthor(Boolean.TRUE);
             } else {
@@ -1210,4 +1239,49 @@
         }).collect(Collectors.toList());
         return Result.ok().data(vos).total(searchHits.getTotalHits());
     }
+
+    @Override
+    public Result getHistoryPage(VideoHistoryQuery query) {
+        query.setUserId(UserContext.getCurrentUserId());
+        IPage<VideoHistoryVO> page = PageUtil.getPage(query, VideoHistoryVO.class);
+        baseMapper.getHistoryPage(page, query);
+        if (CollectionUtils.isNotEmpty(page.getRecords())) {
+            if (page.getTotal() > 0) {
+                List<String> videoIds = page.getRecords().stream().map(VideoHistoryVO::getId).collect(Collectors.toList());
+                Map<String, List<SimpleVideoTagVO>> tagMap = videoTagRefService.getTagsByVideoIds(videoIds)
+                        .stream()
+                        .collect(Collectors.groupingBy(SimpleVideoTagVO::getVideoId));
+                Map<String, List<SimpleMyCollectVO>> collectMap = myCollectService.getCollectsByVideoIds(videoIds)
+                        .stream()
+                        .collect(Collectors.groupingBy(SimpleMyCollectVO::getRefId));
+                Map<String, List<SimpleMyThumbsUpVO>> thumbsUpMap = thumbsUpRecordService.getThumbssByVideoIds(videoIds)
+                        .stream()
+                        .collect(Collectors.groupingBy(SimpleMyThumbsUpVO::getRefId));
+                List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId());
+                // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佹槸鍚︾偣璧炪�佷綔鑰呮槸鍚﹀叧娉�
+                page.getRecords().forEach(v -> {
+                    v.setTagList(tagMap.get(v.getId()));
+                    v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId())));
+                    v.setThumbsUp(CollectionUtils.isNotEmpty(thumbsUpMap.get(v.getId())));
+                    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()));
+                    if (VideoContentTypeEnum.VIDEO.getValue().equals(v.getVideoContentType())) {
+                        v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                        v.setCoverUrl(cosUtil.getPreviewUrl(v.getCoverFileKey()));
+                    } 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()));
+                    }
+                    if (CollectionUtils.isNotEmpty(v.getGoodsList())) {
+                        v.getGoodsList().stream().forEach(goods -> {
+                            goods.setThumbnail(cosUtil.getPreviewUrl(goods.getThumbnail()));
+                        });
+                    }
+                    v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId()));
+                });
+            }
+        }
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
index 83bb664..c66c3e2 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dos/Member.java
@@ -72,7 +72,7 @@
     @ApiModelProperty(value = "浼氬憳澶村儚")
     private String face;
 
-    @ApiModelProperty(value = "浼氬憳鐘舵��")
+    @ApiModelProperty(value = "浼氬憳鐘舵�侊細true 琛ㄧず娌¤绂佺敤锛� false 琚鐢�")
     private Boolean disabled;
 
     @ApiModelProperty(value = "鏄惁寮�閫氬簵閾�")
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java b/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java
index 13f9c16..efbcc21 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/dto/ManagerMemberEditDTO.java
@@ -10,6 +10,7 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 浼氬憳淇敼
@@ -54,4 +55,6 @@
 
     @ApiModelProperty(value = "浼氬憳澶村儚")
     private String face;
+
+    private List<String> tags;
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java b/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
index 5aba29d..6fa585e 100644
--- a/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
+++ b/framework/src/main/java/cn/lili/modules/member/entity/vo/MemberVO.java
@@ -4,7 +4,7 @@
 import cn.lili.common.security.sensitive.Sensitive;
 import cn.lili.common.security.sensitive.enums.SensitiveStrategy;
 import cn.lili.common.utils.BeanUtil;
-import cn.lili.modules.lmk.domain.vo.CustomerTagVO;
+import cn.lili.modules.lmk.domain.vo.MemberTagVO;
 import cn.lili.modules.member.entity.dos.Member;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -98,7 +98,7 @@
     private Date createTime;
 
     @ApiModelProperty(value = "瀹㈡埛鏍囩鍒楄〃")
-    private List<CustomerTagVO> customerTagList;
+    private List<MemberTagVO> tags;
 
     /**
      * 涓簄ull鍒欎笉鍦ㄩ粦鍚嶅崟鍐�
diff --git a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
index 32f09fa..771aa09 100644
--- a/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
+++ b/framework/src/main/java/cn/lili/modules/member/mapper/MemberMapper.java
@@ -29,4 +29,6 @@
 
     @Select("select * from li_member ${ew.customSqlSegment}")
     IPage<MemberVO> pageByMemberVO(IPage<MemberVO> page, @Param(Constants.WRAPPER) Wrapper<Member> queryWrapper);
+
+    MemberVO getVoById(@Param("id") String id);
 }
\ No newline at end of file
diff --git a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
index a3ff318..4575232 100644
--- a/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
+++ b/framework/src/main/java/cn/lili/modules/member/service/FootprintService.java
@@ -1,5 +1,6 @@
 package cn.lili.modules.member.service;
 
+import cn.lili.base.Result;
 import cn.lili.common.vo.PageVO;
 import cn.lili.modules.member.entity.dos.FootPrint;
 import cn.lili.modules.member.entity.dto.FootPrintQueryParams;
@@ -36,9 +37,10 @@
      * 鏍规嵁ID杩涜娓呴櫎浼氬憳鐨勫巻鍙茶冻杩�
      *
      * @param ids 鍟嗗搧ID鍒楄〃
+     * @param viewType 娴忚绫诲瀷
      * @return 澶勭悊缁撴灉
      */
-    boolean deleteByIds(List<String> ids);
+    boolean deleteByIds(List<String> ids, String viewType);
 
     /**
      * 鑾峰彇浼氬憳娴忚鍘嗗彶鍒嗛〉
@@ -55,4 +57,4 @@
      */
     long getFootprintNum();
 
-}
\ No newline at end of file
+}
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 723725f..595e162 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
@@ -1,5 +1,6 @@
 package cn.lili.modules.member.serviceimpl;
 
+import cn.lili.base.Result;
 import cn.lili.common.security.context.UserContext;
 import cn.lili.modules.goods.entity.dos.GoodsSku;
 import cn.lili.modules.goods.service.GoodsSkuService;
@@ -51,9 +52,10 @@
     }
 
     @Override
-    public boolean deleteByIds(List<String> ids) {
+    public boolean deleteByIds(List<String> ids, String viewType) {
         LambdaQueryWrapper<FootPrint> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(FootPrint::getMemberId, UserContext.getCurrentUser().getId());
+        lambdaQueryWrapper.eq(FootPrint::getViewType, viewType);
         lambdaQueryWrapper.in(FootPrint::getRefId, ids);
         return this.remove(lambdaQueryWrapper);
     }
@@ -98,4 +100,5 @@
         lambdaQueryWrapper.eq(FootPrint::getDeleteFlag, false);
         return this.count(lambdaQueryWrapper);
     }
+
 }
diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
index 489d7ea..564de14 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/MemberServiceImpl.java
@@ -24,6 +24,8 @@
 import cn.lili.modules.connect.entity.dto.ConnectAuthUser;
 import cn.lili.modules.connect.service.ConnectService;
 import cn.lili.modules.lmk.domain.entity.VideoAccount;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
+import cn.lili.modules.lmk.service.MemberTagService;
 import cn.lili.modules.lmk.service.VideoAccountService;
 import cn.lili.modules.member.aop.annotation.PointLogPoint;
 import cn.lili.modules.member.entity.dos.Member;
@@ -44,6 +46,7 @@
 import cn.lili.mybatis.util.PageUtil;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import cn.lili.rocketmq.tags.MemberTagsEnum;
+import cn.lili.utils.COSUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -111,6 +114,12 @@
 
     @Autowired
     private VideoAccountService videoAccountService;
+
+    @Autowired
+    private MemberTagService memberTagService;
+
+    @Autowired
+    private COSUtil cosUtil;
 
     @Override
     public Member findByUsername(String userName) {
@@ -250,7 +259,7 @@
             authUser.setNickname(CommonUtil.getSpecialStr("鐢ㄦ埛"));
         }
         if (CharSequenceUtil.isEmpty(authUser.getAvatar())) {
-            authUser.setAvatar("https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png");
+            authUser.setAvatar("");
         }
         try {
 //            String username = UuidUtils.getUUID();
@@ -487,6 +496,7 @@
     }
 
     @Override
+    @Transactional
     public Member updateMember(ManagerMemberEditDTO managerMemberEditDTO) {
         //杩囨护浼氬憳鏄电О鏁忔劅璇�
         if (CharSequenceUtil.isNotBlank(managerMemberEditDTO.getNickName())) {
@@ -501,6 +511,13 @@
         //浼犻�掍慨鏀逛細鍛樹俊鎭�
         BeanUtil.copyProperties(managerMemberEditDTO, member);
         this.updateById(member);
+        if (managerMemberEditDTO.getTags() != null) {
+            MemberTagForm memberTagForm = new MemberTagForm();
+            memberTagForm.setMemberId(member.getId());
+            memberTagForm.setTagIds(managerMemberEditDTO.getTags());
+            memberTagForm.setCreateType("MANAGER");
+            memberTagService.addMemberTag(memberTagForm);
+        }
         return member;
     }
 
@@ -786,7 +803,11 @@
 
     @Override
     public MemberVO getMember(String id) {
-        return new MemberVO(this.getById(id));
+        MemberVO member = baseMapper.getVoById(id);
+        if (Objects.nonNull(member)) {
+            member.setFace(cosUtil.getPreviewUrl(member.getFace()));
+        }
+        return member;
     }
 
     @Override
diff --git a/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java b/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java
index 92977e0..500f220 100644
--- a/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java
+++ b/framework/src/main/java/cn/lili/modules/permission/entity/dos/AdminUser.java
@@ -41,7 +41,7 @@
     private String email;
 
     @ApiModelProperty(value = "鐢ㄦ埛澶村儚")
-    private String avatar = "https://i.loli.net/2020/11/19/LyN6JF7zZRskdIe.png";
+    private String avatar = "";
 
     @ApiModelProperty(value = "鏄惁鏄秴绾х鐞嗗憳 瓒呯骇绠$悊鍛�/鏅�氱鐞嗗憳")
     private Boolean isSuper = false;
diff --git a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java
index 3f8b4dc..2d6693b 100644
--- a/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/store/serviceimpl/StoreServiceImpl.java
@@ -40,6 +40,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -97,8 +98,10 @@
     private Cache cache;
 
     @Override
-    public IPage<StoreVO> findByConditionPage(StoreSearchParams storeSearchParams, PageVO page) {
-        return this.baseMapper.getStoreList(PageUtil.initPage(page), storeSearchParams.queryWrapper());
+    public IPage<StoreVO> findByConditionPage(StoreSearchParams storeSearchParams, PageVO vo) {
+        Page<StoreVO> page = PageUtil.initPage(vo);
+        this.baseMapper.getStoreList(page, storeSearchParams.queryWrapper());
+        return page;
     }
 
     @Override
@@ -412,4 +415,4 @@
         return this.getOne(lambdaQueryWrapper, false);
     }
 
-}
\ No newline at end of file
+}
diff --git a/framework/src/main/resources/mapper/lmk/CustomerMapper.xml b/framework/src/main/resources/mapper/lmk/CustomerMapper.xml
index d98bcd8..5ca9607 100644
--- a/framework/src/main/resources/mapper/lmk/CustomerMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/CustomerMapper.xml
@@ -27,7 +27,7 @@
         <result property="experience" column="experience"/>
         <result property="createTime" column="create_time"/>
         <result property="blackId" column="blackId"/>
-        <collection property="customerTagList"  ofType="cn.lili.modules.lmk.domain.vo.CustomerTagVO"
+        <collection property="customerTagList"  ofType="cn.lili.modules.lmk.domain.vo.MemberTagVO"
                     select="selectTagByMemberId"
                     column="id"
         />
@@ -69,7 +69,7 @@
         ORDER BY lm.create_time DESC
     </select>
 
-    <select id="selectTagByMemberId" resultType="cn.lili.modules.lmk.domain.vo.CustomerTagVO">
+    <select id="selectTagByMemberId" resultType="cn.lili.modules.lmk.domain.vo.MemberTagVO">
         SELECT
             LCT.id,
             LCT.tag_name,
diff --git a/framework/src/main/resources/mapper/lmk/CustomerTagMapper.xml b/framework/src/main/resources/mapper/lmk/CustomerTagMapper.xml
deleted file mode 100644
index fe509b3..0000000
--- a/framework/src/main/resources/mapper/lmk/CustomerTagMapper.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.lili.modules.lmk.mapper.CustomerTagMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.CustomerTagVO">
-        <result column="tag_name" property="tagName" />
-        <result column="create_type" property="createType" />
-        <result column="create_by" property="createBy" />
-        <result column="create_time" property="createTime" />
-        <result column="update_by" property="updateBy" />
-        <result column="update_time" property="updateTime" />
-    </resultMap>
-
-
-
-
-
-
-    <select id="getById" resultMap="BaseResultMap">
-        SELECT
-            LCT.tag_name,
-            LCT.create_type,
-            LCT.create_by,
-            LCT.create_time,
-            LCT.update_by,
-            LCT.update_time,
-            LCT.id
-        FROM
-            lmk_customer_tag LCT
-        WHERE
-            LCT.id = #{id} AND LCT.delete_flag = 0
-    </select>
-
-
-    <select id="getPage" resultMap="BaseResultMap">
-        SELECT
-            LCT.tag_name,
-            LCT.create_type,
-            LCT.create_by,
-            LCT.create_time,
-            LCT.update_by,
-            LCT.update_time,
-            LCT.id
-        FROM
-            lmk_customer_tag LCT
-        WHERE
-            LCT.delete_flag = 0
-    </select>
-
-</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml b/framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml
new file mode 100644
index 0000000..6db5194
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/GoodsTagMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.lili.modules.lmk.mapper.GoodsTagMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.GoodsTagVO">
+        <result column="tag_id" property="tagId"/>
+        <result column="tag_name" property="tagName"/>
+        <result column="create_type" property="createType"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/MemberMapper.xml b/framework/src/main/resources/mapper/lmk/MemberMapper.xml
new file mode 100644
index 0000000..559581b
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/MemberMapper.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.lili.modules.member.mapper.MemberMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.member.entity.vo.MemberVO">
+        <id column="id" property="id"/>
+        <result column="username" property="username"/>
+        <result column="nick_name" property="nickName"/>
+        <result column="sex" property="sex"/>
+        <result column="birthday" property="birthday"/>
+        <result column="region_id" property="regionId"/>
+        <result column="region" property="region"/>
+        <result column="mobile" property="mobile"/>
+        <result column="point" property="point"/>
+        <result column="total_point" property="totalPoint"/>
+        <result column="face" property="face"/>
+        <result column="disabled" property="disabled"/>
+        <result column="have_store" property="haveStore"/>
+        <result column="store_id" property="storeId"/>
+        <result column="open_id" property="openId"/>
+        <result column="client_enum" property="clientEnum"/>
+        <result column="last_login_date" property="lastLoginDate"/>
+        <result column="grade_id" property="gradeId"/>
+        <result column="experience" property="experience"/>
+        <collection property="tags" ofType="cn.lili.modules.lmk.domain.vo.MemberTagVO">
+            <id column="member_tag_id" property="id"/>
+            <result column="tag_name" property="tagName"/>
+            <result column="tag_id" property="tagId"/>
+        </collection>
+
+    </resultMap>
+    <select id="getVoById" resultMap="BaseResultMap">
+        select m.*, mt.id member_tag_id, mt.tag_name, mt.tag_id
+        from li_member m
+                 left join lmk_member_tag mt on m.id = mt.member_id and mt.delete_flag = 0
+        where m.id = #{id} and m.delete_flag = 0
+    </select>
+
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/MemberTagMapper.xml b/framework/src/main/resources/mapper/lmk/MemberTagMapper.xml
new file mode 100644
index 0000000..55b6d9a
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/MemberTagMapper.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.lili.modules.lmk.mapper.MemberTagMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.MemberTagVO">
+        <result column="tag_id" property="tagId"/>
+        <result column="tag_name" property="tagName"/>
+        <result column="create_type" property="createType"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT LCT.tag_name,
+               LCT.create_type,
+               LCT.create_by,
+               LCT.create_time,
+               LCT.update_by,
+               LCT.update_time,
+               LCT.id
+        FROM lmk_customer_tag LCT
+        WHERE LCT.id = #{id}
+          AND LCT.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT LCT.tag_name,
+               LCT.create_type,
+               LCT.create_by,
+               LCT.create_time,
+               LCT.update_by,
+               LCT.update_time,
+               LCT.id
+        FROM lmk_customer_tag LCT
+        WHERE LCT.delete_flag = 0
+    </select>
+
+</mapper>
diff --git a/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml b/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml
index f1ff446..71af97c 100644
--- a/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/MyCollectMapper.xml
@@ -101,10 +101,7 @@
         <result column="video_file_key" property="videoFileKey" />
         <result column="video_fit" property="videoFit" />
         <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" />
         <result column="play_num" property="playNum" />
diff --git a/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml b/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
index 7b4b73f..09fb7ec 100644
--- a/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
@@ -34,8 +34,7 @@
             LMS.subscribe_user_id,
             LMS.id,
             LM.nick_name,
-            LM.face,
-            (SELECT COUNT(*) FROM lmk_my_subscribe WHERE subscribe_user_id = LMS.subscribe_user_id AND delete_flag = 0) as fans_num
+            LM.face
         FROM
             lmk_my_subscribe LMS
                 LEFT JOIN li_member LM ON LMS.subscribe_user_id = LM.id
diff --git a/framework/src/main/resources/mapper/lmk/TagMapper.xml b/framework/src/main/resources/mapper/lmk/TagMapper.xml
index c8ceb7f..64261aa 100644
--- a/framework/src/main/resources/mapper/lmk/TagMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/TagMapper.xml
@@ -20,7 +20,10 @@
             and t.tag_name like concat('%',#{query.tagName},'%')
         </if>
         <if test="query.tagTypeId != null and query.tagTypeId  != ''">
-            and t.tag_type_id like concat('%',#{query.tagTypeId},'%')
+            and t.tag_type_id = #{query.tagTypeId}
+        </if>
+        <if test="query.tagTypeKey != null and query.tagTypeKey  != ''">
+            and tt.type_key = #{query.tagTypeKey}
         </if>
         order by t.sort_num
     </select>
diff --git a/framework/src/main/resources/mapper/lmk/VideoMapper.xml b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
index e9b22bf..30a55b7 100644
--- a/framework/src/main/resources/mapper/lmk/VideoMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoMapper.xml
@@ -47,7 +47,7 @@
                LG.price
         FROM
              lmk_video_goods LVG
-             INNER JOIN li_goods LG ON LVG.goods_id = LG.id AND LG.market_enable = 'UPPER' AND LG.delete_flag = 0
+             INNER JOIN li_goods_sku LG ON LVG.goods_sku_id = LG.id AND LG.market_enable = 'UPPER' AND LG.delete_flag = 0
         WHERE
              LVG.video_id = #{id} AND LVG.delete_flag = 0
         ORDER BY
@@ -101,6 +101,29 @@
         <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
     </resultMap>
 
+    <!-- 鎾斁鍘嗗彶 -->
+    <resultMap id="HistoryMap" type="cn.lili.modules.lmk.domain.vo.VideoHistoryVO">
+        <id column="id" property="id"/>
+        <result column="author_id" property="authorId" />
+        <result column="authorName" property="authorName" />
+        <result column="authorAvatar" property="authorAvatar" />
+        <result column="cover_url" property="coverFileKey" />
+        <result column="video_file_key" property="videoFileKey" />
+        <result column="video_fit" property="videoFit" />
+        <result column="video_duration" property="videoDuration" />
+        <result column="title" property="title" />
+        <result column="collect_num" property="collectNum" />
+        <result column="comment_num" property="commentNum" />
+        <result column="thumbs_up_num" property="thumbsUpNum" />
+        <result column="status" property="status" />
+        <result column="video_content_type" property="videoContentType" />
+        <result column="video_type" property="videoType" />
+        <result column="video_imgs" property="videoImgs" />
+        <result column="historyId" property="historyId" />
+        <result column="play_at" property="playAt" />
+        <result column="playTime" property="playTime" />
+        <collection property="goodsList" column="id" select="getVideoGoods" ofType="cn.lili.modules.lmk.domain.vo.VideoGoodsDetailVO"/>
+    </resultMap>
 
     <select id="getById" resultMap="BaseResultMap">
         SELECT
@@ -243,6 +266,98 @@
         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="getHistoryPage" resultMap="HistoryMap">
+        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,
+            LFP.id as historyId,
+            LFP.play_at,
+            LFP.update_time as playTime
+        FROM
+            li_foot_print LFP
+                INNER JOIN lmk_video LV ON LFP.ref_id = LV.id AND LFP.view_type = 'video' AND LFP.delete_flag = 0 AND LFP.member_id = #{query.userId}
+                LEFT JOIN li_member LM ON LV.author_id = LM.id
+        WHERE
+            LV.delete_flag = 0 AND LV.status = '1'
+        ORDER BY
+            LFP.update_time DESC
+    </select>
+
     <select id="recommendHealthVideo" resultMap="WxResultMap">
         SELECT
             LV.author_id,
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
index 62a9d02..24baa47 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerController.java
@@ -1,21 +1,15 @@
 package cn.lili.controller.lmk;
 
 import cn.lili.base.Result;
-import cn.lili.common.enums.ResultUtil;
-import cn.lili.common.vo.PageVO;
-import cn.lili.common.vo.ResultMessage;
 import cn.lili.group.Add;
 import cn.lili.group.Update;
-import cn.lili.modules.lmk.domain.form.CustomerTagForm;
+import cn.lili.modules.lmk.domain.form.MemberTagForm;
 import cn.lili.modules.lmk.domain.form.CustomerTagRefForm;
 import cn.lili.modules.lmk.domain.query.CustomerQuery;
 import cn.lili.modules.lmk.domain.query.CustomerTagQuery;
 import cn.lili.modules.lmk.service.CustomerService;
 import cn.lili.modules.lmk.service.CustomerTagRefService;
-import cn.lili.modules.lmk.service.CustomerTagService;
-import cn.lili.modules.member.entity.vo.MemberSearchVO;
-import cn.lili.modules.member.entity.vo.MemberVO;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.service.MemberTagService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -29,8 +23,7 @@
 @RequestMapping("/manager/customerManager")
 public class CustomerController {
     private final CustomerService customerService;
-    private final CustomerTagService customerTagService;
-    private final CustomerTagRefService customerTagRefService;
+    private final MemberTagService memberTagService;
 
     @ApiOperation(value = "鍟嗛摵涓嬫媺鍒楄〃")
     @GetMapping("/store/selectOption")
@@ -52,39 +45,39 @@
 
     @PostMapping("/addTag")
     @ApiOperation(value = "娣诲姞鏍囩", notes = "娣诲姞鏍囩")
-    public Result add(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.add(form);
+    public Result add(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.add(form);
     }
 
     @PutMapping("/editTag")
     @ApiOperation(value = "淇敼鏍囩", notes = "淇敼鏍囩")
-    public Result update(@RequestBody @Validated(Update.class) CustomerTagForm form) {
-        return customerTagService.update(form);
+    public Result update(@RequestBody @Validated(Update.class) MemberTagForm form) {
+        return memberTagService.update(form);
     }
 
     @DeleteMapping("/tag/{id}")
     @ApiOperation(value = "ID鍒犻櫎鏍囩", notes = "ID鍒犻櫎")
     public Result removeById(@PathVariable("id") String id) {
-        return customerTagService.removeById(id);
+        return memberTagService.removeById(id);
     }
 
 
     @GetMapping("/tagList")
     @ApiOperation(value = "鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result list() {
-        return customerTagService.all();
+        return memberTagService.all();
     }
     @GetMapping("/pageTagList")
     @ApiOperation(value = "鍒嗛〉鏍囩鍒楄〃", notes = "鏍囩鍒楄〃")
     public Result pageList(CustomerTagQuery query) {
-        return customerTagService.page(query);
+        return memberTagService.page(query);
     }
 
 
     @PostMapping("/customerAddTag")
     @ApiOperation(value = "娣诲姞瀹㈡埛鏍囩鏍囪瘑", notes = "娣诲姞瀹㈡埛鏍囩鏍囪瘑")
-    public Result addCustomerTag(@RequestBody @Validated(Add.class) CustomerTagForm form) {
-        return customerTagService.addCustomerTag(form);
+    public Result addCustomerTag(@RequestBody @Validated(Add.class) MemberTagForm form) {
+        return memberTagService.addMemberTag(form);
     }
 
 //    @PostMapping("/customerAddTag")
@@ -93,16 +86,11 @@
 //        return customerTagRefService.add(form);
 //    }
 
-    @PutMapping("/customerEditTag")
-    @ApiOperation(value = "淇敼瀹㈡埛鏍囩鏍囪瘑", notes = "淇敼瀹㈡埛鏍囩鏍囪瘑")
-    public Result update(@RequestBody @Validated(Update.class) CustomerTagRefForm form) {
-        return customerTagRefService.update(form);
-    }
 
     @DeleteMapping("/customerDelTag/{id}")
     @ApiOperation(value = "鍒犻櫎瀹㈡埛鏍囩鏍囪瘑ID鍒犻櫎", notes = "鍒犻櫎瀹㈡埛鏍囩鏍囪瘑ID鍒犻櫎")
     public Result removeCustomerTagById(@PathVariable("id") String id) {
-        return customerTagRefService.removeById(id);
+        return memberTagService.removeById(id);
     }
 
 }

--
Gitblit v1.8.0