# 虚拟货币和礼物系统开发文档 ## 功能概述 本系统实现了完整的虚拟货币充值和礼物赠送功能,包括: 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>> getVirtualBalance(); @GET("api/front/virtual-currency/recharge/packages") Call>>> getRechargePackages(); @POST("api/front/virtual-currency/recharge/create") Call>> createRechargeOrder(@Body Map request); @POST("api/front/virtual-currency/recharge/mock-pay") Call> mockPaySuccess(@Body Map request); @GET("api/front/virtual-currency/recharge/records") Call>>> getRechargeRecords( @Query("page") int page, @Query("limit") int limit ); @GET("api/front/virtual-currency/transactions") Call>>> getTransactions( @Query("page") int page, @Query("limit") int limit ); // 礼物系统相关 @GET("api/front/gift/list") Call>>> getGiftList(); @POST("api/front/gift/send") Call>> sendGift(@Body Map request); @GET("api/front/gift/sent") Call>>> getSentGifts( @Query("page") int page, @Query("limit") int limit ); @GET("api/front/gift/received") Call>>> getReceivedGifts( @Query("page") int page, @Query("limit") int limit ); @GET("api/front/gift/room/{roomId}/stats") Call>> getRoomGiftStats(@Path("roomId") int roomId); ``` ## 开发进度 - [x] 数据库设计 - [x] 后端API接口 - [x] Android余额页面 - [x] Android充值页面 - [ ] Android礼物面板 - [ ] Android礼物记录页面 - [ ] 后台管理页面 - [ ] 支付集成 - [ ] 礼物动画效果 - [ ] 完整测试 ## 联系方式 如有问题,请查看相关文档或联系开发团队。