161 lines
5.2 KiB
Markdown
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
|
|
**代码审查**: 待审查
|
|
**测试状态**: 待测试
|
|
**部署状态**: 待部署 |