当前位置: 首页 > news >正文

SpringBoot+Vue高校实验室预约管理系统 附带详细运行指导视频

文章目录

  • 一、项目演示
  • 二、项目介绍
  • 三、运行截图
  • 四、主要代码
    • 1.用户登录代码
    • 2.保存实验室信息代码
    • 3.预约实验室代码

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+Vue框架开发的高校实验室预约管理系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个高校实验室预约管理系统该有的所有功能。

项目功能:此项目分为三个角色:学生老师管理员学生有登录、修改个人信息、查看实验室信息、查看实验设备信息、预约实验设备、预约实验室、管理个人实验室预约信息、管理个人实验设备预约信息等等功能。老师除了拥有学生的所有功能外,还可以审核自己实验室收到的预约信息以及自己分管实验设备收到的预约信息。管理员有登录、查看数据统计信息、管理所有用户信息、管理所有实验室信息、管理所有实验室预约信息、管理所有实验设备信息、管理所有实验设备预约信息、管理公告信息等等功能。

应用技术:SpringBoot + Vue3.0 + MySQL + MyBatis + Redis + ElementUI-Plus + Vite

运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7 + Redis5.0.5 + JDK1.8 + Maven3.6.3 + Node14.16.1 + Visual Studio Code(以上工具在项目压缩包中都自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1.用户登录代码

	/*** 用户登录操作* @param userDTO* @return*/@Overridepublic ResponseDTO<UserDTO> login(UserDTO userDTO) {// 进行是否为空判断if(CommonUtil.isEmpty(userDTO.getNo())){return ResponseDTO.errorByMsg(CodeMsg.NO_EMPTY);}if(CommonUtil.isEmpty(userDTO.getPassword())){return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);}// 对比学号/学工号和密码是否正确UserExample userExample = new UserExample();userExample.createCriteria().andNoEqualTo(userDTO.getNo()).andPasswordEqualTo(userDTO.getPassword()).andRoleIdEqualTo(userDTO.getRoleId());List<User> userList = userMapper.selectByExample(userExample);if(userList == null || userList.size() != 1){return ResponseDTO.errorByMsg(CodeMsg.NO_PASSWORD_ERROR);}// 生成登录token并存入Redis中UserDTO selectedUserDto = CopyUtil.copy(userList.get(0), UserDTO.class);String token = UuidUtil.getShortUuid();selectedUserDto.setToken(token);//把token存入redis中 有效期1小时stringRedisTemplate.opsForValue().set("USER_" + token, JSON.toJSONString(selectedUserDto), 3600, TimeUnit.SECONDS);return ResponseDTO.successByMsg(selectedUserDto, "登录成功!");}

2.保存实验室信息代码

  /*** 保存实验室信息* @param roomDTO* @return*/public ResponseDTO<Boolean> saveRoom(RoomDTO roomDTO) {// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(roomDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}Room room = CopyUtil.copy(roomDTO, Room.class);if(CommonUtil.isEmpty(room.getId())) {// 添加操作room.setId(UuidUtil.getShortUuid());if(roomMapper.insertSelective(room) == 0) {return ResponseDTO.errorByMsg(CodeMsg.ROOM_ADD_ERROR);}} else {// 修改操作if(roomMapper.updateByPrimaryKeySelective(room) == 0) {return ResponseDTO.errorByMsg(CodeMsg.ROOM_EDIT_ERROR);}}return ResponseDTO.successByMsg(true, "保存成功!");}

3.预约实验室代码

    /*** 保存实验室预约数据* @param appointRoomDTO* @return*/@Overridepublic ResponseDTO<Boolean> saveAppointRoom(AppointRoomDTO appointRoomDTO) {// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(appointRoomDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}List<AppointRoomItemDTO> appointRoomItemDTOList = appointRoomDTO.getAppointRoomItemDTOList();if(appointRoomItemDTOList.size() == 0) {return ResponseDTO.errorByMsg(CodeMsg.DAY_NO_EMPTY);}AppointRoom appointRoom = CopyUtil.copy(appointRoomDTO, AppointRoom.class);if(CommonUtil.isEmpty(appointRoom.getId())) {Room room = roomMapper.selectByPrimaryKey(appointRoomDTO.getRoomId());if(RoomStateEnum.STOP.getCode().equals(room.getState())) {return ResponseDTO.errorByMsg(CodeMsg.ROOM_STOP);}// 判断预约是否已存在List<Integer> stateList = Arrays.asList(1, 2);AppointRoomExample appointRoomExample = new AppointRoomExample();appointRoomExample.createCriteria().andDayEqualTo(appointRoom.getDay()).andStateIn(stateList);List<AppointRoom> appointRoomDBList = appointRoomMapper.selectByExample(appointRoomExample);for(AppointRoomItemDTO appointRoomItemDTO : appointRoomItemDTOList) {for(AppointRoom appointRoomDB : appointRoomDBList) {AppointRoomItemExample appointRoomItemExample = new AppointRoomItemExample();appointRoomItemExample.createCriteria().andAppointRoomIdEqualTo(appointRoomDB.getId()).andNoEqualTo(appointRoomItemDTO.getNo());if(appointRoomItemMapper.countByExample(appointRoomItemExample) > 0) {CodeMsg roomAppointExist = CodeMsg.ROOM_APPOINT_EXIST;roomAppointExist.setMsg("第" + appointRoomItemDTO.getNo() + "节已被预约,请刷新页面更换其他节次!");return ResponseDTO.errorByMsg(roomAppointExist);}}}appointRoom.setId(UuidUtil.getShortUuid());appointRoom.setCreateTime(new Date());if(appointRoomMapper.insertSelective(appointRoom) == 0) {return ResponseDTO.errorByMsg(CodeMsg.ROOM_APPOINT_ADD_ERROR);}for(AppointRoomItemDTO appointRoomItemDTO : appointRoomItemDTOList) {AppointRoomItem appointRoomItem = CopyUtil.copy(appointRoomItemDTO, AppointRoomItem.class);appointRoomItem.setId(UuidUtil.getShortUuid());appointRoomItem.setAppointRoomId(appointRoom.getId());appointRoomItemMapper.insertSelective(appointRoomItem);}} else {if(appointRoomMapper.updateByPrimaryKeySelective(appointRoom) == 0) {return ResponseDTO.errorByMsg(CodeMsg.ROOM_APPOINT_EDIT_ERROR);}}return ResponseDTO.success(true);}
http://www.dtcms.com/a/312955.html

相关文章:

  • Matlab算法编程示例4:数值解法求解常微分方程的代码实例
  • Python类与对象指南
  • java贪吃蛇小程序
  • 个人项目介绍:STM32F407核心多层电路板
  • Java试题-选择题(8)
  • 25 渗透测试培训课程第一部分 - 信息收集 内容概要
  • 江协科技STM32 14-1 WDG看门狗
  • Flask ORM 模型(轻松版)
  • 08.Redis 持久化
  • UniApp 实现顶部固定导航栏 Tab 及滚动变色效果
  • Python篇--- Python 的加载、缓存、覆盖机制
  • 复现cacti的RCE
  • 版本升级到V1.17.1后多了哪些便捷操作
  • [论文阅读] 人工智能 + 软件工程 | 英国研究软件追踪:为何大量代码成了“失踪人口”?
  • Mysql 9.4主从复制部署(传统文件日志位置mysqldump)
  • 【暑期每日一题】洛谷 P1749 [入门赛 #19] 分饼干 II
  • Python中的import和from...import有什么区别?
  • Python篇---PyPI
  • 自私挖矿攻击
  • 安卓audio 架构解析
  • 决策树的实际案例
  • Ethereum: 了解炙手可热 Layer 2 解决方案 Base
  • C++手撕基于ID3算法的决策树
  • 玩转 Playwright 有头与无头模式:消除差异,提升爬虫稳定性
  • Linux 系统调用 stat 完全用例
  • Memcached Slab分配器:零碎片的极速内存管理
  • FFT/STFT/小波/HHT:振动诊断工具生死局,选错=灾难
  • MySQL——增删改查操作
  • Compose笔记(四十一)--ExtendedFloatingActionButton
  • 嵌入式开发学习———Linux环境下IO进程线程学习(二)