当前位置: 首页 > news >正文

对接海康明眸门禁设备-删除人员信息

对接海康明眸门禁设备-删除人员信息

文中登录 退出登录 长连接和海康hCNetSDK等接口 见文章 初始SDK和登录

 /*** 删除人脸
IotCommDataResult 自定义类 收集结果*/@Overridepublic List<IotCommDataResult> deleteFace(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 userIds.stream().map(id -> IotCommDataResult.FAIL_RESULT(id)).collect(Collectors.toList());}if (CollUtil.isEmpty(userIds)) {return Collections.emptyList();}List<Long> userIdList = new ArrayList<>(userIds);List<IotCommDataResult> commDataResults = new ArrayList<>();String deleteUserUrl = "PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json";String getDeleteProcessUrl = "GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess?format=json";// 删除可以通过组装数据 进行批量删除。我这边采用的是循环删除for (int i = 0; i < userIdList.size(); i++) {//删除用户信息Boolean aBoolean = this.delUserFace(userIdList.get(i), deleteUserUrl, lUserID);if (!aBoolean) {commDataResults.add(IotCommDataResult.FAIL_RESULT(userIdList.get(i)));continue;}try {Thread.sleep(100);} catch (InterruptedException e) {log.warn("配置等待异常 userid: {}", userIdList.get(i));}String deleteResult = this.delUserFaceRespon(getDeleteProcessUrl, lUserID);if (StrUtil.isEmpty(deleteResult)) {commDataResults.add(IotCommDataResult.FAIL_RESULT(userIdList.get(i)));continue;}JSONObject jsonObjectRespon = JSONUtil.parseObj(deleteResult);JSONObject jsonObjectData = jsonObjectRespon.getJSONObject("UserInfoDetailDeleteProcess");String process = jsonObjectData.getStr("status");log.info("process :{}", process);if ("processing".equals(process)) {log.info("正在删除");int frequency = 0;process = this.analysisDelData(getDeleteProcessUrl, deleteResult, frequency, lUserID);}if ("success".equals(process)) {log.info("删除成功");commDataResults.add(IotCommDataResult.COMMON_SUCCESS_RESULT(userIdList.get(i), "删除成功"));} else if ("failed".equals(process)) {log.info("删除失败");commDataResults.add(IotCommDataResult.COMMON_FAIL_RESULT(userIdList.get(i), "删除失败"));}}//退出登录logout(lUserID);return commDataResults;}

解析删除数据

/*** 解析删除数据*/private String analysisDelData(String getDeleteProcessUrl, String deleteResult, int frequency, int lUserID) {JSONObject jsonObjectRespon = JSONUtil.parseObj(deleteResult);JSONObject jsonObjectData = jsonObjectRespon.getJSONObject("UserInfoDetailDeleteProcess");String process = jsonObjectData.getStr("status");log.info("process :{}", process);if ("processing".equals(process)) {log.info("正在删除");if (frequency >= 3) {return "failed";}frequency = frequency + 1;try {Thread.sleep(200);String result = delUserFaceRespon(getDeleteProcessUrl, lUserID);this.analysisDelData(getDeleteProcessUrl, result, frequency, lUserID);} catch (InterruptedException e) {log.warn("休眠异常 ", e);}}if ("success".equals(process)) {log.info("删除成功");return process;} else if ("failed".equals(process)) {log.info("删除失败");return process;}return null;}

