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

Springboot开发的大学生寝室考勤系统刷脸进出宿舍系统技术文档

宿舍出入系统

1.2采集学生人脸信息和宿管人脸信息

前端使用navigator.mediaDevices.getUserMedia(考虑个浏览器的内核差异,此处以最新的标准API:navigator.mediaDevices.getUserMedia为例)获取用户浏览器的摄像头并开启视频,使用canvas获取某一帧视频的图像,并转化成base64格式的图片,使用ajax传入后台采集人脸的接口/jsp/student/addFaceData。该接口主要调用虹软的人脸采集接口getFaceEngine()方法,获取该用户的脸部特征数据,并存入数据库。核心代码如下(宿管和学生采集的过程一样,此处以学生采集为例):

演示视频:
https://www.bilibili.com/video/BV1Da4y117ep/?share_source=copy_web&vd_source=11344bb73ef9b33550b8202d07ae139b

1.3进出刷脸

进入和出去宿舍楼栋的刷脸逻辑一样,此处使用inout来表示,in表示进入,out表示出去。前端同样使用navigator.mediaDevices.getUserMedia开启用户浏览器的摄像头。生成用户脸部图片,调用/jsp/inoutDep/faceadd?inout=进出类型&department_id=宿舍楼栋id控制器,使用虹软人脸比对接口faceEngine.detectFaces()方法,将刚采集的用户人脸图片转化成人脸特征数据,并于数据库里已采集的学生宿舍脸部特征数据循环对比,根据特征相似值判断进出人的身份。该相似值推荐0.8以上,以此提高识别度。代码如下:

2健康上报和管理

2.1上报

该功能主要使用使用form表单提交到/web/health/save,根据提交的id是否为空,判断学生是添加数据还是编辑。调用healthService.add()或者update()进行数据库的插入或者更新操作。代码如下:

2.2管理

请求路径/web/healt/page,传入参数pageNo(默认第一页),根据session获取当前学生的登录信息,将该学生的id传入healthService.list()查询该学生上报的健康数据,使用pagehelper进行分页。并将查询结果封装到pageInfo实体,使用model传给jsp页面,代码如下:

3学生个人中心

3.1换寝申请

该功能主要使用使用form表单提交到/web/applyChange/apply,根据session获取当前学生的登录信息,将该学生的id传入学生实体,并在service里把该数据的审核状态设置未0(使用result字段标识审核状态:0标识待审核,1标识同意换寝室,-1标识不同意换寝室,-2标识学生撤回申请),调用applyChangeService.save()保存至数据库, 代码如下:

3.2我的换寝管理

请求路径/web/applyChange/page,传入参数pageNo(默认第一页),根据session获取当前学生的登录信息,将该学生的id传入applyChangeService.list()查询该学生的换寝申请数据,使用pagehelper进行分页。并将查询结果封装到pageInfo实体,使用model传给jsp页面,代码如下:

该页面使用el表达式和c:forEach标签循环展示数据,根据result审核状态判断该数据的撤回和删除按钮。当学生刚提交申请,该数据进入待审核状态,即result=0,此时学生可以进行撤回申请。当学生撤回申请或者学校不同意换寝时,该学生可以删除该记录,否则不能有任何操作。

3.3宿舍维修提交

该功能主要使用使用form表单提交到/web/repair/apply,使用multiple实现多图片上传,使用accept显示上传文件的格式。根据session获取当前学生的登录信息,将该学生的id传入学生实体,并在repairService里把该数据的维修状态设置未0(使用status字段标识维修状态:0等待为序,1已维修),调用repairService.save()保存至数据库, 代码如下:

3.4我的维修申请记录

请求路径/web/repair/page,传入参数pageNo(默认第一页),根据session获取当前学生的登录信息,将该学生的id传入repairService.list()查询该学生的换寝申请数据,使用pagehelper进行分页。并将查询结果封装到pageInfo实体,使用model传给jsp页面,当数据是待维修状态时可以进行删除。代码如下:

3.6提交宿舍考勤(寝室长)

请求/web/stuAttendance/toadd,会根据寝室长输入的日期查询改日内该寝室的所有成员是否提交考勤,若寝室长未输入日期,则默认查询今日考勤的情况,根据is_dq字段来判断寝室成员是否已经签到,若is_dq=0标识未签到,is_dq=1表示已签到。代码如下:

