5.0 KiB
5.0 KiB
充值功能修复方案
📋 问题分析
现象: 充值功能点击"下一步"报错
可能原因:
- ✅ StackOverflowError(已修复)
- ⚠️ 前端解析响应错误
- ⚠️ 后端异常处理不当
🔍 诊断步骤
1. 检查后端日志
# 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. 测试后端接口
# 获取 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. 检查前端日志
在浏览器开发者工具中:
- 打开 Console 选项卡
- 查看 Network 选项卡
- 点击"充值"按钮
- 查看请求和响应
🛠️ 修复方案
方案 1: 重启后端服务(推荐)
# 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 中添加更详细的错误信息:
@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 中改进错误处理:
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: 数据库检查
# 检查冷钱包数据
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. 后端测试
# 运行测试脚本
cd /path/to/monisuo
./test_fund_flow.sh
2. 前端测试
- 打开用户端应用
- 登录账户
- 进入资产页面
- 点击充值按钮
- 输入金额(如 100)
- 点击"下一步"
- 预期结果: 显示钱包地址对话框
3. 验证清单
- 后端服务运行正常
- 充值接口返回正确
- 前端显示钱包地址
- 无错误提示
🚀 快速修复
如果问题紧急,可以直接执行:
# 一键修复脚本
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
📞 技术支持
如果以上方案都无法解决,请提供:
-
后端日志:
tail -100 /var/log/monisuo/app.log -
浏览器控制台错误:
- F12 打开开发者工具
- Console 选项卡的错误信息
- Network 选项卡的请求/响应
-
复现步骤:
- 详细描述操作步骤
- 输入的金额
- 期望结果 vs 实际结果
修复优先级: 🔴 高 预计修复时间: 5-10 分钟 状态: ⏳ 等待服务器重启