AI辅助开发高校设备管理系统:从需求到上线的完整实践

0 阅读

一、项目背景与需求分析

在高校教学与科研活动中,大型实验设备是重要的资源支撑,但传统人工管理模式常面临设备信息不透明、预约流程繁琐、使用记录难追溯等问题。为解决这一痛点,我以“高校大型实验设备管理与预约信息系统”作为毕业设计主题,借助飞算JavaAI工具完成系统开发。本文将详细记录从需求分析到代码生成、优化调试的全过程,分享飞算JavaAI在实际开发中的应用体验。

IDE开发环境中使用AI代码生成工具(飞算JavaAI)生成

1.1 功能需求

高校大型实验设备管理与预约信息系统需满足三类用户(管理员、教师、学生)的核心需求,具体拆解如下:

  • 管理员端:设备信息管理(新增、编辑、删除设备型号、规格、存放位置、故障状态等)、用户管理(新增教师/学生账号、分配权限)、预约审核(审核教师/学生的设备预约申请)、使用统计(按设备类型、时间段统计使用频次、预约成功率);
  • 教师端:设备查询(按设备名称、类型、可用状态筛选)、预约申请(选择设备、预约日期与时间段、填写使用用途)、预约记录查看(已通过/待审核/已拒绝的预约记录)、使用反馈(提交设备使用后的状态、故障问题);
  • 学生端:设备查询(仅查看可用设备信息)、预约申请(需选择指导教师,且预约时间段需与教师账号绑定)、预约记录跟踪、使用须知查看(设备操作规范、预约违约规则)。

实验室设备使用申请信息管理系统的后台界面截图,展示了设备申请

1.2 核心模块

基于需求分析,系统划分为5个核心模块,各模块职责明确且相互联动:

模块名称 核心功能 关联模块
用户管理模块 账号注册、登录、权限分配、信息编辑 所有模块(权限控制)
设备管理模块 设备信息维护、状态更新、故障上报 预约管理模块(设备可用性判断)
预约管理模块 预约申请提交、审核流程、预约取消 用户管理模块(权限校验)、设备管理模块(设备状态同步)
记录统计模块 使用记录查询、预约数据统计、报表导出 设备管理模块(设备数据)、预约管理模块(预约数据)
系统通知模块 预约审核结果推送、设备故障提醒、预约到期提醒 预约管理模块(审核/预约状态)、设备管理模块(故障状态)

1.3 技术选型

借助飞算JavaAI的“智能引导”功能,结合毕业设计的开发难度与可实现性,确定技术栈如下:

  • 后端框架:Spring Boot 2.7.x(轻量化、易上手,适合快速开发);
  • 数据库:MySQL 8.0(开源免费,支持复杂查询,满足设备与预约数据存储需求);
  • 前端框架:Vue 3 + Element Plus(组件丰富,可视化效果好,降低前端开发难度);
  • 开发工具:IntelliJ IDEA 2023.1 + 飞算JavaAI插件(插件直接集成在IDEA中,可实时生成代码)。

IntelliJ IDEA开发环境中使用JavaAI插件进行

二、飞算JavaAI开发实战

IntelliJ IDEA开发环境中使用飞算JavaAI插件

本次开发全程依赖飞算JavaAI的“智能引导”功能,从需求输入到源码生成共分为6个关键步骤,每个步骤均通过插件可视化操作完成,以下为详细流程与实操记录。

IntelliJ IDEA开发环境中使用JavaAI插件进行

2.1 输入提示词(明确开发需求)

IDE开发环境中代码合并成功的弹窗截图,显示了多个Java文

打开IntelliJ IDEA,启动飞算JavaAI插件,在“智能引导”的“需求输入”界面,输入详细提示词:

“请帮我开发高校大型实验设备管理与预约信息系统的后端代码,基于Spring Boot 2.7.x和MySQL 8.0,需包含用户管理(管理员/教师/学生三类角色)、设备管理(设备信息CRUD、状态更新)、预约管理(预约申请、审核、取消)三大核心模块,要求生成实体类、Mapper接口、Service层、Controller层代码,且符合RESTful API规范。”

高校实验设备管理与预约信息系统的功能结构图,展示了管理员端、

