Netty+SpringBoot+FastDFS+Html5实现聊天App,项目介绍。
Netty+SpringBoot+FastDFS+Html5实现聊天App,项目github连接。
本章完整代码连接。
本节主要讲解聊天App PigChat中关于好友申请的发送与接受。前端
包含如下内容:
git
定义枚举类型 SearchFriendsStatusEnum,表示添加好友的前置状态github
SUCCESS(0, "OK"), USER_NOT_EXIST(1, "无此用户..."), NOT_YOURSELF(2, "不能添加你本身..."), ALREADY_FRIENDS(3, "该用户已是你的好友...");
在service中定义搜索朋友的前置条件判断的方法preconditionSearchFriends。数据库
传入的是用户的Id以及搜索的用户的名称。segmentfault
【1】首先根据搜索的用户的名称查找是否存在这个用户。
【2】若是搜索的用户不存在,则返回[无此用户]。
【3】若是搜索的用户是你本身,则返回[不能添加本身]。
【4】若是搜索的用户已是你的好友,则返回[该用户已是你的好友]。
【5】不然返回成功。app
@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,以及要搜索的用户的名字。ide
【0】首先判断传入的参数是否为空。
【1】经过userService的preconditionSearchFriends方法获得前置条件。
【2】若是搜索前置条件为成功,则向前端返回搜索用户的信息。
【3】不然搜索失败。spa
/** * @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,以及记录的接收方——想要添加的朋友的名称。code
【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(); }
在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)); }