diff --git a/book-api/src/main/java/com/imooc/controller/UserInfoController.java b/book-api/src/main/java/com/imooc/controller/UserInfoController.java index 6fc90aa..19ab218 100644 --- a/book-api/src/main/java/com/imooc/controller/UserInfoController.java +++ b/book-api/src/main/java/com/imooc/controller/UserInfoController.java @@ -135,10 +135,11 @@ public class UserInfoController extends BaseInfoProperties { @ApiOperation(value = "根据昵称搜索用户") @GetMapping("searchByNickname") public GraceJSONResult searchByNickname(@RequestParam String nickname, + @RequestParam String id, @RequestParam Integer page, @RequestParam Integer pageSize){ try { - return GraceJSONResult.ok(userService.searchByNickname(nickname, page, pageSize)); + return GraceJSONResult.ok(userService.searchByNickname(nickname, page, pageSize,id)); } catch (Exception e) { // 记录异常日志 log.error("搜索用户时发生异常,nickname: {}, page: {}, pageSize: {}", nickname, page, pageSize, e); diff --git a/book-mapper/src/main/java/com/imooc/mapper/FansMapper.java b/book-mapper/src/main/java/com/imooc/mapper/FansMapper.java index d47f335..8cdc8b0 100644 --- a/book-mapper/src/main/java/com/imooc/mapper/FansMapper.java +++ b/book-mapper/src/main/java/com/imooc/mapper/FansMapper.java @@ -2,9 +2,30 @@ package com.imooc.mapper; import com.imooc.my.mapper.MyMapper; import com.imooc.pojo.Fans; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Map; +import java.util.Set; + @Repository public interface FansMapper extends MyMapper { int updateByPrimaryKeySelective(Fans record); + + + @Select("") + List> getFollowedVlogerIds(@Param("currentUserId")String currentUserId,@Param("vlogerIds")List vlogerIds); +// Set getFollowedVlogerIds( +// @Param("currentUserId") String currentUserId, +// @Param("vlogerIds") List vlogerIds +// ); } \ No newline at end of file diff --git a/book-mapper/src/main/java/com/imooc/mapper/UsersMapper.java b/book-mapper/src/main/java/com/imooc/mapper/UsersMapper.java index 6f6fe32..cd97c9c 100644 --- a/book-mapper/src/main/java/com/imooc/mapper/UsersMapper.java +++ b/book-mapper/src/main/java/com/imooc/mapper/UsersMapper.java @@ -3,6 +3,7 @@ package com.imooc.mapper; import com.imooc.my.mapper.MyMapper; import com.imooc.pojo.Users; import com.imooc.utils.PagedGridResult; +import com.imooc.vo.UsersVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -12,5 +13,5 @@ import java.util.List; public interface UsersMapper extends MyMapper { @Select("SELECT * FROM t_users WHERE nickname LIKE CONCAT('%', #{nickname}, '%')") - List searchByNickname(String nickname); + List searchByNickname(String nickname); } \ No newline at end of file diff --git a/book-model/src/main/java/com/imooc/vo/UsersVO.java b/book-model/src/main/java/com/imooc/vo/UsersVO.java index 743f2d8..6d540a7 100644 --- a/book-model/src/main/java/com/imooc/vo/UsersVO.java +++ b/book-model/src/main/java/com/imooc/vo/UsersVO.java @@ -39,4 +39,7 @@ public class UsersVO { private Integer totalLikeMeCounts; //private Token shopToken; + private boolean IsFollowed; // 关注状态 + private String FollowStatus; // 关注状态 + } \ No newline at end of file diff --git a/book-service/src/main/java/com/imooc/service/UserService.java b/book-service/src/main/java/com/imooc/service/UserService.java index 7e44081..29d04ba 100644 --- a/book-service/src/main/java/com/imooc/service/UserService.java +++ b/book-service/src/main/java/com/imooc/service/UserService.java @@ -6,6 +6,7 @@ import com.imooc.bo.UpdatedUserBO; import com.imooc.mo.Token; import com.imooc.pojo.Users; import com.imooc.utils.PagedGridResult; +import com.imooc.vo.UsersVO; /** * @author vercen @@ -76,5 +77,5 @@ public interface UserService { * @param pageSize * @return */ - List searchByNickname(String nickname, Integer page, Integer pageSize); + List searchByNickname(String nickname, Integer page, Integer pageSize, String id); } diff --git a/book-service/src/main/java/com/imooc/service/impl/UserServiceImpl.java b/book-service/src/main/java/com/imooc/service/impl/UserServiceImpl.java index 62ac5a5..456e4b2 100644 --- a/book-service/src/main/java/com/imooc/service/impl/UserServiceImpl.java +++ b/book-service/src/main/java/com/imooc/service/impl/UserServiceImpl.java @@ -8,15 +8,19 @@ import com.imooc.enums.UserInfoModifyType; import com.imooc.enums.YesOrNo; import com.imooc.exceptions.GraceException; import com.imooc.grace.result.ResponseStatusEnum; +import com.imooc.mapper.FansMapper; import com.imooc.mapper.UserMemberMapper; import com.imooc.mapper.UsersMapper; import com.imooc.mo.Token; +import com.imooc.pojo.Fans; import com.imooc.pojo.UserMember; import com.imooc.pojo.Users; import com.imooc.service.UserService; import com.imooc.utils.*; +import com.imooc.vo.FansVO; import com.imooc.vo.UsersVO; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.n3r.idworker.Sid; import org.redisson.api.RedissonClient; @@ -32,6 +36,7 @@ import org.springframework.util.MultiValueMap; import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; import static com.imooc.base.BaseInfoProperties.REDIS_USER_TOKEN; import static com.imooc.base.BaseInfoProperties.MOBILE_SMSCODE; @@ -41,6 +46,7 @@ import static com.imooc.base.BaseInfoProperties.MOBILE_SMSCODE; * @version 1.0 * @date 2023/5/25 21:02 */ +@Slf4j @Service public class UserServiceImpl implements UserService { @Autowired @@ -52,6 +58,9 @@ public class UserServiceImpl implements UserService { @Autowired private UserMemberMapper userMemberMapper; + @Autowired + private FansMapper fansMapper; + //@Autowired //public RedisOperator redis; @@ -282,14 +291,47 @@ public class UserServiceImpl implements UserService { } @Override - public List searchByNickname(String nickname, Integer page, Integer pageSize) { + public List searchByNickname(String nickname, Integer page, Integer pageSize, String currentUserId) { try { - // 开启分页 PageHelper.startPage(page, pageSize); - return usersMapper.searchByNickname(nickname); + List userList = usersMapper.searchByNickname(nickname); + + // 提取模糊查询出的用户 ID 列表 + List vlogerIds = userList.stream().map(UsersVO::getId).collect(Collectors.toList()); + log.info("用户列表" + vlogerIds); + + // 获取当前用户关注的 + List> followedRelations = fansMapper.getFollowedVlogerIds(currentUserId, vlogerIds); + // 构建 vlogerId 到 is_fan_friend_of_mine 的映射 + java.util.Map relationMap = followedRelations.stream() + .collect(Collectors.toMap( + map -> (String) map.get("vloger_id"), + map -> (Integer) map.get("is_fan_friend_of_mine") + )); + Set followedVlogerIds = relationMap.keySet(); + + // 遍历设置每个用户的关注状态及展示状态 + userList.forEach(usersVO -> { + boolean isFollowed = followedVlogerIds.contains(usersVO.getId()); + usersVO.setIsFollowed(isFollowed); + if (isFollowed) { + Integer isFanFriendOfMine = relationMap.get(usersVO.getId()); + if (isFanFriendOfMine != null && isFanFriendOfMine == 1) { + usersVO.setFollowStatus("互相关注"); // 假设 UsersVO 有此方法设置展示状态 + } else { + usersVO.setFollowStatus("已关注"); + } + } else { + usersVO.setFollowStatus("未关注"); + } + }); + + log.info("用户列表" + userList); + return userList; } catch (Exception e) { + log.error("搜索用户时发生异常", e); throw new RuntimeException("搜索用户时发生异常", e); } } - } +