河南专业网站建设公司网站建设安全协议书

张小明 2025/12/22 14:44:15
河南专业网站建设公司,网站建设安全协议书,北京给网站做系统的公司,网站建设需求方案毕业设计实战#xff1a;基于SpringBoot的入校申报审批系统#xff0c;从需求到部署避坑全指南 当初做入校申报审批系统时#xff0c;我在“健康码、行程码双码上传校验”功能上卡了整整三天——一开始没做文件格式和大小限制#xff0c;结果用户传了个100MB的视频文件基于SpringBoot的入校申报审批系统从需求到部署避坑全指南当初做入校申报审批系统时我在“健康码、行程码双码上传校验”功能上卡了整整三天——一开始没做文件格式和大小限制结果用户传了个100MB的视频文件服务器直接崩了导师看了直摇头 后来踩了无数坑终于总结出这套完整开发流程。今天就把入校申报审批系统的实战经验全部分享出来宝子们跟着做毕设稳过一、需求分析别想当然先搞懂“谁申请谁审批”最开始我以为做个简单的表单提交就行了结果导师说“要考虑疫情常态化管理要有健康检查流程”。后来才明白入校申报系统的核心是“用户申报-管理员审批-门卫核验”的三级流程必须抓住这三个环节的核心需求。1. 核心用户 核心功能踩坑后总结版入校申报审批系统有三类核心用户普通用户申报人、管理员审批人、门卫核验人。千万别把“辅导员”、“院系领导”都加进去我当初加了审批流程变得极其复杂最后简化成三级才顺畅。用户端申报人必须做的功能个人信息管理维护姓名、身份证号、联系方式、头像等基本信息。入校申报这是核心中的核心填写入校时间、出校时间、入校事由。选择人员身份学生、教职工、访客等。提交后生成唯一的申报编号。申报记录查询查看所有申报记录及审批状态。公告查看浏览学校最新防疫政策和通知。管理员端审批人核心功能申报审批查看待审批的入校申报列表。审核申报信息可“通过”或“驳回”。驳回必须填写理由这个很重要。用户管理管理所有用户账号可冻结异常账号。入校检查记录管理查看所有入校检查记录。公告管理发布、编辑、删除防疫公告。门卫端核验人简化但必要入校检查登记扫描申报编号或输入身份证号查询申报信息。登记体温、上传健康码和行程码截图。记录是否去过风险地区。今日入校统计查看当天已入校人员列表。2. 需求分析避坑指南血泪教训别空想流程要画出来用流程图工具画出完整的“申报-审批-入校检查”流程。我当初画出来后才发现少了“驳回后用户重新提交”的环节赶紧补上。一定要考虑异常情况用户填的出校时间比入校时间还早怎么办前端要做时间校验健康码截图上传了假图怎么办虽然不能100%防伪但可以做文件MD5校验审批人长时间不审批怎么办可以加个“催办”功能或者自动提醒写清楚约束条件“入校时间必须至少提前2小时申报”“健康码必须为24小时内”“体温超过37.3℃自动标记为异常”“同一用户同一天只能申报一次入校”3. 可行性分析三句话说清楚技术可行性SpringBoot MySQL Vue都是成熟技术。健康码识别可以用简单的颜色判断绿码/黄码/红码不需要复杂的AI识别。经济可行性所有工具免费部署到学校服务器或学生云服务器学生优惠成本极低。操作可行性用户扫码就能申报门卫用手机或平板就能核验操作简单。二、技术选型SpringBoot是真香当初我看别人用传统的SSM配置一堆XML文件。后来选择了SpringBoot 2.7 MyBatis-Plus Vue 2 Element UI开发效率提升了不止一倍技术栈详解与避坑技术选择理由避坑提醒SpringBoot 2.7.x自动配置内嵌Tomcat快速启动。别用3.x部分依赖还没适配好。MyBatis-Plus强大的CRUD操作代码生成器好用。好好用它的LambdaQueryWrapper写查询条件超方便。Vue 2 Element UI组件丰富做管理后台界面很快。Vue 2够用了别追求Vue 3增加学习成本。MySQL 8.0JSON字段支持存健康码路径方便。一定用utf8mb4字符集否则Emoji表情会乱码。Redis可选缓存申报编号提高查询速度。如果数据量不大可以不用简化部署。开发环境一步到位# 1. 用Spring Initializr创建项目# 勾选Web、MyBatis、MySQL、Redis可选# 2. 配置application.ymlspring: datasource: url: jdbc:mysql://localhost:3306/ruxiao_system?useSSLfalseserverTimezoneAsia/ShanghaicharacterEncodingutf8 username: root password:123456driver-class-name: com.mysql.cj.jdbc.Driver servlet: multipart: max-file-size: 10MB# 限制上传文件大小max-request-size: 10MB# 3. 集成MyBatis-Plusmybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl三、数据库设计状态流转是关键我当初的坑把审批状态和检查状态混在一个表里结果逻辑混乱。后来分成了入校申报表管审批和入校检查表管核验清晰多了。核心表结构设计重点-- 入校申报表核心表CREATETABLEruxiaoshenbao(idintNOTNULLAUTO_INCREMENT,ruxiaoshenbao_uuid_numbervarchar(50)NOTNULLCOMMENT申报编号RX年月日6位随机数,yonghu_idintNOTNULLCOMMENT申报用户,zhuanye_typesintDEFAULT1COMMENT人员身份1学生2教职工3访客,shiyoutextCOMMENT入校事由,ruxiaoshenbao_timedatetimeNOTNULLCOMMENT计划入校时间,cuxiao_timedatetimeCOMMENT计划出校时间,ruxiaoshenbao_yesno_typesintDEFAULT1COMMENT审批状态1待审批2通过3驳回,ruxiaoshenbao_yesno_texttextCOMMENT审批意见,create_timedatetimeDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(id),UNIQUEKEYuk_uuid(ruxiaoshenbao_uuid_number),KEYidx_user(yonghu_id),KEYidx_time(ruxiaoshenbao_time)-- 按时间查询加索引)ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT入校申报表;-- 入校检查表核验记录CREATETABLEruxiaojiancha(idintNOTNULLAUTO_INCREMENT,ruxiaoshenbao_idintNOTNULLCOMMENT关联的申报记录,tiwendecimal(3,1)COMMENT体温,ruxiaojiancha_photovarchar(500)COMMENT健康码图片路径,xingcheng_photovarchar(500)COMMENT行程码图片路径,jiancha_resultintDEFAULT1COMMENT检查结果1正常2异常,ruxiaojiancha_contenttextCOMMENT检查详情,create_timedatetimeDEFAULTCURRENT_TIMESTAMPCOMMENT检查时间,PRIMARYKEY(id),KEYfk_shenbao(ruxiaoshenbao_id),CONSTRAINTfk_shenbaoFOREIGNKEY(ruxiaoshenbao_id)REFERENCESruxiaoshenbao(id))ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT入校检查表;-- 用户表CREATETABLEyonghu(idintNOTNULLAUTO_INCREMENT,yonghu_namevarchar(100)NOTNULLCOMMENT姓名,yonghu_phonevarchar(20)NOTNULLCOMMENT手机号,yonghu_id_numbervarchar(18)NOTNULLCOMMENT身份证号,xueyuanvarchar(100)COMMENT学院/部门,banjivarchar(50)COMMENT班级,yonghu_deleteintDEFAULT0COMMENT0正常1已删除,PRIMARYKEY(id),UNIQUEKEYuk_phone(yonghu_phone),UNIQUEKEYuk_idcard(yonghu_id_number))ENGINEInnoDBDEFAULTCHARSETutf8mb4COMMENT用户表;设计亮点申报编号生成规则RX20240520001234RX年月日6位随机数唯一且有意义。状态分离审批状态在申报表检查结果在检查表逻辑清晰。索引优化给常用的查询字段加索引提高查询速度。四、功能实现抓住核心流程做出亮点1. 用户端入校申报核心体验关键逻辑时间校验、重复申报校验、生成唯一编号。前端实现要点Vue Element UItemplate div classshenbao-form el-form :modelform :rulesrules refformRef el-form-item label计划入校时间 propruxiaoshenbao_time el-date-picker v-modelform.ruxiaoshenbao_time typedatetime :picker-optionstimeOptions placeholder选择入校时间 / div classtip需至少提前2小时申报/div /el-form-item el-form-item label人员身份 propzhuanye_types el-select v-modelform.zhuanye_types placeholder请选择 el-option label学生 :value1/el-option el-option label教职工 :value2/el-option el-option label访客 :value3/el-option /el-select /el-form-item el-form-item label入校事由 propshiyou el-input typetextarea v-modelform.shiyou :rows4 placeholder请详细说明入校事由 maxlength500 show-word-limit / /el-form-item el-form-item el-button typeprimary clicksubmitForm :loadingsubmitting 提交申报 /el-button /el-form-item /el-form /div /template script export default { data() { // 时间校验只能选择未来时间且至少提前2小时 const validateTime (rule, value, callback) { if (!value) { callback(new Error(请选择入校时间)); } const now new Date(); const twoHoursLater new Date(now.getTime() 2 * 60 * 60 * 1000); if (value twoHoursLater) { callback(new Error(入校时间需至少提前2小时)); } callback(); }; return { form: { ruxiaoshenbao_time: , zhuanye_types: , shiyou: }, rules: { ruxiaoshenbao_time: [ { required: true, validator: validateTime, trigger: change } ], zhuanye_types: [ { required: true, message: 请选择人员身份, trigger: change } ], shiyou: [ { required: true, message: 请输入入校事由, trigger: blur }, { min: 10, message: 事由描述至少10个字, trigger: blur } ] }, timeOptions: { disabledDate(time) { // 不能选择今天之前的日期 return time.getTime() Date.now() - 24 * 60 * 60 * 1000; } }, submitting: false }; }, methods: { async submitForm() { try { await this.$refs.formRef.validate(); this.submitting true; // 检查今天是否已申报过 const hasToday await this.checkTodayApplication(); if (hasToday) { this.$message.warning(您今天已提交过入校申报请勿重复提交); return; } // 提交申报 const res await this.$api.shenbao.submit(this.form); this.$message.success(申报成功您的申报编号${res.data.uuidNumber}); this.$router.push(/my-applications); } catch (error) { console.error(提交失败:, error); } finally { this.submitting false; } }, async checkTodayApplication() { const today new Date().toISOString().split(T)[0]; const res await this.$api.shenbao.checkToday({ date: today }); return res.data.hasApplication; } } }; /script后端关键代码SpringBootServicepublicclassRuxiaoshenbaoServiceImplimplementsRuxiaoshenbaoService{AutowiredprivateRuxiaoshenbaoMapperruxiaoshenbaoMapper;TransactionalOverridepublicResultsubmitShenbao(RuxiaoshenbaoFormform,IntegeruserId){// 1. 检查今天是否已申报LocalDatetodayLocalDate.now();LambdaQueryWrapperRuxiaoshenbaowrappernewLambdaQueryWrapper();wrapper.eq(Ruxiaoshenbao::getYonghuId,userId).ge(Ruxiaoshenbao::getCreateTime,today.atStartOfDay()).lt(Ruxiaoshenbao::getCreateTime,today.plusDays(1).atStartOfDay());longcountthis.count(wrapper);if(count0){returnResult.error(您今天已提交过入校申报);}// 2. 生成唯一编号StringuuidNumbergenerateUuidNumber();// 3. 保存申报记录RuxiaoshenbaoentitynewRuxiaoshenbao();BeanUtils.copyProperties(form,entity);entity.setYonghuId(userId);entity.setRuxiaoshenbaoUuidNumber(uuidNumber);entity.setRuxiaoshenbaoYesnoTypes(1);// 待审批this.save(entity);// 4. 记录操作日志可选logService.addLog(userId,提交入校申报,编号uuidNumber);returnResult.success(申报提交成功,uuidNumber);}privateStringgenerateUuidNumber(){// RX 年月日 6位随机数StringdateStrLocalDate.now().format(DateTimeFormatter.ofPattern(yyyyMMdd));StringrandomStrString.format(%06d,newRandom().nextInt(999999));returnRXdateStrrandomStr;}}2. 管理员端申报审批核心业务关键逻辑批量审批、驳回必须填理由、审批记录可追溯。审批页面设计要点待审批列表表格显示所有待审批记录可多选批量审批。审批操作弹窗显示申报详情用户信息、入校时间、事由。单选框“通过”或“驳回”。文本域“审批意见”驳回时必须填写。“提交审批”按钮。审批历史可查看每条申报的审批记录。批量审批后端代码PostMapping(/batchApprove)ResponseBodyTransactionalpublicResultbatchApprove(RequestBodyBatchApproveRequestrequest){// request包含申报ID列表、审批结果、审批意见if(CollectionUtils.isEmpty(request.getShenbaoIds())){returnResult.error(请选择要审批的申报);}if(request.getResult()3StringUtils.isBlank(request.getReason())){returnResult.error(驳回必须填写理由);}ListRuxiaoshenbaoupdateListnewArrayList();for(IntegershenbaoId:request.getShenbaoIds()){RuxiaoshenbaoshenbaoruxiaoshenbaoService.getById(shenbaoId);if(shenbao!nullshenbao.getRuxiaoshenbaoYesnoTypes()1){shenbao.setRuxiaoshenbaoYesnoTypes(request.getResult());shenbao.setRuxiaoshenbaoYesnoText(request.getReason());updateList.add(shenbao);// 发送审批结果通知微信/短信noticeService.sendApproveResult(shenbao.getYonghuId(),request.getResult());}}if(!updateList.isEmpty()){ruxiaoshenbaoService.updateBatchById(updateList);}returnResult.success(批量审批完成);}3. 门卫端入校检查移动端友好关键逻辑扫码核验、双码上传、体温异常预警。移动端核验页面!-- 简洁的核验页面适合手机/PAD操作 --divclasscheck-pagedivclassscan-sectionbuttonclickstartScan扫码核验/buttondivclassor或/divinputv-modelsearchTextplaceholder输入申报编号/身份证号buttonclicksearch查询/button/divdivv-ifshenbaoInfoclassinfo-sectionh3{{ shenbaoInfo.yonghuName }}/h3p申报编号{{ shenbaoInfo.uuidNumber }}/pp计划入校{{ shenbaoInfo.planTime }}/pdivclasscheck-forminputtypenumberv-modeltiwenplaceholder测量体温(℃)step0.1divclassupload-sectionlabel健康码/labelinputtypefileacceptimage/*changeuploadHealthCodeimgv-ifhealthCodeUrl:srchealthCodeUrlclasspreview/divdivclassupload-sectionlabel行程码/labelinputtypefileacceptimage/*changeuploadTravelCodeimgv-iftravelCodeUrl:srctravelCodeUrlclasspreview/divbuttonclicksubmitCheck:disabled!canSubmit完成核验/button/div/div/div五、系统测试重点测这些场景核心测试用例测试场景测试步骤预期结果重要性重复申报同一用户同一天提交两次申报第二次提示“今天已申报过”高时间校验选择1小时后入校的时间提示“需至少提前2小时”高双码上传上传非图片文件如PDF提示“请上传图片文件”中体温异常输入体温37.5℃自动标记为“异常”需要额外确认高批量审批选择多条记录批量通过所有选中记录状态更新为“通过”中扫码核验用已过期的申报编号扫码提示“申报已过期”高压力测试简单做用JMeter模拟50个用户同时提交申报看系统响应时间。目标95%的请求在2秒内响应。六、部署与上线1. 服务器准备学生优惠阿里云/腾讯云学生服务器¥10/月。配置1核2GCentOS 7.6。必备软件JDK 1.8、MySQL 8.0、Nginx反向代理。2. 一键部署脚本#!/bin/bash# deploy.shecho开始部署入校申报系统...# 1. 备份旧版本if[-d/app/ruxiao];thenmv/app/ruxiao /app/ruxiao_backup_$(date%Y%m%d)fi# 2. 创建新目录mkdir-p /app/ruxiaocptarget/ruxiao-system.jar /app/ruxiao/# 3. 复制配置文件cpapplication-prod.yml /app/ruxiao/# 4. 启动应用cd/app/ruxiaonohupjava -jar ruxiao-system.jar --spring.profiles.activeprodapp.log21echo部署完成3. Nginx配置server { listen 80; server_name ruxiao.yourschool.edu.cn; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 静态文件缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control public, immutable; } }七、答辩准备讲好这个故事演示流程要完整“大家好我演示一个完整的入校申报流程。首先学生张三登录系统展示填写明天上午9点入校的申请事由是‘实验室做实验’展示表单校验。提交后生成申报编号。接着管理员李老师登录在待审批列表看到这条申请展示审核后通过。最后门卫王师傅用平板电脑扫描张三的申报二维码展示移动端页面登记体温36.5℃上传双码完成入校核验。”重点讲“你的设计亮点”“我设计了‘申报编号’规则方便门卫快速核验。”“做了严格的时间校验必须提前2小时申报避免临时申请。”“双码上传做了文件类型和大小限制防止恶意上传。”“体温异常自动预警需要门卫额外确认。”准备好问答Q如果用户造假怎么办A系统不能100%防止造假但我们可以记录所有操作日志事后可追溯。另外可以和学校统一身份认证系统对接提高可信度。Q数据量大怎么办A申报记录可以按月份分表存储历史数据可以归档。查询时通过索引优化。Q系统安全性如何A所有密码MD5加密存储接口有防重复提交和SQL注入防护文件上传做了安全限制。最后一点真心话入校申报系统看起来简单但要把疫情管理的严谨性和用户体验的便捷性平衡好需要很多细节考虑。关键是把“申报-审批-核验”这个核心流程做顺畅把异常情况考虑周全。需要完整源码、数据库脚本、部署文档的宝子可以在评论区留言。觉得这篇干货有帮助记得点赞收藏祝大家毕设顺利轻松毕业
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

