Files
monisuo/DEPOSIT_FIX_GUIDE.md

5.0 KiB
Raw Blame History

充值功能修复方案

📋 问题分析

现象: 充值功能点击"下一步"报错

可能原因:

  1. StackOverflowError已修复
  2. ⚠️ 前端解析响应错误
  3. ⚠️ 后端异常处理不当

🔍 诊断步骤

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. 检查前端日志

在浏览器开发者工具中:

  1. 打开 Console 选项卡
  2. 查看 Network 选项卡
  3. 点击"充值"按钮
  4. 查看请求和响应

🛠️ 修复方案

方案 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. 前端测试

  1. 打开用户端应用
  2. 登录账户
  3. 进入资产页面
  4. 点击充值按钮
  5. 输入金额(如 100
  6. 点击"下一步"
  7. 预期结果: 显示钱包地址对话框

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

📞 技术支持

如果以上方案都无法解决,请提供:

  1. 后端日志:

    tail -100 /var/log/monisuo/app.log
    
  2. 浏览器控制台错误:

    • F12 打开开发者工具
    • Console 选项卡的错误信息
    • Network 选项卡的请求/响应
  3. 复现步骤:

    • 详细描述操作步骤
    • 输入的金额
    • 期望结果 vs 实际结果

修复优先级: 🔴预计修复时间: 5-10 分钟 状态: 等待服务器重启