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 分钟
|
|||
|
|
**状态**: ⏳ 等待服务器重启
|