基于springboot的招聘系统的设计与实现

news2024/11/28 22:45:41

@TOC

springboot614基于springboot的招聘系统的设计与实现--论文

研究背景

近年来,由于计算机技术和互联网技术的快速发展,使得所有企事业单位内部都是数字化、信息化、无纸化的发展趋势,随着趋势的发展,各种决策系统、辅助系统也应运而生,其中招聘管理系统就是其中的重要组成部分。

招聘工作在环境卫生管理中不可或缺的一部分,然而多年以来工作者大都习惯使用传统方法,即人工来完成招聘的管理,但是这种方法存在着工作效率低以及保密性差的问题,同时还会生成大量的文本和数据,在检索数据时极大不便。随着科技发展进步,我们已进入了信息化社会,仅仅依靠传统的表格管理方式已不能适应时代的要求。因此使用计算机来进行接手传统方式的招聘管理已经势在必行。

通过计算机技术来实现的招聘系统拥有对信息的快速检索、保存了大量的招聘管理信息、信息系统保存的稳定性高和维护成本低等优点,对招聘管理的工作效率也能提高。如今,传统的人工管理方法、文件和图表打印等信息传输方法已经不能满足当下的发展需求,计算机科学与互联网技术的蓬勃发展,颠覆了人们的生活以及思维方式。招聘系统的出现,利用信息技术将招聘管理融于办公平台中,成为提高管理水平的有利手段,将会成为未来招聘管理的新模式。

1.2 课题研究意义

在当下,办公自动化以一种迅速并不可阻挡的速度在慢慢遍布到社会的每一个角落中,而招聘系统正是办公自动化的一个小小分支,解决了传统招聘管理中繁杂且重复的操作,提高了工作的效率。

招聘系统对于管理人员进行管理来说是非常重要的,应该做到让管理人员进行快捷的信息查询以及对信息的处理功能。然而,以往并没有使用电子化管理来进行招聘工作的意识,还是使用传统的人工管理方法。如今,伴随着计算机科学的不断发展,互联网科技的日渐成熟,计算机所带来的种种优势已经逐渐为人们所认识,它已经应用在社会中的各个领域中并且越来越重要,利用计算机将招聘信息进行电子化、系统化的管理能将招聘管理的效率提上一个台阶。所以,开发一套基于springboot的招聘系统,将信息进行电子化、系统化的管理,代替了传统的人工管理方式,提升了工作效率。

无纸化办公,节省了时间,减少了纸张的浪费同时节约了成本。

加快了信息传输的过程,使招聘管理更规范和科学。

利用计算机处理速度快、信息存储量大的特点,将管理工作信息化,可以积累和管理大量的数据。

对数据进行有效并且集中的管理,实现了用户信息的共享,使管理工作可以从传统的人工管理中解放出来,提升了工作的效率,使其有更多的时间去完成更多的工作,来提高自身的业务素质。

1.3 课题研究内容

本系统结合现今主流管理系统的功能模块以及设计方式进行分析,使用Java语言和Springboot框架进行开发设计,具体研究内容如下:

  1. 管理员主要对个人中心、企业管理、用户管理、岗位类型管理、招聘信息管理、应聘记录管理、留言反馈、系统管理等功能进行管理。
  2. 企业主要对个人中心、岗位类型管理、招聘信息管理、应聘记录管理等功能进行管理。
  3. 用户进入系统可以实现对首页、企业、招聘信息、招聘新闻、留言反馈、后台管理、个人中心等进行失踪,还可以进入后台对应聘记录进行管理。

2 系统开发技术

招聘系统采用B/S(Browser/Server)架构和MVC模型进行设计开发。在B/S架构下,用户在浏览器端进行使用,主要工作通过服务器端进行实现,用户通过网站进行访问大大节约了成本。本系统使用Java等语言同时运用了Springboot框架进行开发,使用MySQL进行数据存储。

2.1 Java技术

