
前言
在高校教学与科研活动中,大型实验设备是重要的资源支撑,但传统人工管理模式常面临设备信息不透明、预约流程繁琐、使用记录难追溯等问题。为解决这一痛点,我以“高校大型实验设备管理与预约信息系统”作为毕业设计主题,借助飞算JavaAI工具完成系统开发。本文将详细记录从需求分析到代码生成、优化调试的全过程,分享飞算JavaAI在实际开发中的应用体验。
一、需求分析与规划
1. 功能需求
高校大型实验设备管理与预约信息系统需满足三类用户(管理员、教师、学生)的核心需求,具体拆解如下:
- 管理员端:设备信息管理(新增、编辑、删除设备型号、规格、存放位置、故障状态等)、用户管理(新增教师/学生账号、分配权限)、预约审核(审核教师/学生的设备预约申请)、使用统计(按设备类型、时间段统计使用频次、预约成功率);
- 教师端:设备查询(按设备名称、类型、可用状态筛选)、预约申请(选择设备、预约日期与时间段、填写使用用途)、预约记录查看(已通过/待审核/已拒绝的预约记录)、使用反馈(提交设备使用后的状态、故障问题);
- 学生端:设备查询(仅查看可用设备信息)、预约申请(需选择指导教师,且预约时间段需与教师账号绑定)、预约记录跟踪、使用须知查看(设备操作规范、预约违约规则)。

2. 核心模块
基于需求分析,系统划分为5个核心模块,各模块职责明确且相互联动:
| 模块名称 | 核心功能 | 关联模块 |
|---|---|---|
| 用户管理模块 | 账号注册、登录、权限分配、信息编辑 | 所有模块(权限控制) |
| 设备管理模块 | 设备信息维护、状态更新、故障上报 | 预约管理模块(设备可用性判断) |
| 预约管理模块 | 预约申请提交、审核流程、预约取消 | 用户管理模块(权限校验)、设备管理模块(设备状态同步) |
| 记录统计模块 | 使用记录查询、预约数据统计、报表导出 | 设备管理模块(设备数据)、预约管理模块(预约数据) |
| 系统通知模块 | 预约审核结果推送、设备故障提醒、预约到期提醒 | 预约管理模块(审核/预约状态)、设备管理模块(故障状态) |

3. 技术选型
借助飞算JavaAI的“智能引导”功能,结合毕业设计的开发难度与可实现性,确定技术栈如下:
- 后端框架:Spring Boot 2.7.x(轻量化、易上手,适合快速开发);
- 数据库:MySQL 8.0(开源免费,支持复杂查询,满足设备与预约数据存储需求);
- 前端框架:Vue 3 + Element Plus(组件丰富,可视化效果好,降低前端开发难度);
- 开发工具:IntelliJ IDEA 2023.1 + 飞算JavaAI插件(插件直接集成在IDEA中,可实时生成代码)。
二、飞算JavaAI开发实战
本次开发全程依赖飞算JavaAI的“智能引导”功能,从需求输入到源码生成共分为6个关键步骤,每个步骤均通过插件可视化操作完成,以下为详细流程与实操记录:
输入提示词(明确开发需求)
打开IntelliJ IDEA,启动飞算JavaAI插件,在“智能引导”的“需求输入”界面,输入详细提示词:
“请帮我开发高校大型实验设备管理与预约信息系统的后端代码,基于Spring Boot 2.7.x和MySQL 8.0,需包含用户管理(管理员/教师/学生三类角色)、设备管理(设备信息CRUD、状态更新)、预约管理(预约申请、审核、取消)三大核心模块,要求生成实体类、Mapper接口、Service层、Controller层代码,且符合RESTful API规范。”
****
理解需求(需求拆解与确认)
点击“确认提交”后,飞算JavaAI自动进入“需求理解”环节,约10秒后生成需求拆解报告,内容包含:
- 需求匹配度分析:明确系统是围绕用户、设备、预约展开的管理系统,涉及多角色权限与多种预约相关操作,与常见的管理系统开发需求适配。
- 模块拆解确认:将需求细化为用户管理模块(涵盖管理员、教师、学生三类角色的权限控制与身份认证)、设备信息管理模块(支持设备信息的增删改查及状态更新)、预约管理模块(包含预约申请、审核、取消等子功能,以及预约状态跟踪)。

