中控考勤机的数据获取

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

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

 <dependency>
            <groupId>jacob</groupId>
            <artifactId>jacob</artifactId>
            <version>3.0.1</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/libs/jacob.jar</systemPath>
        </dependency>

 

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

工具类

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<ZhongKongBean> 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<ZhongKongBean> strList = new ArrayList<ZhongKongBean>();
        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<ZhongKongBean> 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<ZhongKongBean> strList = new ArrayList<ZhongKongBean>();
        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<Map<String, Object>> getUserInfo() {
        List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
        //将用户数据读入缓存中。
        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<String, Object> m = new HashMap<String, Object>();
            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<String, Object> 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<String, Object> m = new HashMap<String, Object>();
            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<String, Object> map = new HashMap<String, Object>();
//        boolean connFlag = sdk.connect("192.168.2.12", 4370);
//        List<ZhongKongBean> strList = new ArrayList<ZhongKongBean>();
//        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<ZhongKongBean> newZkbList = new ArrayList<ZhongKongBean>();
//        List<ZhongKongBean> secZkbList = new ArrayList<ZhongKongBean>();
//        Integer encroNum1 = null;
//        Integer encroNum2 = null;
//        List<Integer> alreadyHaveNum = new ArrayList<Integer>();
//        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<ZhongKongBean> toDataBaseList = new ArrayList<ZhongKongBean>();
//        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<String, Object> map = new HashMap<String, Object>();
        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<ZhongKongBean> strList = new ArrayList<ZhongKongBean>();
        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));
        }

       //后续可以对集合进行加工并保存在数据库,这代码我就不贴上了
}

 

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值