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