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