提交代码
This commit is contained in:
1 parent
8e1c094d6e
commit
788daa3638
16 files changed
+1462
-56
No files matched your search
@@ -0,0 +1,184 @@
|
||||
# 宿舍卫生检查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请求应该能够正常通过后端验证,成功保存宿舍卫生检查记录和学生评分数据。
|
||||
Reference in new issue
Block a user