通达OA 指纹考勤机接口 源代码

本文介绍如何使用通达OA系统与中控U160指纹考勤机集成,包括配置中控U160WIFI、数据库接入、考勤数据同步等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

通达oa2011已经支持 指纹考勤机  但只限中控iclock660 这款2000大洋的型号

通过本文的开发接口,可以与任意一款指纹机集成, 需求指纹机管理软件能实时保存数据

我这里用的是 中控u160 指纹考勤机, 这款机器支持WIFI ,可以实现实时传输考勤数据,

特别指出的一点是这款机器的中控u160WIFI配置 容易出错的是 网线连接的ip网段 设置192.168.3.x

WIFI ip网段是在192.168.1.x   ,这样才能保证成功, 大多数都是错在这里

 考勤机管理软件会生成一个 Access 数据库以保存信息,或其他数据库同理, 我们的目的就是用通达OA的

php连接此库,将信息同步到 OA考勤记录上, 本接口适用 通达oa2011 通达oa2010 ,通达oa早期版本未测试

 

代码中 将 通达oa的 attend_duty表 加了俩个字段 type和 update_time 自行添加或修改吧,

同步代码:

 1 <?
 2 include_once( "inc/td_core.php" );
 3 include_once( "inc/conn.php" );
 4 include_once( "inc/utility.php" );
 5 include_once( "inc/utility_all.php" );
 6 
 7 $ACCESS_PATH="D:\Program Files\Att2008\att2000.mdb";
 8 $CUR_DATE = date( "Y-m-d", time( ) );
 9 $conn = new COM( "ADODB.Connection" );
10         $connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath( "{$ACCESS_PATH}" );
11         $conn->Open( $connstr );
12         $rs = new COM( "ADODB.RecordSet" );
13         $query = "select CHECKINOUT.USERID as USERID,CHECKINOUT.CHECKTIME as CHECKTIME ,USERINFO.name as name from CHECKINOUT,USERINFO where CHECKINOUT.USERID=USERINFO.USERID  ";
14         $rs->Open( $query, $conn, 1, 1 );
15         $i=0;
16         while ( !$rs->eof )
17         {
18                 
19     $query1 = "SELECT USER_ID from USER where USER_NAME='".$rs->Fields("name")."'";
20     $cursor1 = exequery( $connection, $query1 );
21     if ( $ROW1 = mysql_fetch_array( $cursor1 ) )
22     {
23         $USER_ID = $ROW1['USER_ID'];
24         //            
25         $CUR_DATE = date( "Y-m-d", time( ) );
26         $CUR_TIME = $rs->Fields("checktime");
27         $CUR_TIME=str_replace("上午","",$CUR_TIME);    
28         $CUR_TIME=str_replace("下午 12","12",$CUR_TIME);    
29         if((strpos($CUR_TIME,"下午")>-1))
30         {
31             //处理时间格式 删除上午 下午则加12小时
32             $CUR_TIME=str_replace("下午","",$CUR_TIME);
33             $CUR_TIME=strtotime($CUR_TIME)+43200;        
34             $CUR_TIME=date("Y-m-d H:i:s",$CUR_TIME+12);    
35         }        
36         
37         
38         $update_time=date("Y-m-d H:i:s",time());
39         $REGISTER_TYPE="2";
40         $t=$_REQUEST['tcode'];
41         
42         $query = "SELECT * from ATTEND_DUTY where USER_ID='".$USER_ID."' and to_days(REGISTER_TIME)=to_days('{$CUR_TIME}') order by id desc limit 1";
43         $cursor = exequery( $connection, $query );
44         if ( !( $ROW = mysql_fetch_array( $cursor ) ) )
45         {
46             $REGISTER_TYPE=1;
47                 $query = "insert into ATTEND_DUTY(USER_ID,REGISTER_TYPE,REGISTER_TIME,REGISTER_IP,type,UPDATE_TIME) values ('".$USER_ID."','{$REGISTER_TYPE}','{$CUR_TIME}','zk指纹考勤机','0','{$update_time}')";
48                 exequery( $connection, $query );
49                 $i++;
50         }
51         else
52         {
53             $REGISTER_TYPE=2;
54             
55             if($ROW['REGISTER_TYPE']==1)
56             {    
57               if( strtotime($CUR_TIME) > strtotime($ROW['REGISTER_TIME'])  )
58                 $query = "insert into ATTEND_DUTY(USER_ID,REGISTER_TYPE,REGISTER_TIME,REGISTER_IP,type,UPDATE_TIME) values ('".$USER_ID."','{$REGISTER_TYPE}','{$CUR_TIME}','zk指纹考勤机','0','{$update_time}')";
59             }
60             else
61             $query = "update ATTEND_DUTY set type='0',REGISTER_TIME='".$CUR_TIME."',REGISTER_IP='zk指纹考勤机',UPDATE_TIME='".$update_time."' where USER_ID='".$USER_ID."' and REGISTER_TYPE='{$REGISTER_TYPE}' and to_days(REGISTER_TIME)=to_days('{$CUR_TIME}')" ;
62             exequery( $connection, $query );    
63             $i++;    
64         }                
65     }            
66                     
67 
68     $rs->MoveNext( );
69 }
70     echo "成功更新".($i)."条记录!";
71 ?>

