Files
monisuo/FIX_SUMMARY.md
sion 4f17e7ea8a fix: 修复订单审批状态不更新的问题
主要修复:
1. 添加 MetaObjectHandler 自动填充时间字段
2. 启用 @EnableTransactionManagement 显式事务管理
3. 使用 LambdaUpdateWrapper 强制更新订单状态
4. 完善 MyBatis Plus 配置和字段更新策略
5. 添加详细的调试日志配置
6. 前端集成 vconsole 调试工具

关键修改文件:
- SpcCloudApplication.java: 添加 @EnableTransactionManagement
- FundService.java: 使用 LambdaUpdateWrapper 显式更新
- MyBatisPlusMetaObjectHandler.java: 自动填充时间字段
- application-dev.yml: 完善配置和日志
- monisuo-admin: 添加 vconsole 调试工具
2026-03-24 09:41:23 +08:00

5.7 KiB
Raw Blame History

审批订单问题修复总结

🎯 任务目标

深度排查和修复管理员审批充值订单后状态未变化的问题

已完成的工作

1. 代码分析和问题定位

  • 检查了前端调用代码 (orders.vue)
  • 检查了前端 API 定义 (monisuo-admin.api.ts)
  • 检查了后端接口定义 (AdminController.java)
  • 检查了业务逻辑实现 (FundService.java)
  • 验证了状态映射逻辑正确

2. 添加详细调试日志

AdminController.approveOrder()

- 接收参数的完整记录
- 参数解析结果
- 参数校验结果
- FundService 调用追踪
- 异常捕获和堆栈打印

FundService.approve()

- 步骤1: 查询订单含完整订单信息
- 步骤2: 查询资金账户含完整账户信息
- 步骤3: 确定最终状态
- 步骤4: 处理审批逻辑
  - 充值通过增加余额 + 记录流水
  - 提现通过减少冻结 + 记录流水
  - 充值驳回记录驳回原因
  - 提现驳回解冻退款 + 记录流水
- 步骤5: 更新订单状态
- 步骤6: 验证更新结果重新查询确认
- 每个数据库操作的返回值记录

3. 创建测试脚本

quick_test.sh

快速测试脚本,执行基本审批流程并验证结果

test_approve_order.sh

完整测试脚本,包含详细的步骤说明和结果验证

diagnose_approval.sh

诊断脚本,检查所有可能的问题点:

  • 后端服务状态
  • 登录验证
  • 订单状态验证
  • 资金账户变化验证
  • 完整的审批流程测试

4. 创建文档

APPROVAL_DEBUG_REPORT.md

详细的排查报告,包含:

  • 问题描述
  • 已完成的修复
  • 日志输出示例
  • 测试步骤
  • 可能的问题和解决方案
  • 数据库验证 SQL
  • 状态映射规则

📊 关键发现

1. 前端调用正确

// orders.vue
approveMutation.mutateAsync({
  orderNo: currentOrder.value.orderNo,
  status: approveStatus.value, // 2=通过, 3=驳回
  rejectReason: rejectReason.value,
  adminRemark: adminRemark.value,
})

2. 后端接口定义正确

// AdminController.java
@PostMapping("/admin/order/approve")
public Result<Void> approveOrder(@RequestBody Map<String, Object> params)

3. 状态映射逻辑正确

// FundService.java
if (order.getType() == 1) {
    // 充值订单: 2=通过->3(已完成), 3=驳回->4(已驳回)
    finalStatus = (status == 2) ? 3 : 4;
} else {
    // 提现订单: 2=通过->2(已完成), 3=驳回->3(已驳回)
    finalStatus = status;
}

4. 事务配置正确

@Transactional
public void approve(Long adminId, String adminName, String orderNo, 
                    Integer status, String rejectReason, String adminRemark)

🔍 可能的问题点

1. 日志输出问题

  • System.out.println 可能被重定向到文件
  • 可能被日志框架过滤
  • 解决: 查看应用日志文件或调整日志级别

2. 数据库更新问题

  • updateById() 返回值应该是 1
  • 如果返回 0说明更新失败
  • 解决: 检查日志中的 "订单更新结果" 和 "账户更新结果"

3. 事务提交问题

  • @Transactional 注解存在
  • 如果有异常会自动回滚
  • 解决: 检查日志中是否有异常

4. 前端缓存问题

  • 前端已配置 queryClient.invalidateQueries()
  • 解决: 手动刷新页面或检查网络请求

🧪 测试方法

方法1: 快速测试

cd ~/Desktop/projects/monisuo
./quick_test.sh

方法2: 完整诊断

cd ~/Desktop/projects/monisuo
./diagnose_approval.sh

方法3: 手动测试

# 1. 编译项目
mvn clean package -DskipTests

# 2. 启动服务(确保能看到控制台输出)
java -jar target/monisuo-1.0.jar

# 3. 在另一个终端运行测试脚本
./diagnose_approval.sh

# 4. 观察控制台日志输出

📋 检查清单

测试时请确认:

  • 后端服务已重启(使用新编译的代码)
  • 可以看到控制台输出(不要后台运行)
  • 有待审批的订单(充值待确认或提现待审批)
  • 运行测试脚本后观察控制台日志
  • 检查日志中的 "订单更新结果" 和 "账户更新结果"
  • 验证数据库中的订单状态是否更新
  • 验证用户资金账户余额是否变化

🎯 预期结果

成功的标志

  1. 控制台输出详细的审批日志
  2. 订单状态正确更新(充值->3, 提现->2
  3. 用户资金账户余额正确变化
  4. 资金流水记录创建成功
  5. 测试脚本显示所有检查通过

失败的情况

如果仍然失败,请提供:

  1. 完整的控制台日志输出
  2. 测试脚本的输出
  3. 数据库查询结果
  4. 具体的错误信息

📁 修改的文件

monisuo/
├── src/main/java/com/it/rattan/monisuo/
│   ├── controller/AdminController.java        ✏️ 添加调试日志
│   └── service/FundService.java               ✏️ 添加调试日志
├── test_approve_order.sh                      ✨ 新建
├── quick_test.sh                              ✨ 新建
├── diagnose_approval.sh                       ✨ 新建
└── APPROVAL_DEBUG_REPORT.md                   ✨ 新建

🚀 下一步

  1. 立即测试: 运行 ./diagnose_approval.sh
  2. 观察日志: 查看控制台的详细输出
  3. 验证结果: 检查订单状态和资金账户
  4. 报告结果: 将测试结果反馈

💡 提示

  • 日志中使用 System.out.println 而不是日志框架,确保一定能看到输出
  • 每个关键步骤都有编号步骤1-6方便追踪
  • 数据库操作都记录了返回值1=成功, 0=失败)
  • 最后会重新查询验证更新是否成功

编译完成: 测试脚本准备: 日志增强: 可以开始测试: