zhibo/关注功能修复说明.md
2026-01-03 15:32:31 +08:00

155 lines
4.6 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. **数据库实际表**: `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 '扩展字段5JSON扩展数据',
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`