3.7考勤记录

请求路径/web/stuAttendance/page?type=类型,type=qs表示寝室长管理本寝室成员的考勤记录,type=w表示普通成员查看自己的考勤记录。采用pagehelper分页。代码如下:

3.8修改登录密码

请求路径/web/student/toupPwd,调用studentSrtvice.getById()获取学生老密码与他输入的原密码对比,若一致则判断新密码与确认密码是否一致,满足条件则调用studentSrtvice.update()修改该学生的密码。

3.9查看个人基本信息

根据session获取当前登录的学生id,调用studentService.getById()获取学生信息并放入model,前端jsp使用el表达式获取展示。

3.10退出登录

移除session里的学生对象,并重定向登录页面。

宿舍模块的实现

1.1宿舍分配和疫情隔离

宿舍楼栋添加时,根据is_normal判断该楼栋是否是隔离楼栋,is_normal=1表示正常楼栋,is_normal=0则表示隔离楼栋,若有需要隔离的学生,则直接进入隔离楼栋,选择需要分配的宿舍。请求路径/jsp/student/pageForRoom?room_id=宿舍id,先调用roomService.getById()获取该公寓的具体信息,根据该公寓的类型(分为男寝和女寝),查询出与之对应的男学生或者女学生。根据学生的room_id与前端传过来的room_id对比判断该学生是否属于本寝室的成员,根据学生room_id是否等于0或者null来判断该学生是否分配寝室。代码如下:

已分配的本寝室数据根据inThisRoom=1来判断并且已选中,其他宿舍的学生则需要先取消所在宿舍,才可以成功分配到本寝室。使用form表单提交至/jsp/student/setRoom?room_id=本寝室id,根据表单setudent_ids的长度判断人数是否符合本寝室的入住人数。而后循环setudent_ids为这些学生数据分配宿舍,修改room_id,并将这些学生的姓名和学号都存入对应的宿舍里,方便展示。代码如下:

1.2换寝申请

请求路径/jsp/applyChange/page,根据session获取当前登录的用户,而后根据该用户的role字段判断是管理员还是宿管,如果是宿管则根据宿管id查询他管理的寝室申请列表,管理员则查询所有列表 。调用applyChangeService.list()方法配合pagehelper分页插件,查询分页数据并放入model传入jsp页面。代码如下:

根据学生的提交信息选择审核通过或者不通过,一般是需要交换的双方同时申请(或者申请空的寝室),同意后可相互交换寝室。调用applyChangeService.update()修改result的值,以此实现换侵功能。 代码如下:

1.3维修处理

请求路径/jsp/repair/page,根据session获取当前登录的用户,而后根据该用户的role字段判断是管理员还是宿管,如果是宿管则根据宿管id查询他管理的寝室申请列表,管理员则查询所有列表 。调用repairService.list()配合pagehelper分页插件,查询分页数据并放入model传入jsp页面。代码如下:

点击处理按钮,请求/jsp/repair/saveOrUpdate,修改result=1,并调用repairService.update()保存至数据库。代码如下:

1.4发布公告

前端使用simditor.js富文本编辑框实现公告主题的多样式的灵活排班。使用forum提交公告主体到/jsp/tip/save控制器。根据id是否为空,调用tipService.save()保存或者update()更新公告。代码如下:

公告管理,根据session获取当前登录的用户,而后根据该用户的role字段判断是管理员还是宿管,如果是宿管则根据宿管id查询他自己发布的公告列表,管理员则查询所有列表 。调用tipService.list()查询数据,使用pagehelper插件分页实现。代码如下:

管理员模块

1.1健康监测

学生健康检测和宿管健康检测业务逻辑基本差不多,请求路径/jsp/health/page?type=类型,type=stu表示学生,type=user表示宿管。 此处以学生学生健康检测为例。根据session获取当前登录的用户,而后根据该用户的role字段判断是管理员还是宿管,如果是宿管则查询他所管理的公寓数,并放入list,而后使用in查询这些楼栋的学生健康数据,管理员则查询所有列表;如果是辅导员则根据辅导员的学院id查询该学院的学生健康数据查询条件根据role设定好后,调用healthService.list()获取健康检测数据,使用pagehelper插件分页和排序。代码如下:

