基于SpringBoot的来访管理系统的设计与实现-

news2024/11/28 8:34:45

@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则必须开发专业的运用。

2009318052962238

图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表

字段名称类型长度字段说明主键默认值
idbigint主键主键
useridbigint用户id
usernamevarchar100用户名
tablenamevarchar100表名
rolevarchar100角色
tokenvarchar200密码
addtimetimestamp新增时间CURRENT_TIMESTAMP
expiratedtimetimestamp过期时间CURRENT_TIMESTAMP

表4-2:访客预约

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yuyuebianhaovarchar200预约编号
biaotivarchar200标题
fangkezhanghaovarchar200访客账号
fangkexingmingvarchar200访客姓名
lianxifangshivarchar200联系方式
fangrenxingmingvarchar200访人姓名
fangrenshoujihaovarchar200访人手机号
fangwenriqidate访问日期
fangwenzhuangtaivarchar200访问状态
yuyueshijiandate预约时间
fangwenshiyinlongtext4294967295访问事因

表4-3:访客来访

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yuyuebianhaovarchar200预约编号
biaotivarchar200标题
fangkezhanghaovarchar200访客账号
fangkexingmingvarchar200访客姓名
lianxifangshivarchar200联系方式
fangrenxingmingvarchar200访人姓名
fangrenshoujihaovarchar200访人手机号
laifangshijiandate来访时间
beizhulongtext4294967295备注

表4-4:访客

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
fangkezhanghaovarchar200访客账号
mimavarchar200密码
fangkexingmingvarchar200访客姓名
xingbievarchar200性别
nianlingint年龄
dianziyoujianvarchar200电子邮件
lianxifangshivarchar200联系方式
touxianglongtext4294967295头像

表4-5:配置文件

字段名称类型长度字段说明主键默认值
idbigint主键主键
namevarchar100配置参数名称
valuevarchar100配置参数值

表4-6:用户表

字段名称类型长度字段说明主键默认值
idbigint主键主键
usernamevarchar100用户名
passwordvarchar100密码
rolevarchar100角色管理员
addtimetimestamp新增时间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);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android类加载机制简介

一、前言 随着 Android 技术的不断发展&#xff0c;对其内部机制的探索也日益深入。类加载机制作为 Android 运行时环境的核心组成部分之一&#xff0c;影响着应用的性能、安全性以及可扩展性。通过对 Android 类加载机制的研究&#xff0c;开发者可以更好地优化代码结构、提高…

requests请求库入门使用

requests 库是一个功能强大且易于使用的 HTTP 请求库&#xff0c;适用于各种网络请求任务。它简化了 HTTP 请求的发送过程&#xff0c;并提供了丰富的功能来处理各种网络请求和响应。 1.安装 首先&#xff0c;你需要安装 requests 库。如果你还没有安装&#xff0c;可以使用 …

网优学习干货:2.6G仿真操作(1)

2.6G工程建立——整体仿真过程 针对覆盖仿真、速率仿真及蒙特卡洛仿真的说明 覆盖仿真&#xff1a;覆盖仿真主要用于评估网络覆盖性能。基于MassiveMIMO天线、射线传模或经验传模进行覆盖预测&#xff0c;计算链路损耗后&#xff0c;基于栅格分析估算小区覆盖预测的各项指标&am…

前端不同项目使用不同的node版本(Volta管理切换)

前端不同项目使用不同的node版本(Volta管理切换) 使用volta自动切换前端项目的node版本&#xff0c; 每个不同的前端项目&#xff0c;可以使用不同的node版本。Volta这个工具&#xff0c;它允许用户方便地安装、切换和管理不同版本的Node.js&#xff0c;避免了为每个项目手动配…

QT6聊天室项目 核心类与主窗口设计逻辑分析

核心类 核心类设计逻辑 数据结构设计&#xff08;data.h&#xff09; 用户信息 用户ID用户网名用户个人签名用户手机号码用户头像聊天会话信息 会话编号会话名称&#xff08;单聊则是对方网名&#xff0c;群聊则是群名&#xff09;最新消息会话图标&#xff08;单聊对方头像&a…

sortable中el-table拖拽及点击箭头上下移动row

效果 安装 npm install sortablejs --save 引入 import Sortable from "sortablejs"; <el-table:data"tableBody"borderref"tableRef":stripe"true":key"tableKey"><el-table-column type"index" la…

driver.find_element 找不到元素的大坑

前端使用element框架。 登录进去使用开发人员工具能看到元素&#xff0c;复制xpath使用find_element死活找不到。 其中一次复制的xpath 注意红色部分: #先点击一下输入框 driver.find_element(By.XPATH,/html/body/div[1]/section/section/section/main/div/div[1]/div/form/…

迎接 Apple Intelligence.一:首次啟用