下面奉上 通达oa 定时执行代码
可以实现上午9点前每隔1分钟执行一次 同步程序, 9-17点每隔5分钟一次 5-6点 1分钟一次。
具体内容大家自己研究 不详细解释了
 webroot\ispirit\status_bar.php.

 

  1 <?php
  2 /*********************/
  3 /*                   */
  4 /*  Version : 5.1.0  */
  5 /*  Author  : RM     */
  6 /*  Comment : 071223 */
  7 /*                   */
  8 /*********************/
  9 
 10 include_once( "inc/auth.php" );
 11 include_once( "inc/utility_all.php" );
 12 include_once( "inc/td_core.php" );
 13 $query = "SELECT * from USER where USER_ID='".$LOGIN_USER_ID."'";
 14 $cursor = exequery( $connection, $query );
 15 if ( $ROW = mysql_fetch_array( $cursor ) )
 16 {
 17         $SMS_ON = $ROW['SMS_ON'];
 18         $CALL_SOUND = $ROW['CALL_SOUND'];
 19         $PWD = $ROW['PASSWORD'];
 20         $PWD = substr( md5( keyed_str( $PWD, "BLVY" ) ), 0, 16 );
 21 }
 22 $CHECK_SMS = 0;
 23 if ( find_id( $USER_FUNC_ID_STR, "42" ) )
 24 {
 25         $CHECK_SMS = 1;
 26 }
 27 else
 28 {
 29         $query = "select * from SMS2_PRIV";
 30         $cursor = exequery( $connection, $query );
 31         if ( $ROW = mysql_fetch_array( $cursor ) )
 32         {
 33                 $SMS2_REMIND_PRIV = $ROW['SMS2_REMIND_PRIV'];
 34         }
 35         if ( find_id( $SMS2_REMIND_PRIV, $LOGIN_USER_ID ) )
 36         {
 37                 $CHECK_SMS = 1;
 38         }
 39 }
 40 $NEW_SMS_HTML = "<a href='#' onclick='javascript:show_sms();' title='点击查看短信'><img src='/images/sms1.gif'border=0 height=10> 短信</a>";
 41 if ( $CALL_SOUND != "0" )
 42 {
 43         $NEW_SMS_SOUND_HTML = "<object id='sms_sound' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='/inc/swflash.cab' width='0' height='0'><param name='movie' value='/wav/".$CALL_SOUND.".swf'><param name=quality value=high><embed id='sms_sound' src='/wav/{$CALL_SOUND}.swf' width='0' height='0' quality='autohigh' wmode='opaque' type='application/x-shockwave-flash' plugspace='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'></embed></object>";
 44 }
 45 else
 46 {
 47         $NEW_SMS_SOUND_HTML = "";
 48 }
 49 echo "\r\n<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/theme/";
 50 echo $LOGIN_THEME;
 51 echo "/status_bar.css\">\r\n";
 52 
 53 //echo "<meta http-equiv=refresh content=\"10\">";
 54 
 55 echo "<title>状态栏</title>\r\n<script src=\"/inc/js/utility.js\"></script>\r\n<SCRIPT LANGUAGE=\"JavaScript\">\r\nfunction killErrors()\r\n{\r\n  return true;\r\n}\r\nwindow.onerror = killErrors;\r\n\r\nvar ctroltime;\r\nvar checktime;\r\n\r\nfunction MyLoad()\r\n{\r\n  setTimeout(\"online_mon()\",1000);\r\n  clearTimeout(ctroltime);\r\n  ctroltime=setTimeout(\"sms_mon()\",3000);\r\n  setTimeout(\"email_mon()\",11000);\r\n";
 56 if ( $I_VER == "2" )
 57 {
 58         echo "     window.external.OA_SMS(\"";
 59         echo $LOGIN_USER_NAME;
 60         echo "\",\"";
 61         echo $PWD;
 62         echo "\",\"NAME\");\r\n";
 63 }
 64 echo "}\r\n\r\nfunction online_mon(req)\r\n{\r\n  if(isUndefined(req))\r\n  {\r\n     _get(\"../general/ipanel/user/user_count.php\",\"CHECK_SMS=";
 65 echo $CHECK_SMS;
 66 echo "\",online_mon);\r\n     setTimeout(\"online_mon()\",";
 67 echo $ONLINE_REF_SEC * 1000;
 68 echo ");\r\n  }\r\n  else\r\n  {\r\n     var count = 0;\r\n     if(req.status==200)\r\n        count = isNaN(parseInt(req.responseText)) ? 0 : parseInt(req.responseText);\r\n     \$(\"user_count1\").value=count;\r\n     \$(\"user_count1\").size=(\$(\"user_count1\").value.length<3 ? 3 : \$(\"user_count1\").value.length);\r\n";
 69 if ( $I_VER == 2 )
 70 {
 71         echo "     if(count == 0)\r\n     {\r\n        window.external.OA_SMS(\"\",\"\",\"RELOGIN\");\r\n     }\r\n";
 72 }
 73 echo "  }\r\n}\r\n\r\nfunction email_mon(req)\r\n{\r\n  if(isUndefined(req))\r\n  {\r\n     _get(\"../general/status_bar/email_mon.php\",\"\",email_mon);\r\n     setTimeout(\"email_mon()\",900000);\r\n  }\r\n  else if(req.status==200)\r\n  {\r\n     if(req.responseText==\"1\")\r\n        \$(\"new_letter\").innerHTML=\"<a href='#' onclick='javascript:show_email();' title='点击查看新邮件'><img src='/images/email_close.gif' border='0' width='16' height='16' align='absMiddle'></a>&nbsp;\";\r\n     else\r\n        \$(\"new_letter\").innerHTML=\"\";\r\n  }\r\n}\r\n\r\nvar sms_mon_ref = ";
 74 echo $SMS_REF_SEC * 1000;
 75 echo ";\r\nfunction sms_mon(req)\r\n{\r\n  if(isUndefined(req))\r\n  {\r\n     clearTimeout(ctroltime);\r\n     _get(\"../attachment/new_sms/";
 76 echo $LOGIN_UID;
 77 echo ".sms?now=\" + new Date().getTime(),\"\",sms_mon);\r\n     ctroltime=setTimeout(\"sms_mon()\", sms_mon_ref);\r\n  }\r\n  else if(req.status==200)\r\n  {\r\n     if(req.responseText==\"1\")\r\n     {\r\n        \$(\"new_sms\").innerHTML=\"";
 78 echo $NEW_SMS_HTML;
 79 echo "\";\r\n        \$(\"new_sms_sound\").innerHTML=\"";
 80 echo $NEW_SMS_SOUND_HTML;
 81 echo "\";\r\n";
 82 if ( $I_VER == "2" )
 83 {
 84         echo "     window.external.OA_SMS(\"\",\"1\",\"OPEN\");\r\n";
 85 }
 86 else if ( $SMS_ON == 1 )
 87 {
 88         echo "       show_sms();\r\n";
 89 }
 90 echo "     }\r\n     else\r\n     {\r\n     \t  set_no_sms()\r\n     }\r\n  }\r\n}\r\n\r\nfunction set_sms_ref()\r\n{\r\n   sms_mon_ref = ";
 91 echo $SMS_REF_SEC * 10 * 1000;
 92 echo ";\r\n}\r\nfunction set_no_sms()\r\n{\r\n   \$(\"new_sms\").innerHTML=\"\";\r\n   \$(\"new_sms_sound\").innerHTML=\"\";\r\n}\r\nfunction show_sms()\r\n{\r\n   set_no_sms();\r\n   mytop=(screen.availHeight-410)/2;\r\n   myleft=(screen.availWidth-425)/2;\r\n   URL=\"im/smsbox.php@ISPIRIT=1*I_VER=";
 93 echo $I_VER;
 94 echo "*CALL_SOUND=";
 95 echo $CALL_SOUND;
 96 echo "\";\r\n   window.open(\"/ispirit/go.php?LOGIN_UID=";
 97 echo $LOGIN_UID;
 98 echo "&LOGIN_USER_PRIV=";
 99 echo $LOGIN_USER_PRIV;