Java是一种面向对象的静态式编程语言。Java编程语言具有多线程和对象定向的特点。其特点是根据方案的属性将方案分为几个不同的模块,这些模块是封闭的和多样化的,在申请过程中具有很强的独立性。Java语言在计算机软件开发过程中的运用可以达到交互操作的目的,通过各种形式的交换,可以有效地处理所需的数据,从而确保计算机软件开发的可控性和可见性。开发Java语言时,保留了网络接口,Java保留的缺省网络接口可以与web应用程序编程所依赖的类别库相匹配。为了使Java开发的应用程序更加稳定和强健,Java会自动收集程序中的垃圾,并处理程序中存在的异常。Java语言是日常开发过程中广泛使用的通用基本语言。其中Java语言课程库、句子、语法规则和关键字经常用于计算机软件的开发和编程。

面向对象编程是Java语言最显着的特点。它具有原始接口和补充接口以及继承,不仅可以实现相同类型的单个继承,而且还支持接口之间的多个继承,从而实现类、接口和接口之间以及类和接口之间的有效通信。Java的面向对象特性主要包括三个方面:继承、多态性和封装。封装是Java的核心,可以封装所有数据操作。多态性是指由面向对象行为派生的相关行为。继承作为特殊编程模式有两种类型:父类和子类,这两种类型的属性具有相同的功能和特性。对于父类的属性特性,子类可以实现继承和优化。

2.2 Springboot框架

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。

2.3 MySQL数据库

MySql做为瑞典公司MySql AB开发的中小型开源数据库智能管理系统,具备配备低、低成本、运作速度更快的优势。与此同时,因为社区版的开源系统性,变成了许多网址减少开发成本费的最佳选择。被甲骨文回收后,MySQL也发布了商业版。另外Mysql具有以下特性:

(1)使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。

(2)为C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等多种编程语言提供了API。

(3)采用多线程并行的方法提高了CPU的利用率。

(4)改善算法,有效地提高查询速度。

2.4 B/S结构

B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server同数据库进行数据交互。

2.5 Tomcat服务器

Tomcat服务器属于轻量级应用服务器,在访问用户数量不是很大的中小型应用中经常被使用。Tomcat服务器主要由三个核心组件Web容器、servlet容器、JSP容器组成。其中,Web容器主要用于完成Web服务器的功能,servlet容器主要用于处理servlet代码,JSP容器主要用于将JSP动态网页翻译成servlet代码。Tomcat作为Web服务器和APP容器,其核心功能主要包括负责接受和反馈外部请求的连接器Connector和负责处理请求的容器Container。二者相辅相成,共同构成了基本的Web服务。Tomcat支持管理多个服务。Tomcat因其技术先进、性能也较为稳定,最重要的是因为其价格免费,故而收到了大量Java爱好者的偏爱,成为比较流行的Web应用服务器。

3 系统需求分析

需求分析在系统开发中有着十分重要的作用。软件项目凭借软件工程的思想和步骤可以大大的提高开发效率,缩短软件开发周期,保证了软件项目的质量。需求分析作为软件工程方法中的一步是至关重要的。软件需求工程是一门分析并记录软件需求的学科。需求分析简单的来说就是用户需要什么,系统需要什么,对此进行问题的列举,等级的排列,需要缜密的思分析和大量的调研。

2.1 可行性分析

根据招聘系统的功能,通过对经济可行性、技术可行性和法律可行性分析进行全面的分析,提供准确的可行性依据。以下是本系统的可行性分析:

  1. 经济可行性

就是分析在现有经济情况下能否完成本招聘系统的开发。下面对本系统开发、运行、维护的相关费用评估,以及投入到实际运用中完成招聘管理可能费用进行估算。网络资源丰富,本招聘系统只需使用任选一开源服务器即可,此方面无需投入费用。开发阶段,由于本招聘系统不属于大型系统,常规的电脑就可完成开发,不用购置相关硬件设备。软件方面,本招聘系统只需使用网上免费下载的软件即可完成开发,这些软件在使用时简单易懂,无需培训,因此在开发方面也无需投入费用。由于本招聘系统不属于大型系统,运行时候电费可以忽略不记。招聘系统作为自己毕设,由本人开发即可完成,无需人力费用。综上,整个系统开发花费很少,所以本招聘系统在经济上可行。

  1. 技术可行性

本系统的开发使用java作为系统开发的开发语言,开发工具选择 Eclipse,而 B/S架构决定了本系统的兼容性和多用户可操作性,此外选择MySql作为数据库不仅提高了数据安全性更保障了数据的可操作性。

  1. 法律可行性分析

