当前位置: 首页> 文旅> 旅游 > 公司日常考勤系统

公司日常考勤系统

时间:2025/9/2 17:01:26来源:https://blog.csdn.net/weixin_43213064/article/details/141181193 浏览次数:0次

@TOC

springboot132公司日常考勤系统

第1章 绪论

1.1 项目背景及意义

企业内部工作人员每天当中的出勤记录能够看出员工对于工作的积极性和工作是否高效。这种方式比较困难但是也在持续的前进,以前的通过人工记录出勤的企业工作人员工作时态度应用的方法并不正确,不但是这些不利之处,而且还比较的耗费时间和经营管理当中的成本。在这样的背景之下,对于企业所拥有的利益并不是特别好,企业没有办法更好的了解工作人员的态度和每天出勤的记录,因此不可以指定出很合适的工作人员管控方法。如果没有更好的管理方法,就不会得到相对好一点的未来。在这种前提之下,持续的出现了新型的方式来代替旧的办法。

在运用人工的方法处理是比较耗费时间、人们劳动力还有成本的,在计算当中极可能出现误差。企业对于工作人员的上班下班或者需要加班的时候这些状况展开总的统计,了解工作人员的日常工作状态,运用计算机软件办法对于出勤的信息内容展开计算并且进行相应的处理编制,选择且放弃没用的数据内容,归整收纳、获得有用的种种表格和出勤的统计数值。从企业进行管理控制的员工的方面来说,企业有着一整套比较完整的出勤管理控制体系,能够更好的控制管理企业的工作人员,对于员工的日常高效率工作也有所帮助,这样也相应的降低了企业的耗费。从这些来看,研制除了一个水平比较高并且很容易操作运转的企业出勤控制管理的整个体系,对于企业未来的良好发展有很大的作用。

1.2 国内外研究现状

企业对于出勤的管理整个的体系历史是比较久远的,开始运用比较正规的体系最少也是在公元三世纪的时候。就是因为这些历史因素,我们国家在经营的时候管理的能力并不理想,和比较发达一些的国家或者企业存在着比较大的区别。竞争也在日益的变强,在对于工作人员的管理控制分析方面,学习了很多的经验内容。进行管理控制的办法和现代化企业的规定也在持续规整,比较先进的国家外部的管理控制想法也慢慢的流入了中国,但是也留存着许多不足需要处理。最近的这些年,在对于计算机软件技术方面的持续变大,我们国家也变成的完整的信息化的国家。许多比较繁琐的问题在目前的科学发展当中有所解决。目前的国家有关的单位当中,计算机软件技术完成了对于企业出勤记录的整个体系应用比较广泛,对于工作人员的日常工作状态有所管理。在实习时期,企业运用的考察出勤的方式是通过IC卡来进行识别的办法。这样就很大可能得降低了员工的负担,尽可能的不出现人带来的误差,这样也就做到了高效性。

但是按照完整考核的目标对于考察出勤体系的完整性质进行衡量时,整个的出勤记录体系是在对于数值的管理加工和数据的整理规整两个当中能可以更好的完成职任。国家内部和外部现在比较领先的就是运用生物的有关办法对于人体内部的技能地位识别,并且不通过统计来对于数据进行规整聚集最后对数据进行规整加工。

1.3 主要研究内容

这篇文章就是联合了Web展开模型块状的研究开发,研究开发企业的有关出勤考察体系的整个过程。从整个体系的需要方面了解企业的整个管理控制体系展开了解。在体系的构造的完成并且实验当中展开了解。探究的目标就是为了管理的员工和工作人员可以及时的看到出勤规整记录和对于工资的统计的整个的出勤体系。

第2章 主要技术介绍

2.1 JSP 编程语言

