262 lines
5.5 KiB
Markdown
262 lines
5.5 KiB
Markdown
# 关注功能调试指南
|
||
|
||
## 第一步:检查数据库
|
||
|
||
### 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。
|