法律可行性分析,即分析本招聘系统是否与各类法律相悖。本招聘系统使用市面开源免费软件开发,且作为个人毕设,无商用,均为本人自主开发,并且页面设计合理,发布的信息要求符合常规。整个系统无抵触法律法规的问题。因此在法律上,本招聘系统可行。

3.2 功能需求分析

招聘系统综合网络空间开发设计要求。目的是将招聘通过网络平台将传统管理方式转换为在网上管理,完成招聘的方便快捷、安全性高障,目标明确。招聘系统可以将功能划分为管理员的使用功能、企业使用的功能和用户使用的功能。

(1)管理员的功能是最高的,可以对系统所在功能进行查看,修改和删除,包括企业和用户功能。管理员用例如下:

图3-1管理员用例图

(2)企业关键功能包含个人中心、岗位类型管理、招聘信息管理、应聘记录管理等功能进行详细操作。企业用例如下:

图3-2 企业用例图

(2)用户登录进入系统可以实现对首页、企业、招聘信息、招聘新闻、留言反馈、后台管理、个人中心等进行详细操作。用户用例如下:

图3-3 用户用例图

3.3 系统流程分析

3.3.1系统开发流程图:

图3-4 系统开发流程图

3.3.2管理员模块总体流程图:

图3-5 管理员模块总体流程图

3.3.3招聘管理流程图:

图3-6 招聘管理流程图

4 系统设计

4.1 功能模块设计

招聘系统按照权限的类型进行划分,分为管理员、企业和用户共三个模块。系统实现首页、企业、招聘信息、招聘新闻、留言反馈、后台管理、个人中心等功能进行操作,增强了使用者的操作体验。管理员模块主要针对整个系统的管理进行设计,提高了管理的效率和标准。系统的总体模块设计如下图所示:

图4-1 系统总体模块设计

4.2 系统数据库设计

4.2.1 数据库系统

本系统采用MySQL来进行数据库的管理。MySQL数据库具有体积小、速度快、成本低等优点。具备同时处理数千万条记录,实现大型数据库的高并发读写和高效读写需求错误!未找到引用源。。

4.2.2 数据库概念设计

概念模型用于对信息世界建模,并与指定的数据库管理系统分离。它有助于将真实世界的事物抽象为适合于数据库管理系统的数据库模型。人们倾向于将现实世界抽象为信息世界,再把信息世界变成机器世界。也就是说,将现实世界的目标抽象成独立于专用计算机软件和专用数据库管理系统的信息结构的数据模型,然后将物理模型转化为适合电子计算机的数据库管理系统。事实上,数据模型是从真实世界到机器世界的中间层。

信息世界的基本要素包括实体和关联。现实存在且彼此可区别的事物称为实体。实体可以是实际的人、事或物,还可以是抽象化的概念或联络。以下是对部分主要的关键实体如下:

企业实体属性如图4-2所示。

图4-2企业实体属性图

招聘信息实体属性如图4-3所示。

图4-3招聘信息实体属性图

用户实体属性如图4-4所示。

图4-4用户实体属性图

招聘信息实体属性如图4-5所示。

图4-5招聘信息实体属性图

4.2.3 数据表设计

本设计根据数据表管理系统的具体流程进行管理,方便用户对数据的添加、删除、修改和查询等操作。

4.2.4 数据表的建立

系统采用Navicat Premium对数据库进行操作,数据库管理操作简单,数据处理能力强。数据表建立如下:

表4-1:应聘记录

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
gangweimingchengvarchar200岗位名称
bangonghuanjinglongtext4294967295办公环境
xinzidaiyuvarchar200薪资待遇
gongzuoshijianvarchar200工作时间
qiyebianhaovarchar200企业编号
qiyemingchengvarchar200企业名称
jianlitoudilongtext4294967295简历投递
yingpinriqidate应聘日期
yingpinneironglongtext4294967295应聘内容
yonghumingvarchar200用户名
xingmingvarchar200姓名
shoujivarchar200手机
shenfenzhengvarchar200身份证
crossuseridbigint跨表用户id
crossrefidbigint跨表主键id
sfshvarchar200是否审核待审核
shhflongtext4294967295审核回复

