# 关注功能调试指南 ## 第一步:检查数据库 ### 1.1 连接数据库 ```bash mysql -h 1.15.149.240 -u root -p use crmeb; ``` ### 1.2 执行诊断脚本 ```sql source diagnose_follow_issue.sql; ``` ### 1.3 检查关键点 - [ ] `eb_follow_record` 表是否存在? - [ ] 表结构是否正确? - [ ] 是否有测试数据? 如果表不存在,执行: ```sql source migrate_follow_data.sql; ``` ## 第二步:查看Android日志 ### 2.1 连接设备并查看日志 ```bash adb logcat | grep -i "RoomDetail\|follow" ``` ### 2.2 关键日志 查找以下日志: - `关注主播: streamerId=xxx, roomId=xxx` - 确认发送的用户ID - `关注响应: code=xxx, message=xxx` - 查看服务器响应 - `房间信息加载成功: streamerId=xxx, isFollowing=xxx` - 确认房间信息 ## 第三步:检查后端日志 ### 3.1 查看后端日志 ```bash ssh root@1.15.149.240 cd /root/zhibo/Zhibo/zhibo-h tail -f crmeb-admin/logs/info.log | grep -i follow ``` ### 3.2 查看错误日志 ```bash tail -f crmeb-admin/logs/error.log ``` ## 第四步:手动测试API ### 4.1 获取token ```bash # 登录获取token curl -X POST http://1.15.149.240:30001/api/front/login \ -H "Content-Type: application/json" \ -d '{ "phone": "你的手机号", "password": "你的密码" }' ``` ### 4.2 测试关注接口 ```bash # 替换 YOUR_TOKEN 和 STREAMER_ID curl -X POST http://1.15.149.240:30001/api/front/follow/follow \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "userId": STREAMER_ID }' ``` ### 4.3 测试获取房间信息 ```bash curl -X GET http://1.15.149.240:30001/api/front/live/public/rooms/ROOM_ID \ -H "Authorization: Bearer YOUR_TOKEN" ``` ## 第五步:常见问题排查 ### 问题1:表不存在 **症状**: 后端日志显示 `Table 'crmeb.eb_follow_record' doesn't exist` **解决**: ```sql source migrate_follow_data.sql; ``` ### 问题2:streamerId为null **症状**: Android日志显示 `streamerId is null` **原因**: 房间信息中没有streamerId字段 **检查**: ```sql SELECT id, uid, title, streamer_name FROM eb_live_room LIMIT 5; ``` **解决**: 确保LiveRoomController的toResponse方法设置了streamerId: ```java resp.setStreamerId(room.getUid()); ``` ### 问题3:接口404 **症状**: Android日志显示 `response code=404` **原因**: API路径不正确 **检查**: - Android: `ApiService.followUser` 使用 `/api/front/follow/follow` - 后端: `FollowController` 的 `@PostMapping("/follow")` ### 问题4:401未授权 **症状**: 返回401错误 **原因**: Token过期或无效 **解决**: 重新登录获取新token ### 问题5:关注成功但状态不保存 **症状**: 点击关注提示成功,但退出重进还是未关注 **检查数据库**: ```sql -- 查看是否有记录 SELECT * FROM eb_follow_record WHERE follower_id = YOUR_USER_ID AND followed_id = STREAMER_ID ORDER BY create_time DESC; -- 检查状态 SELECT follower_id, followed_id, follow_status, is_deleted, create_time FROM eb_follow_record WHERE follower_id = YOUR_USER_ID ORDER BY create_time DESC LIMIT 10; ``` ## 第六步:完整测试流程 ### 6.1 准备测试数据 ```sql -- 查看可用的用户和主播 SELECT uid, nickname, phone, is_streamer FROM eb_user WHERE is_streamer = 1 LIMIT 5; -- 查看可用的直播间 SELECT id, uid, title, streamer_name FROM eb_live_room LIMIT 5; ``` ### 6.2 记录测试信息 - 测试用户ID: ________ - 主播用户ID: ________ - 直播间ID: ________ ### 6.3 执行测试 1. 登录应用(使用测试用户) 2. 进入直播间(记录的直播间ID) 3. 查看Android日志,记录: - roomId: ________ - streamerId: ________ 4. 点击关注按钮 5. 查看提示信息: ________ 6. 查看Android日志中的响应 7. 查看数据库记录: ```sql SELECT * FROM eb_follow_record WHERE follower_id = 测试用户ID AND followed_id = 主播用户ID; ``` ### 6.4 验证结果 - [ ] 数据库中有记录 - [ ] follow_status = 1 - [ ] is_deleted = 0 - [ ] 退出重进后按钮显示"已关注" ## 第七步:如果还是不行 ### 收集以下信息: 1. **数据库检查结果** ```sql -- 执行并提供结果 SELECT * FROM information_schema.tables WHERE table_schema = 'crmeb' AND table_name IN ('eb_follow_record', 'eb_user_follow'); ``` 2. **Android日志** ``` 提供 adb logcat 中关于 RoomDetail 和 follow 的日志 ``` 3. **后端日志** ``` 提供 /root/zhibo/Zhibo/zhibo-h/crmeb-admin/logs/info.log 中的相关日志 ``` 4. **API测试结果** ``` 提供 curl 测试的完整响应 ``` 5. **数据库记录** ```sql -- 执行并提供结果 SELECT * FROM eb_follow_record WHERE create_time > DATE_SUB(NOW(), INTERVAL 1 HOUR) ORDER BY create_time DESC; ``` ## 快速检查清单 - [ ] 数据库中 `eb_follow_record` 表已创建 - [ ] 后端服务已重启 - [ ] Android应用已重新编译 - [ ] 用户已登录 - [ ] 进入的是有效的直播间 - [ ] 直播间的主播用户存在 - [ ] Android日志中能看到 streamerId - [ ] 网络连接正常 - [ ] API接口路径正确 - [ ] Token有效 ## 紧急修复方案 如果以上都不行,可以尝试简化方案: ### 方案A:使用 eb_user_follow 表 修改 `FollowRecord` 类的表名: ```java @TableName("eb_user_follow") // 改为使用现有表 ``` 并修改字段映射: ```java @TableField("user_id") private Integer followerId; @TableField("follow_user_id") private Integer followedId; ``` ### 方案B:直接使用JDBC 在 `FollowRecordServiceImpl` 中使用 JdbcTemplate 直接操作数据库,绕过MyBatis。