1.2学生考勤管理

请求路径/jsp/stuAttendance/page。 根据session获取当前登录的用户,而后根据该用户的role字段判断是管理员还是宿管,如果是宿管则查询他所管理的公寓数,并放入list,而后使用in查询这些楼栋的学生考勤数据,管理员则查询所有学生的考勤;如果是辅导员则根据辅导员的学院id查询该学院的学生考勤数据查询条件根据role设定好后,调用inoutDepService.list()获取考勤数据,使用pagehelper插件分页,根据id倒叙排序。代码如下:

宿管还可以手动添加某一学生的考勤信息,在input输入某学生的学号,使用ajax请求查询查询该学生,点击提交按钮提交form表单至/jsp/stuAttendance/save,调用stuAttendanceService.isqd判断该学是否已提交签到信息,以免重复提交。若察隅结果为null则调用stuAttendanceService.insrt()方法保存该学的考勤数据到数据库。代码如下:

1.3学生进入宿舍记录查询

请求路径/jsp/inoutDep/page。 根据session获取当前登录的用户,而后根据该用户的role字段判断是管理员还是宿管,如果是宿管则查询他所管理的公寓数,并放入list,而后使用in查询这些楼栋的学生出入记录数据,管理员则查询所有学生和宿管的出入记录;如果是辅导员则根据辅导员的学院id查询该学院的学生出入记录数据。查询条件根据role设定好后,调用inoutDepService.list()获取考勤数据,使用pagehelper插件分页和排序。代码如下:

1.4通告管理

请求路径/jsp/bulletin/page,根据session获取登录用户的身份,若不是超级管理员则根据登录用户的id查询,管理员则查询所有通告。调用bulletionService.list查询,使用pagehelper插件分页。代码如下:

登录

学生灯枯和用户登录一样,军事form表单提交账号密码后台查询数据库,已学生登录为例,表单提交至/web/student/login,调用studentService.list()判断返回结果,若返回结构为空则表示登录失败,否则将该学生存入session,登录成功跳转个人中心页面。代码如下:

学生注册

学生信息由管理员添加,但是学生需要刷脸激活账号。先输入学号和设置密码,然后进入人脸采集和识别接口/web/student/HRfaceadd,将浏览器摄像头视频截取某一帧,用canvas转化base64的图片传入,调用虹软人脸比对接口faceEngine.detectFaces()方法进行比对,以此激活,代码如下:

相关文章:

Springboot开发的大学生寝室考勤系统刷脸进出宿舍系统技术文档

宿舍出入系统 1.2采集学生人脸信息和宿管人脸信息 前端使用navigator.mediaDevices.getUserMedia(考虑个浏览器的内核差异,此处以最新的标准API:navigator.mediaDevices.getUserMedia为例)获取用户浏览器的摄像头并开启视频,使用…...

网络共享服务

存储类型:直连式(DAS):距离最近,存储设备且直接连接到服务器上 存储区域网络(SAN):适用于大型应用或数据库系统,可以使用文件的空间, 以及管理空间…...

资本主义的市场竞争?IBM总监Jerry Chow 谈量子计算的未来

​ 人物介绍:Jerry M.Chow博士在耶鲁大学取得物理博士学位。担任IBM量子系统总监,其研究重点是面向容错量子计算的多量子比特系统。他主要为IBM的量子系统路线图制定战略,与硬件团队领导者一起设定目标研究领域,同时也确保最佳的客…...

什么是残差矢量量化?

一、说明 基于残差矢量量化的神经音频压缩方法正在重塑现代音频编解码器的格局。在本指南中,了解 RVQ 背后的基本思想以及它如何增强神经压缩。 数据压缩在当今的数字世界中发挥着关键作用,促进信息的高效存储和传输。由于当今超过 80% 的互联网流量来自…...

计算机网络(第六版)复习提纲2

二、物理层 2.1 物理层基本概念 物理层协议常常成为物理层规程 物理层的主要任务为确定与传输媒体的接口有关的一些特性: 1.机械特性:指明接口所用接线器的尺寸等; 2.电气特性:指明接口电缆各条线上的电压范围; 3.功能…...