表4-2:用户表

字段名称类型长度字段说明主键默认值
idbigint主键主键
usernamevarchar100用户名
passwordvarchar100密码
rolevarchar100角色管理员
addtimetimestamp新增时间CURRENT_TIMESTAMP

表4-3:token表

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

表4-4:收藏表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
useridbigint用户id
refidbigint商品id
tablenamevarchar200表名
namevarchar200名称
picturelongtext4294967295图片
typevarchar200类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)1
inteltypevarchar200推荐类型
remarkvarchar200备注

表4-5:企业

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
qiyebianhaovarchar200企业编号
mimavarchar200密码
qiyemingchengvarchar200企业名称
qiyedizhivarchar200企业地址
lianxirenvarchar200联系人
lianxifangshivarchar200联系方式
qiyetupianlongtext4294967295企业图片

表4-6:招聘新闻

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
titlevarchar200标题
introductionlongtext4294967295简介
picturelongtext4294967295图片
contentlongtext4294967295内容

表4-7:留言反馈

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
useridbigint留言人id
usernamevarchar200用户名
avatarurllongtext4294967295头像
contentlongtext4294967295留言内容
cpicturelongtext4294967295留言图片
replylongtext4294967295回复内容
rpicturelongtext4294967295回复图片

表4-8:岗位类型

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
gangweileixingvarchar200岗位类型

表4-9:配置文件

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

表4-10:招聘信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
gangweimingchengvarchar200岗位名称
gangweileixingvarchar200岗位类型
gangweiyaoqiuvarchar200岗位要求
xueliyaoqiuvarchar200学历要求
bangonghuanjinglongtext4294967295办公环境
gangweixingzhivarchar200岗位性质
xinzidaiyuvarchar200薪资待遇
gongzuojingyanvarchar200工作经验
gongzuoshijianvarchar200工作时间
jiuyechengshivarchar200就业城市
shangbandidianvarchar200上班地点
qiyebianhaovarchar200企业编号
qiyemingchengvarchar200企业名称
lianxirenvarchar200联系人
lianxifangshivarchar200联系方式
gangweijieshaolongtext4294967295岗位介绍

表4-11:用户

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
yonghumingvarchar200用户名
mimavarchar200密码
xingmingvarchar200姓名
xingbievarchar200性别
touxianglongtext4294967295头像
shoujivarchar200手机
shenfenzhengvarchar200身份证
qiuzhiyixiangvarchar200求职意向

5 系统实现

5.1系统功能实现

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。系统首页界面如图5-1所示:

图5-1 系统首页界面

系统注册:在系统注册页面的输入栏中输入用户注册信息进行注册操作,系统注册页面如图5-2所示:

图5-2系统注册页面

企业:在企业页面的输入栏中输入企业名称进行查询,可以查看到企业详细信息,并根据需要进行收藏操作;企业页面如图5-3所示:

图5-3企业详细页面

招聘信息:在招聘信息页面的输入栏中输入岗位名称、薪资待遇、就业城市和企业名称进行查询,可以查看到招聘详细信息,并进行应聘或收藏操作,招聘信息页面如图5-4所示:

图5-4招聘信息详细页面

留言反馈:在留言反馈页面通过输入留言内容、上传图片并立即提交进行在线留言操作;还可以对留言内容进行回复操作,留言反馈页面如图5-5所示:

图5-5留言反馈详细页面

在个人中心页面输入个人信息可以进行更新操作,并根据需要对我的收藏进行详细操作;如图5-6所示:

图5-6 个人中心界面

5.2后台模块实现

后台用户登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-7所示。

图5-7 后台登录界面

5.2.1管理员模块实现

管理员进入主页面,主要功能包括对个人中心、企业管理、用户管理、岗位类型管理、招聘信息管理、应聘记录管理、留言反馈、系统管理等进行操作。管理员主页面如图5-8所示:

图5-8 管理员主界面

管理员点击企业管理。在企业页面输入企业名称进行查询、新增或删除企业列表,并根据需要对企业详情信息进行详情、修改或删除操作;如图5-9所示:

图5-9企业管理界面

