时间: 2025-08-08 23:07:00
修复人员: wuzhen
问题类型: 字段映射不一致导致的业务异常
奖学金审核功能中,管理员点击"批准"或"拒绝"按钮时出现异常:
学生学号不能为空
字段映射链断裂:
studentCode: "202301001"studentCode 通过验证 ✅studentCode → studentNo 映射失败 ❌entity.getStudentNo() 为空 ❌字段不一致问题:
student_nostudentNostudentNostudentCode ← 不一致的源头采用统一字段名方案,将所有层级统一使用 studentNo:
文件: backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/domain/bo/JcbtScholarshipApplicationBo.java
// 修改前:两个字段并存
private String studentCode; // 带验证注解
private String studentNo; // 无验证注解
// 修改后:统一使用studentNo
@NotBlank(message = "学生学号不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(max = 50, message = "学生学号长度不能超过50个字符")
private String studentNo;
删除了BO类中的字段同步setter方法:
setStudentCode(String studentCode)setStudentNo(String studentNo)文件: backend/ruoyi-modules/ruoyi-jcbt/src/main/java/org/dromara/jcbt/service/impl/JcbtScholarshipApplicationServiceImpl.java
// 修改前
lqw.eq(StringUtils.isNotBlank(bo.getStudentCode()), JcbtScholarshipApplication::getStudentNo, bo.getStudentCode());
// 修改后
lqw.eq(StringUtils.isNotBlank(bo.getStudentNo()), JcbtScholarshipApplication::getStudentNo, bo.getStudentNo());
文件: web/src/views/jcbt/scholarship/review/index.vue
删除了三个位置的手动字段映射:
// 修改前:需要手动映射
const updateData = {
...fullData,
studentCode: fullData.studentNo, // 手动映射
currentStatus: 'APPROVED'
}
// 修改后:直接使用
const updateData = {
...fullData,
currentStatus: 'APPROVED'
}
数据一致性检查:
student_nostudentNostudentNostudentNo (已修复)studentNo建议在代码生成模板中加强字段命名一致性检查,避免类似问题再次发生。
状态: ✅ 已完成
验证: ✅ 编译通过
影响范围: 奖学金申请审核功能