主要修改: 1. FundService.java - 所有账户更新都改用 LambdaUpdateWrapper 显式更新 - 充值审批通过:显式更新 balance, totalDeposit, updateTime - 提现审批通过:显式更新 frozen, totalWithdraw, updateTime - 提现审批驳回:显式更新 balance, frozen, updateTime - 取消订单:显式更新 balance, frozen, updateTime 2. 添加更新后立即验证机制 3. 添加详细的日志输出 4. 添加诊断文档 关键改进: - 使用 LambdaUpdateWrapper.set() 显式指定所有要更新的字段 - 更新后立即查询数据库验证 - 失败时抛出异常回滚事务 - 添加完整的日志追踪
3.4 KiB
3.4 KiB
充值审批余额不更新 - 磰急修复方案
⚠️ 问题紧急程度: HIGH
用户反馈订单状态已更新,但余额未增加!
🎯 磁急修复步骤
步骤 1: 重启后端服务(最关键!)
# 埥找并停止旧进程
ps aux | grep monisuo
pkill -f monisuo-1.0.jar
# 重新启动
cd ~/Desktop/projects/monisuo
java -jar target/monisuo-1.0.jar --server.port=5010
# 实时查看日志
tail -f logs/spring.log | grep -A20 "FundService.approve"
步骤 2: 查看关键日志
审批时应该看到:
[FundService.approve] 步骤1: 查询订单...
- 订单ID: 123
- 订单类型: 充值
- 当前状态: 2
[FundService.approve] 步骤2: 查询资金账户...
- 账户ID: 456
- 余额: 100.00000000 <-- 这是旧余额
[FundService.approve] 步骤4: 处理充值通过...
- 审批前余额: 100.00000000
- 准备更新账户余额: 200.00000000
- 执行 SQL UPDATE (使用 LambdaUpdateWrapper)...
- 账户更新结果: 1 (1=成功, 0=失败)
- 验证更新后余额: 200.00000000 <-- 确认更新成功!
[FundService.approve] 创建资金流水记录...
- 流水记录创建成功
[充值审批成功] 订单号: xxx, 用户ID: yyy, 充值金额: 100 USDT
步骤 3: 数据库验证
-- 1. 查询订单状态
SELECT order_no, status, approve_time FROM order_fund WHERE order_no = '订单号';
-- 2. 查询账户余额(关键!)
SELECT user_id, balance, total_deposit, update_time
FROM account_fund
WHERE user_id = 用户ID;
-- 3. 查询流水记录
SELECT * FROM account_flow
WHERE related_order_no = '订单号'
ORDER BY create_time DESC;
🔧 如果重启后问题依然存在
修复方案 A: 强制刷新 MyBatis 缓存
在 approve 方法开始添加:
// 清除可能的缓存
sqlSession.clearCache();
修复方案 B: 添加最终验证
在 approve 方法最后添加
// 最终验证
AccountFund finalCheck = accountFundMapper.selectById(fund.getId());
System.out.println("[最终检查] 数据库中的实际余额: " + finalCheck.getBalance());
if (!finalCheck.getBalance().equals(newBalance)) {
System.err.println("[严重错误] 余额更新失败! 期望: " + newBalance + ", 实际: " + finalCheck.getBalance());
throw new RuntimeException("余额更新失败,请联系管理员");
}
修复方案 C: 检查是否有异常被吞掉
检查 GlobalExceptionHandler 是否捕获了异常
📊 风险评估
- 风险等级: 中等
- 影响范围: 充值功能不可用
- 修复时间: 5-10分钟(重启服务)
- 回滚风险: 低(只是重启服务)
🚀 执行命令
# 1. 重启服务
cd ~/Desktop/projects/monisuo
pkill -f monisuo-1.0.jar
nohup java -jar target/monisuo-1.0.jar > logs/spring.log 2>&1 &
# 2. 查看日志
tail -f logs/spring.log | grep --line-buffer -A30 "FundService.approve"
# 3. 测试审批
# 使用前端或 curl 测试
# 4. 查看日志输出
grep -A50 "充值审批成功" logs/spring.log
✅ 成功标志
看到以下日志说明修复成功:
✅ 账户更新结果: 1
✅ 验证更新后余额: xxx (新余额)
✅ 最终检查] 数据库中的实际余额: xxx (新余额)
✅ 充值审批成功
❌ 失败标志
❌ 账户更新结果: 0
❌ 余额更新失败
❌ Transaction rolled back
最后更新: 2026-03-24 09:55 状态: 等待重启服务并测试 预期修复时间: 5-10分钟