管理员点击用户管理。在用户页面输入用户名和姓名进行查询、新增或删除用户列表,并根据需要对用户详情信息进行详情、修改或删除操作;如图5-10所示:

图5-10用户管理界面

管理员点击招聘信息管理。在招聘信息页面输入岗位名称、薪资待遇、就业城市或企业名称进行查询或删除招聘信息列表,并根据需要对招聘详情信息进行详情、修改或删除操作;如图5-11所示:

图5-11招聘信息管理界面

管理员点击应聘记录管理。在应聘记录页面输入岗位名称、企业名称和选择是否通过进行查询或删除应聘记录列表,并根据需要对应聘记录详情信息进行详情、修改或删除操作;如图5-12所示:

图5-12应聘记录管理界面

管理员点击留言反馈。在留言反馈页面输入用户名进行查询或删除留言反馈列表,并根据需要对留言反馈详情信息进行详情、修改、回复或删除操作;如图5-13所示:

图5-13留言反馈管理界面

管理员点击系统管理,在招聘新闻页面输入标题可以查询,新增或删除招聘新闻列表,并根据需要对招聘新闻详细信息进行查看详情,修改和删除等操作,还可以对轮播图管理进行详细操作。如图5-14所示:

图5-14系统管理界面

5.2.2企业模块实现

企业进入系统可以对个人中心、岗位类型管理、招聘信息管理、应聘记录管理等功能进行操作。企业主页面如图5-15所示:

图5-15 企业主界面

企业点击招聘信息管理。在招聘信息页面输入岗位名称、薪资待遇、就业城市或企业名称进行查询、新增或删除招聘信息列表,并根据需要对招聘详细信息进行详情、修改或删除操作。如图5-16所示:

图5-16招聘信息管理界面

5.2.3用户后台管理模块实现

用户进入系统后台可以对个人中心、应聘记录管理等功能进行操作。用户后台管理主页面如图5-17所示:

图5-17 用户后台管理主界面

系统测试

UsersController.java

