155 lines
4.6 KiB
Markdown
155 lines
4.6 KiB
Markdown
|
|
# 关注功能修复说明
|
|||
|
|
|
|||
|
|
## 问题原因
|
|||
|
|
|
|||
|
|
系统中存在两个关注表的不一致问题:
|
|||
|
|
1. **数据库实际表**: `eb_user_follow` (字段: `user_id`, `follow_user_id`)
|
|||
|
|
2. **Java代码使用**: `eb_follow_record` (字段: `follower_id`, `followed_id`)
|
|||
|
|
|
|||
|
|
导致关注功能无法正常工作。
|
|||
|
|
|
|||
|
|
## 解决方案
|
|||
|
|
|
|||
|
|
创建 `eb_follow_record` 表并迁移现有数据。
|
|||
|
|
|
|||
|
|
## 执行步骤
|
|||
|
|
|
|||
|
|
### 1. 连接到MySQL数据库
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mysql -h 1.15.149.240 -u root -p
|
|||
|
|
use crmeb;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 执行迁移脚本
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
source migrate_follow_data.sql;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或者直接执行SQL:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 创建新表
|
|||
|
|
CREATE TABLE IF NOT EXISTS `eb_follow_record` (
|
|||
|
|
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|||
|
|
`follower_id` int(11) NOT NULL COMMENT '关注者用户ID',
|
|||
|
|
`follower_nickname` varchar(50) DEFAULT NULL COMMENT '关注者昵称',
|
|||
|
|
`follower_phone` varchar(20) DEFAULT NULL COMMENT '关注者手机号',
|
|||
|
|
`followed_id` int(11) NOT NULL COMMENT '被关注者用户ID',
|
|||
|
|
`followed_nickname` varchar(50) DEFAULT NULL COMMENT '被关注者昵称',
|
|||
|
|
`followed_phone` varchar(20) DEFAULT NULL COMMENT '被关注者手机号',
|
|||
|
|
`follow_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '关注状态:1-已关注 0-已取消',
|
|||
|
|
`is_deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除:0-未删除 1-已删除',
|
|||
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|||
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|||
|
|
`ext_field1` varchar(100) DEFAULT NULL COMMENT '扩展字段1:关注来源/渠道',
|
|||
|
|
`ext_field2` int(11) DEFAULT NULL COMMENT '扩展字段2:关注类型/优先级',
|
|||
|
|
`ext_field3` varchar(200) DEFAULT NULL COMMENT '扩展字段3:特殊标记/备注',
|
|||
|
|
`ext_field4` bigint(20) DEFAULT NULL COMMENT '扩展字段4:关联数据ID',
|
|||
|
|
`ext_field5` text COMMENT '扩展字段5:JSON扩展数据',
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
UNIQUE KEY `uk_follower_followed` (`follower_id`,`followed_id`),
|
|||
|
|
KEY `idx_follower_id` (`follower_id`),
|
|||
|
|
KEY `idx_followed_id` (`followed_id`),
|
|||
|
|
KEY `idx_follow_status` (`follow_status`),
|
|||
|
|
KEY `idx_is_deleted` (`is_deleted`),
|
|||
|
|
KEY `idx_create_time` (`create_time`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关注记录表';
|
|||
|
|
|
|||
|
|
-- 迁移数据(如果 eb_user_follow 表有数据)
|
|||
|
|
INSERT IGNORE INTO eb_follow_record (follower_id, follower_nickname, follower_phone, followed_id, followed_nickname, followed_phone, follow_status, is_deleted, create_time)
|
|||
|
|
SELECT
|
|||
|
|
uf.user_id as follower_id,
|
|||
|
|
u1.nickname as follower_nickname,
|
|||
|
|
u1.phone as follower_phone,
|
|||
|
|
uf.follow_user_id as followed_id,
|
|||
|
|
u2.nickname as followed_nickname,
|
|||
|
|
u2.phone as followed_phone,
|
|||
|
|
1 as follow_status,
|
|||
|
|
0 as is_deleted,
|
|||
|
|
uf.create_time
|
|||
|
|
FROM eb_user_follow uf
|
|||
|
|
LEFT JOIN eb_user u1 ON uf.user_id = u1.uid
|
|||
|
|
LEFT JOIN eb_user u2 ON uf.follow_user_id = u2.uid;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 验证数据
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 查看新表数据
|
|||
|
|
SELECT * FROM eb_follow_record LIMIT 10;
|
|||
|
|
|
|||
|
|
-- 统计记录数
|
|||
|
|
SELECT COUNT(*) FROM eb_follow_record;
|
|||
|
|
|
|||
|
|
-- 查看某个用户的关注记录
|
|||
|
|
SELECT * FROM eb_follow_record WHERE follower_id = 你的用户ID;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 重启后端服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /root/zhibo/Zhibo/zhibo-h
|
|||
|
|
./restart.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 重新编译Android应用
|
|||
|
|
|
|||
|
|
在Android Studio中:
|
|||
|
|
1. Build -> Clean Project
|
|||
|
|
2. Build -> Rebuild Project
|
|||
|
|
3. 重新安装到设备
|
|||
|
|
|
|||
|
|
## 测试步骤
|
|||
|
|
|
|||
|
|
1. 登录应用
|
|||
|
|
2. 进入任意直播间
|
|||
|
|
3. 点击"关注"按钮
|
|||
|
|
4. 查看是否提示"已关注主播"
|
|||
|
|
5. 退出直播间,重新进入
|
|||
|
|
6. 检查按钮是否显示"已关注"状态
|
|||
|
|
|
|||
|
|
## 验证数据库
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 查看关注记录
|
|||
|
|
SELECT
|
|||
|
|
fr.id,
|
|||
|
|
fr.follower_id,
|
|||
|
|
u1.nickname as follower_name,
|
|||
|
|
fr.followed_id,
|
|||
|
|
u2.nickname as followed_name,
|
|||
|
|
fr.follow_status,
|
|||
|
|
fr.create_time
|
|||
|
|
FROM eb_follow_record fr
|
|||
|
|
LEFT JOIN eb_user u1 ON fr.follower_id = u1.uid
|
|||
|
|
LEFT JOIN eb_user u2 ON fr.followed_id = u2.uid
|
|||
|
|
WHERE fr.follow_status = 1 AND fr.is_deleted = 0
|
|||
|
|
ORDER BY fr.create_time DESC
|
|||
|
|
LIMIT 20;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 已修复的代码
|
|||
|
|
|
|||
|
|
### 后端
|
|||
|
|
- ✅ StreamerAdminController: 粉丝数统计SQL
|
|||
|
|
- ✅ UserMapper.xml: 关注数和粉丝数查询
|
|||
|
|
- ✅ FollowController: 关注接口
|
|||
|
|
- ✅ LiveRoomController: 房间详情返回关注状态
|
|||
|
|
|
|||
|
|
### Android
|
|||
|
|
- ✅ ApiService: 接口路径修正
|
|||
|
|
- ✅ RoomDetailActivity:
|
|||
|
|
- 使用正确的 streamerId
|
|||
|
|
- 加载房间信息
|
|||
|
|
- 更新关注按钮状态
|
|||
|
|
- 添加详细日志
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 执行SQL前请先备份数据库
|
|||
|
|
2. 确保 `eb_user` 表存在且有数据
|
|||
|
|
3. 如果 `eb_user_follow` 表没有数据,迁移步骤会自动跳过
|
|||
|
|
4. 新的关注记录会自动保存到 `eb_follow_record` 表
|