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

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...