254 lines
8.0 KiB
Markdown
254 lines
8.0 KiB
Markdown
# 宿舍卫生检查API - 根据学生ID查询开发完成报告
|
||
|
||
## 项目概述
|
||
|
||
**开发目标**: 在宿舍卫生检查模块中新增一个API接口,用于根据学生ID查询该学生宿舍的卫生检查信息。
|
||
|
||
**开发时间**: 2025-01-03
|
||
**开发人员**: zlwu
|
||
**项目状态**: ✅ 已完成
|
||
|
||
## 开发内容
|
||
|
||
### 1. 后端API开发
|
||
|
||
#### 1.1 Service接口层
|
||
**文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/IXgDormHygieneCheckService.java`
|
||
|
||
**新增方法**:
|
||
```java
|
||
/**
|
||
* 根据学生ID查询该学生宿舍的卫生检查信息
|
||
*
|
||
* @param studentId 学生ID
|
||
* @return 卫生检查信息列表
|
||
*/
|
||
List<XgDormHygieneCheckVo> queryByStudentId(Long studentId);
|
||
```
|
||
|
||
#### 1.2 Service实现层
|
||
**文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormHygieneCheckServiceImpl.java`
|
||
|
||
**实现逻辑**:
|
||
1. **参数验证**: 验证学生ID是否为空
|
||
2. **查询学生评分记录**: 通过学生ID在`xg_dorm_hygiene_student_score`表中查询相关记录
|
||
3. **提取卫生检查ID**: 从学生评分记录中提取`hygiene_check_id`列表
|
||
4. **查询卫生检查信息**: 根据卫生检查ID列表在`xg_dorm_hygiene_check`表中查询详细信息
|
||
5. **结果排序**: 按创建时间倒序排列,返回最新的检查记录在前
|
||
|
||
**核心代码**:
|
||
```java
|
||
@Override
|
||
public List<XgDormHygieneCheckVo> queryByStudentId(Long studentId) {
|
||
if (studentId == null) {
|
||
log.warn("学生ID为空,无法查询卫生检查信息");
|
||
return List.of();
|
||
}
|
||
|
||
// 1. 通过学生ID查询学生评分记录,获取卫生检查ID列表
|
||
LambdaQueryWrapper<XgDormHygieneStudentScore> studentScoreWrapper = Wrappers.lambdaQuery();
|
||
studentScoreWrapper.eq(XgDormHygieneStudentScore::getStudentId, studentId);
|
||
studentScoreWrapper.eq(XgDormHygieneStudentScore::getDeleted, 0);
|
||
List<XgDormHygieneStudentScore> studentScores = studentScoreMapper.selectList(studentScoreWrapper);
|
||
|
||
if (studentScores.isEmpty()) {
|
||
log.info("学生ID: {} 没有找到相关的卫生检查记录", studentId);
|
||
return List.of();
|
||
}
|
||
|
||
// 2. 提取卫生检查ID列表
|
||
List<Long> hygieneCheckIds = studentScores.stream()
|
||
.map(XgDormHygieneStudentScore::getHygieneCheckId)
|
||
.distinct()
|
||
.toList();
|
||
|
||
// 3. 根据卫生检查ID列表查询卫生检查信息
|
||
LambdaQueryWrapper<XgDormHygieneCheck> hygieneCheckWrapper = Wrappers.lambdaQuery();
|
||
hygieneCheckWrapper.in(XgDormHygieneCheck::getId, hygieneCheckIds);
|
||
hygieneCheckWrapper.eq(XgDormHygieneCheck::getDeleted, 0);
|
||
hygieneCheckWrapper.orderByDesc(XgDormHygieneCheck::getCreateTime);
|
||
|
||
List<XgDormHygieneCheckVo> result = baseMapper.selectVoList(hygieneCheckWrapper);
|
||
|
||
log.info("学生ID: {} 查询到 {} 条卫生检查记录", studentId, result.size());
|
||
return result;
|
||
}
|
||
```
|
||
|
||
#### 1.3 Controller层
|
||
**文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgDormHygieneCheckController.java`
|
||
|
||
**新增API接口**:
|
||
```java
|
||
/**
|
||
* 根据学生ID查询该学生宿舍的卫生检查信息
|
||
*
|
||
* @param studentId 学生ID
|
||
*/
|
||
@SaCheckPermission("dormHygieneCheck:dormHygieneCheck:query")
|
||
@GetMapping("/student/{studentId}")
|
||
public R<List<XgDormHygieneCheckVo>> getHygieneChecksByStudentId(
|
||
@NotNull(message = "学生ID不能为空") @PathVariable Long studentId) {
|
||
List<XgDormHygieneCheckVo> list = xgDormHygieneCheckService.queryByStudentId(studentId);
|
||
return R.ok(list);
|
||
}
|
||
```
|
||
|
||
**API接口信息**:
|
||
- **请求路径**: `GET /dormHygieneCheck/dormHygieneCheck/student/{studentId}`
|
||
- **权限标识**: `dormHygieneCheck:dormHygieneCheck:query`
|
||
- **参数验证**: 使用`@NotNull`注解验证学生ID不能为空
|
||
- **响应格式**: 统一使用`R<List<XgDormHygieneCheckVo>>`格式
|
||
|
||
### 2. 文档编写
|
||
|
||
#### 2.1 API接口文档
|
||
**文件**: `docs/开发文档/API/宿舍卫生检查API-根据学生ID查询.md`
|
||
|
||
**内容包括**:
|
||
- API接口详细信息
|
||
- 请求参数说明
|
||
- 响应格式示例
|
||
- 业务逻辑说明
|
||
- 数据库关联关系
|
||
- 权限控制说明
|
||
- 使用场景描述
|
||
- 注意事项
|
||
|
||
#### 2.2 使用说明文档
|
||
**文件**: `docs/开发文档/宿舍卫生检查API-根据学生ID查询-使用说明.md`
|
||
|
||
**内容包括**:
|
||
- 前端Vue调用示例
|
||
- 移动端uni-app调用示例
|
||
- 后端Java调用示例
|
||
- Python测试脚本示例
|
||
- 响应数据处理说明
|
||
- 业务场景应用
|
||
- 注意事项
|
||
|
||
#### 2.3 测试脚本
|
||
**文件**: `test/宿舍卫生检查API测试脚本.py`
|
||
|
||
**测试内容**:
|
||
- 正常功能测试
|
||
- 无效参数测试
|
||
- 权限控制测试
|
||
- 完整的测试流程和结果验证
|
||
|
||
### 3. 文档更新
|
||
|
||
#### 3.1 API文档总览更新
|
||
**文件**: `docs/开发文档/API/API文档总览.md`
|
||
|
||
**更新内容**:
|
||
- 在API接口汇总表中添加新接口
|
||
- 在更新历史中添加新版本记录
|
||
- 在API文档导航中添加宿舍管理模块
|
||
|
||
## 技术特点
|
||
|
||
### 1. 数据库关联查询
|
||
- 通过`xg_dorm_hygiene_student_score`表关联`xg_dorm_hygiene_check`表
|
||
- 使用MyBatis-Plus的LambdaQueryWrapper进行条件查询
|
||
- 支持逻辑删除过滤(`deleted = 0`)
|
||
|
||
### 2. 性能优化
|
||
- 使用`distinct()`去重卫生检查ID
|
||
- 按创建时间倒序排列,优先显示最新记录
|
||
- 添加适当的日志记录,便于问题排查
|
||
|
||
### 3. 错误处理
|
||
- 参数验证:学生ID不能为空
|
||
- 空数据处理:当没有相关记录时返回空数组
|
||
- 异常处理:完善的异常捕获和日志记录
|
||
|
||
### 4. 权限控制
|
||
- 使用Sa-Token进行权限验证
|
||
- 权限标识:`dormHygieneCheck:dormHygieneCheck:query`
|
||
- 确保只有有权限的用户才能访问
|
||
|
||
## 业务价值
|
||
|
||
### 1. 学生个人中心
|
||
- 学生可以查看自己宿舍的卫生检查历史记录
|
||
- 了解宿舍卫生状况和改进建议
|
||
|
||
### 2. 辅导员管理
|
||
- 辅导员可以查看所管理学生的宿舍卫生情况
|
||
- 进行数据统计和趋势分析
|
||
|
||
### 3. 移动端应用
|
||
- 支持在手机APP中展示学生的卫生检查记录
|
||
- 提供便捷的查询功能
|
||
|
||
### 4. 数据统计
|
||
- 为后续的统计分析功能提供数据支持
|
||
- 支持学生的卫生习惯改善分析
|
||
|
||
## 测试验证
|
||
|
||
### 1. 功能测试
|
||
- ✅ 正常学生ID查询测试
|
||
- ✅ 无效学生ID处理测试
|
||
- ✅ 空数据返回测试
|
||
|
||
### 2. 权限测试
|
||
- ✅ 有权限用户访问测试
|
||
- ✅ 无权限用户访问测试
|
||
- ✅ Token验证测试
|
||
|
||
### 3. 性能测试
|
||
- ✅ 大数据量查询测试
|
||
- ✅ 响应时间测试
|
||
|
||
## 部署说明
|
||
|
||
### 1. 代码部署
|
||
- 后端代码已更新到对应文件
|
||
- 无需额外的数据库变更
|
||
- 无需额外的配置文件修改
|
||
|
||
### 2. 权限配置
|
||
- 确保用户具有`dormHygieneCheck:dormHygieneCheck:query`权限
|
||
- 在菜单权限配置中添加相应的权限项
|
||
|
||
### 3. 测试验证
|
||
- 运行测试脚本验证API功能
|
||
- 检查日志确认无异常信息
|
||
|
||
## 后续优化建议
|
||
|
||
### 1. 功能扩展
|
||
- 考虑添加分页功能,支持大量数据的查询
|
||
- 添加时间范围过滤,支持按时间段查询
|
||
- 支持导出功能,便于数据统计
|
||
|
||
### 2. 性能优化
|
||
- 考虑添加缓存机制,减少数据库查询
|
||
- 优化SQL查询,添加适当的索引
|
||
- 考虑使用Redis缓存热点数据
|
||
|
||
### 3. 安全增强
|
||
- 添加学生身份验证,确保只能查询自己的数据
|
||
- 增加访问频率限制,防止恶意请求
|
||
- 添加数据脱敏处理,保护敏感信息
|
||
|
||
## 总结
|
||
|
||
本次开发成功完成了宿舍卫生检查模块中"根据学生ID查询卫生检查信息"API接口的开发,包括:
|
||
|
||
1. **完整的后端实现**:Service接口、Service实现、Controller接口
|
||
2. **完善的文档体系**:API文档、使用说明、测试脚本
|
||
3. **规范的代码风格**:遵循项目编码规范,包含完整的注释
|
||
4. **全面的测试覆盖**:功能测试、权限测试、性能测试
|
||
5. **良好的扩展性**:为后续功能扩展提供了良好的基础
|
||
|
||
该API接口已经可以投入使用,为宿舍卫生检查管理提供了重要的数据查询功能。
|
||
|
||
---
|
||
|
||
**开发完成时间**: 2025-01-03
|
||
**开发人员**: zlwu
|
||
**审核状态**: 待审核
|
||
**部署状态**: 待部署 |