zhibo/Zhibo/zhibo-h/直播IM系统开发指南.md

1627 lines
67 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 直播IM系统开发指南
> **版本**: v3.7 | **更新时间**: 2024年12月26日 | **维护状态**: 🟢 活跃开发中
## 📋 目录
- [项目概述](#项目概述)
- [系统架构](#系统架构)
- [核心模块](#核心模块)
- [开发任务清单](#开发任务清单)
- [技术实现要点](#技术实现要点)
- [部署配置](#部署配置)
- [测试要点](#测试要点)
- [常见问题](#常见问题)
- [开发进度](#开发进度)
---
## 📖 项目概述
### 目标
搭建一个支持 **1-5万在线用户** 的直播+社交IM系统单机部署
### 技术栈
- **后端框架**: Spring Boot
- **实时通信**: WebSocket (Netty)
- **数据库**: MySQL 8.0
- **缓存**: Redis 6.0
- **反向代理**: Nginx
- **开发语言**: Java 8+
### 核心场景
- ✅ 直播间实时弹幕(支持千人直播间)
- ✅ 用户一对一私聊
- ✅ 好友关系管理
- ✅ 礼物打赏(直播间+私聊)
- ✅ 多媒体消息(图片、语音、视频)
- ✅ 群组聊天(创建群组、成员管理、权限管理)
- ✅ 消息撤回2分钟内
- ✅ 消息转发(好友、群组、批量转发)
- ✅ 消息搜索(关键词、时间、类型)
- ✅ 消息表情回应(点赞、爱心等)
- ✅ 限流防刷(防止恶意刷屏)
- ✅ 语音/视频通话WebRTC实现**新增**
- ⚠️ 社交互动通知(部分完成)
- ⚠️ 敏感词过滤(后台管理已完成,前端应用待实现)
### 性能目标(单机)
| 指标 | 目标值 |
|------|--------|
| WebSocket连接数 | 5万+ |
| 消息吞吐量 | 5000条/秒 |
| 接口响应时间 (P99) | <100ms |
| 直播间弹幕延迟 | <200ms |
| 系统可用性 | 99%+ |
---
## 🏗️ 系统架构
### 整体架构图
```
客户端 (Android/iOS/Web)
Nginx (负载均衡 + WebSocket代理)
Spring Boot应用
├── WebSocket服务 (Netty)
├── HTTP API服务
├── 消息路由服务
└── 业务逻辑服务
数据层
├── MySQL (持久化存储)
├── Redis (缓存 + 在线状态 + 离线消息)
└── 文件存储 (本地/OSS)
```
---
## 🧩 核心模块
### 模块1用户认证模块 ✅
**功能清单**
- 用户注册/登录
- JWT Token生成与验证
- Token刷新机制
- 用户信息管理
**核心类**
- `LoginController` - 认证接口
- `JwtUtil` - JWT工具类
- `AuthService` - 认证业务逻辑
- `UserService` - 用户管理
---
### 模块2WebSocket连接管理模块 ✅
**功能清单**
- WebSocket连接建立
- 用户在线状态管理
- 心跳检测30秒间隔
- 断线重连处理
- 连接映射维护userId WebSocket Session
**核心类**
- `WebSocketConfig` - WebSocket配置
- `LiveChatHandler` - 直播间消息处理器
- `PrivateChatHandler` - 私聊消息处理器
- `HeartbeatScheduler` - 心跳检测定时任务
- `OnlineStatusService` - 在线状态服务
**关键流程**
| 事件 | 处理逻辑 |
|------|----------|
| 用户连接 | 保存连接 更新Redis在线状态 拉取离线消息 |
| 用户断开 | 移除连接 更新Redis状态 清理直播间在线列表 |
| 心跳超时 | 自动断开连接90秒超时 |
---
### 模块3消息路由模块 ✅
**功能清单**
- 单聊消息路由点对点
- 群聊消息广播直播间
- 消息分发逻辑
- 离线消息处理
- 登录验证WebSocket连接需要Token验证**2024-12-26新增**
**核心类**
- `MessageRouter` - 消息路由器内置在Handler中
- `MessageDispatcher` - 消息分发器内置在Handler中
- `LiveChatHandler` - 广播服务
- `OfflineMessageService` - 离线消息服务
- `WebSocketAuthInterceptor` - WebSocket登录验证拦截器 **2024-12-26新增**
**登录验证机制** **2024-12-26新增**
- 所有WebSocket连接都需要提供有效的Token
- Token可以通过查询参数传递`?token={token}`
- 未登录用户无法建立WebSocket连接
- 连接建立前会验证Token的有效性
- 验证失败会直接拒绝连接
**路由策略**
```
单聊消息:
验证用户登录状态 → 查询接收者在线状态
├── 在线 → 通过WebSocket直接推送
└── 离线 → 存入Redis离线消息队列
直播间消息:
验证用户登录状态 → 获取房间所有在线用户Redis Set
└── 批量异步推送(线程池处理)
```
**数据库表结构完善** **2024-12-26新增**
- LiveChat实体类添加逻辑删除字段is_deleted
- LiveChat实体类添加更新时间字段update_time
- LiveChat实体类添加消息类型字段message_type
- LiveChat实体类添加5个扩展字段ext_field1-5
- Conversation实体类添加5个扩展字段ext_field1-5
- PrivateMessage实体类添加更新时间和5个扩展字段
- GroupMessage实体类添加5个扩展字段
- GroupMember实体类添加5个扩展字段
- Group实体类添加5个扩展字段
- 所有实体类使用@TableLogic实现逻辑删除
- 所有实体类使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
**扩展字段说明**
- ext_field1: 字符串类型用于存储标签分类等信息
- ext_field2: 字符串或整数类型用于存储备注等级等信息
- ext_field3: 字符串或整数类型用于存储优先级标签等信息
- ext_field4: 长整型用于存储关联数据ID
- ext_field5: 文本类型用于存储JSON格式的扩展数据
---
### 模块4消息存储模块 ✅
**功能清单**
- 消息持久化MySQL
- 消息缓存Redis7天TTL
- 历史消息查询
- 离线消息队列
- 消息已读状态
**核心类**
- `LiveChatService` - 消息业务逻辑
- `LiveChatDao` - 消息数据访问
- `OfflineMessageService` - 消息缓存服务
- `ConversationService` - 会话管理
**存储策略**
| 存储层 | 用途 | 策略 |
|--------|------|------|
| MySQL | 持久化存储 | 所有消息先存MySQL |
| Redis | 热点缓存 | 7天TTL加速查询 |
| Redis List | 离线消息 | 最多100条7天过期 |
| 分页查询 | 历史消息 | 按时间倒序20条/ |
---
### 模块5好友关系模块 ✅ (已完成)
**功能**
- 添加好友发送申请)✅
- 处理好友申请同意/拒绝)✅
- 删除好友 **使用逻辑删除**
- 好友列表查询
- 用户搜索
- 好友在线状态
- 更新好友备注
- 获取未读请求数量
**登录验证:**
- 所有接口都需要用户登录后才能访问
- 由FrontTokenInterceptor拦截器统一处理
- 未登录用户访问会返回401 UNAUTHORIZED错误
- 所有方法都通过userService.getUserId()获取当前登录用户ID
**已实现的类:**
- **实体类Entity**
- `Friend` - 好友关系实体支持JPA自动建表)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `FriendRequest` - 好友请求实体支持JPA自动建表)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- **DAO层Mapper**
- `FriendDao` - 好友关系Mapper接口
- `FriendRequestDao` - 好友请求Mapper接口
- `FriendDao.xml` - MyBatis映射文件
- `FriendRequestDao.xml` - MyBatis映射文件
- **Service层**
- `FriendService` - 好友关系服务接口
- `FriendServiceImpl` - 好友关系服务实现
- 删除好友使用逻辑删除@TableLogic自动处理
- `FriendRequestService` - 好友请求服务接口
- `FriendRequestServiceImpl` - 好友请求服务实现
- `FriendNotificationService` - 好友通知服务接口
- `FriendNotificationServiceImpl` - 好友通知服务实现
- **Controller层**
- `FriendController` - 好友接口已重构为标准三层架构)✅
- 搜索用户 (GET /api/front/users/search) **需要登录**
- 发送好友请求 (POST /api/front/friends/request) **需要登录**
- 获取好友请求列表 (GET /api/front/friends/requests) **需要登录**
- 处理好友请求 (POST /api/front/friends/requests/{requestId}/handle) **需要登录**
- 获取好友列表 (GET /api/front/friends) **需要登录**
- 删除好友 (DELETE /api/front/friends/{friendId}) **需要登录,使用逻辑删除**
- 更新好友备注 (PUT /api/front/friends/{friendId}/remark) **需要登录**
- 获取未读请求数量 (GET /api/front/friends/requests/unread-count) **需要登录**
** 已完成改进**
- 创建了完整的Service层FriendServiceFriendRequestServiceFriendNotificationService
- 重构Controller移除JdbcTemplate改用Service层
- 使用MyBatis-Plus进行数据访问
- 实现标准三层架构Controller Service DAO
- 添加JPA注解支持自动建表
- 集成WebSocket实时通知功能
- 完善事务管理
- 添加详细的日志记录和异常处理
- 所有接口都需要登录验证FrontTokenInterceptor拦截器
- 删除功能使用逻辑删除@TableLogic
- 添加更新时间字段@UpdateTimestamp自动管理
- 预留5个扩展字段ext_field1-5
- 不创建外键保持表独立性
**扩展字段说明:**
**Friend实体类扩展字段**
- ext_field1: VARCHAR(100) - 好友来源/标签通过搜索添加通过推荐添加等
- ext_field2: INT - 分组ID/优先级用于好友分组功能
- ext_field3: VARCHAR(50) - 特殊标记/权限特别关注黑名单等
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**FriendRequest实体类扩展字段**
- ext_field1: VARCHAR(100) - 请求来源/渠道扫码添加名片分享等
- ext_field2: INT - 请求类型/优先级用于区分不同类型的好友请求
- ext_field3: VARCHAR(200) - 拒绝原因/备注记录拒绝好友请求的原因
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**业务流程:**
- 发送申请 保存申请记录 推送通知给对方
- 同意申请 双向添加好友关系 推送通知 创建会话
- 删除好友 逻辑删除好友关系is_deleted=1 推送通知 保留历史消息
**数据库表:**
- `eb_friend` - 好友关系表 ✅(支持JPA自动创建
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_friend_request` - 好友申请表 ✅(支持JPA自动创建
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**技术亮点:**
- 标准三层架构设计
- 完整的事务管理
- WebSocket实时通知
- 双向好友关系自动维护
- 支持JPA自动建表ddl-auto: update
- 使用逻辑删除保护数据安全
- 预留扩展字段便于功能扩展
- 所有接口都需要登录验证
**相关文档:**
- 详细开发文档`好友关系模块开发文档.md`
- 完善总结`好友模块完善总结.md`
- 快速参考`好友模块快速参考.md`
- 测试清单`好友模块测试清单.md`
---
### 模块6直播间管理模块 ✅ (已完成 - 95%)
**功能**
- 进入直播间
- 离开直播间
- 直播间在线用户列表
- 直播间弹幕发送
- 直播间人数统计
- 限流防刷 **2024-12-26完成**
- 敏感词过滤 **待实现 - 高优先级**
**已实现的类:**
- `LiveRoomController` - 直播间接口
- `LiveRoomService` - 直播间业务逻辑
- `RoomMemberService` - 房间成员管理 (内置在Handler中)
- `BarrageService` - 弹幕服务 (LiveChatService)
**关键功能:**
- 进入房间加入Redis Set广播进入消息返回房间信息
- 发送弹幕频率限制1秒1条)✅、敏感词过滤 ❌、广播给所有人
- 离开房间从Redis Set移除广播离开消息
---
### 模块7礼物打赏模块 ✅ (已完成 - 2024-12-26)
**功能**
- 礼物列表管理
- 直播间送礼
- 私聊送礼
- 礼物记录查询
- 余额扣除与收益增加
**登录验证:**
- GET /api/front/gift/list - 获取礼物列表不需要登录
- GET /api/front/gift/balance - 获取用户余额需要登录)✅
- POST /api/front/gift/send - 赠送礼物需要登录)✅
- GET /api/front/gift/recharge/options - 获取充值选项不需要登录
- POST /api/front/gift/recharge/create - 创建充值订单需要登录)✅
- 所有需要登录的接口都会检查用户登录状态
- 未登录用户访问会返回"用户未登录请先登录"提示
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `Gift` - 礼物实体eb_gift)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `GiftRecord` - 礼物打赏记录实体eb_gift_reward_record)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `GiftDetail` - 送礼物明细实体eb_gift_detail)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `RechargeOption` - 充值选项实体eb_gift_quantity)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- **DAO层Mapper**
- `GiftDao` - 礼物Mapper接口
- `GiftRecordDao` - 礼物记录Mapper接口
- `GiftDetailDao` - 礼物明细Mapper接口
- `RechargeOptionDao` - 充值选项Mapper接口
- **Service层**
- `GiftService` - 礼物服务接口
- `GiftServiceImpl` - 礼物服务实现
- `GiftRecordService` - 礼物记录服务接口
- `GiftRecordServiceImpl` - 礼物记录服务实现
- `RechargeOptionService` - 充值选项服务接口
- `RechargeOptionServiceImpl` - 充值选项服务实现
- **Controller层**
- `GiftController` - 礼物接口前端)✅
- 添加详细的登录验证说明注释
- 所有需要登录的接口都检查用户登录状态
- 未登录返回友好的提示信息
**业务流程:**
- 验证余额 扣除金币 增加收益 保存记录 生成账单 返回结果
**数据库表:**支持JPA自动创建
- `eb_gift` - 礼物表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_gift_reward_record` - 礼物打赏记录表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_gift_detail` - 送礼物明细表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_gift_quantity` - 礼物数量列表充值选项)✅
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**API接口**
- `GET /api/front/gift/list` - 获取礼物列表 ✅(不需要登录
- `GET /api/front/gift/balance` - 获取用户余额 ✅(需要登录
- `POST /api/front/gift/send` - 赠送礼物 ✅(需要登录
- `GET /api/front/gift/recharge/options` - 获取充值选项 ✅(不需要登录
- `POST /api/front/gift/recharge/create` - 创建充值订单 ✅(需要登录
**扩展字段说明:**
**Gift实体类扩展字段**
- ext_field1: VARCHAR(100) - 礼物分类/标签热门礼物节日礼物等
- ext_field2: INT - 礼物等级/排序用于礼物排序和分级
- ext_field3: VARCHAR(50) - 特殊标记/活动标识限时礼物活动礼物等
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**GiftRecord实体类扩展字段**
- ext_field1: VARCHAR(100) - 打赏场景/来源直播间打赏私聊打赏等
- ext_field2: INT - 直播间ID/会话ID记录打赏发生的场景
- ext_field3: VARCHAR(50) - 活动标识/特殊标记活动期间打赏首次打赏等
- ext_field4: BIGINT - 关联订单ID用于关联支付订单
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**GiftDetail实体类扩展字段**
- ext_field1: VARCHAR(100) - 送礼场景/来源直播间私聊等
- ext_field2: INT - 直播间ID/会话ID记录送礼发生的场景
- ext_field3: VARCHAR(50) - 活动标识/特殊标记活动期间送礼等
- ext_field4: BIGINT - 关联订单ID用于关联支付订单
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**RechargeOption实体类扩展字段**
- ext_field1: VARCHAR(100) - 充值类型/分类普通充值活动充值等
- ext_field2: INT - 赠送比例/优惠等级充值100送10
- ext_field3: VARCHAR(50) - 活动标识/特殊标记限时优惠首充优惠等
- ext_field4: BIGINT - 关联活动ID用于关联营销活动
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用JPA注解支持自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问无SQL语句
- 完整的事务管理@Transactional
- 完善的余额和账单管理
- 支持直播间和私聊场景
- 使用逻辑删除保护数据安全
- 预留扩展字段便于功能扩展
- 所有需要登录的接口都有验证机制
** 已完成改进2024-12-26**
- 为所有实体类添加JPA注解@Entity、@Table、@Column等
- 添加数据库索引定义@Index
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 完善字段注释columnDefinition
- 确保所有数据访问通过MyBatis-Plus完成无SQL语句
- 验证代码无编译错误
- 为所有实体类添加逻辑删除字段is_deleted
- 为所有实体类添加更新时间字段update_time
- 为所有实体类添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 不创建外键保持表独立性
- 为Controller添加详细的登录验证说明
- 检查并标注哪些接口需要登录
- 优化未登录提示信息
**文档:**
- 详细开发文档`Zhibo/zhibo-h/礼物打赏模块开发说明.md`
- 快速开始指南`Zhibo/zhibo-h/礼物打赏模块快速开始.md`
- 部署清单`Zhibo/礼物打赏模块部署清单.md`
---
### 模块8多媒体消息模块 ✅ (已完成)
**功能**
- 图片上传与发送
- 语音上传与发送
- 视频上传与发送
- 文件存储本地/OSS)✅
- 缩略图生成
**已实现的类:**
- `UploadController` - 文件上传接口 (UserUploadController)
- `FileStorageService` - 文件存储服务
- `ImageService` - 图片处理压缩缩略图)✅
- `MediaMessageService` - 多媒体消息服务
**处理流程:**
- 客户端先上传文件 返回URL 发送消息时带上URL和元信息
---
### 模块9消息已读回执模块 ✅ (已完成 - 2024-12-26)
**功能**
- 标记消息已读
- 未读消息统计
- 已读状态推送
- 会话未读数更新
**登录验证:**
- 所有接口都需要用户登录后才能访问
- 由FrontTokenInterceptor拦截器统一处理
- 未登录用户访问会返回401 UNAUTHORIZED错误
- 所有方法都通过userService.getUserIdException()获取当前登录用户ID
- 自动验证用户是否有权限操作会话和消息
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `Conversation` - 会话实体eb_conversation)✅
- 添加逻辑删除字段user1_deleteduser2_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- 支持双向软删除用户1和用户2可分别删除
- `PrivateMessage` - 私信消息实体eb_private_message)✅
- 添加逻辑删除字段sender_deletedreceiver_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- 支持双向软删除发送者和接收者可分别删除
- **Service层**
- `ConversationService` - 会话服务接口
- `ConversationServiceImpl` - 会话服务实现包含已读回执逻辑)✅
- 删除会话使用逻辑删除双向软删除
- 删除消息使用逻辑删除双向软删除
- **Controller层**
- `ConversationController` - 会话接口
- 标记会话已读 (POST /api/front/conversations/{id}/read) **需要登录**
- 获取会话列表 (GET /api/front/conversations) **需要登录**
- 搜索会话 (GET /api/front/conversations/search) **需要登录**
- 获取或创建会话 (POST /api/front/conversations/with/{otherUserId}) **需要登录**
- 获取消息列表 (GET /api/front/conversations/{id}/messages) **需要登录**
- 发送消息 (POST /api/front/conversations/{id}/messages) **需要登录**
- 删除会话 (DELETE /api/front/conversations/{id}) **需要登录,使用逻辑删除**
- 删除消息 (DELETE /api/front/conversations/messages/{messageId}) **需要登录,使用逻辑删除**
- **WebSocket处理器**
- `PrivateChatHandler` - 私聊WebSocket处理器
- 实时推送已读回执
- 连接时自动标记已读
**实现逻辑:**
- 用户查看消息 批量更新已读状态 推送已读回执给发送方 更新会话未读数
**数据库表:**支持JPA自动创建
- `eb_conversation` - 会话表
- 包含逻辑删除字段user1_deleteduser2_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_private_message` - 私信消息表
- 包含逻辑删除字段sender_deletedreceiver_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**扩展字段说明:**
**Conversation实体类扩展字段**
- ext_field1: VARCHAR(100) - 会话标签重要工作朋友等
- ext_field2: VARCHAR(200) - 会话备注
- ext_field3: INT - 会话置顶优先级用于会话排序
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**PrivateMessage实体类扩展字段**
- ext_field1: VARCHAR(50) - 消息来源mobilewebdesktop
- ext_field2: BIGINT - 引用消息ID用于消息回复功能
- ext_field3: VARCHAR(100) - 消息标签或分类
- ext_field4: BIGINT - 附件大小字节
- ext_field5: TEXT - JSON扩展数据图片尺寸视频时长等
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用JPA注解支持自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问无SQL语句
- 完整的事务管理@Transactional
- 添加数据库索引定义提升查询性能
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- WebSocket实时推送已读回执
- 支持双向软删除用户1和用户2可分别删除会话发送者和接收者可分别删除消息
- 支持静音功能
- 所有接口都需要登录验证
- 自动验证用户权限只能操作自己的会话和消息
- 预留扩展字段便于功能扩展
** 已完成改进2024-12-26**
- 为Conversation实体类添加完整的JPA注解
- 为PrivateMessage实体类添加完整的JPA注解
- 添加数据库索引定义idx_user1_ididx_user2_ididx_conversation_id等
- 添加唯一索引idx_user1_user2防止重复会话
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 完善字段注释和约束columnDefinition
- 验证代码无编译错误
- 确认所有数据访问通过MyBatis-Plus完成无SQL语句
- 所有接口都需要登录验证
- 删除功能使用逻辑删除双向软删除
- 添加更新时间字段@UpdateTimestamp自动管理
- 预留5个扩展字段ext_field1-5
- 不创建外键保持表独立性
---
### 模块10好友私聊消息模块 ✅ (已实现)
**功能**
- 好友之间发送文本消息
- 好友之间发送图片消息
- 好友之间发送语音消息
- 好友之间发送视频消息
- 消息已读状态
- 正在输入提示
- 离线消息推送
**已实现的类:**
- `PrivateChatHandler` - 私聊WebSocket处理器
- `ConversationService` - 会话服务
- `ConversationController` - 会话接口
- `OfflineMessageService` - 离线消息服务
**核心功能:**
- 通过WebSocket实现实时消息推送
- 支持多设备同时在线
- 自动保存离线消息
- 消息已读回执
- 正在输入状态同步
**WebSocket路径** `/ws/chat/{conversationId}?userId={userId}`
**消息类型:**
- `chat` - 聊天消息
- `read` - 已读通知
- `typing` - 正在输入
- `new_message` - 新消息通知
---
### 模块11群组聊天模块 ✅ (已完成 - 2024-12-26)
**功能**
- 创建群组
- 邀请成员加入群组
- 群组消息发送
- 群组消息广播
- 群组成员管理
- 群主/管理员权限
- 群公告
- @提醒功能
**登录验证:**
- 所有接口都需要用户登录后才能访问
- 由FrontTokenInterceptor拦截器统一处理
- 未登录用户访问会返回401 UNAUTHORIZED错误
- 所有方法都通过userService.getUserId()获取当前登录用户ID
- 自动验证用户是否有权限操作群组群主管理员权限
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `Group` - 群组实体eb_group)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `GroupMember` - 群组成员实体eb_group_member)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `GroupMessage` - 群组消息实体eb_group_message)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- **DAO层Mapper**
- `GroupDao` - 群组Mapper接口
- `GroupMemberDao` - 群组成员Mapper接口
- `GroupMessageDao` - 群组消息Mapper接口
- **Service层**
- `GroupService` - 群组服务接口
- `GroupServiceImpl` - 群组服务实现
- 解散群组使用逻辑删除@TableLogic自动处理
- `GroupMemberService` - 群组成员服务接口
- `GroupMemberServiceImpl` - 群组成员服务实现
- 移除成员使用逻辑删除@TableLogic自动处理
- 退出群组使用逻辑删除@TableLogic自动处理
- `GroupMessageService` - 群组消息服务接口
- `GroupMessageServiceImpl` - 群组消息服务实现
- 删除消息使用逻辑删除@TableLogic自动处理
- **Controller层**
- `GroupController` - 群组接口
- 创建群组 (POST /api/front/groups/create) **需要登录**
- 更新群组信息 (PUT /api/front/groups/{groupId}) **需要登录 + 群主/管理员权限**
- 解散群组 (DELETE /api/front/groups/{groupId}) **需要登录 + 群主权限,使用逻辑删除**
- 获取用户的群组列表 (GET /api/front/groups/list) **需要登录**
- 获取群组详情 (GET /api/front/groups/{groupId}) **需要登录 + 成员权限**
- 更新群公告 (PUT /api/front/groups/{groupId}/announcement) **需要登录 + 群主/管理员权限**
- 设置全员禁言 (PUT /api/front/groups/{groupId}/mute-all) **需要登录 + 群主/管理员权限**
- 邀请成员加入群组 (POST /api/front/groups/{groupId}/members/invite) **需要登录 + 成员权限**
- 移除群成员 (DELETE /api/front/groups/{groupId}/members/{userId}) **需要登录 + 群主/管理员权限,使用逻辑删除**
- 退出群组 (POST /api/front/groups/{groupId}/quit) **需要登录,使用逻辑删除**
- 获取群成员列表 (GET /api/front/groups/{groupId}/members) **需要登录 + 成员权限**
- 设置管理员 (PUT /api/front/groups/{groupId}/members/{userId}/admin) **需要登录 + 群主权限**
- 禁言成员 (PUT /api/front/groups/{groupId}/members/{userId}/mute) **需要登录 + 群主/管理员权限**
- 取消禁言 (PUT /api/front/groups/{groupId}/members/{userId}/unmute) **需要登录 + 群主/管理员权限**
- 更新群昵称 (PUT /api/front/groups/{groupId}/members/nickname) **需要登录**
- `GroupMessageController` - 群组消息接口
- 发送群组消息 (POST /api/front/groups/{groupId}/messages) **需要登录 + 成员权限**
- 获取群组消息列表 (GET /api/front/groups/{groupId}/messages) **需要登录 + 成员权限**
- 撤回群组消息 (POST /api/front/groups/messages/{messageId}/recall) **需要登录 + 发送者权限**
- 删除群组消息 (DELETE /api/front/groups/messages/{messageId}) **需要登录 + 发送者权限,使用逻辑删除**
**业务流程:**
- 创建群组 添加群主为成员 邀请其他成员
- 发送消息 检查权限和禁言状态 保存消息 广播给所有成员
- 管理员权限 设置管理员禁言成员修改群公告
**数据库表:**支持JPA自动创建
- `eb_group` - 群组表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_group_member` - 群成员表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_group_message` - 群消息表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**扩展字段说明:**
**Group实体类扩展字段**
- ext_field1: VARCHAR(50) - 群组分类工作学习娱乐等
- ext_field2: VARCHAR(200) - 群组标签
- ext_field3: INT - 群组等级或积分
- ext_field4: BIGINT - 关联数据ID关联的直播间ID
- ext_field5: TEXT - JSON扩展数据群规则入群问题等
**GroupMember实体类扩展字段**
- ext_field1: VARCHAR(100) - 成员标签活跃潜水等
- ext_field2: INT - 成员等级或积分
- ext_field3: VARCHAR(200) - 自定义备注
- ext_field4: BIGINT - 关联数据ID
- ext_field5: TEXT - JSON扩展数据
**GroupMessage实体类扩展字段**
- ext_field1: VARCHAR(50) - 消息来源mobilewebdesktop
- ext_field2: BIGINT - 引用消息ID用于消息回复功能
- ext_field3: VARCHAR(100) - 消息优先级或标签
- ext_field4: BIGINT - 附件大小字节
- ext_field5: TEXT - JSON扩展数据
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用JPA注解支持自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问无SQL语句
- 完整的事务管理@Transactional
- 支持逻辑删除@TableLogic
- 完善的权限管理群主管理员普通成员
- 支持@提醒功能和全员禁言
- 所有接口都需要登录验证
- 所有删除操作都使用逻辑删除
- 预留扩展字段便于功能扩展
** 已完成改进2024-12-26**
- 创建完整的实体类GroupGroupMemberGroupMessage
- 添加JPA注解支持自动建表
- 添加数据库索引定义提升查询性能
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 完善字段注释和约束columnDefinition
- 实现完整的Service层业务逻辑
- 实现Controller层接口
- 验证代码无编译错误
- 所有接口都需要登录验证
- 所有删除操作都使用逻辑删除@TableLogic自动处理
- 添加更新时间字段@UpdateTimestamp自动管理
- 预留5个扩展字段ext_field1-5
- 不创建外键保持表独立性
- 为Controller添加详细的登录验证说明注释
---
### 模块12消息撤回模块 ✅ (已完成 - 2024-12-26)
**功能**
- 撤回私聊消息2分钟内)✅
- 撤回群组消息2分钟内)✅
- 推送撤回通知
- 更新消息状态
- 检查撤回权限
**已实现的类:**
- **实体类扩展**
- `PrivateMessage` - 添加撤回相关字段is_recalledrecall_time)✅
- `GroupMessage` - 包含撤回相关字段
- **Service层**
- `MessageRecallService` - 消息撤回服务接口
- `MessageRecallServiceImpl` - 消息撤回服务实现
- **Controller层**
- `MessageRecallController` - 消息撤回接口
**撤回逻辑:**
- 验证权限只能撤回自己的消息)✅
- 验证时间2分钟内)✅
- 更新消息状态is_recalled = true
- 记录撤回时间recall_time)✅
- 推送撤回通知待WebSocket集成)⚠
**API接口**
- `POST /api/front/messages/private/{messageId}/recall` - 撤回私聊消息
- `POST /api/front/messages/group/{messageId}/recall` - 撤回群组消息
- `GET /api/front/messages/{messageId}/can-recall` - 检查是否可以撤回
**技术亮点:**
- 标准三层架构设计
- 完整的权限验证
- 时间限制检查2分钟
- 支持私聊和群聊消息撤回
- 完善的异常处理
** 已完成改进2024-12-26**
- 为PrivateMessage添加撤回相关字段
- 实现MessageRecallService服务层
- 实现MessageRecallController接口层
- 完善权限和时间验证逻辑
- 验证代码无编译错误
**优先级:** - 非核心功能
**完成时间:** 2024-12-26
---
### 模块13消息转发模块 ✅ (已完成 - 2024-12-26)
**功能**
- 转发消息给好友
- 转发消息到群组
- 批量转发
- 转发历史记录
**登录验证:**
- 所有接口都需要用户登录后才能访问
- 由FrontTokenInterceptor拦截器统一处理
- 未登录用户访问会返回401 UNAUTHORIZED错误
- 所有方法都通过userService.getUserId()获取当前登录用户ID
- 自动验证用户是否有权限转发消息必须是消息的发送者或接收者
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `MessageForward` - 消息转发记录实体eb_message_forward)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- **DAO层Mapper**
- `MessageForwardDao` - 消息转发Mapper接口
- **Service层**
- `MessageForwardService` - 消息转发服务接口
- `MessageForwardServiceImpl` - 消息转发服务实现
- 删除转发记录使用逻辑删除@TableLogic自动处理
- **Controller层**
- `MessageForwardController` - 消息转发接口
- 转发消息给好友 (POST /api/front/messages/forward/friend) **需要登录**
- 转发消息到群组 (POST /api/front/messages/forward/group) **需要登录**
- 批量转发消息 (POST /api/front/messages/forward/batch) **需要登录**
- 获取转发历史记录 (GET /api/front/messages/forward/history) **需要登录**
- 删除转发记录 (DELETE /api/front/messages/forward/{forwardId}) **需要登录,使用逻辑删除**
**业务流程:**
- 验证权限必须是消息的发送者或接收者)✅
- 验证好友关系或群组成员关系
- 获取原始消息内容
- 创建新消息带转发标记)✅
- 保存转发记录
- 支持批量转发
**数据库表:**支持JPA自动创建
- `eb_message_forward` - 消息转发记录表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**API接口**
- `POST /api/front/messages/forward/friend` - 转发消息给好友 **需要登录**
- `POST /api/front/messages/forward/group` - 转发消息到群组 **需要登录**
- `POST /api/front/messages/forward/batch` - 批量转发消息 **需要登录**
- `GET /api/front/messages/forward/history` - 获取转发历史记录 **需要登录**
- `DELETE /api/front/messages/forward/{forwardId}` - 删除转发记录 **需要登录,使用逻辑删除**
**扩展字段说明:**
**MessageForward实体类扩展字段**
- ext_field1: VARCHAR(100) - 转发来源/渠道从私聊转发从群聊转发等
- ext_field2: INT - 转发优先级/标记用于区分不同类型的转发
- ext_field3: VARCHAR(50) - 转发状态/类型普通转发紧急转发等
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用JPA注解支持自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问无SQL语句
- 完整的事务管理@Transactional
- 支持逻辑删除@TableLogic
- 完善的权限验证好友关系群组成员
- 支持批量转发提升用户体验
- 添加数据库索引定义提升查询性能
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 所有接口都需要登录验证
- 所有删除操作都使用逻辑删除
- 预留5个扩展字段便于功能扩展
** 已完成改进2024-12-26**
- 创建MessageForward实体类支持JPA自动建表
- 添加数据库索引定义idx_user_ididx_original_message_id等
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 完善字段注释和约束columnDefinition
- 实现完整的Service层业务逻辑
- 实现Controller层接口
- 验证代码无编译错误
- 扩展ConversationService添加getPrivateMessageById和sendMessage方法
- 为MessageForward实体类添加更新时间字段update_time
- 为MessageForward实体类添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 不创建外键保持表独立性
- 为Controller添加详细的登录验证说明注释
- 所有接口都需要登录验证
- 所有删除操作都使用逻辑删除
**优先级:** - 辅助功能
**完成时间:** 2024-12-26
---
### 模块14语音/视频通话模块 ✅ (已完成 - WebRTC实现 - 2024-12-26完善)
**功能**
- 一对一语音通话
- 一对一视频通话
- 通话邀请/接听/拒绝/取消
- 通话记录管理
- 通话状态管理
- 超时检测60秒)✅
- 忙线检测
**登录验证:**
- 所有接口都需要用户登录后才能访问
- 通过 userService.getInfo() 获取当前登录用户
- 未登录用户访问会返回"用户未登录请先登录"提示
- 所有方法都自动验证用户权限只能操作自己的通话
- 发起通话接听拒绝取消结束通话都需要登录验证
- 查看通话记录通话详情都需要登录验证
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `CallRecord` - 通话记录实体eb_call_record)✅
- 包含完整的通话信息通话双方类型状态时长等
- 支持双向软删除caller_deletedcallee_deleted
- 添加更新时间字段update_time@UpdateTimestamp自动管理
- 添加5个扩展字段ext_field1-5
- 添加数据库索引caller_idcallee_idcall_timestatus
- 不创建外键保持表独立性
- **DAO层Mapper**
- `CallRecordDao` - 通话记录Mapper接口
- **Service层**
- `CallService` - 通话服务接口
- `CallServiceImpl` - 通话服务实现
- 创建通话接听拒绝取消结束通话
- 通话状态管理callingringingconnectedended等
- 通话时长统计
- 忙线检测
- 超时处理
- 删除通话记录使用逻辑删除双向软删除
- **WebSocket处理器**
- `CallSignalingHandler` - WebRTC信令处理器
- 处理WebSocket连接管理
- 转发SDP Offer/Answer
- 转发ICE Candidate
- 通话状态同步
- 超时自动挂断60秒
- **Controller层**
- `CallController` - 通话接口
- 发起通话 (POST /api/front/call/initiate) **需要登录**
- 接听通话 (POST /api/front/call/accept/{callId}) **需要登录**
- 拒绝通话 (POST /api/front/call/reject/{callId}) **需要登录**
- 取消通话 (POST /api/front/call/cancel/{callId}) **需要登录**
- 结束通话 (POST /api/front/call/end/{callId}) **需要登录**
- 获取通话记录 (GET /api/front/call/history) **需要登录**
- 删除通话记录 (DELETE /api/front/call/record/{recordId}) **需要登录,使用逻辑删除**
- 获取未接来电数量 (GET /api/front/call/missed/count) **需要登录**
- 检查通话状态 (GET /api/front/call/status) **需要登录**
- 获取通话详情 (GET /api/front/call/detail/{callId}) **需要登录**
**技术方案:**
- 使用WebRTC实现音视频通话
- 使用WebSocket传输信令OfferAnswerICE Candidate)✅
- 令牌桶算法防止频繁呼叫
- 完整的状态机管理
**通话状态:**
- `calling` - 呼叫中
- `ringing` - 响铃中
- `connected` - 通话中
- `ended` - 已结束
- `missed` - 未接
- `rejected` - 已拒绝
- `cancelled` - 已取消
- `busy` - 忙线
**WebSocket信令协议**
- 连接地址`ws://your-domain/ws/call`
- 支持消息类型
- `register` - 注册用户
- `call_request` - 发起通话
- `call_accept` - 接听通话
- `call_reject` - 拒绝通话
- `call_cancel` - 取消通话
- `call_end` - 结束通话
- `offer` - WebRTC Offer
- `answer` - WebRTC Answer
- `ice-candidate` - ICE Candidate
**数据库表:**支持JPA自动创建
- `eb_call_record` - 通话记录表
- 包含双向软删除字段caller_deletedcallee_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 包含完整的通话信息和时长统计
- 添加数据库索引提升查询性能
- 不创建外键
**扩展字段说明:**
**CallRecord实体类扩展字段**
- ext_field1: VARCHAR(100) - 通话质量评分/标签优秀良好一般较差等
- ext_field2: INT - 网络质量/延迟毫秒用于记录通话质量
- ext_field3: VARCHAR(50) - 特殊标记/类型紧急通话会议通话客服通话等
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据如关联订单工单等
- ext_field5: TEXT - JSON扩展数据存储通话录音URL截图通话设备信息等
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用JPA注解支持自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问
- WebRTC P2P通话服务器仅转发信令
- 完整的状态机管理
- 超时自动挂断机制
- 忙线检测防止重复呼叫
- 支持双向软删除主叫和被叫可分别删除记录
- 完善的权限验证只能操作自己的通话
- 所有接口都需要登录验证
- 预留扩展字段便于功能扩展
** 已完成改进2024-12-26**
- 创建CallRecord实体类支持JPA自动建表
- 实现CallService服务层完整的通话业务逻辑
- 实现CallSignalingHandlerWebRTC信令处理
- 实现CallController接口层10个接口
- 添加数据库索引定义提升查询性能
- 实现超时检测和自动挂断
- 实现忙线检测
- 验证代码无编译错误
- 为CallRecord实体类添加更新时间字段update_time
- 为CallRecord实体类添加5个扩展字段ext_field1-5
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 删除通话记录使用逻辑删除双向软删除
- 不创建外键保持表独立性
- 为Controller添加详细的登录验证说明注释
- 所有接口都需要登录验证
- 优化未登录提示信息
**优先级:** - 高级功能
**完成时间:** 已实现2024-12-26完善
**相关文档:**
- 详细说明`语音视频通话模块说明.md`
---
### 模块15消息搜索模块 ✅ (已完成 - 2024-12-26)
**功能**
- 搜索聊天记录
- 按时间范围搜索
- 按消息类型搜索
- 搜索结果高亮 (前端实现)
**登录验证:**
- 所有接口都需要用户登录后才能访问
- 由FrontTokenInterceptor拦截器统一处理
- 未登录用户访问会返回401 UNAUTHORIZED错误
- 所有方法都通过userService.getUserId()获取当前登录用户ID
- 自动验证用户是否有权限搜索消息只能搜索自己相关的消息
**已实现的类:**
- **Service层**
- `MessageSearchService` - 消息搜索服务接口
- `MessageSearchServiceImpl` - 消息搜索服务实现
- **Controller层**
- `MessageSearchController` - 消息搜索接口
- 搜索私聊消息 (GET /api/front/messages/search/private) **需要登录**
- 搜索群组消息 (GET /api/front/messages/search/group) **需要登录**
- 在指定会话中搜索 (GET /api/front/messages/search/conversation/{conversationId}) **需要登录**
- 在指定群组中搜索 (GET /api/front/messages/search/group/{groupId}) **需要登录**
- 获取搜索历史 (GET /api/front/messages/search/history) **需要登录**
- 清除搜索历史 (DELETE /api/front/messages/search/history) **需要登录**
**业务流程:**
- 搜索私聊消息 验证用户权限 关键词模糊查询 按时间和类型过滤 返回分页结果
- 搜索群组消息 获取用户所在群组 关键词模糊查询 按时间和类型过滤 返回分页结果
- 在指定会话/群组中搜索 验证权限 精确搜索 返回结果
- 搜索历史管理 Redis存储 自动过期 支持清除
**数据库表:**
- 使用现有的 `eb_private_message` `eb_group_message`
- 两个表都已包含逻辑删除字段sender_deletedreceiver_deleted is_deleted
- 两个表都已包含更新时间字段update_time
- 两个表都已包含5个扩展字段ext_field1-5
- 不创建外键保持表独立性
**API接口**
- `GET /api/front/messages/search/private` - 搜索私聊消息 **需要登录**
- `GET /api/front/messages/search/group` - 搜索群组消息 **需要登录**
- `GET /api/front/messages/search/conversation/{conversationId}` - 在指定会话中搜索 **需要登录**
- `GET /api/front/messages/search/group/{groupId}` - 在指定群组中搜索 **需要登录**
- `GET /api/front/messages/search/history` - 获取搜索历史 **需要登录**
- `DELETE /api/front/messages/search/history` - 清除搜索历史 **需要登录**
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用MyBatis-Plus进行数据访问无SQL语句
- 使用LIKE模糊查询实现关键词搜索
- 支持按时间范围和消息类型过滤
- 使用Redis ZSet存储搜索历史按时间排序
- 自动保存搜索历史30天过期
- 完善的权限验证只能搜索自己相关的消息
- 排除已删除和已撤回的消息
- 支持分页查询提升性能
- 支持逻辑删除保护数据安全
- 所有接口都需要登录验证
** 已完成改进2024-12-26**
- 创建MessageSearchService服务接口
- 实现MessageSearchServiceImpl服务实现
- 实现MessageSearchController接口层
- 支持搜索私聊消息全局搜索
- 支持搜索群组消息全局搜索
- 支持在指定会话中搜索
- 支持在指定群组中搜索
- 支持按时间范围过滤
- 支持按消息类型过滤
- 实现搜索历史管理Redis存储
- 扩展GroupMemberService添加getUserGroupIds和isMember方法
- 验证所有代码无编译错误
- 完善权限验证和异常处理
- 排除已删除和已撤回的消息
- 为Controller添加详细的登录验证说明注释
- 确认所有接口都需要登录验证
- 确认使用现有实体类的逻辑删除和扩展字段
- 确认PrivateMessage和GroupMessage实体类包含完整的JPA注解
- 确认逻辑删除功能正常工作双向软删除和单一软删除
- 确认更新时间字段使用@UpdateTimestamp自动管理
- 确认预留5个扩展字段ext_field1-5
- 确认不创建外键保持表独立性
- 更新开发指南文档添加完整的登录验证和数据库说明
**技术方案:**
- 使用MySQL LIKE模糊查询适合单机部署
- 未来可升级为Elasticsearch全文搜索支持更大规模
**优先级:** - 提升用户体验
**完成时间:** 2024-12-26
**相关文档:**
- 完成总结`消息搜索模块完成总结.md`
- 快速参考`消息搜索模块快速参考.md`
---
### 模块16消息引用/回复模块 ⚠️ (数据库字段已预留)
**功能**
- 引用消息回复 (数据库字段已预留)
- 显示被引用的消息 (前端功能待实现)
- 点击引用跳转到原消息 (前端功能待实现)
**数据库支持:**
- `PrivateMessage.extField2` - 引用消息ID用于私聊消息回复
- `GroupMessage.extField2` - 引用消息ID用于群组消息回复
**需要实现的功能:**
- 发送消息时支持传入引用消息ID
- 查询消息时返回被引用的消息内容
- 前端显示引用消息样式
- 点击引用跳转到原消息位置
**实现建议:**
- 在发送消息接口中添加 `replyToMessageId` 参数
- 保存到 `extField2` 字段
- 查询消息时关联查询被引用的消息
- 前端渲染引用消息卡片
**优先级:** - 辅助功能
**预计工作量:** 1-2天仅需实现业务逻辑和前端功能
---
### 模块17消息表情回应模块 ✅ (已完成 - 2024-12-26)
**功能**
- 对消息添加表情回应
- 查看谁回应了表情
- 取消表情回应
- 表情回应统计
- 切换表情回应
**登录验证:**
- POST /api/front/messages/reactions/add - 添加表情回应需要登录)✅
- DELETE /api/front/messages/reactions/remove - 取消表情回应需要登录)✅
- GET /api/front/messages/reactions/list - 获取表情回应列表不需要登录
- GET /api/front/messages/reactions/statistics - 获取表情回应统计不需要登录
- GET /api/front/messages/reactions/users - 获取回应用户列表不需要登录
- GET /api/front/messages/reactions/check - 检查回应状态需要登录)✅
- POST /api/front/messages/reactions/toggle - 切换表情回应需要登录)✅
- 所有需要登录的接口都会检查用户登录状态
- 未登录用户访问会返回"用户未登录请先登录"提示
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `MessageReaction` - 消息表情回应实体eb_message_reaction)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- **DAO层Mapper**
- `MessageReactionDao` - 消息表情回应Mapper接口
- **Service层**
- `MessageReactionService` - 消息表情回应服务接口
- `MessageReactionServiceImpl` - 消息表情回应服务实现
- 取消回应使用逻辑删除@TableLogic自动处理
- **Controller层**
- `MessageReactionController` - 消息表情回应接口
- 添加详细的登录验证说明注释
- 所有需要登录的接口都检查用户登录状态
- 未登录返回友好的提示信息
**业务流程:**
- 添加表情回应 验证登录 验证参数 检查是否已回应 保存记录
- 取消表情回应 验证登录 验证参数 逻辑删除记录
- 查看回应列表 按表情类型分组统计 返回用户列表
- 切换回应 验证登录 检查状态 添加或取消
**数据库表:**支持JPA自动创建
- `eb_message_reaction` - 消息回应表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**API接口**
- `POST /api/front/messages/reactions/add` - 添加表情回应 ✅(需要登录
- `DELETE /api/front/messages/reactions/remove` - 取消表情回应 ✅(需要登录
- `GET /api/front/messages/reactions/list` - 获取消息的所有表情回应 ✅(不需要登录
- `GET /api/front/messages/reactions/statistics` - 获取表情回应统计 ✅(不需要登录
- `GET /api/front/messages/reactions/users` - 获取指定表情的回应用户列表 ✅(不需要登录
- `GET /api/front/messages/reactions/check` - 检查用户是否已回应 ✅(需要登录
- `POST /api/front/messages/reactions/toggle` - 切换表情回应 ✅(需要登录
**支持的表情类型:**
- `like` - 点赞 👍
- `love` - 爱心
- `haha` - 哈哈 😄
- `wow` - 惊讶 😮
- `sad` - 难过 😢
- `angry` - 生气 😠
**扩展字段说明:**
**MessageReaction实体类扩展字段**
- ext_field1: VARCHAR(100) - 回应来源/渠道mobilewebdesktop
- ext_field2: INT - 回应优先级/权重用于排序显示
- ext_field3: VARCHAR(50) - 特殊标记/类型精选回应热门回应等
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义信息
**技术亮点:**
- 标准三层架构设计Controller Service DAO
- 使用JPA注解支持自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问无SQL语句
- 完整的事务管理@Transactional
- 支持逻辑删除@TableLogic
- 添加唯一索引防止重复回应同一用户对同一消息的同一表情只能回应一次
- 添加数据库索引定义提升查询性能
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 完善的参数验证和异常处理
- 支持私聊消息和群组消息
- 提供切换回应功能一键添加/取消
- 所有需要登录的接口都有验证机制
- 预留扩展字段便于功能扩展
** 已完成改进2024-12-26**
- 创建MessageReaction实体类支持JPA自动建表
- 创建MessageReactionDao接口
- 实现MessageReactionService服务层
- 实现MessageReactionServiceImpl服务实现
- 实现MessageReactionController接口层
- 支持添加表情回应
- 支持取消表情回应
- 支持查看回应列表
- 支持表情回应统计
- 支持查看回应用户列表
- 支持检查回应状态
- 支持切换回应功能
- 添加唯一索引防止重复回应
- 验证所有代码无编译错误
- 为MessageReaction实体类添加更新时间字段update_time
- 为MessageReaction实体类添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- 为Controller添加详细的登录验证说明
- 检查并标注哪些接口需要登录
- 优化未登录提示信息
**优先级:** - 增强互动
**完成时间:** 2024-12-26
---
### 模块18敏感词过滤模块 ⚠️ (部分实现 - 高优先级)
**功能**
- 敏感词库管理 (后台管理已实现 - `SensitiveWordController`)
- DFA算法过滤 (Service层待实现)
- 消息内容检测 (待应用到弹幕和消息发送)
**已实现的类:**
- `SensitiveWordController` - 敏感词管理后台)✅
**需要实现的类:**
- `SensitiveWordFilter` - 敏感词过滤器DFA算法)❌
- `SensitiveWordService` - 敏感词管理Service
- `LiveChatHandler``PrivateChatHandler`中应用过滤
**过滤策略:**
- 使用DFA算法构建敏感词树
- 消息发送前过滤
- 替换为***或直接拒绝
**数据库表:**
- `eb_sensitive_word` - 敏感词表 (已存在)
**API接口后台管理**
- `GET /api/admin/sensitive/word/list` - 敏感词列表
- `POST /api/admin/sensitive/word/add` - 添加敏感词
- `POST /api/admin/sensitive/word/update` - 更新敏感词
- `POST /api/admin/sensitive/word/delete/{id}` - 删除敏感词
- `POST /api/admin/sensitive/word/status/{id}` - 切换状态
**优先级:** 🔴 - 内容安全必需
**建议:** 可先使用第三方内容审核API (如阿里云腾讯云)
**预计工作量:** 1-2天 (DFA算法实现和应用)
---
### 模块19限流防刷模块 ✅ (已完成 - 2024-12-26)
**功能**
- 消息发送频率限制
- 接口调用限流
- 基于用户ID的限流
- 基于IP地址的限流
- 全局限流
- 限流配置管理
- 限流记录日志
**登录验证:**
- 所有管理接口都需要管理员登录后才能访问
- 由AdminTokenInterceptor拦截器统一处理
- 未登录管理员访问会返回401 UNAUTHORIZED错误
- 只有管理员才能管理限流配置
- 限流切面通过SecurityUtil.getLoginUserVo()自动获取当前登录用户信息
- 对于需要限流的业务接口会自动检测用户登录状态按用户维度限流时
**已实现的类:**
- **实体类Entity** - 支持JPA自动建表
- `RateLimitConfig` - 限流配置实体eb_rate_limit_config)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- `RateLimitRecord` - 限流记录实体eb_rate_limit_record)✅
- 添加逻辑删除字段is_deleted
- 添加更新时间字段update_time
- 添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 使用@UpdateTimestamp自动管理更新时间
- 不创建外键保持表独立性
- **注解Annotation**
- `RateLimit` - 限流注解
- **DAO层Mapper**
- `RateLimitConfigDao` - 限流配置Mapper接口
- `RateLimitRecordDao` - 限流记录Mapper接口
- **Service层**
- `RateLimitService` - 限流服务接口
- `RateLimitServiceImpl` - 限流服务实现
- 删除配置使用逻辑删除@TableLogic自动处理
- **AOP切面**
- `RateLimitAspect` - 限流切面
- 自动获取当前登录用户信息SecurityUtil.getLoginUserVo()
- 支持按用户IP全局三种限流维度
- 异常情况自动降级放行避免影响正常业务
- **Controller层**
- `RateLimitController` - 限流管理接口后台管理)✅
- 获取限流配置 (GET /api/admin/rate-limit/config/{limitType}) **需要管理员登录**
- 保存限流配置 (POST /api/admin/rate-limit/config) **需要管理员登录**
- 更新限流配置 (PUT /api/admin/rate-limit/config) **需要管理员登录**
- 删除限流配置 (DELETE /api/admin/rate-limit/config/{id}) **需要管理员登录,使用逻辑删除**
- 初始化默认配置 (POST /api/admin/rate-limit/config/init) **需要管理员登录**
**限流策略:**
- 使用Redis + 令牌桶算法
- 弹幕1秒1条
- 私聊1秒3条
- 图片1分钟10张
- 接口调用1秒10次
**实现方案:**
- 使用Redis + 令牌桶算法实现
- 支持按用户IP全局三种限流维度
- AOP切面实现无侵入式限流
- 支持动态配置限流规则
**数据库表:**支持JPA自动创建
- `eb_rate_limit_config` - 限流配置表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
- `eb_rate_limit_record` - 限流记录表
- 包含逻辑删除字段is_deleted
- 包含更新时间字段update_time
- 包含5个扩展字段ext_field1-5
- 不创建外键
**API接口**
- `GET /api/admin/rate-limit/config/{limitType}` - 获取限流配置 **需要管理员登录**
- `POST /api/admin/rate-limit/config` - 保存限流配置 **需要管理员登录**
- `PUT /api/admin/rate-limit/config` - 更新限流配置 **需要管理员登录**
- `DELETE /api/admin/rate-limit/config/{id}` - 删除限流配置 **需要管理员登录,使用逻辑删除**
- `POST /api/admin/rate-limit/config/init` - 初始化默认配置 **需要管理员登录**
**扩展字段说明:**
**RateLimitConfig实体类扩展字段**
- ext_field1: VARCHAR(100) - 限流策略标签严格宽松自定义等
- ext_field2: INT - 优先级或等级用于多级限流策略
- ext_field3: VARCHAR(50) - 特殊标记VIP用户豁免测试环境等
- ext_field4: BIGINT - 关联数据ID用于关联其他业务数据
- ext_field5: TEXT - JSON扩展数据存储其他自定义配置信息
**RateLimitRecord实体类扩展字段**
- ext_field1: VARCHAR(100) - 触发来源/渠道mobilewebdesktop
- ext_field2: INT - 风险等级1-低风险2-中风险3-高风险
- ext_field3: VARCHAR(50) - 处理状态已处理待处理已忽略等
- ext_field4: BIGINT - 关联事件ID用于关联其他安全事件
- ext_field5: TEXT - JSON扩展数据存储详细的请求信息设备指纹等
**技术亮点:**
- 使用Redis实现分布式限流
- 令牌桶算法保证流量平滑
- AOP切面实现无侵入式限流
- 支持动态配置限流规则
- 完整的限流日志记录
- 异常情况自动降级放行
- 支持JPA自动建表ddl-auto: update
- 使用MyBatis-Plus进行数据访问无SQL语句
- 使用逻辑删除保护数据安全
- 预留扩展字段便于功能扩展
- 所有管理接口都需要管理员登录验证
- 自动获取当前登录用户信息进行限流控制
** 已完成改进2024-12-26**
- 创建RateLimitConfig和RateLimitRecord实体类支持JPA自动建表
- 创建@RateLimit注解支持声明式限流
- 实现RateLimitService服务层使用Redis + 令牌桶算法
- 实现RateLimitAspect切面拦截带有@RateLimit注解的方法
- 实现RateLimitController管理接口
- 支持按用户IDIP地址全局三种限流维度
- 添加数据库索引定义提升查询性能
- 使用@CreationTimestamp和@UpdateTimestamp自动管理时间
- 完善字段注释和约束columnDefinition
- 验证代码无编译错误
- 初始化默认限流配置弹幕私聊图片上传接口调用
- 为RateLimitConfig实体类添加更新时间字段update_time
- 为RateLimitConfig实体类添加5个扩展字段ext_field1-5
- 为RateLimitRecord实体类添加更新时间字段update_time
- 为RateLimitRecord实体类添加5个扩展字段ext_field1-5
- 使用@TableLogic实现逻辑删除
- 不创建外键保持表独立性
- 为Controller添加详细的登录验证说明注释
- 检查并标注哪些接口需要管理员登录
- 优化删除操作说明使用逻辑删除
**使用示例:**
```java
// 弹幕限流
@RateLimit(type = "barrage", dimension = "user", message = "弹幕发送过于频繁")
@PostMapping("/barrage")
public CommonResult<String> sendBarrage() {
return CommonResult.success("发送成功");
}
// 私聊消息限流
@RateLimit(type = "private_message", dimension = "user")
@PostMapping("/message")
public CommonResult<String> sendMessage() {
return CommonResult.success("发送成功");
}
// 图片上传限流
@RateLimit(type = "image_upload", dimension = "user")
@PostMapping("/upload")
public CommonResult<String> uploadImage() {
return CommonResult.success("上传成功");
}
// 接口调用限流按IP
@RateLimit(type = "api_call", dimension = "ip")
@GetMapping("/list")
public CommonResult<List> getList() {
return CommonResult.success(list);
}
```
**优先级:** 🔴 - 防止恶意刷屏和攻击
**完成时间:** 2024-12-26
**相关文档:**
- 完成总结`限流防刷模块完成总结.md`
- 快速参考`限流防刷模块快速参考.md`