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

184 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 宿舍卫生检查API字段名修复报告
## 问题描述
### 错误信息
```
{"code":500,"msg":"学生评分数据不能为空","data":null}
```
### 问题分析
前端发送的API请求中,学生评分数据字段名为 `studentData`,但后端BO类 `XgDormHygieneCheckCompleteBo` 中期望的字段名为 `studentScores`,导致后端验证失败。
## 修复方案
### 1. 前端类型定义修复
**文件:** `web/src/api/xg/xgss/dormHygieneCheck/dormHygieneCheck/types.ts`
**修改内容:**
```typescript
// 修复前
export interface DormHygieneCheckCompleteForm extends DormHygieneCheckForm {
studentData?: DormHygieneStudentScoreForm[];
}
// 修复后
export interface DormHygieneCheckCompleteForm extends DormHygieneCheckForm {
studentScores?: DormHygieneStudentScoreForm[];
}
```
### 2. 前端数据处理逻辑修复
**文件:** `web/src/views/xg/xgss/dormHygieneCheck/dormHygieneCheck/DormHygieneCheckDialog.vue`
**修改内容:**
```typescript
// 修复前
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. 后端验证规则
```java
@Valid
@NotEmpty(message = "学生评分数据不能为空", groups = { AddGroup.class, EditGroup.class })
private List<XgDormHygieneStudentScoreBo> studentScores;
```
## 测试验证
### 1. 修复后的请求格式
```json
{
"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请求应该能够正常通过后端验证,成功保存宿舍卫生检查记录和学生评分数据。