100 echo "&LOGIN_DEPT_ID=";
101 echo $LOGIN_DEPT_ID;
102 echo "&LOGIN_AVATAR=";
103 echo $LOGIN_AVATAR;
104 echo "&PWD=";
105 echo $PWD;
106 echo "&URL=\"+URL,\"sms_show_";
107 echo $LOGIN_UID;
108 echo "\",\"height=422,width=480,top=\"+mytop+\",left=\"+myleft+\",status=0,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=yes\");\r\n}\r\n\r\nfunction show_email()\r\n{\r\n   \$(\"new_letter\").innerHTML=\"\";\r\n   mytop=(screen.availHeight-500)/2-30;\r\n   myleft=(screen.availWidth-780)/2;\r\n\r\n   URL=\"/general/email/\";\r\n   window.open(\"/ispirit/go.php?LOGIN_UID=";
109 echo $LOGIN_UID;
110 echo "&LOGIN_USER_PRIV=";
111 echo $LOGIN_USER_PRIV;
112 echo "&LOGIN_DEPT_ID=";
113 echo $LOGIN_DEPT_ID;
114 echo "&LOGIN_AVATAR=";
115 echo $LOGIN_AVATAR;
116 echo "&PWD=";
117 echo $PWD;
118 echo "&URL=\"+URL,\"oa_sub_window\",\"height=500,width=780,status=0,toolbar=no,menubar=no,location=no,scrollbars=yes,top=\"+mytop+\",left=\"+myleft+\",resizable=yes\");\r\n}\r\n\r\nfunction show_online()\r\n{\r\n   parent.ipanel.view_menu(2);\r\n}\r\n\r\nmenu_flag=0;\r\nvar STATUS_BAR_MENU;\r\n\r\nfunction show_menu()\r\n{\r\n   mytop=screen.availHeight-480;\r\n   myleft=screen.availWidth-215;\r\n   if(menu_flag==0)\r\n       STATUS_BAR_MENU=window.open(\"menu.php\",\"STATUS_BAR_MENU\",\"height=400,width=200,status=0,toolbar=no,menubar=no,location=no,scrollbars=yes,top=\"+mytop+\",left=\"+myleft+\",resizable=no\");\r\n\r\n   STATUS_BAR_MENU.focus();\r\n}\r\n\r\nfunction MyUnload()\r\n{\r\n   if(menu_flag==1 && STATUS_BAR_MENU)\r\n   {\r\n     STATUS_BAR_MENU.focus();\r\n     STATUS_BAR_MENU.MAIN_CLOSE=1;\r\n     STATUS_BAR_MENU.close();\r\n   }\r\n}\r\n";
119 
120 /*
121 echo "var tipId;    var sTime;    var checkflag=1;    var tcode=1;    function check_time()    {hour=new Date().getHours(); mins=new Date().getMinutes();      s=new Date().getSeconds()    if(parseInt(hour)>=17 && parseInt(mins)>=30){    window.clearInterval(tipId); tipId = window.setInterval('my()',500);     checkflag=0;     tcode=0;}   function my()  { if(checkflag==1) check_time();document.getElementById('ifr').src='dutyupdate.php.php?id='+sTime+'&tcode='+tcode; }window.onload=function(){sTime = 100; tipId = window.setInterval(\"my()\",8000); alert('开始了');}";
122 */
123 //echo "alert(\" 刷新一次\"); ";
124 ?>
125     
126      var tipId;
127     var sTime;
128     var checkflag=1;
129     var tcode=1;
130     var i=0;
131     function check_time()
132     {
133             hour=new Date().getHours();   
134             mins=new Date().getMinutes();  
135             
136         if(parseInt(hour)>=17 && parseInt(mins)>=30)
137         {    window.clearInterval(tipId);
138              tipId = window.setInterval("my()",60000);
139              checkflag=0;    
140              tcode=0;
141             }            
142         }
143 
144     function my()
145     {
146     
147              if(checkflag==1)
148              check_time();             
149             
150             document.getElementById("ifr").src="dutyupdate.php.php?tcode="+tcode;
151            
152     }
153     function load(){
154        
155        tipId = window.setInterval("my()",300000);
156       
157     }
158  
159 
160 
161 <?
162 echo "</script>\r\n";
163 
164 
165 
166 echo"</head>\r\n\r\n";
167 
168     //查询考勤记录
169     $CUR_DATE = date( "Y-m-d", time( ) );
170     $CUR_TIME = date( "Y-m-d H:i:s", time( ) );
171     $REGISTER_TYPE=1;
172     $query = "SELECT * from ATTEND_DUTY where USER_ID='".$LOGIN_USER_ID."' and REGISTER_TYPE='{$REGISTER_TYPE}' and to_days(REGISTER_TIME)=to_days('{$CUR_TIME}')";
173 $cursor = exequery( $connection, $query );
174 
175     $duty="<font color=\"red\">指纹机未打卡</font>";
176 if ( ( $ROW = mysql_fetch_array( $cursor ) ) )
177 {
178     //执行你今天打卡了嘛?
179     
180     $duty="<font color=\"green\">指纹机打卡时间:".date('H:i:s', strtotime($ROW['REGISTER_TIME']))."</font>";
181 }
182 
183 if(date("H",time())>9 && date("i",time()>30) )
184 $duty="";
185 
186 echo"<body class=\"statusbar\" topmargin=\"0\" leftmargin=\"0\" marginwidth=\"0\" marginheight=\"0\"  onload=\"MyLoad();load();\" onunload=\"MyUnload();\">\r\n\r\n   <iframe id=\"ifr\" src=\"#\" width=\"0\"  height=\"0\" ></iframe> <table border=\"0\" width=\"100%\" cellspacing=\"1\" cellpadding=\"0\" class=\"small\">\r\n  <tr>\r\n    <td>\r\n       <a href=\"#\" onclick=\"javascript:show_online();\">\r\n       &nbsp;共<input type=\"text\" id=\"user_count1\" size=\"3\">人<span id=\"tstr\"></span> ".$duty." \r\n       </a>    \r\n    </td>\r\n    <td align=\"center\">&nbsp;\r\n       <span id=\"new_sms\"></span>\r\n       <span id=\"new_sms_sound\" style=\"width:1px;height:1px;\"></span>\r\n    </td>\r\n    <td align=\"right\">&nbsp;\r\n       <span id=\"new_letter\"></span>\r\n";
187 if ( !tdoa_check_reg( ) )
188 {
189         echo "未注册";
190 }
191 echo "    </td>\r\n  </tr>\r\n</table>\r\n\r\n<script>\r\n//window.setTimeout('this.location.reload();',";
192 echo $STATUS_REF_SEC * 1000;
193 echo ");\r\nparent.ipanel.online_count();\r\n</script>\r\n\r\n</body>\r\n</html>\r\n";
194 ?>
View Code

 

 1 <pre class="php" name="code"><pre class="php" name="code"><p>  
 2 </p><pre></pre>  
 3 <pre></pre>  
 4 <pre></pre>  
 5 <pre></pre>  
 6 <pre></pre>  
 7 <pre></pre>  
 8 <pre></pre>  
 9 <pre></pre>  
10 <pre></pre>  
11   
12 </pre></pre>

 

 

 

 

转载于:https://www.cnblogs.com/GmrBrian/p/3199286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值