为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第7天 用户关注列表相关功能

标签:
Java

一、课程介绍

    【课程名称】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);
}


三、课程收获

    业务部分的开发,主要是理解这部分的业务逻辑,并写出相应的代码。主要收获就是了解了用户关注这类功能的实现逻辑。用户关注功能十分常用,在各种系统中都能使用。这次学习到也是十分有用。指不定哪天就用到了。

    有注意到慕课的编辑文章页面和浏览文章的布局不一样吗?每行的字数都不一样,这样排版发布之后都乱了哇。就很烦。


四、学习过程

    

https://img1.sycdn.imooc.com//631dfe380001283c16120890.jpg

https://img1.sycdn.imooc.com//631dfe2900014a7416550890.jpg


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消