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 端网络请求是否成功
|
|||
|
|
- 返回的数据格式是否正确
|