当前位置: 首页 > 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 ,并声明一个成员变…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

日常一水C

多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

算术操作符与类型转换:从基础到精通

目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...