JSP是由计算机制定的动态Web技术标准。JSP在Web服务器上展开,响应于客户发送的请求,根据有所需求的内容衍生出HTML、XML和另外的用其他文档类型的有关Web页,而且能够退还到申请者那。JSP有关的水平能够利用Java语言当成了整个过程中比对的语言,给使用者HTTP所提出的需求带来帮助,和服务器当中的另外的Java系统共同完成繁琐的规定。JSP带进Java语言的代码,更改不变状态的页面,把这种界面成了在形成模板动态当中的一点。运用JSP有关技能将内容信息分开和进行展示的文案稿子,Web的探究研发的人能够运用HTML或者XML有关的标准标志进行构造和将最后的页面起始化,主要的规则封存包装在标志识别符和JavaBeans当中,所以Web的运行管理者和对于页面进行设计构造的人都能够在没有任何作用的情况下编写和运用有关的JSP界面。

优势:1)体系得到多个平台的肯定与支持。这样就能够在所有平台当中,不管什么样的环境都能进行,或者说可能够应用到各种环境,并且能够从现实出发。和asp存在的区域限制性质对比,jsp的优势也是显而易见的。2)有特别良好的扩展性质。通过可以执行Servlet/JSP的有关JAR文档到对应的许多服务器聚集和均衡,对于事件的加工、信息的规整和服务器的运用,Java体现出了很强的活力。3)各种类型的展开救援。就和ASP相同,Java拥有着许多较好的研究开发工具,当中许多都是没有费用的,大多都能够更好的在多个平台中顺利运转。

不足:(1)就和ASP相同,Java拥有的许多优势也就成了能够直接致命的不足。这样跨越各个平台的特质和较强的能够延续的性质,就很大程度让产品变得繁琐。(2)因为java在对应的类驻留储存保留的机器当中运行,因此现实中运用储存保留机器的客户做比较是“性能价格比”。

2.2 MYSQL数据库

MySQL数据库,也就是把数据存放在不一样的表格当中,这些表格能够表示一些内容的类别,有利于查找内容和对于数据进行相应的管理。同样的,MySQL数据库也能作为一个开发资源不收费用的对于数据进行管理的道具,它的优势有耗费比较低、计算机软件占用空间小、开发资源无成本。在目前的中国应用MySQL数据库也是很广泛的,在这个体系研发当中,MySQL数据库做到了极为关键的地位。由于我们国家的最基本存在的行情,MySQL数据库可以更好的实行各种类型的超市需要,针对数据内容的存留储存和相应的控制可以更好的处理,无费用、成本很低、出现问题很好维修保护。

2.3 BS模式

B/S也就是Browser/Server,就是为浏览器或者服务器的框架构造,作为了web互联网构造类型。利用B/S研究开发的应用体系对于其客户都是能够简便运作的,只用互联网和浏览器就能够达到运转的要求,与此同时能够把很少的体统放到客户端进以加工,降低了服务器所承受的压力,而且能够应用AJAX方法加大交互性质,达到区域及时更新的目标,降低了整个过程的成本,使得体系很容易扩展的性质。

2.4 SpringBoot

SpringBoot是按照Pivotal的完整团队带出的全面的新型设计,其设计也是根据比较简化的新型Spring应的最开始的构造建立和完整的探索研究。这个构造能够让安排的现在进行分配设备,所以能够开发的工作人员不需要安排样板类型的分配装备设施。 28

第3章 需求分析

3.1 可行性分析

1、技术方面可行性:按照项目的运行水平方面来分析构造方法都是比较可行的。在一定的时期内能够完成要求规定当中的特征,应用质量水平能够有所保证,会有很好运用价值,应用的制造比较高效性,让公司在竞争当中提高了地位。

2、经济方面可行性:虽然整个体系研究开始的时候投入资金比较多,但是如果能够研发完成,对于企业的未来发展有很好的帮助,把握住强烈的竞争中存在的机会。所以,按照长久收益来说,这个工程能够研发完成,就能带来的利益远远高于最初投入的资金很多。

3、法律方面可行性:这个体系是全部自己探究研发设计的,所以肯定不会导致侵犯别人的权利,在法律方面是完全可行的。

4、运用方面可行性:在企业工作方面,因为平时信息加工的内容比较多,花费的时间是相对较长,很容易出现错误,在体系开始运作之后,能够完成在工作当中对于内容的加工、交互联系、监督管理和重要的选择。而且能够将企业更进一步的朝向互联网方向发展,让信息业务有了更坚实的基础。

