当前位置: 首页 > 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;对外发布的发行…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...