Files
hzdyjs/docs/开发文档/宿舍卫生检查API字段名修复报告.md
2025-08-16 22:44:56 +08:00

5.5 KiB
Raw Permalink Blame History

宿舍卫生检查API字段名修复报告

问题描述

错误信息

{"code":500,"msg":"学生评分数据不能为空","data":null}

问题分析

前端发送的API请求中,学生评分数据字段名为 studentData,但后端BO类 XgDormHygieneCheckCompleteBo 中期望的字段名为 studentScores,导致后端验证失败。

修复方案

1. 前端类型定义修复

文件: web/src/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/types.ts

修改内容:

// 修复前
export interface DormHygieneCheckCompleteForm extends DormHygieneCheckForm {
  studentData?: DormHygieneStudentScoreForm[];
}

// 修复后
export interface DormHygieneCheckCompleteForm extends DormHygieneCheckForm {
  studentScores?: DormHygieneStudentScoreForm[];
}

2. 前端数据处理逻辑修复

文件: web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue

修改内容:

// 修复前
const studentData = roomStudents.value.map((student: any) => ({
  studentId: student.studentId,
  // ... 其他字段
}));

const submitData: DormHygieneCheckCompleteForm = {
  ...form,
  studentData: studentData
};

// 修复后
const studentScores = roomStudents.value.map((student: any) => ({
  studentId: Number(student.studentId), // 确保是数字类型
  studentName: student.studentName,
  studentNo: student.studentNo,
  className: student.className,
  majorName: student.majorName,
  collegeName: student.collegeName,
  bedId: student.bedId ? Number(student.bedId) : undefined,
  bedCode: student.bedName,
  studentScore: student.student_score ? Number(student.student_score) : undefined,
  attendanceStatus: student.attendance_status,
  studentGrade: student.student_grade,
  isResponsiblePerson: student.isResponsiblePerson ? Number(student.isResponsiblePerson) : 0,
  scoreRemarks: student.scoreRemarks || '',
  improvementNotes: student.improvementNotes || ''
}));

const submitData: DormHygieneCheckCompleteForm = {
  ...form,
  studentScores: studentScores
};

修复要点

1. 字段名统一

  • 前端发送: studentData → 修复后: studentScores
  • 后端期望: studentScores ✅

2. 数据类型转换

  • studentId: 确保为数字类型 (Number())
  • studentScore: 确保为数字类型 (Number())
  • isResponsiblePerson: 确保为数字类型 (Number())
  • bedId: 可选字段,有值时转换为数字类型

3. 后端验证规则

@Valid
@NotEmpty(message = "学生评分数据不能为空", groups = { AddGroup.class, EditGroup.class })
private List<XgDormHygieneStudentScoreBo> studentScores;

测试验证

1. 修复后的请求格式

{
  "checkTitle": "20250816宿舍卫生检查",
  "checkDate": "2025-08-16 13:31:58",
  "checkerId": 1,
  "checkerName": "疯狂的狮子1Li",
  "checkType": "1",
  "checkLevel": "1",
  "roomId": "1947682802646568962",
  "roomCode": "1101寝室",
  "roomName": "1101寝室",
  "buildingId": "1947658035881234434",
  "buildingName": "1号楼",
  "areaId": "1947656427264987137",
  "areaName": "女生宿舍区",
  "campusId": "1946815553291304962",
  "campusName": "西溪校区",
  "totalScore": "95",
  "hygieneGrade": "A",
  "attachmentIds": "1956710620841684994,1956710620841684995,1956710620841684996",
  "checkSummary": "123",
  "improvementSuggestions": "123",
  "checkRemarks": "123123123",
  "studentScores": [  // ✅ 修复:使用正确的字段名
    {
      "studentId": 1949111889824882689,  // ✅ 修复:数字类型
      "studentName": "张新",
      "studentNo": "2025ZY24113",
      "className": "中药241",
      "majorName": "中药",
      "collegeName": "人文学院",
      "bedCode": "2上",
      "studentScore": 95.0,  // ✅ 修复:数字类型
      "attendanceStatus": "1",
      "studentGrade": "A",
      "isResponsiblePerson": 0,  // ✅ 修复:数字类型
      "scoreRemarks": "",
      "improvementNotes": ""
    }
  ]
}

2. 测试脚本

文件: test/宿舍卫生检查API修复测试.py

包含完整的测试数据和验证逻辑,可用于验证修复效果。

影响范围

1. 修改的文件

  • ✅ web/src/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/types.ts
  • ✅ web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue

2. 新增的文件

  • ✅ test/宿舍卫生检查API修复测试.py
  • ✅ docs/开发文档/宿舍卫生检查API字段名修复报告.md

3. 不受影响的功能

  • 后端API接口逻辑保持不变
  • 数据库表结构保持不变
  • 其他相关功能不受影响

验证步骤

1. 前端验证

  1. 打开宿舍卫生检查新增/编辑页面
  2. 选择房间,加载学生信息
  3. 填写检查信息和学生评分
  4. 提交表单,检查网络请求

2. 后端验证

  1. 检查请求参数中的字段名是否为 studentScores
  2. 检查学生评分数据的类型是否正确
  3. 验证后端验证是否通过

3. 数据库验证

  1. 检查主表数据是否正确插入
  2. 检查学生评分表数据是否正确插入
  3. 验证关联关系是否正确

总结

通过修复前端字段名和数据类型,解决了"学生评分数据不能为空"的错误。主要修复点:

  1. 字段名统一: studentData → studentScores
  2. 数据类型转换: 确保数字字段为正确的类型
  3. 类型定义更新: 前端类型定义与后端BO类保持一致

修复后,API请求应该能够正常通过后端验证,成功保存宿舍卫生检查记录和学生评分数据。