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

106 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 充值审批余额不更新 - 磰急修复方案
## ⚠️ 问题紧急程度: HIGH
用户反馈订单状态已更新,但余额未增加!
## 🎯 磁急修复步骤
### 步骤 1: 重启后端服务(最关键!)
```bash
# 埥找并停止旧进程
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: 数据库验证
```sql
-- 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 方法开始添加:
```java
// 清除可能的缓存
sqlSession.clearCache();
```
### 修复方案 B: 添加最终验证
在 approve 方法最后添加
```java
// 最终验证
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分钟重启服务
- **回滚风险**: 低(只是重启服务)
## 🚀 执行命令
```bash
# 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分钟