xiangpei
2025-05-27 119887612660e9f32495d268c728faf18a7299bb
关注作者功能
2个文件已修改
8个文件已添加
362 ■■■■■ 已修改文件
buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/entity/MySubscribe.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/query/MySubscribeQuery.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/MySubscribeVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/mapper/MySubscribeMapper.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/MySubscribeService.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/MySubscribeServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
buyer-api/src/main/java/cn/lili/controller/lmk/MySubscribeController.java
New file
@@ -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);
    }
}
framework/src/main/java/cn/lili/modules/lmk/domain/entity/MySubscribe.java
New file
@@ -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;
}
framework/src/main/java/cn/lili/modules/lmk/domain/query/MySubscribeQuery.java
New file
@@ -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;
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/MySubscribeVO.java
New file
@@ -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("关注的用户id")
    private String subscribeUserId;
    @ApiModelProperty("关注的用户昵称")
    private String subscribeUserNickname;
    @ApiModelProperty("关注的用户头像")
    private String subscribeUserAvatar;
    @ApiModelProperty("关注的用户粉丝")
    private Long fansNum;
}
framework/src/main/java/cn/lili/modules/lmk/domain/vo/WxVideoVO.java
@@ -25,8 +25,13 @@
    @ApiModelProperty("作者id")
    private String authorId;
    private String authorName;
    @ApiModelProperty("作者头像")
    private String authorAvatar;
    @ApiModelProperty("是否关注了这个作者")
    private Boolean subscribeThisAuthor;
    /** 图片封面 */
    @ApiModelProperty("图片封面")
    private String coverUrl;
framework/src/main/java/cn/lili/modules/lmk/mapper/MySubscribeMapper.java
New file
@@ -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);
}
framework/src/main/java/cn/lili/modules/lmk/service/MySubscribeService.java
New file
@@ -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);
}
framework/src/main/java/cn/lili/modules/lmk/service/impl/MySubscribeServiceImpl.java
New file
@@ -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);
    }
}
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());
framework/src/main/resources/mapper/lmk/MySubscribeMapper.xml
New file
@@ -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>