2.2 理解需求(需求拆解与确认)

设备管理系统的后台界面截图,展示了设备列表及“设备申请审核”

点击“确认提交”后,飞算JavaAI自动进入“需求理解”环节,约10秒后生成需求拆解报告,内容包含:

  • 需求匹配度分析:明确系统是围绕用户、设备、预约展开的管理系统,涉及多角色权限与多种预约相关操作,与常见的管理系统开发需求适配。
  • 模块拆解确认:将需求细化为用户管理模块(涵盖管理员、教师、学生三类角色的权限控制与身份认证)、设备信息管理模块(支持设备信息的增删改查及状态更新)、预约管理模块(包含预约申请、审核、取消等子功能,以及预约状态跟踪)。

2.3 设计接口(RESTful API规划)

确认需求后,插件自动跳转至“接口设计”界面,围绕用户管理、设备管理、预约管理这几大模块,生成了对应接口的详细说明,涉及接口在用户注册登录、设备增删改查、预约申请审核等场景下的功能定位与核心作用阐述。

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

2.4 表结构设计(数据库表生成)

完成接口设计后,自动推导所需数据库表,并生成表结构(含字段名、数据类型、长度、主键、外键、备注),同时也支持手动编辑修改表结构。核心表结构如下:

  • 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,默认当前时间戳且更新时自动更新,修改时间)。

2.5 处理逻辑(接口实现思路生成)

点击“下一步”后,插件进入“处理逻辑”界面,针对每个接口生成详细的业务处理流程,明确参数校验、数据库操作、异常处理的核心逻辑。以“预约管理”为例,处理逻辑如下:

2.5.1 提交设备预约申请接口处理逻辑

  1. 接收前端传入的预约参数(含必填的userId、deviceId、startTime、endTime,及可选的applyReason、remark);
  2. 调用UserService查询用户信息,校验用户是否存在且账户状态为启用,若不满足则返回{"code":"000001","msg":"用户信息不存在或已被禁用","data":...}
  3. 调用DeviceService查询设备信息,校验设备是否存在且状态为可用,若不满足则返回{"code":"000001","msg":"设备不可用或不存在","data":...}
  4. 调用ReservationService查询该设备在“startTime-endTime”时间段内的已批准预约记录,若存在冲突则返回{"code":"000001","msg":"该时间段已有其他已批准的预约","data":...}
  5. 将预约参数封装为ReservationInfo实体,默认设置预约状态为“1-待审核”,调用ReservationService保存至数据库;
  6. 返回{"code":"000000","msg":"调用成功","data":...}的成功响应。

2.5.2 管理员审核预约申请接口处理逻辑

  1. 接收前端传入的审核参数(必填的reservationId、status,status取值为2-已批准或3-已拒绝);
  2. 调用ReservationService查询预约记录,校验reservationId对应的预约是否存在,若不存在则返回{"code":"000001","msg":"预约记录不存在","data":...}
  3. 校验当前预约状态是否为“1-待审核”,若不是则返回{"code":"000001","msg":"仅待审核状态可进行审核操作","data":...}
  4. 若status为“2-已批准”,调用DeviceService将对应设备状态更新为“3-已预约”;
  5. 调用ReservationService更新预约记录的状态(已批准/已拒绝)及更新时间;
  6. 返回{"code":"000000","msg":"调用成功","data":...}的成功响应。

2.5.3 取消已批准的预约接口处理逻辑

  1. 接收前端传入的预约取消参数(必填的reservationId);
  2. 调用ReservationService查询预约记录,校验reservationId对应的预约是否存在,若不存在则返回{"code":"000001","msg":"预约记录不存在","data":...}
  3. 校验当前预约状态是否为“2-已批准”,若不是则返回{"code":"000001","msg":"只有已批准的预约可以被取消","data":...}
  4. 调用ReservationService将预约状态更新为“4-已取消”,并同步更新记录的修改时间;
  5. 调用DeviceService将对应设备的状态从“3-已预约”更新为“1-可用”;
  6. 返回{"code":"000000","msg":"调用成功","data":...}的成功响应。

