- 新增 cold_wallet 表结构及默认数据 - 补充 order_fund 表字段(wallet_id, wallet_address, pay_time, confirm_time, withdraw_contact) - 创建数据库补丁脚本 sql/patch_cold_wallet.sql - 创建充值功能测试脚本 test_deposit_api.sh - 创建数据库检查脚本 check_database.sh - 更新充值功能检查报告 check_cold_wallet.md 修复问题:充值功能因缺少冷钱包表而无法使用
217 lines
4.9 KiB
Markdown
217 lines
4.9 KiB
Markdown
# 充值功能检查报告
|
||
|
||
## 🔍 问题诊断
|
||
|
||
### ❌ 核心问题:缺少 `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
|
||
**修复状态**: ✅ 代码已修复,等待数据库补丁执行
|