基于html的聊天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();

}

最终实现效果

77106366f3c155148845e3bf29e53c1d.png

接受添加好友申请的接口

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

@Transactional(propagation = Propagation.SUPPORTS)

@Override

public List 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));

}

最终实现效果

0cef36e7dc0abd34cfe88c975b127513.png

【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于springboot的在线聊天系统源码+项目说明.zip # Huxin-Project huxin项目是一套聊天系统,包括前台手机界面及后台分布式系统,基于SpringBoot+Netty+MUI+H5Plus+Nginx+FastDFS分布式文件系统搭建的聊天系统。 前端聊天系统包含首页门户登录注册、互信、通讯录、发现、我等模块,添加了扫一扫,朋友圈等功能。 后台管理系统主要实现实时聊天功能。 # huxin ## 说明 > 基于SpringBoot+Netty+MUI+H5Plus+Nginx+FastDFS分布式文件系统搭建的聊天系统,前端聊天系统包含首页门户登录注册、互信、通讯录、发现、我等模块,添加了扫一扫,朋友圈等功能。 后台通信系统主要实现实时聊天功能。 ## 前言 `huxin`项目致力于打造一个完整的聊天系统,采用现阶段流行技术实现。 ## 项目介绍 `huxin`项目是一套聊天系统,包括前台门户系统及后台通信系统,基于SpringBoot+Netty+MUI+H5Plus+Nginx+FastDFS实现。 前台聊天系统包含首页门户登录注册、互信、通讯录、发现、我等模块,添加了扫一扫,朋友圈等功能等模块。 后台通信系统主要实现实时聊天功能。 ### 组织结构 ``` lua huxin ├── huyan-huxin- -- 前端聊天系统接口 ├── huyan-huxin-mybatis -- 基于后台数据层代码生成接口 ├── huyan-huxin-netty -- 后台聊天系统接口 └── huyan-huxin-hello -- 基于聊天功能简单网络编程实现 ``` ### 技术选型 #### 后端技术 技术 | 说明 | 官网 ----|----|---- Spring Boot | 容器+MVC框架 | https://spring.io/projects/spring-boot MyBatis | ORM框架 | http://www.mybatis.org/mybatis-3/zh/index.html MyBatisGenerator | 数据层代码生成 | http://www.mybatis.org/generator/index.html HikariCP | 数据库连接池 | https://github.com/brettwooldridge/HikariCP FastDFS | 对象存储 | https://sourceforge.net/projects/fastdfs/ Nginx | 反向代理服务器 | http://nginx.org/ Netty | 网络编程框架 | https://netty.io/index.html Maven | 项目对象模型 | http://maven.apache.org/ #### 前端技术 技术 | 说明 | 官网 ----|----|---- H5plus | 用于调用手机端功能 | http://www.html5plus.org/ MUI | 原生手机端页面框架 | http://dev.dcloud.net.cn/mui/ #### 架构图 ##### 系统架构图 ![系统架构图](/document/mind/系统架构图.png) ##### 业务架构图 ![业务架构图](/document/mind/业务架构图.png) #### 开发进度 ## 环境搭建 ### 开发工具 工具 | 说明 | 官网 ----|----|---- Eclipse | 开发IDE | https://www.eclipse.org/ X-shell | Linux远程连接工具 | http://www.netsarang.com/download/software.html Navicat | 数据库连接工具 | http://www.formysql.com/xiazai.html Xmind | 思维导图设计工具 | https://www.xmind.net/ ### 开发环境 工具 | 版本号 | 下载 ----|----|---- JDK | 1.8 | https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值