- 新增 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 修复问题:充值功能因缺少冷钱包表而无法使用
4.9 KiB
4.9 KiB
充值功能检查报告
🔍 问题诊断
❌ 核心问题:缺少 cold_wallet 表
数据库初始化脚本 sql/init.sql 中没有创建 cold_wallet 表
影响:
- 后端报错:
ColdWalletService.getDefaultWallet()返回null - 接口失败: 充值接口返回 "系统暂未配置充值地址"
- 前端异常: 用户无法看到充值钱包地址
✅ 已修复内容
1. 更新数据库初始化脚本
文件: sql/init.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- 关联冷钱包IDwallet_address- 钱包地址(冗余)withdraw_contact- 提现联系方式pay_time- 用户打款时间confirm_time- 确认/审批时间
📋 执行步骤
方式一:全新安装
# 1. 创建数据库
mysql -u root -p -e "CREATE DATABASE monisuo DEFAULT CHARSET utf8mb4;"
# 2. 执行初始化脚本(已包含 cold_wallet 表)
mysql -u root -p monisuo < sql/init.sql
方式二:已有数据库(推荐)
# 执行补丁脚本
mysql -u monisuo -p monisuo < sql/patch_cold_wallet.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. 数据库验证
-- 检查表是否创建成功
SHOW TABLES LIKE 'cold_wallet';
-- 检查默认钱包数据
SELECT * FROM cold_wallet WHERE is_default = 1;
-- 检查 order_fund 表结构
DESC order_fund;
2. 接口测试
# 运行测试脚本
./test_deposit_api.sh
3. 前端测试
- 启动后端服务
- 登录前端应用
- 进入"资产"页面
- 点击"充值"按钮
- 输入充值金额
- 检查是否显示钱包地址
🎯 充值流程说明
用户端流程
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)
⚠️ 注意事项
- 冷钱包必须配置: 至少要有一个
is_default=1, status=1的钱包地址 - 权限验证: 所有充值接口需要用户登录(Token 验证)
- 金额验证: 充值金额必须大于 0
- 事务安全: 所有资金操作使用事务(@Transactional)
- 数据冗余: order_fund 表中冗余了 wallet_address,避免关联查询
🚀 下一步建议
- ✅ 立即执行: 运行
sql/patch_cold_wallet.sql补丁 - ✅ 重启后端: 确保新表结构生效
- ✅ 运行测试: 执行
./test_deposit_api.sh验证 - ✅ 前端测试: 在资产页面测试充值功能
生成时间: 2026-03-23 18:10 修复状态: ✅ 代码已修复,等待数据库补丁执行