腾讯云服务器优惠湖南seo优化

你是否曾经发现电脑运行速度变慢,系统资源被莫名其妙地占用?很多时候,这都源于微软OneDrive在后台悄无声息地运行。作为Windows 10深度集成的云存储服务,OneDrive往往成为系统性能的潜在影响因素。今天,我将为你介绍一…

张小明 2025/12/22 14:43:14 网站建设

中国网站建设中心龙岗网站建设流程

📝 博客主页:Jax的CSDN主页 目录AI医生的逆袭之路:从“智障”到“神助攻” 一、AI医生的“成长日记”:从背锅侠到救场王 二、当AI遇上“看病难”:那些改变游戏规则的瞬间 三、AI医生的“人格分裂”:既要靠谱…

张小明 2025/12/22 14:42:13 网站建设

专业做网站排名公司电话安徽建设工程信息网查询

文章目录前言1. 安装Docker2. 本地部署HivisionIDPhotos3. 公网远程访问制作照片3.1 内网穿透工具安装3.2 创建远程连接公网地址4. 配置固定公网地址前言 HivisionIDPhotos 是一款 AI 证件照制作工具,能自动抠图、调整尺寸和背景,生成符合各种规格的证件…

张小明 2025/12/22 14:41:12 网站建设

重庆做网站做网站用的主机

前言 本个人理财系统管理员功能有个人中心,用户管理,账单类型管理。用户功能有个人中心,收入账单管理,支出账单管理,理财计划管理,统计分析管理,备忘录管理等。因而具有一定的实用性。 本站是一…

张小明 2025/12/22 14:39:10 网站建设

做网站要注意什么电子商务网站建设作业代码

AI Agent是将大模型与工具、记忆、执行系统结合的智能体,具有自主决策、持续学习、多模态交互、工具集成和多智能体协作五大特征。其技术架构包含感知、决策、执行、记忆和反馈优化六大模块。AI Agent改变了从"告诉机器怎么做"到"告诉机器想要什么&q…

张小明 2025/12/22 14:38:09 网站建设

网站备案后 还是需要再备案吗网站建设企业号助手

破解负载不均难题-多 Agent 系统的复杂度感知调度方案 一、背景与问题引入 随着 多 Agent 系统(Multi-Agent System, MAS) 在智能体协作、自动化运维、智能搜索、LLM Agent 编排等场景中的广泛应用,系统规模迅速扩大,一个现实问题…

张小明 2025/12/22 14:37:09 网站建设