11k+star 开源笔记应用真香 centos部署教程

leanote binary installation on Mac and Linux (En) life edited this page on Jul 21, 2017 10 revisions Pages 26 Home How to develop leanote 如何开发leanote How to install leanote on Ubuntu? How to Upgrade Leanote Install Mongodb leanote api leanote …...

win下安装tensorflow

1首先ctrlaltdelete打开任务管理器查看GPU型号 2或者右键我的电脑然后如下方式查看显卡发现没有navida没有GPU...

SpringBoot 入门

1.SpringBoot介绍 1.1.什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其中“Boot”的意思就是“引导”,Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速开发 Spring应用的方式。 1.2.Spring Boot 特点 • 嵌…...

使用WebFlux处理WebSocket连接的全生命周期案例

使用WebFlux处理WebSocket连接的全生命周期案例 简介: 在Web应用程序开发中,WebSocket是一种用于实现双向通信的协议。Spring WebFlux提供了对WebSocket的支持,使您能够轻松地处理WebSocket连接和消息。本博客将介绍如何使用WebFlux处理WebS…...

【REST2SQL】10 REST2SQL操作指南

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…...

199_二叉树的右视图

描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 思路 对树进行深度优先搜索,在搜索过程中,我们总是先访问右子树。那么对于每一层来说,…...

第七讲_css浮动

css浮动 1. 设置浮动2. 浮动的特点3. 浮动的影响4. 解决浮动的影响4.1 解决父元素高度塌陷的问题4.2 解决对兄弟元素影响问题 1. 设置浮动 浮动是通过float属性设置,float取值范围: none:不浮动,默认值。left:向左浮…...

2024秋招,顺丰科技测试开发工程师一面

前言 今天回顾一下,一个被捞的全流程面试经历 时间线 9月21日测评 10月26日技术一面,本来是11点半开始,我正做另一个笔试呢,突然给我打电话开面 20分钟结束,一开始以为KPI,结果给过了 10月31日技术二…...

基于apache的http文件服务配置

背景: 公司的产品使用的第三方模组可以OTA,厂家提供的是window开启软件,这样就可以在本机做http下载服务器,然后使用端口映射的方式,公开到外网,这样就可以进行4G网络访问内网服务器了。但这个有个弊端&am…...

连铸工艺和模铸工艺有什么区别。

问题描述:连铸工艺和模铸工艺有什么区别。 问题解答: 连铸工艺和模铸工艺在多个方面存在显著差异: 指代不同: 模铸是成批大量生产锻件的锻造方法。连铸即为连续铸钢的锻造方法。 工艺不同: 模铸在锻压机械的作用…...

pyqt treeWidget树生成

生成treeWidget树与获取treeWidget树节点的数据 # encodingUTF-8 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QTreeWidgetItem, QLineEdit, QSpinBox, QComboBox from PyQt5.QtWidgets import QWidget from release_test import Ui_F…...

DataFunSummit:2023年云原生大数据峰会:核心内容与学习收获(附大会核心PPT下载)

随着数字化转型的深入推进,大数据技术已经成为企业获取竞争优势的关键因素之一。本次峰会汇聚了业界顶尖的大数据专家、企业领袖和技术精英,共同探讨云原生大数据领域的最新技术和趋势。本文将深入分析峰会的核心内容,并探讨参会者从中能学到…...

docker 容器添加指定网络地址

docker 容器添加指定网络地址 在搭建halo博客时,准备让 halo、mysql8.1、nginx 三个容器在同一个网段中,并指定IP。 实现docker内部容器之间网络互通。 查看容器网络信息命令 docker inspect 容器名各容器部署成功后网络效果如下: nginx …...

后端怎样防止重复提交订单?

参考文章 通常我们可以在前端通过防抖和节流来解决短时间内请求重复提交的问题, 如果因网络问题、Nginx重试机制、微服务Feign重试机制或者用户故意绕过前端防抖和节流设置,直接频繁发起请求,都会导致系统防重请求失败,甚至导致后…...

数据结构之二叉搜索树

