zhibo/虚拟货币和礼物系统开发文档.md
2026-01-03 17:01:58 +08:00

509 lines
10 KiB
Markdown
Raw 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.

# 虚拟货币和礼物系统开发文档
## 功能概述
本系统实现了完整的虚拟货币充值和礼物赠送功能,包括:
1. **用户余额管理**
- 查看当前虚拟货币余额
- 充值虚拟货币
- 查看充值记录
- 查看消费记录
2. **礼物系统**
- 查看礼物列表
- 购买礼物送给主播
- 查看送出的礼物记录
- 查看收到的礼物记录(主播)
- 直播间礼物统计
3. **后台管理**
- 主播查看收到的礼物
- 礼物收入统计
- 充值套餐管理
- 礼物配置管理
## 数据库设计
### 1. 用户余额字段
```sql
ALTER TABLE eb_user ADD COLUMN virtual_balance DECIMAL(10,2) DEFAULT 0.00;
```
### 2. 充值记录表 (eb_virtual_currency_recharge)
- id: 充值记录ID
- user_id: 用户ID
- order_no: 订单号
- amount: 充值金额(人民币)
- virtual_amount: 获得的虚拟货币
- payment_method: 支付方式
- payment_status: 支付状态
- create_time: 创建时间
- pay_time: 支付时间
### 3. 交易记录表 (eb_virtual_currency_transaction)
- id: 交易ID
- user_id: 用户ID
- transaction_type: 交易类型recharge/gift/refund
- amount: 交易金额
- balance_after: 交易后余额
- related_id: 关联ID
- description: 交易描述
- create_time: 创建时间
### 4. 礼物配置表 (eb_gift_config)
- id: 礼物ID
- name: 礼物名称
- icon: 礼物图标
- price: 礼物价格
- animation: 动画效果
- sort_order: 排序
- is_enabled: 是否启用
### 5. 礼物记录表 (eb_gift_record)
- id: 记录ID
- sender_id: 送礼者ID
- receiver_id: 接收者ID
- room_id: 直播间ID
- gift_id: 礼物ID
- gift_name: 礼物名称
- gift_price: 礼物价格
- quantity: 数量
- total_price: 总价格
- is_anonymous: 是否匿名
- create_time: 创建时间
### 6. 充值套餐表 (eb_recharge_package)
- id: 套餐ID
- amount: 充值金额
- virtual_amount: 获得虚拟货币
- bonus_amount: 赠送虚拟货币
- title: 套餐标题
- description: 套餐描述
- is_hot: 是否热门
- sort_order: 排序
## API接口
### 虚拟货币相关接口
#### 1. 获取用户余额
```
GET /api/front/virtual-currency/balance
```
响应:
```json
{
"code": 200,
"message": "success",
"data": {
"balance": 100.00,
"userId": 43
}
}
```
#### 2. 获取充值套餐列表
```
GET /api/front/virtual-currency/recharge/packages
```
响应:
```json
{
"code": 200,
"data": [
{
"id": 1,
"amount": 6.00,
"virtual_amount": 60.00,
"bonus_amount": 0.00,
"title": "6元",
"description": "获得60虚拟币",
"is_hot": 0
}
]
}
```
#### 3. 创建充值订单
```
POST /api/front/virtual-currency/recharge/create
```
请求体:
```json
{
"packageId": 1,
"paymentMethod": "alipay"
}
```
响应:
```json
{
"code": 200,
"message": "订单创建成功",
"data": {
"orderNo": "RC20260103165030123456",
"amount": 6.00,
"virtualAmount": 60.00,
"paymentMethod": "alipay"
}
}
```
#### 4. 模拟支付成功(测试用)
```
POST /api/front/virtual-currency/recharge/mock-pay
```
请求体:
```json
{
"orderNo": "RC20260103165030123456"
}
```
#### 5. 获取充值记录
```
GET /api/front/virtual-currency/recharge/records?page=1&limit=20
```
#### 6. 获取消费记录
```
GET /api/front/virtual-currency/transactions?page=1&limit=20
```
### 礼物系统接口
#### 1. 获取礼物列表
```
GET /api/front/gift/list
```
响应:
```json
{
"code": 200,
"data": [
{
"id": 1,
"name": "玫瑰",
"icon": "https://example.com/gifts/rose.png",
"price": 1.00,
"animation": null
}
]
}
```
#### 2. 送礼物
```
POST /api/front/gift/send
```
请求体:
```json
{
"giftId": 1,
"receiverId": 43,
"roomId": 8,
"quantity": 1,
"isAnonymous": false
}
```
响应:
```json
{
"code": 200,
"message": "送礼成功",
"data": {
"giftRecordId": 1,
"giftName": "玫瑰",
"quantity": 1,
"totalPrice": 1.00,
"newBalance": 99.00
}
}
```
#### 3. 获取送出的礼物记录
```
GET /api/front/gift/sent?page=1&limit=20
```
#### 4. 获取收到的礼物记录
```
GET /api/front/gift/received?page=1&limit=20
```
#### 5. 获取直播间礼物统计
```
GET /api/front/gift/room/{roomId}/stats
```
响应:
```json
{
"code": 200,
"data": {
"totalCount": 100,
"totalValue": 1000.00,
"giftRank": [
{
"gift_name": "玫瑰",
"gift_icon": "...",
"total_quantity": 50,
"total_value": 50.00
}
],
"userRank": [
{
"sender_id": 42,
"nickname": "用户A",
"avatar": "...",
"total_value": 500.00
}
]
}
}
```
## Android端实现
### 1. 在个人中心添加"我的余额"入口
`ProfileActivity.java` 中添加:
```java
findViewById(R.id.layout_balance).setOnClickListener(v -> {
Intent intent = new Intent(this, BalanceActivity.class);
startActivity(intent);
});
```
### 2. 余额页面 (BalanceActivity)
功能:
- 显示当前余额
- 充值按钮
- 充值记录和消费记录Tab切换
### 3. 充值页面 (RechargeActivity)
功能:
- 显示充值套餐列表(网格布局)
- 选择支付方式(支付宝/微信)
- 确认充值按钮
### 4. 礼物面板 (GiftPanelDialog)
在直播间页面添加礼物按钮,点击弹出礼物面板:
功能:
- 显示礼物列表
- 选择礼物和数量
- 显示当前余额
- 发送礼物
### 5. 主播收礼记录页面
在主播中心添加"收到的礼物"入口,显示:
- 礼物列表
- 送礼用户信息
- 礼物价值统计
## 部署步骤
### 1. 执行数据库脚本
```bash
mysql -h 1.15.149.240 -u root -p zhibo < virtual_currency_and_gift_system.sql
```
### 2. 编译后端代码
```bash
cd Zhibo/zhibo-h
mvn clean package -DskipTests
```
### 3. 部署后端服务
```bash
# 停止服务
ssh root@1.15.149.240 "cd /root/zhibo && docker-compose stop crmeb-front"
# 上传jar包
scp crmeb-front/target/Crmeb-front.jar root@1.15.149.240:/root/zhibo/
# 启动服务
ssh root@1.15.149.240 "cd /root/zhibo && docker-compose up -d crmeb-front"
```
### 4. 编译Android应用
在Android Studio中编译并安装到设备
## 测试流程
### 1. 测试充值功能
1. 打开APP进入个人中心
2. 点击"我的余额"
3. 点击"立即充值"
4. 选择充值套餐如6元
5. 选择支付方式
6. 点击"确认充值"
7. 系统自动模拟支付成功
8. 返回余额页面,查看余额是否增加
### 2. 测试送礼功能
1. 进入直播间
2. 点击礼物按钮
3. 选择礼物(如玫瑰)
4. 选择数量
5. 点击"发送"
6. 查看余额是否扣除
7. 主播端查看是否收到礼物
### 3. 测试记录查询
1. 在余额页面查看充值记录
2. 查看消费记录
3. 在主播中心查看收到的礼物
## 后续优化
### 1. 支付集成
- 集成支付宝SDK
- 集成微信支付SDK
- 实现真实的支付流程
### 2. 礼物动画
- 添加礼物发送动画
- 添加礼物接收特效
- 实现礼物连击效果
### 3. 提现功能
- 主播可以将收到的礼物提现
- 设置提现规则和手续费
- 实现提现审核流程
### 4. 礼物排行榜
- 实时更新礼物排行榜
- 显示贡献榜
- 添加榜单奖励
### 5. VIP会员
- 充值达到一定金额自动升级VIP
- VIP享受充值优惠
- VIP专属礼物
## 注意事项
1. **安全性**
- 所有金额相关操作必须使用事务
- 充值和消费必须记录详细日志
- 防止并发导致的余额异常
2. **性能优化**
- 礼物列表使用缓存
- 统计数据定时更新
- 大量礼物记录分页加载
3. **用户体验**
- 充值失败要有明确提示
- 余额不足要提示充值
- 礼物发送要有即时反馈
4. **合规性**
- 虚拟货币不能直接提现为人民币
- 需要符合相关法律法规
- 保留完整的交易记录
## 文件清单
### 数据库
- `virtual_currency_and_gift_system.sql` - 数据库表结构和初始数据
### 后端Java文件
- `VirtualCurrencyController.java` - 虚拟货币控制器
- `GiftSystemController.java` - 礼物系统控制器
### Android文件
- `BalanceActivity.java` - 余额页面
- `activity_balance.xml` - 余额页面布局
- `RechargeActivity.java` - 充值页面
- `activity_recharge.xml` - 充值页面布局
- `GiftPanelDialog.java` - 礼物面板对话框
- `RechargePackageAdapter.java` - 充值套餐适配器
- `GiftAdapter.java` - 礼物列表适配器
- `BalancePagerAdapter.java` - 余额页面ViewPager适配器
### API接口定义
需要在 `ApiService.java` 中添加以下接口:
```java
// 虚拟货币相关
@GET("api/front/virtual-currency/balance")
Call<ApiResponse<Map<String, Object>>> getVirtualBalance();
@GET("api/front/virtual-currency/recharge/packages")
Call<ApiResponse<List<Map<String, Object>>>> getRechargePackages();
@POST("api/front/virtual-currency/recharge/create")
Call<ApiResponse<Map<String, Object>>> createRechargeOrder(@Body Map<String, Object> request);
@POST("api/front/virtual-currency/recharge/mock-pay")
Call<ApiResponse<String>> mockPaySuccess(@Body Map<String, Object> request);
@GET("api/front/virtual-currency/recharge/records")
Call<ApiResponse<List<Map<String, Object>>>> getRechargeRecords(
@Query("page") int page,
@Query("limit") int limit
);
@GET("api/front/virtual-currency/transactions")
Call<ApiResponse<List<Map<String, Object>>>> getTransactions(
@Query("page") int page,
@Query("limit") int limit
);
// 礼物系统相关
@GET("api/front/gift/list")
Call<ApiResponse<List<Map<String, Object>>>> getGiftList();
@POST("api/front/gift/send")
Call<ApiResponse<Map<String, Object>>> sendGift(@Body Map<String, Object> request);
@GET("api/front/gift/sent")
Call<ApiResponse<List<Map<String, Object>>>> getSentGifts(
@Query("page") int page,
@Query("limit") int limit
);
@GET("api/front/gift/received")
Call<ApiResponse<List<Map<String, Object>>>> getReceivedGifts(
@Query("page") int page,
@Query("limit") int limit
);
@GET("api/front/gift/room/{roomId}/stats")
Call<ApiResponse<Map<String, Object>>> getRoomGiftStats(@Path("roomId") int roomId);
```
## 开发进度
- [x] 数据库设计
- [x] 后端API接口
- [x] Android余额页面
- [x] Android充值页面
- [ ] Android礼物面板
- [ ] Android礼物记录页面
- [ ] 后台管理页面
- [ ] 支付集成
- [ ] 礼物动画效果
- [ ] 完整测试
## 联系方式
如有问题,请查看相关文档或联系开发团队。