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

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

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

设置周计划模板

 /**
 *设置周计划模板
 *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 {info
            log.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;

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN Java对接海康SDK是为了实现将海康SDK与Java语言相结合,从而实现一些特定的功能和需求。海康SDK海康威视公司开发的一套用于监控摄像头、视频录像等监控设备的开发工具包。 首先,需要在CSDN平台上找到与Java对接海康SDK相关的教程或者相关的开源项目。CSDN是一个IT技术社区平台,上面有大量的技术文章和教程,可以提供对接海康SDK的指导和案例。 然后,按照教程或者案例中的步骤进行操作。一般来说,需要先下载并安装海康SDK的开发包,然后在Java项目中引入相关的库文件。接着,根据具体的需求编写Java代码,调用海康SDK提供的函数和接口实现所需的功能。 在对接过程中,可能会遇到一些问题和挑战,例如SDK的版本兼容性、接口调用参数的设置和调试等。此时,可以查阅相关的文档和资料,或者在CSDN社区中发布问题,与其他开发者交流和讨论,共同解决问题。 对接海康SDK后,可以通过Java代码实现与海康监控设备的通信,例如获取实时视频流、控制云台转动、查询和回放录像等功能。这对于需要在Java应用中集成摄像头监控的项目或者需要自动化控制摄像头的场景非常有用。 总之,CSDN Java对接海康SDK是一种使用CSDN平台上的Java技术资源来实现与海康SDK对接的方法。通过参考相关的教程和案例,编写Java代码,可以实现与海康监控设备的通信和控制,以满足特定的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值