年 Apple 各平台的重點新功能&#xff0c;相信非 Apple Intelligence 莫屬。Apple 將會將人工智能整合到 iOS 18、iPadOS 18 和 macOS Squoia。在機械學習和大型語言模型加持下&#xff0c;預計 Siri 的對答會更加自然流暢&#xff0c;而且能直接提供答案&#xff0c;而不像過去…

作业8/21

client cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), socket(new QTcpSocket(this)) {ui->setupUi(this); // 设置 UI 界面// 控件初始状态设置为禁用&#xff0c;防止未连接…

储能系统---德业、禾迈、昱能产品布局及对比

一、公司介绍 德业、昱能、禾迈作为微逆行业的佼佼者&#xff0c;同样代表了中国制造行业的三种技术形态。 德业&#xff1a;代表传统制造行业&#xff0c;转型电力电子领域的代表。 昱能&#xff1a;代表海归人员回国创业&#xff0c;致力于技术本土化的代表。 禾迈&#…

socket 验证字符串是否是有效ip地址

import socketdef is_valid_ip(ip):try:# 尝试将字符串解析为IP地址socket.inet_aton(ip)return Trueexcept socket.error:return False# 测试 print(is_valid_ip("192.168.1.1")) # True print(is_valid_ip("256.256.256.256")) # False print(is_valid…

计算机存储原理——基础

文章目录 存储介质简介1. 光介质存储2. 磁介质存储3. flash(闪存) 硬盘存储原理磁盘组件磁盘是如何存储文件的磁盘的性能 存储接口与存储协议接口类型SCSISCSI的寻址方式windows下查看SCSI寻址 接口与总线与协议的对应关系cpu是如何控制存储的 文件系统常见的文件系统文件系统中…

《数据结构》顺序表+算法代码+动画演示-C语言版

目录 顺序表概念 顺序表初始化 顺序表销毁 顺序表尾插 顺序表尾删 顺序表头删 顺序表头插 顺序表pos位置插入 顺序表pos位置删除 顺序表全部代码如下&#xff1a; 顺序表概念 顺序表是用一段 物理地址连续 的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下…

「OC」CAShapeLayer和UIBezierPath —— 抽屉视图之中圆角cell的实现

「OC」CAShapeLayer和UIBezierPath —— 抽屉视图之中圆角cell的实现 文章目录 「OC」CAShapeLayer和UIBezierPath —— 抽屉视图之中圆角cell的实现前言CALayer的子类CAShapeLayerpath 贝塞尔曲线应用实践参考资料 前言 上次我们学习了CALayer的相关知识 &#xff0c;但好像忘…

2024计算机软考报名流程(电脑报名)

1.24年下半年软考报名时间&#xff0c;各省报名时间不一样&#xff0c; 报名时间大概集中在&#xff1a;24年8月19日&#xff5e;24年9月15日&#xff1b; 报名网站&#xff1a;中国计算机技术职业资格网&#xff1b; 广东&#xff1a;2024年8月21日9:00至29日17:00 安徽&#…

全面调研:19类AI Agent框架的对比与分析

代理&#xff08;Agent&#xff09;指能自主感知环境并采取行动实现目标的智能体&#xff0c;即AI作为一个人或一个组织的代表&#xff0c;进行某种特定行为和交易&#xff0c;降低一个人或组织的工作复杂程度&#xff0c;减少工作量和沟通成本。 背景 目前&#xff0c;我们在…

监听页面滚动到某个元素 设置入场动画

mounted() {this.eventScroll()}, eventScroll() {// 选择你想要监听的元素const targetLogo document.getElementById(logoanimation);// 创建并配置IntersectionObserverconst observer new IntersectionObserver((entries) > {entries.forEach(entry > {if (entry.…

回收站的文件删除了怎么恢复?4个技巧轻松找回文件!

在日常使用电脑的过程中&#xff0c;回收站作为我们删除文件的临时存放地&#xff0c;扮演着重要的角色。然而&#xff0c;有时我们可能会不小心从回收站中删除了重要文件&#xff0c;导致数据丢失。面对这种情况&#xff0c;许多用户会感到焦虑和无助。但别担心&#xff0c;本…

基于Spark实现大数据量的Node2Vec

基于Spark实现大数据量的Node2Vec Node2Vec 是一种基于图的学习算法&#xff0c;用于生成图中节点的低维度、高质量的向量表示。这种算法基于 word2vec 模型&#xff0c;将自然语言处理中的词嵌入技术应用于图结构的节点&#xff0c;以捕捉节点之间的复杂关系。Node2Vec 特别强…

glibc 2.24 下 IO_FILE 的利用

文章目录 glibc 2.24 下 IO_FILE 的利用介绍&#xff1a;新的利用技术fileno 与缓冲区的相关利用实例&#xff1a;1. _IO_str_jumps -> overflow实例&#xff1a; 2. _IO_str_jumps -> finish实例: 最后拓展一下上一篇博客house of orange题目的做法: glibc 2.24 下 IO_F…