2.5.4 查询用户的所有预约记录接口处理逻辑

  1. 接收前端传入的查询参数(必填的userId);
  2. 调用UserService查询用户信息,校验userId对应的用户是否存在,若不存在则返回{"code":"000001","msg":"用户不存在","data":...}
  3. 调用ReservationService根据userId查询该用户的所有预约记录(含待审核、已批准、已拒绝、已取消状态),并按创建时间倒序排序;
  4. 将查询到的预约记录列表封装为数据对象;
  5. 返回{"code":"000000","msg":"调用成功","data":{预约记录列表}}的成功响应。

2.5.5 查询设备的预约历史接口处理逻辑

  1. 接收前端传入的查询参数(必填的deviceId);
  2. 调用DeviceService查询设备信息,校验deviceId对应的设备是否存在,若不存在则返回{"code":"000001","msg":"设备不存在","data":...}
  3. 调用ReservationService根据deviceId查询该设备的所有预约记录(含各状态),并按预约开始时间倒序排序;
  4. 将查询到的设备预约历史列表封装为数据对象;
  5. 返回{"code":"000000","msg":"调用成功","data":{设备预约历史列表}}的成功响应。

2.6 生成源码(完整工程代码输出)

确认处理逻辑后,点击“生成源码”,飞算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 项目启动入口类

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

三、优化与调试心得

3.1 遇到的问题及解决方案

3.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方法中,解决冲突漏判问题。

3.1.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.1.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);
    }
}

添加后重启后端服务,跨域问题解决。

四、成果展示与总结

4.1 系统成果展示

4.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/ 

系统架构示意图,展示了前端展示层、核心业务层(含用户管理、设

4.1.2 核心功能可运行性

数据库表结构设计界面截图,展示了user_info、devi

通过对接后端项目进行数据的展示,以下为用户预约申请场景和管理员审核场景展示:

IntelliJ IDEA开发环境中Java后端项目代码截图

(此处可插入截图或描述,但根据要求不插入图片,仅文字描述)

4.2 飞算JavaAI使用体验总结

4.2.1 核心优势

  1. 开发效率大幅提升:传统毕业设计开发需手动编写实体类、Mapper接口、配置文件等基础代码,耗时约3-5天;而飞算JavaAI通过“智能引导”功能,1小时内即可生成完整工程代码,且代码结构规范,直接跳过“基础编码”阶段,专注于业务逻辑优化。
  2. 需求匹配度高:输入详细提示词后,AI能精准拆解需求(如识别“三类用户角色”“设备状态流转”等核心要点),生成的接口设计、表结构与实际业务场景高度契合,无需大规模调整基础设计。
  3. 辅助调试能力强:遇到“预约冲突判断不精准”“跨域”等问题时,通过“智能会话”功能输入问题,AI能快速提供针对性解决方案(如优化SQL语句、生成跨域配置类),减少查阅资料的时间成本,尤其适合毕业设计中缺乏开发经验的学生。

4.2.2 待优化方向

  1. 个性化逻辑支持有限:对于“学生预约需绑定指导教师”“设备使用后需提交使用报告”等个性化需求,AI生成的基础代码未覆盖,需手动补充业务逻辑,若能在提示词中支持更细粒度的需求描述,可进一步减少手动开发量。
  2. 前端代码生成缺失:当前仅支持后端代码生成,前端Vue页面需手动开发,若后续能新增前端页面、组件的生成功能,可实现“前后端代码一站式生成”,进一步降低毕业设计开发门槛。

4.2.3 个人使用建议

  1. 提示词需精准详细:在输入需求时,需明确“技术栈版本”“核心模块功能”“角色权限差异”等关键信息(如“基于Spring Boot 2.7.x,学生预约需选择指导教师”),避免因需求模糊导致生成代码不符合预期。
  2. 生成后需二次校验:AI生成的代码虽无语法错误,但需结合业务场景校验逻辑合理性(如本次开发中发现“预约冲突判断不完整”),建议通过Postman逐一测试核心接口,确保功能符合需求。
  3. 善用“智能会话”功能:开发中遇到技术问题时,优先使用AI的“智能会话”功能,可针对性查询“SQL优化”“权限控制”等具体问题,比通用搜索引擎更高效,且解决方案与当前工程代码风格适配。