Files
monisuo/DEPOSIT_FIX_GUIDE.md

228 lines
5.0 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.
# 充值功能修复方案
## 📋 问题分析
**现象**: 充值功能点击"下一步"报错
**可能原因**:
1. ✅ StackOverflowError已修复
2. ⚠️ 前端解析响应错误
3. ⚠️ 后端异常处理不当
## 🔍 诊断步骤
### 1. 检查后端日志
```bash
# SSH 登录服务器
ssh root@8.155.172.147
# 查看最新错误日志
tail -f /var/log/monisuo/app.log | grep -A 50 ERROR
# 查看最近 100 行日志
tail -100 /var/log/monisuo/app.log
```
### 2. 测试后端接口
```bash
# 获取 Token先登录
curl -X POST http://localhost:5010/api/user/login \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"test123456"}'
# 测试充值接口(替换 YOUR_TOKEN
curl -X POST http://localhost:5010/api/fund/deposit \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"amount":"100","remark":"测试充值"}'
```
### 3. 检查前端日志
在浏览器开发者工具中:
1. 打开 Console 选项卡
2. 查看 Network 选项卡
3. 点击"充值"按钮
4. 查看请求和响应
## 🛠️ 修复方案
### 方案 1: 重启后端服务(推荐)
```bash
# SSH 登录服务器
ssh root@8.155.172.147
# 拉取最新代码
cd /path/to/monisuo
git pull origin main
# 重启服务
systemctl restart monisuo
# 查看日志
tail -f /var/log/monisuo/app.log
```
### 方案 2: 增强错误处理
如果重启后问题仍然存在,需要增强错误处理。
#### 后端改进
`FundController.java` 中添加更详细的错误信息:
```java
@PostMapping("/deposit")
public Result<Map<String, Object>> deposit(@RequestBody Map<String, Object> params) {
try {
Long userId = UserContext.getUserId();
if (userId == null) {
return Result.unauthorized("请先登录");
}
Object amountObj = params.get("amount");
if (amountObj == null) {
return Result.fail("充值金额不能为空");
}
BigDecimal amount;
try {
amount = new BigDecimal(amountObj.toString());
} catch (NumberFormatException e) {
return Result.fail("充值金额格式错误");
}
if (amount.compareTo(BigDecimal.ZERO) <= 0) {
return Result.fail("充值金额必须大于0");
}
String remark = (String) params.get("remark");
Map<String, Object> result = fundService.deposit(userId, amount, remark);
return Result.success("申请成功,请完成打款", result);
} catch (Exception e) {
e.printStackTrace(); // 打印完整堆栈
return Result.fail("充值申请失败: " + e.getMessage());
}
}
```
#### 前端改进
`asset_page.dart` 中改进错误处理:
```dart
onPressed: () async {
if (formKey.currentState!.saveAndValidate()) {
Navigator.of(ctx).pop();
try {
final response = await context.read<AssetProvider>().deposit(
amount: amountController.text,
);
if (context.mounted) {
if (response.success && response.data != null) {
_showDepositResultDialog(context, response.data!);
} else {
_showResultDialog(
context,
'申请失败',
response.message ?? '未知错误,请稍后重试',
);
}
}
} catch (e) {
if (context.mounted) {
_showResultDialog(
context,
'申请失败',
'充值申请异常: $e',
);
}
}
}
},
```
### 方案 3: 数据库检查
```bash
# 检查冷钱包数据
mysql -h 8.155.172.147 -P 3306 -u monisuo -pJPJ8wYicSGC8aRnk monisuo \
-e "SELECT * FROM cold_wallet WHERE is_default=1 AND status=1;"
# 检查用户资金账户
mysql -h 8.155.172.147 -P 3306 -u monisuo -pJPJ8wYicSGC8aRnk monisuo \
-e "SELECT * FROM account_fund WHERE user_id=YOUR_USER_ID;"
```
## 📊 测试验证
### 1. 后端测试
```bash
# 运行测试脚本
cd /path/to/monisuo
./test_fund_flow.sh
```
### 2. 前端测试
1. 打开用户端应用
2. 登录账户
3. 进入资产页面
4. 点击充值按钮
5. 输入金额(如 100
6. 点击"下一步"
7. **预期结果**: 显示钱包地址对话框
### 3. 验证清单
- [ ] 后端服务运行正常
- [ ] 充值接口返回正确
- [ ] 前端显示钱包地址
- [ ] 无错误提示
## 🚀 快速修复
如果问题紧急,可以直接执行:
```bash
# 一键修复脚本
ssh root@8.155.172.147 << 'EOF'
cd /path/to/monisuo
git pull origin main
systemctl restart monisuo
sleep 5
systemctl status monisuo
tail -50 /var/log/monisuo/app.log
EOF
```
## 📞 技术支持
如果以上方案都无法解决,请提供:
1. **后端日志**:
```bash
tail -100 /var/log/monisuo/app.log
```
2. **浏览器控制台错误**:
- F12 打开开发者工具
- Console 选项卡的错误信息
- Network 选项卡的请求/响应
3. **复现步骤**:
- 详细描述操作步骤
- 输入的金额
- 期望结果 vs 实际结果
---
**修复优先级**: 🔴 高
**预计修复时间**: 5-10 分钟
**状态**: ⏳ 等待服务器重启