zhibo/Zhibo/zhibo-h/礼物分成配置管理功能说明.md
2025-12-29 15:12:12 +08:00

502 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 礼物分成配置管理功能说明
> **实现时间**: 2024-12-29
> **功能**: 管理员可配置主播和平台的礼物收益分成比例
> **状态**: ✅ 已完成
---
## 📋 功能概述
系统支持灵活的礼物分成配置,管理员可以设置:
1.**全局默认配置** - 适用于所有主播的默认分成比例
2.**主播等级配置** - 根据主播等级设置不同的分成比例
3.**特定主播配置** - 为特定主播设置专属分成比例
4.**优先级机制** - 特定主播 > 主播等级 > 全局默认
---
## 🎯 配置类型说明
### 1. 全局默认配置 (config_type = 1)
- **适用范围**: 所有主播
- **优先级**: 最低
- **示例**: 主播70%平台30%
- **说明**: 当主播没有专属配置时使用
### 2. 主播等级配置 (config_type = 2)
- **适用范围**: 指定等级的所有主播
- **优先级**: 中等
- **示例**:
- 等级1-3: 主播60%平台40%
- 等级4-6: 主播70%平台30%
- 等级7-10: 主播80%平台20%
### 3. 特定主播配置 (config_type = 3)
- **适用范围**: 指定的单个主播
- **优先级**: 最高
- **示例**: 头部主播可获得85%分成
- **说明**: 用于签约主播或特殊合作
---
## 🔧 数据库表结构
### eb_gift_share_config 表
| 字段 | 类型 | 说明 | 示例 |
|------|------|------|------|
| id | INT | 主键ID | 1 |
| config_name | VARCHAR(100) | 配置名称 | "默认分成配置" |
| config_type | TINYINT | 配置类型 | 1=全局 2=等级 3=特定 |
| user_id | INT | 用户ID | 100type=3时 |
| user_level | INT | 用户等级 | 5type=2时 |
| streamer_ratio | DECIMAL(5,2) | 主播分成比例 | 70.00 |
| platform_ratio | DECIMAL(5,2) | 平台分成比例 | 30.00 |
| status | TINYINT | 状态 | 1=启用 0=禁用 |
| priority | INT | 优先级 | 数字越大优先级越高 |
| description | VARCHAR(500) | 配置说明 | "全局默认配置" |
| is_deleted | TINYINT | 逻辑删除 | 0=未删除 1=已删除 |
| create_time | DATETIME | 创建时间 | 2024-12-29 |
| update_time | DATETIME | 更新时间 | 2024-12-29 |
---
## 📡 后台管理接口
### 1. 获取配置列表
```http
GET /api/admin/gift/share-config/list?pageNum=1&pageSize=20&configType=1&status=1
```
**请求参数**:
- `pageNum`: 页码默认1
- `pageSize`: 每页数量默认20
- `configType`: 配置类型(可选)
- `status`: 状态(可选)
**响应示例**:
```json
{
"code": 200,
"message": "操作成功",
"data": {
"list": [
{
"id": 1,
"configName": "全局默认分成配置",
"configType": 1,
"streamerRatio": 70.00,
"platformRatio": 30.00,
"status": 1,
"priority": 0,
"description": "系统默认分成配置"
}
],
"total": 1,
"pageNum": 1,
"pageSize": 20
}
}
```
### 2. 获取配置详情
```http
GET /api/admin/gift/share-config/{id}
```
### 3. 创建分成配置
```http
POST /api/admin/gift/share-config/create
Content-Type: application/json
{
"configName": "VIP主播分成配置",
"configType": 2,
"userLevel": 5,
"streamerRatio": 80.00,
"platformRatio": 20.00,
"status": 1,
"priority": 10,
"description": "等级5以上的VIP主播可获得80%分成"
}
```
**字段说明**:
- `configName`: 配置名称(必填)
- `configType`: 配置类型必填1/2/3
- `userId`: 用户IDtype=3时必填
- `userLevel`: 用户等级type=2时必填
- `streamerRatio`: 主播分成比例必填0-100
- `platformRatio`: 平台分成比例必填0-100
- `status`: 状态可选默认1
- `priority`: 优先级可选默认0
- `description`: 配置说明(可选)
**验证规则**:
-`streamerRatio + platformRatio = 100`
- ✅ type=2时必须指定userLevel
- ✅ type=3时必须指定userId
- ✅ 不允许重复创建相同配置
### 4. 更新分成配置
```http
PUT /api/admin/gift/share-config/update
Content-Type: application/json
{
"id": 1,
"configName": "全局默认分成配置",
"configType": 1,
"streamerRatio": 75.00,
"platformRatio": 25.00,
"status": 1,
"priority": 0,
"description": "调整为主播75%平台25%"
}
```
### 5. 删除分成配置
```http
DELETE /api/admin/gift/share-config/{id}
```
**注意**: 全局默认配置不允许删除,只能禁用
### 6. 启用/禁用配置
```http
PUT /api/admin/gift/share-config/{id}/status?status=1
```
**参数**:
- `status`: 1=启用0=禁用
### 7. 初始化默认配置
```http
POST /api/admin/gift/share-config/init-default
```
**说明**: 创建系统默认配置主播70%平台30%
---
## 🔄 分成计算逻辑
### 优先级匹配规则
```
用户赠送礼物
查询分成配置(按优先级)
1. 查找特定主播配置config_type=3, user_id=主播ID
↓ 未找到
2. 查找主播等级配置config_type=2, user_level=主播等级)
↓ 未找到
3. 使用全局默认配置config_type=1
↓ 未找到
4. 使用硬编码默认值主播70%平台30%
```
### 计算示例
**场景1普通主播使用全局默认配置**
```
礼物总价: 100钻石
全局配置: 主播70%平台30%
主播收益 = 100 × 0.70 = 70钻石
平台收益 = 100 × 0.30 = 30钻石
```
**场景2VIP主播使用等级配置**
```
礼物总价: 100钻石
主播等级: 5
等级配置: 主播80%平台20%
主播收益 = 100 × 0.80 = 80钻石
平台收益 = 100 × 0.20 = 20钻石
```
**场景3签约主播使用特定主播配置**
```
礼物总价: 100钻石
主播ID: 1001
特定配置: 主播85%平台15%
主播收益 = 100 × 0.85 = 85钻石
平台收益 = 100 × 0.15 = 15钻石
```
---
## 💻 代码使用示例
### 在赠送礼物时使用分成配置
```java
// 计算主播收益
BigDecimal streamerIncome = giftShareConfigService.calculateStreamerIncome(
totalAmount, // 礼物总价
streamerId, // 主播ID
streamerLevel // 主播等级
);
// 计算平台收益
BigDecimal platformIncome = giftShareConfigService.calculatePlatformIncome(
totalAmount,
streamerId,
streamerLevel
);
log.info("礼物分成 - 总金额:{}, 主播收益:{}, 平台收益:{}",
totalAmount, streamerIncome, platformIncome);
```
### 获取分成比例
```java
// 获取主播分成比例(小数形式)
BigDecimal streamerRatio = giftShareConfigService.getStreamerShareRatio(
streamerId,
streamerLevel
);
// 返回: 0.70 (表示70%)
// 获取平台分成比例
BigDecimal platformRatio = giftShareConfigService.getPlatformShareRatio(
streamerId,
streamerLevel
);
// 返回: 0.30 (表示30%)
```
---
## 🧪 测试步骤
### 1. 初始化默认配置
```bash
curl -X POST http://localhost:8080/api/admin/gift/share-config/init-default
```
**预期结果**:
```json
{
"code": 200,
"message": "默认配置初始化成功"
}
```
### 2. 创建等级配置
```bash
curl -X POST http://localhost:8080/api/admin/gift/share-config/create \
-H "Content-Type: application/json" \
-d '{
"configName": "高级主播分成",
"configType": 2,
"userLevel": 5,
"streamerRatio": 80.00,
"platformRatio": 20.00,
"status": 1,
"priority": 10,
"description": "等级5以上主播获得80%分成"
}'
```
### 3. 创建特定主播配置
```bash
curl -X POST http://localhost:8080/api/admin/gift/share-config/create \
-H "Content-Type: application/json" \
-d '{
"configName": "签约主播专属分成",
"configType": 3,
"userId": 1001,
"streamerRatio": 85.00,
"platformRatio": 15.00,
"status": 1,
"priority": 20,
"description": "签约主播ID 1001的专属分成"
}'
```
### 4. 测试赠送礼物
```bash
# 赠送礼物给普通主播使用全局默认70%
curl -X POST http://localhost:8080/api/front/gift/send \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {token}" \
-d '{
"roomId": 1,
"streamerId": 100,
"giftId": 1,
"count": 10
}'
```
**查看日志**:
```
礼物分成 - 总金额:100, 主播收益:70, 平台收益:30
```
### 5. 验证数据库
```sql
-- 查询配置列表
SELECT * FROM eb_gift_share_config WHERE is_deleted = 0;
-- 查询礼物记录
SELECT * FROM eb_gift_record ORDER BY create_time DESC LIMIT 10;
-- 查询用户账单
SELECT * FROM eb_user_bill WHERE category = 'gift' ORDER BY create_time DESC LIMIT 10;
```
---
## 📊 配置示例
### 示例1标准分成体系
| 配置名称 | 类型 | 条件 | 主播% | 平台% | 优先级 |
|---------|------|------|-------|-------|--------|
| 全局默认 | 全局 | - | 70 | 30 | 0 |
| 新手主播 | 等级 | 等级1-2 | 60 | 40 | 5 |
| 普通主播 | 等级 | 等级3-5 | 70 | 30 | 10 |
| 高级主播 | 等级 | 等级6-8 | 80 | 20 | 15 |
| 顶级主播 | 等级 | 等级9-10 | 85 | 15 | 20 |
### 示例2签约主播体系
| 配置名称 | 类型 | 主播ID | 主播% | 平台% | 优先级 |
|---------|------|--------|-------|-------|--------|
| 签约主播A | 特定 | 1001 | 90 | 10 | 100 |
| 签约主播B | 特定 | 1002 | 85 | 15 | 100 |
| 签约主播C | 特定 | 1003 | 88 | 12 | 100 |
---
## ⚠️ 注意事项
### 1. 分成比例验证
- ✅ 主播分成 + 平台分成 = 100%
- ✅ 创建和更新时自动验证
- ❌ 不符合规则会返回错误
### 2. 配置优先级
- 数字越大优先级越高
- 相同优先级时,按配置类型排序(特定>等级>全局)
- 建议全局0等级5-20特定100+
### 3. 全局默认配置
- 至少保留一个启用的全局默认配置
- 不允许删除全局默认配置
- 可以禁用后创建新的全局配置
### 4. 性能优化
- 分成配置会被频繁查询
- 建议添加Redis缓存
- 配置更新时清除缓存
---
## 🚀 扩展功能建议
### 1. 时间段分成
```java
// 扩展字段使用
ext_field1: "活动期间分成比例"
ext_field2: 开始时间戳
ext_field3: 结束时间戳
```
### 2. 礼物类型分成
```java
// 不同礼物类型不同分成
普通礼物: 70%
豪华礼物: 75%
限定礼物: 80%
```
### 3. 累计消费分成
```java
// 根据用户累计消费调整分成
消费<1000: 70%
消费1000-5000: 75%
消费>5000: 80%
```
### 4. 分成历史记录
```sql
CREATE TABLE eb_gift_share_history (
id BIGINT PRIMARY KEY,
record_id BIGINT,
config_id INT,
streamer_income DECIMAL(10,2),
platform_income DECIMAL(10,2),
create_time DATETIME
);
```
---
## 📝 相关文件
### 新增文件
1. `GiftShareConfig.java` - 分成配置实体类
2. `GiftShareConfigRequest.java` - 配置请求对象
3. `GiftShareConfigDao.java` - 数据访问层
4. `GiftShareConfigService.java` - 服务接口
5. `GiftShareConfigServiceImpl.java` - 服务实现
6. `GiftShareConfigController.java` - 后台管理接口
### 修改文件
1. `GiftController.java` - 使用分成配置计算收益
---
## ✅ 功能检查清单
- [x] 数据库表自动创建
- [x] 三种配置类型支持
- [x] 优先级匹配机制
- [x] 分成比例验证
- [x] 后台管理接口
- [x] 赠送礼物集成
- [x] 日志记录
- [x] 异常处理
- [x] 初始化默认配置
- [x] 逻辑删除支持
---
**实现完成时间**: 2024-12-29
**开发者**: Kiro AI Assistant
**状态**: ✅ 生产就绪