This commit is contained in:
zlwu committed 2025-12-25 18:01:27 +08:00
1 parent fb6d0aa63c
commit ff1228873c
37 files changed
+11861 -1823

No files matched your search

+1
View File
@@ -15,6 +15,7 @@
- [宿舍管理API](./宿舍管理API.md)
- [宿舍房间管理API](./宿舍房间管理API.md) - **新增床位详细信息查询接口**(2025-01-27)
- [宿舍床位分配管理API](./宿舍床位分配管理API.md) - **重要修复:床位分配不完整问题**(2025-01-27)
- [宿舍申请管理API](./宿舍申请管理API.md) - **新增**:支持学生调宿和退宿申请管理(2025-01-15)
- [宿舍管理员信息API](./宿舍管理员信息API.md)
- [宿舍管理员授权API](./宿舍管理员授权API.md)
- [学生管理员授权关系API](./学生管理员授权关系API.md)
@@ -0,0 +1,693 @@
# 宿舍申请管理 API 接口文档
### 模块概述
**模块名称**: 宿舍申请管理 / Dormitory Application Management
**基础路径**: `/dormApplication/dormApplication`
**版本**: v1.0
**负责人**: zlwu
**更新时间**: 2025-01-15
### 模块功能
宿舍申请管理模块主要处理学生的宿舍调宿和退宿申请,包括:
- 学生宿舍调宿申请(更换床位)
- 学生宿舍退宿申请(释放床位)
- 工作流审批流程
- 宿舍管理员权限控制
- 学生信息自动更新
### 权限说明
- **权限前缀**: `dormApplication:dormApplication:`
- **权限列表**:
- `dormApplication:dormApplication:list` - 查询权限
- `dormApplication:dormApplication:add` - 新增权限
- `dormApplication:dormApplication:edit` - 编辑权限
- `dormApplication:dormApplication:remove` - 删除权限
- `dormApplication:dormApplication:query` - 查看详情权限
- `dormApplication:dormApplication:export` - 导出权限
---
## 📊 接口概览
### 接口分类
#### 基础 CRUD 接口
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
| -------------- | --------- | --------------------- | ----------------- | ---------------------- |
| 查询申请列表 | GET | `/dormApplication/dormApplication/list` | `dormApplication:dormApplication:list` | 分页查询宿舍申请列表 |
| 查询申请详情 | GET | `/dormApplication/dormApplication/{id}` | `dormApplication:dormApplication:query` | 根据 ID 查询申请详情 |
| 新增申请 | POST | `/dormApplication/dormApplication` | `dormApplication:dormApplication:add` | 创建新的宿舍申请 |
| 修改申请 | PUT | `/dormApplication/dormApplication` | `dormApplication:dormApplication:edit` | 更新申请信息 |
| 删除申请 | DELETE | `/dormApplication/dormApplication/{ids}` | `dormApplication:dormApplication:remove` | 批量删除申请 |
| 导出申请 | POST | `/dormApplication/dormApplication/export` | `dormApplication:dormApplication:export` | 导出申请列表 |
#### 业务逻辑接口
| 接口名称 | HTTP 方法 | 路径 | 权限要求 | 功能描述 |
| ------------ | --------- | ------------------------- | -------- | ---------- |
| 获取学生选择器 | GET | `/dormApplication/dormApplication/studentOptions` | `dormApplication:dormApplication:list` | 获取学生选择器选项 |
| 获取学院审批人 | GET | `/dormApplication/dormApplication/getCollegeApprovers` | `dormApplication:dormApplication:list` | 获取二级学院审批人列表 |
| 获取学工处审批人 | GET | `/dormApplication/dormApplication/getStudentAffairsApprovers` | `dormApplication:dormApplication:list` | 获取学工处审批人列表 |
### 通用响应格式
#### 成功响应
```json
{
"code": 200,
"msg": "操作成功",
"data": {
// 响应数据
}
}
```
#### 分页响应
```json
{
"code": 200,
"msg": "查询成功",
"rows": [
// 数据列表
],
"total": 100
}
```
#### 错误响应
```json
{
"code": 400001,
"msg": "参数错误",
"data": null
}
```
---
## 🔍 接口详细说明
### 1. 查询宿舍申请列表
#### 接口信息
**接口地址**: `GET /dormApplication/dormApplication/list`
**接口描述**: 分页查询宿舍申请列表,支持多条件筛选和权限过滤
**权限要求**: `dormApplication:dormApplication:list`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| --------- | ------- | ---- | -------------------- | ------------ |
| pageNum | Integer | N | 页码,默认 1 | 1 |
| pageSize | Integer | N | 每页大小,默认 10 | 10 |
| applicationName | String | N | 申请名称 | "张三调宿申请" |
| applicationType | String | N | 申请类型:1-调宿,2-退宿 | "1" |
| applicationStatus | String | N | 审批状态 | "draft" |
| studentName | String | N | 学生姓名 | "张三" |
| studentNo | String | N | 学号 | "20240001" |
| collegeName | String | N | 学院名称 | "计算机学院" |
| majorName | String | N | 专业名称 | "软件工程" |
| className | String | N | 班级名称 | "软工2024班" |
| applyTime | String | N | 申请时间 | "2025-01-15" |
#### 请求示例
```bash
curl -X GET "http://localhost:8080/dormApplication/dormApplication/list?pageNum=1&pageSize=10&applicationType=1" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"rows": [
{
"id": 1,
"applicationName": "张三调宿申请",
"applicationType": "1",
"applicationStatus": "draft",
"studentName": "张三",
"studentNo": "20240001",
"collegeName": "计算机学院",
"majorName": "软件工程",
"className": "软工2024班",
"applyTime": "2025-01-15 10:00:00",
"createBy": 1,
"createTime": "2025-01-15 10:00:00"
}
],
"total": 1
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | -------- | -------------------- |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
| 400001 | 参数错误 | 检查请求参数格式 |
---
### 2. 查询申请详情
#### 接口信息
**接口地址**: `GET /dormApplication/dormApplication/{id}`
**接口描述**: 根据 ID 查询宿舍申请的详细信息
**权限要求**: `dormApplication:dormApplication:query`
#### 路径参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| ------ | ---- | ---- | -------- | ------ |
| id | Long | Y | 申请单ID | 1 |
#### 请求示例
```bash
curl -X GET "http://localhost:8080/dormApplication/dormApplication/1" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"data": {
"id": 1,
"applicationName": "张三调宿申请",
"applicationType": "1",
"applicationStatus": "draft",
"studentId": 1001,
"studentName": "张三",
"studentNo": "20240001",
"collegeId": 101,
"collegeName": "计算机学院",
"majorId": 201,
"majorName": "软件工程",
"classId": 301,
"className": "软工2024班",
"currentCampusId": 1,
"currentCampusName": "主校区",
"currentBuildingId": 11,
"currentBuildingName": "1号楼",
"currentRoomId": 111,
"currentRoomNo": "101",
"currentBedId": 1111,
"currentBedNo": "01",
"targetCampusId": 1,
"targetCampusName": "主校区",
"targetBuildingId": 12,
"targetBuildingName": "2号楼",
"targetRoomId": 121,
"targetRoomNo": "201",
"targetBedId": 1211,
"targetBedNo": "01",
"reasonDetail": "宿舍环境不好,希望调换",
"applyTime": "2025-01-15 10:00:00",
"remark": "备注信息"
}
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 404001 | 数据不存在 | 检查 ID 是否正确 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
---
### 3. 新增宿舍申请
#### 接口信息
**接口地址**: `POST /dormApplication/dormApplication`
**接口描述**: 创建新的宿舍申请记录(调宿或退宿)
**权限要求**: `dormApplication:dormApplication:add`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------- | ---- | ---------------------------- | ---------- |
| applicationName | String | Y | 申请名称 | "张三调宿申请" |
| applicationType | String | Y | 申请类型:1-调宿,2-退宿 | "1" |
| studentId | Long | Y | 申请学生ID | 1001 |
| studentName | String | Y | 学生姓名 | "张三" |
| studentNo | String | Y | 学号 | "20240001" |
| collegeId | Long | Y | 学院ID | 101 |
| majorId | Long | Y | 专业ID | 201 |
| classId | Long | Y | 班级ID | 301 |
| currentCampusId | Long | N | 当前校区ID(调宿必填) | 1 |
| currentBuildingId | Long | N | 当前楼栋ID(调宿必填) | 11 |
| currentRoomId | Long | N | 当前房间ID(调宿必填) | 111 |
| currentBedId | Long | Y | 当前床位ID | 1111 |
| targetCampusId | Long | N | 目标校区ID(调宿必填) | 1 |
| targetBuildingId | Long | N | 目标楼栋ID(调宿必填) | 12 |
| targetRoomId | Long | N | 目标房间ID(调宿必填) | 121 |
| targetBedId | Long | N | 目标床位ID(调宿必填) | 1211 |
| reasonDetail | String | Y | 详细原因说明 | "宿舍环境不好" |
| applyTime | String | Y | 申请时间 | "2025-01-15 10:00:00" |
| attachmentOssIds | String | N | 附件OSS ID列表 | "oss1,oss2" |
| remark | String | N | 备注信息 | "备注内容" |
#### 请求体
```json
{
"applicationName": "张三调宿申请",
"applicationType": "1",
"studentId": 1001,
"studentName": "张三",
"studentNo": "20240001",
"collegeId": 101,
"majorId": 201,
"classId": 301,
"currentCampusId": 1,
"currentBuildingId": 11,
"currentRoomId": 111,
"currentBedId": 1111,
"targetCampusId": 1,
"targetBuildingId": 12,
"targetRoomId": 121,
"targetBedId": 1211,
"reasonDetail": "宿舍环境不好,希望调换到更好的宿舍",
"applyTime": "2025-01-15 10:00:00",
"remark": "备注信息"
}
```
#### 请求示例
```bash
curl -X POST "http://localhost:8080/dormApplication/dormApplication" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"applicationName": "张三调宿申请",
"applicationType": "1",
"studentId": 1001,
"studentName": "张三",
"studentNo": "20240001",
"collegeId": 101,
"majorId": 201,
"classId": 301,
"currentCampusId": 1,
"currentBuildingId": 11,
"currentRoomId": 111,
"currentBedId": 1111,
"targetCampusId": 1,
"targetBuildingId": 12,
"targetRoomId": 121,
"targetBedId": 1211,
"reasonDetail": "宿舍环境不好,希望调换到更好的宿舍",
"applyTime": "2025-01-15 10:00:00"
}'
```
#### 响应示例
```json
{
"code": 200,
"msg": "新增成功",
"data": {
"id": 3
}
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 400001 | 参数错误 | 检查必填参数是否缺失 |
| 400002 | 数据已存在 | 检查唯一字段是否重复 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
#### 参数验证规则
- `applicationName`: 长度 2-100 字符,不能为空
- `applicationType`: 只能为 "1" 或 "2"
- `studentId`: 必须为正整数
- `studentName`: 长度 2-50 字符,不能为空
- `studentNo`: 长度 6-20 字符,不能为空
- `reasonDetail`: 长度 5-500 字符,不能为空
- `applyTime`: 必须为有效的时间格式
---
### 4. 修改宿舍申请
#### 接口信息
**接口地址**: `PUT /dormApplication/dormApplication`
**接口描述**: 更新宿舍申请信息(仅限草稿状态的申请)
**权限要求**: `dormApplication:dormApplication:edit`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------- | ---- | ---------------------------- | ---------- |
| id | Long | Y | 申请单ID | 1 |
| applicationName | String | Y | 申请名称 | "张三调宿申请" |
| applicationType | String | Y | 申请类型:1-调宿,2-退宿 | "1" |
| studentId | Long | Y | 申请学生ID | 1001 |
| reasonDetail | String | Y | 详细原因说明 | "宿舍环境不好" |
| targetBedId | Long | N | 目标床位ID(调宿时必填) | 1211 |
| remark | String | N | 备注信息 | "修改后的备注" |
#### 请求体
```json
{
"id": 1,
"applicationName": "张三调宿申请(修改)",
"applicationType": "1",
"studentId": 1001,
"reasonDetail": "宿舍环境不好,希望调换到更好的宿舍(修改原因)",
"targetBedId": 1211,
"remark": "修改后的备注"
}
```
#### 请求示例
```bash
curl -X PUT "http://localhost:8080/dormApplication/dormApplication" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"id": 1,
"applicationName": "张三调宿申请(修改)",
"reasonDetail": "宿舍环境不好,希望调换到更好的宿舍(修改原因)",
"targetBedId": 1211
}'
```
#### 响应示例
```json
{
"code": 200,
"msg": "修改成功",
"data": null
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 404001 | 数据不存在 | 检查 ID 是否正确 |
| 400001 | 参数错误 | 检查参数格式是否正确 |
| 403002 | 状态不允许 | 只能修改草稿状态的申请 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
---
### 5. 删除宿舍申请
#### 接口信息
**接口地址**: `DELETE /dormApplication/dormApplication/{ids}`
**接口描述**: 批量删除宿舍申请(仅限草稿状态的申请)
**权限要求**: `dormApplication:dormApplication:remove`
#### 路径参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| ------ | ------ | ---- | ----------------------------- | ------- |
| ids | String | Y | 申请单ID 列表,多个用逗号分隔 | "1,2,3" |
#### 请求示例
```bash
curl -X DELETE "http://localhost:8080/dormApplication/dormApplication/1,2,3" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "删除成功",
"data": null
}
```
#### 错误码
| 错误码 | 说明 | 解决方案 |
| ------ | ---------- | -------------------- |
| 400001 | 参数错误 | 检查 ID 格式是否正确 |
| 403003 | 状态不允许 | 只能删除草稿状态的申请 |
| 401001 | 未登录 | 请先登录获取 token |
| 403001 | 无权限 | 请联系管理员分配权限 |
---
## 🎯 业务逻辑接口
### 1. 获取学生选择器选项
#### 接口信息
**接口地址**: `GET /dormApplication/dormApplication/studentOptions`
**接口描述**: 获取学生选择器选项列表,支持按学号、姓名检索
**权限要求**: `dormApplication:dormApplication:list`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------- | ---- | -------------------- | ------------ |
| pageNum | Integer | N | 页码,默认 1 | 1 |
| pageSize | Integer | N | 每页大小,默认 10 | 10 |
| studentName | String | N | 学生姓名 | "张三" |
| studentNo | String | N | 学号 | "20240001" |
#### 请求示例
```bash
curl -X GET "http://localhost:8080/dormApplication/dormApplication/studentOptions?pageNum=1&pageSize=10&studentName=张三" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"rows": [
{
"studentId": 1001,
"studentName": "张三",
"studentNo": "20240001",
"collegeName": "计算机学院",
"majorName": "软件工程",
"className": "软工2024班"
}
],
"total": 1
}
```
---
### 2. 获取二级学院审批人列表
#### 接口信息
**接口地址**: `GET /dormApplication/dormApplication/getCollegeApprovers`
**接口描述**: 根据学院ID获取二级学院审批人列表
**权限要求**: `dormApplication:dormApplication:list`
#### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
| -------- | ------- | ---- | -------------------- | ------------ |
| collegeId | Long | Y | 学院ID | 101 |
#### 请求示例
```bash
curl -X GET "http://localhost:8080/dormApplication/dormApplication/getCollegeApprovers?collegeId=101" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"data": [
{
"userId": 201,
"userName": "lisi",
"nickName": "李四",
"deptId": 101
}
]
}
```
---
### 3. 获取学工处审批人列表
#### 接口信息
**接口地址**: `GET /dormApplication/dormApplication/getStudentAffairsApprovers`
**接口描述**: 获取学工处审批人列表
**权限要求**: `dormApplication:dormApplication:list`
#### 请求示例
```bash
curl -X GET "http://localhost:8080/dormApplication/dormApplication/getStudentAffairsApprovers" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json"
```
#### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"data": [
{
"userId": 301,
"userName": "wangwu",
"nickName": "王五",
"deptId": 999
}
]
}
```
---
## 📋 数据字典
### 申请类型枚举
| 值 | 名称 | 说明 |
| --- | ---- | -------- |
| 1 | 调宿申请 | 学生申请更换床位 |
| 2 | 退宿申请 | 学生申请退宿 |
### 申请状态枚举
| 值 | 名称 | 说明 |
| ------ | ---- | -------- |
| draft | 草稿 | 申请已创建,待提交 |
| waiting | 待审核 | 申请已提交,等待审批 |
| finish | 已完成 | 审批通过,操作已执行 |
| cancel | 已撤销 | 申请被撤销 |
| back | 已退回 | 审批退回 |
| invalid | 已作废 | 申请已作废 |
| termination | 已终止 | 流程已终止 |
### 学生状态枚举
| 值 | 名称 | 说明 |
| --- | ---- | -------- |
| 1 | 在校生 | 正常在校学生 |
| 2 | 休学 | 学生休学状态 |
| 3 | 退学 | 学生退学状态 |
| 4 | 毕业 | 学生已毕业 |
---
## 🔄 版本历史
### v1.0.0 - 2025-01-15
- ✅ 初始版本发布
- ✅ 完成宿舍申请基础 CRUD 接口
- ✅ 完成学生选择器接口
- ✅ 完成审批人获取接口
- ✅ 集成工作流审批流程
- ✅ 实现调宿和退宿业务逻辑
---
## 📖 相关文档
- **数据库设计**:[数据库设计文档](../设计文档/database/)
- **业务需求**:[业务需求文档](../需求文档/)
- **工作流文档**:[工作流开发规范](../../.cursor/cursorrules-workflow.md)
- **退宿逻辑说明**:[退宿逻辑详细说明](./退宿逻辑详细说明.md)
- **API基础规范**:[API文档基础规范](./API文档基础规范.md)
---
## 📞 联系方式
**开发团队**:校园管理系统开发团队
**负责人**:zlwu
**邮箱**:dev@hzdyjs.edu.cn
**文档维护**:实时更新,如有问题请及时反馈
---
**📌 重要提醒**:
1. 所有接口都需要先登录获取 token
2. 请求头必须包含 `Authorization: Bearer {token}`
3. 参数验证失败会返回详细的错误信息
4. 生产环境请使用 HTTPS 协议
5. 申请状态为非草稿状态时,只能查看不能修改或删除
6. 退宿和调宿操作通过工作流审批完成后自动执行,无需手动调用业务接口
@@ -0,0 +1,175 @@
# 学生退宿逻辑详细说明
## 概述
本文档详细描述了学生宿舍管理系统中退宿操作的具体实现逻辑,包括前端界面、后端服务调用、数据库操作等各个层面的详细说明。
## 业务流程
### 1. 前端界面操作
**文件位置**: `web/src/views/xg/xsjcxx/xssssq/index.vue`
学生可以通过前端界面提交退宿申请:
- **申请类型**: `applicationType = "2"` (退宿申请)
- **申请状态**: 初始状态为 `draft` (草稿)
- **关键字段**:
- `currentBedId`: 当前床位ID
- `studentId`: 学生ID
- `classId`: 班级ID
### 2. 审批流程
退宿申请需要通过工作流审批,流程代码:`hzdyjs-tsts`
审批完成后,当 `applicationStatus = "finish"` 时,触发实际的退宿操作。
## 核心退宿逻辑
### 方法调用链
```java
// 1. 工作流监听器触发
@EventListener(condition = "#processEvent.flowCode=='hzdyjs-tsts'")
public void processHandler(ProcessEvent processEvent) {
// 当审批完成时,执行调宿/退宿操作
if ("finish".equals(processEvent.getStatus())) {
executeApplicationOperation(xgDormApplication);
}
}
// 2. 执行申请操作
private void executeApplicationOperation(XgDormApplication application) {
if ("2".equals(application.getApplicationType())) {
// 退宿申请 - 调用退宿接口
List<Long> bedIds = List.of(application.getCurrentBedId());
Boolean stayawayResult = xgDormBedStudentService.classTeacherStayawaySelectedBeds(
bedIds, // 床位ID列表
application.getClassId() // 班级ID
);
}
}
// 3. 实际退宿实现
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean classTeacherStayawaySelectedBeds(List<Long> bedIds, Long classId)
```
### 详细SQL操作
**文件位置**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/service/impl/XgDormBedStudentServiceImpl.java`
退宿操作涉及三个表的更新,按顺序执行:
#### 1. 更新学生基本信息表 (`xg_student_msg`)
```sql
-- 清理学生宿舍信息
UPDATE xg_student_msg
SET
dormitory_building = NULL, -- 清空宿舍楼信息
dormitory_room = NULL, -- 清空宿舍房间信息
ext_field1 = NULL, -- 清空床位ID(存储在扩展字段1中)
update_time = NOW(), -- 更新时间
update_by = ? -- 操作人ID
WHERE
ext_field1 IN (?) -- 床位ID列表(字符串形式)
AND deleted = 0 -- 未删除
AND student_status = '1'; -- 在校生状态
```
**说明**:
- `ext_field1` 字段存储床位ID
- 只处理在校生 (`student_status = '1'`)
- 将宿舍相关信息全部清空
#### 2. 更新床位学生分配表 (`xg_dorm_bed_student`)
```sql
-- 标记床位为退宿状态
UPDATE xg_dorm_bed_student
SET
status = '1', -- 状态:1-退宿
checkout_time = NOW(), -- 退宿时间
update_time = NOW(), -- 更新时间
update_by = ? -- 操作人ID
WHERE
bed_id IN (?) -- 床位ID列表
AND deleted = '0' -- 未删除
AND status = '0'; -- 当前状态:0-正常入住
```
**说明**:
- 状态变更:`0`(正常入住) → `1`(退宿)
- 记录退宿时间 `checkout_time`
- 只处理当前正常入住的床位
#### 3. 更新床位状态表 (`xg_dorm_bed`)
```sql
-- 将床位状态改为闲置
UPDATE xg_dorm_bed
SET
bed_status = '0' -- 床位状态:0-闲置
WHERE
id IN (?) -- 床位ID列表
AND deleted = '0'; -- 未删除
```
**说明**:
- 床位状态变更为闲置,供其他学生使用
- 不更新时间字段,只修改状态
## 数据状态说明
### 床位状态 (`bed_status`)
- `0`: 闲置 - 可分配给新学生
- `1`: 已分配 - 已有学生入住
### 床位学生分配状态 (`status`)
- `0`: 正常入住 - 学生正在使用该床位
- `1`: 退宿 - 学生已退宿,床位释放
### 学生状态 (`student_status`)
- `1`: 在校生 - 正常在校学生
- `2`: 休学
- `3`: 退学
- `4`: 毕业
## 事务处理
所有退宿操作在一个事务中执行:
```java
@Transactional(rollbackFor = Exception.class)
public Boolean classTeacherStayawaySelectedBeds(List<Long> bedIds, Long classId)
```
如果任何一步操作失败,整个退宿操作会回滚,确保数据一致性。
## 异常处理
- 床位ID列表为空时抛出 `IllegalArgumentException`
- SQL执行异常时抛出 `RuntimeException`
- 记录详细的日志信息用于问题排查
## 适用场景
此退宿逻辑适用于以下场景:
1. **学生主动退宿申请** - 通过前端界面提交退宿申请,经审批后执行
2. **学生退学处理** - 学生退学时自动释放床位
3. **学生毕业处理** - 学生毕业时自动释放床位
4. **学生休学处理** - 学生休学时释放床位
## 后续使用建议
在实现学生退学、毕业、休学脚本时,可以参考此退宿逻辑的SQL操作顺序:
1. 首先更新 `xg_student_msg` 表清空宿舍信息
2. 然后更新 `xg_dorm_bed_student` 表标记退宿状态
3. 最后更新 `xg_dorm_bed` 表释放床位
**注意**: 不同场景可能需要根据具体业务逻辑调整条件判断。