# 充值审批流程诊断报告 ## 🔍 问题描述 用户反馈: 审批通过后订单状态变为"已完成",但用户资金账户余额没有增加。 ## 诊断发现 ### 代码分析 1. **账户余额更新**: 使用 LambdaUpdateWrapper 显式更新 ✅ 2. **流水记录创建**: 跻加了详细的日志输出 ✅ 3. **AssetService.createFlow**: 代码逻辑正确 ✅ ### 可能的问题点 1. **事务未提交**: 虽然使用了 @Transactional, 但事务可能未正确提交 2. **并发问题**: 查询和更新之间可能有其他事务修改了数据 3. **缓存问题**: MyBatis 可能缓存了旧数据 4. **日志未查看**: 需要查看实际的 SQL 执行日志 ## 🧪 诊断步骤 ### 1. 查看审批日志 ```bash # 查找最近的审批日志 grep -A50 "充值审批成功\|账户更新结果" logs/spring.log | tail -20 # 查找 SQL UPDATE 语句 grep "UPDATE account_fund" logs/spring.log | tail -10 # 查找事务相关日志 grep -i "transaction\|commit\|rollback" logs/spring.log | tail -10 ``` ### 2. 直接查询数据库 ```sql -- 查询最近的充值订单 SELECT id, order_no, user_id, amount, status, approve_time FROM order_fund WHERE type = 1 AND status = 3 ORDER BY approve_time DESC LIMIT 5; -- 查询对应的用户资金账户 SELECT af.id, af.user_id, af.balance, af.total_deposit, af.update_time FROM account_fund af WHERE af.user_id IN (SELECT user_id FROM order_fund WHERE type = 1 AND status = 3 ORDER BY approve_time DESC LIMIT 5) ORDER BY af.update_time DESC; -- 查询资金流水记录 SELECT af.id, af.user_id, af.amount, af.balance_before, af.balance_after, af.flow_type, af.create_time FROM account_flow af WHERE af.flow_type = 1 ORDER BY af.create_time DESC LIMIT 10; ``` ### 3. 验证逻辑 - 订单状态 = 3 ✅ - 账户余额增加? ❌ - 流水记录存在? ❌ - 流水记录中的 balanceAfter = 实际余额? ## 🔧 可能的修复方案 ### 方案 1: 添加事务同步验证 在 FundService.approve() 方法最后添加: ```java // 在方法最后验证最终结果 AccountFund finalFund = accountFundMapper.selectById(fund.getId()); System.out.println("[最终验证] 账户余额: " + finalFund.getBalance()); if (!finalFund.getBalance().equals(newBalance)) { throw new RuntimeException("账户余额更新失败!"); } ``` ### 方案 2: 使用数据库锁 ```java // 在查询账户时加锁 SELECT * FROM account_fund WHERE id = ? FOR UPDATE ``` ### 方案 3: 检查事务配置 确保 Spring 事务管理正确配置: ## 📋 下一步 1. 启动服务 2. 执行审批操作 3. 查看日志输出 4. 查询数据库验证 5. 根据结果调整修复方案