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

4.6 KiB
Raw Blame History

关注功能修复说明

问题原因

系统中存在两个关注表的不一致问题:

  1. 数据库实际表: eb_user_follow (字段: user_id, follow_user_id)
  2. Java代码使用: eb_follow_record (字段: follower_id, followed_id)

导致关注功能无法正常工作。

解决方案

创建 eb_follow_record 表并迁移现有数据。

执行步骤

1. 连接到MySQL数据库

mysql -h 1.15.149.240 -u root -p
use crmeb;

2. 执行迁移脚本

source migrate_follow_data.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. 验证数据

-- 查看新表数据
SELECT * FROM eb_follow_record LIMIT 10;

-- 统计记录数
SELECT COUNT(*) FROM eb_follow_record;

-- 查看某个用户的关注记录
SELECT * FROM eb_follow_record WHERE follower_id = 你的用户ID;

4. 重启后端服务

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. 检查按钮是否显示"已关注"状态

验证数据库

-- 查看关注记录
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