原文地址: http://blog.csdn.net/mansai/article/details/52807034
智能考勤就找我!! 哈哈。
他能解决哪些问题?
1、考勤地分散在各个城市,甚至全球,希望总部统一管控
2、领导出差,在家,随时想查看员工的出勤状况
3、无法提供上网的复杂环境
4、公司班车需要员工刷指纹(或刷脸或指静脉或掌纹或ID卡等)
5、员工自助查询:做为请假、调休等依据,结果更公正透明
6、考勤人员规模:小到几人的微型公司,大到几百万人的跨国集团。
7、无需HR人员采集考勤数据、向考勤机写入员工资料(系统自动操作,网络断线资料不会导致丢失)
使用说明:
1、小公司只要一台普通PC即可。
2、大公司一般都有专用的服务器。
有人会颖问,我小公司就一台普通PC没开机如何获取刷卡资料?
回答:当然,没有开机是无法获取员工刷卡资料,什么时候开机,刷卡会在开机时自动上传。
又有人问,不提供上网环境,又是如何实时获取到异地员工的刷卡资料
回答:其实上网环境为考勤机自带的3G或4G手机卡或专用的上网卡实现(无需成本:原因公司一般都有出差人员,绑定到出差人员的附属手机卡上,一般电信或移动都免费提供)。
使用设备中控系列考勤机
优点:
国内排名第一大品牌,功能强大,价格公开,京东、淘宝均有售
官方网址:点击打开链接
购买需知:考勤机要支持http Push功能(BS功能),如图是中控U160截图,中控考勤机大部分都支持,但有些型号默认没有开启该功能,所以在购买时一定要厂商提供,否则购买再加Push功能,厂商需要另外收费。
中控HTTP PUSH 通信协议介绍
开发环境为VS2012,新建一个httppush专案,如图
新建三个ashx文件(cdata.ashx/devicecmd.ashx/getrequest.ashx),操作方法如图
再新增一个Global.asax,如果如图
因为中控http push url访问不支持扩展名,所以要通过Global重写url,打开Global.asax
具体代码如下:
数据库使用sqlserver(目前类库也支持oracel或mysql)
建立4个table分别命名:
TAttendanceMachine:记录考勤机信息
TAttendanceCmds:记录服务器向考勤机下发命令(例如新进员工资料自动写入考勤机,员工离职自动删除考勤机,指纹变更自动写入指纹到考勤机)
TAttendanceCardTime:员工考勤刷卡记录表
TEmpFinger:员工指纹表
sql脚本如下:
CREATE TABLE [dbo].[TAttendanceCardTime](
[FID] [int] IDENTITY(1,1) NOT NULL,
[FEmpID] [varchar](15) NULL,
[FEmpName] [nvarchar](50) NULL,
[FDateTime] [datetime] NULL,
[FVerify] [tinyint] NULL,
[FCreateDateTime] [datetime] NULL,
CONSTRAINT [PK_TAttendanceCardTime] PRIMARY KEY CLUSTERED
(
[FID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'工号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TAttendanceCardTime', @level2type=N'COLUMN',@level2name=N'FEmpID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TAttendanceCardTime', @level2type=N'COLUMN',@level2name=N'FEmpName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'刷卡时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TAttendanceCardTime', @level2type=N'COLUMN',@level2name=N'FDateTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'刷卡方式:0密码1指纹2卡9其它' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TAttendanceCardTime', @level2type=N'COLUMN',@level2name=N'FVerify'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'刷卡记录上传时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TAttendanceCardTime', @level2type=N'COLUMN',@level2name=N'FCreateDateTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'刷卡记录表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TAttendanceCardTime'
GO
ALTER TABLE [dbo].[TAttendanceCardTime] ADD CONSTRAINT [DF_TAttendanceCardTime_F_CreateDateTime] DEFAULT (getdate()) FOR [FCreateDateTime]
GO
CREATE TABLE [dbo].[TEmpFinger](
[FID] [int] IDENTITY(1,1) NOT NULL,
[FEmpID] [varchar](15) NULL,
[FingerID] [smallint] NULL,
[FTemplate] [nvarchar](max) NULL,
[FSize] [int] NULL,
[Fpversion] [nvarchar](10) NULL,
[FValid] [bit] NULL,
[FCreatorID] [varchar](15) NULL,
[FCreatorName] [nvarchar](10) NULL,
[FCreateDateTime] [datetime] NULL,
[FModifyID] [varchar](15) NULL,
[FModifyName] [nvarchar](10) NULL,
[FModifyDateTime] [datetime] NULL,
[FDeleteDateTime] [datetime] NULL,
[FStatus] [tinyint] NULL,
[FSN] [varchar](50) NULL,
CONSTRAINT [PK_T_EmpFinger] PRIMARY KEY CLUSTERED
(
[FID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'手指顺序' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FingerID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指纹信息' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FTemplate'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指纹长度' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FSize'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指纹版本' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'Fpversion'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'指纹验证' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FValid'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'修改时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FModifyDateTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'删除时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FDeleteDateTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'状态码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger', @level2type=N'COLUMN',@level2name=N'FStatus'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'员工指文表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TEmpFinger'
GO
ALTER TABLE [dbo].[TEmpFinger] ADD CONSTRAINT [DF_T_EmpFinger_F_CreateDateTime] DEFAULT (getdate()) FOR [FCreateDateTime]
GO
打开cdata.ashx,写入如下代码(此页面主要获取考勤机基本资料,员工刷卡资料,采集员工在考勤机上登记的指纹,当然也可以单独购买指纹仪(指纹仪读取方法指纹保存到数据的方法可以联系我。))
获取考勤机及刷卡资料再通知考勤机,所以考勤资料不会丢失,当网络异常,或网线断掉,网络重连后会自动发送,无需人工操作。
打开getrequest.ashx写入如下代码(此页面主要是服务器向考勤机下发命令,例如向多台考勤机写入员工资料、删除员工资料,更新姓名,写入指纹等)
打开devicecmd.ashx写入代码(此页面主要是考勤机传回getrequest.ashx页面下发的命令执行状态,是成功还是失败,修改数据库里状态)
然后编译,布署到IIS,设置端口号,可以默认的80,此IIS的IP与服务器端口要填入中控考勤机,具体从下图进入,
进入考勤机通讯设置,ADMS设置,输入服务器的IP地址与端口号。
中控的其它型号设置步骤基本相似,新版不叫ADMS是Web服务,但都是在通讯设置里。
带3G或4G卡的考勤机设置方法一致。
如果是广域网连接,即异地连接:
大公司都是由资讯解析域名,将域名与端口号提交给你,你直接设置到考勤机即可。
小公司都要自己操作:
操作方法如下:
你可以购买一台带域名解析的路由器(现在路由器大部分都支持,具体可以购买前咨询路由器厂商)
然后映射端口号到IIS服务器地址,请详见:点击打开链接
动态IP地址上网,需要注册DDSN,注册地址:点击打开链接