Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-17-student-available-batches-api.md
T
2025-07-27 13:09:34 +08:00

161 lines
5.2 KiB
Markdown

# 学生可参与批次信息查询API开发记录
**日期**: 2025-01-17
**开发者**: Cursor AI
**变更类型**: 新增功能
**影响范围**: 后端API接口
## 📋 变更概述
在 `XgStuColBatchClassController.java` 中新增了 `getStudentAvailableBatches` API接口,用于查询学生可以参与的批次信息。
## 🔧 具体变更
### 1. Controller层变更
**文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStuColBatchClassController.java`
#### 新增内容
- 添加了 `getStudentAvailableBatches` API接口
- 接口路径: `GET /stuColBatchClass/stuColBatchClass/getStudentAvailableBatches`
- 无入参,自动获取当前登录用户ID
- 返回类型: `R<List<Map<String, Object>>>`
- 添加了权限注解 `@SaCheckPermission("stuColBatchClass:stuColBatchClass:query")`
#### 实现逻辑
1. **获取当前用户ID**: 使用 `LoginHelper.getUserId()` 获取当前登录用户ID
2. **权限校验**: 检查用户是否已登录
3. **数据查询**: 调用Mapper方法查询学生可参与的批次信息
4. **异常处理**: 捕获并处理查询过程中的异常
### 2. Mapper层变更
**文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/mapper/XgStuColBatchClassMapper.java`
#### 新增方法
- `selectStudentAvailableBatches(Long studentId)`: 查询学生可参与的批次信息
- 返回类型: `List<Map<String, Object>>`
### 3. XML映射文件变更
**文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/resources/mapper/stuColBatchClass/XgStuColBatchClassMapper.xml`
#### 新增SQL查询
- 实现了 `selectStudentAvailableBatches` 的SQL查询语句
- 通过三张表关联查询:`xg_stu_col_batch`、`xg_stu_col_batch_class`、`xg_student_msg`
- 查询条件:
- `xg_student_msg.id = 当前登录用户ID`
- `xg_student_msg.class_id = xg_stu_col_batch_class.class_id`
- `xg_stu_col_batch_class.batch_id = xg_stu_col_batch.id`
- `deleted = 0` (所有表)
- `xg_stu_col_batch.status = '0'` (批次状态正常)
#### 返回字段
- 批次信息:`batchId`、`batchName`、`description`、`startTime`、`endTime`、`status`、`collectionType`、`remark`
- 班级信息:`classId`、`className`、`majorId`、`majorName`、`collegeId`、`collegeName`
## 📊 数据库关联逻辑
### 表关联关系
```
xg_student_msg (学生信息表)
↓ class_id
xg_stu_col_batch_class (批次班级权限表)
↓ batch_id
xg_stu_col_batch (批次信息表)
```
### 查询条件
1. **学生匹配**: `xg_student_msg.id = 当前登录用户ID`
2. **班级匹配**: `xg_student_msg.class_id = xg_stu_col_batch_class.class_id`
3. **批次匹配**: `xg_stu_col_batch_class.batch_id = xg_stu_col_batch.id`
4. **数据有效性**: 所有表的 `deleted = 0`
5. **批次状态**: `xg_stu_col_batch.status = '0'` (正常状态)
## 🔐 权限控制
### 接口权限
- **权限标识**: `stuColBatchClass:stuColBatchClass:query`
- **访问控制**: 需要登录用户
- **数据范围**: 只能查询当前登录用户对应的学生信息
### 安全考虑
- 使用 `LoginHelper.getUserId()` 获取当前用户ID,确保数据安全
- 通过表关联确保用户只能查看自己班级的批次信息
- 添加异常处理,避免敏感信息泄露
## 📝 API接口规范
### 请求信息
- **请求方法**: GET
- **请求路径**: `/stuColBatchClass/stuColBatchClass/getStudentAvailableBatches`
- **请求参数**: 无
- **请求头**: 需要包含有效的Token
### 响应格式
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"batchId": 1,
"batchName": "2025年春季学期信息收集",
"description": "收集学生基本信息",
"startTime": "2025-01-01 00:00:00",
"endTime": "2025-01-31 23:59:59",
"status": "0",
"collectionType": "1",
"remark": "新学期信息收集",
"classId": 101,
"className": "计算机科学与技术2021级1班",
"majorId": 1,
"majorName": "计算机科学与技术",
"collegeId": 1,
"collegeName": "信息工程学院"
}
]
}
```
### 错误响应
```json
{
"code": 500,
"msg": "查询学生可参与批次信息失败:具体错误信息"
}
```
## 🧪 测试建议
### 功能测试
1. **正常场景**: 登录学生用户,查询可参与的批次信息
2. **无权限场景**: 未登录用户访问接口
3. **无数据场景**: 学生没有可参与的批次
4. **异常场景**: 数据库连接异常
### 数据验证
1. 验证返回的批次信息是否正确
2. 验证班级信息是否与当前用户匹配
3. 验证批次状态是否为正常状态
4. 验证数据排序是否正确(按开始时间倒序)
## 📚 相关文档
- **API文档**: 学生信息收集批次管理API
- **数据库设计**: 学生信息收集批次管理表设计
- **权限配置**: 菜单权限配置指南
## 🔄 后续优化建议
1. **缓存优化**: 考虑对批次信息进行缓存,提高查询性能
2. **分页支持**: 如果批次数量较多,可以考虑添加分页功能
3. **状态过滤**: 可以添加参数支持按批次状态过滤
4. **时间范围**: 可以添加参数支持按时间范围查询
---
**开发完成时间**: 2025-01-17
**代码审查**: 待审查
**测试状态**: 待测试
**部署状态**: 待部署