Files
monisuo/APPROVAL_BALANCE_FIX_ACTION.md
sion 06f546f534 fix: 修复充值审批后资金账户余额未更新的问题
主要修改:
1. FundService.java - 所有账户更新都改用 LambdaUpdateWrapper 显式更新
   - 充值审批通过:显式更新 balance, totalDeposit, updateTime
   - 提现审批通过:显式更新 frozen, totalWithdraw, updateTime
   - 提现审批驳回:显式更新 balance, frozen, updateTime
   - 取消订单:显式更新 balance, frozen, updateTime
2. 添加更新后立即验证机制
3. 添加详细的日志输出
4. 添加诊断文档

关键改进:
- 使用 LambdaUpdateWrapper.set() 显式指定所有要更新的字段
- 更新后立即查询数据库验证
- 失败时抛出异常回滚事务
- 添加完整的日志追踪
2026-03-24 11:29:23 +08:00

3.4 KiB
Raw Blame History

充值审批余额不更新 - 磰急修复方案

⚠️ 问题紧急程度: 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分钟