用户查询关注状态

This commit is contained in:
fengxiaohang 2025-04-19 17:20:43 +08:00
parent d595a0ba47
commit 8ded07048f
6 changed files with 76 additions and 7 deletions

View File

@ -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);

View File

@ -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<Fans> {
int updateByPrimaryKeySelective(Fans record);
@Select("<script> " +
"SELECT vloger_id, is_fan_friend_of_mine FROM t_fans " +
"WHERE fan_id = #{currentUserId} " +
"AND vloger_id IN " +
"<foreach collection='vlogerIds' item='vlogerId' open='(' separator=',' close=')'> " +
"#{vlogerId} " +
"</foreach> " +
"</script>")
List<Map<String, Object>> getFollowedVlogerIds(@Param("currentUserId")String currentUserId,@Param("vlogerIds")List<String> vlogerIds);
// Set<String> getFollowedVlogerIds(
// @Param("currentUserId") String currentUserId,
// @Param("vlogerIds") List<String> vlogerIds
// );
}

View File

@ -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<Users> {
@Select("SELECT * FROM t_users WHERE nickname LIKE CONCAT('%', #{nickname}, '%')")
List<Users> searchByNickname(String nickname);
List<UsersVO> searchByNickname(String nickname);
}

View File

@ -39,4 +39,7 @@ public class UsersVO {
private Integer totalLikeMeCounts;
//private Token shopToken;
private boolean IsFollowed; // 关注状态
private String FollowStatus; // 关注状态
}

View File

@ -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<Users> searchByNickname(String nickname, Integer page, Integer pageSize);
List<UsersVO> searchByNickname(String nickname, Integer page, Integer pageSize, String id);
}

View File

@ -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<Users> searchByNickname(String nickname, Integer page, Integer pageSize) {
public List<UsersVO> searchByNickname(String nickname, Integer page, Integer pageSize, String currentUserId) {
try {
// 开启分页
PageHelper.startPage(page, pageSize);
return usersMapper.searchByNickname(nickname);
List<UsersVO> userList = usersMapper.searchByNickname(nickname);
// 提取模糊查询出的用户 ID 列表
List<String> vlogerIds = userList.stream().map(UsersVO::getId).collect(Collectors.toList());
log.info("用户列表" + vlogerIds);
// 获取当前用户关注的
List<java.util.Map<String, Object>> followedRelations = fansMapper.getFollowedVlogerIds(currentUserId, vlogerIds);
// 构建 vlogerId is_fan_friend_of_mine 的映射
java.util.Map<String, Integer> relationMap = followedRelations.stream()
.collect(Collectors.toMap(
map -> (String) map.get("vloger_id"),
map -> (Integer) map.get("is_fan_friend_of_mine")
));
Set<String> 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);
}
}
}