成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App詳解(三)

isLishude / 1613人閱讀

摘要:實(shí)現(xiàn)聊天,項(xiàng)目介紹。首先根據(jù)搜索的用戶的名稱查找是否存在這個(gè)用戶。如果搜索前置條件為成功,則向前端返回搜索用戶的信息。發(fā)送添加好友的請(qǐng)求判斷不能為空查詢用戶接受到的朋友申請(qǐng)最終實(shí)現(xiàn)效果

Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目介紹。

Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目github鏈接。

本章完整代碼鏈接。


本節(jié)主要講解聊天App PigChat中關(guān)于好友申請(qǐng)的發(fā)送與接受。

包含以下內(nèi)容:

(1)搜索好友接口 (2)發(fā)送添加好友申請(qǐng)的接口 (3)接受添加好友申請(qǐng)的接口 搜索好友接口

定義枚舉類型 SearchFriendsStatusEnum,表示添加好友的前置狀態(tài)

    SUCCESS(0, "OK"),
    USER_NOT_EXIST(1, "無(wú)此用戶..."),    
    NOT_YOURSELF(2, "不能添加你自己..."),            
    ALREADY_FRIENDS(3, "該用戶已經(jīng)是你的好友...");



在service中定義搜索朋友的前置條件判斷的方法preconditionSearchFriends。

傳入的是用戶的Id以及搜索的用戶的名稱。

【1】首先根據(jù)搜索的用戶的名稱查找是否存在這個(gè)用戶。
【2】如果搜索的用戶不存在,則返回[無(wú)此用戶]。
【3】如果搜索的用戶是你自己,則返回[不能添加自己]。
【4】如果搜索的用戶已經(jīng)是你的好友,則返回[該用戶已經(jīng)是你的好友]。
【5】否則返回成功。

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

        //1. 查找要添加的朋友是否存在
        Users user = queryUserInfoByUsername(friendUsername);
        
        // 2. 搜索的用戶如果不存在,返回[無(wú)此用戶]
        if (user == null) {
            return SearchFriendsStatusEnum.USER_NOT_EXIST.status;
        }
        
        // 3. 搜索賬號(hào)是你自己,返回[不能添加自己]
        if (user.getId().equals(myUserId)) {
            return SearchFriendsStatusEnum.NOT_YOURSELF.status;
        }
        
        // 4. 搜索的朋友已經(jīng)是你的好友,返回[該用戶已經(jīng)是你的好友]
        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中創(chuàng)建搜索好友接口 searchUser。
傳入的是用戶的Id,以及要搜索的用戶的名字。

【0】首先判斷傳入的參數(shù)是否為空。
【1】通過(guò)userService的preconditionSearchFriends方法得到前置條件。
【2】如果搜索前置條件為成功,則向前端返回搜索用戶的信息。
【3】否則搜索失敗。

    /**
     * @Description: 搜索好友接口, 根據(jù)賬號(hào)做匹配查詢而不是模糊查詢
     */
    @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. 搜索的用戶如果不存在,返回[無(wú)此用戶]
        // 前置條件 - 2. 搜索賬號(hào)是你自己,返回[不能添加自己]
        // 前置條件 - 3. 搜索的朋友已經(jīng)是你的好友,返回[該用戶已經(jīng)是你的好友]
        //1. 得到前置條件狀態(tài)
        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);
        }
    }
發(fā)送添加好友申請(qǐng)的接口

在service中定義添加好友請(qǐng)求記錄,保存到數(shù)據(jù)庫(kù)的sendFriendRequest方法。
傳入的是添加好友記錄的發(fā)送方——用戶的Id,以及記錄的接收方——想要添加的朋友的名稱。

【1】首先根據(jù)用戶名把朋友信息查詢出來(lái)。
【2】然后查詢發(fā)送好友請(qǐng)求記錄表。
【3】如果不是你的好友,并且好友記錄沒(méi)有添加,則新增好友請(qǐng)求記錄。這樣可以保證打你發(fā)送了兩次請(qǐng)求之后,數(shù)據(jù)庫(kù)中仍然只記錄一次請(qǐng)求的數(shù)據(jù)。

    @Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void sendFriendRequest(String myUserId, String friendUsername) {
        
        // 1. 根據(jù)用戶名把朋友信息查詢出來(lái)
        Users friend = queryUserInfoByUsername(friendUsername);
        
        // 2. 查詢發(fā)送好友請(qǐng)求記錄表
        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. 如果不是你的好友,并且好友記錄沒(méi)有添加,則新增好友請(qǐng)求記錄
            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中創(chuàng)建發(fā)送添加好友請(qǐng)求的接口。
傳入的是添加好友記錄的發(fā)送方——用戶的Id,以及記錄的接收方——想要添加的朋友的名稱。

【0】首先判斷傳入?yún)?shù)不為空。
【1】然后判斷前置條件,若為成功則通過(guò)userService的sendFriendRequest方法發(fā)送好友請(qǐng)求,否則返回失敗。

    /**
     * @Description: 發(fā)送添加好友的請(qǐng)求
     */
    @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. 搜索的用戶如果不存在,返回[無(wú)此用戶]
        // 前置條件 - 2. 搜索賬號(hào)是你自己,返回[不能添加自己]
        // 前置條件 - 3. 搜索的朋友已經(jīng)是你的好友,返回[該用戶已經(jīng)是你的好友]
        // 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();
    }
最終實(shí)現(xiàn)效果

接受添加好友申請(qǐng)的接口

在service中定義查詢好友請(qǐng)求列表的queryFriendRequestList方法。

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



在controller中定義接受添加好友請(qǐng)求的接口queryFriendRequests。

    /**
     * @Description: 發(fā)送添加好友的請(qǐng)求
     */
    @PostMapping("/queryFriendRequests")
    public IMoocJSONResult queryFriendRequests(String userId) {
        
        // 0. 判斷不能為空
        if (StringUtils.isBlank(userId)) {
            return IMoocJSONResult.errorMsg("");
        }
        
        // 1. 查詢用戶接受到的朋友申請(qǐng)
        return IMoocJSONResult.ok(userService.queryFriendRequestList(userId));
    }
    
最終實(shí)現(xiàn)效果

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73296.html

相關(guān)文章

  • Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App詳解(四)

    Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目介紹。Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目github鏈接。本章完整代碼鏈接。 本章內(nèi)容 (1) 查詢好友列表的接口 (2)通過(guò)或忽略好友請(qǐng)求的接口 (3)添加好友功能展示 查詢好友列表的接口 /** * @Description: 查詢我的好友列表 ...

    why_rookie 評(píng)論0 收藏0
  • Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App詳解(二)

    摘要:實(shí)現(xiàn)聊天,項(xiàng)目介紹。若該用戶不存在則記性注冊(cè),根據(jù)前端傳入的信息構(gòu)建對(duì)象,通過(guò)的將其保存入數(shù)據(jù)庫(kù)中。注意密碼需要使用工具類進(jìn)行加密后再保存到數(shù)據(jù)庫(kù)中。對(duì)返回的路徑進(jìn)行切割后得到縮略圖的路徑。通過(guò)的方法將二維碼圖片上傳到文件服務(wù)器中。 Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天App,項(xiàng)目介紹。Netty+SpringBoot+FastDFS+Html5實(shí)現(xiàn)聊天...

    SnaiLiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<