二叉搜索树 满足条件: 1.对于根节点:左子树中所有节点的值小于右子树中所有节点的值 2.任意节点的左右子树也是二叉搜索树,同样满足条件1 二叉搜索树的常用操作 我们将二叉搜索树封装为一个类 BinarySearchTree ,并声明一个成员变…...

CODESYS组件开发进阶:如何通过修改.m4文件调用SysFile等系统函数(附实例代码)

CODESYS组件开发进阶:深入解析.m4文件配置与系统函数调用实战 在工业自动化领域,CODESYS作为主流的PLC开发平台,其组件化开发能力为工程师提供了极大的灵活性。但当你需要突破基础功能限制,实现文件操作、系统管理等高级功能时&am…...

用Multisim复刻经典24秒篮球计时器:从555时钟到数码管显示的保姆级仿真教程

用Multisim复刻经典24秒篮球计时器:从555时钟到数码管显示的保姆级仿真教程 篮球比赛中那令人窒息的最后24秒倒计时,不仅是球员的决胜时刻,也是电子爱好者眼中完美的数字电路实践案例。本文将带你用Multisim从零搭建一个完整的24秒计时系统&a…...

基于vue的断舍离管理系统[vue]-计算机毕业设计源码+LW文档

摘要:随着物质生活的丰富,物品管理成为人们生活中的一个重要问题。断舍离管理系统的设计与实现旨在帮助用户更好地管理个人物品,通过合理的分类、捐赠和回收机制,实现物品的有效清理和资源的合理利用。本文基于Vue框架设计并实现了…...

如何验证Qwen3-4B部署效果?MMLU基准测试实战指南

如何验证Qwen3-4B部署效果?MMLU基准测试实战指南 1. 为什么需要验证模型效果? 当你成功部署了Qwen3-4B模型后,最关心的问题肯定是:这个模型到底表现如何?能不能满足我的需求?这时候就需要一个客观的评估方…...

Nano-Banana与PyTorch Lightning集成:简化深度学习流程

Nano-Banana与PyTorch Lightning集成:简化深度学习流程 用更少的代码,做更多的事情——这就是PyTorch Lightning的魅力所在 如果你正在使用Nano-Banana进行深度学习项目,可能会发现编写训练循环、管理设备、处理日志记录这些重复性工作相当耗…...

花小钱办大事!微调Nova Lite,实现Pro级视觉检测效果

本文介绍了在Amazon Bedrock上对Amazon Nova Lite 1.0进行微调的两个实际应用案例,展示了在专业计算机视觉任务中,如何在保持成本效益的同时显著提升性能。通过对航拍视角检测和低光照监控场景的系统性评估,本例以最小的训练成本实现了增强的…...

为Qwen-VL“点亮”视觉思维:从注意力热力图洞察多模态对齐的深层逻辑

1. 理解Qwen-VL的视觉思维机制 当你第一次看到Qwen-VL这类视觉语言模型时,可能会好奇它究竟是如何"看"图片的。想象一下,你正在教一个小朋友看图说话:小朋友会先扫视整张图片,然后目光停留在某些关键区域,最…...

2.2.2.1 搭建Spark单机版环境

本次实战旨在Linux环境下完成Spark单机版环境的搭建。首先确保JDK已正确安装,随后获取Spark安装包并上传至服务器指定目录。接着,将安装包解压至系统路径,并通过修改配置文件设置环境变量,使系统能够识别Spark命令。最后&#xff…...

Java网络协议解析核心源码剖析(Netty+Spring Boot双栈实测):从Raw Socket到自动反序列化全链路解密

第一章:Java网络协议解析核心源码剖析(NettySpring Boot双栈实测):从Raw Socket到自动反序列化全链路解密Java 网络通信的底层能力并非止步于 Spring Boot 的 RestController 抽象层——其真实脉搏深埋于 Netty 的 ChannelPipelin…...

TCA9548A I²C多路复用器原理与嵌入式实战指南

1. TCA9548A IC多路复用器技术解析与嵌入式系统集成实践 1.1 器件定位与工程价值 TCA9548A是德州仪器(TI)推出的低电压8通道IC总线开关,其核心价值在于解决嵌入式系统中IC总线地址冲突这一经典工程难题。在STM32、ESP32、Raspberry Pi等主流…...