对接海康明眸门禁设备-删除人员信息
对接海康明眸门禁设备-删除人员信息
文中登录 退出登录 长连接和海康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并发之八股文——面试题
基础知识 并发编程的优缺点为什么要使用并发编程(并发编程的优点) 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU 的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能&#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 (要不内核崩的一塌糊涂)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爬取知乎任意问题下的全部回答
老规矩,先上结果: 爬取了前200多页,每页5条数据,共1000多条回答。(程序设置的自动判断结束页,我是手动break的) 共爬到13个字段,包含: 问题id,页码,答主昵称,答主性别,…...
Bingchat和ChatGPT主要区别
Bing Chat由chatgpt GPT-4技术提供支持,这是流行的ChatGPT的最新语言模型。Bing Chat通过更具交互性和上下文联动的响应来优化搜索引擎。它允许用户提出问题并获得更人性化、精确化或创造力的答案。用户还可以在答案末尾查看的参考来源。该工具可以充当个人研究、计…...
Docker容器:docker镜像的创建及dockerfile
Docker容器:docker镜像的创建及dockerfile案例 一.docker镜像的三种创建方法 创建镜像有三种方法:基于现有镜像创建、基于本地模板创建及基于dockerfile创建 1.基于现有镜像创建 1.1 启动镜像 #首先启动一个镜像,在容器里做修改 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 业务复杂(数据量大)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力扣今日二题
链接: 1312. 让字符串成为回文串的最少插入次数 题意: 如题 解: 动态规划,枚举回文串中点并递增回文串长度 初始状态若LR则单个字符为中点,需要添加0个字符成为回文串;若L1R则如果S[L]S[R]则需要添加…...
【地理专题】2023年最新全国A级景区数
数据来源:中国文化和旅游部时间跨度:2023年区域范围:全国范围数据字段: 景区名称;地址;等级;城市;经度;纬度 该图基于自然资源部地图技术审查中心标准地图服务网站下载…...
Elasticsearch实战(一):Springboot实现Elasticsearch统一检索功能
文章目录 系列文章索引一、准备工作1、搭建docker环境2、安装eskibana3、es安装ik分词器(1)下载安装(2)测试 4、Springboot(1)引包(2)客户端公共方法(3)公共实…...
更改计算机睡眠时间
控制面板–>系统和安全–>电源选项下的更改计算机睡眠时间 如果关闭显示器时间小于使计算机进入睡眠状态时间,时间先到达关闭显示器时间,显示器关闭,这时电脑还在正常工作状态。如果此时敲击键盘显示器出现画面,无需输入密…...
Matplotlib数据可视化(一)
目录 1.Matplotlib简介 2.Matplotlib绘图基础 2.1 创建画布与子图 2.2 添加画布属性 2.3 绘图的保存与显示 1.Matplotlib简介 Matplotlib是一个用于绘制数据可视化图表的Python库。它提供了广泛的功能和灵活性,可以创建各种类型的图表,包括折线图、…...
LLM提示词工程和提示词工程师Prompting and prompt engineering
你输入模型的文本被称为提示,生成文本的行为被称为推断,输出文本被称为完成。用于提示的文本或可用的内存的全部量被称为上下文窗口。尽管这里的示例显示模型表现良好,但你经常会遇到模型在第一次尝试时无法产生你想要的结果的情况。你可能需…...
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 项目打包应选择哪种纹理格式?打包模式区别? 根据官网文档介绍,建议使用 ETC2:所有OpenGL 3.x 类型的设备都支持,并且支持alpha压缩 打包模式包括:内部测试阶段的开发模式,对外发布的发行…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
