一、课程介绍
【课程名称】SpringBoot 2.x 实战仿B站高性能后端项目。
【章节】第三章3.20、3.21、3.22、3.23
【讲师】HELLOSTAR
二、课程内容
今天学习的内容也是朴实无华的业务代码开发。主要实现下列功能,只记录主要功能的业务逻辑:
获取用户关注分组
获取粉丝用户列表(保存是否互相关注)
新增用户关注分组
查询用户关注分组
查询用户名,分页显示结果
功能一、获取用户关注分组实现逻辑(取自3.20章节视频的问答区的同学解释的)
1.首先创建一个list,根据userId在t_user_following表里查到这个用户的所有关注关系。(比如表中userId为2的用户的所有行,后面也用这个举例便于理解)。
2.然后提取出来2号用户关注的所有用户的userId,根据这些userId查询这些用户的userInfo存进userInfoList里。
3.通过两个for循环,匹配上述两个list中的userId字段,使得每个userFollowing变量里都可以储存对应的userInfo。
4.allGroup用于存放2号用户的全部关注分组(包括系统的0,1,2分组和自定义分组),作为一个整体加入最后返回前端的result。
5.然后再分别以不同类型的分组为整体,加入result。具体的实现也是通过两个for循环,匹配表t_user_following的groupId字段和t_following_group的id字段。
最后返回的result里的分组信息(记住group里还包含了userInfoList),逻辑上可能有以下几项:result[0]是全部关注分组,result[1]是特别关注分组,result[2]默默关注分组, result[3]系统默认分组, result[4]用户自定义分组(可以有多个)。
// 第一步:获取关注的用户列表
// 第二步:根据关注用户的id查询关注用户的基本信息
// 第三步:将关注用户按关注分组进行分类
public List<FollowingGroup> getUserFollowings(Long userId){
List<UserFollowing> list = userFollowingDao.getUserFollowings(userId);
Set<Long> followingIdSet = list.stream().map(UserFollowing::getFollowingId).collect(Collectors.toSet());
List<UserInfo> userInfoList = new ArrayList<>();
if(followingIdSet.size() > 0){
userInfoList = userService.getUserInfoByUserIds(followingIdSet);
}
for(UserFollowing userFollowing : list){
for(UserInfo userInfo : userInfoList){
if(userFollowing.getFollowingId().equals(userInfo.getUserId())){
userFollowing.setUserInfo(userInfo);
}
}
}
List<FollowingGroup> groupList = followingGroupService.getByUserId(userId);
FollowingGroup allGroup = new FollowingGroup();
allGroup.setName(UserConstant.USER_FOLLOWING_GROUP_ALL_NAME);
allGroup.setFollowingUserInfoList(userInfoList);
List<FollowingGroup> result = new ArrayList<>();
result.add(allGroup);
for(FollowingGroup group : groupList){
List<UserInfo> infoList = new ArrayList<>();
for(UserFollowing userFollowing : list){
if(group.getId().equals(userFollowing.getGroupId())){
infoList.add(userFollowing.getUserInfo());
}
}
group.setFollowingUserInfoList(infoList);
result.add(group);
}
return result;
} 功能二、分页显示查询用户结果(此处sql手写分页,未用分页插件)
1.前端传入查询用户名,当前页面,显示条数。
2.拼接分页查询sql,得到该用户名的分页查询结果。
3.检查当前查询结果中的用户是否已经被关注,存储在布尔字段isFollowed中。已被关注的用户 isFollowed为true,未被关注的为false.
4.处理后的查询结果返回前端.
@GetMapping("/user-infos")
public JsonResponse<PageResult<UserInfo>> pageListUserInfos(@RequestParam Integer no, @RequestParam Integer size, String nick){
Long userId = userSupport.getCurrentUserId();
JSONObject params = new JSONObject();
params.put("no", no);
params.put("size", size);
params.put("nick", nick);
params.put("userId", userId);
PageResult<UserInfo> result = userService.pageListUserInfos(params);
if(result.getTotal() > 0){
List<UserInfo> checkedUserInfoList = userFollowingService.checkFollowingStatus(result.getList(), userId);
result.setList(checkedUserInfoList);
}
return new JsonResponse<>(result);
}三、课程收获
业务部分的开发,主要是理解这部分的业务逻辑,并写出相应的代码。主要收获就是了解了用户关注这类功能的实现逻辑。用户关注功能十分常用,在各种系统中都能使用。这次学习到也是十分有用。指不定哪天就用到了。
有注意到慕课的编辑文章页面和浏览文章的布局不一样吗?每行的字数都不一样,这样排版发布之后都乱了哇。就很烦。
四、学习过程
共同学习,写下你的评论
评论加载中...
作者其他优质文章

