对接海康明眸门禁设备-查询人员信息

标题对接海康明眸门禁设备-查询人员信息

本文中代码基于前面文章 对接海康明眸门禁设备-初始化SDK和登录设备来写的。

按用户名称查询

/**
     * 按用户名称查询
     * camera 设备信息
     * name 用户名称
     */
    public List<IotPersonFaceResult> getUserInfoByName(IotCameraParam camera, String name) {
   
        //登录设备
        int lUserID = -1;
        int longConnt = -1;
        try {
   
            lUserID = login_V40(camera.getIp(), new Short(String.valueOf(camera.getPort())), camera.getUsername(), camera.getPassword());
            if (lUserID == -1) {
   
                log.warn("登录失败,错误码为 :{}", hCNetSDK.NET_DVR_GetLastError());
                return Collections.emptyList();
            }
            String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
            longConnt = getLongConnt(strInBuffer, IotHikNetConstant.NET_DVR_JSON_CONFIG, lUserID);
            if (longConnt < 0) {
   
                log.warn("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为:{}", hCNetSDK.NET_DVR_GetLastError());
                return Collections.emptyList();
            }
            String employeeData = getUserByName(name, longConnt);
            if (StrUtil.isEmpty(employeeData)) {
   
                return Collections.emptyList();
            }
            //解析数据
            List<IotPersonFaceResult> faceResults = new ArrayList<>();
            JSONObject objectData = JSONUtil.parseObj(employeeData);
            JSONObject userInfoSearch = objectData.getJSONObject("UserInfoSearch");
            if (ObjectUtil.isNull(userInfoSearch)) {
   
                return faceResults;
            }
            JSONArray jsonArray = userInfoSearch.getJSONArray("UserInfo");
            if (jsonArray == null || jsonArray.size() < 1) {
   
                return faceResults;
            }
            for (int i = 0; i < jsonArray.size(); i++) {
   
                JSONObject jsonData = (JSONObject) jsonArray.get(i);
                IotPersonFaceResult result = new IotPersonFaceResult();
                result.setUserId(jsonData.getStr("employeeNo"));
                result.setUserName(jsonData.getStr("name"));
                faceResults.add(result);
            }

            return faceResults;
        } catch (Exception e) {
   
            log.error("海康查询用户", e);
            return Collections.emptyList();
        } finally {
   
            //关闭长连接,释放资源
            if (!hCNetSDK.NET_DVR_StopRemoteConfig(longConnt)) {
   
                log.warn("NET_DVR_StopRemoteConfig接口调用失败,错误码:{}", hCNetSDK.NET_DVR_GetLastError());
            } else {
   
                log.info("NET_DVR_StopRemoteConfig接口成功");
            }
            //退出登录
            logout(lUserID);
        }
    }
 /**
     * 按名称查询
     * name 用户名称
     * longConnt 长连接
     */
    private static String getUserByName(String name, int longConnt) {
   

        if (StrUtil.isEmpty(name)) {
   
            log.warn("userIds 参数为空");
            return null;
        }
        //组装查询的JSON报文,这边查询的是所有的人员
        JSONObject jsonObject = new JSONObject();
        JSONObject jsonSearchCond = new JSONObject();

        jsonSearchCond.set("searchID", String.valueOf(DateUtil.currentSeconds()));
        jsonSearchCond.set("searchResultPosition", 0);
        jsonSearchCond.set("maxResults", 20);
        /*opt, string, 模糊查询关键字, range:[,]*/
//        "fuzzySearch":  "test"
//        jsonSearchCond.set("EmployeeNoList", null);
        jsonSearchCond.set("fuzzySearch", name);
        jsonObject.set("UserInfoSearchCond", jsonSearchCond);
        String strInbuff = jsonObject.toString();
        log.info("查询的json报文:" + strInbuff);
        //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
        BYTE_ARRAY ptrInbuff = new BYTE_ARRAY(strInbuff.length());
        System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
        ptrInbuff.write();
        //定义接收结果的结构体
        BYTE_ARRAY ptrOutuff = new BYTE_ARRAY(10 * 1024);
        IntByReference pInt = new IntByReference(0);
        /*
         *dwOutBuffSize是输出缓冲区大小,需要自定义指定大小,如果接口报错错误码43.说明接收设备数据的缓冲区或存放图片缓冲区不足,应扩大缓冲区大小
         */
        int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(longConnt, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
        log.info("查询返回值 :{}", dwState);
        if (dwState == -1) {
   
            log.warn("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:{},{}", hCNetSDK.NET_DVR_GetLastError(), IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
   
            log.info("配置等待");
            try {
   
                Thread.sleep(10);
            } catch (InterruptedException e) {
   
                log.warn("配置等待", e);
            }
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_FAILED) {
   
            log.info("查询人员失败");
            log.warn("错误码:{},{}", hCNetSDK.NET_DVR_GetLastError(), IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));
            return null;
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_EXCEPTION) {
   
            log.info("查询人员异常");
            log.warn("错误码:{},{}", hCNetSDK.NET_DVR_GetLastError(), IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));
            return null;
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_SUCCESS) {
   
            ptrOutuff.read();
            log.info("查询人员成功");
            String jsonObj = new String(ptrOutuff.byValue).trim();
            return new String(ptrOutuff.byValue).trim();
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_FINISH) {
   
            log.info("获取人员完成");
        }
        return null;
    }

