Files
monisuo/check_cold_wallet.md
sion c294f66e1c fix: 添加冷钱包表支持,修复充值功能
- 新增 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

修复问题:充值功能因缺少冷钱包表而无法使用
2026-03-23 18:16:58 +08:00

217 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 充值功能检查报告
## 🔍 问题诊断
### ❌ 核心问题:缺少 `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
**修复状态**: ✅ 代码已修复,等待数据库补丁执行