From 01b44c98ec553bf188c8862f9ea316b233adb0c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Fri, 26 Jan 2024 11:42:11 +0800 Subject: [PATCH] 123 --- .../app/UserStartAppController.java | 12 +-- .../java/com/ruoyi/cai/domain/UserFollow.java | 5 +- .../app/vo/user/UserStarOrVisitorList.java | 8 +- .../dto/commom/member/CheckUserMemberDTO.java | 10 +++ .../java/com/ruoyi/cai/manager/ImService.java | 2 +- .../ruoyi/cai/mapper/UserFollowMapper.java | 11 ++- .../ruoyi/cai/service/UserMemberService.java | 6 +- .../service/impl/UserFollowServiceImpl.java | 73 ++++++++++++++++++- .../service/impl/UserMemberServiceImpl.java | 18 ++++- .../resources/mapper/cai/UserFollowMapper.xml | 25 ++++--- 10 files changed, 145 insertions(+), 25 deletions(-) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/member/CheckUserMemberDTO.java diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserStartAppController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserStartAppController.java index ef0ef375..d0341721 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserStartAppController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/UserStartAppController.java @@ -28,17 +28,17 @@ public class UserStartAppController { @PostMapping("/star") @Operation(summary = "关注用户") @Log(title = "关注用户", businessType = BusinessType.OTHER, isSaveDb = true) - public R star(@RequestBody StarOrVisitorReq starOrVisitorReq){ - boolean bool = userFollowService.star(starOrVisitorReq); - return R.ok(bool); + public R star(@RequestBody StarOrVisitorReq starOrVisitorReq){ + userFollowService.star(starOrVisitorReq); + return R.ok(); } @PostMapping("/unstar") @Operation(summary = "取消关注用户") @Log(title = "取消关注用户", businessType = BusinessType.OTHER, isSaveDb = true) - public R unStar(@RequestBody StarOrVisitorReq starOrVisitorReq){ - boolean bool = userFollowService.unStar(starOrVisitorReq); - return R.ok(bool); + public R unStar(@RequestBody StarOrVisitorReq starOrVisitorReq){ + userFollowService.unStar(starOrVisitorReq); + return R.ok(); } @GetMapping("/page") diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserFollow.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserFollow.java index acfcf5aa..d2eda4b4 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserFollow.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/domain/UserFollow.java @@ -22,16 +22,17 @@ public class UserFollow implements Serializable { private Long id; /** - * 关注人ID + * 关注人ID (关注人 关注了 被关注人) */ private Long userId; /** - * 被关注人ID + * 被关注人ID (关注人 关注了 被关注人) */ private Long followUser; /** * 状态 0 未查看 1 已查看 */ + @Deprecated private Integer isWatch; /** * 备注 diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserStarOrVisitorList.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserStarOrVisitorList.java index 5809df9f..f8a92967 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserStarOrVisitorList.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/user/UserStarOrVisitorList.java @@ -1,5 +1,6 @@ package com.ruoyi.cai.dto.app.vo.user; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; @@ -7,7 +8,12 @@ import java.time.LocalDateTime; @Data public class UserStarOrVisitorList extends UserBaseVo { + @Schema(description = "发生时间") private LocalDateTime happenTime; - private Integer isWatch; + @Schema(description = "是否回关 0-否 1-是") + private Integer callBackStar = 0; + @Schema(description = "是否为VIP") + private Integer isVip = 0; + } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/member/CheckUserMemberDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/member/CheckUserMemberDTO.java new file mode 100644 index 00000000..9206f435 --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/commom/member/CheckUserMemberDTO.java @@ -0,0 +1,10 @@ +package com.ruoyi.cai.dto.commom.member; + +import com.ruoyi.cai.enums.UserMemberTypeEnum; +import lombok.Data; + +@Data +public class CheckUserMemberDTO { + private Long userId; + private UserMemberTypeEnum memberType; +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java index 931ccd7a..40ad9dd0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/ImService.java @@ -139,7 +139,7 @@ public class ImService { private UserBlacklistService userBlacklistService; private Long getByImPrice(Long userId){ - UserMemberTypeEnum userMemberType = userMemberService.checkUserMember(userId); + UserMemberTypeEnum userMemberType = userMemberService.checkUserIsMember(userId); if(userMemberType == null){ return 10L; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserFollowMapper.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserFollowMapper.java index 5789b76f..03647545 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserFollowMapper.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mapper/UserFollowMapper.java @@ -15,5 +15,14 @@ import org.apache.ibatis.annotations.Param; */ public interface UserFollowMapper extends BaseMapper { - Page pageApp(@Param("build") Page build, @Param("query") StarQuery query); + /** + * 查询我的关注 (我关注的人) + */ + Page pageMyStarApp(@Param("build") Page build, @Param("query") StarQuery query); + + + /** + * 查询我的粉丝 (关注我的人) + */ + Page pageMyFansApp(@Param("build") Page build, @Param("query") StarQuery query); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java index f84acd74..df4dac20 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/UserMemberService.java @@ -8,6 +8,8 @@ import com.ruoyi.cai.dto.app.vo.user.MemberInfoVo; import com.ruoyi.cai.enums.UserMemberTypeEnum; import com.ruoyi.common.core.domain.PageQuery; +import java.util.List; + /** * 会员管理Service接口 * @@ -27,7 +29,9 @@ public interface UserMemberService extends IService { * @param userId * @return */ - UserMemberTypeEnum checkUserMember(Long userId); + UserMemberTypeEnum checkUserIsMember(Long userId); + + List checkUserIsMember(List userId); void relieveMember(Long id); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java index 9e911c94..dfa2c559 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserFollowServiceImpl.java @@ -7,17 +7,25 @@ import com.ruoyi.cai.domain.UserCount; import com.ruoyi.cai.domain.UserFollow; import com.ruoyi.cai.dto.app.query.StarQuery; import com.ruoyi.cai.dto.app.query.StarOrVisitorReq; +import com.ruoyi.cai.dto.app.vo.user.UserBaseVo; import com.ruoyi.cai.dto.app.vo.user.UserStarOrVisitorList; import com.ruoyi.cai.mapper.UserFollowMapper; import com.ruoyi.cai.service.UserCountService; import com.ruoyi.cai.service.UserFollowService; +import com.ruoyi.cai.service.UserMemberService; import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + /** * 关注表Service业务层处理 * @@ -30,6 +38,8 @@ public class UserFollowServiceImpl extends ServiceImpl pageApp(PageQuery pageQuery, StarQuery query) { + if(query.getType() == null){ + throw new ServiceException("参数异常"); + } + if(query.getType() != 1 && query.getType() != 2){ + throw new ServiceException("参数异常"); + } query.setUserId(LoginHelper.getUserId()); - return baseMapper.pageApp(pageQuery.build(),query); + // 类型 1=查询我的关注 2=查询我的粉丝 + if(query.getType() == 1){ + return this.pageMyStarApp(pageQuery,query); + }else{ + return this.pageMyFansApp(pageQuery,query); + } + } + + /** + * 查询我的关注 + */ + private Page pageMyStarApp(PageQuery pageQuery, StarQuery query){ + Page page = baseMapper.pageMyStarApp(pageQuery.build(), query); + List records = page.getRecords(); + if(!CollectionUtils.isEmpty(records)){ + List userIds = records.stream().map(UserBaseVo::getUserId).collect(Collectors.toList()); + // 我关注的人ID + if(!CollectionUtils.isEmpty(userIds)){ + List list = this.list(Wrappers.lambdaQuery(UserFollow.class) + .select(UserFollow::getUserId,UserFollow::getFollowUser) + .in(UserFollow::getUserId, userIds) + .eq(UserFollow::getFollowUser, query.getUserId())); + Set callBackUserIds = list.stream().map(UserFollow::getUserId).collect(Collectors.toSet()); + List vipUserIds = userMemberService.checkUserIsMember(userIds); + for (UserStarOrVisitorList record : records) { + record.setCallBackStar(callBackUserIds.contains(record.getUserId())?1:0); + record.setIsVip(vipUserIds.contains(record.getUserId())?1:0); + } + } + } + return page; + } + + /** + * 查询我的粉丝 + */ + private Page pageMyFansApp(PageQuery pageQuery, StarQuery query){ + Page page = baseMapper.pageMyFansApp(pageQuery.build(), query); + List records = page.getRecords(); + if(!CollectionUtils.isEmpty(records)){ + // 我的粉丝ID + List userIds = records.stream().map(UserBaseVo::getUserId).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(userIds)){ + List list = this.list(Wrappers.lambdaQuery(UserFollow.class) + .select(UserFollow::getUserId,UserFollow::getFollowUser) + .eq(UserFollow::getUserId, query.getUserId()) + .in(UserFollow::getFollowUser, userIds)); + Set callBackUserIds = list.stream().map(UserFollow::getFollowUser).collect(Collectors.toSet()); + List vipUserIds = userMemberService.checkUserIsMember(userIds); + for (UserStarOrVisitorList record : records) { + record.setCallBackStar(callBackUserIds.contains(record.getUserId())?1:0); + record.setIsVip(vipUserIds.contains(record.getUserId())?1:0); + } + } + } + return page; } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java index 3a585dbb..00bf8e16 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/UserMemberServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.cai.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -23,7 +24,9 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * 会员管理Service业务层处理 @@ -60,7 +63,7 @@ public class UserMemberServiceImpl extends ServiceImpl list = this.list(Wrappers.lambdaQuery(UserMember.class) .eq(UserMember::getUserId, userId) .eq(UserMember::getMemberStatus, MemberStatusEnum.NORMAL.getCode()) @@ -76,6 +79,19 @@ public class UserMemberServiceImpl extends ServiceImpl checkUserIsMember(List userId) { + if(CollectionUtil.isEmpty(userId)){ + return Collections.emptyList(); + } + List list = this.list(Wrappers.lambdaQuery(UserMember.class) + .select(UserMember::getUserId) + .in(UserMember::getUserId, userId) + .eq(UserMember::getMemberStatus, MemberStatusEnum.NORMAL.getCode()) + .le(UserMember::getExpireDate, LocalDateTime.now())); + return list.stream().map(UserMember::getUserId).collect(Collectors.toList()); + } + @Override public void relieveMember(Long id) { this.update(Wrappers.lambdaUpdate(UserMember.class) diff --git a/ruoyi-cai/src/main/resources/mapper/cai/UserFollowMapper.xml b/ruoyi-cai/src/main/resources/mapper/cai/UserFollowMapper.xml index 662b702f..df92f93a 100644 --- a/ruoyi-cai/src/main/resources/mapper/cai/UserFollowMapper.xml +++ b/ruoyi-cai/src/main/resources/mapper/cai/UserFollowMapper.xml @@ -11,20 +11,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select - t1.create_time as happen_time,t1.is_watch, - t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age + t1.create_time as happen_time, + t2.id as user_id, t2.avatar,t2.gender,t2.city,t2.nickname,t2.usercode,t2.age + from cai_user_follow t1 + join cai_user t2 on t1.follow_user = t2.id + where t1.user_id = #{query.userId} + order by create_time desc + + +