通过上边的探究的发现,考虑到体系研究当中存在的效率和利益都会很大程度高于投入的资金,因此研发这项工程是重要的、能够实行的。

3.2 系统定义

企业对于出勤体系都会为公司工作人员管理的体系。对于公司这个构造的性质,对于工作人员各种出勤状况进行规整。同时对于规定时期内整理公司整个的出勤记录和有关职员的单人状况,更好的通过这个体系了解信息。编码完成对于公司工作人员出勤信息的更改等最基础的特征,考察出勤规整数据和有关职员的考察出勤带来的统计和搜索功能。

3.3 系统的性能要求

对于出勤管理的体系运用的是Java语言联合着SpringBoot构造和Tomcat服务器展开探究研发的,运用MySQL数据库当成研发时期数据留存储存的数据库。SpringBoot很大程度上增强了构造和服务器当中的全都可存在的性质,让服务器的操作当中做到高效性。运用MySQL数据库也是因为MySQL数据库对于索引方面有着很大帮助,对于查找搜寻内容做到高效性。很大程度上减少了时间成本,让性质能力角度变得更好。

3.4 功能分析

公司对于工作人员的出勤状况考察的体系也是为了了解上下班、请假等信息的归纳、统计和查询的全自动的过程。完成改善公司有关部门的运行现代化,更利于员工的打卡等这个内容的上交,利于管理者对于数据信息进行归纳,对于工作人员日常的上班状况进行审查,也有利于进行管理的有关部门查课并且统计整个的上班情况,这样能够看出企业员工的工作时长和状态,更高效的了解、控制员工的流动。

根据上边所说的,公司的工作人员对于出勤的管理体系有要求,需要对于员工日常的出勤展开全面的记录,之后在对于内容进行了解和规整,体现出的总结可以让管理的人更好的了解企业工作人员的状态和日常上班情况。

第4章 系统设计

4.1 总体功能概述

4.1.1系统功能模块的划分

分析企业的考勤管理系统过程可以看到,考勤管理系统中主要要解决的是:

1.考勤信息的管理;

2.考勤、出勤信息的请假及申请;

3.给系统设定用户登录权限;

4.设定密码更改功能等等。

根据以上分析的业务流程,结合传统的考勤系统的业务流程,待开发的考勤管理系统分为两个用户模块:员工和管理员。系统的功能模块图如图所示:

考勤管理系统

员工

管理员

密码修改

出勤管理

请假审核

部门管理

员工管理

系统公告

请假申请

图4-1 系统总体功能模块图

4.1.2 系统的结构框架图

Firewall 防火墙

MYSQL: 系统服务器所使用的数据库管理系统(DBMS),一种结构化查询数据库的语言

事务流:数据进入模块后可能有多种路径进行处理。

ROLLBACK: 数据库的错误恢复机制。

WEB浏览器

请求

响应

WEB服务器

页面

页面

应用程序服务器

查询

记录集

数据库驱动程序

数据库

图4-2 架构流程图

进入考勤系统

根据管理员等级确定进入方式

管理

系统管理

退出

考勤管理

4.2 系统流程图

图4-3 系统考勤流程图

4.3数据库设计

MySQL 提供了许多支持数据库应用程序的工具。这些工具中有些工具在数据仓库中使用得较频繁,而有些则是专用于解决数据仓库的特殊要求。这里列出的工具常用于数据仓库应用程序,但是大多数工具还可用于其它的数据库应用程序。

4.3.1 系统数据流程图

个人

记录出勤时间

管理员

加班记录

上下班时间设置

个人出勤记录

记录操作 上下班

加班

考勤时间设置

图5-1 系统数据流程图

4.4 数据库的设计

4.4.1 数据库的概念设计

管理系统主要以管理员、员工来共同完成一个业务流程。他们之间存在着数据关联并且靠数据库关键字段进行索引,建立表关联。

E-R图如下:

管理员密码

管理员

管理员名

管理员级别

个人情况

个人编号

个人ID

个人性别

个人姓名

个人级别

级别ID

级别名

出勤情况

个人ID

级别ID

出勤ID

时间

出勤名称

出勤ID

出勤级别

考勤管理

图5-2 E-R图

