根据前端API接口的同步需求,需要修改后端Controller中的 updateDormHygieneCheck 和 addDormHygieneCheck 对应的API函数,使其支持同时操作主表和子表数据。
XgDormHygieneCheckCompleteBo)文件位置: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormHygieneCheckCompleteBo.java
功能特点:
List<XgDormHygieneStudentScoreBo>)核心字段:
// 主表字段
private Long id;
private String checkTitle;
private Date checkDate;
private Long checkerId;
private String checkerName;
// ... 其他主表字段
// 学生评分数据
@Valid
@NotEmpty(message = "学生评分数据不能为空")
private List<XgDormHygieneStudentScoreBo> studentScores;
XgDormHygieneCheckController)文件位置: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormHygieneCheckController.java
新增接口:
新增宿舍卫生检查(包含学生评分数据)
@PostMapping("/addWithStudentScores")
public R<Void> addWithStudentScores(@Validated(AddGroup.class) @RequestBody XgDormHygieneCheckCompleteBo bo)
java
@PutMapping("/updateWithStudentScores")
public R<Void> updateWithStudentScores(@Validated(EditGroup.class) @RequestBody XgDormHygieneCheckCompleteBo bo)
接口特点:
@SaCheckPermission)@Log)@RepeatSubmit)@Validated)R<Void>)IXgDormHygieneCheckService)文件位置: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormHygieneCheckService.java
新增方法:
/**
* 新增宿舍卫生检查(包含学生评分数据)
*/
Boolean insertWithStudentScores(XgDormHygieneCheckCompleteBo bo);
/**
* 修改宿舍卫生检查(包含学生评分数据)
*/
Boolean updateWithStudentScores(XgDormHygieneCheckCompleteBo bo);
XgDormHygieneCheckServiceImpl)文件位置: backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormHygieneCheckServiceImpl.java
实现特点:
事务管理
@Transactional(rollbackFor = Exception.class) 确保数据一致性新增逻辑 (insertWithStudentScores)
```java
// 1. 转换并保存主表数据
XgDormHygieneCheck add = MapstructUtils.convert(bo, XgDormHygieneCheck.class);
boolean flag = baseMapper.insert(add) > 0;
// 2. 保存学生评分数据 for (XgDormHygieneStudentScoreBo studentScoreBo : bo.getStudentScores()) {
XgDormHygieneStudentScore studentScore = MapstructUtils.convert(studentScoreBo, XgDormHygieneStudentScore.class);
studentScore.setHygieneCheckId(add.getId());
studentScoreMapper.insert(studentScore);
}
3. **更新逻辑 (`updateWithStudentScores`)**
```java
// 1. 更新主表数据
XgDormHygieneCheck update = MapstructUtils.convert(bo, XgDormHygieneCheck.class);
boolean flag = baseMapper.updateById(update) > 0;
// 2. 删除原有学生评分记录
LambdaQueryWrapper<XgDormHygieneStudentScore> deleteWrapper = Wrappers.lambdaQuery();
deleteWrapper.eq(XgDormHygieneStudentScore::getHygieneCheckId, bo.getId());
studentScoreMapper.delete(deleteWrapper);
// 3. 插入新的学生评分记录
for (XgDormHygieneStudentScoreBo studentScoreBo : bo.getStudentScores()) {
XgDormHygieneStudentScore studentScore = MapstructUtils.convert(studentScoreBo, XgDormHygieneStudentScore.class);
studentScore.setHygieneCheckId(bo.getId());
studentScoreMapper.insert(studentScore);
}
前端请求 → Controller → Service → Mapper → 数据库
新增操作:
更新操作:
主表验证:
checkTitle: 必填,长度1-200字符checkDate: 必填,日期时间格式checkerId: 必填,关联用户表roomId: 必填,关联房间表totalScore: 可选,0-100分hygieneGrade: 可选,A/B/C/D学生评分表验证:
studentScores: 必填,不能为空列表studentId: 必填,关联学生表studentScore: 可选,0-100分attendanceStatus: 必填,1/2/3/4studentGrade: 可选,A/B/C/D新增依赖:
private final XgDormHygieneStudentScoreMapper studentScoreMapper;
导入的类:
import org.dromara.xg.domain.bo.XgDormHygieneCheckCompleteBo;
import org.dromara.xg.domain.bo.XgDormHygieneStudentScoreBo;
import org.dromara.xg.domain.XgDormHygieneStudentScore;
import org.dromara.xg.mapper.XgDormHygieneStudentScoreMapper;
import org.springframework.transaction.annotation.Transactional;
backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormHygieneCheckCompleteBo.java - 完整表单类型backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormHygieneCheckController.java - 新增API接口backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormHygieneCheckService.java - 新增Service接口方法backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormHygieneCheckServiceImpl.java - 新增Service实现方法backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/bo/XgDormHygieneStudentScoreBo.java - 学生评分BObackend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgDormHygieneStudentScoreMapper.java - 学生评分Mapperbackend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/domain/XgDormHygieneStudentScore.java - 学生评分实体POST /dormHygieneCheck/dormHygieneCheck/addWithStudentScores请求参数:
{
"checkTitle": "2025年1月宿舍卫生检查",
"checkDate": "2025-01-28 10:00:00",
"checkerId": 1,
"checkerName": "张三",
"roomId": 1,
"roomCode": "A101",
"roomName": "A栋101室",
"buildingId": 1,
"buildingName": "A栋",
"studentScores": [
{
"studentId": 1,
"studentNo": "2021001",
"studentName": "李四",
"studentScore": 85.0,
"attendanceStatus": "1",
"studentGrade": "B"
}
]
}
响应格式:
{
"code": 200,
"msg": "操作成功"
}
PUT /dormHygieneCheck/dormHygieneCheck/updateWithStudentScores请求参数:
{
"id": 1,
"checkTitle": "2025年1月宿舍卫生检查(更新)",
"checkDate": "2025-01-28 10:00:00",
"checkerId": 1,
"checkerName": "张三",
"roomId": 1,
"roomCode": "A101",
"roomName": "A栋101室",
"buildingId": 1,
"buildingName": "A栋",
"studentScores": [
{
"studentId": 1,
"studentNo": "2021001",
"studentName": "李四",
"studentScore": 90.0,
"attendanceStatus": "1",
"studentGrade": "A"
}
]
}
响应格式:
{
"code": 200,
"msg": "操作成功"
}
可以使用之前创建的前端测试脚本:
python test/宿舍卫生检查API测试脚本.py
完成时间: 2025-01-28
开发人员: 系统开发团队
文档版本: v1.0
状态: ✅ 后端API接口修改完成,等待测试验证