设计接口(RESTful API规划)
确认需求后,插件自动跳转至 “接口设计” 界面,围绕用户管理、设备管理、预约管理这几大模块,生成了对应接口的详细说明,涉及接口在用户注册登录、设备增删改查、预约申请审核等场景下的功能定位与核心作用阐述。
- 用户管理接口相关:明确用户管理的职责是对系统中管理员、教师、学生三类角色进行注册、登录、权限验证及信息维护,包含用户身份认证与授权机制,以确保不同角色有不同操作权限,为后续设计具体的用户管理相关 RESTful API 提供了功能范围和目标方向。
- 设备管理接口相关:确定设备管理要实现对实验设备信息全生命周期的管理,涵盖设备的新增、修改、删除和查询功能,还支持设备状态(如可用、维修中、已预约等)的实时更新,为设计设备管理类的 RESTful API 划定了功能边界。
- 预约管理接口相关:指出预约管理需支持用户提交设备预约申请、管理员审核预约请求,以及用户或管理员取消已批准预约记录,同时要保障预约流程的状态流转控制和数据一致性,为预约管理相关的 RESTful API 设计明确了核心功能和要求。

表结构设计(数据库表生成)
完成接口设计后,自动推导所需数据库表,并生成表结构(含字段名、数据类型、长度、主键、外键、备注),同时也支持手动编辑修改表结构。核心表结构如下:
- user_info 表(用户信息表):user_id(BIGINT,主键,自动递增,用户唯一标识)、user_name(VARCHAR (50),非空,用户名)、password(VARCHAR (100),非空,用户密码(加密存储))、role_type(TINYINT,非空,角色类型:1 - 管理员,2 - 教师,3 - 学生)、email(VARCHAR (100),邮箱地址)、phone(VARCHAR (20),手机号码)、status(TINYINT,默认 1,账户状态:1 - 启用,0 - 禁用)、create_by(BIGINT,创建人 ID)、create_time(DATETIME,默认当前时间戳,创建时间)、update_by(BIGINT,修改人 ID)、update_time(DATETIME,默认当前时间戳且更新时自动更新,修改时间);
- device_info 表(设备信息表):device_id(BIGINT,主键,自动递增,设备唯一标识)、device_name(VARCHAR (100),非空,设备名称)、device_model(VARCHAR (50),设备型号)、location(VARCHAR (100),设备所在位置)、status(TINYINT,默认 1,设备状态:1 - 可用,2 - 维修中,3 - 已预约)、description(TEXT,设备描述信息)、create_by(BIGINT,创建人 ID)、create_time(DATETIME,默认当前时间戳,创建时间)、update_by(BIGINT,修改人 ID)、update_time(DATETIME,默认当前时间戳且更新时自动更新,修改时间);
- reservation_info 表(预约信息表):reservation_id(BIGINT,主键,自动递增,预约记录唯一标识)、user_id(BIGINT,非空,申请人 ID)、device_id(BIGINT,非空,设备 ID)、start_time(DATETIME,非空,预约开始时间)、end_time(DATETIME,非空,预约结束时间)、status(TINYINT,默认 1,预约状态:1 - 待审核,2 - 已批准,3 - 已拒绝,4 - 已取消)、remark(TEXT,备注信息)、apply_reason(TEXT,申请原因)、create_by(BIGINT,创建人 ID)、create_time(DATETIME,默认当前时间戳,创建时间)、update_by(BIGINT,修改人 ID)、update_time(DATETIME,默认当前时间戳且更新时自动更新,修改时间)。

