• zkteco iface702 中控考勤机java开发步骤二---获取考勤机 的考勤数据


    1.工具类---ZkemSDKUtils 

    package com.XXX.gasstation.commons.utils;
    
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    import com.XXX.gasstation.commons.utils.lang.DateUtils;
    import net.sf.json.JSONObject;
    import java.util.*;
    
    /**
     * @ClassName:${type_name}
     * @Description:${todo}(连接、获取考勤机数据)
     * @author: ZHOUPAN
     * @date ${date} ${time}
     * @Copyright: 2018 www.zsplat.com Inc. All rights reserved.
     * ${tags}
     */
    public class ZkemSDKUtils {
    
        //zkemkeeper.ZKEM.1 为zkemkeeper.dll 注册成功后 在注册表可以查看:HKEY_CLASSES_ROOT最下面
        private static ActiveXComponent zkem = new ActiveXComponent("zkemkeeper.ZKEM.1");
    
        /**
         * 连接考勤机
         *
         * @param address 考勤机地址
         * @param port    端口号
         * @return
         */
        public static boolean connect(String address, int port) {
            boolean result = zkem.invoke("Connect_NET", address, port).getBoolean();
            return result;
        }
    
        /**
         * 读取考勤记录到pc缓存。配合getGeneralLogData使用
         *
         * @return
         */
        public static boolean readGeneralLogData() {
            boolean result = zkem.invoke("ReadGeneralLogData", 1).getBoolean();
            return result;
        }
    
        /**
         * 读取该时间之后的最新考勤数据。 配合getGeneralLogData使用。//网上说有这个方法,但是我用的开发文档没有这个方法,也调用不到,我在controller中处理获取当天数据
         *
         * @param lastest
         * @return
         */
        public static boolean readLastestLogData(Date lastest) {
            boolean result = zkem.invoke("ReadLastestLogData", 2018 - 07 - 24).getBoolean();
            return result;
        }
    
        /**
         * 获取缓存中的考勤数据。配合readGeneralLogData / readLastestLogData使用。
         *
         * @return 返回的map中,包含以下键值:
         * "EnrollNumber"   人员编号
         * "Time"           考勤时间串,格式: yyyy-MM-dd HH:mm:ss
         * "VerifyMode"
         * "InOutMode"
         * "Year"          考勤时间:年
         * "Month"         考勤时间:月
         * "Day"           考勤时间:日
         * "Hour"            考勤时间:时
         * "Minute"        考勤时间:分
         * "Second"        考勤时间:秒
         */
        public static List<Map<String, Object>> getGeneralLogData() {
            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<Map<String, Object>> strList = new ArrayList<Map<String, Object>>();
            boolean newresult = false;
            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;
                    String currentDate = DateUtils.getCurrentTime("yyyy-MM-dd");
                    if (currentDate.equals(validDate)) {
                        Map<String, Object> m = new HashMap<String, Object>();
                        //Map<String, Object> user = getUserInfoByNumber(enrollNumber);
                        m.put("EnrollNumber", enrollNumber);
                        m.put("Time", dwYear.getIntRef() + "-" + dwMonth.getIntRef() + "-" + dwDay.getIntRef() + " " + dwHour.getIntRef() + ":" + dwMinute.getIntRef() + ":" + dwSecond.getIntRef());
                        m.put("VerifyMode", dwVerifyMode.getIntRef());
                        m.put("InOutMode", dwInOutMode.getIntRef());
                        m.put("Year", dwYear.getIntRef());
                        m.put("Month", dwMonth.getIntRef());
                        m.put("Day", dwDay.getIntRef());
                        m.put("Hour", dwHour.getIntRef());
                        m.put("Minute", dwMinute.getIntRef());
                        m.put("Second", dwSecond.getIntRef());
                        strList.add(m);
                    }
                }
            } while (newresult == true);
            return strList;
        }
    
        /**
         * 获取用户信息
         *
         * @return 返回的Map中,包含以下键值:
         * "EnrollNumber"  人员编号
         * "Name"          人员姓名
         * "Password"      人员密码
         * "Privilege"
         * "Enabled"       是否启用
         */
        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;
        }
    
    
        /**
         * 设置用户信息
         *
         * @param number
         * @param name
         * @param password
         * @param isPrivilege
         * @param enabled
         * @return
         */
        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;
        }
    
        /**
         * 获取用户信息
         *
         * @param number 考勤号码
         * @return
         */
        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.1.201", 4370);
            if (connFlag) {
                boolean flag = sdk.readGeneralLogData();
                List<Map<String, Object>> strList = sdk.getGeneralLogData();
                map.put("strList", strList);
                System.out.println("flag" + flag);
                System.out.println(JSONObject.fromObject(map).toString());
            }
        }
    
    }

    2. Controller层
    @ResponseBody
        @RequestMapping(value = "/queryAttendance", method = RequestMethod.POST)
        public String queryAttendance(@RequestBody String params, HttpServletRequest request, HttpServletResponse response) {
            String returnString = null;
            Map<String, Object> map = new HashMap<String, Object>();
            List<Map<String,Object>> attendanceList = new ArrayList<Map<String,Object>>();
            int realCount =0;
            try {
                //是否连接考勤机
                String address = PropertiesUtil.loadResource("ZKE_IP", "config/config.properties");
                int port =Integer.parseInt(PropertiesUtil.loadResource("PORT", "config/config.properties"));
                boolean  connFlag = ZkemSDKUtils.connect(address, port);
                if(connFlag){
                    boolean flag = ZkemSDKUtils.readGeneralLogData();
                    List<Map<String,Object>> userList = ZkemSDKUtils.getUserInfo();//获取所有用户
                    List<Map<String,Object>> strList = ZkemSDKUtils.getGeneralLogData();//获取所有数据
                    Map<String, Object> mapAll = new HashMap<String, Object>();
                    for (int i = 0; i < userList.size(); i++) {
                        Map<String, Object> userMap = userList.get(i);
                        // 用户真实数据
                        mapAll = new HashMap<String, Object>();
                        mapAll.put("EnrollNumber",MapUtils.getString(userMap, "EnrollNumber"));
                        mapAll.put("Name",MapUtils.getString(userMap, "Name"));
                        mapAll.put("Privilege",MapUtils.getString(userMap, "Privilege"));
                        String EnrollNumber1 = MapUtils.getString(userMap, "EnrollNumber");
                        List<Map<String, Object>> infoList = new ArrayList<Map<String, Object>>();
                        for (int j = 0;  j < strList.size(); j++) {
                            Map<String, Object> strMap = strList.get(j);
                            String EnrollNumber2 =MapUtils.getString(strMap, "EnrollNumber");
                            if (EnrollNumber1.equals(EnrollNumber2)){
                                infoList.add(strMap);//这个人所有的打卡数据
                            }
                        }
    
                        if (infoList.size()==0){
                            mapAll.put("startTime","");
                            mapAll.put("endTime","");
                        }
                        if (infoList.size()==1){
                            Map<String, Object> strMap = infoList.get(0);
                            String startTime = MapUtils.getString(strMap, "Time");
                            mapAll.put("startTime",startTime);
                            mapAll.put("endTime","");
                            realCount++;
                        }
                        if (infoList.size()>1){
                            Map<String, Object> strMap0 = infoList.get(0);
                            Map<String, Object> strMap1 = infoList.get(infoList.size()-1);
                            String startTime = MapUtils.getString(strMap0, "Time");
                            String endTime = MapUtils.getString(strMap1, "Time");
                            mapAll.put("startTime",startTime);
                            mapAll.put("endTime",endTime);
                            realCount++;
                        }
                        //mapAll.put("timeList",infoList);
                        attendanceList.add(mapAll);
                    }
                    //第一个人打卡的开始时间,最后一个人结束时间
                    if (strList.size()>1){
                        Map<String, Object> strMap0 = strList.get(0);
                        Map<String, Object> strMap1 = strList.get(strList.size()-1);
                        String startTime = MapUtils.getString(strMap0, "Time");
                        String endTime = MapUtils.getString(strMap1, "Time");
                        map.put("startTime",startTime);
                        map.put("endTime",endTime);
                    }
                    map.put(STATUS, STATUS_TRUE);
                    map.put(DATA, attendanceList);
                    map.put(COUNT, attendanceList.size());
                    map.put("realCount", realCount);
                }
            } catch (NullPointerException e) {
                SystemLogger.error("appController.queryAttendance", e);
                map.put(STATUS, STATUS_FALSE);
                map.put(MSG, ERROR_PARAM_NULL);
            } catch (ClassCastException e) {
                SystemLogger.error("appController.queryAttendance", e);
                map.put(STATUS, STATUS_FALSE);
                map.put(MSG, ERROR_PARAM_CLASS_CAST);
            } catch (Exception e) {
                SystemLogger.error("appController.queryAttendance.Exception", e);
                map.put(STATUS, STATUS_FALSE);
                map.put(MSG, ERROR_EXCEPTION);
            }
            returnString = JSONObject.fromObject(map).toString();
            returnString = JSAESUtils.aesEncrypt(returnString);
            return returnString;
        }
    
    
    
     
  • 相关阅读:
    关于maven下载速度慢,下载完的依赖包不知去向的应对措施
    进一步解析二分搜索树的实现
    mysql语法建库建表综合整理是示例
    走进二分搜索树的第一课
    优先队列和堆
    window系统mysql安装后获取默认密码
    微信小程序中使用云开发获取openid
    使用IDEA将springboot框架导入的两种方法
    C/C++、Qt4实现FTP客户端(有无界面版)
    云服务器搭建代理服务器 —— 某sock ,简单说明
  • 原文地址:https://www.cnblogs.com/zhou-pan/p/9376509.html
Copyright © 2020-2023  润新知