项目编号:BS-GX-056
前言:
过去几年随着新冠病毒在全世界的流行,各国也以研发了一些相应的信息化系统来供抗疫使用,比如在查阅文献时就看到了刘星航的《新冠肺炎疫情管理信息系统的应急开发与应用》,在这篇文章中主要介绍了在新冠肺炎疫情期间,为突破手工信息交换和管理的局限性,减轻一线人员负担,紧急开发了新冠肺炎疫情管理信息系统,为病例、密切接触者、实验室收样及检测结果、场所消毒等疫情防控核心数据提供相关的新增、管理、查询等功能,支撑数据在各系统用户之间的流转,并在此基础上提供统计分析和报表功能。像类似这样系统的开发和应用,确实极大的方便了我们工作人员信息的共享和获取,对提升快速应变能力有很大帮助。
但是这种信息系统的研发不具备通用性,比如在校园防疫抗疫的过程中,它面临的群体和业务需求就不太一样,对于校园来讲,主要是对师生的管理,通过流动性控制来减少病毒接触和传播的机会,通过个人健康的上报,早发现,早隔离,早治疗,最大程度上减轻病毒的传播危害。所以本课题研究关于校园疫情防控的专题,是具有较强的现实意义的。虽然说现在疫情己告一段落,但是防范的手段和心理是不能落下的,未雨绸缪者总会得到上天的眷顾。对于自然界的认知,人类还有很多未知的领域,通过这次疫情,让人类有了警觉之心,为了防止下一次的重蹈覆辙,提前做好各类准备工作是很必要的。
全国各类学校数不胜数,学生数量之多,增加了管理的复杂度,通过信息化技术的手段应用,可以有效的进行信息的收集和集中处理,解决校园管理人手不够的问题。另外通过信息化数据的沉淀和整理,可以非常方便的对历史数据进行查询和回溯,方便进行信息的追查和上报。本课题主要实现对学生、教师等基本数据的管理,还有对学生离校申请,请假,健康上报的审核和管理,以及对疫情相关动态和新闻信息的宣传等。
系统在实现时主要基于JAVA开发语言平台来进行开发实现,使用了Spring,Springmvc,Mybatis等相关框架完成系统服务接口和业务逻辑的处理,通过Html,Css,Javascript,Vue等前端技术来完成前端页面的开发和数据展示,前后端通过异步请求来进行交互,使用JSON进行数据封装实现。系统开发的过程中,主要在于前期系统结构的搭建以及前后端数据流程的梳理,一旦系统的整体架构搭建完毕,各个业务模块的开发相对会简单一些。
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:Springboot+Mybatis+Vue+ElementUI
二,项目简介
根据需求分析的结果,本系统的用户角色有三类,分别是系统管理员、教师和学生,每个不同的角色拥有的系统功能操作权限和业务要求是不一样的,下面通过系统结构图的方式来展现不同的用户角色的相应功能模块。
(1)管理员功能:平台的管理员可以管理系统的一些基本数据,主要包含管理员个人信息管理,班级管理,老师管理,学生管理,健康打卡数据管理,离校审核,疫情动态,疫情新闻,防疫措施管理等模块。
图2-1 管理员功能结构图
(2)老师角色功能:主要包含对个人的信息管理,学生管理,离校审核,疫情新闻,疫情动态,学生健康打卡等功能模块。
图2-2 教师功能结构图
(3)学生角色模块:主要包含对学生个人信息管理,注册登陆,离校申请,查看疫情动态,疫情新闻,在线健康打卡等功能。
图2-3 学生功能结构图
三,系统展示
4.1 管理员后台管理功能模块的展示
4.1.1 疫情动态管理模块
管理员登录系统后,可以对疫情动态信息进行维护:包括添加疫情动态信息、修改疫情动态信息、查询疫情动态信息、删除疫情动态信息等操作。疫情动态管理主要对学校当前的疫情控制的动态信息进行信息管理,管理员登录后台进入疫情动态管理操作界面,在此模块可以实现对疫情动态信息添加、修改、删除,并可以根据名称进行查询等管理操作。界面展示如下图4-1所示:
图4-1 疫情动态信息管理操作实现界面
4.1.2防疫措施管理模块
防疫措施管理主要对学校在疫情期间采取的疫情措施,进行相关的信息管理工作。界面展示如下图4-2所示:
图4-2 疫情措施管理操作界面
4.1.3疫情知识管理模块
疫情知识管理主要对学校发布的疫情相关的知识信息,进行相关的信息管理。界面展示如下图4-3所示:
图4-3疫情知识管理操作界面
4.1.4校内通知管理模块
校内通知管理主要对学校本身的相关信息进行信息管理,管理员登录后台进入院系信息管理操作界面,在此模块可以实现对新闻通知信息添加、修改、删除,并可以根据名称进行查询等管理操作。界面展示如下图4-4所示:
4.1.5老师信息管理模块
老师信息管理模块主要包含对学校内部的老师信息进行管理。系统管理员登录系统后,可以进入老师信息管理界面进行相关管理操作,主要包含对老师的添加、修改、删除和查询的相关管理操作,在此页面除了可以对老师进行基于的信息管理操作外,还可以进行数据的导入导出,主要通过POI组件来实现将老师的信息导出来EXCEL表格。后台老师管理模块的相关管理操作界面如下图4-5所示:
图4-5老师管理操作界面
4.1.6学生信息管理模块
学生信息重置管理模块主要是对相校内的学生信息进行管理,在此页面除了可以对学生进行基于的信息管理操作外,还可以进行数据的导入导出,主要通过POI组件来实现将学生的信息导出来EXCEL表格,学生管理模块的相关管理操作界面如下图4-6所示:
图4-6学生信息管理操作界面
4.1.7老师健康打卡记录管理
管理员可以在后台查看老师在线进行健康打卡的信息,并根据要求将有问题的老师打卡信息上传到防疫办。用户登陆界面如下图4-7所示:
图4-7老师打卡记录操作界面
4.1.8学生健康打卡记录管理
教师登陆系统后可以在学生健康打卡功能模块中查看当前所有学生的健康打卡信息列表,并可对打卡异常的学生记录进行上报操作。操作界面如下图4-8所示:
图4-8学生健康打卡记录界面
4.1.9确诊列表信息管理操作
管理员登陆系统后,可以将已经确诊的学生和老师进行上报,被上报的学生和老师会在确诊列表中进行查看,可以根据组合条件查询来进行查看。具操作界面如下图4-9所示:
图4-9确诊列表功能界面图
4.1.10离校申请列表
管理员进入系统后,可以在离校申请模块来查看己申请离校的学生信息,离校的审核工作下放到老师来进行,管理员主要是查看相关信息,系统操作界面如下图4-10所示:
图4-10离校申请列表功能界面图
4.2前端用户功能模块的展示
4.2.1用户登录功能
学生和老师在后台管理员处被添加后可以在系统的前端页面进行登陆,登陆时选择自己的身份信息。用户登陆界面如下图4-11所示:
图4-11用户登录操作界面
4.2.2系统首页
学生和老师登陆系统后自动跳转到系统首页,可以根据菜单分类进行信息浏览,首页布局主要展示相关轮播图和新闻信息。操作界面如下图4-12所示:
图4-12系统首页功能界面
4.2.3疫情动态信息查看操作
学生和老师用户进入系统后可以点击疫情动态模块查看后台发布的疫情动态列表和详情信息。具体操作界面如下图4-13、4-14所示:
图4-13疫情动态列表功能界面图
图4-14疫情动态详情功能界面图
4.2.4防疫措施查看操作
学生和老师用户进入系统后可以点击防疫措施模块查看后台发布的防疫措施列表和详情信息。具体操作界面如下图4-15所示:
图4-15防疫措施系统功能界面图
4.2.5疫情知识查看操作
学生和老师用户进入系统后可以点击疫情知识模块查看后台发布的疫情知识列表和详情信息。具体操作界面如下图4-16所示:
图4-16疫情知识系统功能界面图
4.2.6 校内通知信息查看
校内通知又分为三类,分别是校内新闻,通知通告,媒体校园。学生和老师用户进入系统后可以点击不同的模块查看后台发布的校内通知信息列表和详情信息。具体操作界面如下图4-17所示:
图4-17校内通知列表系统功能界面图
4.2.7 个人信息维护
学生和老师登陆疫情管理系统后,可以在个人中心处修改自己的信息。具体操作界面如下图4-18所示:
图4-18 个人信息维护功能界面图
4.2.8 健康打卡
学生和老师登陆疫情管理系统后,可以在个人中心处选择健康管理,进行在线填写个人健康信息进行打卡。具体操作界面如下图4-19所示:
图4-19 个人信息维护功能界面图
4.2.9 离校申请
学生登陆疫情管理系统后,可以在个人中心处选择离校申请,进行在线填写离校申请的相关信息,等待自己的老师进行审核,并可以在我的申请处查看申请的记录和审核结果。具体操作界面如下图4-20、4-21所示:
图4-20 离校申请功能界面图
图4-21 我的申请功能界面图
4.2.10 离校审核
老师登陆疫情管理系统后,可以在个人中心处选择离校申请管理,进行在线审核学生的离校申请信息。具体操作界面如下图4-22所示:
图4-22 离校申请审核功能界面图
四,核心代码展示
package com.zhiku.yiqing.web; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhiku.yiqing.common.R; import com.zhiku.yiqing.pojo.*; import com.zhiku.yiqing.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.Date; import java.util.List; @RestController @RequestMapping("/menhu") public class MenHuController { @Autowired private YiqingNewsService yiqingNewsService; @Autowired private NewsService newsService; @Autowired private DynamicService dynamicService; @Autowired private SchoolGeneralService schoolGeneralService; @Autowired private FankuiService fankuiService; @Autowired private ClaService claService; @GetMapping("/queryAllDynamic/{type}") public R queryAllDynamic(@PathVariable("type") Integer type){ List<Dynamic> dynamics = dynamicService.queryDynamicByType(type); return R.success(dynamics); } @GetMapping("/queryYiqingNewsById/{id}") public R queryYiqingNewsById(@PathVariable("id") Integer id){ YiqingNews yiqingNews = yiqingNewsService.queryYiQingNewsById(id); return R.success(yiqingNews); } @GetMapping("/queryDynamicById/{id}") public R queryDynamicById(@PathVariable("id") Integer id){ Dynamic dynamic = dynamicService.queryDynamicById(id); return R.success(dynamic); } @GetMapping("/querySchoolGeneralById/{id}") public R querySchoolGeneralById(@PathVariable("id") Integer id){ SchoolGeneral schoolGeneral = schoolGeneralService.querySchoolGeneralById(id); return R.success(schoolGeneral); } /** * 查询所有的防疫措施 * @return */ @GetMapping("/queryAllSchoolGenerals") public R queryAllSchoolGenerals(){ List<SchoolGeneral> schoolGenerals = schoolGeneralService.menHuQueryAllSchoolGeneral(); return R.success(schoolGenerals); } /** * 查询所有的疫情新闻 * @return */ @GetMapping("/queryAllYiqingNews") public R queryAllYiqingNews(){ List<YiqingNews> yiqingNews = yiqingNewsService.menhuQueryAllYiqingNews(); return R.success(yiqingNews); } /** * 查询所有的疫情知识 * @return */ @GetMapping("/queryAllNews") public R queryAllNews(){ List<News> news = newsService.menhuQueryAllNews(); return R.success(news); } /** * 查询单个的疫情知识 * @return */ @GetMapping("/queryNewsById/{id}") public R queryNewsById(@PathVariable("id") Integer id){ News news = newsService.queryNewsById(id); return R.success(news); } /** * 填写个人反馈 * @return */ @PostMapping("/addFankui") public R addFankui(@RequestBody Fankui fankui){ fankui.setCreatetime(new Date()); fankuiService.save(fankui); return R.success(); } /** * 查询所有的个人反馈--根据本人编号查询 * @return */ @GetMapping("/queryAllFankui/{snumber}") public R queryAllFankui(@PathVariable("snumber") String snumber){ QueryWrapper<Fankui> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("snumber",snumber); List<Fankui> list = fankuiService.list(queryWrapper); return R.success(list); } /** * 删除个人反馈 * @return */ @DeleteMapping("/delFankui/{id}") public R delFankui(@PathVariable("id") Integer id){ fankuiService.removeById(id); return R.success(); } /** * 查询所有的个人反馈 * @return */ @GetMapping("/queryFankuiList/{page}/{pagesize}") public R queryFankuiList(@PathVariable("page") Integer page,@PathVariable("pagesize") Integer pagesize){ Page<Fankui> pages = new Page<>(page, pagesize); Page<Fankui> page1 = fankuiService.page(pages); return R.success(page1); } /** * 删除个人反馈 * @return */ @DeleteMapping("/batchDelFankuiById/{ids}") public R batchDelFankuiById(@PathVariable("ids") Integer[] ids){ fankuiService.removeBatchByIds(Arrays.asList(ids)); return R.success(); } /** * 班级添加 * @return */ @PostMapping("/addCla") public R addCla(@RequestBody Cla cla){ claService.save(cla); return R.success(); } /** * 查询所有的班级 * @return */ @GetMapping("/queryClaList") public R queryClaList(){ List<Cla> list = claService.list(); return R.success(list); } /** * 查询所有的班级 * @return */ @GetMapping("/queryAllCla/{page}/{pagesize}") public R queryAllCla(@PathVariable("page") Integer page,@PathVariable("pagesize") Integer pagesize){ Page<Cla> pages = new Page<>(page, pagesize); Page<Cla> page1 = claService.page(pages); return R.success(page1); } /** * 删除班级 * @return */ @DeleteMapping("/delCla/{id}") public R delCla(@PathVariable("id") Integer id){ try { claService.removeById(id); return R.success(); }catch (Exception e){ return R.failure(); } } /** * 查询班级详情 * @return */ @GetMapping("/queryClaById/{id}") public R queryClaById(@PathVariable("id") Integer id){ Cla cla = claService.getById(id); return R.success(cla); } /** * 更新班级详情 * @return */ @PutMapping("/updateClaById") public R updateClaById(@RequestBody Cla cla){ claService.updateById(cla); return R.success(); } }
package com.zhiku.yiqing.web; import com.zhiku.yiqing.common.R; import com.zhiku.yiqing.pojo.*; import com.zhiku.yiqing.service.*; import com.zhiku.yiqing.vo.StudentUpdatePasswordVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 学生个人中心 */ @RestController @RequestMapping("/mstudent") public class MenHuStudentController { @Autowired StudentService studentService; @Autowired LeaveManagementService leaveManagementService; @Autowired ReturnManagementService returnManagementService; @Autowired TeacherService teacherService; @Autowired HealthService healthService; /** * 删除个人离校申请 * @param id * @return */ @DeleteMapping("/delStudentLeaveById/{id}") public R delStudentLeaveById(@PathVariable("id") String id){ leaveManagementService.delLeaveById(id); return R.success(); } /** * 提交离校申请 * @param leaveManagement * @return */ @PostMapping("/commitStudentLeave") public R commitStudentLeave(@RequestBody LeaveManagement leaveManagement){ // System.out.println(leaveManagement+"--------------------------"); leaveManagementService.commitStudentLeave(leaveManagement); return R.success(); } /** * 查询所有离校申请 * @param snumber * @return */ @GetMapping("/queryAllMyLeave/{snumber}") public R queryAllMyLeave( @PathVariable("snumber") String snumber){ System.out.println(snumber+"--------------------"); List<LeaveManagement> leaveManagements = leaveManagementService.queryAllMyLeave(snumber); return R.success(leaveManagements); } /** * 删除个人离归校申请 * @param id * @return */ @DeleteMapping("/delStudentReturnById/{id}") public R delStudentReturnById(@PathVariable("id") String id){ returnManagementService.delReturnById(id); return R.success(); } /** * 提交归校申请 * @param returnManagement * @return */ @PostMapping("/commitStudentReturn") public R commitStudentReturn(@RequestBody ReturnManagement returnManagement){ // System.out.println(leaveManagement+"--------------------------"); returnManagementService.commitStudentReturn(returnManagement); return R.success(); } /** * 查询所有归校申请 * @param snumber * @return */ @GetMapping("/queryAllMyReturn/{snumber}") public R queryAllMyReturn( @PathVariable("snumber") String snumber){ System.out.println(snumber+"--------------------"); List<ReturnManagement> returnManagements = returnManagementService.queryAllMyReturn(snumber); return R.success(returnManagements); } @PostMapping("/commitStudentHealth") public R commitStudentHealth(@RequestBody Health health){ // System.out.println(health); healthService.commitStudentHealth(health); return R.success(); } @GetMapping("/queryAllTeacher") public R queryAllTeacher(){ List<Teacher> teacherList = teacherService.menhuQueryAllTeacher(); return R.success(teacherList); } @GetMapping("/getStudentInfoById/{id}") public R getStudentInfoById(@PathVariable("id") Integer id){ Student student = studentService.getStudentInfoById(id); return R.success(student); } @PutMapping("/updateStudentInfoById") public R updateStudentInfoById(@RequestBody Student student){ System.out.println(student+"--------------------"); studentService.updateStudentInfoById(student); return R.success(); } @PutMapping("/updateStudentPasswordById") public R updateStudentPasswordById(@RequestBody StudentUpdatePasswordVo student){ System.out.println(student+"--------------------"); boolean isExist = studentService.findUserPasswordById(student.getId(), student.getPassword()); // 代表存在 if (!isExist) { return R.failure().setMessage("原始密码输入错误"); } studentService.updatePasswordById(student); return R.success(); } }
五,项目总结
本次开发和设计的校园疫情管理系统,主要切合目前互联网时代己进入WEB3.0的新时代,利用新技术新思路为学校的信息化建设添砖加瓦。系统的整体功能按原先的任务书要求己经实现了相关的核心业务功能,包含前端用户操作界面和后台管理界面,主要围绕用户、教师、管理员三个用户角色的业务操作功能来进行开发和实现,基于前期的需求分析,己经完成学生管理、教师管理、健康打卡、离校审核等业务模块的开发和测试。
