处理逻辑(接口实现思路生成)
点击“下一步”后,插件进入“处理逻辑”界面,针对每个接口生成详细的业务处理流程,明确参数校验、数据库操作、异常处理的核心逻辑。以“预约管理”为例,处理逻辑如下:
1. 提交设备预约申请接口处理逻辑
- 接收前端传入的预约参数(含必填的 userId、deviceId、startTime、endTime,及可选的 applyReason、remark);
- 调用 UserService 查询用户信息,校验用户是否存在且账户状态为启用,若不满足则返回
{"code":"000001","msg":"用户信息不存在或已被禁用","data":...};- 调用 DeviceService 查询设备信息,校验设备是否存在且状态为可用,若不满足则返回
{"code":"000001","msg":"设备不可用或不存在","data":...};- 调用 ReservationService 查询该设备在 “startTime-endTime” 时间段内的已批准预约记录,若存在冲突则返回
{"code":"000001","msg":"该时间段已有其他已批准的预约","data":...};- 将预约参数封装为 ReservationInfo 实体,默认设置预约状态为 “1 - 待审核”,调用 ReservationService 保存至数据库;
- 返回
{"code":"000000","msg":"调用成功","data":...}的成功响应。
2. 管理员审核预约申请接口处理逻辑
- 接收前端传入的审核参数(必填的 reservationId、status,status 取值为 2 - 已批准或 3 - 已拒绝);
- 调用 ReservationService 查询预约记录,校验 reservationId 对应的预约是否存在,若不存在则返回
{"code":"000001","msg":"预约记录不存在","data":...};- 校验当前预约状态是否为 “1 - 待审核”,若不是则返回
{"code":"000001","msg":"仅待审核状态可进行审核操作","data":...};- 若 status 为 “2 - 已批准”,调用 DeviceService 将对应设备状态更新为 “3 - 已预约”;
- 调用 ReservationService 更新预约记录的状态(已批准 / 已拒绝)及更新时间;
- 返回
{"code":"000000","msg":"调用成功","data":...}的成功响应。
3. 取消已批准的预约接口处理逻辑
- 接收前端传入的预约取消参数(必填的 reservationId);
- 调用 ReservationService 查询预约记录,校验 reservationId 对应的预约是否存在,若不存在则返回
{"code":"000001","msg":"预约记录不存在","data":...};- 校验当前预约状态是否为 “2 - 已批准”,若不是则返回
{"code":"000001","msg":"只有已批准的预约可以被取消","data":...};- 调用 ReservationService 将预约状态更新为 “4 - 已取消”,并同步更新记录的修改时间;
- 调用 DeviceService 将对应设备的状态从 “3 - 已预约” 更新为 “1 - 可用”;
- 返回
{"code":"000000","msg":"调用成功","data":...}的成功响应。
4. 查询用户的所有预约记录接口处理逻辑
- 接收前端传入的查询参数(必填的 userId);
- 调用 UserService 查询用户信息,校验 userId 对应的用户是否存在,若不存在则返回
{"code":"000001","msg":"用户不存在","data":...};- 调用 ReservationService 根据 userId 查询该用户的所有预约记录(含待审核、已批准、已拒绝、已取消状态),并按创建时间倒序排序;
- 将查询到的预约记录列表封装为数据对象;
- 返回
{"code":"000000","msg":"调用成功","data":{预约记录列表}}的成功响应。
5. 查询设备的预约历史接口处理逻辑
- 接收前端传入的查询参数(必填的 deviceId);
- 调用 DeviceService 查询设备信息,校验 deviceId 对应的设备是否存在,若不存在则返回
{"code":"000001","msg":"设备不存在","data":...};- 调用 ReservationService 根据 deviceId 查询该设备的所有预约记录(含各状态),并按预约开始时间倒序排序;
- 将查询到的设备预约历史列表封装为数据对象;
- 返回
{"code":"000000","msg":"调用成功","data":{设备预约历史列表}}的成功响应。

