From 119887612660e9f32495d268c728faf18a7299bb Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 27 五月 2025 14:34:41 +0800
Subject: [PATCH] 关注作者功能

---
 framework/src/main/java/cn/lili/modules/lmk/domain/query/MySubscribeQuery.java       |   26 +++
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java                 |    5 
 framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml                        |   50 +++++++
 framework/src/main/java/cn/lili/modules/lmk/service/MySubscribeService.java          |   50 +++++++
 framework/src/main/java/cn/lili/modules/lmk/mapper/MySubscribeMapper.java            |   41 +++++
 buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java            |   46 ++++++
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/MySubscribe.java           |   30 ++++
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/MySubscribeVO.java             |   36 +++++
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java       |    5 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/MySubscribeServiceImpl.java |   73 ++++++++++
 10 files changed, 361 insertions(+), 1 deletions(-)

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
new file mode 100644
index 0000000..c741b90
--- /dev/null
+++ b/buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
@@ -0,0 +1,46 @@
+package cn.lili.controller.lmk;
+
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.query.MySubscribeQuery;
+import cn.lili.modules.lmk.service.MySubscribeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 鎴戠殑鍏虫敞 鍓嶇鎺у埗鍣�
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "鎴戠殑鍏虫敞", tags = "鎴戠殑鍏虫敞绠$悊")
+@RestController
+@RequestMapping("/buyer/lmk/my-subscribe")
+public class MySubscribeController {
+
+    private final MySubscribeService mySubscribeService;
+
+    @PostMapping("/subscribe/{userId}")
+    @ApiOperation(value = "鍏虫敞", notes = "鍏虫敞")
+    public Result subscribe(@PathVariable("userId") @ApiParam("琚叧娉ㄧ殑鐢ㄦ埛id") String userId) {
+        return mySubscribeService.subscribe(userId);
+    }
+
+    @PostMapping("/unSubscribe/{userId}")
+    @ApiOperation(value = "鍙栨秷鍏虫敞", notes = "鍙栨秷鍏虫敞")
+    public Result unSubscribe(@PathVariable("userId") @ApiParam("琚彇娑堝叧娉ㄧ殑鐢ㄦ埛id") String userId) {
+        return mySubscribeService.unSubscribe(userId);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    public Result page(MySubscribeQuery query) {
+        return mySubscribeService.page(query);
+    }
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MySubscribe.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MySubscribe.java
new file mode 100644
index 0000000..20e6f5c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/MySubscribe.java
@@ -0,0 +1,30 @@
+package cn.lili.modules.lmk.domain.entity;
+
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 鎴戠殑鍏虫敞
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+@Data
+@TableName("lmk_my_subscribe")
+public class MySubscribe extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableField("user_id")
+    /** 鐢ㄦ埛id */
+    private String userId;
+
+    @TableField("subscribe_user_id")
+    /** 鍏虫敞鐢ㄦ埛id */
+    private String subscribeUserId;
+
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/MySubscribeQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/MySubscribeQuery.java
new file mode 100644
index 0000000..b271aa1
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/MySubscribeQuery.java
@@ -0,0 +1,26 @@
+package cn.lili.modules.lmk.domain.query;
+
+import cn.lili.base.AbsQuery;
+import java.util.List;
+import org.springframework.lang.NonNull;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鎴戠殑鍏虫敞鏌ヨ
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+@Data
+@ApiModel(value = "MySubscribe鏌ヨ鍙傛暟", description = "鎴戠殑鍏虫敞鏌ヨ鍙傛暟")
+public class MySubscribeQuery extends AbsQuery {
+
+    @ApiModelProperty(hidden = true)
+    private String userId;
+
+}
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MySubscribeVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MySubscribeVO.java
new file mode 100644
index 0000000..6cd593d
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/MySubscribeVO.java
@@ -0,0 +1,36 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.base.AbsVo;
+import cn.lili.modules.lmk.domain.entity.MySubscribe;
+import java.util.List;
+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;
+
+/**
+ * 鎴戠殑鍏虫敞灞曠ず
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+@Data
+@ApiModel(value = "鎴戠殑鍏虫敞鍝嶅簲鏁版嵁", description = "鎴戠殑鍏虫敞鍝嶅簲鏁版嵁")
+public class MySubscribeVO extends AbsVo {
+
+    /** 鍏虫敞鐢ㄦ埛id */
+    @ApiModelProperty("鍏虫敞鐨勭敤鎴穒d")
+    private String subscribeUserId;
+
+    @ApiModelProperty("鍏虫敞鐨勭敤鎴锋樀绉�")
+    private String subscribeUserNickname;
+
+    @ApiModelProperty("鍏虫敞鐨勭敤鎴峰ご鍍�")
+    private String subscribeUserAvatar;
+
+    @ApiModelProperty("鍏虫敞鐨勭敤鎴风矇涓�")
+    private Long fansNum;
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
index e56c50d..3600fa2 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
@@ -25,8 +25,13 @@
     @ApiModelProperty("浣滆�卛d")
     private String authorId;
     private String authorName;
+
+    @ApiModelProperty("浣滆�呭ご鍍�")
     private String authorAvatar;
 
+    @ApiModelProperty("鏄惁鍏虫敞浜嗚繖涓綔鑰�")
+    private Boolean subscribeThisAuthor;
+
     /** 鍥剧墖灏侀潰 */
     @ApiModelProperty("鍥剧墖灏侀潰")
     private String coverUrl;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/MySubscribeMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/MySubscribeMapper.java
new file mode 100644
index 0000000..b74c797
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/MySubscribeMapper.java
@@ -0,0 +1,41 @@
+package cn.lili.modules.lmk.mapper;
+
+import cn.lili.modules.lmk.domain.entity.MySubscribe;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import cn.lili.modules.lmk.domain.vo.MySubscribeVO;
+import cn.lili.modules.lmk.domain.query.MySubscribeQuery;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鎴戠殑鍏虫敞 Mapper 鎺ュ彛
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+@Mapper
+public interface MySubscribeMapper extends BaseMapper<MySubscribe> {
+
+    /**
+     * id鏌ユ壘鎴戠殑鍏虫敞
+     * @param id
+     * @return
+     */
+    MySubscribeVO getById(String id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") MySubscribeQuery query);
+
+    /**
+     * 鏌ヨ鎴戝叧娉ㄧ殑鐢ㄦ埛
+     *
+     * @param userId
+     * @return
+     */
+    List<String> getSubscribesByUserId(@Param("userId") String userId);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/MySubscribeService.java b/framework/src/main/java/cn/lili/modules/lmk/service/MySubscribeService.java
new file mode 100644
index 0000000..c361df5
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/MySubscribeService.java
@@ -0,0 +1,50 @@
+package cn.lili.modules.lmk.service;
+
+import cn.lili.modules.lmk.domain.entity.MySubscribe;
+import cn.lili.modules.lmk.domain.vo.SimpleMyCollectVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import cn.lili.base.Result;
+import cn.lili.modules.lmk.domain.query.MySubscribeQuery;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鎴戠殑鍏虫敞 鏈嶅姟绫�
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+public interface MySubscribeService extends IService<MySubscribe> {
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(MySubscribeQuery query);
+
+    /**
+     * 鍏虫敞
+     *
+     * @param userId 琚叧娉ㄧ殑浜�
+     * @return
+     */
+    Result subscribe(String userId);
+
+    /**
+     * 鍙栨秷鍏虫敞
+     *
+     * @param userId 鍙栨秷璋佺殑鍏虫敞
+     * @return
+     */
+    Result unSubscribe(String userId);
+
+    /**
+     * 鑾峰彇鎴戝叧娉ㄧ殑鐢ㄦ埛ids
+     *
+     * @param userId
+     * @return
+     */
+    List<String> getSubscribesByUserId(String userId);
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/MySubscribeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/MySubscribeServiceImpl.java
new file mode 100644
index 0000000..81e2c3c
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/MySubscribeServiceImpl.java
@@ -0,0 +1,73 @@
+package cn.lili.modules.lmk.service.impl;
+
+import cn.lili.common.security.context.UserContext;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import cn.lili.modules.lmk.domain.entity.MySubscribe;
+import cn.lili.modules.lmk.mapper.MySubscribeMapper;
+import cn.lili.modules.lmk.service.MySubscribeService;
+import cn.lili.base.Result;
+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.vo.MySubscribeVO;
+import cn.lili.modules.lmk.domain.query.MySubscribeQuery;
+import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
+import cn.lili.utils.PageUtil;
+
+import java.util.List;
+
+/**
+ * 鎴戠殑鍏虫敞 鏈嶅姟瀹炵幇绫�
+ *
+ * @author xp
+ * @since 2025-05-27
+ */
+@Service
+@RequiredArgsConstructor
+public class MySubscribeServiceImpl extends ServiceImpl<MySubscribeMapper, MySubscribe> implements MySubscribeService {
+
+    private final MySubscribeMapper mySubscribeMapper;
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(MySubscribeQuery query) {
+        query.setUserId(UserContext.getCurrentUserId());
+        IPage<MySubscribeVO> page = PageUtil.getPage(query, MySubscribeVO.class);
+        baseMapper.getPage(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
+    }
+
+    @Override
+    public Result subscribe(String userId) {
+        boolean exists = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(MySubscribe::getSubscribeUserId, userId)
+                .eq(MySubscribe::getUserId, UserContext.getCurrentUserId())
+                .exists();
+        if (!exists) {
+            MySubscribe mySubscribe = new MySubscribe();
+            mySubscribe.setUserId(UserContext.getCurrentUserId());
+            mySubscribe.setSubscribeUserId(userId);
+            baseMapper.insert(mySubscribe);
+        }
+        return Result.ok().data("鍏虫敞鎴愬姛");
+    }
+
+    @Override
+    public Result unSubscribe(String userId) {
+        new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(MySubscribe::getUserId, UserContext.getCurrentUserId())
+                .eq(MySubscribe::getSubscribeUserId, userId)
+                .remove();
+        return Result.ok().data("宸插彇娑堝叧娉�");
+    }
+
+    @Override
+    public List<String> getSubscribesByUserId(String userId) {
+        return baseMapper.getSubscribesByUserId(userId);
+    }
+}
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 d5c5485..8834a3f 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
@@ -54,6 +54,7 @@
     private final MyCollectService myCollectService;
     private final COSUtil cosUtil;
     private final FootprintService footprintService;
+    private final MySubscribeService mySubscribeService;
 
     /**
      * 娣诲姞
@@ -270,12 +271,14 @@
             Map<String, List<SimpleMyCollectVO>> collectMap =myCollectService.getCollectsByVideoIds(videoIds)
                     .stream()
                     .collect(Collectors.groupingBy(SimpleMyCollectVO::getRefId));
-            // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌
+            List<String> subscribes = mySubscribeService.getSubscribesByUserId(UserContext.getCurrentUserId());
+            // 3. 鑾峰彇瑙嗛涓存椂璁块棶鍦板潃銆佽缃棰戞爣绛俱�佹垜鏄惁鏀惰棌銆佷綔鑰呮槸鍚﹀叧娉�
             page.getRecords().forEach(v -> {
                 v.setGoods(new VideoGoodsVO());
                 v.setTagList(tagMap.get(v.getId()));
                 v.setCollected(CollectionUtils.isNotEmpty(collectMap.get(v.getId())));
                 v.setVideoUrl(cosUtil.getPreviewUrl(v.getVideoFileKey()));
+                v.setSubscribeThisAuthor(subscribes.contains(v.getAuthorId()));
             });
         }
         return Result.ok().data(page.getRecords());
diff --git a/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml b/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
new file mode 100644
index 0000000..7b4b73f
--- /dev/null
+++ b/framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
@@ -0,0 +1,50 @@
+<?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.MySubscribeMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.MySubscribeVO">
+        <id column="id" property="id"/>
+        <result column="subscribe_user_id" property="subscribeUserId" />
+        <result column="nick_name" property="subscribeUserNickname" />
+        <result column="face" property="subscribeUserAvatar" />
+        <result column="fans_num" property="fansNum" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            LMS.user_id,
+            LMS.subscribe_user_id,
+            LMS.id
+        FROM
+            lmk_my_subscribe LMS
+        WHERE
+            LMS.id = #{id} AND LMS.delete_flag = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            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
+        FROM
+            lmk_my_subscribe LMS
+                LEFT JOIN li_member LM ON LMS.subscribe_user_id = LM.id
+        WHERE
+            LMS.delete_flag = 0 AND LMS.user_id = #{query.userId}
+    </select>
+
+    <select id="getSubscribesByUserId" parameterType="string" resultType="string">
+        SELECT subscribe_user_id FROM lmk_my_subscribe WHERE user_id = #{userId} AND delete_flag = 0
+    </select>
+
+</mapper>

--
Gitblit v1.8.0