170 lines
4.7 KiB
Markdown
170 lines
4.7 KiB
Markdown
# 主播中心粉丝数问题排查指南
|
||
|
||
## 问题描述
|
||
主播中心页面显示粉丝数为 0,即使有用户关注了该主播。
|
||
|
||
## 已修复的问题
|
||
|
||
### 1. 后端统计接口修复
|
||
**文件**: `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/StreamerController.java`
|
||
|
||
**修复内容**:
|
||
- 修正了粉丝数查询的 SQL 语句
|
||
- 原来使用了错误的字段名 `follow_user_id`
|
||
- 现在使用正确的字段 `followed_id`(被关注者ID)
|
||
- 添加了状态过滤条件:`follow_status IN ('1', '关注') AND is_deleted = 0`
|
||
- 同时添加了关注数统计(我关注了多少人)
|
||
|
||
**修复后的代码**:
|
||
```java
|
||
// 获取粉丝数(统计有多少人关注了我)
|
||
try {
|
||
String fansSql = "SELECT COUNT(*) FROM eb_follow_record WHERE followed_id = ? AND follow_status IN ('1', '关注') AND is_deleted = 0";
|
||
Integer fansCount = jdbcTemplate.queryForObject(fansSql, Integer.class, userId);
|
||
stats.put("fansCount", fansCount != null ? fansCount : 0);
|
||
} catch (Exception e) {
|
||
log.error("获取粉丝数失败", e);
|
||
stats.put("fansCount", 0);
|
||
}
|
||
|
||
// 获取关注数(统计我关注了多少人)
|
||
try {
|
||
String followingSql = "SELECT COUNT(*) FROM eb_follow_record WHERE follower_id = ? AND follow_status IN ('1', '关注') AND is_deleted = 0";
|
||
Integer followingCount = jdbcTemplate.queryForObject(followingSql, Integer.class, userId);
|
||
stats.put("followingCount", followingCount != null ? followingCount : 0);
|
||
} catch (Exception e) {
|
||
log.error("获取关注数失败", e);
|
||
stats.put("followingCount", 0);
|
||
}
|
||
```
|
||
|
||
## 验证步骤
|
||
|
||
### 1. 重新部署后端
|
||
```bash
|
||
# 已编译完成,需要重启服务
|
||
# 在服务器上执行:
|
||
cd /root/zhibo/Zhibo/zhibo-h/crmeb-front
|
||
./restart.sh
|
||
```
|
||
|
||
### 2. 使用 SQL 验证数据
|
||
运行 `test_streamer_stats.sql` 中的查询来验证数据:
|
||
|
||
```sql
|
||
-- 查看某个主播的粉丝数
|
||
SET @USER_ID = 1; -- 替换为实际的主播用户ID
|
||
|
||
SELECT
|
||
'粉丝数' as stat_type,
|
||
COUNT(*) as count
|
||
FROM eb_follow_record
|
||
WHERE followed_id = @USER_ID
|
||
AND follow_status IN ('1', '关注')
|
||
AND is_deleted = 0;
|
||
|
||
-- 查看谁关注了这个主播
|
||
SELECT
|
||
fr.follower_id,
|
||
u.nickname as follower_nickname,
|
||
fr.follow_status,
|
||
fr.create_time
|
||
FROM eb_follow_record fr
|
||
LEFT JOIN eb_user u ON fr.follower_id = u.uid
|
||
WHERE fr.followed_id = @USER_ID
|
||
AND fr.follow_status IN ('1', '关注')
|
||
AND fr.is_deleted = 0
|
||
ORDER BY fr.create_time DESC;
|
||
```
|
||
|
||
### 3. 测试 API 接口
|
||
使用 Postman 或 curl 测试接口:
|
||
|
||
```bash
|
||
# 获取主播统计数据
|
||
curl -X GET "http://your-server/api/front/streamer/stats" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
预期返回:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "success",
|
||
"data": {
|
||
"nickname": "主播昵称",
|
||
"avatar": "头像URL",
|
||
"streamerLevel": 1,
|
||
"fansCount": 实际粉丝数,
|
||
"followingCount": 关注数,
|
||
"likesCount": 获赞数,
|
||
"giftsCount": 礼物数,
|
||
"totalIncome": 总收益,
|
||
"hasActiveRoom": true/false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. Android 端测试
|
||
1. 重新启动 Android 应用
|
||
2. 登录主播账号
|
||
3. 进入主播中心
|
||
4. 查看粉丝数是否正确显示
|
||
|
||
## 可能的其他问题
|
||
|
||
### 1. 数据库中没有关注记录
|
||
检查 `eb_follow_record` 表是否有数据:
|
||
```sql
|
||
SELECT COUNT(*) FROM eb_follow_record;
|
||
```
|
||
|
||
如果没有数据,需要:
|
||
- 确认关注功能是否正常工作
|
||
- 检查关注接口是否正确插入数据
|
||
|
||
### 2. follow_status 字段值不一致
|
||
检查状态值:
|
||
```sql
|
||
SELECT DISTINCT follow_status, COUNT(*)
|
||
FROM eb_follow_record
|
||
GROUP BY follow_status;
|
||
```
|
||
|
||
如果发现状态值不一致,可以统一:
|
||
```sql
|
||
-- 将字符串状态统一为数字
|
||
UPDATE eb_follow_record SET follow_status = '1' WHERE follow_status = '关注';
|
||
UPDATE eb_follow_record SET follow_status = '0' WHERE follow_status = '取消关注';
|
||
```
|
||
|
||
### 3. Android 端缓存问题
|
||
- 清除应用数据
|
||
- 重新登录
|
||
- 或者在代码中添加强制刷新逻辑
|
||
|
||
### 4. Token 过期或权限问题
|
||
- 确认用户已登录
|
||
- 确认 Token 有效
|
||
- 确认用户是主播身份(is_streamer = 1)
|
||
|
||
## 相关文件
|
||
|
||
- 后端接口: `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/StreamerController.java`
|
||
- Android 页面: `android-app/app/src/main/java/com/example/livestreaming/StreamerCenterActivity.java`
|
||
- API 接口定义: `android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java`
|
||
- 数据库表: `eb_follow_record`
|
||
- 测试 SQL: `test_streamer_stats.sql`
|
||
|
||
## 下一步
|
||
|
||
1. 重启后端服务
|
||
2. 运行 SQL 验证数据
|
||
3. 测试 API 接口
|
||
4. 在 Android 端验证显示
|
||
|
||
如果问题仍然存在,请检查:
|
||
- 后端日志中是否有错误信息
|
||
- Android 端网络请求是否成功
|
||
- 返回的数据格式是否正确
|