生成源码(完整工程代码输出)
确认处理逻辑后,点击“生成源码”,飞算JavaAI开始生成完整工程代码,约几分钟分钟后生成完成(根据项目大小生成所需时间有所差别),代码结构遵循MVC架构,包含:
**配置类:**src/main/java/xm_lab_equipment/config/WebConfig(用于 Web 相关配置,如跨域等);
**Controller 层:**src/main/java/xm_lab_equipment/controller/DeviceController.java、ReservationController.java、UserController.java(包含接口映射、参数接收、响应返回逻辑);
**DTO 类:**src/main/java/xm_lab_equipment/dto/request下的AdminReviewRequest、CancelReservationRequest、DeviceAddRequest等请求类,以及src/main/java/xm_lab_equipment/dto/response/RestResult响应类(用于封装接口请求和响应数据);
**实体类:**src/main/java/xm_lab_equipment/entity/DeviceDO.java、DeviceInfo.java、ReservationInfo.java、UserInfo.java(映射数据库表结构,存储数据);
**Repository 接口:**src/main/java/xm_lab_equipment/repository下的DeviceInfoRepository、DeviceRepository、ReservationInfoRepository、UserInfoRepository、UserRepository(用于数据库操作,提供数据访问能力);
**Service 层:**src/main/java/xm_lab_equipment/service下的DeviceService.java、ReservationService.java、UserService.java接口,以及src/main/java/xm_lab_equipment/service/impl下的DeviceServiceImpl.java、ReservationServiceImpl.java、UserServiceImpl.java实现类(包含业务逻辑实现);
**启动类:**src/main/java/xm_lab_equipment/XmLabEquipmentApplication.java(项目启动入口)。以下是项目结构的表格形式展示:
| 类别 | 路径及文件 | 说明 |
|---|---|---|
| 配置类 | src/main/java/xm_lab_equipment/config/WebConfig | 用于Web相关配置,如跨域等 |
| Controller层 | src/main/java/xm_lab_equipment/controller/DeviceController.java | 包含设备相关接口映射、参数接收、响应返回逻辑 |
| src/main/java/xm_lab_equipment/controller/ReservationController.java | 包含预约相关接口映射、参数接收、响应返回逻辑 | |
| src/main/java/xm_lab_equipment/controller/UserController.java | 包含用户相关接口映射、参数接收、响应返回逻辑 | |
| DTO类 | src/main/java/xm_lab_equipment/dto/request/AdminReviewRequest | 管理员审核请求数据封装类 |
| src/main/java/xm_lab_equipment/dto/request/CancelReservationRequest | 取消预约请求数据封装类 | |
| src/main/java/xm_lab_equipment/dto/request/DeviceAddRequest | 设备添加请求数据封装类 | |
| …(其他请求类) | 其他接口请求数据封装类 | |
| src/main/java/xm_lab_equipment/dto/response/RestResult | 接口响应数据封装类 | |
| 实体类 | src/main/java/xm_lab_equipment/entity/DeviceDO.java | 设备相关数据实体类(映射数据库表) |
| src/main/java/xm_lab_equipment/entity/DeviceInfo.java | 设备信息实体类(映射数据库表) | |
| src/main/java/xm_lab_equipment/entity/ReservationInfo.java | 预约信息实体类(映射数据库表) | |
| src/main/java/xm_lab_equipment/entity/UserInfo.java | 用户信息实体类(映射数据库表) | |
| Repository接口 | src/main/java/xm_lab_equipment/repository/DeviceInfoRepository | 设备信息数据访问接口 |
| src/main/java/xm_lab_equipment/repository/DeviceRepository | 设备数据访问接口 | |
| src/main/java/xm_lab_equipment/repository/ReservationInfoRepository | 预约信息数据访问接口 | |
| src/main/java/xm_lab_equipment/repository/UserInfoRepository | 用户信息数据访问接口 | |
| src/main/java/xm_lab_equipment/repository/UserRepository | 用户数据访问接口 | |
| Service层 | src/main/java/xm_lab_equipment/service/DeviceService.java | 设备相关业务逻辑接口 |
| src/main/java/xm_lab_equipment/service/ReservationService.java | 预约相关业务逻辑接口 | |
| src/main/java/xm_lab_equipment/service/UserService.java | 用户相关业务逻辑接口 | |
| src/main/java/xm_lab_equipment/service/impl/DeviceServiceImpl.java | 设备相关业务逻辑实现类 | |
| src/main/java/xm_lab_equipment/service/impl/ReservationServiceImpl.java | 预约相关业务逻辑实现类 | |
| src/main/java/xm_lab_equipment/service/impl/UserServiceImpl.java | 用户相关业务逻辑实现类 | |
| 启动类 | src/main/java/xm_lab_equipment/XmLabEquipmentApplication.java | 项目启动入口类 |

