基于 Django 与 Vue 3 的 AI 实验室智能预约系统设计与实现

基于 Django 与 Vue 3 的 AI 实验室智能预约系统设计与实现

摘 要

针对高校实验室资源预约中信息不透明、时段冲突频发、管理依赖人工的现状,本系统采用 Django REST Framework + Vue 3 前后端分离架构,MySQL 8.4 持久化,实现了"认证 → 实验室管理 → 预约与冲突检测 → 审批 → 签到 → 统计通知"的完整业务闭环,并在此之上叠加 AI 能力层:AI 对话助手、自然语言智能排期与 AI 运营分析大屏,形成"传统预约管理 + 大模型智能服务"的一体化平台。

系统的技术贡献集中在三处:一是预约冲突的正确性保障,采用半开区间 [start, end) 重叠判定结合 select_for_update() 行锁与事务串行化,从算法与并发两个层面杜绝重复预约;二是 AI 服务的离线降级设计,大模型接口不可用时自动切换本地规则内核,保证核心智能功能始终可演示、可用;三是可解释的智能排期,推荐方案附带综合评分与推荐理由并经过四维安全校验。后端基于 DRF APITestCase 编写 28 个接口级单元测试,覆盖冲突 409、越权 404、签到窗口、审批通知等关键路径,全部通过;页面功能经浏览器全流程走查验证。

1 系统概述

1.1 课题背景

高校实验室的日常使用长期存在三类问题:

  1. 信息不透明:实验室开放时段、设备配置、占用情况分散在公告与人工答复中,学生寻找可用空档成本高;
  2. 流程无序:预约、审批、签到缺乏统一系统支撑,高峰期时段撞车、恶意占坑难以约束;
  3. 利用率失衡:哪些实验室空闲、哪些时段拥挤缺乏数据呈现,资源调度依赖管理员经验,无法引导错峰使用。

1.2 课题意义

  • 对学生:一站式查看实验室与空档、在线提交预约、实时获知审批结果,AI 助手支持用自然语言完成查询与办理;
  • 对管理员:审批、实验室与设备维护、利用率统计集中在一个后台,AI 运营大屏将运行状态可视化并自动生成分析结论;
  • 对毕业设计本身:覆盖 JWT 认证、并发控制、事务、可视化、大模型接入与降级设计等技术点,完整度高且均有工程实现支撑。

1.3 主要内容

第 1 章介绍课题背景与现状;第 2 章说明开发环境与技术选型;第 3 章进行可行性、功能与非功能需求分析;第 4 章给出架构、数据库与核心机制设计;第 5 章按模块展示详细实现;第 6 章给出测试方案与结果;最后总结全文。

1.4 研究现状

现有实验室预约类系统多停留在 CRUD 层面:能录入、能查询,但普遍存在两个缺口------其一,冲突检测仅在应用层做查询比对,缺少数据库层的并发保护,并发提交时可能产生重复预约;其二,预约数据沉睡在数据库中,缺少面向错峰引导与运营决策的数据可视化与智能分析。本系统针对这两个缺口,分别设计了行锁串行化的冲突防控机制和"热力图 + AI 运营大屏"的数据利用链路,并引入大模型能力降低普通用户的使用门槛。

2 系统开发环境

2.1 总体技术栈

层次 技术选型
前端 Vue 3 + Vite + Element Plus + Pinia + Vue Router + axios + ECharts
后端 Python 3.13 + Django 6.1 + Django REST Framework + SimpleJWT + django-cors-headers
数据库 MySQL 8.4(PyMySQL 驱动,InnoDB 引擎)
联调方式 Vite 开发服务器代理 + DRF browsable API,前后端独立启动

2.2 Django 与 DRF

Django 负责工程组织与 ORM,DRF 提供序列化、视图集与权限体系。后端按业务域拆分为 accounts、labs、bookings、notifications、assistant 五个应用,每个应用内部保持 models / serializers / views / tests 的固定分层,接口统一以 /api/<domain>/ 前缀暴露。

2.3 Vue 3 与组件库

前端采用组合式 API 与 <script setup> 写法;Element Plus 提供表格、表单、日历等后台组件;ECharts 承担热力图、趋势折线与占比环形图;Pinia 管理登录态与用户信息,Vue Router 负责路由与守卫,axios 实例统一携带 token 与错误处理。

