Netty+SpringBoot+FastDFS+Html5实现聊天App详解(三)

栏目: Java · 发布时间: 5年前

内容简介:Netty+SpringBoot+FastDFS+Html5实现聊天App,项目介绍。Netty+SpringBoot+FastDFS+Html5实现聊天App,

Netty+SpringBoot+FastDFS+Html5实现聊天App,项目介绍。

Netty+SpringBoot+FastDFS+Html5实现聊天App, 项目github链接

本章完整代码链接

本节主要讲解聊天App PigChat中关于好友申请的发送与接受。

包含以下内容:

(1)搜索好友接口

(2)发送添加好友申请的接口

(3)接受添加好友申请的接口

搜索好友接口

定义枚举类型 SearchFriendsStatusEnum,表示添加好友的前置状态

SUCCESS(0, "OK"),
    USER_NOT_EXIST(1, "无此用户..."),    
    NOT_YOURSELF(2, "不能添加你自己..."),            
    ALREADY_FRIENDS(3, "该用户已经是你的好友...");

在service中定义搜索朋友的前置条件判断的方法preconditionSearchFriends。

传入的是用户的Id以及搜索的用户的名称。

【1】首先根据搜索的用户的名称查找是否存在这个用户。

【2】如果搜索的用户不存在,则返回[无此用户]。

【3】如果搜索的用户是你自己,则返回[不能添加自己]。

【4】如果搜索的用户已经是你的好友,则返回[该用户已经是你的好友]。

【5】否则返回成功。

@Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public Integer preconditionSearchFriends(String myUserId, String friendUsername) {

        //1. 查找要添加的朋友是否存在
        Users user = queryUserInfoByUsername(friendUsername);
        
        // 2. 搜索的用户如果不存在,返回[无此用户]
        if (user == null) {
            return SearchFriendsStatusEnum.USER_NOT_EXIST.status;
        }
        
        // 3. 搜索账号是你自己,返回[不能添加自己]
        if (user.getId().equals(myUserId)) {
            return SearchFriendsStatusEnum.NOT_YOURSELF.status;
        }
        
        // 4. 搜索的朋友已经是你的好友,返回[该用户已经是你的好友]
        Example mfe = new Example(MyFriends.class);
        Criteria mfc = mfe.createCriteria();
        mfc.andEqualTo("myUserId", myUserId);
        mfc.andEqualTo("myFriendUserId", user.getId());
        MyFriends myFriendsRel = myFriendsMapper.selectOneByExample(mfe);
        if (myFriendsRel != null) {
            return SearchFriendsStatusEnum.ALREADY_FRIENDS.status;
        }
        
        //返回成功
        return SearchFriendsStatusEnum.SUCCESS.status;
    }

在controller中创建搜索好友接口 searchUser。

传入的是用户的Id,以及要搜索的用户的名字。

【0】首先判断传入的参数是否为空。

【1】通过userService的preconditionSearchFriends方法得到前置条件。

【2】如果搜索前置条件为成功,则向前端返回搜索用户的信息。

【3】否则搜索失败。

/**
     * @Description: 搜索好友接口, 根据账号做匹配查询而不是模糊查询
     */
    @PostMapping("/search")
    public IMoocJSONResult searchUser(String myUserId, String friendUsername)
            throws Exception {
        
        // 0. 判断 myUserId friendUsername 不能为空
        if (StringUtils.isBlank(myUserId) 
                || StringUtils.isBlank(friendUsername)) {
            return IMoocJSONResult.errorMsg("");
        }
        
        // 前置条件 - 1. 搜索的用户如果不存在,返回[无此用户]
        // 前置条件 - 2. 搜索账号是你自己,返回[不能添加自己]
        // 前置条件 - 3. 搜索的朋友已经是你的好友,返回[该用户已经是你的好友]
        //1. 得到前置条件状态
        Integer status = userService.preconditionSearchFriends(myUserId, friendUsername);
        //2. 搜索成功,返回搜索用户的信息
        if (status == SearchFriendsStatusEnum.SUCCESS.status) {
            Users user = userService.queryUserInfoByUsername(friendUsername);
            UsersVO userVO = new UsersVO();
            BeanUtils.copyProperties(user, userVO);
            return IMoocJSONResult.ok(userVO);
        } else {
        //3. 搜索失败
            String errorMsg = SearchFriendsStatusEnum.getMsgByKey(status);
            return IMoocJSONResult.errorMsg(errorMsg);
        }
    }

发送添加好友申请的接口

在service中定义添加好友请求记录,保存到数据库的sendFriendRequest方法。

传入的是添加好友记录的发送方——用户的Id,以及记录的接收方——想要添加的朋友的名称。

