中控考勤机的数据获取

您所在的位置:网站首页 zkteco考勤机怎么导入数据 中控考勤机的数据获取

中控考勤机的数据获取

2023-08-05 17:00| 来源: 网络整理| 查看: 265

因为公司觉得中控考勤机的数据管理软件不好用,于是决定自己做一个.

一,首先需要下载中控机的API JAR包,我这里是下载好后放在项目里直接MAVEVN引用的.具体方法可以见我之前的博客.

jacob jacob 3.0.1 system ${project.basedir}/libs/jacob.jar

 

二.打通中控考勤机的代码

工具类

package com.cosun.cosunp.tool; import com.cosun.cosunp.entity.ZhongKongBean; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import java.text.SimpleDateFormat; import java.util.*; /** * @author:homey Wong * @Date: 2019/10/7 上午 11:20 * @Description: * @Modified By: * @Modified-date: */ public class ZkemSDKUtils { private static ActiveXComponent zkem = new ActiveXComponent("zkemkeeper.ZKEM.1"); public static boolean connect(String address, int port) { boolean result = zkem.invoke("Connect_NET", address, port).getBoolean(); return result; } public static boolean readGeneralLogData() { boolean result = zkem.invoke("ReadGeneralLogData", 1).getBoolean(); return result; } public static boolean readLastestLogData(Date lastest) { boolean result = zkem.invoke("ReadLastestLogData", 2018 - 07 - 24).getBoolean(); return result; } public static List getGeneralLogData(String fromDate, String endDate) { Variant dwMachineNumber = new Variant(1, true);//机器号 Variant dwEnrollNumber = new Variant("", true); Variant dwVerifyMode = new Variant(0, true); Variant dwInOutMode = new Variant(0, true); Variant dwYear = new Variant(0, true); Variant dwMonth = new Variant(0, true); Variant dwDay = new Variant(0, true); Variant dwHour = new Variant(0, true); Variant dwMinute = new Variant(0, true); Variant dwSecond = new Variant(0, true); Variant dwWorkCode = new Variant(0, true); List strList = new ArrayList(); boolean newresult = false; try { do { Variant vResult = Dispatch.call(zkem, "SSR_GetGeneralLogData", dwMachineNumber, dwEnrollNumber, dwVerifyMode, dwInOutMode, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond, dwWorkCode); newresult = vResult.getBoolean(); if (newresult) { String enrollNumber = dwEnrollNumber.getStringRef(); //如果没有编号,则跳过。 if (enrollNumber == null || enrollNumber.trim().length() == 0) continue; String month = dwMonth.getIntRef() + ""; String day = dwDay.getIntRef() + ""; if (dwMonth.getIntRef() < 10) { month = "0" + dwMonth.getIntRef(); } if (dwDay.getIntRef() < 10) { day = "0" + dwDay.getIntRef(); } String validDate = dwYear.getIntRef() + "-" + month + "-" + day; SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd"); Date fromDatedateTime = sm.parse(fromDate); Date endDatedateTime = sm.parse(endDate); Date valiDateDate = sm.parse(validDate); if ((endDatedateTime.after(valiDateDate) && fromDatedateTime.before(valiDateDate))) { ZhongKongBean m = new ZhongKongBean(); m.setEnrollNumber(Integer.valueOf(enrollNumber)); m.setTime(dwYear.getIntRef() + "-" + dwMonth.getIntRef() + "-" + dwDay.getIntRef() + " " + dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef()); m.setDateStr(dwYear.getIntRef() + "-" + dwMonth.getIntRef() + "-" + dwDay.getIntRef()); m.setTimeStr(dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef()); m.setVerifyMode(dwVerifyMode.getIntRef()); m.setInOutMode(dwInOutMode.getIntRef()); m.setYear(dwYear.getIntRef()); m.setMonth(dwMonth.getIntRef() + ""); m.setDay(dwDay.getIntRef()); m.setHour(dwHour.getIntRef()); m.setMinute(dwMinute.getIntRef()); m.setSecond(dwSecond.getIntRef()); strList.add(m); } } } while (newresult == true); } catch (Exception e) { e.printStackTrace(); } return strList; } public static List getGeneralLogData(String beforDay, Integer num) { Variant dwMachineNumber = new Variant(1, true);//机器号 Variant dwEnrollNumber = new Variant("", true); Variant dwVerifyMode = new Variant(0, true); Variant dwInOutMode = new Variant(0, true); Variant dwYear = new Variant(0, true); Variant dwMonth = new Variant(0, true); Variant dwDay = new Variant(0, true); Variant dwHour = new Variant(0, true); Variant dwMinute = new Variant(0, true); Variant dwSecond = new Variant(0, true); Variant dwWorkCode = new Variant(0, true); List strList = new ArrayList(); boolean newresult = false; try { do { Variant vResult = Dispatch.call(zkem, "SSR_GetGeneralLogData", dwMachineNumber, dwEnrollNumber, dwVerifyMode, dwInOutMode, dwYear, dwMonth, dwDay, dwHour, dwMinute, dwSecond, dwWorkCode); newresult = vResult.getBoolean(); if (newresult) { String enrollNumber = dwEnrollNumber.getStringRef(); //如果没有编号,则跳过。 if (enrollNumber == null || enrollNumber.trim().length() == 0) continue; String month = dwMonth.getIntRef() + ""; String day = dwDay.getIntRef() + ""; if (dwMonth.getIntRef() < 10) { month = "0" + dwMonth.getIntRef(); } if (dwDay.getIntRef() < 10) { day = "0" + dwDay.getIntRef(); } String validDate = dwYear.getIntRef() + "-" + month + "-" + day; SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat ti = new SimpleDateFormat("HH:mm:ss"); Date endDatedateTime = sm.parse(beforDay); Date valiDateDate = sm.parse(validDate); if (valiDateDate.equals(endDatedateTime)) { ZhongKongBean m = new ZhongKongBean(); m.setEnrollNumber(Integer.valueOf(enrollNumber)); m.setTime(dwYear.getIntRef() + "-" + dwMonth.getIntRef() + "-" + dwDay.getIntRef() + " " + dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef()); m.setDateStr(dwYear.getIntRef() + "-" + dwMonth.getIntRef() + "-" + dwDay.getIntRef()); m.setTimeStr(dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef()); m.setTimeTime(ti.parse(dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef())); m.setYearMonth(dwYear.getIntRef() + "-" + dwMonth.getIntRef()); m.setVerifyMode(dwVerifyMode.getIntRef()); m.setInOutMode(dwInOutMode.getIntRef()); m.setYear(dwYear.getIntRef()); m.setMonth(dwMonth.getIntRef() + ""); m.setDay(dwDay.getIntRef()); m.setHour(dwHour.getIntRef()); m.setMinute(dwMinute.getIntRef()); m.setSecond(dwSecond.getIntRef()); m.setMachineNum(num); strList.add(m); } } } while (newresult == true); } catch (Exception e) { e.printStackTrace(); } return strList; } public static List getUserInfo() { List resultList = new ArrayList(); //将用户数据读入缓存中。 boolean result = zkem.invoke("ReadAllUserID", 1).getBoolean(); Variant v0 = new Variant(1); Variant sdwEnrollNumber = new Variant("", true); Variant sName = new Variant("", true); Variant sPassword = new Variant("", true); Variant iPrivilege = new Variant(0, true); Variant bEnabled = new Variant(false, true); while (result) { //从缓存中读取一条条的用户数据 result = zkem.invoke("SSR_GetAllUserInfo", v0, sdwEnrollNumber, sName, sPassword, iPrivilege, bEnabled).getBoolean(); //如果没有编号,跳过。 String enrollNumber = sdwEnrollNumber.getStringRef(); if (enrollNumber == null || enrollNumber.trim().length() == 0) continue; //由于名字后面会产生乱码,所以这里采用了截取字符串的办法把后面的乱码去掉了,以后有待考察更好的办法。 //只支持2位、3位、4位长度的中文名字。 String name = sName.getStringRef(); if (sName.getStringRef().length() > 4) { name = sName.getStringRef().substring(0, 4); } //如果没有名字,跳过。 if (name.trim().length() == 0) continue; Map m = new HashMap(); m.put("EnrollNumber", enrollNumber); m.put("Name", name); m.put("Password", sPassword.getStringRef()); m.put("Privilege", iPrivilege.getIntRef()); m.put("Enabled", bEnabled.getBooleanRef()); resultList.add(m); } return resultList; } public static boolean setUserInfo(String number, String name, String password, int isPrivilege, boolean enabled) { Variant v0 = new Variant(1); Variant sdwEnrollNumber = new Variant(number, true); Variant sName = new Variant(name, true); Variant sPassword = new Variant(password, true); Variant iPrivilege = new Variant(isPrivilege, true); Variant bEnabled = new Variant(enabled, true); boolean result = zkem.invoke("SSR_SetUserInfo", v0, sdwEnrollNumber, sName, sPassword, iPrivilege, bEnabled).getBoolean(); return result; } public static Map getUserInfoByNumber(String number) { Variant v0 = new Variant(1); Variant sdwEnrollNumber = new Variant(number, true); Variant sName = new Variant("", true); Variant sPassword = new Variant("", true); Variant iPrivilege = new Variant(0, true); Variant bEnabled = new Variant(false, true); boolean result = zkem.invoke("SSR_GetUserInfo", v0, sdwEnrollNumber, sName, sPassword, iPrivilege, bEnabled).getBoolean(); if (result) { Map m = new HashMap(); m.put("EnrollNumber", number); m.put("Name", sName.getStringRef()); m.put("Password", sPassword.getStringRef()); m.put("Privilege", iPrivilege.getIntRef()); m.put("Enabled", bEnabled.getBooleanRef()); return m; } return null; } public static void main(String[] args) { // ZkemSDKUtils sdk = new ZkemSDKUtils(); // Map map = new HashMap(); // boolean connFlag = sdk.connect("192.168.2.12", 4370); // List strList = new ArrayList(); // if (connFlag) { // boolean flag = sdk.readGeneralLogData(); // strList.addAll(sdk.getGeneralLogData("2019-10-07")); // } // // boolean connFlag1 = sdk.connect("192.168.2.10", 4370); // if (connFlag1) { // boolean flag = sdk.readGeneralLogData(); // strList.addAll(sdk.getGeneralLogData("2019-10-07")); // } // // boolean connFlag2 = sdk.connect("192.168.2.11", 4370); // if (connFlag2) { // boolean flag = sdk.readGeneralLogData(); // strList.addAll(sdk.getGeneralLogData("2019-10-07")); // } // // boolean connFlag3 = sdk.connect("192.168.0.202", 4370); // if (connFlag3) { // boolean flag = sdk.readGeneralLogData(); // strList.addAll(sdk.getGeneralLogData("2019-10-07")); // } // // // //拼装之前排序 // List newZkbList = new ArrayList(); // List secZkbList = new ArrayList(); // Integer encroNum1 = null; // Integer encroNum2 = null; // List alreadyHaveNum = new ArrayList(); // for (int a = 0; a < strList.size(); a++) { // encroNum1 = strList.get(a).getEnrollNumber(); // if (!alreadyHaveNum.contains(encroNum1)) { // for (int b = 0; b < strList.size(); b++) { // encroNum2 = strList.get(b).getEnrollNumber(); // if (encroNum1.equals(encroNum2)) { // secZkbList.add(strList.get(b)); // } // } // // for (int i = 0; i < secZkbList.size() - 1; i++) { // for (int j = 0; j < secZkbList.size() - 1 - i; j++) { // if (secZkbList.get(j).getTimeTime().after(secZkbList.get(j + 1).getTimeTime())) { // ZhongKongBean temp = secZkbList.get(j + 1); // secZkbList.set(j + 1, secZkbList.get(j)); // secZkbList.set(j, temp); // } // } // } // alreadyHaveNum.add(encroNum1); // newZkbList.addAll(secZkbList); // secZkbList.clear(); // } // secZkbList.clear(); // } // // ZhongKongBean zkb01 = null; // ZhongKongBean zkb02 = null; // ZhongKongBean zkb = null; // List toDataBaseList = new ArrayList(); // boolean isHave; // for (int a = 0; a < newZkbList.size(); a++) { // zkb01 = newZkbList.get(a); // newZkbList.remove(a); // a--; // isHave = false; // for (int b = 0; b < toDataBaseList.size(); b++) { // zkb02 = toDataBaseList.get(b); // if (zkb01.getEnrollNumber().equals(zkb02.getEnrollNumber()) && zkb01.getDateStr().equals(zkb02.getDateStr())) { // isHave = true; // zkb02.setTimeStr(zkb02.getTimeStr() + " " + zkb01.getTimeStr()); // } // } // if (!isHave) { // zkb = new ZhongKongBean(); // zkb.setEnrollNumber(zkb01.getEnrollNumber()); // zkb.setDateStr(zkb01.getDateStr()); // zkb.setTimeStr(zkb01.getTimeStr()); // toDataBaseList.add(zkb); // } // } // // System.out.println(toDataBaseList.size() + "***"); // for (int a = 0; a < toDataBaseList.size(); a++) { // System.out.println(toDataBaseList.get(a).getEnrollNumber() + " " + toDataBaseList.get(a).getDateStr() + " " // + toDataBaseList.get(a).getTimeStr()); // } } }

从中控机上拿数据代码

public void getBeforeDayZhongKongData() throws Exception { //String beforDay = DateUtil.getBeforeDay(); String beforDay = "2019-11-08"; String[] afterDay = beforDay.split("-"); Map map = new HashMap(); boolean connFlag = ZkemSDKUtils.connect("192.168.2.12", 4370); // 1办公室 0.202 2 2号厂房钣金部 2.10 3 3号厂房门口 2.11 4.3号厂房精工部 2.12 List strList = new ArrayList(); if (connFlag) { boolean flag = ZkemSDKUtils.readGeneralLogData(); strList.addAll(ZkemSDKUtils.getGeneralLogData(beforDay, 4)); } boolean connFlag1 = ZkemSDKUtils.connect("192.168.2.10", 4370); if (connFlag1) { boolean flag = ZkemSDKUtils.readGeneralLogData(); strList.addAll(ZkemSDKUtils.getGeneralLogData(beforDay, 2)); } boolean connFlag2 = ZkemSDKUtils.connect("192.168.2.11", 4370); if (connFlag2) { boolean flag = ZkemSDKUtils.readGeneralLogData(); strList.addAll(ZkemSDKUtils.getGeneralLogData(beforDay, 3)); } boolean connFlag3 = ZkemSDKUtils.connect("192.168.0.202", 4370); if (connFlag3) { boolean flag = ZkemSDKUtils.readGeneralLogData(); strList.addAll(ZkemSDKUtils.getGeneralLogData(beforDay, 1)); } //后续可以对集合进行加工并保存在数据库,这代码我就不贴上了 }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3