@TOC
springboot600基于SpringBoot的来访管理系统的设计与实现---论文
绪 论
1.1项目研究的背景
随着科学技术发展,计算机已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。人类社会进入了全新的信息化的时代。来访信息管理一直是信息管理的一大难题,用户流动性大,数量多,此时寻找有效便捷的来访管理方法就是当务之急。而日趋成熟的计算机信息管理技术便成为解决这一难题的唯一之选。如今计算机信息管理技术来处理来访管理系统管理早已游刃有余,其实信息管理技术已经渗透到各个行业的信息控制管理当中,且有着举足轻重的地位。而随着现代化社会主义不断进步,普通群众生活水平有了大幅提高,很多方面都在网络上去实现,从而网络也就成为了最直接、即方便又快捷的接入口。
使用来访管理系统相对传统来访管理方式具备很多优点:首先可以大幅提高来访管理系统检索,只需输入相关信息就能在数秒内反馈想要的结果;其次可存储大量的来访信息,同时来访管理系统安全性有更高的保障;相比纸质文档来管理来访信息,来访管理系统更节省空间人力资源。这些优点大大提高管理效率并节省运营成本。因此,必须开发一个来访管理系统开展合理有效的管理方法,这提高了来访管理的效果和特性,增加了用户信息安全性,方便用户及时反馈信息给管理员,增加了用户与管理员之间的互动交流,更能提高用户的体验强度。
本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库[1],而java技术[2], B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤,并主要讲述了系统设计方案的关键点、设计思想。
1.2课题研究现状
现今,越来越多的人乐于选择一项合适的管理方案,但是普通用户往往受到管理经验地限制,这时各类管理系统作为新型产业崛起,大量制度进入人们生活,而无疑是来访最好的管理制度,在这样成功的管理模式背景下,来访信息也越来越多。但是随着来访信息的增多,管理员的管理成为了一个难题。高效便捷地管理成为了转变管理模式,与时代兼容的当务之急。
来访管理系统,为用户随时随地查看来访信息提供了便捷的方法,更重要的是大大的简化了管理员管理来访管理系统的方式方法,更提供了其他想要了解来访管理系统及运作情况以及挑选方便快捷的可靠管道。相比于传统来访管理方法,这样的电子信息管理更为简洁方便,在维护信息反馈和处理意见方面也有得天独厚的优势。
来访管理系统能做到的不仅是大大简化管理员的信息管理工作,在提高管理效率的同时还能缩减开支,更能在数字化的平面网络上将最好的一面展示给用户,而这个系统在带给全新用户信息管理统计和分类的同时,还成为日后制定管理思路的重要数据参考。过程永远比结果重要。毕业设计是大学生活中最为浓墨重彩的一笔,在这个过程中不仅学到更为全面的书本和实践知识,更让我感受到了浓浓的同窗之情及师生情。这个系统成为来访管理系统最不可或缺的内容。尽管目前大部分已经将来访管理系统投入使用,但是人们对于系统要求也变得越来越高,大部分系统已经能完美处理各类信息,但是为了更好地契合管理方针,不同系统有不同的要求,个性化也是管理系统十分重要的一点,所以都希望自己能有一个个性化定制的来访管理系统,但这又涉及到成本控制问题,目前定制一个系统价值不菲,但是如果有这样一个可以根据需求自己制定页面和内容的来访管理系统就可以大大缩减开支,但是凭借目前自身技术恐怕难以实现,不过让系统可二次设计却是有可能实现的。随着规模的不断扩大,用户信息共享也成一种趋势。系统的发展也证明了系统管理在不断发展进步,各种理念也越来越先进,对各方面的要求也变得越来越高,系统完全可以在进入页面时发布各类信息进行推荐交流。
1.3系统总概
作为一个来访管理系统,数据流量是非常大的,因而,系统的制定需要达到方便使用、实际操作灵便的规定[3]。所以,在设计方案来访管理系统时,应完成下列总体目标:
(1)页面应美观大方友善,查找应便捷方便,数据储存应可以信赖;
(2)全方位呈现全部来访信息,方便使用者迅速查询全部信息;
(3)方便用户快速搜索来访信息;
(4)用户可以随意调整自身的基本信息;
(5)完成来访管理作用;
(6)系统使用方便,便于维护;
(7)系统运作平稳、安全可靠。
1.4论文结构
1.绪论:剖析项目可行性,表明研究方向。
2.开发技术:系统关键运用了Java语言、b/s方式和myspl数据库查询,并进行了详细介绍[4]。
3.系统分析:包含系统的总体构造,剖析系统的特性、作用和流程图。
4.系统设计:软件程序功能模块和数据库查询的总体设计。
5.系统总体设计:叙述系统的作用,
6.测试系统。
7.在文章的最终,我个人总结了自身在系统开发和论文撰写全过程中的汇总、感想,包括致谢。
3
2 开发技术介绍
毕业论文为主体是学位论文的关键一部分,要构造认真细致,条理清晰,关键突出,简约顺畅。章节目录互相联络,构成一个总体。
后面内容省去,依据主要内容分配章节目录。每一章的内容都需要另起一页,这可以根据插进节/页标识符来完成。不建议应用好几个回车键。实际编译程序标准见第三章。
2.1 B/S架构
B/S的系统是通过能上网的计算机就可以使用,它最大的优点是不需要安装专门的软件,最先,计算机浏览器向服务器发送要求,随后服务器解决要求并将信息回到给计算机浏览器。不需要再次对数据进行存取与计算数据,只要负责显示数据来降低要求,如果说客户端像个“瘦子”,而服务器会越来越“胖”。与C/S构架对比,B/S构架与C/S架构的较大差别取决于,B/S构架的系统软件以web计算机浏览器为服务平台与消费者实现互动,如下图2-1所显示,而C/S则必须开发专业的运用。
图2-1 B/S结构图
2.2 MySQL数据库
数据库在软件项目中扮演着操作管理数据的角色同时还能够保证数据的独立性、一致性和安全性,并为系统访问数据提供有效方式不仅如此数据库还能大大减少程序员开发程序时间。在日常能够接触实用的一般有两类数据库,一类是以(Oracle,DB2,SQL Server,MySQL )为代表的关系型数据库和以(NoSql、MongeDB)为代表的非关系型数据库,两类数据库各有各的优缺点。其中非关系型数据库又分为网络数据库和层级数据库。-网络数据库是指在计算机网络系统中应用数据库技术然后借助网络技术将存储于数据库中的大量信息及时发布出去;在成熟的数据库技术的帮助下,计算机网络实现了对网络中的各种数据的有效管理,用户与网络中的数据库数据交互也借此得以进行。IMS也是最早研制成功的数据库系统。关系数据结构、关系操作集合、关系完整性约束构成了关系模型。作为数据库另外一种区分方式的存储介质被大家分为磁盘和内存这 两种。例如:关系型数据库就存储在磁盘中,非关系型数据库则存储在内存中。典型的关系型数据库有:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite。小型关系型数据库:Microsoft Access,SQLite;中型关系型数据库:SQL Server,Mysql;大型关系型数据库:Oracle,DB2。
大家常用的其他关系形数据库系统大多是MySQL AB公司开发的,其中MySQL也是由这家开发的,所应用的分布式数据库管理系统是客户机/服务器体系结构得益于此结构,而且用这个系统建造的数据库具有很强的适用性,用C和C++编写的系统让他拥有很强的适用性所以他可以在大部分操作系统上使用并能和php结合。不同的API函数针对不同的语言(C,C++,JAVA等)来处理不同数据;为了更好地支持多CPU多线程通过使用核心线程来实现;提供的存储机制分为事务和非事务存储机制;MySQL采用双重许可,不管是从MySQL AB公司获得正式的商业许可又或是许可条款下以免费软件或开放源码软件的方式使用MySQL软件都是被允许的。
MySQL作为数据库拥有很多优点,其中由于是开放源码,所以使用成本特别低,而它体积小的特点决定了速度快的特性。因此,My Sql具有开放性,多线程支持多种API,可跨数据库连接,国际化,数据库体积巨大等特点。简单的来说 ,MySql是一个开放的、快速的、多线程的、多用户的数据库服务器。
选用MySQL作为数据库的其中一个原因就是支持多线程,支持多线程的特点为利用系统资源提供了便捷并因此大大提高了系统运行速度和效率,而且连接数据库的方式多样包括但不局限于TCP/IP、ODBC和JDBC等途径;但是没有东西是完美无缺的,即便MySQL也如此,虽说它有着众多优点但其功能不够强大,规模也相对较小,无法应对大型数据哭的处理。但是对于本系统来说,选用MySQL作为数据库,其功能性能已绰绰有余,如果要进行二次开发的数据库表结构空间的扩展也是完全可行的。综上所述,MySQL是作为本系统数据库的最优选择。
2.3 MySQL环境配置
本文系统数据信息用的是MySQL,必须组装在特定的档目录下。假如免费下载非安装的MySQL压缩档,只需缓解压力到指定的档目录就可以。随后点一下文档C : \ Program Files \ MySQL \ bin \ winMySQLadmin.exe在其中C\ Program Files \ MySQL是MySQL安装档。键入winMySQLadmin的原始账户密码(留意:这不是MySQL中的账户密码)你不用在意。确定后,右下方的任务栏栏会出现一个红绿灯标志。红灯表明服务项目终止,绿灯表明服务项目是正常的,左击这个图示->winnt->install the service 安装此服务项目,随后点击一下v->winnt->start the service 运行MySQL服务项目。
改动MySQL数据库的root登陆密码。用cmd键键入命令行模式输入如下命令:
cd C:\Program Files\MySQL\bin
MySQLadmin -u root -p password 123
回车出现Enter password:代表着键入初始登陆密码。安装之初,登陆密码为空,立即键入就可以。至此,MySQL中账号root的登陆密码改成123,安装完毕。
2.4 JAVA开发平台
Java是一门跨平台的面向对象的程序设计语言。由于Java技术性具备出色的实用性、精确性、良好的安全系数和服务平台可扩展性,而且Java是开源的,拥有全世界最大的开发者专业社群,所以Java的发展迅速[5-7]。
2.5 SpringBoot框架
随着Java技术发展,为了简化开发而诞生了众多框架。科技是随着人们追求简单且高效的技术的渴望而发展的,在这种情况下,SpringBoot框架应运而生。
SpringBoot是一种轻量级的、非侵入式的Java/JavaEE应用框架。它的出现大幅度的简化了开发步骤。SpringBoot是具有简单高效、轻量级、依赖注入和面向切面编程而深受Java开发程序员的喜爱。现在的众多程序员都使用spring来简化开发。
6
3 系统分析
3.1可行性分析
在开发系统以前,必须对系统开展可行性研究,目地是用有效的方法处理最大的问题。程序流程一旦开发出去满足用户的要求,便会产生许多益处。下面咱们就从技术性、操作性、经济性等领域来挑选这一系统是不是会最后开发。
3.1.1技术可行性
此次系统开发挑选Java语言,这也是一种面向对象编程的语言,Java为开发者提供了丰富的类库,大大减少了使用windows编程的难度,减少开发人员在设计算法上的难度[9-11],作为Java开发 Visual Studio更是一个必不可少的角色,它友好的界面,以及强大的功能,给程序开发人员带来了很多方便,加上环境简单,转移方便,无疑使此系统最佳的选择。所以后台设计选择使用MySQL数据库查询主要运用于创建和维护信息。从未来发展趋势看来,应当具备功能完善,使用方便的优势,后台数据库的要求则是能够建立和维护数据信息的统一性和完整性。
依据上述目标来分析本系统的硬件如下:
Intel(R) Core(TM) i7-7700HQ CPU ;
存储器是 16G;
硬盘是1000G;
操作系统是Window 10;
软件层面,安装了Visul Studio和MySQL数据库开发专用工具。依据以上硬件配置和系统规定,得到本系统的技术水平是有效的。
3.1.2经济可行性
本系统的软件开发只要一台一般的计算机就可以进行开发,其成本费很低。此外作为毕业设计论文,开发花费基本上可以忽略,系统软件的交付使用,可以实现更加快速高效的来访管理,同时还能实现对人力资源和管理资源的有效节约,该来访管理系统设计与实现在经济上完全可行。
3.1.3操作可行性
伴随着科学技术的迅猛发展,计算机早就进到大家的日常生活,大家的办公环境都不像过去那么极端了。规定工作人员在指定地点工作中,有一些工作中可以在家里进行。这促使大家工作效能更高一些。操作的多样化也变的更高一些。因而,管理方法的便利化和数字化是现代社会的大势所趋。各种各样智能系统五花八门,不一样的系统可以满足消费者不一样的要求,既增强了工作效能,又达到了一些特殊的要求。该系统不但页面简洁明了,并且使用了数据可视化页面。客户可以应用鼠标和键盘来改动、删掉、加上等有关信息。由于这一系统的使用比较简单实用,第一次应用系统只要一点时间。因而,该系统在使用上是有效的。
3.2系统性能需求分析
对系统性能进行分析,可对系统反应度、界面简洁清晰度、储存能性、易学性和稳定性进行分析[12-19];
系统反应度:同时上万人在线时反应时间应该在两三秒以内,。
简单明了的页面:系统界面规定简单明了,使用方便,有利于客户实际操作。
储存特性高:来访管理系统的设计方案和完成必须储存很多的信息,因此系统的存储量十分高,因此数据库查询要十分强力,确保信息的可靠平稳储存;
易懂:系统在使用上一定要实用。不用许多繁杂的实际操作,只要简洁的学习培训就可以实际操作。
可靠性:来访管理系统的设计方案、完成和运行平稳,页面清楚,字体样式清楚。
3.3系统功能分析
考虑到实际生活中在来访管理方面的需要以及对该系统认真的分析,将系统权限按进行划分。
管理员登入使用本系统涉到的功能主要有个人中心、访客管理、访客预约管理、访客来访管理等功能。管理员用例如图3-1所示。
图3-1 管理员用例图
访客登入使用本系统涉到的功能主要有个人中心、访客预约管理、访客来访管理等功能。访客用例如图3-2所示。
图3-2 访客用例图
3.4系统流程的分析
由于不同的系统实际使用用户角色的不同,他们的业务分析也会变得有所不一样,为了论述方便接下来都将以管理员用户功能权限下的系统业务流程来分析,如下图所展示:
3.4.1 用户管理的流程
图3-3用户管理流程
3.4.2 个人中心管理流程
个人中心管理流程如图3-4所示:
图3-4 个人中心管理流程
3.4.3 登录流程
登录流程如图3-5所示:
图3-5 登录流程
4系统设计
4.1 软件功能模块设计
系统整功能如下图4-1所示:
图 4-1 系统总体功能模块图
4.2 数据库设计
4.2.1 概念模型设计
概念模型是对现实中的问题出现的事物的进行描述,ER图是由实体线以及关联构成的图,E-R图可以明确地叙述系统中涵盖的实体线相互关系。
访客预约实体图如图4-2所示:
图4-2访客预约实体图
访客来访实体图如图4-3所示:
图4-3访客来访实体图
访客实体图如图4-4所示:
图4-4访客实体图
4.2.2 物理模型设计
根据上诉的逻辑模型设计,下面给出物理模型的设计,如下所示:
表4-1:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表4-2:访客预约
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yuyuebianhao | varchar | 200 | 预约编号 | ||
biaoti | varchar | 200 | 标题 | ||
fangkezhanghao | varchar | 200 | 访客账号 | ||
fangkexingming | varchar | 200 | 访客姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
fangrenxingming | varchar | 200 | 访人姓名 | ||
fangrenshoujihao | varchar | 200 | 访人手机号 | ||
fangwenriqi | date | 访问日期 | |||
fangwenzhuangtai | varchar | 200 | 访问状态 | ||
yuyueshijian | date | 预约时间 | |||
fangwenshiyin | longtext | 4294967295 | 访问事因 |
表4-3:访客来访
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yuyuebianhao | varchar | 200 | 预约编号 | ||
biaoti | varchar | 200 | 标题 | ||
fangkezhanghao | varchar | 200 | 访客账号 | ||
fangkexingming | varchar | 200 | 访客姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
fangrenxingming | varchar | 200 | 访人姓名 | ||
fangrenshoujihao | varchar | 200 | 访人手机号 | ||
laifangshijian | date | 来访时间 | |||
beizhu | longtext | 4294967295 | 备注 |
表4-4:访客
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
fangkezhanghao | varchar | 200 | 访客账号 | ||
mima | varchar | 200 | 密码 | ||
fangkexingming | varchar | 200 | 访客姓名 | ||
xingbie | varchar | 200 | 性别 | ||
nianling | int | 年龄 | |||
dianziyoujian | varchar | 200 | 电子邮件 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
touxiang | longtext | 4294967295 | 头像 |
表4-5:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表4-6:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
5系统详细设计
5.1系统登录注册实现
系统登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-1所示。
图5-1 系统登录界面
系统注册:在系统注册页面的输入栏中输入访客注册信息进行注册操作,系统注册页面如图5-2所示。
图5-2系统注册页面界面
5.2管理员模块实现
管理员进入主页面,主要功能包括对个人中心、访客管理、访客预约管理、访客来访管理等进行操作。管理员主页面如图5-3所示:
图5-3 管理员主界面
管理员点击访客管理。在访客页面输入访客账号、访客姓名进行查询、新增或删除访客列表,并根据需要对访客详情信息进行详情、修改或删除操作;如图5-4所示:
图5-4访客管理界面
管理员点击访客预约管理。在访客预约页面输入标题、访客姓名进行查询、删除或访问统计访客预约列表,并根据需要对访客预约详情信息进行详情、修改或删除操作;如图5-5所示:
图5-5访客预约管理界面
管理员点击访客来访管理。在访客来访页面输入标题、访客姓名、访人姓名进行查询或删除访客来访列表,并根据需要对访客来访详情信息进行详情、修改或删除操作;如图5-6所示:
图5-6访客来访管理界面
5.3访客模块实现
访客进入系统可以对个人中心、访客预约管理、访客来访管理等功能进行操作。访客主页面如图5-7所示:
图5-7 访客主界面
访客点击访客预约管理。在访客预约页面输入标题、访客姓名进行查询、新增或删除访客预约列表,并根据需要对访客预约详情信息进行详情、来访、修改或删除操作;如图5-8所示:
图5-8访客预约管理界面
访客点击访客来访管理。在访客来访页面输入标题、访客姓名、访人姓名进行查询或删除访客来访列表,并根据需要对访客来访详情信息进行详情、修改或删除操作;如图5-9所示:
图5-9访客来访管理界面
FangkeyuyueServiceImpl.java
package com.service.impl;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;
import com.dao.FangkeyuyueDao;
import com.entity.FangkeyuyueEntity;
import com.service.FangkeyuyueService;
import com.entity.vo.FangkeyuyueVO;
import com.entity.view.FangkeyuyueView;
@Service("fangkeyuyueService")
public class FangkeyuyueServiceImpl extends ServiceImpl<FangkeyuyueDao, FangkeyuyueEntity> implements FangkeyuyueService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<FangkeyuyueEntity> page = this.selectPage(
new Query<FangkeyuyueEntity>(params).getPage(),
new EntityWrapper<FangkeyuyueEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<FangkeyuyueEntity> wrapper) {
Page<FangkeyuyueView> page =new Query<FangkeyuyueView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<FangkeyuyueVO> selectListVO(Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public FangkeyuyueVO selectVO(Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<FangkeyuyueView> selectListView(Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public FangkeyuyueView selectView(Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
@Override
public List<Map<String, Object>> selectValue(Map<String, Object> params, Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectValue(params, wrapper);
}
@Override
public List<Map<String, Object>> selectTimeStatValue(Map<String, Object> params, Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectTimeStatValue(params, wrapper);
}
@Override
public List<Map<String, Object>> selectGroup(Map<String, Object> params, Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.selectGroup(params, wrapper);
}
@Override
public List<Map<String, Object>> biaotifangwenzhuangtaiTypeStat(Map<String, Object> params, Wrapper<FangkeyuyueEntity> wrapper) {
return baseMapper.biaotifangwenzhuangtaiTypeStat(params, wrapper);
}
}
MybatisPlusConfig.java
package com.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
/**
* mybatis-plus配置
*/
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
FangkelaifangController.java
package com.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.FangkelaifangEntity;
import com.entity.view.FangkelaifangView;
import com.service.FangkelaifangService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
/**
* 访客来访
* 后端接口
* @author
* @email
* @date 2023-02-14 10:28:01
*/
@RestController
@RequestMapping("/fangkelaifang")
public class FangkelaifangController {
@Autowired
private FangkelaifangService fangkelaifangService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,FangkelaifangEntity fangkelaifang,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("fangke")) {
fangkelaifang.setFangkezhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<FangkelaifangEntity> ew = new EntityWrapper<FangkelaifangEntity>();
PageUtils page = fangkelaifangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangkelaifang), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,FangkelaifangEntity fangkelaifang,
HttpServletRequest request){
EntityWrapper<FangkelaifangEntity> ew = new EntityWrapper<FangkelaifangEntity>();
PageUtils page = fangkelaifangService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangkelaifang), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( FangkelaifangEntity fangkelaifang){
EntityWrapper<FangkelaifangEntity> ew = new EntityWrapper<FangkelaifangEntity>();
ew.allEq(MPUtil.allEQMapPre( fangkelaifang, "fangkelaifang"));
return R.ok().put("data", fangkelaifangService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(FangkelaifangEntity fangkelaifang){
EntityWrapper< FangkelaifangEntity> ew = new EntityWrapper< FangkelaifangEntity>();
ew.allEq(MPUtil.allEQMapPre( fangkelaifang, "fangkelaifang"));
FangkelaifangView fangkelaifangView = fangkelaifangService.selectView(ew);
return R.ok("查询访客来访成功").put("data", fangkelaifangView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
FangkelaifangEntity fangkelaifang = fangkelaifangService.selectById(id);
return R.ok().put("data", fangkelaifang);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
FangkelaifangEntity fangkelaifang = fangkelaifangService.selectById(id);
return R.ok().put("data", fangkelaifang);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody FangkelaifangEntity fangkelaifang, HttpServletRequest request){
fangkelaifang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fangkelaifang);
fangkelaifangService.insert(fangkelaifang);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody FangkelaifangEntity fangkelaifang, HttpServletRequest request){
fangkelaifang.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fangkelaifang);
fangkelaifangService.insert(fangkelaifang);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody FangkelaifangEntity fangkelaifang, HttpServletRequest request){
//ValidatorUtils.validateEntity(fangkelaifang);
fangkelaifangService.updateById(fangkelaifang);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
fangkelaifangService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<FangkelaifangEntity> wrapper = new EntityWrapper<FangkelaifangEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("fangke")) {
wrapper.eq("fangkezhanghao", (String)request.getSession().getAttribute("username"));
}
int count = fangkelaifangService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
canvas-bg-5.js
export default function canvasBg() {
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d')
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
ctx.lineWidth = .3;
ctx.strokeStyle = (new Color(150)).style;
var mousePosition = {
x: 30 * canvas.width / 100,
y: 30 * canvas.height / 100
};
var dots = {
nb: 750,
distance: 50,
d_radius: 100,
array: []
};
function colorValue(min) {
return Math.floor(Math.random() * 255 + min);
}
function createColorStyle(r, g, b) {
return 'rgba(' + r + ',' + g + ',' + b + ', 0.8)';
}
function mixComponents(comp1, weight1, comp2, weight2) {
return (comp1 * weight1 + comp2 * weight2) / (weight1 + weight2);
}
function averageColorStyles(dot1, dot2) {
var color1 = dot1.color,
color2 = dot2.color;
var r = mixComponents(color1.r, dot1.radius, color2.r, dot2.radius),
g = mixComponents(color1.g, dot1.radius, color2.g, dot2.radius),
b = mixComponents(color1.b, dot1.radius, color2.b, dot2.radius);
return createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b));
}
function Color(min) {
min = min || 0;
this.r = colorValue(min);
this.g = colorValue(min);
this.b = colorValue(min);
this.style = createColorStyle(this.r, this.g, this.b);
}
function Dot() {
this.x = Math.random() * canvas.width;
this.y = Math.random() * canvas.height;
this.vx = -.5 + Math.random();
this.vy = -.5 + Math.random();
this.radius = Math.random() * 2;
this.color = new Color();
// console.log(this);
}
Dot.prototype = {
draw: function() {
ctx.beginPath();
ctx.fillStyle = this.color.style;
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
ctx.fill();
}
};
function createDots() {
for (i = 0; i < dots.nb; i++) {
dots.array.push(new Dot());
}
}
function moveDots() {
for (i = 0; i < dots.nb; i++) {
var dot = dots.array[i];
if (dot.y < 0 || dot.y > canvas.height) {
dot.vx = dot.vx;
dot.vy = -dot.vy;
} else if (dot.x < 0 || dot.x > canvas.width) {
dot.vx = -dot.vx;
dot.vy = dot.vy;
}
dot.x += dot.vx;
dot.y += dot.vy;
}
}
function connectDots() {
for (i = 0; i < dots.nb; i++) {
for (j = 0; j < dots.nb; j++) {
i_dot = dots.array[i];
j_dot = dots.array[j];
if ((i_dot.x - j_dot.x) < dots.distance && (i_dot.y - j_dot.y) < dots.distance && (i_dot.x -
j_dot.x) > -dots.distance && (i_dot.y - j_dot.y) > -dots.distance) {
if ((i_dot.x - mousePosition.x) < dots.d_radius && (i_dot.y - mousePosition.y) < dots
.d_radius && (i_dot.x - mousePosition.x) > -dots.d_radius && (i_dot.y - mousePosition
.y) > -dots.d_radius) {
ctx.beginPath();
ctx.strokeStyle = averageColorStyles(i_dot, j_dot);
ctx.moveTo(i_dot.x, i_dot.y);
ctx.lineTo(j_dot.x, j_dot.y);
ctx.stroke();
ctx.closePath();
}
}
}
}
}
function drawDots() {
for (i = 0; i < dots.nb; i++) {
var dot = dots.array[i];
dot.draw();
}
}
function animateDots() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
moveDots();
connectDots();
drawDots();
requestAnimationFrame(animateDots);
}
canvas.addEventListener('mousemove', function(e) {
mousePosition.x = e.pageX;
mousePosition.y = e.pageY;
})
// canvas.on('mousemove', function(e) {
// mousePosition.x = e.pageX;
// mousePosition.y = e.pageY;
// });
canvas.addEventListener('mouseleave', function(e) {
mousePosition.x = canvas.width / 2;
mousePosition.y = canvas.height / 2;
})
// canvas.on('mouseleave', function(e) {
// mousePosition.x = canvas.width / 2;
// mousePosition.y = canvas.height / 2;
// });
createDots();
requestAnimationFrame(animateDots);
}