228 lines
5.0 KiB
Markdown
228 lines
5.0 KiB
Markdown
# 充值功能修复方案
|
||
|
||
## 📋 问题分析
|
||
|
||
**现象**: 充值功能点击"下一步"报错
|
||
|
||
**可能原因**:
|
||
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 分钟
|
||
**状态**: ⏳ 等待服务器重启
|