【1】首先根据用户名把朋友信息查询出来。

【2】然后查询发送好友请求记录表。

【3】如果不是你的好友,并且好友记录没有添加,则新增好友请求记录。这样可以保证打你发送了两次请求之后,数据库中仍然只记录一次请求的数据。

@Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void sendFriendRequest(String myUserId, String friendUsername) {
        
        // 1. 根据用户名把朋友信息查询出来
        Users friend = queryUserInfoByUsername(friendUsername);
        
        // 2. 查询发送好友请求记录表
        Example fre = new Example(FriendsRequest.class);
        Criteria frc = fre.createCriteria();
        frc.andEqualTo("sendUserId", myUserId);
        frc.andEqualTo("acceptUserId", friend.getId());
        FriendsRequest friendRequest = friendsRequestMapper.selectOneByExample(fre);
        if (friendRequest == null) {
            // 3. 如果不是你的好友,并且好友记录没有添加,则新增好友请求记录
            String requestId = sid.nextShort();
            
            FriendsRequest request = new FriendsRequest();
            request.setId(requestId);
            request.setSendUserId(myUserId);
            request.setAcceptUserId(friend.getId());
            request.setRequestDateTime(new Date());
            friendsRequestMapper.insert(request);
        }
    }

在controller中创建发送添加好友请求的接口。

传入的是添加好友记录的发送方——用户的Id,以及记录的接收方——想要添加的朋友的名称。

【0】首先判断传入参数不为空。

【1】然后判断前置条件,若为成功则通过userService的sendFriendRequest方法发送好友请求,否则返回失败。

/**
     * @Description: 发送添加好友的请求
     */
    @PostMapping("/addFriendRequest")
    public IMoocJSONResult addFriendRequest(String myUserId, String friendUsername)
            throws Exception {
        
        // 0. 判断 myUserId friendUsername 不能为空
        if (StringUtils.isBlank(myUserId) 
                || StringUtils.isBlank(friendUsername)) {
            return IMoocJSONResult.errorMsg("");
        }
        
        // 前置条件 - 1. 搜索的用户如果不存在,返回[无此用户]
        // 前置条件 - 2. 搜索账号是你自己,返回[不能添加自己]
        // 前置条件 - 3. 搜索的朋友已经是你的好友,返回[该用户已经是你的好友]
        // 1. 判断前置条件
        Integer status = userService.preconditionSearchFriends(myUserId, friendUsername);
        if (status == SearchFriendsStatusEnum.SUCCESS.status) {
            userService.sendFriendRequest(myUserId, friendUsername);
        } else {
            String errorMsg = SearchFriendsStatusEnum.getMsgByKey(status);
            return IMoocJSONResult.errorMsg(errorMsg);
        }
        
        return IMoocJSONResult.ok();
    }

最终实现效果

Netty+SpringBoot+FastDFS+Html5实现聊天App详解(三)

接受添加好友申请的接口

在service中定义查询好友请求列表的queryFriendRequestList方法。

@Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public List<FriendRequestVO> queryFriendRequestList(String acceptUserId) {
        return usersMapperCustom.queryFriendRequestList(acceptUserId);
    }

在controller中定义接受添加好友请求的接口queryFriendRequests。

/**
     * @Description: 发送添加好友的请求
     */
    @PostMapping("/queryFriendRequests")
    public IMoocJSONResult queryFriendRequests(String userId) {
        
        // 0. 判断不能为空
        if (StringUtils.isBlank(userId)) {
            return IMoocJSONResult.errorMsg("");
        }
        
        // 1. 查询用户接受到的朋友申请
        return IMoocJSONResult.ok(userService.queryFriendRequestList(userId));
    }

最终实现效果

Netty+SpringBoot+FastDFS+Html5实现聊天App详解(三)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

淘宝、天猫电商运营百科全书

淘宝、天猫电商运营百科全书

刘涛 / 电子工业出版社 / 2016-7 / 59.00元

有人说淘宝、天猫上90%的卖家不赚钱,我认为说得有点大了。因为如果说大家都不赚钱或者在亏钱,为什么去年在做店铺的卖家,今年还在继续?那些不赚钱的卖家,多数是没意识到市场的变化,还在用原来的套路运营店铺。市场在变,但卖家的思路却没有转变,不赚钱也在情理之中,因为淘宝、天猫的玩法变了。做店铺就是好比一场“打怪”升级的游戏,每次的升级都需要强大的装备与攻略。优胜劣汰,能活下去并且能赚钱的卖家,都是在不停......一起来看看 《淘宝、天猫电商运营百科全书》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具