# web-lims **Repository Path**: HuGunShao/web-lims ## Basic Information - **Project Name**: web-lims - **Description**: 这是一个校园实验室管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2018-05-01 - **Last Updated**: 2025-04-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验室管理系统 V1.00 ## 介绍 实验室管理系统基于SpringBoot,简洁完善的RESTful风格后台管理系统,完美整合springmvc +springsecurity + spring Data Jpa + Thymeleaf + swagger!此实验室管理系统项目有效的解决了传统教师上课和借于实验室的器材与耗材使用的材纸质登记的诟病以及对空余实验室的管理分配使用,并且教师能随时随地查看本学期的课程内容信息,此系统还有移动端由于个人原因未完成,如遇BUG以及缺点不足之处还请见谅! ## 管理系统功能 1. 教师管理:对教师的基本管理,以及授权; 2. 器材管理:对器材的入库,借还,保修报废操作; 3. 耗材处理:对耗材的入库出库处理; 4. 实验室管理:对教师上课登记的记录查看及修改,以及对实验室的基本管理; 5. 审核管理:对器材入库,使用,报废,报修;耗材的入库,使用,实验室的使用; 其他基本的就不说了。 ## 项目特点 1. 基于SpringBoot2.x,简化了大量项目配置,更专注于业务开发,多模块开发。 2. 利用Thymeleaf模板引擎对前台页面进行封装和拆分,使html代码变得简洁,更加易维护,易懂。 3. 使用Bootstrap4.x,更好的对页面进行渲染 4. 权限控制:对每个角色进行权限控制(实验室管理员,超级管理员,管理员,主管,教师)每个用户都可有多个角色,每个角色都有相应的操作,如:超级管理员除有普通管理员的操作外还有对所有人的角色分配(授权)主管:课拥有所有审核操作,以及对器材耗材等的查看下图; ![输入图片说明](https://gitee.com/uploads/images/2018/0511/140551_ce354db7_1487485.png "5.png") ## 部分效果图 ![输入图片说明](https://gitee.com/uploads/images/2018/0511/132133_a8b1fe1d_1487485.png "1.png") ![ 输入图片说明 ](https://gitee.com/uploads/images/2018/0511/132143_3daef111_1487485.png "2.png") ![输入图片说明](https://gitee.com/uploads/images/2018/0511/132200_5bcae69e_1487485.png "3.png") ![输入图片说明](https://gitee.com/uploads/images/2018/0508/173243_5848b52c_1487485.png "4.png") ![输入图片说明](https://gitee.com/uploads/images/2018/0508/173255_ccc2d4f4_1487485.png "5.png") ![输入图片说明](https://gitee.com/uploads/images/2018/0508/173304_c73b55ba_1487485.png "6.png") ## 部分实现代码 ### 教师课程实现 1.获取基本课程:运用到Java8的获取时间:LocalDate.now(),在运用把格式转换成yyyyMMdd:运用到DateTimeFormatter类的ofPattern(yyyyMMdd)方法,接着判断格式化好的时间进行判断,如月份>9月份输入上学期,否则属于下学期,然后根据学期生成9位数字符串,如:下学期:年份+年份+1+01,上学期年份+年份+07,最后根据此字符串获取数据库学期表中相应的数据,最后根据教师信息以及获得的学期信息查找课程记录 2.然后根据获得的数据进行排序分组(我们分组时需要先对课次分组,那样的话第一层循环就获得所有课次相同的数据,接着再根据星期分组,用二维数组解释就是:[0][0]:第一课次的星期一 [0][1]第一课次星期二内容,。。。 最后一次分组,是为了把每周当前课成进行同一分类等处理);详细看处理逻辑请看[源码](https://gitee.com/HuGunShao/web-lims/blob/master/persistence/src/main/java/com/hushao/lims/weblims/util/TimetablesUtil.java) ; ``` @Override public Map> timetables(TeacherInfo teacher) throws Exception { //根据当前时间判断学期 String term= DateUtil.getTermByThisDate(); //根据判断出的学期获取此学期在表中的记录 TermInfo termInfo=termRepository.findByTerm(term); //根据教师,学期,获取课程记录 List timetables=timetableRepository.findByTeacherInfoAndTermInfo(teacher,termInfo); //根据 周次排序 timetables=timetables.stream().sorted(Comparator.comparing(TimetableInfo::getCycle)).collect(Collectors.toList()); //分组:1.根据课次(2.根据星期(3.根据试验室)) java8 Map>>> map2=timetables.stream() .collect(Collectors.groupingBy(TimetableInfo::getLessons, Collectors.groupingBy(TimetableInfo::getWeek, Collectors.groupingBy(TimetableInfo::getClassroomInfo))) ); //根据课次排序 Map>>> sortMap = new LinkedHashMap<>(); map2.entrySet().stream().sorted(Map.Entry.>>>comparingByKey()) .forEachOrdered(x -> sortMap.put(x.getKey(), x.getValue())); //最终集合(将数据进行分析)并返回 return timetablesUtil.getTimetablesByClassroom(sortMap); } ```