4.4.2 数据库逻辑结构设计

本管理系统所存在的数据库中有不同的表结构,这些物理表中存放着各种网站所调用的数据,为整个网站的流程提供最基本的数据来源。本网站采用MySQL数据库它是由Microsoft公司开发。对于它的安全性和易操作性来说是开发者首选。

管理员信息表(编号、姓名、帐号、密码)

员工信息表(编号、姓名、性别、登陆用户名、登陆密码、电话、是否部门领导)

出勤信息表(编号、员工ID、天数)

公告信息表(编号、标题、内容)

请假申请信息表(编号、开始时间、结束时间、员工ID、申请状态、恢复信息、备注)

图5-3 管理员信息表属性图

管理员信息

编号

管理员账号

管理员密码

姓名

图5-3 管理员信息表属性图

图5-4员工信息表属性图

员工信息

是否部门领导

电话

登陆密码

编号

姓名

性别

登陆用户名

图5-4 员工信息表属性图

图5-5出勤信息表属性图

出勤信息

编号

员工ID

天数

图5-5 出勤信息表属性图

图5-6公告信息表(编号、标题、内容)

公告信息

编号

标题

内容

图5-6 公告信息表属性图

图5-7请假申请信息表属性图

请假申请信息

备注

申请状态

恢复信息

编号

开始时间

结束时间

员工ID

图5-7 请假申请信息表属性图

4.4.3 数据库物理设计

是要存储在物理设备上的。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。物理结构依赖于给定的DBMS和和硬件系统,充分了解所用DBMS的内部特征,特别是存储结构和存取方法;充分了解应用环境,特别是应用的处理频率和响应时间要求;以及充分了解外存设备的特性。

表4.1管理员信息表

列名说明数据类型数据长度可否为空键码
userid用户idint4主键
username用户名varchar51
userpw密码varchar50

表4.2出勤信息表

列名说明数据类型数据长度可否为空键码
id编号idint4主键
yuefen月份varchar50
tianshu天数int4
yuangong_id员工IDint4

表4.3公告信息表

列名说明数据类型数据长度可否为空键码
id编号varchar50主键
title标题varchar50
content内容varchar8000
shijian时间varchar50

表4.4请假申请信息表

列名说明数据类型数据长度可否为空键码
id编号int4主键
kaishishijian开始时间varchar50
jieshushijian结束时间varchar50
beizhu备注varchar5000
yuangong_id员工IDint4
shenhezhuangtai申请状态varchar50
huifuxinxi恢复信息varchar50

表4.5员工信息表

列名说明数据类型数据长度可否为空键码
ididint4主键
bianhao编号varchar50
name姓名varchar100
sex性别varchar50
shifoubumenlingdao是否部门领导varchar50
loginname登录名varchar50
loginpw登陆密码varchar50
del电话varchar50

4.5 输入输出设计

出设计是系统设计中很容易被忽视的环节,又是一个重要的环节。一个好的输出系统设计可以为用户和系统双方带来良好的工作环境,一个好的输出设计可以为管理者提供简捷、明了、有效、实用的管理和控制信息。本管理系统输入设计数据根据输出的要求来选择。输出类型设计是根据需求设计为打印输出,这是用户通常要求的最主要的形式。输入内容设计主要是根据数据库设计和输出设计的结果来确定的。外部输入主要是键盘输入,内部输入只要是数据库中调用的信息,如会员资料信息的注册,在后台对帖子管理,用户信息,重要通知的添加。

4.6 存储过程的设计

存储过程(stored procedure)是Transact-SQL语句的预编译集合,这些语句在一个名称下存储并作为一个单元进行处理。存储过程可以提高客户机重复向数据库服务器发送或请求的功能。存储过程通过接受参数并且返回状态值,以表示成功或失败。 MySQL中的存储过程与其它编程语言中的过程类似,原因是存储过程具备以下功能。 (1)接受输入参数并以输入参数的形式将多个值返回调用过程或批处理。 (2)包含执行数据库操作的编程语句。 (3)向调用过程或批处理返回状态值,以表明成功或失败。 MySQL 存储过程是用Transact-SQL的CREATE PROCEDURE语句创建的,并可用ALTER PROCEDURE语句进行修改。

