通達OA 指紋考勤機接口 源代碼


 

通達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>

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM