对接海康明眸门禁设备-周计划模板

2023-12-03 09:12

本文主要是介绍对接海康明眸门禁设备-周计划模板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对接海康明眸门禁设备-周计划模板

注意:一天最多支持八个时间段。
设备支持的模板数 和周计划数,通过设备能力集获取。

设置周计划模板

 /***设置周计划模板*lUserID 登录句柄*weekDateList 自定义时间集合*iPlanTemplateNumber 模板id*templateName 模板名称*List<IotAddFaceParam> paramLis 自定义人员信息集合*/
hikvisionDeviceApiService.setWeeklyPlan(lUserID,weekDateList,iPlanTemplateNumber,templateName);
List<IotAddFaceParam> paramList = new ArrayList<>();// 修改人员信息  具体看前面文章添加用户(添加用户信息)
hikvisionDeviceApiService.addUserInfo(paramList,lUserID,String.valueOf(iPlanTemplateNumber));

修改用户采用的是添加用户方法:
URL为一下:
该方法用户存在时修改,不存在时新增。
具体看前面文章添加用户(添加用户信息)

String strUserInBuffer = "PUT /ISAPI/AccessControl/UserInfo/SetUp?format=json";

周计划权限

/***设备周计划权限* 每一个计划模板可以关联一个周计划和一个假日组计划,假日计划的优先级高于周计划。* 周计划可以配置周一到周日的时间段,每天支持配置8个不同的时间段* @param lUserID              用户登录句柄* @param iPlanTemplateNumber 计划模板编号,从1开始,最大值从门禁能力集获取* templateName 模板名称* weekDateList 自定义时间集合**/public void setWeeklyPlan(int lUserID, List<IotWeekInfoParam> weekDateList, int iPlanTemplateNumber, String templateName) {if (lUserID == -1) {log.warn("登录失败,错误码为 :{}", hCNetSDK.NET_DVR_GetLastError());}//计划模板编号,从1开始,最大值从门禁能力集获取
//        int iPlanTemplateNumber = 6;//模板名称
//        String templateName = "周权限设置模板";//设置卡权限计划模板参数NET_DVR_PLAN_TEMPLATE_COND struPlanCond = new NET_DVR_PLAN_TEMPLATE_COND();struPlanCond.dwSize = struPlanCond.size();struPlanCond.dwPlanTemplateNumber = iPlanTemplateNumber;//计划模板编号,从1开始,最大值从门禁能力集获取struPlanCond.wLocalControllerID = 0;//就地控制器序号[1,64],0表示门禁主机struPlanCond.write();NET_DVR_PLAN_TEMPLATE struPlanTemCfg = new NET_DVR_PLAN_TEMPLATE();struPlanTemCfg.dwSize = struPlanTemCfg.size();struPlanTemCfg.byEnable = 1; //是否使能:0- 否,1- 是struPlanTemCfg.dwWeekPlanNo = 1;//周计划编号,0表示无效struPlanTemCfg.dwHolidayGroupNo[0] = 0;//假日组编号,按值表示,采用紧凑型排列,中间遇到0则后续无效byte[] byTemplateName;byTemplateName = templateName.getBytes(StandardCharsets.UTF_8);//计划模板名称for (int i = 0; i < IotHikNetConstant.NAME_LEN; i++) {struPlanTemCfg.byTemplateName[i] = 0;}System.arraycopy(byTemplateName, 0, struPlanTemCfg.byTemplateName, 0, byTemplateName.length);struPlanTemCfg.write();IntByReference pInt = new IntByReference(0);Pointer lpStatusList = pInt.getPointer();if (!hCNetSDK.NET_DVR_SetDeviceConfig(lUserID, IotHikNetConstant.NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50, 1, struPlanCond.getPointer(), struPlanCond.size(), lpStatusList, struPlanTemCfg.getPointer(), struPlanTemCfg.size())) {//设置模板参数失败log.warn("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50失败,错误号:{},{}", hCNetSDK.NET_DVR_GetLastError(),IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));}//获取卡权限周计划参数NET_DVR_WEEK_PLAN_COND struWeekPlanCond = new NET_DVR_WEEK_PLAN_COND();struWeekPlanCond.dwSize = struWeekPlanCond.size();struWeekPlanCond.dwWeekPlanNumber = 2;struWeekPlanCond.wLocalControllerID = 0;NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg = new NET_DVR_WEEK_PLAN_CFG();struWeekPlanCond.write();struWeekPlanCfg.write();Pointer lpCond = struWeekPlanCond.getPointer();Pointer lpInbuferCfg = struWeekPlanCfg.getPointer();if (!hCNetSDK.NET_DVR_GetDeviceConfig(lUserID, IotHikNetConstant.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {//获取周计划模板失败log.warn("NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:{},{}",hCNetSDK.NET_DVR_GetLastError(),IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));return;}struWeekPlanCfg.read();struWeekPlanCfg.byEnable = 1; //是否使能:0- 否,1- 是/**避免时间段交叉,先初始化, 七天八小时*/for (int i = 0; i < 7; i++) {for (int j = 0; j < 8; j++) {struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].byEnable = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byHour = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byMinute = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.bySecond = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byHour = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byMinute = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.bySecond = 0;}}weekDateList.stream().sorted(Comparator.comparing(IotWeekInfoParam::getWeekNum));Map<Integer, IotWeekInfoParam> listMap = weekDateList.stream().collect(AbsCollector.toMap(IotWeekInfoParam::getWeekNum));// 一周七天for (int i = 0; i < 7; i++) {IotWeekInfoParam weekParam = listMap.get(i+1);if(ObjectUtil.isNull(weekParam)){defaultDateData(i,struWeekPlanCfg);} else {List<IotTimeQuanInfoParam> timeQuans = weekParam.getTimeQuan();if(CollUtil.isEmpty(timeQuans)){defaultDateData(i,struWeekPlanCfg);}// 每天时间段for (int j= 0; j< timeQuans.size(); j++) {IotTimeQuanInfoParam timeQuan = timeQuans.get(j);if (ObjectUtil.isNull(timeQuan.getType()) || timeQuan.getType() == 2) {struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].byEnable = 0;} else {struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].byEnable = 1;}List<Byte> startTimes = Arrays.stream(timeQuan.getStartTime().split(":")).map(Byte::valueOf).collect(Collectors.toList());List<Byte> stopTimes = Arrays.stream(timeQuan.getStopTime().split(":")).map(Byte::valueOf).collect(Collectors.toList());struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byHour = startTimes.get(0);struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byMinute = startTimes.get(1);struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.bySecond = 0;struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byHour = stopTimes.get(0);struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byMinute = stopTimes.get(1);struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.bySecond = 59;}}}struWeekPlanCfg.write();//设置卡权限周计划参数if (!hCNetSDK.NET_DVR_SetDeviceConfig(lUserID, IotHikNetConstant.NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {//设置周计划参数失败log.info("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:{},{}", hCNetSDK.NET_DVR_GetLastError(),IotHkExceptionEnum.getMsg(hCNetSDK.NET_DVR_GetLastError()));} else {infolog.info("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50成功!");}}
public class IotWeekInfoParam implements Serializable {/*** 周 1-2-3*/private Integer weekNum;/*** 时间*/private List<IotTimeQuanInfoParam> timeQuan;}
public class IotTimeQuanInfoParam implements Serializable {/*** 开始时间*/private String startTime;/*** 结束时间*/private String stopTime;/*** int 1表示允许通过  2禁止通行*/private Integer type;}

这篇关于对接海康明眸门禁设备-周计划模板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448891

相关文章

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

最大流、 最小费用最大流终极版模板

最大流  const int inf = 1000000000 ;const int maxn = 20000 , maxm = 500000 ;struct Edge{int v , f ,next ;Edge(){}Edge(int _v , int _f , int _next):v(_v) ,f(_f),next(_next){}};int sourse , mee

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方