Files
hzdyjs/docs/调试日志/奖学金审核问题调试指南.md
T
2025-08-10 00:24:31 +08:00

5.0 KiB

奖学金审核功能问题调试指南

🔍 问题描述

奖学金申请审核时报错:"学生学号不能为空",需要通过日志定位具体问题环节。

📋 已添加的调试日志

前端日志 (浏览器控制台)

  • 🔍 [DEBUG] handleApprove 开始执行 - 批准操作开始
  • 🔍 [DEBUG] 传入的row数据 - 表格行数据
  • 🔍 [DEBUG] getScholarshipApplication 响应 - 获取详情接口响应
  • 🔍 [DEBUG] 提取的fullData - 从响应中提取的完整数据
  • 🔍 [DEBUG] 准备更新的数据 updateData - 准备发送给后端的数据
  • 🔍 [DEBUG] 关键字段检查 - 检查关键字段是否存在
  • 🔍 [DEBUG] updateScholarshipApplication 响应 - 更新接口响应
  • ❌ [ERROR] handleApprove 出错 - 如果有错误

后端日志 (后端控制台)

  • 🔍 [DEBUG] Controller.edit 开始执行 - Controller接收请求
  • 🔍 [DEBUG] 接收到的BO对象 - 后端接收到的数据
  • 🔍 [DEBUG] Service.updateByBo 开始执行 - Service层开始处理
  • 🔍 [DEBUG] 转换后的Entity对象 - BO转Entity后的数据
  • 🔍 [DEBUG] validEntityBeforeSave 开始执行 - 数据校验开始
  • 🔍 [DEBUG] 校验学生学号 - 具体校验每个字段
  • ❌ [ERROR] 学生学号为空! - 如果校验失败

🧪 测试步骤

1. 准备测试环境

# 确保前后端服务已启动
# 前端:http://localhost
# 后端:http://localhost:8080

2. 打开浏览器开发者工具

  • 按F12打开开发者工具
  • 切换到"Console"标签页
  • 清空控制台日志

3. 执行审核操作

  1. 访问奖学金审核页面:http://localhost/jcbt/scholarship/review
  2. 找到一个状态为"已提交"的申请记录
  3. 点击"批准"按钮
  4. 观察前端控制台日志输出

4. 查看后端日志

  • 查看后端控制台输出
  • 重点关注包含 🔍 [DEBUG] 和 ❌ [ERROR] 的日志

🔍 关键检查点

前端数据流检查

  1. 表格行数据 - 确认 row 包含完整的申请信息
  2. 获取详情响应 - 确认API返回完整数据
  3. 字段映射 - 确认 studentNo、studentName 等字段存在
  4. 发送数据 - 确认发送给后端的数据完整

后端数据处理检查

  1. Controller接收 - 确认后端正确接收到数据
  2. BO对象字段 - 检查BO中的关键字段值
  3. Entity转换 - 检查BO转Entity后字段是否丢失
  4. 数据校验 - 定位具体在哪个字段校验时失败

📊 日志分析示例

正常情况的日志流程

前端:
🔍 [DEBUG] handleApprove 开始执行
🔍 [DEBUG] 传入的row数据: {"id": 123, "studentNo": "2021001", "studentName": "张三", ...}
🔍 [DEBUG] 关键字段检查:
  - id: 123
  - studentNo: 2021001
  - studentName: 张三
  - status: APPROVED

后端:
🔍 [DEBUG] Controller.edit 开始执行
🔍 [DEBUG] BO关键字段检查:
  - id: 123
  - studentNo: 2021001
  - studentName: 张三
  - status: APPROVED
🔍 [DEBUG] 数据库更新结果: true

异常情况的日志流程

前端:
🔍 [DEBUG] 准备更新的数据 updateData: {"id": 123, "studentNo": null, ...}
❌ [ERROR] handleApprove 出错: 请求失败

后端:
🔍 [DEBUG] BO关键字段检查:
  - studentNo: null  ← 发现问题
❌ [ERROR] 学生学号为空!

🎯 问题定位策略

根据日志定位问题环节

  1. 如果前端 传入的row数据 中 studentNo 为空

    • 问题:表格数据源有问题
    • 解决:检查列表查询接口
  2. 如果 getScholarshipApplication 响应 中 studentNo 为空

    • 问题:详情查询接口返回数据不完整
    • 解决:检查后端详情查询逻辑
  3. 如果前端数据正常,但后端BO中 studentNo 为空

    • 问题:字段映射问题
    • 解决:检查前后端字段名是否一致
  4. 如果BO正常,但Entity中 studentNo 为空

    • 问题:BO到Entity转换问题
    • 解决:检查MapStruct映射配置

📝 测试报告模板

请按以下格式提供测试结果:

### 测试环境
- 前端地址:http://localhost
- 后端地址:http://localhost:8080
- 测试时间:2025-01-XX XX:XX:XX

### 前端日志 (关键部分)

🔍 [DEBUG] 传入的row数据: {...} 🔍 [DEBUG] 关键字段检查:

  • id: XXX
  • studentNo: XXX
  • studentName: XXX

### 后端日志 (关键部分)

🔍 [DEBUG] BO关键字段检查:

  • id: XXX
  • studentNo: XXX
  • studentName: XXX

### 错误信息

❌ [ERROR] 具体错误信息


### 问题定位
- [ ] 前端表格数据正常
- [ ] 详情接口响应正常  
- [ ] 前端发送数据正常
- [ ] 后端接收数据正常
- [ ] BO转Entity正常
- [ ] 数据校验通过

🚀 修复方案

根据日志分析结果,已实施以下修复:

  1. 字段映射统一 - 前端统一使用 status 字段
  2. BO类增强 - 添加 status 字段并与 currentStatus 同步
  3. 数据完整性 - 确保关键字段在整个流程中不丢失

测试完成后,如果问题仍然存在,请提供完整的日志信息以便进一步分析。