我们是便用查询分析器生成的,其代码如下:

--1、创建添加出勤表的存储过程

--(1)添加数据

Create procedure proc_addTableCWA(@CWAName varchar(30)) as insert into Table_CWA values(@CWAName) return @@identity

go

--(2)删除数据

Create procedure proc_delTableCWA(@CWAID int) as delete from Table_CWA where CWAID =@CWAID

return @@identity

go

--(3)修改数据

Create procedure proc_updateTableCWA(@CWAID int,@CWAName varchar(30)) asupdate Table_CWA set CWAName=@CWAName where CWAID=@CWAID return @@identity

go

--(4)查找数据

Create Procedure proc_selectTableCWA as select * from Table_CWA

go

Create Procedure proc_selectTableCWAName(@CWAName varchar(40)) as select * from Table_CWA where CWAName=@CWAName

Go

--2、创建添加级别表的存储过程

--(1)添加数据

create procedure proc_AddTableLevel(@PeopleLeval varchar(30)) as

insert into Table_Level values (@PeopleLeval) return @@identity

go

--(2)删除数据

Create Procedure proc_DelTableLevel(@PeopleLevelID int) as delete from Table_Level

where (PeopleLevelID=@PeopleLevelID) return @@identity

go

--(3)修改数据

Create Procedure proc_updateTableLevel(@PeopleLevelID int,@PeopleLeval varchar(30)) as

update Table_Level set PeopleLeval=@PeopleLeval where PeopleLevelID=@PeopleLevelID

return @@identity

go

--(4)查找数据

--全体查找

create Procedure proc_selectTableLevel as select * from Table_Level ORDER BY PeopleLevelID ASC

go

--根据PeopleLeval查找

create Procedure proc_selectTableLevelName(@PeopleLeval varchar(30)) as select * from Table_Level where PeopleLeval=@PeopleLeval

go

--3、创建添加个人情况表的存储过程

--建立个人情况的视图

CREATE VIEW dbo.view_people

AS SELECT dbo.Table_People.PeopleID,

dbo.Table_People.PeopleNumber, dbo.Table_People.PeopleName,

dbo.Table_People.PeopleSex, dbo.Table_Level.PeopleLeval

FROM dbo.Table_People INNER JOIN

dbo.Table_Level ON

dbo.Table_People.PeopleLevelID = dbo.Table_Level.PeopleLevelID

GO

--查找数据(1)

--全部查找

Create Procedure proc_selectTablePeople as select * from view_people

go

--根据编号查找

Create Procedure proc_selectTablePeopleNo(@PeoPleNumber char(6)) as

select * from view_people where PeoPleNumber=@PeoPleNumber

go

--根据时间和个人姓名查找

create procedure proc_SelectPeopleIformationNameTime

(@PeopleName varchar(30),@LYear int,@LMonth int,@LDay int,@LYear1 int,@LMonth1 int,@LDay1 int) as

select * from view_CheckOnWorkAttendance where PeopleName=@PeopleName and LYear>=@LYear and LMonth>=@LMonth and LDay >=@LDay and LYear<=@LYear1 and LMonth<=@LMonth1 and LDay <=@LDay1

go

--根据时间和职业查找

create procedure proc_SelectPeopleIformationLevelTime

(@PeopleLeval varchar(30),@LYear int,@LMonth int,@LDay int,@LYear1 int,@LMonth1 int,@LDay1 int) as

select * from view_CheckOnWorkAttendance where PeopleLeval=@PeopleLeval and LYear>=@LYear and LMonth>=@LMonth and LDay >=@LDay and LYear<=@LYear1 and LMonth<=@LMonth1 and LDay <=@LDay1

go

-

第5章 详细设计与实现

5.1 用户登陆

当系统登陆时,首先出现的是一个用户权限登陆的界面, 权限设置主要是维护系统的安全性和完整性。拥有管理员权限的操作员能对其他操作员进行相应的权限设置,没有权限的操作员不能对相应的窗口进行操作。如下图所示:

页面程序说明,如表5-1所示:

表5-1页面程序说明

|程序名称|| | - | - | |程序文件|Login.jsp| |页面传入参数|Username,password| |页面提交URL|| |页面传出参数|

Session["username"]

Session["group"]

| |功能说明|登录系统| |特殊注解|无|

5.2 修改密码

当选中密码修改菜单时,输入一次旧密码,两次新密码,然后按修改按钮,密码修改成功。请务必记住自己的密码,并注意保密。

5.3 系统主界面

IMG_256

5.4 部门管理界面

此部分只有管理员可以进行操作,它可以进行添加删除部门,这些部门存在于企业并作为每一位工作人员的归属。如图所示。

5.5 员工管理

管理员记录新工作的工作人员信息,并给与工作人员一定的登陆权限,也可以删除退休或者辞职的工作人员。对于信息改变的工作人员进行信息修改。同时可以把需要的工作人员信息通过查找的方式调出来。例如输入关键字姓名,年龄学历等信息。如图所示。

IMG_256

1、员工信息录入功能

本功能实现的是对员工的录入,填写新员工的基本信息,并且保存起来。本功能的程序流程图如图5-5所示。

将信息保存到表teacher_base_info中

结束

N

输入是否有效

开始

Y

输入员工信息

提示错误信息

图5-5 员工录入流程图

2、员工查询功能

包含一个下拉列表。查询分为按账号查询和按姓名查询两种查询方式(此处为一个下拉列表)。按账号查询中,只要输入员工的账号就可以查询。按姓名查询中,只要输入员工的姓名就可以查询。本文只做出查询员工信息的程序流程图,如图5-6所示。

开始

输入要查询的员工姓名

从表yuangong_base_info中查询

员工的个人信息

Y

显示错误信息

显示查询结果

结束

结果是否为空

N

结果是否为空

以sID为条件

从各个表中查询信息

显示提示信息

Y

N

图5-6 查询员工流程图

3、员工修改功能

将信息保存到表yuangong_base_info中

结束

N

输入是否有效

开始

Y

输入员工信息

提示错误信息

本功能实现的是对研究生档案的修改,并且保存起来。本功能的程序流程图如图5-7所示。

图5-7 员工修改流程图

4、员工删除功能

将信息从表teacher_base_info中删除

结束

N

输入是否有效

开始

Y

输入要删除员工账号

提示错误信息

本功能实现的是对研究生档案的删除。本功能的程序流程图如图5-8所示。

图5-8 员工删除流程图

5.6 系统公告管理

IMG_256

5.7请假申请

IMG_256

