项目编号:BS-XX-167
一,项目简介
学校中的实验设备是属于全校师生共用的教学资源。由于学校实验室个数及每门课程相关实验室课时数的有限性,使得实验室不可能像普通教室那样按周次进行固定排课。当前实验教室的排课普遍采用人工预约的方法,这种方式无论在人员联系上还是实验室安排上都很不方便。预约一个教室的周期往往在两周以上,极大地影响了教学进度的安排,并且由于实验室教室的分散性,往往会出现一个教室爆满而另一个闲置的不对称使用情况,在这种情况下,开发一种全校实验室资源共享、合理分配教室资源、远距离操作实验室预约系统就显得尤为必要。
在国外,预约系统早就起源并且早已经扩展开来。基于ASP的高校实验网络管理系统,也可为学生提供一种选修自己喜欢实验的途径。有些系统允许学生通过校园网选修实验,它具有实验预约、查询等功能。
在国内,现在一般是用ASP做实验预约系统。预先查看几个比较典型的实验预约系统:长江大学电子信息学院开发的长江大学电工电子实验预约系统,它是一个实验预约管理系统,提供学生和教师登录预约,教师和学生登录后的功能不一样,教师登录后还可以对学生进行实验管理:学生可以进行实验预约,只是该系统有时候学生预约并不开放,以教师预约为主。这是国内目前功能比较完善的实验预约系统。绍兴文理学院的开放实验网上预约系统预约实现了可选择的实验进行预约和取消预约,可以轻松查看实验室状况,不过此系统封闭性不强,任何注册人员都可以进行预约,这给系统管理带来了负面影响。另外,最近在网上还出现了一个简单的网上实验预约系统,简单实现了预约功能,也是一个纯粹的实验预约系统,用户可以随时进行注册并预约实验,又没有取消预约的功能,而且此系统维护不够,预约得不到管理员的批准与调配。但这也说明预约系统现在在国内比较盛行,大家在勇于攀登,在不断完善实验预约系统的功能。
本系统实现实验室预约。系统共设有用户登录、实验室预约、预约情况查询、管理员管理等四个主要的功能模块,满足了教师/学生进行实验室预约/查询、管理员进行管理等各个方面的需求。它具有网络化、智能化、高性能、低维护、界面友好、操作简单、功能强大、管理方便、平台优秀等一系列的优点,能够完全按照用户的需求,稳定、安全、快速地运行,实现了任意计算机都能进行实验室预约信息的查询,进行实验室预约操作,访问相关信息。从而充分利用了学校现有的资源,促进了教学管理系统的网络化,智能化,顺应了教学管理的发展趋势。
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台技术:Springboot+Mybatis-plus
前端技术:Node+Vue+ElementUI
三,系统展示
用户登陆
公告栏
公告管理
设备管理
实验室管理
实验结果管理
教师管理
学生管理
预约信息管理
四,核心代码展示
package com.project.labsystem.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.project.labsystem.entity.AnnouncementTable; import com.project.labsystem.entity.LabTable; import com.project.labsystem.entity.VO.announcementVo; import com.project.labsystem.entity.VO.labVo; import com.project.labsystem.service.LabTableService; import com.project.labsystem.utils.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author byAuto * @since 2022-10-24 */ @Api(description = "实验室管理") @RestController @RequestMapping("/labsystem/lab-table") public class LabTableController { @Autowired LabTableService service; @ApiOperation(value = "查询所有实验室") @GetMapping("findAll") public R findAll() { List<LabTable> list = new ArrayList<>(); list = service.list(null); return R.ok().data("data", list); } @ApiOperation(value = "查询个实验室") @GetMapping("findOne/{id}") public R findOne(@PathVariable String id) { LabTable labTable = service.getById(id); if (labTable != null) { return R.ok().data("data", labTable); } else { return R.error(); } } @ApiOperation(value = "实验室添加") @PostMapping("add") public R add(@RequestBody LabTable labTable) { boolean flag = service.save(labTable); if (flag) { return R.ok().data("data", "Fuck"); } else { return R.error(); } } @ApiOperation(value = "实验室更新") @PostMapping("update/id") public R update(@RequestBody LabTable labTable) { boolean flag = service.updateById(labTable); if (flag) { return R.ok(); } else { return R.error(); } } @ApiOperation(value = "实验室删除") @GetMapping("del/{id}") public R del(@PathVariable String id) { Boolean flag = service.removeById(id); if (flag) { return R.ok().data("data", "Fuck"); } else { return R.error(); } } //获取所有的实验室编号 @ApiOperation(value = "实验室Allid") @GetMapping("getAllId") public R getAllId() { List list = new ArrayList<>(); QueryWrapper<LabTable> wrapper=new QueryWrapper<>(); wrapper.select("lab_room_id"); wrapper.orderByDesc("create_time"); list=service.list(wrapper); System.out.println(list); return R.ok().data("rows", list); } // 条件查询带分页的方法 @ApiOperation(value = "多条件查询") @PostMapping("pageCondition/{current}/{limit}") public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit, @RequestBody(required = false) labVo Query) { //创建page对象 Page<LabTable> pageAn = new Page<>(current, limit); //构建条件 QueryWrapper<LabTable> wrapper = new QueryWrapper<>(); // 多条件组合查询 // mybatis学过 动态sql String name = Query.getLabName(); String roomId = Query.getLabRoomId(); String labLocation =Query.getLabLocation(); String labManager = Query.getLabManager(); String begin = Query.getBegin(); String end = Query.getEnd(); //判断条件值是否为空,如果不为空拼接条件 if (!StringUtils.isEmpty(name)) { //构建条件 wrapper.like("lab_name", name); } if (!StringUtils.isEmpty(roomId)) { //构建条件 wrapper.eq("lab_room_id", roomId); } if (!StringUtils.isEmpty(labLocation)) { //构建条件 wrapper.like("lab_location", labLocation); } if (!StringUtils.isEmpty(labManager)) { //构建条件 wrapper.like("lab_manager", labManager); } if (!StringUtils.isEmpty(begin)) { wrapper.ge("create_time", begin); } if (!StringUtils.isEmpty(end)) { wrapper.le("create_time", end); } //排序 wrapper.orderByDesc("create_time"); //调用方法实现条件查询分页 service.page(pageAn, wrapper); //总记录数 long total = pageAn.getTotal(); //数据list集合 List<LabTable> records = pageAn.getRecords(); System.out.println(records); return R.ok().data("total", total).data("rows", records); } /** * 导入房间信息 */ @ApiOperation("批量导入") @PostMapping("/importData") @ResponseBody public R importData(@RequestBody MultipartFile file) { service.importExcel(file,service); System.out.println(file); return R.ok(); } }
package com.project.labsystem.controller; import com.project.labsystem.entity.VO.loginVo; import com.project.labsystem.utils.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @Api(description = "登录") @RestController @RequestMapping("login") public class LoginController { //login @PostMapping("login") public R login() { return R.ok().data("token","admin"); } //info @GetMapping("info") public R info() { return R.ok().data("roles","[admin]").data("name","admin").data("avatar","https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif"); } @PostMapping("logout") public R logout() { return R.ok(); } @ApiOperation(value = "登录测试") @GetMapping("loginTest") public String loginTest() { loginVo loginer=new loginVo(); return null; } @ApiOperation(value = "根据token获取用户信息") @GetMapping("getInfo") public R getinfo(HttpServletRequest request){ return null; } @ApiOperation(value = "管理员登录") @GetMapping("loginAdmin") public R loginAdmin() { if (false) { return R.ok().data("data", "Fuck"); } else { return R.error(); } } @ApiOperation(value = "学生登录") @GetMapping("loginStudent") public R loginStudent() { if (false) { return R.ok().data("data", "Fuck"); } else { return R.error(); } } @ApiOperation(value = "教师登录") @GetMapping(" loginTeacher") public R loginTeacher() { if (false) { return R.ok().data("data", "Fuck"); } else { return R.error(); } } }
package com.project.labsystem.controller; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.project.labsystem.entity.LabTable; import com.project.labsystem.entity.OrderTable; import com.project.labsystem.entity.VO.assetVo; import com.project.labsystem.entity.VO.orderVo; import com.project.labsystem.service.LabTableService; import com.project.labsystem.service.OrderTableService; import com.project.labsystem.utils.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author byAuto * @since 2022-10-28 */ @Api(description = "预约单管理") @RestController @RequestMapping("/labsystem/order-table") public class OrderTableController { @Autowired OrderTableService service; @Autowired LabTableService labTableService; @ApiOperation(value = "查询所有预约") @GetMapping("findAll") public R findAll() { List<OrderTable> list = new ArrayList<>(); list = service.list(null); return R.ok().data("data", list); } @ApiOperation(value = "查询一个预约") @GetMapping("findOne/{id}") public R findOne(@PathVariable String id) { OrderTable assetTable = service.getById(id); if (assetTable != null) { return R.ok().data("data", assetTable); } else { return R.error(); } } @ApiOperation(value = "预约添加") @PostMapping("add") public R add(@RequestBody OrderTable orderTable) { String labId = orderTable.getLabId(); QueryWrapper<LabTable> wrapper = new QueryWrapper<>(); wrapper.eq("lab_room_id", labId); // System.out.println(labTableService.getOne(wrapper)+"LLLLLLLLLLLLL"); QueryWrapper<OrderTable> wrapper2 = new QueryWrapper<>(); wrapper2.eq("lab_id", orderTable.getLabId()); wrapper2.eq("order_time", orderTable.getOrderTime()); // System.out.println(labTableService.getOne(wrapper)+"LLLLLLLLLLLLL"); boolean flag2 = (service.getOne(wrapper2) == null); boolean flag = false; if (flag2) { orderTable.setLabName(labTableService.getOne(wrapper).getLabName()); flag = service.save(orderTable); } if (flag) { return R.ok().data("data", "Fuck"); } else { return R.error().message("实验室被占用"); } } @ApiOperation(value = "Post 查询预约可用") @PostMapping("query") public R query(@RequestBody OrderTable assetTable) { QueryWrapper<OrderTable> wrapper = new QueryWrapper<>(); wrapper.eq("lab_room_id", assetTable.getLabId()); wrapper.eq("order_time", assetTable.getOrderTime()); // System.out.println(labTableService.getOne(wrapper)+"LLLLLLLLLLLLL"); boolean flag = (service.getOne(wrapper) != null); if (flag) { return R.ok(); } else { return R.error(); } } @ApiOperation(value = "预约更新") @PostMapping("update") public R update(@RequestBody OrderTable assetTable) { boolean flag = service.updateById(assetTable); if (flag) { return R.ok(); } else { return R.error(); } } @ApiOperation(value = "预约删除") @GetMapping("del/{id}") public R del(@PathVariable String id) { Boolean flag = service.removeById(id); if (flag) { return R.ok().data("data", "Fuck"); } else { return R.error(); } } // 条件查询带分页的方法 @ApiOperation(value = "多条件查询") @PostMapping("pageCondition/{current}/{limit}") public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit, @RequestBody(required = false) orderVo Query) { //创建page对象 Page<OrderTable> pageAn = new Page<>(current, limit); //构建条件 QueryWrapper<OrderTable> wrapper = new QueryWrapper<>(); // 多条件组合查询 // mybatis学过 动态sql //申请人 String orderApplicant = Query.getOrderApplicant(); //status String status = Query.getOrderStatus(); //实验室名字 String labName = Query.getLabName(); String begin = Query.getBegin(); String end = Query.getEnd(); //判断条件值是否为空,如果不为空拼接条件 if (!StringUtils.isEmpty(orderApplicant)) { //构建条件 wrapper.like("order_applicant", orderApplicant); } if (!StringUtils.isEmpty(labName)) { //构建条件 //System.out.println(labName+"LLLL名字"); wrapper.like("lab_name", labName); } if (!StringUtils.isEmpty(status)) { //构建条件 wrapper.eq("order_status", status); } if (!StringUtils.isEmpty(begin)) { wrapper.ge("create_time", begin); } if (!StringUtils.isEmpty(end)) { wrapper.le("create_time", end); } //排序 wrapper.orderByDesc("create_time"); //调用方法实现条件查询分页 service.page(pageAn, wrapper); //总记录数 long total = pageAn.getTotal(); System.out.println(total + "total"); //数据list集合 List<OrderTable> records = pageAn.getRecords(); System.out.println(records); return R.ok().data("total", total).data("rows", records); } }