陈本栋2013/12/10中控考勤机接口使用说明书指纹考勤机控制服务程序使用说明此接口服务程序适用于中控iClock系列指纹考勤机,指纹算法版本为V10.0适用。如:IClock360,IClock660等。2013-12-101中控考勤机接口使用说明书一、程序文件本接口程序包含三个部分内容,分别是:1、需要升级以及支持系统运行的SQL脚本文件,“支持脚本”目录下两个文件a)201310291201.GPIBDataOut接口调用验证改到函数里.sqlb)支撑表脚本.sql2、MAS接口文件,“App_Data\Interface\zk.fp”目录下,包含:a)empCheckFinger.sql收接到考勤记录后执行的刷卡记录处理脚本b)getEmpList.sql“数据库到设备操作”界面人员列表查询关联脚本c)getEmpTmps.sql“数据库到设备操作”界面同步人员查询关联脚本d)getMacList.sql“设备登记”界面设备列表查询脚本e)getMacType.sql“设备登记”界面设备类型选项脚本f)setEmpFinger.sql从设备传回指纹数据到数据库的处理脚本g)setMachine.sql“设备登记”界面中保存设备信息的处理脚本h)svrCmdQueue.sql“控制服务”查询操作指令的查询脚本i)svrCmdResult.sql“控制服务”指令执行结果反馈脚本j)svrGetQueue.sql“考勤记录接收服务”轮询设备信息及时间脚本k)svrSubsequent.sql“考勤记录接收服务”考勤记录接收后执行脚本3、控制服务程序文件,包括中控SDK6.2.4.0版本,masZkFpSvc目录:a)Sdk文件:中控考勤机驱动及sdk接口API文件i.commpro.dllii.comms.dlliii.plce.dlliv.rscagent.dllv.rscomm.dllvi.tcpcomm.dllvii.usbcomm.dllviii.zkemkeeper.dllix.zkemsdk.dllx.regZkemkeeper.batsdk注册文件b)absLib.dll程序库文件c)employee.sql人员列表SQL暂存文件d)Interop.zkemkeeper.dllsdk引用文件e)mas86.dll程序库文件f)masZkFpSvc.exe主程序文件(控制服务及接收服务)g)masZkFpSvc.exe.config主程序配置文件h)srvInstall.bat主程序注册为NT服务命令文件i)srvUnInstall.bat删除NT注册命令文件2013-12-102二、安装说明1、在SQL查询分析器中执行两个需要升级以及支持系统运行的SQL脚本文件。2、将“MAS接口文件”目录复制到MAS系统的App_Data目录下覆盖,以便在这个目录里添加接口文件。3、将“控制服务程序文件”目录复制到服务器的“C:\ProgramFiles”目录下新建一个“peopleone.com.cn”子目录,完成后目录全称如下:C:\ProgramFiles\peopleone.com.cn\masZkFpSvc4、注:如果服务器是64位系统则在:5、C:\ProgramFiles(x86)\peopleone.com.cn\masZkFpSvc目录下。6、进入到masZkFpSvc目录下,以管理员身份运行其中的:regZkemkeeper.bat文件,以便注册SDK的API。7、进入到masZkFpSvc目录,以管理员身份运行其中的:srvInstall.bat文件,将程序注册为NT服务。三、设置说明1、中控考勤机接口程序有两种工作模式,一是界面模式,二是服务模式。界面模式主要针对管理员使用,用于登记考勤机,对考勤机各项操作进行调试,以及对大批量的考勤机进行初始化操作等。2、进入masZkFpSvc目录,双击运行masZkFpSvc.exe程序文件,如下图:2013-12-1033、先转到“设置”页进行MAS服务地址等设置,如下图:MAS服务地址是访问MAS系统的地址,地址后面的文件指向部分是一样的(“/common/DataProvider.asmx”),不用改,前面的地址根据实际安装的位置进行更改。地址在安装本程序的在IE中必须能访问,访问画面如下:改好后点保存,并关闭程序,重新打开后,可以点“测试连接”按钮进行测试,如果返回版本信息,恭喜了,说明设置成功了。4、回到第一个画面“设备登录&初始化”页面。该界面主要是进行考勤机的登记测试和初始化工作。比如对考勤机进行联机测试,数据初始化等的处理。2013-12-104连接好考勤机后就可以进行联机测试了,选择左边的考勤机列表,可以点住鼠标拖拉多选,也可以按住[Ctrl]或[Shift]后点鼠标多选,然后点联机测试如下图:本页面只是登记考勤机以及对考勤机进行批量初始化操作所用。本页面的所有功能都在按钮上写着了。5、转到设备到数据库操作页面——该页面有“读取刷卡记录”和“读取指纹记录”两功能,这个功能都是从左边选定的考勤机中直接读取数据。2013-12-105读到数据后可以执行,“保存数据到服务器”操作,该操作中刷卡记录的保存,系统调用了MAS接口中的“empCheckFinger.sql”这个脚本进行处理,且当一台考勤机记录处理结束后将调用“svrSubsequent.sql”脚本进行后续处理;而保存指纹记录时则调用了“setEmpFinger.sql”脚本来处理。(注:上述,以及后面文档中所说到的接口脚本,均指本文档第一部分“程序文件”的第2条“MAS接口文件”中所提到的,存在于MAS系统的“App_Data\Interface\zk.fp”目录下接口脚本文件。)其中,保存指纹的脚本,在使用A01Fpt表时,不需要做任何调整。而对于刷卡记录的处理,基于各个公司对业务的需求不同可以进行更改。比如,标准接口中的脚本内容如下:这个脚本说明程序在调用的时候,传入3个参数——1、员工号——考勤机上看到的员工号2、刷卡时间——时间格式是120,即:2013-12-1213:573、刷卡地点——考勤机的IP地址(如果直接进入K07表请加大K0702字段的宽度)接收到刷卡记录后直接插入到考勤刷卡记录表(K07)中去的。这样做有两个缺点,一是如果考勤记录中的,如果我们需要员工号不存在于系统的A01表中,则该刷卡记录就行丢失;二是每笔记录都去执行员工号与A0188的转换处理以及日期时间的转换处理,将会降底执行效率。所以,实际使用中,我们可以建立一张刷卡记录临时表进行过渡处理和原始记录保存操作,这个可以这样做——创建格式一样的两张表,一张为原始刷卡记录表,另一张为刷卡记录处理临时表,在收到刷卡数据时,只往刷卡记录处理临时表只写,这样收多少写多少,不做多余处理,速度会有很大提升。当收完一个考勤机后,系统用调用svrSubsequent.sql脚本,而在这个脚本中,我们再对接收到的记录进行批处理,第一步,原记录倒入到原始刷卡记录表中--员工号,刷卡时间,刷卡地点(考勤机IP)declare@A0188intset@A0188=-1select@A0188=A0188fromA01whereA0190=''{0}''if(@A0188-1)begininsertintoK07(A0188,K0700,K0701,K0702)select@A0188,convert(varchar(20),cast(''{1}''asdatetime),102),convert(varchar(20),cast(''{1}''asdatetime),8),right(''{2}'',6)end2013-12-106去,第二步,与A01表关联向K07表插入数据,第三步,删除临时表中的数据记录。这样的好处是,原始记录保存了,数据一批次在SQL中处理,提高效率。以下是这样的解决方案——第一步,建表——第二步,改刷卡记录接收接口脚本empCheckFinger.sql第三步,改考勤机接收后续处理接口脚本svrSubsequent.sql6、转到数据库到设备操作页面——在这个页面里,可以进行把MAS系统中的人员名单,人员指纹下发到各个考勤机上,也可以处理从各个考勤机中删除指定人员名单的操作。--建立原始记录保存表Createtablepo_kcard_org(recDatedatetimenotnulldefault(getdate()),empCodevarchar(40)notnull,logTimedatetimenotnull,macAddrvarchar(15))--建立记录处理临时表Createtablepo_kcard_tmp(recDatedatetimenotnulldefault(getdate()),empCodevarchar(40)notnull,logTimedatetimenotnull,macAddrvarchar(15))--员工号,刷卡时间,刷卡地点(考勤机IP)insertintopo_kcard_tmp(empCode,logTime,macAddr)select''{0}'',''{1}'','{2}''--输入参数:考勤机IP,记录数declare@MacIPvarchar(15)set@MacIP=''{0}''--1、备份原始记录insertintopo_kcard_orgselect*frompo_kcard_tmpwheremacAddr=@MacIP--2、插入到考勤刷卡记录表insertintoK07(A0188,K0700,K0701,K0702)selectA0188,convert(varchar(20),cast(logTimeasdatetime),102),convert(varchar(20),cast(logTimeasdatetime),8),''macAddr''frompo_kcard_tmp,A01whereempCode=A0190andmacAddr=@MacIP--3、删除临时记录deletepo_kcard_tmpwheremacAddr=@MacIP2013-12-107这里是管理员工具,所以对人员名单的查询过滤直接设计为直接写SQL语句的方案,以便支持更加灵活。如下图所示——查询语句必须有的字段以字段名称是:empCode,empNmae,empProfile,即员工号(即下面表格中的“识别号”),员工姓名,和员工简介这三个字段。对于SQL的条件范围可以随便写。比如上面中的语句是查到所有部门编号在1002下的所有人员,如果我们只要查有指纹记录的人员名单可以在后面加一行条件——变成——从“指纹个数”栏可以看出这个员工在数据库中登记了多枚指纹,如果为0即没有登记过指纹。在表格中选择人员列表进行指纹的上传或删除操作,可以用户鼠标点住拖拉方式多选,也可以使用按住[Ctrl]点鼠标方式挑选,或是按住[Shift]点鼠标方式连续多选,或组合使用,还可以按键盘[Ctrl]+[A]全选。andA0188in(selectA0188fromA01Fpt)selectA0190empCode,A0101empName,CONTENTempProfilefromA01,DEPTCODEwhereA01.Dept_id=DEPTCODE.Dept_idanddept_codelike'1002%'andA0188in(selectA0188fromA01Fpt)2013-12-108按执行上传指纹操作时,如果所选人员的“指纹个数”栏为0,则将只在考勤机上创建该人员的名单,如果指纹大于0则会把所有指纹上传到考勤机上。当员工在分部入职,需要收集其指纹时,可以先下发名单到考勤机上,然后等该员工在考勤机上登记好指纹后,通过上述第5点的操作,把指纹收到在数据库中,以便于再下发到其他考勤机上。四、与MAS无缝接口说明上节设置中说明到中控考勤机接口程