# 2025-chatchat **Repository Path**: hyl19/2025-oa ## Basic Information - **Project Name**: 2025-chatchat - **Description**: 企业微信plus,简历项目一,springboot2.7.5 + vue - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-05 - **Last Updated**: 2025-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 chatchat -- web群聊与任务发布应用,可以进行有非常详细日志记录,与定时发布的聊天系统 由liyinghao个人前后端整体原创设计开发,设定为**java简历项目一**,做高质量java项目 注意:本文档为后端文档,前端文档为chat-frontEnd.md 同样为我本人编写 # 技术栈 本项目为单体前后端分离架构 后端核心为SpringBoot 前端核心为VUE3 | 核心技术栈 | 版本 | | --------------- | ------ | | jdk | 8 | | spring-boot | 2.7.5 | | spring-security | 5.7 | | mybatis-plus | 0.9.1 | | knife4j | 4.4.0 | | hutool | 5.8.16 | | lombok | 默认 | | ip2region | 2.7.0 | # 项目启动 1. 使用maven依赖管理,下载完固定依赖 2. 检查数据库配置,确认端口,mysql默认为chatchat,redis使用0号库 3. 使用springboot内置sql.init初始化,无需手动创建数据表 ## 测试数据 在 resources --> sql --> data.sql # maven模块分析 主要分为三个模块 1. chatchat-admin 主模块,包括MVC,配置类和前端封装的param 2. chatchat-common 通用实体类,VO,DTO,工具类包 3. chatchat-security 安全包,拦截器,校验器,SpringSecurity各种配置 # 业务逻辑 本项目使用knife4j,遵守openAPI2.0(swagger)规范,可以导出接口文档,不在本文档中分析api地址和json类型 ## 数据安全 #### 数据库事项 1. 数据库用户唯一(token验证需要根据用户名查询用户的详细信息) 1. 群组id自增长,从10000000(一千万) 开始,用于和普通用户区分 ## 用户登录注册 ## 发送消息 ### 发送消息流程 1. 前端访问/message/send_message 路径提交消息 2. 通过MessageService.send方法,根据jwt获取用户id和消息 3. 判断发送的消息是群组还是个人 4. 构建个人消息 1. 先判断这个人是不是我的联系人 2. 构建消息 3. 查找消息列表(chatList)中是否存在 存在更新最新消息 不存在创建 4. 保存消息到消息表 5. ### 本地回显问题 当用户使用http向后端传递传递发送信息并验证成功后,后端websocket同时向发送者和接收者发送信息,发送方接收websocket信息完成回显 具体代码 ```java cc.liyinghao.service; public void sendMsgToUser(Object msg, String userId, String targetId) { Channel channel = Online_User.get(userId); if (channel != null) { sendMsg(channel, msg, WsContentType.Msg); } channel = Online_User.get(targetId); if (channel != null) { sendMsg(channel, msg, WsContentType.Msg); } } ``` ## 联系人 ## 文件上传 ### 用户头像上传 接口详情 ```java @PostMapping("/change_avatar") public Result changeAvatar(@RequestParam("file") MultipartFile multipartFile) throws IOException ``` # 重要变更 ## socket库更新 修改时间:2025/3/18 被替换库:spring-boot-starter-websocket 替换库:Netty 替换原因:经过考察后,使用Netty可以显著的提升并发量,并且为websocket的常见解决方案,并且增加的代码复杂度在接受范围之内 ## token claims添加id 修改时间:2025/3/25 旧claims中只包含用户名,添加id到Claims中,用户名依旧保留 ## 部分constant替换为枚举 修改时间:2025/3/29 替换对象:MessageType,MessageSource,TextContentType,UserType,WsContentType 替换原因:使用枚举类,更加简洁,分包明确且语义化 ## (数据库)sys_user头像字段修改 修改时间:2025/4/8 修改原因:旧字段为 ip+端口+文件名 非常不灵活 修改为纯文件名, ip+端口+文件名写在配置文件中 ## (数据库)新增表 ## 头像显示路径改变 修改时间:2025/4/8 原路径举例:ip+端口+/33.jpg 修改为:ip+端口+/static/33.jpg # FAQ 和常见问题排查