package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.service.UsersService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UsersController{
	
	@Autowired
	private UsersService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UsersEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UsersEntity user){
        EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UsersEntity user){
       	EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UsersEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UsersEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UsersEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UsersEntity user){
//        ValidatorUtils.validateEntity(user);
    	UsersEntity u = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

AlipayConfig.java
package com.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {
}


GangweileixingController.java
package com.controller;

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.GangweileixingEntity;
import com.entity.view.GangweileixingView;

import com.service.GangweileixingService;
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-01-28 08:43:10
 */
@RestController
@RequestMapping("/gangweileixing")
public class GangweileixingController {
    @Autowired
    private GangweileixingService gangweileixingService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,GangweileixingEntity gangweileixing,
		HttpServletRequest request){
        EntityWrapper<GangweileixingEntity> ew = new EntityWrapper<GangweileixingEntity>();

		PageUtils page = gangweileixingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, gangweileixing), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,GangweileixingEntity gangweileixing, 
		HttpServletRequest request){
        EntityWrapper<GangweileixingEntity> ew = new EntityWrapper<GangweileixingEntity>();

		PageUtils page = gangweileixingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, gangweileixing), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( GangweileixingEntity gangweileixing){
       	EntityWrapper<GangweileixingEntity> ew = new EntityWrapper<GangweileixingEntity>();
      	ew.allEq(MPUtil.allEQMapPre( gangweileixing, "gangweileixing")); 
        return R.ok().put("data", gangweileixingService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(GangweileixingEntity gangweileixing){
        EntityWrapper< GangweileixingEntity> ew = new EntityWrapper< GangweileixingEntity>();
 		ew.allEq(MPUtil.allEQMapPre( gangweileixing, "gangweileixing")); 
		GangweileixingView gangweileixingView =  gangweileixingService.selectView(ew);
		return R.ok("查询岗位类型成功").put("data", gangweileixingView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        GangweileixingEntity gangweileixing = gangweileixingService.selectById(id);
        return R.ok().put("data", gangweileixing);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        GangweileixingEntity gangweileixing = gangweileixingService.selectById(id);
        return R.ok().put("data", gangweileixing);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody GangweileixingEntity gangweileixing, HttpServletRequest request){
    	gangweileixing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(gangweileixing);
        gangweileixingService.insert(gangweileixing);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody GangweileixingEntity gangweileixing, HttpServletRequest request){
    	gangweileixing.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(gangweileixing);
        gangweileixingService.insert(gangweileixing);
        return R.ok();
    }



    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody GangweileixingEntity gangweileixing, HttpServletRequest request){
        //ValidatorUtils.validateEntity(gangweileixing);
        gangweileixingService.updateById(gangweileixing);//全部更新
        return R.ok();
    }


    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        gangweileixingService.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<GangweileixingEntity> wrapper = new EntityWrapper<GangweileixingEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = gangweileixingService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	









}

404.vue
<template>
  <div class="content">
    <img class="backgroud" src="@/assets/img/404.png" alt>
    <div class="text main-text">出错了...页面失踪了</div>
    <div>
      <el-button class="text" @click="back()" type="text" icon="el-icon-back">返回</el-button>
    </div>
  </div>
</template>

<script>
export default {
  methods: {
    back() {
      window.history.length > 1 ? this.$router.go(-1) : this.$router.push("/");
    }
  }
};
</script>

<style lang="scss" scoped>
.content {
  display: flex;
  align-items: center;
  flex-direction: column;
  width: 100%;
  height: 100%;
  min-height: 900px;
  text-align: center;
  .backgroud {
    display: inline-block;
    width: 200px;
    height: 200px;
    margin-top: 80px;
  }
  .main-text{
    margin-top: 80px;
  }
  .text {
    font-size: 24px;
    font-weight: bold;
    color: #333;
  }
}
</style>


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

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

相关文章

springboot安全在线学习平台---附源码131019

摘 要 这是采用springboot技术&#xff0c;SQL Server数据库实现的一个基于网络的在线学习系统。系统具有用户登录和注册、普通用户、课程分类、课程、购买表、课程上传等功能。在线学习是通过提供电子课件&#xff0c;让学生可以进行在线学习&#xff0c;并支持电子课件下载的…

windows主机查询url请求来自哪里发起的

最近使用fiddler抓包&#xff0c;看到一直有http://conna.gj.qq.com:47873 的请求&#xff0c; 对此进行溯源&#xff0c;确定是不是被攻击了。 在dos里查询端口进程&#xff1a;netstat -ano | findstr :47873 查到来自8020的进程id 查看此进程应用&#xff0c;发现竟然是…

postgresql 集群文档

https://www.cnblogs.com/Alicebat/p/14148933.html [命令] Pacemaker 命令 pcs cluster &#xff08;管理节点&#xff09; – Eternal Center PostgreSQL实战之物理复制和逻辑复制&#xff08;五&#xff09;_postgresql 流复制和物理复制-CSDN博客 https://jingyan.baidu…

UE5.4 - 下载和安装

一. 简介 虚幻引擎&#xff08;Unreal Engine&#xff09;是由 Epic Games 公司推出的一款功能强大的游戏开发引擎。它于 1998 年推出第一代&#xff0c;其口号是 “全球最开放、最先进的实时 3D 创作工具”。 虚幻引擎被广泛应用于游戏产业&#xff0c;创作出了众多知名的 3…

企业级WEB应用服务器TOMCAT从讲解到实战一篇解决

一 .WEB技术 1.1 HTTP协议和B/S 结构 操作系统有进程子系统&#xff0c;使用多进程就可以充分利用硬件资源。进程中可以多个线程&#xff0c;每一个线程可以 被CPU调度执行&#xff0c;这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提 供计算服…

教程:postman的平替hoppscotch,又叫postwoman,hoppscotch的docker-compose安装过程

目录 1. 背景2. 前期准备2.1 准备docker-compose文件&#xff0c;两个版本&#xff0c;一个3合1&#xff0c;一个分开2.1.1 3合1版本&#xff08;推荐&#xff09;2.1.2 独立版本 2.2 准备安装nginx-proxy-manager&#xff08;可选&#xff09;2.2 准备.env文件2.2.1 默认ip的.…

爬虫案例5——爬取东方财富网的港股数据

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 任务&#xff1a;从东方财富网中爬取港股的代码&#xff0c;名称&#xff0c;最近价格&#xff0c;涨跌幅&#xff0c;今开&#xff0c;最高等数据 目标网页地址&#xff1a;https://data.eastmone…

科技大厂对AI的垄断

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

探索HTML中的“iframe”标签——WEB开发系列12

现代网页开发中&#xff0c;​​<iframe>​​ 标签是一个非常重要的工具。允许我们在一个网页中嵌入另一个网页&#xff0c;对于展示外部内容、应用嵌套或实现复杂的布局设计都非常有用。来一起探讨如何使用 ​​iframe​​ 标签&#xff0c;包括设置高度和宽度、移除边框…

记录 升级到Gradle 8.4.2 遇到的坑

序言 最近将Gradle从4.0.1 升级到 8.4.2 遇到了很多坑&#xff0c;记录下来帮助有缘人 升级gradle 修改根目录的build.gradle dependencies {classpath com.android.tools.build:gradle:8.4.2classpath org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0}修改gradle-wrapper.…

【html+css 绚丽Loading】000011 三元轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

【TS】函数重载的作用

前言 当调用一个函数时&#xff0c;通常会提示有多种调用方式&#xff0c;各种调用方式的参数类型、参数数量、返回值等均可能不同。本文通过自己封装的message作为案例模拟一下。 实现 自己封装的message组件&#xff0c;有以下7种调用方式 message({mode: "mode"…

QT-计算器

QT-计算器 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui…

分布式事务:基本概念

文章目录 一、基础概念1、什么是事务2、本地事务3 、分布式事务4、分布式事务产生的场景 二、分布式事务基础理论1、CAP理论&#xff08;1&#xff09;理解CAP&#xff08;2&#xff09;CAP组合方式&#xff08;3&#xff09;总结 2、BASE理论 三、分布式事务解决方案之2PC&…

【Java日志系列】Logback日志框架

目录 前言 一、Logback简介 二、Logback组件 三、快速入门 四、配置文件的使用 1. 配置文件中的标签 1.1 logger标签 1.2 root标签 1.3 appender标签 1.4 filter标签 1.5 encoder标签 1.6 property标签 2. 常见的Appender 2.1 ConsoleAppender 2.2 FileAppender…

瓜子二手车源码开发

瓜子二手车作为国内知名的二手车交易平台&#xff0c;其开发需求与功能架构主要围绕提升用户体验、保障交易安全、优化交易流程以及提供全面服务等方面展开。以下是对瓜子二手车开发需求与功能架构的详细分析 一、开发需求 用户需求&#xff1a; 便捷性&#xff1a;用户希望能…

ReTagList标签列表(API)

组件实现基于 Vue3 + Element Plus + Typescript,同时引用 vueUse + lodash-es + tailwindCss (不影响功能,可忽略) 基于ElTag实现的Tag列表,支持Tag列表多选,动态Tag列表 ReTagList标签列表 基础 简单展示Tag列表,可通过size指定尺寸 查看 /demo/tag-list/basic.md …

叉车门口拐角盲区防撞系统,精准微波距离测距,助力企业安全生产

叉车流动性强、作业场所不固定&#xff0c;是特种设备管理的薄弱环节。如何管住叉车、管好叉车&#xff0c;保障作业人员安全一直都是重点话题&#xff0c;引入智慧叉车&#xff0c;使用智能化监管&#xff0c;很多城市相继开展智慧叉车试点工作&#xff0c;给叉车装上“智慧大…

机械学习—零基础学习日志(如何理解概率论4)

当已知一个概率&#xff0c;求解另外一个函数的概率。以下是离散型的概率计算方法。 这里是连续型的&#xff0c;已知概念密度&#xff0c;计算对应的另外一个函数的概率。 这里需要求解对应的原始函数。 这里我们做一道练习题。 《概率论与数理统计期末不挂科|考研零基础入门…

精选这五款热门好用的骨传导耳机,帮你避免踩坑的麻烦!

相信大家都已经深有体会&#xff0c;拿那种常规的入耳式无线蓝牙耳机来做运动耳机&#xff0c;很难满足运动需要。如果选择前两年流行的颈挂式无线运动蓝牙耳机&#xff0c;虽然简单轻巧&#xff0c;但也是入耳式设计&#xff0c;长时间佩戴耳朵不舒服。这样看来&#xff0c;运…