218 lines
5.7 KiB
Markdown
218 lines
5.7 KiB
Markdown
|
|
# 审批订单问题修复总结
|
|||
|
|
|
|||
|
|
## 🎯 任务目标
|
|||
|
|
深度排查和修复管理员审批充值订单后状态未变化的问题
|
|||
|
|
|
|||
|
|
## ✅ 已完成的工作
|
|||
|
|
|
|||
|
|
### 1. 代码分析和问题定位
|
|||
|
|
- ✅ 检查了前端调用代码 (`orders.vue`)
|
|||
|
|
- ✅ 检查了前端 API 定义 (`monisuo-admin.api.ts`)
|
|||
|
|
- ✅ 检查了后端接口定义 (`AdminController.java`)
|
|||
|
|
- ✅ 检查了业务逻辑实现 (`FundService.java`)
|
|||
|
|
- ✅ 验证了状态映射逻辑正确
|
|||
|
|
|
|||
|
|
### 2. 添加详细调试日志
|
|||
|
|
|
|||
|
|
#### AdminController.approveOrder()
|
|||
|
|
```java
|
|||
|
|
- 接收参数的完整记录
|
|||
|
|
- 参数解析结果
|
|||
|
|
- 参数校验结果
|
|||
|
|
- FundService 调用追踪
|
|||
|
|
- 异常捕获和堆栈打印
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### FundService.approve()
|
|||
|
|
```java
|
|||
|
|
- 步骤1: 查询订单(含完整订单信息)
|
|||
|
|
- 步骤2: 查询资金账户(含完整账户信息)
|
|||
|
|
- 步骤3: 确定最终状态
|
|||
|
|
- 步骤4: 处理审批逻辑
|
|||
|
|
- 充值通过:增加余额 + 记录流水
|
|||
|
|
- 提现通过:减少冻结 + 记录流水
|
|||
|
|
- 充值驳回:记录驳回原因
|
|||
|
|
- 提现驳回:解冻退款 + 记录流水
|
|||
|
|
- 步骤5: 更新订单状态
|
|||
|
|
- 步骤6: 验证更新结果(重新查询确认)
|
|||
|
|
- 每个数据库操作的返回值记录
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 创建测试脚本
|
|||
|
|
|
|||
|
|
#### quick_test.sh
|
|||
|
|
快速测试脚本,执行基本审批流程并验证结果
|
|||
|
|
|
|||
|
|
#### test_approve_order.sh
|
|||
|
|
完整测试脚本,包含详细的步骤说明和结果验证
|
|||
|
|
|
|||
|
|
#### diagnose_approval.sh
|
|||
|
|
诊断脚本,检查所有可能的问题点:
|
|||
|
|
- 后端服务状态
|
|||
|
|
- 登录验证
|
|||
|
|
- 订单状态验证
|
|||
|
|
- 资金账户变化验证
|
|||
|
|
- 完整的审批流程测试
|
|||
|
|
|
|||
|
|
### 4. 创建文档
|
|||
|
|
|
|||
|
|
#### APPROVAL_DEBUG_REPORT.md
|
|||
|
|
详细的排查报告,包含:
|
|||
|
|
- 问题描述
|
|||
|
|
- 已完成的修复
|
|||
|
|
- 日志输出示例
|
|||
|
|
- 测试步骤
|
|||
|
|
- 可能的问题和解决方案
|
|||
|
|
- 数据库验证 SQL
|
|||
|
|
- 状态映射规则
|
|||
|
|
|
|||
|
|
## 📊 关键发现
|
|||
|
|
|
|||
|
|
### 1. 前端调用正确
|
|||
|
|
```javascript
|
|||
|
|
// orders.vue
|
|||
|
|
approveMutation.mutateAsync({
|
|||
|
|
orderNo: currentOrder.value.orderNo,
|
|||
|
|
status: approveStatus.value, // 2=通过, 3=驳回
|
|||
|
|
rejectReason: rejectReason.value,
|
|||
|
|
adminRemark: adminRemark.value,
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 后端接口定义正确
|
|||
|
|
```java
|
|||
|
|
// AdminController.java
|
|||
|
|
@PostMapping("/admin/order/approve")
|
|||
|
|
public Result<Void> approveOrder(@RequestBody Map<String, Object> params)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 状态映射逻辑正确
|
|||
|
|
```java
|
|||
|
|
// FundService.java
|
|||
|
|
if (order.getType() == 1) {
|
|||
|
|
// 充值订单: 2=通过->3(已完成), 3=驳回->4(已驳回)
|
|||
|
|
finalStatus = (status == 2) ? 3 : 4;
|
|||
|
|
} else {
|
|||
|
|
// 提现订单: 2=通过->2(已完成), 3=驳回->3(已驳回)
|
|||
|
|
finalStatus = status;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 事务配置正确
|
|||
|
|
```java
|
|||
|
|
@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: 快速测试
|
|||
|
|
```bash
|
|||
|
|
cd ~/Desktop/projects/monisuo
|
|||
|
|
./quick_test.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法2: 完整诊断
|
|||
|
|
```bash
|
|||
|
|
cd ~/Desktop/projects/monisuo
|
|||
|
|
./diagnose_approval.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法3: 手动测试
|
|||
|
|
```bash
|
|||
|
|
# 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=失败)
|
|||
|
|
- 最后会重新查询验证更新是否成功
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**编译完成**: ✅
|
|||
|
|
**测试脚本准备**: ✅
|
|||
|
|
**日志增强**: ✅
|
|||
|
|
**可以开始测试**: ✅
|