根据用户id查

/**
     * 根据用户id查
     * camera 设备信息
     * userIds 用户id集合
     */
    public List<IotPersonFaceResult> getFaceByUserId(IotCameraParam camera, Collection<Long> userIds) {
   
        //登录设备
        int lUserID = login_V40(camera.getIp(), new Short(String.valueOf(camera.getPort())), camera.getUsername(), camera.getPassword());
        if (lUserID == -1) {
   
            log.warn("登录失败,错误码为 :{}", hCNetSDK.NET_DVR_GetLastError());
            return Collections.emptyList();
        }
        String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
        int longConnt = this.getLongConnt(strInBuffer, IotHikNetConstant.NET_DVR_JSON_CONFIG, lUserID);
        if (longConnt < 0) {
   
            log.warn("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为:{}", hCNetSDK.NET_DVR_GetLastError());
            return Collections.emptyList();
        }
        String employeeData = this.getUserByEmployeeNo(userIds, longConnt);
        if (StrUtil.isEmpty(employeeData)) {
   
            return Collections.emptyList();
        }
        //解析数据
        List<IotPersonFaceResult> faceResults = new ArrayList<>();
        JSONObject objectData = JSONUtil.parseObj(employeeData);
        JSONObject userInfoSearch = objectData.getJSONObject("UserInfoSearch");
        JSONArray jsonArray = userInfoSearch.getJSONArray("UserInfo");
        if (jsonArray == null || jsonArray.size() < 1) {
   
            return faceResults;
        }
        for (int i = 0; i < jsonArray.size(); i++) {
   
            JSONObject jsonData = (JSONObject) jsonArray.get(i);
            IotPersonFaceResult result = new IotPersonFaceResult();
            result.setUserId(jsonData.getStr("employeeNo"));
            result.setUserName(jsonData.getStr("name"));
            faceResults.add(result);
        }
        //关闭长连接,释放资源
        if (!hCNetSDK.NET_DVR_StopRemoteConfig(longConnt)) {
   
            log.warn("NET_DVR_StopRemoteConfig接口调用失败,错误码:{}", hCNetSDK.NET_DVR_GetLastError());
        } else {
   
            log.info("NET_DVR_StopRemoteConfig接口成功");
        }
        //退出登录
        logout(lUserID);
        return faceResults;
    }
 /**
     * 按员工编号查询
     * userIds 用户id集合
     * longConnt 长连接
     */
    private String getUserByEmployeeNo(Collection<Long> userIds, int longConnt) {
   

        if (CollUtil.isEmpty(userIds)) {
   
            log.warn("userIds 参数为空");
            return null;
        }
        //组装查询的JSON报文,这边查询的是所有的人员
        JSONObject jsonObject = new JSONObject();
        JSONObject jsonSearchCond = new JSONObject();

        //如果需要查询指定的工号人员信息,把下面注释的内容去除掉即可
        JSONArray employeeNoList = new JSONArray();
        List<Long> userIdList = new ArrayList<>(userIds);
        for (int i = 0; i < userIdList.size(); i++) {
   
            JSONObject employeeNo = new JSONObject();
            employeeNo.set("employeeNo", String.valueOf(userIdList.get(i)));
            employeeNoList.put(employeeNo);
        }
        jsonSearchCond.set("EmployeeNoList", employeeNoList);
        jsonSearchCond.set("searchID", IdWorker.getIdStr());
        jsonSearchCond.set("searchResultPosition", 0);
        jsonSearchCond.set("maxResults", 100);
        jsonObject.set("UserInfoSearchCond", jsonSearchCond);
        String strInbuff = jsonObject.toString();
        log.info("查询的json报文:" + strInbuff);
        //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
        BYTE_ARRAY ptrInbuff = new BYTE_ARRAY(strInbuff.length());
        System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
        ptrInbuff.write();
        //定义接收结果的结构体
        BYTE_ARRAY ptrOutuff = new BYTE_ARRAY(10 * 1024);
        IntByReference pInt = new IntByReference(0);
        /*
         *dwOutBuffSize是输出缓冲区大小,需要自定义指定大小,如果接口报错错误码43.说明接收设备数据的缓冲区或存放图片缓冲区不足,应扩大缓冲区大小
         */
        int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(longConnt, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
        log.info("查询返回值 :{}", dwState);
        if (dwState == -1) {
   
            log.warn("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:{},{}", hCNetSDK.NET_DVR_GetLastError(), IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
   
            log.info("配置等待");
            try {
   

                Thread.sleep(10);
            } catch (InterruptedException e) {
   
                // TODO Auto-generated catch block
                e.printStackTrace();
                log.warn("配置等待", e);
            }
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_FAILED) {
   
            log.info("查询人员失败");
            return null;
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_EXCEPTION) {
   
            log.info("查询人员异常");
            return null;
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_SUCCESS) {
   
            ptrOutuff.read();
            log.info("查询人员成功");
            return new String(ptrOutuff.byValue).trim();
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_FINISH) {
   
            log.info("获取人员完成");
        }
        return null;
    }

查询所有用户信息

 /**
     * 查询所有用户信息
     * camera 设备信息
     */
    public List<IotPersonFaceResult> queryListFace(IotCameraParam camera) {
   
        //登录设备
        int lUserID = login_V40(camera.getIp(), new Short(String.valueOf(camera.getPort())), camera.getUsername(), camera.getPassword());
        if (lUserID == -1) {
   
            int error = hCNetSDK.NET_DVR_GetLastError();
            log.warn("登录失败,错误码为 :{},{}", error, IotHkExceptionEnum.getMsg(error));
//            IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError());
            return Collections.emptyList();
        }
        //建立长连接
        String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
        int longConnt = this.getLongConnt(strInBuffer, IotHikNetConstant.NET_DVR_JSON_CONFIG, lUserID);
        if (longConnt < 0) {
   
            int error = hCNetSDK.NET_DVR_GetLastError();
            log.warn("getQueryAllUser NET_DVR_StartRemoteConfig 失败,错误码为:{},{}", error, IotHkExceptionEnum.getMsg(error));
            return Collections.emptyList();
        }
        //获取用户总数
        int rowCount = getCountUser(lUserID);
        int pageSize = 100;
        //计算页数
        int pageNum = (rowCount + pageSize - 1) / pageSize;
        List<IotPersonFaceResult> faceResults = new ArrayList<>();
        for (int i = 0; i < pageNum; i++) {
   
            //获取用户信息
            this.getQueryAllList(pageSize, pageNum, faceResults, longConnt);
        }
        //关闭长连接,释放资源
        if (!hCNetSDK.NET_DVR_StopRemoteConfig(longConnt)) {
   
            log.warn("NET_DVR_StopRemoteConfig接口调用失败,错误码:{}", hCNetSDK.NET_DVR_GetLastError());
        } else {
   
            log.info("NET_DVR_StopRemoteConfig接口成功");
        }
        logout(lUserID);
        return faceResults;
    }

分页查询所有用户

 /**
     * 分页查询所有用户
     * pageSize 条数
     * pageNum 页数
     * longConnt 长连接
     * faceResults 返回信息收集集合
     */
    private void getQueryAllList(int pageSize, int pageNum, List<IotPersonFaceResult> faceResults, int longConnt) {
   

        //组装查询的JSON报文,这边查询的是所有的人员
        JSONObject jsonObject = new JSONObject();
        JSONObject jsonSearchCond = new JSONObject();
        jsonSearchCond.set("searchID", IdWorker.getIdStr());
        jsonSearchCond.set("searchResultPosition", pageNum);
        jsonSearchCond.set("maxResults", pageSize);
        jsonObject.set("UserInfoSearchCond", jsonSearchCond);
        String strInbuff = jsonObject.toString();
        log.info("查询的json报文:" + strInbuff);
        //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
        BYTE_ARRAY ptrInbuff = new BYTE_ARRAY(strInbuff.length());
        System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
        ptrInbuff.write();
        //定义接收结果的结构体
        BYTE_ARRAY ptrOutuff = new BYTE_ARRAY(10 * 1024);
        IntByReference pInt = new IntByReference(0);
        /*
         *dwOutBuffSize是输出缓冲区大小,需要自定义指定大小,如果接口报错错误码43.说明接收设备数据的缓冲区或存放图片缓冲区不足,应扩大缓冲区大小
         */
        int dwState = hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(longConnt, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
        log.info("查询返回值 :{}", dwState);
        if (dwState == -1) {
   
            log.warn("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:{},{}", hCNetSDK.NET_DVR_GetLastError(), IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
   
            log.info("配置等待");
            try {
   
                Thread.sleep(10);
            } catch (InterruptedException e) {
   
                // TODO Auto-generated catch block
                log.warn("配置等待", e);
            }
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_FAILED) {
   
            log.info("查询人员失败");
            return;
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_EXCEPTION) {
   
            log.info("查询人员异常");
            return;
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_SUCCESS) {
   
            ptrOutuff.read();
            log.info("查询人员成功");
        } else if (dwState == IotHikNetConstant.NET_SDK_CONFIG_STATUS_FINISH) {
   
            log.info("获取人员完成");
        }
        String jsonObj = new String(ptrOutuff.byValue).trim();
        if (StrUtil.isEmpty(jsonObj)) {
   
            log.warn("返回值为空 jsonObj :{}", jsonObj);
            return;
        }
        JSONObject objectData = JSONUtil.parseObj(jsonObj);
        JSONObject userInfoSearch = objectData.getJSONObject("UserInfoSearch");
        JSONArray jsonArray = userInfoSearch.getJSONArray("UserInfo");
        for (Object obj : jsonArray) {
   
            JSONObject jsonData = (JSONObject) obj;
            IotPersonFaceResult result = new IotPersonFaceResult();
            result.setUserId(jsonData.getStr("employeeNo"));
            result.setUserName(jsonData.getStr("name"));
            faceResults.add(result);
        }
    }

IotPersonFaceResult 人员信息实体类

/**
 * 根据ID查询用户详情返回信息
 
 */
@Data
public class IotPersonFaceResult  {
   


    /**
     * 用户ID
     */
    private String userId;

    /**
     * 用户信息
     */
    private String userName;

    /**
     * 人脸图片
     */
    private String faceImage;

}

相关推荐

  1. 对接设备-查询人员信息

    2023-12-12 16:04:02       47 阅读
  2. 对接设备-周计划模板

    2023-12-12 16:04:02       39 阅读
  3. 45 对接视频九宫格的实现

    2023-12-12 16:04:02       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 16:04:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 16:04:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 16:04:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 16:04:02       20 阅读

热门阅读

  1. 网络安全中的加解密问题

    2023-12-12 16:04:02       34 阅读
  2. ACWing week 3(C语言) 722.数字序列和它的和

    2023-12-12 16:04:02       38 阅读
  3. go语言利用反射实现reverse函数

    2023-12-12 16:04:02       33 阅读
  4. ChatGpt

    ChatGpt

    2023-12-12 16:04:02      40 阅读
  5. docker中CMD和ENTRYPOINT 的区别

    2023-12-12 16:04:02       40 阅读
  6. 互联网服务器更新运维

    2023-12-12 16:04:02       41 阅读
  7. Android:监听开机广播自己唤醒

    2023-12-12 16:04:02       46 阅读
  8. 架构:服务名词解释

    2023-12-12 16:04:02       40 阅读