通达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 FilesAtt2008att2000.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分钟一次。
具体内容大家自己研究 不详细解释了
webrootispiritstatus_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 " <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <link rel="stylesheet" type="text/css" href="/theme/"; 50 echo $LOGIN_THEME; 51 echo "/status_bar.css"> "; 52 53 //echo "<meta http-equiv=refresh content="10">"; 54 55 echo "<title>状态栏</title> <script src="/inc/js/utility.js"></script> <SCRIPT LANGUAGE="JavaScript"> function killErrors() { return true; } window.onerror = killErrors; var ctroltime; var checktime; function MyLoad() { setTimeout("online_mon()",1000); clearTimeout(ctroltime); ctroltime=setTimeout("sms_mon()",3000); setTimeout("email_mon()",11000); "; 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"); "; 63 } 64 echo "} function online_mon(req) { if(isUndefined(req)) { _get("../general/ipanel/user/user_count.php","CHECK_SMS="; 65 echo $CHECK_SMS; 66 echo "",online_mon); setTimeout("online_mon()","; 67 echo $ONLINE_REF_SEC * 1000; 68 echo "); } else { var count = 0; if(req.status==200) count = isNaN(parseInt(req.responseText)) ? 0 : parseInt(req.responseText); $("user_count1").value=count; $("user_count1").size=($("user_count1").value.length<3 ? 3 : $("user_count1").value.length); "; 69 if ( $I_VER == 2 ) 70 { 71 echo " if(count == 0) { window.external.OA_SMS("","","RELOGIN"); } "; 72 } 73 echo " } } function email_mon(req) { if(isUndefined(req)) { _get("../general/status_bar/email_mon.php","",email_mon); setTimeout("email_mon()",900000); } else if(req.status==200) { if(req.responseText=="1") $("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> "; else $("new_letter").innerHTML=""; } } var sms_mon_ref = "; 74 echo $SMS_REF_SEC * 1000; 75 echo "; function sms_mon(req) { if(isUndefined(req)) { clearTimeout(ctroltime); _get("../attachment/new_sms/"; 76 echo $LOGIN_UID; 77 echo ".sms?now=" + new Date().getTime(),"",sms_mon); ctroltime=setTimeout("sms_mon()", sms_mon_ref); } else if(req.status==200) { if(req.responseText=="1") { $("new_sms").innerHTML=""; 78 echo $NEW_SMS_HTML; 79 echo ""; $("new_sms_sound").innerHTML=""; 80 echo $NEW_SMS_SOUND_HTML; 81 echo ""; "; 82 if ( $I_VER == "2" ) 83 { 84 echo " window.external.OA_SMS("","1","OPEN"); "; 85 } 86 else if ( $SMS_ON == 1 ) 87 { 88 echo " show_sms(); "; 89 } 90 echo " } else { set_no_sms() } } } function set_sms_ref() { sms_mon_ref = "; 91 echo $SMS_REF_SEC * 10 * 1000; 92 echo "; } function set_no_sms() { $("new_sms").innerHTML=""; $("new_sms_sound").innerHTML=""; } function show_sms() { set_no_sms(); mytop=(screen.availHeight-410)/2; myleft=(screen.availWidth-425)/2; URL="im/smsbox.php@ISPIRIT=1*I_VER="; 93 echo $I_VER; 94 echo "*CALL_SOUND="; 95 echo $CALL_SOUND; 96 echo ""; 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"); } function show_email() { $("new_letter").innerHTML=""; mytop=(screen.availHeight-500)/2-30; myleft=(screen.availWidth-780)/2; URL="/general/email/"; 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"); } function show_online() { parent.ipanel.view_menu(2); } menu_flag=0; var STATUS_BAR_MENU; function show_menu() { mytop=screen.availHeight-480; myleft=screen.availWidth-215; if(menu_flag==0) 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"); STATUS_BAR_MENU.focus(); } function MyUnload() { if(menu_flag==1 && STATUS_BAR_MENU) { STATUS_BAR_MENU.focus(); STATUS_BAR_MENU.MAIN_CLOSE=1; STATUS_BAR_MENU.close(); } } "; 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> "; 163 164 165 166 echo"</head> "; 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();"> <iframe id="ifr" src="#" width="0" height="0" ></iframe> <table border="0" width="100%" cellspacing="1" cellpadding="0" class="small"> <tr> <td> <a href="#" onclick="javascript:show_online();"> 共<input type="text" id="user_count1" size="3">人<span id="tstr"></span> ".$duty." </a> </td> <td align="center"> <span id="new_sms"></span> <span id="new_sms_sound" style="1px;height:1px;"></span> </td> <td align="right"> <span id="new_letter"></span> "; 187 if ( !tdoa_check_reg( ) ) 188 { 189 echo "未注册"; 190 } 191 echo " </td> </tr> </table> <script> //window.setTimeout('this.location.reload();',"; 192 echo $STATUS_REF_SEC * 1000; 193 echo "); parent.ipanel.online_count(); </script> </body> </html> "; 194 ?>
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>