教室借用流程 API

1. 发起借用申请

所有登录用户均可申请:

student → counselor

chinese_teacher → assistant

foreign_teacher → assistant

POST /api/v1/borrow

Body

{
  "classroom_id": 121,
  "start_time": "2025-04-12T09:00:00",
  "end_time": "2025-04-12T11:00:00",
  "reason": "Lecture",
  "expected_students": 30,
  "activity_type": "student_activity",
  "is_urgent": false,
  "applicant_id": 12,
  "applicant_code": "2024123456"
}

说明:

  • applicant_id / applicant_codesuperadmin/secretary/assistant 可用,用于代用户提交申请;普通用户忽略该字段。

业务规则:

  • 时间限制(与 is_urgent、申请人角色有关):

    • assistant / superadmin:不受时间限制

    • student:仅允许申请未来 +1 到 +7 天

    • chinese_teacher / foreign_teacher / counselor / secretary:仅允许申请未来 至少 +1 天

    • is_urgent=true(加急):只能选择 当天

  • 时间冲突:

    • 与已有手动借用冲突:time conflict with existing borrow application

    • 与课程表冲突:time conflict with course schedule

2. 借用申请列表(按角色查看)

GET /api/v1/borrow

Query:

  • status

  • applicant

  • mine(可选,true/1 时只看自己的申请)

  • source_type(可选,manual/course

  • review_level(可选,first_review/second_review

  • activity_type(可选,student_activity/teaching_activity

  • page, page_size(兼容 size)

3. 申请详情

GET /api/v1/borrow/{id}

4. 审核申请

权限说明:

角色

可审批范围

counselor

学生活动一审(reviewer_role=counselor

secretary

教学活动一审(reviewer_role=secretary

assistant

所有申请二审

superadmin

所有申请,且可跳过流程直接批准

PUT /api/v1/borrow/{id}/review

Body

{
  "action": "approve",
  "remark": "同意",
  "forward_to": "superadmin"
}
  • actionapprove / reject / forward

  • forward_to:仅当 action=forward 时需要

系统自动触发:

  • 微信推送(中方教师/学生)

  • 邮件推送(外方教师)

说明:

  • 当申请处于 first_reviewaction=approve 会将申请流转到 second_review(状态仍为 pending

  • 当申请处于 second_reviewaction=approve 才会最终 approved

  • superadmin 可跳过一审/二审流程直接批准

  • assistant / superadmin 允许自审自己的申请,其余角色禁止自审

5. 申请者主动取消

PUT /api/v1/borrow/{id}/cancel

限制:

  • 仅允许申请人本人取消

  • 距离借用开始时间不足 6 小时内不允许取消

6. 课程借用改期(申请人或管理员)

仅支持对 source_type=coursestatus=approved 的记录改期:原记录会被取消(cancelled),同时创建一条新的 course 记录并直接 approved

POST /api/v1/borrow/{id}/reschedule

Body:

{
  "classroom_id": 121,
  "start_time": "2026-01-20T08:00:00+08:00",
  "end_time": "2026-01-20T09:50:00+08:00"
}

权限:申请人本人,或 superadmin/secretary/assistant