502 lines
11 KiB
Markdown
502 lines
11 KiB
Markdown
# 礼物分成配置管理功能说明
|
||
|
||
> **实现时间**: 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 | 100(type=3时) |
|
||
| user_level | INT | 用户等级 | 5(type=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`: 用户ID(type=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钻石
|
||
```
|
||
|
||
**场景2:VIP主播(使用等级配置)**
|
||
```
|
||
礼物总价: 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
|
||
**状态**: ✅ 生产就绪
|