zhibo/粉丝团功能开发说明.md

147 lines
4.5 KiB
Markdown
Raw Normal View History

# 粉丝团功能开发说明
## 功能概述
粉丝团是主播与粉丝之间建立更紧密联系的功能,粉丝可以加入主播的粉丝团,获得专属徽章,通过送礼物等方式增加亲密度和等级。
## 数据库表结构
### eb_fan_group粉丝团表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键ID |
| anchor_id | int | 主播ID |
| anchor_name | varchar | 主播昵称 |
| name | varchar | 粉丝团名称 |
| badge | varchar | 粉丝徽章 |
| badge_color | varchar | 徽章颜色 |
| member_count | int | 成员数量 |
| status | tinyint | 状态(1正常 0解散) |
| create_time | datetime | 创建时间 |
### eb_fan_group_member粉丝团成员表
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int | 主键ID |
| group_id | int | 粉丝团ID |
| uid | int | 用户ID |
| nickname | varchar | 用户昵称 |
| level | int | 粉丝等级(1-10) |
| intimacy | int | 亲密度 |
| status | tinyint | 状态(1正常 0退出) |
| join_time | datetime | 加入时间 |
## 后端API
### APP端接口 (FanGroupController)
路径前缀: `/api/front/fan-group`
| 接口 | 方法 | 说明 |
|------|------|------|
| /my | GET | 获取我的粉丝团(主播) |
| /streamer/{streamerId} | GET | 获取主播的粉丝团 |
| /create | POST | 创建粉丝团 |
| /update | POST | 更新粉丝团信息 |
| /join/{groupId} | POST | 加入粉丝团 |
| /leave/{groupId} | POST | 退出粉丝团 |
| /joined | GET | 获取我加入的粉丝团列表 |
| /{groupId}/members | GET | 获取粉丝团成员列表 |
| /{groupId}/check-joined | GET | 检查是否已加入 |
| /{groupId}/add-intimacy | POST | 增加亲密度 |
### 后台管理接口 (FanGroupController - admin)
路径前缀: `/api/admin/fan/group`
| 接口 | 方法 | 说明 |
|------|------|------|
| /list | GET | 粉丝团列表 |
| /delete/{id} | POST | 删除粉丝团 |
| /batch-delete | POST | 批量删除 |
| /member/list | GET | 成员列表 |
| /member/delete/{id} | POST | 移除成员 |
## Android端实现
### 新增文件
1. `MyFanGroupActivity.java` - 我的粉丝团页面(主播视角)
2. `activity_my_fan_group.xml` - 布局文件
3. `dialog_create_fan_group.xml` - 创建/编辑粉丝团对话框
4. `item_fan_group_member.xml` - 成员列表项布局
5. `bg_badge.xml` - 徽章背景
6. `bg_level_tag.xml` - 等级标签背景
### 入口位置
- 主播中心页面 (StreamerCenterActivity) 添加"我的粉丝团"入口
### ApiService新增接口
```java
// 粉丝团接口
@GET("api/front/fan-group/my")
Call<ApiResponse<Map<String, Object>>> getMyFanGroup();
@GET("api/front/fan-group/streamer/{streamerId}")
Call<ApiResponse<Map<String, Object>>> getStreamerFanGroup(@Path("streamerId") int streamerId);
@POST("api/front/fan-group/create")
Call<ApiResponse<Map<String, Object>>> createFanGroup(@Body Map<String, Object> request);
@POST("api/front/fan-group/update")
Call<ApiResponse<String>> updateFanGroup(@Body Map<String, Object> request);
@POST("api/front/fan-group/join/{groupId}")
Call<ApiResponse<String>> joinFanGroup(@Path("groupId") int groupId);
@POST("api/front/fan-group/leave/{groupId}")
Call<ApiResponse<String>> leaveFanGroup(@Path("groupId") int groupId);
@GET("api/front/fan-group/joined")
Call<ApiResponse<PageResponse<Map<String, Object>>>> getJoinedFanGroups(...);
@GET("api/front/fan-group/{groupId}/members")
Call<ApiResponse<PageResponse<Map<String, Object>>>> getFanGroupMembers(...);
@GET("api/front/fan-group/{groupId}/check-joined")
Call<ApiResponse<Map<String, Object>>> checkFanGroupJoined(@Path("groupId") int groupId);
```
## 后台管理前端
### 已有文件
- `Zhibo/admin/src/views/fanGroup/list/index.vue` - 粉丝团列表页面
- `Zhibo/admin/src/api/fanGroup.js` - API接口定义
- `Zhibo/admin/src/router/modules/fanGroup.js` - 路由配置
### 菜单配置
执行以下SQL显示粉丝团菜单
```sql
UPDATE eb_system_menu SET is_show = 1 WHERE id = 663;
```
## 等级规则
粉丝等级根据亲密度自动升级:
- Lv.1: 0-999 亲密度
- Lv.2: 1000-1999 亲密度
- Lv.3: 2000-2999 亲密度
- ...
- Lv.10: 9000+ 亲密度
亲密度获取方式:
- 送礼物(礼物价值 = 亲密度增加值)
- 每日签到(+10亲密度
- 观看直播(每分钟+1亲密度
## 部署步骤
1. 执行SQL修复菜单显示
2. 重新编译后端项目
3. 重新编译Android项目
4. 重启后端服务
## 后续优化
1. 粉丝团聊天功能(基于群组系统扩展)
2. 粉丝团专属礼物
3. 粉丝团排行榜
4. 粉丝团活动