106 lines
3.4 KiB
Markdown
106 lines
3.4 KiB
Markdown
|
|
# 充值审批余额不更新 - 磰急修复方案
|
|||
|
|
|
|||
|
|
## ⚠️ 问题紧急程度: 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分钟
|