2.4 认证机制

采用 JWT 方案:登录成功后后端返回 access + refresh 令牌,前端将 access token 与用户信息存入 localStorage,axios 请求拦截器自动附加 Authorization: Bearer 头;路由守卫在导航前校验 token 与角色字段,管理员区域(/admin/*)仅 role=1 或超级用户可进入,学生访问会被重定向回首页,越权接口在后端再以 DRF 权限类兜底。

2.5 MySQL 8.4

选用 InnoDB 引擎以利用其事务与行级锁能力------这是冲突检测方案的数据层基础;字符集统一 utf8mb4 以兼容生僻字与 emoji;驱动使用纯 Python 的 PyMySQL,避免本机编译 mysqlclient 的依赖问题。

3 需求分析

3.1 可行性分析

技术可行性 :Django + Vue 3 均为成熟主流技术,社区资料完备;大模型能力通过标准 HTTP 接口接入并可替换供应商,本地规则内核作为降级兜底,不依赖单一外部服务。经济可行性 :全部组件开源免费,仅需一台可运行 MySQL 的普通 PC 即可完整部署演示。操作可行性:学生端基于浏览器完成全部操作,AI 助手支持自然语言交互,无需培训;管理端为常规表格化后台,管理员可快速上手。

3.2 功能需求

学生端:

  1. 注册、登录、忘记密码(手机号线索找回);
  2. 浏览实验室列表与详情(位置、容量、设备);
  3. 按日期与时段提交预约,冲突实时提示;
  4. 查看我的预约,支持取消与在窗口期内签到;
  5. 对待审批单发起催审批(2 小时内限催一次);
  6. 查看实验室 × 时段占用热力图以错峰预约;
  7. 使用 AI 助手对话查询空档、诊断冲突、办理预约;
  8. 使用智能排期以自然语言描述需求并获取推荐方案;
  9. 接收审批结果等站内通知并标记已读;
  10. 维护个人资料、修改密码、查看个人使用统计。

管理端:

  1. 实验室与设备的增删改查、上下线管理;
  2. 预约审批(通过 / 驳回,驳回必填原因并自动释放时段);
  3. 查看数据统计概览(今日预约、待审批、总量等指标卡);
  4. 查看占用热力图与预约明细;
  5. 查看 AI 运营大屏:KPI、30 天趋势、预警事件与 AI 分析结论;
  6. 配置 AI 助手模型参数。

3.3 业务流程

主流程为:学生提交预约 → 系统执行参数校验与冲突检测(409 拦截)→ 生成待审批单并锁定时段 → 管理员审批 → 站内信通知学生 → 学生在实验开始前后签到窗口内签到 → 预约转为进行中 / 完成。旁路流程包括学生取消(释放时段)、管理员驳回(释放时段 + 通知)、催审批(通知全体管理员)。

3.4 非功能需求

  1. 并发安全:并发提交同一时段不得产生重复预约;
  2. 数据隔离:学生仅可见本人预约与通知,越权访问返回 404 而非 403,避免资源存在性泄露;
  3. 性能:常用列表接口响应在百毫秒级,统计接口允许秒级聚合;
  4. 可维护:后端按业务域分包,前端按视图分包,接口文档与部署文档随代码维护;
  5. 可用性:大模型不可用时 AI 功能自动降级为本地规则,核心链路不中断。

4 系统概要设计

4.1 系统架构

复制代码
浏览器(Vue 3 SPA)
    │  axios / JSON over HTTP
    ▼
Django REST Framework
  ├── accounts   认证与用户信息(JWT)
  ├── labs       实验室与设备 CRUD
  ├── bookings   预约 / 冲突检测 / 审批 / 签到 / 统计
  ├── notifications 站内通知
  └── assistant  AI 助手 / 智能排期 / 运营大屏
    │  ORM
    ▼
MySQL 8.4(InnoDB,事务 + 行锁)

4.2 功能结构

系统分为学生端与管理端两个功能区:学生端以"找实验室 → 约时段 → 查结果"为主线,叠加 AI 助手、智能排期与热力图三个智能入口;管理端以审批为核心,辅以资源维护、数据统计与 AI 运营大屏。

图 4-1 实验室列表界面(学生端)

图 4-2 实验室管理界面(管理端)

4.3 数据库设计

核心表包括:accounts_customuser(用户,含角色与状态字段)、labs_lab / labs_equipment(实验室与设备)、bookings_booking(预约,含状态机:待审批 → 已批准/已驳回 → 进行中 → 已完成/已取消)、notifications_notification(站内通知)、assistant 相关会话与配置表。预约表对(实验室, 日期, 时段)不建唯一索引------因为驳回释放后允许再次预约,唯一约束会误伤合法场景,故并发安全交由应用层冲突判定 + 行锁实现。详细 ER 图与字段说明见 docs/数据库设计.md。

4.4 核心机制设计

冲突检测与并发控制 :采用半开区间语义 [start, end),相邻时段(如前一段结束恰等于后一段开始)允许连续预约;检测条件为 start < exist.end AND end > exist.start,在事务内对目标实验室当日已有预约执行 select_for_update() 行锁,串行化并发提交:

python 复制代码
with transaction.atomic():
    qs = Booking.objects.select_for_update().filter(
        lab=lab, date=date, status__in=PENDING_OR_APPROVED)
    if any(s < end and e > start for s, e in
           qs.values_list('start_time', 'end_time')):
        raise Conflict409()

AI 离线降级:assistant 模块将"意图识别与回答生成"抽象为可替换后端------优先调用可配置的大模型接口;接口超时或不可达时自动切换本地规则内核(关键词意图 + 模板回答 + 真实预约数据查询),保证断网环境下对话、排期推荐与运营分析仍可演示。

5 系统详细设计与实现

5.1 认证模块

登录页提供账号密码登录,注册页采集手机号与院系信息,忘记密码页通过手机号线索重置。登录成功后前端存储 JWT 与用户信息,路由守卫据此控制各区域访问。

图 5-1 登录界面

5.2 实验室浏览与预约模块(学生端)

实验室列表展示位置、容量、设备与开放状态;进入预约页选择日期与时段后,系统实时提示与已有预约(含待审批)重叠的时段,被占用时段不可提交。

图 5-2 预约实验室界面

5.3 我的预约模块(学生端)

列表按状态分组展示本人预约,提供取消、窗口期内签到、对待审批单催审批等操作;已完成记录计入个人使用统计。

图 5-3 我的预约界面

5.4 占用热力图模块(双端共用)

聚合预约数据生成"实验室 × 时段"占用率色阶矩阵,直观呈现高峰与低谷,学生据此错峰预约,管理员据此调整开放策略。

图 5-4 占用热力图界面

5.5 AI 助手模块(学生端)

多轮对话界面支持查询空档、诊断本人预约冲突、解答安全规范、一句话办理预约;回答由大模型生成,断网时自动切换本地规则内核,界面标注当前模型与运行模式。历史会话持久化,可回看与删除。

图 5-5 AI 助手对话界面

5.6 智能排期模块(学生端)

用户用自然语言描述需求(如"周三下午 3 小时,需要超净工作台"),系统解析时间、设备、资质等约束,检索满足条件的实验室并生成多套排期方案,每套方案附综合评分与推荐理由,经时间、设备、资质、安全四维校验后可直接一键转预约。

图 5-6 智能排期界面

5.7 站内通知模块

审批通过、驳回、催办等事件生成站内信,顶栏铃铛显示未读数,通知页支持单条已读与全部已读。

图 5-7 站内通知界面

5.8 预约审批模块(管理端)

待审批列表展示申请人、实验室、时段与事由,通过即生效并通知学生;驳回必须填写原因,驳回后时段立即释放并通知学生。

图 5-8 预约审批界面

5.9 数据统计模块(管理端)

指标卡呈现今日预约、待审批、通过/驳回/取消总量,配合趋势图与明细表,支撑日常运营决策。

图 5-9 后台数据统计界面

5.10 AI 运营大屏模块(管理端)

大屏聚合展示实验室总数、今日预约、待人工确认、今日 AI 请求数等 KPI,含近 30 天预约趋势、时段占用热力、AI 功能使用分布与实时预警(如爽约率超阈值),并由大模型生成利用率、爽约风险与错峰建议三段分析结论,支持一键生成 AI 运营报告。

图 5-10 AI 运营大屏界面

6 系统测试

6.1 测试目的与方法

采用两种方法验证:一是接口级单元测试,基于 DRF APITestCase 直连 MySQL 测试库,覆盖正常流与异常流;二是浏览器功能走查,按"登录 → 预约 → 审批 → 通知 → 签到"主流程在 Chrome 中逐步操作核对。

6.2 测试环境

项目 配置
操作系统 Windows 11
后端 Python 3.13 + Django 6.1 + DRF
数据库 MySQL 8.4(独立测试库)
前端 Vue 3 + Vite 6
浏览器 Chrome 无头 / 有头

6.3 核心测试用例

编号 测试场景 预期结果 实测
T01 正常提交不冲突预约 201 创建成功 通过
T02 与已有预约部分重叠 409 冲突拦截 通过
T03 相邻时段连约(end = start) 允许提交 通过
T04 驳回已通过的预约 时段释放,状态流转 通过
T05 预约过去日期 / 过远日期 400 参数错误 通过
T06 非开放时段 / 时长不足 400 参数错误 通过
T07 取消他人预约 404 不可见即不可操作 通过
T08 学生调用审批接口 403 权限拒绝 通过
T09 未登录访问业务接口 401 未认证 通过
T10 通过预约并触发通知 学生收到站内信 通过
T11 重复审批同一预约 400 状态非法 通过
T12 签到时间窗外签到 400 拒绝 通过
T13 待审批状态签到 400 拒绝 通过
T14 签到成功后重复签到 幂等,不产生异常 通过
T15 越权查看他人通知 404 不可见 通过

上述用例分别验证了冲突判定(T02/T03)、参数校验(T05/T06)、权限与数据隔离(T07--T09/T15)、审批状态机(T10--T11)与签到窗口(T12--T14)五条设计约束。

6.4 专项验证

并发冲突实测 :模拟两个请求并发提交同一实验室相同时段,后提交者被 409 拦截,数据库中仅存在一条有效记录------验证了行锁串行化方案在真实并发下的正确性(过程记录见 docs/数据库设计.md 第七节)。

AI 降级实测:断开外网后,AI 助手与智能排期自动切换本地规则内核,空档查询与排期推荐仍可返回基于真实预约数据的结果,界面标注降级模式。

6.5 测试结果

后端单元测试共 28 个用例,覆盖冲突 409、越权 404、签到窗口、审批通知、已完成流转等关键路径,全部通过;前端页面按学生与管理两种角色全流程走查,无死链、无样式错位、控制台无报错。

结 论

本系统完成了"基于 Django 与 Vue 3 的 AI 实验室智能预约系统"的设计与实现:在认证、预约、审批、签到、通知的完整业务闭环之上,叠加了 AI 对话助手、可解释智能排期与 AI 运营大屏三层智能能力。技术上,半开区间冲突判定结合行锁与事务保证了并发正确性,可替换的 AI 后端设计兼顾了大模型能力与离线可用性;28 个接口级单元测试与浏览器全流程走查为上述设计提供了验证。系统功能完整、可独立部署,可作为同类资源预约场景的参考实现。

需要源码的私信!

相关推荐
润乾软件1 小时前
LLM 规划,编译器生成:以工作流为契约的确定性 SQL 生成器
人工智能·sql·sqlazy
熊猫钓鱼>_>1 小时前
Harmony Intelligence AI 开放能力深度解读 | 图像超分 + 文搜图:端侧视觉的“放大镜“与“搜索引擎“
人工智能·搜索引擎·harmonyos·鸿蒙·npu·图像超分·文搜图
聚梦小课堂1 小时前
Jev模型:一个不会说话,只做判断的模型
人工智能·chatgpt
高升说1 小时前
深度相机接口选型:MIPI、USB3 与 GigE 的带宽估算与工程取舍
网络·人工智能·数码相机
成为深度学习高手2 小时前
DAG:沿时间与通道双相关建模的外生变量时序预测
网络·人工智能·深度学习·算法·机器学习·数据挖掘·时序数据库
迅易科技2 小时前
微软Copilot最新升级解读:哪些变化真正影响企业数字化建设?
人工智能·microsoft·copilot
Geek-Chow2 小时前
反向代理:从银行边缘网关到 AI 网关的第一性原理
人工智能
开开心心就好2 小时前
视频模糊怎么修复?免费工具支持批量处理
java·前端·人工智能·智能手机·pdf·excel
change_fate2 小时前
ChatGPT打不开,卸载删除不了,但是存在列表中问题修复
人工智能·chatgpt