# 充值功能检查报告 ## 🔍 问题诊断 ### ❌ 核心问题:缺少 `cold_wallet` 表 **数据库初始化脚本 `sql/init.sql` 中没有创建 `cold_wallet` 表** #### 影响: 1. **后端报错**: `ColdWalletService.getDefaultWallet()` 返回 `null` 2. **接口失败**: 充值接口返回 "系统暂未配置充值地址" 3. **前端异常**: 用户无法看到充值钱包地址 --- ## ✅ 已修复内容 ### 1. 更新数据库初始化脚本 **文件**: `sql/init.sql` **新增内容**: ```sql -- 11. 冷钱包地址表 CREATE TABLE `cold_wallet` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '钱包名称', `address` varchar(255) NOT NULL COMMENT '钱包地址', `network` varchar(20) NOT NULL DEFAULT 'TRC20' COMMENT '网络类型', `is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否默认', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入默认测试钱包 INSERT INTO `cold_wallet` VALUES ('USDT-TRC20 主钱包', 'TRX1234567890abcdefghijklmnopqrstuvwxyz1234', 'TRC20', 1, 1); ``` ### 2. 创建补丁脚本 **文件**: `sql/patch_cold_wallet.sql` 用于已有数据库的增量更新。 ### 3. 补充 order_fund 表字段 **新增字段**: - `wallet_id` - 关联冷钱包ID - `wallet_address` - 钱包地址(冗余) - `withdraw_contact` - 提现联系方式 - `pay_time` - 用户打款时间 - `confirm_time` - 确认/审批时间 --- ## 📋 执行步骤 ### 方式一:全新安装 ```bash # 1. 创建数据库 mysql -u root -p -e "CREATE DATABASE monisuo DEFAULT CHARSET utf8mb4;" # 2. 执行初始化脚本(已包含 cold_wallet 表) mysql -u root -p monisuo < sql/init.sql ``` ### 方式二:已有数据库(推荐) ```bash # 执行补丁脚本 mysql -u monisuo -p monisuo < sql/patch_cold_wallet.sql ``` ### 方式三:手动执行 SQL ```sql -- 连接数据库 mysql -u monisuo -p monisuo -- 执行以下 SQL(从 sql/patch_cold_wallet.sql 复制) CREATE TABLE `cold_wallet` (...); INSERT INTO `cold_wallet` VALUES (...); ALTER TABLE `order_fund` ADD COLUMN ...; ``` --- ## 🧪 测试验证 ### 1. 数据库验证 ```sql -- 检查表是否创建成功 SHOW TABLES LIKE 'cold_wallet'; -- 检查默认钱包数据 SELECT * FROM cold_wallet WHERE is_default = 1; -- 检查 order_fund 表结构 DESC order_fund; ``` ### 2. 接口测试 ```bash # 运行测试脚本 ./test_deposit_api.sh ``` ### 3. 前端测试 1. 启动后端服务 2. 登录前端应用 3. 进入"资产"页面 4. 点击"充值"按钮 5. 输入充值金额 6. 检查是否显示钱包地址 --- ## 🎯 充值流程说明 ### 用户端流程 ``` 1. 用户申请充值 POST /api/fund/deposit 参数: { amount: "100", remark: "充值" } 2. 系统返回充值信息 返回: { orderNo: "FD20260323...", walletAddress: "TRX123...", walletNetwork: "TRC20", amount: "100" } 3. 用户线下打款到指定地址 4. 用户确认已打款 POST /api/fund/confirmPay 参数: { orderNo: "FD20260323..." } 5. 等待管理员审批 订单状态: 待确认 (status=2) ``` ### 管理员审批流程 ``` 1. 查看待审批订单 GET /admin/fund/orders?status=2 2. 审批通过/驳回 POST /admin/fund/approve 参数: { orderNo: "FD20260323...", status: 2, // 2=通过, 3=驳回 rejectReason: "驳回原因", adminRemark: "管理员备注" } 3. 审批通过后自动入账 - 用户余额增加 - 记录资金流水 ``` --- ## 📊 订单状态流转 ### 充值订单 ``` 申请充值 → 待付款(1) → 用户确认打款 → 待确认(2) → 管理员审批 ↓ 已完成(3) / 已驳回(4) 用户可随时取消 → 已取消(5) ``` ### 提现订单 ``` 申请提现 → 待审批(1) → 管理员审批 → 已完成(2) / 已驳回(3) ↓ 驳回后自动解冻余额 用户可随时取消 → 已取消(4) ``` --- ## ⚠️ 注意事项 1. **冷钱包必须配置**: 至少要有一个 `is_default=1, status=1` 的钱包地址 2. **权限验证**: 所有充值接口需要用户登录(Token 验证) 3. **金额验证**: 充值金额必须大于 0 4. **事务安全**: 所有资金操作使用事务(@Transactional) 5. **数据冗余**: order_fund 表中冗余了 wallet_address,避免关联查询 --- ## 🚀 下一步建议 1. ✅ **立即执行**: 运行 `sql/patch_cold_wallet.sql` 补丁 2. ✅ **重启后端**: 确保新表结构生效 3. ✅ **运行测试**: 执行 `./test_deposit_api.sh` 验证 4. ✅ **前端测试**: 在资产页面测试充值功能 --- **生成时间**: 2026-03-23 18:10 **修复状态**: ✅ 代码已修复,等待数据库补丁执行