将生成的代码,全部合并到项目当中,代码无语法错误,可以直接运行测试。

三、优化与调试心得
1. 遇到的问题及解决方案
(1)问题1:预约冲突判断逻辑不精准
生成的ReservationService中,预约冲突判断仅比较“applyDate相同+startTime < 已预约endTime且endTime > 已预约startTime”,但未考虑“已预约时间段包含申请时间段”“申请时间段包含已预约时间段”的场景,导致存在冲突漏判。
解决方案:借助飞算JavaAI的“智能会话”功能,输入问题“如何优化MySQL中预约时间段冲突的查询逻辑?”,返回优化后的SQL查询条件:
SELECT COUNT(*) FROM reservation
WHERE equipment_id = #{equipmentId}
AND apply_date = #{applyDate}
AND audit_status = 1
AND (
(start_time < #{endTime} AND end_time > #{startTime}) -- 部分重叠
OR (start_time <= #{startTime} AND end_time >= #{endTime}) -- 已预约包含申请
OR (start_time >= #{startTime} AND end_time <= #{endTime}) -- 申请包含已预约
)
将该SQL整合到ReservationMapper.xml的countConflictReservation方法中,解决冲突漏判问题。
(2)问题2:密码明文存储安全风险
生成的User实体类中,password字段未加密,用户注册时密码以明文形式存入数据库,存在安全隐患。
解决方案:手动引入Spring Security的BCryptPasswordEncoder,在UserServiceImpl的register方法中添加密码加密逻辑:
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Override
public Result register(User user) {
// 密码加密
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
// 其他逻辑...
userMapper.insert(user);
return Result.success("注册成功");
}
同时在登录接口(UserController的login方法)中添加密码校验逻辑,确保登录时使用加密后的密码比对。
(3)问题3:前端请求跨域问题
当前端Vue项目调用后端接口时,出现“Access-Control-Allow-Origin”跨域错误,生成的代码中未配置跨域支持。
解决方案:通过飞算JavaAI“智能会话”查询“Spring Boot解决跨域问题的配置”,AI返回跨域配置类代码,在工程中新增config/CorsConfig.java:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.maxAge(3600);
}
}
添加后重启后端服务,跨域问题解决。
四、成果展示与总结
1. 系统成果展示
(1)工程结构完整性
生成的高校大型实验设备管理与预约信息系统工程,严格遵循 MVC 架构设计,目录结构清晰且层级分明,完整工程结构如下:
xm_lab_equipment/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── xm_lab_equipment/
│ │ │ ├── XmLabEquipmentApplication.java // 项目启动入口,含@SpringBootApplication注解
│ │ │ ├── config/
│ │ │ │ └── WebConfig.java // 配置跨域、资源映射等Web相关参数
│ │ │ ├── controller/
│ │ │ │ ├── DeviceController.java // 设备管理接口(新增/编辑/查询设备)
│ │ │ │ ├── ReservationController.java // 预约管理接口(申请/审核/取消预约)
│ │ │ │ └── UserController.java // 用户管理接口(注册/登录/权限校验)
│ │ │ ├── dto/
│ │ │ │ ├── request/
│ │ │ │ │ ├── AdminReviewRequest.java // 审核预约请求参数封装
│ │ │ │ │ ├── CancelReservationRequest.java // 取消预约请求参数封装
│ │ │ │ │ └── DeviceAddRequest.java // 新增设备请求参数封装
│ │ │ │ └── response/
│ │ │ │ └── RestResult.java // 统一响应结果(含code、msg、data字段)
│ │ │ ├── entity/
│ │ │ │ ├── DeviceDO.java // 设备数据对象(映射device_info表)
│ │ │ │ ├── DeviceInfo.java // 设备信息实体(含设备状态、位置等属性)
│ │ │ │ ├── ReservationInfo.java // 预约信息实体(映射reservation_info表)
│ │ │ │ └── UserInfo.java // 用户信息实体(映射user_info表,含角色类型字段)
│ │ │ ├── repository/
│ │ │ │ ├── DeviceInfoRepository.java // 设备信息数据访问接口(CRUD方法)
│ │ │ │ ├── DeviceRepository.java // 设备数据对象访问接口
│ │ │ │ ├── ReservationInfoRepository.java // 预约信息数据访问接口
│ │ │ │ ├── UserInfoRepository.java // 用户信息数据访问接口
│ │ │ │ └── UserRepository.java // 用户数据对象访问接口
│ │ │ ├── service/
│ │ │ │ ├── DeviceService.java // 设备管理服务接口(定义设备操作方法)
│ │ │ │ ├── ReservationService.java // 预约管理服务接口(定义预约操作方法)
│ │ │ │ └── UserService.java // 用户管理服务接口(定义用户操作方法)
│ │ │ └── service/impl/
│ │ │ ├── DeviceServiceImpl.java // 设备管理服务实现类(业务逻辑落地)
│ │ │ ├── ReservationServiceImpl.java // 预约管理服务实现类
│ │ │ └── UserServiceImpl.java // 用户管理服务实现类
│ │ └── resources/
│ │ ├── application.yml // 核心配置文件(数据库连接、服务端口、日志级别)
│ │ └── db/

(2)核心功能可运行性
通过对接后端项目进行数据的展示,以下为用户预约申请场景和****管理员审核场景展示:


2. 飞算 JavaAI 使用体验总结
(1)核心优势
- 开发效率大幅提升:传统毕业设计开发需手动编写实体类、Mapper 接口、配置文件等基础代码,耗时约 3-5 天;而飞算 JavaAI 通过 “智能引导” 功能,1 小时内即可生成完整工程代码,且代码结构规范,直接跳过 “基础编码” 阶段,专注于业务逻辑优化。
- 需求匹配度高:输入详细提示词后,AI 能精准拆解需求(如识别 “三类用户角色”“设备状态流转” 等核心要点),生成的接口设计、表结构与实际业务场景高度契合,无需大规模调整基础设计。
- 辅助调试能力强:遇到 “预约冲突判断不精准”“跨域” 等问题时,通过 “智能会话” 功能输入问题,AI 能快速提供针对性解决方案(如优化 SQL 语句、生成跨域配置类),减少查阅资料的时间成本,尤其适合毕业设计中缺乏开发经验的学生。
(2)待优化方向
- 个性化逻辑支持有限:对于 “学生预约需绑定指导教师”“设备使用后需提交使用报告” 等个性化需求,AI 生成的基础代码未覆盖,需手动补充业务逻辑,若能在提示词中支持更细粒度的需求描述,可进一步减少手动开发量。
- 前端代码生成缺失:当前仅支持后端代码生成,前端 Vue 页面需手动开发,若后续能新增前端页面、组件的生成功能,可实现 “前后端代码一站式生成”,进一步降低毕业设计开发门槛。
(3)个人使用建议
- 提示词需精准详细:在输入需求时,需明确 “技术栈版本”“核心模块功能”“角色权限差异” 等关键信息(如 “基于 Spring Boot 2.7.x,学生预约需选择指导教师”),避免因需求模糊导致生成代码不符合预期。
- 生成后需二次校验:AI 生成的代码虽无语法错误,但需结合业务场景校验逻辑合理性(如本次开发中发现 “预约冲突判断不完整”),建议通过 Postman 逐一测试核心接口,确保功能符合需求。
- 善用 “智能会话” 功能:开发中遇到技术问题时,优先使用 AI 的 “智能会话” 功能,可针对性查询 “SQL 优化”“权限控制” 等具体问题,比通用搜索引擎更高效,且解决方案与当前工程代码风格适配。
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_62782025/article/details/151281968