YuangongController.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.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.YuangongEntity;
import com.entity.view.YuangongView;import com.service.YuangongService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;/*** 员工* 后端接口* @author * @email * @date 2021-05-20 16:37:02*/
@RestController
@RequestMapping("/yuangong")
public class YuangongController {@Autowiredprivate YuangongService yuangongService;@Autowiredprivate TokenService tokenService;/*** 登录*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("yuangonggonghao", username));if(user==null || !user.getMima().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(user.getId(), username,"yuangong",  "员工" );return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@RequestMapping("/register")public R register(@RequestBody YuangongEntity yuangong){//ValidatorUtils.validateEntity(yuangong);YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("yuangonggonghao", yuangong.getYuangonggonghao()));if(user!=null) {return R.error("注册用户已存在");}Long uId = new Date().getTime();yuangong.setId(uId);yuangongService.insert(yuangong);return R.ok();}/*** 退出*/@RequestMapping("/logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");YuangongEntity user = yuangongService.selectById(id);return R.ok().put("data", user);}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("yuangonggonghao", username));if(user==null) {return R.error("账号不存在");}user.setMima("123456");yuangongService.updateById(user);return R.ok("密码已重置为:123456");}/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,YuangongEntity yuangong,HttpServletRequest request){EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();PageUtils page = yuangongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuangong), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,YuangongEntity yuangong, HttpServletRequest request){EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();PageUtils page = yuangongService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuangong), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( YuangongEntity yuangong){EntityWrapper<YuangongEntity> ew = new EntityWrapper<YuangongEntity>();ew.allEq(MPUtil.allEQMapPre( yuangong, "yuangong")); return R.ok().put("data", yuangongService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(YuangongEntity yuangong){EntityWrapper< YuangongEntity> ew = new EntityWrapper< YuangongEntity>();ew.allEq(MPUtil.allEQMapPre( yuangong, "yuangong")); YuangongView yuangongView =  yuangongService.selectView(ew);return R.ok("查询员工成功").put("data", yuangongView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){YuangongEntity yuangong = yuangongService.selectById(id);return R.ok().put("data", yuangong);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){YuangongEntity yuangong = yuangongService.selectById(id);return R.ok().put("data", yuangong);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YuangongEntity yuangong, HttpServletRequest request){yuangong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yuangong);YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("yuangonggonghao", yuangong.getYuangonggonghao()));if(user!=null) {return R.error("用户已存在");}yuangong.setId(new Date().getTime());yuangongService.insert(yuangong);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YuangongEntity yuangong, HttpServletRequest request){yuangong.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(yuangong);YuangongEntity user = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("yuangonggonghao", yuangong.getYuangonggonghao()));if(user!=null) {return R.error("用户已存在");}yuangong.setId(new Date().getTime());yuangongService.insert(yuangong);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody YuangongEntity yuangong, HttpServletRequest request){//ValidatorUtils.validateEntity(yuangong);yuangongService.updateById(yuangong);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){yuangongService.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<YuangongEntity> wrapper = new EntityWrapper<YuangongEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = yuangongService.selectCount(wrapper);return R.ok().put("count", count);}}
YuangongServiceImpl.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.YuangongDao;
import com.entity.YuangongEntity;
import com.service.YuangongService;
import com.entity.vo.YuangongVO;
import com.entity.view.YuangongView;@Service("yuangongService")
public class YuangongServiceImpl extends ServiceImpl<YuangongDao, YuangongEntity> implements YuangongService {@Overridepublic PageUtils queryPage(Map<String, Object> params) {Page<YuangongEntity> page = this.selectPage(new Query<YuangongEntity>(params).getPage(),new EntityWrapper<YuangongEntity>());return new PageUtils(page);}@Overridepublic PageUtils queryPage(Map<String, Object> params, Wrapper<YuangongEntity> wrapper) {Page<YuangongView> page =new Query<YuangongView>(params).getPage();page.setRecords(baseMapper.selectListView(page,wrapper));PageUtils pageUtil = new PageUtils(page);return pageUtil;}@Overridepublic List<YuangongVO> selectListVO(Wrapper<YuangongEntity> wrapper) {return baseMapper.selectListVO(wrapper);}@Overridepublic YuangongVO selectVO(Wrapper<YuangongEntity> wrapper) {return baseMapper.selectVO(wrapper);}@Overridepublic List<YuangongView> selectListView(Wrapper<YuangongEntity> wrapper) {return baseMapper.selectListView(wrapper);}@Overridepublic YuangongView selectView(Wrapper<YuangongEntity> wrapper) {return baseMapper.selectView(wrapper);}}
TongzhigonggaoController.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.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.TongzhigonggaoEntity;
import com.entity.view.TongzhigonggaoView;import com.service.TongzhigonggaoService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;/*** 通知公告* 后端接口* @author * @email * @date 2021-05-20 16:37:02*/
@RestController
@RequestMapping("/tongzhigonggao")
public class TongzhigonggaoController {@Autowiredprivate TongzhigonggaoService tongzhigonggaoService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,TongzhigonggaoEntity tongzhigonggao,HttpServletRequest request){EntityWrapper<TongzhigonggaoEntity> ew = new EntityWrapper<TongzhigonggaoEntity>();PageUtils page = tongzhigonggaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, tongzhigonggao), params), params));return R.ok().put("data", page);}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,TongzhigonggaoEntity tongzhigonggao, HttpServletRequest request){EntityWrapper<TongzhigonggaoEntity> ew = new EntityWrapper<TongzhigonggaoEntity>();PageUtils page = tongzhigonggaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, tongzhigonggao), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( TongzhigonggaoEntity tongzhigonggao){EntityWrapper<TongzhigonggaoEntity> ew = new EntityWrapper<TongzhigonggaoEntity>();ew.allEq(MPUtil.allEQMapPre( tongzhigonggao, "tongzhigonggao")); return R.ok().put("data", tongzhigonggaoService.selectListView(ew));}/*** 查询*/@RequestMapping("/query")public R query(TongzhigonggaoEntity tongzhigonggao){EntityWrapper< TongzhigonggaoEntity> ew = new EntityWrapper< TongzhigonggaoEntity>();ew.allEq(MPUtil.allEQMapPre( tongzhigonggao, "tongzhigonggao")); TongzhigonggaoView tongzhigonggaoView =  tongzhigonggaoService.selectView(ew);return R.ok("查询通知公告成功").put("data", tongzhigonggaoView);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){TongzhigonggaoEntity tongzhigonggao = tongzhigonggaoService.selectById(id);return R.ok().put("data", tongzhigonggao);}/*** 前端详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){TongzhigonggaoEntity tongzhigonggao = tongzhigonggaoService.selectById(id);return R.ok().put("data", tongzhigonggao);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody TongzhigonggaoEntity tongzhigonggao, HttpServletRequest request){tongzhigonggao.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(tongzhigonggao);tongzhigonggaoService.insert(tongzhigonggao);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody TongzhigonggaoEntity tongzhigonggao, HttpServletRequest request){tongzhigonggao.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(tongzhigonggao);tongzhigonggaoService.insert(tongzhigonggao);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody TongzhigonggaoEntity tongzhigonggao, HttpServletRequest request){//ValidatorUtils.validateEntity(tongzhigonggao);tongzhigonggaoService.updateById(tongzhigonggao);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){tongzhigonggaoService.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<TongzhigonggaoEntity> wrapper = new EntityWrapper<TongzhigonggaoEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}int count = tongzhigonggaoService.selectCount(wrapper);return R.ok().put("count", count);}}
update-password.vue
<template><div><el-formclass="detail-form-content"ref="ruleForm":rules="rules":model="ruleForm"label-width="80px"><el-form-item label="原密码" prop="password"><el-input v-model="ruleForm.password" show-password></el-input></el-form-item><el-form-item label="新密码" prop="newpassword"><el-input v-model="ruleForm.newpassword" show-password></el-input></el-form-item><el-form-item label="确认密码" prop="repassword"><el-input v-model="ruleForm.repassword" show-password></el-input></el-form-item><el-form-item><el-button type="primary" @click="onUpdateHandler">确 定</el-button></el-form-item></el-form></div>
</template>
<script>
export default {data() {return {dialogVisible: false,ruleForm: {},user: {},rules: {password: [{required: true,message: "密码不能为空",trigger: "blur"}],newpassword: [{required: true,message: "新密码不能为空",trigger: "blur"}],repassword: [{required: true,message: "确认密码不能为空",trigger: "blur"}]}};},mounted() {this.$http({url: `${this.$storage.get("sessionTable")}/session`,method: "get"}).then(({ data }) => {if (data && data.code === 0) {this.user = data.data;} else {this.$message.error(data.msg);}});},methods: {onLogout() {this.$storage.remove("Token");this.$router.replace({ name: "login" });},// 修改密码onUpdateHandler() {this.$refs["ruleForm"].validate(valid => {if (valid) {var password = "";if (this.user.mima) {password = this.user.mima;} else if (this.user.password) {password = this.user.password;}if (this.ruleForm.password != password) {this.$message.error("原密码错误");return;}if (this.ruleForm.newpassword != this.ruleForm.repassword) {this.$message.error("两次密码输入不一致");return;}this.user.password = this.ruleForm.newpassword;this.user.mima = this.ruleForm.newpassword;this.$http({url: `${this.$storage.get("sessionTable")}/update`,method: "post",data: this.user}).then(({ data }) => {if (data && data.code === 0) {this.$message({message: "修改密码成功,下次登录系统生效",type: "success",duration: 1500,onClose: () => {}});} else {this.$message.error(data.msg);}});}});}}
};
</script>
<style lang="scss" scoped>
</style>
关键字:公司日常考勤系统

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: