10 KiB
10 KiB
虚拟货币和礼物系统开发文档
功能概述
本系统实现了完整的虚拟货币充值和礼物赠送功能,包括:
-
用户余额管理
- 查看当前虚拟货币余额
- 充值虚拟货币
- 查看充值记录
- 查看消费记录
-
礼物系统
- 查看礼物列表
- 购买礼物送给主播
- 查看送出的礼物记录
- 查看收到的礼物记录(主播)
- 直播间礼物统计
-
后台管理
- 主播查看收到的礼物
- 礼物收入统计
- 充值套餐管理
- 礼物配置管理
数据库设计
1. 用户余额字段
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
响应:
{
"code": 200,
"message": "success",
"data": {
"balance": 100.00,
"userId": 43
}
}
2. 获取充值套餐列表
GET /api/front/virtual-currency/recharge/packages
响应:
{
"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
请求体:
{
"packageId": 1,
"paymentMethod": "alipay"
}
响应:
{
"code": 200,
"message": "订单创建成功",
"data": {
"orderNo": "RC20260103165030123456",
"amount": 6.00,
"virtualAmount": 60.00,
"paymentMethod": "alipay"
}
}
4. 模拟支付成功(测试用)
POST /api/front/virtual-currency/recharge/mock-pay
请求体:
{
"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
响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "玫瑰",
"icon": "https://example.com/gifts/rose.png",
"price": 1.00,
"animation": null
}
]
}
2. 送礼物
POST /api/front/gift/send
请求体:
{
"giftId": 1,
"receiverId": 43,
"roomId": 8,
"quantity": 1,
"isAnonymous": false
}
响应:
{
"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
响应:
{
"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 中添加:
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. 执行数据库脚本
mysql -h 1.15.149.240 -u root -p zhibo < virtual_currency_and_gift_system.sql
2. 编译后端代码
cd Zhibo/zhibo-h
mvn clean package -DskipTests
3. 部署后端服务
# 停止服务
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. 测试充值功能
- 打开APP,进入个人中心
- 点击"我的余额"
- 点击"立即充值"
- 选择充值套餐(如6元)
- 选择支付方式
- 点击"确认充值"
- 系统自动模拟支付成功
- 返回余额页面,查看余额是否增加
2. 测试送礼功能
- 进入直播间
- 点击礼物按钮
- 选择礼物(如玫瑰)
- 选择数量
- 点击"发送"
- 查看余额是否扣除
- 主播端查看是否收到礼物
3. 测试记录查询
- 在余额页面查看充值记录
- 查看消费记录
- 在主播中心查看收到的礼物
后续优化
1. 支付集成
- 集成支付宝SDK
- 集成微信支付SDK
- 实现真实的支付流程
2. 礼物动画
- 添加礼物发送动画
- 添加礼物接收特效
- 实现礼物连击效果
3. 提现功能
- 主播可以将收到的礼物提现
- 设置提现规则和手续费
- 实现提现审核流程
4. 礼物排行榜
- 实时更新礼物排行榜
- 显示贡献榜
- 添加榜单奖励
5. VIP会员
- 充值达到一定金额自动升级VIP
- VIP享受充值优惠
- VIP专属礼物
注意事项
-
安全性
- 所有金额相关操作必须使用事务
- 充值和消费必须记录详细日志
- 防止并发导致的余额异常
-
性能优化
- 礼物列表使用缓存
- 统计数据定时更新
- 大量礼物记录分页加载
-
用户体验
- 充值失败要有明确提示
- 余额不足要提示充值
- 礼物发送要有即时反馈
-
合规性
- 虚拟货币不能直接提现为人民币
- 需要符合相关法律法规
- 保留完整的交易记录
文件清单
数据库
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 中添加以下接口:
// 虚拟货币相关
@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);
开发进度
- 数据库设计
- 后端API接口
- Android余额页面
- Android充值页面
- Android礼物面板
- Android礼物记录页面
- 后台管理页面
- 支付集成
- 礼物动画效果
- 完整测试
联系方式
如有问题,请查看相关文档或联系开发团队。