Files
monisuo/check_cold_wallet.md

217 lines
4.9 KiB
Markdown
Raw Normal View History

# 充值功能检查报告
## 🔍 问题诊断
### ❌ 核心问题:缺少 `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
**修复状态**: ✅ 代码已修复,等待数据库补丁执行