|
- package com.hkversion.Acs;
-
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONException;
- import com.alibaba.fastjson.JSONObject;
- import com.hkversion.HCNetSDK;
- import com.sun.jna.Pointer;
- import com.sun.jna.ptr.IntByReference;
- import com.yzx.impl.CardTemplateInfo;
- import com.yzx.impl.HKVersion;
-
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
-
- /**
- * 功能:人脸下发、查询、删除、人员计划模板配置
- */
- public class UserManage {
- /**
- * 添加人员
- *
- * @param lUserID 登录句柄
- * @param employeeNo 工号
- * @throws UnsupportedEncodingException
- * @throws InterruptedException
- * @throws JSONException
- */
- public static void addUserInfo(int lUserID, String employeeNo) throws UnsupportedEncodingException, InterruptedException, JSONException {
- HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
- //"POST /ISAPI/AccessControl/UserInfo/Record?format=json" 此URL也是下发人员
- String strInBuffer = "PUT /ISAPI/AccessControl/UserInfo/SetUp?format=json";
- System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
- ptrByteArray.write();
-
- int lHandler = HKVersion.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
- if (lHandler < 0) {
- System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return;
- } else {
- System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 成功!");
-
- byte[] Name = "测试1".getBytes("utf-8"); //根据iCharEncodeType判断,如果iCharEncodeType返回6,则是UTF-8编码。
- //如果是0或者1或者2,则是GBK编码
-
- //将中文字符编码之后用数组拷贝的方式,避免因为编码导致的长度问题
- String strInBuffer1 = "{\n" +
- " \"UserInfo\":{\n" +
- " \"employeeNo\":\""+employeeNo+"\",\n" +
- " \"name\":\"";
- String strInBuffer2 = "\",\n" +
- " \"userType\":\"normal\",\n" +
- " \"Valid\":{\n" +
- " \"enable\":true,\n" +
- " \"beginTime\":\"2019-08-01T17:30:08\",\n" +
- " \"endTime\":\"2030-08-01T17:30:08\",\n" +
- " \"timeType\":\"local\"\n" +
- " },\n" +
- " \"belongGroup\":\"1\",\n" +
- " \"doorRight\":\"1\",\n" +
- " \"RightPlan\":[\n" +
- " {\n" +
- " \"doorNo\":1,\n" +
- " \"planTemplateNo\":\"1\"\n" +
- " }\n" +
- " ]\n" +
- " }\n" +
- "}";
- int iStringSize = Name.length + strInBuffer1.length() + strInBuffer2.length();
-
- HCNetSDK.BYTE_ARRAY ptrByte = new HCNetSDK.BYTE_ARRAY(iStringSize);
- System.arraycopy(strInBuffer1.getBytes(), 0, ptrByte.byValue, 0, strInBuffer1.length());
- System.arraycopy(Name, 0, ptrByte.byValue, strInBuffer1.length(), Name.length);
- System.arraycopy(strInBuffer2.getBytes(), 0, ptrByte.byValue, strInBuffer1.length() + Name.length, strInBuffer2.length());
- ptrByte.write();
-
- System.out.println(new String(ptrByte.byValue));
-
- HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024);
-
- IntByReference pInt = new IntByReference(0);
- while (true) {
- int dwState = HKVersion.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrByte.getPointer(), iStringSize, ptrOutuff.getPointer(), 1024, pInt);
- if (dwState == -1) {
- System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- break;
- }
- //读取返回的json并解析
- ptrOutuff.read();
- String strResult = new String(ptrOutuff.byValue).trim();
- System.out.println("dwState:" + dwState + ",strResult:" + strResult);
-
- JSONObject jsonResult = JSONObject.parseObject(strResult);
- int statusCode = jsonResult.getInteger("statusCode");
- String statusString = jsonResult.getString("statusString");
- if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
- System.out.println("配置等待");
- Thread.sleep(10);
- continue;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
- System.out.println("下发人员失败, json retun:" + jsonResult.toString());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
- System.out.println("下发人员异常, json retun:" + jsonResult.toString());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {//返回NET_SDK_CONFIG_STATUS_SUCCESS代表流程走通了,但并不代表下发成功,比如有些设备可能因为人员已存在等原因下发失败,所以需要解析Json报文
- if (statusCode != 1) {
- System.out.println("下发人员成功,但是有异常情况:" + jsonResult.toString());
- } else {
- System.out.println("下发人员成功: json retun:" + jsonResult.toString());
- }
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
- //下发人员时:dwState其实不会走到这里,因为设备不知道我们会下发多少个人,所以长连接需要我们主动关闭
- System.out.println("下发人员完成");
- break;
- }
- }
- if (!HKVersion.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- }
- }
- }
-
- public static int modifyUserInfo(int lUserID, String employeeNo,int planTemplateNo) throws InterruptedException, JSONException {
- int status = -1;
- HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
- //"POST /ISAPI/AccessControl/UserInfo/Record?format=json" 此URL也是下发人员
- String strInBuffer = "PUT /ISAPI/AccessControl/UserInfo/Modify?format=json";
- System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
- ptrByteArray.write();
-
- int lHandler = HKVersion.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
- if (lHandler < 0) {
- System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 成功!");
-
- //如果是0或者1或者2,则是GBK编码
- //将中文字符编码之后用数组拷贝的方式,避免因为编码导致的长度问题
- String strInBuffer1 = "{\n" +
- " \"UserInfo\":{\n" +
- " \"employeeNo\":\""+employeeNo+"\",\n" +
- " \"RightPlan\":[\n" +
- " {\n" +
- " \"doorNo\":1,\n" +
- " \"planTemplateNo\":\""+planTemplateNo+"\"\n" +
- " }\n" +
- " ]\n"+
- " }\n" +
- "}";
- int iStringSize = strInBuffer1.length();
-
- HCNetSDK.BYTE_ARRAY ptrByte = new HCNetSDK.BYTE_ARRAY(iStringSize);
- System.arraycopy(strInBuffer1.getBytes(), 0, ptrByte.byValue, 0, strInBuffer1.length());
- ptrByte.write();
-
- System.out.println(new String(ptrByte.byValue));
-
- HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(1024);
-
- IntByReference pInt = new IntByReference(0);
- while (true) {
- int dwState = HKVersion.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrByte.getPointer(), iStringSize, ptrOutuff.getPointer(), 1024, pInt);
- if (dwState == -1) {
- System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- break;
- }
- //读取返回的json并解析
- ptrOutuff.read();
- String strResult = new String(ptrOutuff.byValue).trim();
- System.out.println("dwState:" + dwState + ",strResult:" + strResult);
-
- JSONObject jsonResult = JSONObject.parseObject(strResult);
- int statusCode = jsonResult.getInteger("statusCode");
- String statusString = jsonResult.getString("statusString");
- if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
- System.out.println("配置等待");
- Thread.sleep(10);
- continue;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
- System.out.println("更新人员失败, json retun:" + jsonResult.toString());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
- System.out.println("更新人员异常, json retun:" + jsonResult.toString());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {//返回NET_SDK_CONFIG_STATUS_SUCCESS代表流程走通了,但并不代表下发成功,比如有些设备可能因为人员已存在等原因下发失败,所以需要解析Json报文
- if (statusCode != 1) {
- System.out.println("更新人员成功,但是有异常情况:" + jsonResult.toString());
- } else {
- JSONObject userInfoJson = JSONObject.parseObject(jsonResult.toString());
- if(userInfoJson.containsKey("UserInfoSearch")){
- Integer numOfFace = userInfoJson.getJSONObject("UserInfoSearch").getJSONArray("UserInfo").getJSONObject(0).getInteger("numOfFace");
- if(numOfFace > 0){
- System.out.println("更新人员成功: json retun:" + jsonResult.toString());
- status = 1;
- }else{
- System.out.println("更新人员失败: json retun:" + jsonResult.toString());
- status = -1;
- }
- }else{
- status = 1;
- }
- }
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
- //下发人员时:dwState其实不会走到这里,因为设备不知道我们会下发多少个人,所以长连接需要我们主动关闭
- System.out.println("更新人员完成");
- break;
- }
- }
- if (!HKVersion.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- }
- }
- return status;
- }
-
- /**
- * 查询人员信息
- * @param userID
- * @throws JSONException
- */
- public static String searchUserInfo(int userID,String...employeeNo) throws JSONException {
- String result = null;
- HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
- String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
- System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
- ptrByteArray.write();
-
- int lHandler = HKVersion.hCNetSDK.NET_DVR_StartRemoteConfig(userID, HCNetSDK.NET_DVR_JSON_CONFIG, ptrByteArray.getPointer(), strInBuffer.length(), null, null);
- if (lHandler < 0) {
- System.out.println("SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return result;
- } else {
- //组装查询的JSON报文,这边查询的是所有的人员
- JSONObject jsonObject = new JSONObject();
- JSONObject jsonSearchCond = new JSONObject();
-
- //如果需要查询指定的工号人员信息,把下面注释的内容去除掉即可
- JSONArray EmployeeNoList = new JSONArray();
- JSONObject employeeNo1 = new JSONObject();
- employeeNo1.put("employeeNo", employeeNo[0]);
- // JSONObject employeeNo2 = new JSONObject();
- // employeeNo2.put("employeeNo", "u10");
- EmployeeNoList.add(employeeNo1);
- // EmployeeNoList.add(employeeNo2);
- jsonSearchCond.put("EmployeeNoList", EmployeeNoList);
-
- jsonSearchCond.put("searchID", "20230912");
- jsonSearchCond.put("searchResultPosition", 0);
- jsonSearchCond.put("maxResults", 50);
- jsonObject.put("UserInfoSearchCond", jsonSearchCond);
-
- String strInbuff = jsonObject.toString();
- System.out.println("查询的json报文:" + strInbuff);
-
- //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
- HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length());
- System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
- ptrInbuff.write();
-
- //定义接收结果的结构体
- HCNetSDK.BYTE_ARRAY ptrOutuff = new HCNetSDK.BYTE_ARRAY(10 * 1024);
-
- IntByReference pInt = new IntByReference(0);
-
- while (true) {
- /*
- dwOutBuffSize是输出缓冲区大小,需要自定义指定大小,如果接口报错错误码43.说明接收设备数据的缓冲区或存放图片缓冲区不足,应扩大缓冲区大小
- */
- int dwState = HKVersion.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), ptrOutuff.getPointer(), 20 * 1024, pInt);
- System.out.println(dwState);
- if (dwState == -1) {
- System.out.println("NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_NEED_WAIT) {
- System.out.println("配置等待");
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- continue;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FAILED) {
- System.out.println("查询人员失败");
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_EXCEPTION) {
- System.out.println("查询人员异常");
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
- ptrOutuff.read();
- String trim = new String(ptrOutuff.byValue).trim();
- System.out.println("查询人员成功, json:" + trim);
- result = trim;
- break;
- } else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
- System.out.println("获取人员完成");
- break;
- }
- }
-
- if (!HKVersion.hCNetSDK.NET_DVR_StopRemoteConfig(lHandler)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- lHandler = -1;
- }
- }
-
- return result;
- }
-
- public static void deleteUserInfo(int userID) throws JSONException {
- //删除单个人员
- // String deleteUserjson="{\n" +
- // "\t\"UserInfoDetail\": {\t\n" +
- // "\t\t\"mode\": \"byEmployeeNo\",\t\n" +
- // "\t\t\"EmployeeNoList\": [\t\n" +
- // "\t\t\t{\n" +
- // "\t\t\t\t\"employeeNo\": \"test\"\t\n" +
- // "\t\t\t}\n" +
- // "\t\t]\n" +
- // "\n" +
- // "\t}\n" +
- // "}";
- //删除所有人员
- String deleteUserjson = "{\n" +
- "\t\"UserInfoDetail\": {\t\n" +
- "\t\t\"mode\": \"all\",\t\n" +
- "\t\t\"EmployeeNoList\": [\t\n" +
- "\t\t]\n" +
- "\n" +
- "\t}\n" +
- "}";
- String deleteUserUrl = "PUT /ISAPI/AccessControl/UserInfoDetail/Delete?format=json";
- String result = TransIsapi.put_isapi(userID, deleteUserUrl, deleteUserjson);
- System.out.println(result);
- //获取删除进度
- while (true) {
- String getDeleteProcessUrl = "GET /ISAPI/AccessControl/UserInfoDetail/DeleteProcess?format=json";
- String deleteResult = TransIsapi.get_isapi(userID, getDeleteProcessUrl);
- JSONObject jsonObject = JSONObject.parseObject(deleteResult);
- JSONObject jsonObject1 = jsonObject.getJSONObject("UserInfoDetailDeleteProcess");
- String process = jsonObject1.getString("status");
- System.out.println("process ="+process);
- if (process.equals("processing")) {
- System.out.println("正在删除");
- continue;
- } else if (process.equals("success")) {
- System.out.println("删除成功");
- break;
- }else if(process.equals("failed")){
- System.out.println("删除失败");
- break;
- }
- }
- }
-
- /**
- * 人员计划模板配置
- *
- * @param userID 用户登录句柄
- * @param iPlanTemplateNumber 计划模板编号,从1开始,最大值从门禁能力集获取
- */
- public static void setCardTemplate(int userID, int iPlanTemplateNumber,int dwWeekPlanNumber) {
- //设置卡权限计划模板参数
- HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND struPlanCond = new HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND();
- struPlanCond.dwSize = struPlanCond.size();
- struPlanCond.dwPlanTemplateNumber = iPlanTemplateNumber;//计划模板编号,从1开始,最大值从门禁能力集获取
- struPlanCond.wLocalControllerID = 0;//就地控制器序号[1,64],0表示门禁主机
- struPlanCond.write();
- HCNetSDK.NET_DVR_PLAN_TEMPLATE struPlanTemCfg = new HCNetSDK.NET_DVR_PLAN_TEMPLATE();
- struPlanTemCfg.dwSize = struPlanTemCfg.size();
- struPlanTemCfg.byEnable = 1; //是否使能:0- 否,1- 是
- struPlanTemCfg.dwWeekPlanNo = 2;//周计划编号,0表示无效
- struPlanTemCfg.dwHolidayGroupNo[0] = 0;//假日组编号,按值表示,采用紧凑型排列,中间遇到0则后续无效
- byte[] byTemplateName;
- try {
- byTemplateName = "CardTemplatePlan_2".getBytes("GBK");
- //计划模板名称
- for (int i = 0; i < HCNetSDK.NAME_LEN; i++) {
- struPlanTemCfg.byTemplateName[i] = 0;
- }
- System.arraycopy(byTemplateName, 0, struPlanTemCfg.byTemplateName, 0, byTemplateName.length);
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- struPlanTemCfg.write();
- IntByReference pInt = new IntByReference(0);
- Pointer lpStatusList = pInt.getPointer();
- if (false == HKVersion.hCNetSDK.NET_DVR_SetDeviceConfig(userID, HCNetSDK.NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50, 1, struPlanCond.getPointer(), struPlanCond.size(), lpStatusList, struPlanTemCfg.getPointer(), struPlanTemCfg.size())) {
- System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50失败,错误号:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return;
- }
- System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50成功!");
- //获取卡权限周计划参数
- HCNetSDK.NET_DVR_WEEK_PLAN_COND struWeekPlanCond = new HCNetSDK.NET_DVR_WEEK_PLAN_COND();
- struWeekPlanCond.dwSize = struWeekPlanCond.size();
- struWeekPlanCond.dwWeekPlanNumber = dwWeekPlanNumber;
- struWeekPlanCond.wLocalControllerID = 0;
- HCNetSDK.NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg = new HCNetSDK.NET_DVR_WEEK_PLAN_CFG();
- struWeekPlanCond.write();
- struWeekPlanCfg.write();
- Pointer lpCond = struWeekPlanCond.getPointer();
- Pointer lpInbuferCfg = struWeekPlanCfg.getPointer();
- if (false == HKVersion.hCNetSDK.NET_DVR_GetDeviceConfig(userID, HCNetSDK.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {
- System.out.println("NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + HKVersion.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;
- }
- }
- // /**一周7天,全天24小时*/
- // for (int i = 0; i < 7; i++) {
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 23;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 59;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 59;
- // }
- /**一周7天,每天设置2个时间段*/
- // for(int i=0;i<7;i++)
- // {
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 11;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 20;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 12;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].byEnable = 1;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 12;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 1;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 12;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 30;
- // struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 0;
- // }
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].byEnable = 1;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 6;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 40;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 8;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 10;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 0;
- //
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].byEnable = 1;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 12;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 25;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 14;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 20;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 0;
-
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].byEnable = 1;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].struTimeSegment.struBeginTime.byHour = 12;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].struTimeSegment.struBeginTime.byMinute = 25;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].struTimeSegment.struBeginTime.bySecond = 0;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].struTimeSegment.struEndTime.byHour = 14;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].struTimeSegment.struEndTime.byMinute = 20;
- // struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[2].struTimeSegment.struEndTime.bySecond = 0;
-
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].byEnable = 1;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 15;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struBeginTime.byMinute = 30;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struBeginTime.bySecond = 59;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struEndTime.byHour = 19;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 40;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 59;
-
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].byEnable = 1;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 11;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 20;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 59;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 12;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 00;
- struWeekPlanCfg.struPlanCfg[4].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 0;
- struWeekPlanCfg.write();
- //设置卡权限周计划参数
- if (false == HKVersion.hCNetSDK.NET_DVR_SetDeviceConfig(userID, HCNetSDK.NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {
- System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50成功!");
- }
- }
-
-
- /**
- * 人员计划模板配置
- *
- * @param userID 用户登录句柄
- * @param dwWeekPlanNumber 计划模板编号,从1开始,1-2是系统默认的不要修改,最大值从门禁能力集获取
- */
- public static CardTemplateInfo getCardTemplate(int userID,int dwWeekPlanNumber) {
- IntByReference pInt = new IntByReference(0);
- Pointer lpStatusList = pInt.getPointer();
- //获取卡权限周计划参数
- HCNetSDK.NET_DVR_WEEK_PLAN_COND struWeekPlanCond = new HCNetSDK.NET_DVR_WEEK_PLAN_COND();
- struWeekPlanCond.dwSize = struWeekPlanCond.size();
- struWeekPlanCond.dwWeekPlanNumber = dwWeekPlanNumber;
- struWeekPlanCond.wLocalControllerID = 0;
- HCNetSDK.NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg = new HCNetSDK.NET_DVR_WEEK_PLAN_CFG();
- struWeekPlanCond.write();
- struWeekPlanCfg.write();
- Pointer lpCond = struWeekPlanCond.getPointer();
- Pointer lpInbuferCfg = struWeekPlanCfg.getPointer();
- if (false == HKVersion.hCNetSDK.NET_DVR_GetDeviceConfig(userID, HCNetSDK.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {
- System.out.println("NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return null;
- }
- struWeekPlanCfg.read();
- CardTemplateInfo cardTemplateInfo = new CardTemplateInfo();
- cardTemplateInfo.setTemplateId(dwWeekPlanNumber);
- List<CardTemplateInfo.TimeSegmentInfo> timeSegmentInfos = cardTemplateInfo.getTimeSegmentInfos();
- for (int i = 0; i < 7; i++) {
- int weekday = (i+1);
- System.out.println("星期:"+weekday);
- for (int j = 0; j < 8; j++) {
- CardTemplateInfo.TimeSegmentInfo timeSegmentInfo = new CardTemplateInfo.TimeSegmentInfo();
- byte enable = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].byEnable;
- byte beginTimeHour = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byHour;
- byte beginTimeMinute = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.byMinute;
- byte beginTimeSecond = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struBeginTime.bySecond;
- byte endTimeHour = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byHour;
- byte endTimeMinute = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.byMinute;
- byte endTimeSecond = struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[j].struTimeSegment.struEndTime.bySecond;
- timeSegmentInfo.setEnable(enable);
- timeSegmentInfo.setBeginTimeHour(beginTimeHour);
- timeSegmentInfo.setBeginTimeMinute(beginTimeMinute);
- timeSegmentInfo.setBeginTimeSecond(beginTimeSecond);
- timeSegmentInfo.setEndTimeHour(endTimeHour);
- timeSegmentInfo.setEndTimeMinute(endTimeMinute);
- timeSegmentInfo.setEndTimeSecond(endTimeSecond);
- timeSegmentInfo.setWeekday(weekday);
- timeSegmentInfo.setTimeSegment(j);
- if(enable == 1){
- timeSegmentInfos.add(timeSegmentInfo);
- }
- System.out.print("可用状态:"+ enable);
- System.out.println("\t时间段"+j+":"+ beginTimeHour
- + ":"
- + beginTimeMinute
- + ":"
- + beginTimeSecond + "--" + endTimeHour
- + ":"
- + endTimeMinute
- + ":"
- + endTimeSecond);
- }
- }
- return cardTemplateInfo;
- }
-
-
- /**
- * 人员计划模板配置
- *
- * @param userID 用户登录句柄
- * @param info 计划模板编号,从1开始,最大值从门禁能力集获取
- */
- public static int setCardTemplate(int userID, CardTemplateInfo info) {
- int iPlanTemplateNumber = info.getTemplateId();
- //设置卡权限计划模板参数
- HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND struPlanCond = new HCNetSDK.NET_DVR_PLAN_TEMPLATE_COND();
- struPlanCond.dwSize = struPlanCond.size();
- struPlanCond.dwPlanTemplateNumber = iPlanTemplateNumber;//计划模板编号,从1开始,最大值从门禁能力集获取
- struPlanCond.wLocalControllerID = 0;//就地控制器序号[1,64],0表示门禁主机
- struPlanCond.write();
- HCNetSDK.NET_DVR_PLAN_TEMPLATE struPlanTemCfg = new HCNetSDK.NET_DVR_PLAN_TEMPLATE();
- struPlanTemCfg.dwSize = struPlanTemCfg.size();
- struPlanTemCfg.byEnable = info.getEnable(); //是否使能:0- 否,1- 是
- struPlanTemCfg.dwWeekPlanNo = iPlanTemplateNumber;//周计划编号,0表示无效
- struPlanTemCfg.dwHolidayGroupNo[0] = 0;//假日组编号,按值表示,采用紧凑型排列,中间遇到0则后续无效
- byte[] byTemplateName;
- try {
- byTemplateName = info.getTemplateName().getBytes("GBK");
- //计划模板名称
- for (int i = 0; i < HCNetSDK.NAME_LEN; i++) {
- struPlanTemCfg.byTemplateName[i] = 0;
- }
- System.arraycopy(byTemplateName, 0, struPlanTemCfg.byTemplateName, 0, byTemplateName.length);
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- struPlanTemCfg.write();
- IntByReference pInt = new IntByReference(0);
- Pointer lpStatusList = pInt.getPointer();
- if (false == HKVersion.hCNetSDK.NET_DVR_SetDeviceConfig(userID, HCNetSDK.NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50, 1, struPlanCond.getPointer(), struPlanCond.size(), lpStatusList, struPlanTemCfg.getPointer(), struPlanTemCfg.size())) {
- System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50失败,错误号:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return -1;
- }
- System.out.println("NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50成功!");
- //获取卡权限周计划参数
- HCNetSDK.NET_DVR_WEEK_PLAN_COND struWeekPlanCond = new HCNetSDK.NET_DVR_WEEK_PLAN_COND();
- struWeekPlanCond.dwSize = struWeekPlanCond.size();
- struWeekPlanCond.dwWeekPlanNumber = iPlanTemplateNumber;
- struWeekPlanCond.wLocalControllerID = 0;
- HCNetSDK.NET_DVR_WEEK_PLAN_CFG struWeekPlanCfg = new HCNetSDK.NET_DVR_WEEK_PLAN_CFG();
- struWeekPlanCond.write();
- struWeekPlanCfg.write();
- Pointer lpCond = struWeekPlanCond.getPointer();
- Pointer lpInbuferCfg = struWeekPlanCfg.getPointer();
- if (false == HKVersion.hCNetSDK.NET_DVR_GetDeviceConfig(userID, HCNetSDK.NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {
- System.out.println("NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return -1;
- }
- struWeekPlanCfg.read();
- struWeekPlanCfg.byEnable = info.getEnable(); //是否使能: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;
- }
- }
- List<CardTemplateInfo.TimeSegmentInfo> timeSegmentInfos = info.getTimeSegmentInfos();
- Map<Integer, List<CardTemplateInfo.TimeSegmentInfo>> timeSegmentInfoWeekDayMap = timeSegmentInfos.stream().collect(Collectors.groupingBy(i -> i.getWeekday()));
- timeSegmentInfoWeekDayMap.forEach((k,v) ->{
- for (CardTemplateInfo.TimeSegmentInfo timeSegmentInfo : v) {
- int timeSegment = timeSegmentInfo.getTimeSegment();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].byEnable = timeSegmentInfo.getEnable();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].struTimeSegment.struBeginTime.byHour = timeSegmentInfo.getBeginTimeHour();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].struTimeSegment.struBeginTime.byMinute = timeSegmentInfo.getBeginTimeMinute();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].struTimeSegment.struBeginTime.bySecond = timeSegmentInfo.getBeginTimeSecond();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].struTimeSegment.struEndTime.byHour = timeSegmentInfo.getEndTimeHour();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].struTimeSegment.struEndTime.byMinute = timeSegmentInfo.getEndTimeMinute();
- struWeekPlanCfg.struPlanCfg[k].struPlanCfgDay[timeSegment].struTimeSegment.struEndTime.bySecond = timeSegmentInfo.getEndTimeSecond();
- }
- });
-
- struWeekPlanCfg.write();
- //设置卡权限周计划参数
- if (false == HKVersion.hCNetSDK.NET_DVR_SetDeviceConfig(userID, HCNetSDK.NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50, 1, lpCond, struWeekPlanCond.size(), lpStatusList, lpInbuferCfg, struWeekPlanCfg.size())) {
- System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50失败,错误号:" + HKVersion.hCNetSDK.NET_DVR_GetLastError());
- return -1;
- } else {
- System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50成功!");
- return 1;
- }
- }
- }
|