教室借用
API 事实来源:Django 后端自动文档
借用为什么单独建模
borrowings 负责人工借用申请、审批路由、取消和借用改期。它不拥有课程事实,只在冲突检测和课程派生借用场景中引用课程实例。
代码入口:
backend/apps/borrowings/models/backend/apps/borrowings/views/backend/apps/borrowings/services/
审批路由
借用列表和可操作动作由 current_role 决定,不是简单的“管理员/普通用户”二分。activity_type 决定初审角色:学生类活动给 counselor,教学类活动给 secretary。二审角色是 assistant;superadmin 可以直接最终审批。
冲突检测同时覆盖手动借用和 CourseOccurrence。任何只检查手动借用的改动都会让课程和借用在同一教室同一时间重叠。
相似但不同的动作
课程借用改期与课程实例改期是不同动作。source_type=course 的记录来自课程场景,与普通人工借用不完全等价。取消规则目前有开始前 6 小时限制,属于用户可见行为。
改状态机会影响哪里
- 新增状态或审批分支时,同步检查列表过滤、权限判断、操作日志和前端待办视图。
- 修改自审规则前,先确认
assistant/superadmin自审例外是否仍成立。 - 代申请能力只授予特权角色,并保留申请人身份。