执行删除操作

 /*** 执行删除操作* userId */private Boolean delUserFace(Long userId, String deleteUserUrl, int lUserID) {JSONObject jsonData = new JSONObject();JSONObject userInfoDetail = new JSONObject();JSONArray employeeNoList = new JSONArray();userInfoDetail.set("mode", "byEmployeeNo"); //通过用户编号删除JSONObject jsonObject = new JSONObject();jsonObject.set("employeeNo", String.valueOf(userId));employeeNoList.put(jsonObject);userInfoDetail.set("EmployeeNoList", employeeNoList);// 组装成集合 多个employeeNojsonData.set("UserInfoDetail", userInfoDetail);String toJsonData = JSONUtil.toJsonStr(jsonData);NET_DVR_XML_CONFIG_INPUT struXMLInput = new NET_DVR_XML_CONFIG_INPUT();struXMLInput.read();BYTE_ARRAY stringRequest = new BYTE_ARRAY(1024);stringRequest.read();//输入ISAPI协议命令System.arraycopy(deleteUserUrl.getBytes(), 0, stringRequest.byValue, 0, deleteUserUrl.length());stringRequest.write();struXMLInput.dwSize = struXMLInput.size();struXMLInput.lpRequestUrl = stringRequest.getPointer();struXMLInput.dwRequestUrlLen = deleteUserUrl.length();BYTE_ARRAY ptrInBuffer = new BYTE_ARRAY(toJsonData.length());ptrInBuffer.read();System.arraycopy(toJsonData.getBytes(), 0, ptrInBuffer.byValue, 0, toJsonData.length());ptrInBuffer.write();struXMLInput.lpInBuffer = ptrInBuffer.getPointer();struXMLInput.dwInBufferSize = toJsonData.length();struXMLInput.write();BYTE_ARRAY stringXMLOut = new BYTE_ARRAY(8 * 1024);stringXMLOut.read();BYTE_ARRAY struXMLStatus = new BYTE_ARRAY(1024);struXMLStatus.read();NET_DVR_XML_CONFIG_OUTPUT struXMLOutput = new NET_DVR_XML_CONFIG_OUTPUT();struXMLOutput.read();struXMLOutput.dwSize = struXMLOutput.size();struXMLOutput.lpOutBuffer = stringXMLOut.getPointer();struXMLOutput.dwOutBufferSize = stringXMLOut.size();struXMLOutput.lpStatusBuffer = struXMLStatus.getPointer();struXMLOutput.dwStatusSize = struXMLStatus.size();struXMLOutput.write();boolean stdxmlConfig = hCNetSDK.NET_DVR_STDXMLConfig(lUserID, struXMLInput, struXMLOutput);if (!stdxmlConfig) {log.warn("NET_DVR_STDXMLConfig失败,错误号:{}", hCNetSDK.NET_DVR_GetLastError());}return stdxmlConfig;}

获取删除结果

 /*** 获取删除结果*/private String delUserFaceRespon(String getDeleteProcessUrl, int lUserID) {NET_DVR_XML_CONFIG_INPUT struXMLInput = new NET_DVR_XML_CONFIG_INPUT();struXMLInput.read();BYTE_ARRAY stringRequest = new BYTE_ARRAY(1024);stringRequest.read();//输入ISAPI协议命令System.arraycopy(getDeleteProcessUrl.getBytes(), 0, stringRequest.byValue, 0, getDeleteProcessUrl.length());stringRequest.write();struXMLInput.dwSize = struXMLInput.size();struXMLInput.lpRequestUrl = stringRequest.getPointer();struXMLInput.dwRequestUrlLen = getDeleteProcessUrl.length();struXMLInput.lpInBuffer = null;struXMLInput.dwInBufferSize = 0;struXMLInput.write();BYTE_ARRAY stringXMLOut = new BYTE_ARRAY(8 * 1024);stringXMLOut.read();BYTE_ARRAY struXMLStatus = new BYTE_ARRAY(1024);struXMLStatus.read();NET_DVR_XML_CONFIG_OUTPUT struXMLOutput = new NET_DVR_XML_CONFIG_OUTPUT();struXMLOutput.read();struXMLOutput.dwSize = struXMLOutput.size();struXMLOutput.lpOutBuffer = stringXMLOut.getPointer();struXMLOutput.dwOutBufferSize = stringXMLOut.size();struXMLOutput.lpStatusBuffer = struXMLStatus.getPointer();struXMLOutput.dwStatusSize = struXMLStatus.size();struXMLOutput.write();if (!hCNetSDK.NET_DVR_STDXMLConfig(lUserID, struXMLInput, struXMLOutput)) {int iErr = hCNetSDK.NET_DVR_GetLastError();log.warn("NET_DVR_STDXMLConfig失败,错误号 :{} ,url:{}", iErr, getDeleteProcessUrl);return null;} else {stringXMLOut.read();log.info("输出文本大小:{}", struXMLOutput.dwReturnedXMLSize);//打印输出XML文本String strOutXML = new String(stringXMLOut.byValue).trim();log.info("delUserFaceRespon strOutXML:{}", strOutXML);struXMLStatus.read();String strStatus = new String(struXMLStatus.byValue).trim();log.info("delUserFaceRespon strStatus:{}", strStatus);return strOutXML;}}

相关文章:

对接海康明眸门禁设备-删除人员信息

对接海康明眸门禁设备-删除人员信息 文中登录 退出登录 长连接和海康hCNetSDK等接口 见文章 初始SDK和登录 /*** 删除人脸 IotCommDataResult 自定义类 收集结果*/Overridepublic List<IotCommDataResult> deleteFace(IotCameraParam camera, Collection<Long> us…...

LEADTOOLS Imaging SDK Crack

LEADTOOLS Imaging SDK Crack 高级开发人员工具包包括ActiveX和WPF/XAML控件。 LEADTOOLS Imaging SDK为文件格式导入/导出、图像压缩、图像显示和效果、颜色转换、图像处理、TWAIN扫描、图像通用对话框、数据库集成、打印和互联网提供了基本和高级的彩色图像功能。 LEADTOOLS …...

2023并发之八股文——面试题

基础知识 并发编程的优缺点为什么要使用并发编程&#xff08;并发编程的优点&#xff09; 充分利用多核CPU的计算能力&#xff1a;通过并发编程的形式可以将多核CPU 的计算能力发挥到极致&#xff0c;性能得到提升方便进行业务拆分&#xff0c;提升系统并发能力和性能&#x…...

操作记录日志保存设计实现

定义一个切面类 @Aspect @Slf4j @Component @RequiredArgsConstructor public class OperateLogAopConfig {private final ISysOperateLogService sysOperateLogService;@Around("@annotation(operateLog)")public Object operateLog(ProceedingJoinPoint point, Op…...

PL 侧驱动和fpga 重加载的方法

可以解决很多的问题 时钟稳定后加载特定fpga ip &#xff08;要不内核崩的一塌糊涂&#xff09;fpga 稳定复位软件决定fpga ip 加载的时序 dluash load /usr/local/scripts/si5512_setup.lua usleep 30 mkdir -p /lib/firmware cp -rf /usr/local/firmare/{*.bit.bin,*.dtbo} …...

【2023最新爬虫】用python爬取知乎任意问题下的全部回答

老规矩&#xff0c;先上结果&#xff1a; 爬取了前200多页&#xff0c;每页5条数据&#xff0c;共1000多条回答。&#xff08;程序设置的自动判断结束页&#xff0c;我是手动break的&#xff09; 共爬到13个字段&#xff0c;包含&#xff1a; 问题id,页码,答主昵称,答主性别,…...

Bingchat和ChatGPT主要区别

Bing Chat由chatgpt GPT-4技术提供支持&#xff0c;这是流行的ChatGPT的最新语言模型。Bing Chat通过更具交互性和上下文联动的响应来优化搜索引擎。它允许用户提出问题并获得更人性化、精确化或创造力的答案。用户还可以在答案末尾查看的参考来源。该工具可以充当个人研究、计…...

Docker容器:docker镜像的创建及dockerfile

Docker容器&#xff1a;docker镜像的创建及dockerfile案例 一.docker镜像的三种创建方法 创建镜像有三种方法&#xff1a;基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.基于现有镜像创建 1.1 启动镜像 #首先启动一个镜像&#xff0c;在容器里做修改 docker …...

Vue3 父子组件数据传递

1、父组件向子组件传递数据 1.1、传递多个简单变量给到子组件 父组件使用 <TitleView title"标题" :name"name" :isCollect"isCollect" collect-event"collectEvent" /><script setup>const name ref(名字)const isCol…...

Eureka:集群环境配置

创建三个集群 导包 <!-- 导包--><dependencies><!-- Eureka -server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.…...

springboot之多数据源配置

文章目录 一、多数据源的典型使用场景1 业务复杂&#xff08;数据量大&#xff09;2 读写分离 二、如何实现多数据源通过AbstractRoutingDataSource动态指定数据源多数据源切换方式AOPMyBatis插件 三、spring集成多个Mybatis框架 实现多数据源控制四、dynamic-datasource 多数据…...

无涯教程-PHP - 静态变量函数

静态变量 静态变量在函数退出时值不会丢失,您只需将关键字STATIC放在变量名称的前面,即可将变量声明为静态变量。 <?phpfunction keep_track() {STATIC $count0;$count;print $count;print "<br />";}keep_track();keep_track();keep_track(); ?> 这…...

2023-08-20力扣今日二题

链接&#xff1a; 1312. 让字符串成为回文串的最少插入次数 题意&#xff1a; 如题 解&#xff1a; 动态规划&#xff0c;枚举回文串中点并递增回文串长度 初始状态若LR则单个字符为中点&#xff0c;需要添加0个字符成为回文串&#xff1b;若L1R则如果S[L]S[R]则需要添加…...

【地理专题】2023年最新全国A级景区数

数据来源&#xff1a;中国文化和旅游部时间跨度&#xff1a;2023年区域范围&#xff1a;全国范围数据字段&#xff1a; 景区名称&#xff1b;地址&#xff1b;等级&#xff1b;城市&#xff1b;经度&#xff1b;纬度 该图基于自然资源部地图技术审查中心标准地图服务网站下载…...

Elasticsearch实战(一):Springboot实现Elasticsearch统一检索功能

文章目录 系列文章索引一、准备工作1、搭建docker环境2、安装eskibana3、es安装ik分词器&#xff08;1&#xff09;下载安装&#xff08;2&#xff09;测试 4、Springboot&#xff08;1&#xff09;引包&#xff08;2&#xff09;客户端公共方法&#xff08;3&#xff09;公共实…...

更改计算机睡眠时间

控制面板–>系统和安全–>电源选项下的更改计算机睡眠时间 如果关闭显示器时间小于使计算机进入睡眠状态时间&#xff0c;时间先到达关闭显示器时间&#xff0c;显示器关闭&#xff0c;这时电脑还在正常工作状态。如果此时敲击键盘显示器出现画面&#xff0c;无需输入密…...

Matplotlib数据可视化(一)

目录 1.Matplotlib简介 2.Matplotlib绘图基础 2.1 创建画布与子图 2.2 添加画布属性 2.3 绘图的保存与显示 1.Matplotlib简介 Matplotlib是一个用于绘制数据可视化图表的Python库。它提供了广泛的功能和灵活性&#xff0c;可以创建各种类型的图表&#xff0c;包括折线图、…...

LLM提示词工程和提示词工程师Prompting and prompt engineering

你输入模型的文本被称为提示&#xff0c;生成文本的行为被称为推断&#xff0c;输出文本被称为完成。用于提示的文本或可用的内存的全部量被称为上下文窗口。尽管这里的示例显示模型表现良好&#xff0c;但你经常会遇到模型在第一次尝试时无法产生你想要的结果的情况。你可能需…...

Python开发环境(Visual Studio Code、Anaconda、PyInstaller、Enigma Virtual Box)

Python开发环境 [Anaconda、PyInstaller、Enigma Virtual Box] AnacondaAnaconda安装搭建Python环境Anaconda命令 Visual Studio CodeVisual Studio Code中Python设置Visual Studio Code中使用Qt Designer Python打包发布.exe可执行文件PyinstallerEnigma Virtual Box Anaconda…...

Unreal Engine 测试总结

Android 项目打包应选择哪种纹理格式&#xff1f;打包模式区别&#xff1f; 根据官网文档介绍&#xff0c;建议使用 ETC2&#xff1a;所有OpenGL 3.x 类型的设备都支持&#xff0c;并且支持alpha压缩 打包模式包括&#xff1a;内部测试阶段的开发模式&#xff0c;对外发布的发行…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...