zhibo/直播平台功能交互逻辑报告.md
2026-01-05 16:58:39 +08:00

593 lines
33 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 直播平台功能交互逻辑报告
## 概述
本报告详细描述直播平台三大核心模块的功能交互逻辑:
1. **敏感词管理** - 内容安全过滤系统
2. **消息/粉丝团/群组** - 社交通讯系统
3. **封禁系统** - 用户与房间管理
---
## 一、敏感词管理模块
### 1.1 功能概述
敏感词管理用于过滤平台内的违规内容,保障平台内容安全。
### 1.2 数据表结构
**表名**: `eb_sensitive_word`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键ID |
| word | varchar(128) | 敏感词内容 |
| category | varchar(32) | 分类(default/spam/illegal) |
| level | tinyint | 级别(1轻度/2中度/3重度) |
| action | tinyint | 处理方式(1替换/2拦截/3警告) |
| replace_text | varchar(32) | 替换文本(默认***) |
| status | tinyint | 状态(0禁用/1启用) |
| create_time | datetime | 创建时间 |
| update_time | datetime | 更新时间 |
### 1.3 管理端功能
**API路径**: `/api/admin/sensitive/word`
| 接口 | 方法 | 功能 |
|------|------|------|
| /list | GET | 敏感词列表(支持分页、关键词搜索、时间筛选) |
| /add | POST | 添加敏感词 |
| /update | POST | 更新敏感词 |
| /delete/{id} | POST | 删除敏感词 |
| /status/{id} | POST | 切换启用/禁用状态 |
### 1.4 交互流程图
```
┌─────────────────────────────────────────────────────────────────┐
│ 敏感词管理流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 管理员 │───▶│ 添加敏感词│───▶│ 存入数据库│ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用户发送 │───▶│ 内容检测 │───▶│ 匹配敏感词│───▶│ 执行处理 │ │
│ │ 消息/弹幕│ │ │ │ │ │ (替换/拦截)│ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 1.5 应用场景
敏感词过滤应用于以下场景:
- 直播间弹幕消息
- 私聊消息内容
- 粉丝团群聊消息
- 动态发布内容
- 用户昵称/签名
---
## 二、消息/粉丝团/群组模块
### 2.1 私聊消息系统
#### 2.1.1 数据表结构
**会话表**: `eb_conversation`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 会话ID |
| user1_id | int | 用户1 ID |
| user2_id | int | 用户2 ID |
| last_message | varchar(255) | 最后一条消息预览 |
| last_message_time | datetime | 最后消息时间 |
| user1_unread_count | int | 用户1未读数 |
| user2_unread_count | int | 用户2未读数 |
| user1_deleted | tinyint | 用户1是否删除 |
| user2_deleted | tinyint | 用户2是否删除 |
**私聊消息表**: `eb_private_message`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 消息ID |
| conversation_id | bigint | 会话ID |
| sender_id | int | 发送者ID |
| receiver_id | int | 接收者ID |
| content | text | 消息内容 |
| message_type | varchar(20) | 消息类型(text/image/voice) |
| media_url | varchar(500) | 媒体URL |
| status | varchar(20) | 状态(sent/read) |
| is_recalled | tinyint | 是否撤回 |
#### 2.1.2 移动端API
**路径**: `/api/front/chat`
| 接口 | 方法 | 功能 |
|------|------|------|
| /conversations | GET | 获取会话列表 |
| /conversations/{id} | GET | 获取会话详情 |
| /conversations/{id}/messages | GET | 获取消息列表 |
| /conversations/{id}/messages | POST | 发送消息 |
| /conversations/{id}/read | POST | 标记已读 |
| /messages/{id}/recall | POST | 撤回消息(2分钟内) |
#### 2.1.3 管理端API
**路径**: `/api/admin/chat`
| 接口 | 方法 | 功能 |
|------|------|------|
| /conversations | GET | 会话列表(支持搜索) |
| /conversations/{id}/messages | GET | 查看会话消息 |
| /conversations/{id} | DELETE | 删除会话 |
| /messages/{id} | DELETE | 删除单条消息 |
| /statistics | GET | 私聊统计数据 |
#### 2.1.4 私聊交互流程
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 私聊消息发送流程 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户A │──▶│ 检查黑名单 │──▶│ 敏感词过滤 │──▶│ 保存消息 │ │
│ │ 发消息 │ │ │ │ │ │ │ │
│ └────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ │
│ │ 黑名单拦截 │ │ 更新会话 │ │
│ │ 返回错误 │ │ 推送通知 │ │
│ └────────────┘ └────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────┐ │
│ │ 用户B收到 │ │
│ │ 消息通知 │ │
│ └────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.2 粉丝团系统
#### 2.2.1 数据表结构
**粉丝团表**: `eb_fan_group`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 粉丝团ID |
| anchor_id | int | 主播ID |
| anchor_name | varchar(64) | 主播昵称 |
| name | varchar(64) | 粉丝团名称 |
| badge | varchar(32) | 粉丝团徽章 |
| badge_color | varchar(16) | 徽章颜色 |
| member_count | int | 成员数量 |
| level | int | 粉丝团等级 |
| status | tinyint | 状态(0解散/1正常) |
**粉丝团成员表**: `eb_fan_group_member`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 成员记录ID |
| group_id | int | 粉丝团ID |
| uid | int | 用户ID |
| nickname | varchar(64) | 成员昵称 |
| level | int | 成员等级(1-10) |
| intimacy | int | 亲密度 |
| status | tinyint | 状态 |
| join_time | datetime | 加入时间 |
**群聊消息表**: `eb_group_message`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 消息ID |
| group_id | int | 粉丝团ID |
| sender_id | int | 发送者ID |
| content | text | 消息内容 |
| message_type | varchar(20) | 消息类型 |
| is_deleted | tinyint | 是否删除 |
#### 2.2.2 管理端API
**路径**: `/api/admin/fan/group`
| 接口 | 方法 | 功能 |
|------|------|------|
| /list | GET | 粉丝团列表 |
| /detail/{id} | GET | 粉丝团详情 |
| /delete/{id} | POST | 删除粉丝团 |
| /batch-delete | POST | 批量删除 |
| /status/{id} | POST | 修改状态(解散/恢复) |
| /update/{id} | POST | 修改粉丝团信息 |
| /member/list | GET | 成员列表 |
| /member/delete/{id} | POST | 删除成员 |
| /member/update-level/{id} | POST | 修改成员等级 |
| /message/list | GET | 聊天记录列表 |
| /message/delete/{id} | POST | 删除聊天记录 |
| /statistics | GET | 统计数据 |
#### 2.2.3 粉丝团交互流程
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 粉丝团系统流程 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 【创建粉丝团】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 主播 │──▶│ 设置名称 │──▶│ 创建粉丝团 │ │
│ │ 开播 │ │ 徽章/颜色 │ │ │ │
│ └────────┘ └────────────┘ └────────────┘ │
│ │
│ 【加入粉丝团】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户 │──▶│ 查看粉丝团 │──▶│ 支付加入费 │──▶│ 成为成员 │ │
│ │ │ │ 信息 │ │ (可选) │ │ 等级=1 │ │
│ └────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ 【等级提升】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 成员 │──▶│ 送礼/互动 │──▶│ 增加亲密度 │──▶│ 等级提升 │ │
│ │ │ │ │ │ │ │ (1-10级) │ │
│ └────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ 【群聊功能】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 成员 │──▶│ 发送消息 │──▶│ 敏感词过滤 │──▶│ 群内广播 │ │
│ │ │ │ │ │ │ │ │ │
│ └────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
---
## 三、封禁系统模块
### 3.1 系统概述
封禁系统分为两大类:
1. **平台封禁** - 管理员对用户/房间的封禁eb_user_ban / eb_room_ban
2. **用户黑名单** - 用户间的互相拉黑eb_user_blacklist / eb_room_blacklist
### 3.2 数据表结构
#### 3.2.1 用户封禁表 `eb_user_ban`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 记录ID |
| user_id | int | 被封禁用户ID |
| ban_type | varchar(20) | 封禁类型(permanent永久/temporary临时) |
| reason | varchar(500) | 封禁原因 |
| duration_days | int | 封禁天数(临时封禁) |
| expire_time | datetime | 解封时间 |
| operator_id | int | 操作员ID |
| status | tinyint | 状态(0已解封/1封禁中) |
#### 3.2.2 房间封禁表 `eb_room_ban`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 记录ID |
| room_id | int | 被封禁房间ID |
| ban_type | varchar(20) | 封禁类型 |
| reason | varchar(500) | 封禁原因 |
| duration_days | int | 封禁天数 |
| expire_time | datetime | 解封时间 |
| operator_id | int | 操作员ID |
| status | tinyint | 状态 |
#### 3.2.3 用户黑名单表 `eb_user_blacklist`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 记录ID |
| user_id | int | 拉黑发起者ID |
| blocked_user_id | int | 被拉黑用户ID |
| blocker_nickname | varchar(64) | 发起者昵称 |
| blocked_nickname | varchar(64) | 被拉黑者昵称 |
| create_time | datetime | 创建时间 |
#### 3.2.4 房间黑名单表 `eb_room_blacklist`
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 记录ID |
| room_id | int | 房间ID |
| room_name | varchar(128) | 房间名称 |
| blocked_user_id | int | 被拉黑用户ID |
| blocked_user_nickname | varchar(64) | 被拉黑用户昵称 |
| operator_id | int | 操作者ID(主播) |
| create_time | datetime | 创建时间 |
### 3.3 管理端API
#### 3.3.1 封禁管理 `/api/admin/ban`
| 接口 | 方法 | 功能 |
|------|------|------|
| /user/list | GET | 用户封禁列表 |
| /user/add | POST | 封禁用户 |
| /user/unban/{id} | POST | 解除用户封禁 |
| /user/delete/{id} | POST | 删除封禁记录 |
| /user/batch-delete | POST | 批量删除 |
| /user/check/{userId} | GET | 检查用户封禁状态 |
| /room/list | GET | 房间封禁列表 |
| /room/add | POST | 封禁房间 |
| /room/unban/{id} | POST | 解除房间封禁 |
| /room/delete/{id} | POST | 删除封禁记录 |
| /room/batch-delete | POST | 批量删除 |
| /room/check/{roomId} | GET | 检查房间封禁状态 |
#### 3.3.2 黑名单管理 `/api/admin/blacklist`
| 接口 | 方法 | 功能 |
|------|------|------|
| /user/list | GET | 用户黑名单列表 |
| /user/delete/{id} | POST | 删除用户黑名单记录 |
| /user/batch-delete | POST | 批量删除 |
| /room/list | GET | 房间黑名单列表 |
| /room/delete/{id} | POST | 删除房间黑名单记录 |
| /room/batch-delete | POST | 批量删除 |
### 3.4 移动端API
**路径**: `/api/front/ban`
| 接口 | 方法 | 功能 |
|------|------|------|
| /check/me | GET | 检查当前用户封禁状态 |
| /check/user/{userId} | GET | 检查指定用户封禁状态 |
| /check/room/{roomId} | GET | 检查房间封禁状态 |
| /blacklist/list | GET | 获取我的黑名单列表 |
| /blacklist/add | POST | 添加用户到黑名单 |
| /blacklist/remove | POST | 从黑名单移除用户 |
| /blacklist/check/{targetUserId} | GET | 检查黑名单状态 |
### 3.5 封禁检查触发点
封禁状态检查在以下场景自动触发:
| 场景 | 检查内容 | 实现位置 |
|------|----------|----------|
| 用户登录 | 检查用户是否被封禁 | LoginServiceImpl.checkUserBanStatus() |
| 发送私聊消息 | 检查双方黑名单状态 | ConversationServiceImpl.checkBlacklistStatus() |
| 发送直播间弹幕 | 检查用户封禁状态 | LiveRoomController.checkUserBanStatus() |
| 赠送礼物 | 检查用户封禁状态 | LiveRoomController.sendGift() |
| 进入直播间 | 检查房间封禁状态 | Android RoomDetailActivity |
### 3.6 封禁系统交互流程
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 封禁系统完整流程 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 【管理员封禁用户】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 管理员 │──▶│ 选择用户 │──▶│ 设置封禁 │──▶│ 更新用户 │ │
│ │ │ │ 填写原因 │ │ 类型/时长 │ │ status=0 │ │
│ └────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ 【用户登录检查】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户 │──▶│ 提交登录 │──▶│ 检查封禁表 │──▶│ 封禁中? │ │
│ │ 登录 │ │ │ │ │ │ │ │
│ └────────┘ └────────────┘ └────────────┘ └─────┬──────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ │ │
│ ┌──────────┐ ┌──────────┐ │ │
│ │ 是:拒绝 │ │ 否:允许 │ │ │
│ │ 返回原因 │ │ 登录成功 │ │ │
│ └──────────┘ └──────────┘ │ │
│ │
│ 【用户拉黑用户】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户A │──▶│ 点击拉黑 │──▶│ 添加黑名单 │──▶│ 删除好友 │ │
│ │ │ │ 用户B │ │ 记录 │ │ 关系 │ │
│ └────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ │
│ 【私聊黑名单检查】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户A │──▶│ 发送消息 │──▶│ 检查黑名单 │ │
│ │ 发消息 │ │ 给用户B │ │ │ │
│ └────────┘ └────────────┘ └─────┬──────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ A拉黑了B │ │ B拉黑了A │ │ 无黑名单 │ │
│ │ 提示:您已│ │ 提示:对方│ │ 正常发送 │ │
│ │ 拉黑对方 │ │ 已拉黑您 │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ 【房间封禁检查】 │
│ ┌────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ 用户 │──▶│ 进入直播间 │──▶│ 检查房间 │──▶│ 封禁中? │ │
│ │ │ │ │ │ 封禁状态 │ │ │ │
│ └────────┘ └────────────┘ └────────────┘ └─────┬──────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┐ │
│ ▼ ▼ │ │
│ ┌──────────┐ ┌──────────┐ │ │
│ │ 是:禁止 │ │ 否:允许 │ │ │
│ │ 进入房间 │ │ 进入观看 │ │ │
│ └──────────┘ └──────────┘ │ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
---
## 四、三大模块联动关系
### 4.1 模块交互图
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 三大模块联动关系 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ │
│ │ 敏感词管理 │ │
│ │ │ │
│ │ • 内容过滤规则 │ │
│ │ • 违规词库维护 │ │
│ └────────┬────────┘ │
│ │ │
│ ┌────────────┼────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ 私聊消息 │ │ 粉丝团群聊 │ │ 直播间弹幕 │ │
│ │ │ │ │ │ │ │
│ │ • 发送前过滤敏感词 │ │ • 发送前过滤敏感词 │ │ • 发送前过滤敏感词 │ │
│ │ • 检查黑名单状态 │ │ • 检查成员状态 │ │ • 检查用户封禁 │ │
│ │ • 检查用户封禁 │ │ • 检查用户封禁 │ │ • 检查房间封禁 │ │
│ └──────────┬──────────┘ └──────────┬──────────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ └────────────────────────┼────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ 封禁系统 │ │
│ │ │ │
│ │ • 用户封禁管理 │ │
│ │ • 房间封禁管理 │ │
│ │ • 用户黑名单 │ │
│ │ • 房间黑名单 │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 4.2 完整消息发送流程
```
用户发送消息
┌────────────────┐
│ 1. 用户登录检查 │ ──── 检查 eb_user_ban 表
└───────┬────────┘
│ 通过
┌────────────────┐
│ 2. 封禁状态检查 │ ──── 检查用户是否被平台封禁
└───────┬────────┘
│ 通过
┌────────────────┐
│ 3. 黑名单检查 │ ──── 检查 eb_user_blacklist 表
└───────┬────────┘ (私聊场景)
│ 通过
┌────────────────┐
│ 4. 敏感词过滤 │ ──── 检查 eb_sensitive_word 表
└───────┬────────┘
│ 通过/替换
┌────────────────┐
│ 5. 消息入库 │ ──── 保存到对应消息表
└───────┬────────┘
┌────────────────┐
│ 6. 推送通知 │ ──── WebSocket/推送服务
└────────────────┘
```
---
## 五、代码实现位置汇总
### 5.1 后端代码
| 模块 | 文件路径 | 说明 |
|------|----------|------|
| 敏感词管理 | `crmeb-admin/.../SensitiveWordController.java` | 管理端敏感词CRUD |
| 私聊管理 | `crmeb-admin/.../ChatManagementController.java` | 管理端私聊管理 |
| 私聊服务 | `crmeb-service/.../ConversationServiceImpl.java` | 私聊业务逻辑+黑名单检查 |
| 粉丝团管理 | `crmeb-admin/.../FanGroupController.java` | 管理端粉丝团管理 |
| 封禁管理 | `crmeb-admin/.../BanController.java` | 管理端封禁管理 |
| 黑名单管理 | `crmeb-admin/.../BlacklistController.java` | 管理端黑名单管理 |
| 移动端封禁 | `crmeb-front/.../BanFrontController.java` | 移动端封禁API |
| 登录服务 | `crmeb-front/.../LoginServiceImpl.java` | 登录时封禁检查 |
| 直播间控制 | `crmeb-front/.../LiveRoomController.java` | 弹幕/礼物封禁检查 |
### 5.2 前端代码
| 模块 | 文件路径 | 说明 |
|------|----------|------|
| 敏感词页面 | `admin/src/views/sensitiveWord/list/index.vue` | 敏感词管理页面 |
| 敏感词API | `admin/src/api/sensitiveWord.js` | 敏感词API接口 |
| 粉丝团页面 | `admin/src/views/fanGroup/list/index.vue` | 粉丝团管理页面 |
| 粉丝团API | `admin/src/api/fanGroup.js` | 粉丝团API接口 |
| 封禁页面 | `admin/src/views/ban/` | 封禁管理页面 |
| 黑名单页面 | `admin/src/views/blacklist/` | 黑名单管理页面 |
### 5.3 Android代码
| 模块 | 文件路径 | 说明 |
|------|----------|------|
| API接口 | `ApiService.java` | 封禁/黑名单API定义 |
| 直播间 | `RoomDetailActivity.java` | 进入房间封禁检查 |
| 粉丝团聊天 | `GroupChatActivity.java` | 粉丝团群聊功能 |
| 消息列表 | `MessagesActivity.java` | 消息列表页面 |
---
## 六、待完善功能建议
### 6.1 敏感词模块
1. **实时过滤服务** - 目前敏感词表已建立,建议实现统一的敏感词过滤服务类
2. **分类管理** - 支持按分类(spam/illegal/abuse)管理敏感词
3. **批量导入** - 支持Excel/TXT批量导入敏感词
4. **过滤日志** - 记录敏感词触发日志,便于分析
### 6.2 消息模块
1. **消息撤回通知** - 撤回消息时通知对方
2. **消息已读回执** - 显示消息已读状态
3. **群聊@功能** - 粉丝团群聊支持@成员
4. **消息搜索** - 支持历史消息搜索
### 6.3 封禁模块
1. **封禁申诉** - 用户可提交封禁申诉
2. **自动解封** - 临时封禁到期自动解封定时任务
3. **封禁通知** - 封禁/解封时推送通知给用户
4. **封禁统计** - 封禁数据统计报表
---
## 七、总结
本报告详细描述了直播平台三大核心模块的功能设计和交互逻辑:
1. **敏感词管理** - 提供内容安全过滤能力,保障平台内容合规
2. **消息/粉丝团/群组** - 构建完整的社交通讯体系,增强用户粘性
3. **封禁系统** - 提供多层次的用户管理能力,维护平台秩序
三大模块相互配合,形成完整的平台安全和社交体系。
---
*报告生成时间: 2026-01-05*