对接海康明眸门禁设备-删除人员信息
对接海康明眸门禁设备-删除人员信息
文中登录 退出登录 长连接和海康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压缩 打包模式包括:内部测试阶段的开发模式,对外发布的发行…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...