Преглед изворни кода

增加进出时间,人员设置进出模板

Signed-off-by: haidong <chenloveguitar@qq.com>
doorRight设置
haidong пре 2 година
родитељ
комит
ad60d4e31e
7 измењених фајлова са 210 додато и 34 уклоњено
  1. +4
    -4
      src/main/java/com/hkversion/Acs/AcsMain.java
  2. +126
    -27
      src/main/java/com/hkversion/Acs/UserManage.java
  3. +9
    -0
      src/main/java/com/yzx/IHardwareEquipment.java
  4. +1
    -1
      src/main/java/com/yzx/Main.java
  5. +31
    -0
      src/main/java/com/yzx/impl/CardTemplateInfo.java
  6. +28
    -2
      src/main/java/com/yzx/impl/HKVersion.java
  7. +11
    -0
      src/main/java/com/yzx/pojo/UserFaceInfo.java

+ 4
- 4
src/main/java/com/hkversion/Acs/AcsMain.java Прегледај датотеку

@@ -91,14 +91,14 @@ public class AcsMain {
//开启SDK日志打印
boolean i= hCNetSDK.NET_DVR_SetLogToFile(3, "./sdklog", false);

login_V40("175.155.64.18","admin","ADMIN12345",(short) 50021); //登陆设备
login_V40("175.155.64.18","admin","ADMIN12345",(short) 50023); //登陆设备
/**
* 人员管理模块
*/
UserManage.searchUserInfo(lUserID,"u10"); //查询所有人员
// UserManage.searchUserInfo(lUserID,"s4775"); //查询所有人员
// UserManage.deleteUserInfo(lUserID);
// UserManage.addUserInfo(lUserID,"test20221122"); //添加人员
// UserManage.modifyUserInfo(lUserID,"s00001",9);
UserManage.modifyUserInfo(lUserID,"s4775",0);

/**
* 人脸管理模块
@@ -140,7 +140,7 @@ public class AcsMain {
// MutilCard.setGroupCfg(lUserID);
// MutilCard.setMultiCardCfg(lUserID);
//计划模板
// UserManage.setCardTemplate(lUserID,9);
UserManage.setCardTemplate(lUserID,1);

//设备能力获取
// DeviceAbility.getDeviceAbility(lUserID,0x01);


+ 126
- 27
src/main/java/com/hkversion/Acs/UserManage.java Прегледај датотеку

@@ -6,8 +6,12 @@ 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 java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* 功能:人脸下发、查询、删除、人员计划模板配置
@@ -120,7 +124,7 @@ public class UserManage {
}
}

public static void modifyUserInfo(int lUserID, String employeeNo,int planTemplateNo) throws UnsupportedEncodingException, InterruptedException, JSONException {
public static int modifyUserInfo(int lUserID, String employeeNo,int planTemplateNo) throws 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/Modify?format=json";
@@ -130,7 +134,6 @@ public class UserManage {
int lHandler = AcsMain.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 失败,错误码为" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
return;
} else {
System.out.println("AddUserInfo NET_DVR_StartRemoteConfig 成功!");

@@ -200,8 +203,10 @@ public class UserManage {
System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
} else {
System.out.println("NET_DVR_StopRemoteConfig接口成功");
return 1;
}
}
return -1;
}

/**
@@ -423,33 +428,33 @@ public class UserManage {
for(int i=0;i<7;i++)
{
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].byEnable = 1;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struBeginTime.byHour = 16;
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 = 16;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.byMinute = 30;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[0].struTimeSegment.struEndTime.bySecond = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].byEnable = 1;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 17;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 5;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 17;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 10;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].byEnable = 1;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struBeginTime.byHour = 18;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struBeginTime.byMinute = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struBeginTime.bySecond = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struEndTime.byHour = 18;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struEndTime.byMinute = 30;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struEndTime.bySecond = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].byEnable = 1;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struBeginTime.byHour = 19;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struBeginTime.byMinute = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struBeginTime.bySecond = 0;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struEndTime.byHour = 19;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struEndTime.byMinute = 30;
struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struEndTime.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;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].byEnable = 1;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byHour = 17;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.byMinute = 5;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struBeginTime.bySecond = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byHour = 17;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.byMinute = 10;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[1].struTimeSegment.struEndTime.bySecond = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].byEnable = 1;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struBeginTime.byHour = 18;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struBeginTime.byMinute = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struBeginTime.bySecond = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struEndTime.byHour = 18;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struEndTime.byMinute = 30;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[2].struTimeSegment.struEndTime.bySecond = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].byEnable = 1;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struBeginTime.byHour = 19;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struBeginTime.byMinute = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struBeginTime.bySecond = 0;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struEndTime.byHour = 19;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struEndTime.byMinute = 30;
// struWeekPlanCfg.struPlanCfg[i].struPlanCfgDay[3].struTimeSegment.struEndTime.bySecond = 0;
}
struWeekPlanCfg.write();
//设置卡权限周计划参数
@@ -459,4 +464,98 @@ public class UserManage {
System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50成功!");
}
}


/**
* 人员计划模板配置
*
* @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 = 2;//周计划编号,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 == AcsMain.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失败,错误号:" + AcsMain.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 = 2;
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 == AcsMain.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失败,错误号:" + AcsMain.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 == AcsMain.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失败,错误号:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
return -1;
} else {
System.out.println("NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50成功!");
return 1;
}
}
}

+ 9
- 0
src/main/java/com/yzx/IHardwareEquipment.java Прегледај датотеку

@@ -1,5 +1,10 @@
package com.yzx;

import com.yzx.impl.CardTemplateInfo;
import com.yzx.pojo.UserFaceInfo;

import java.util.List;

public interface IHardwareEquipment {

/**
@@ -12,4 +17,8 @@ public interface IHardwareEquipment {
//获取状态
int getStatus();

int setCardTemplate(CardTemplateInfo info);

void modifyUserInfo(List<UserFaceInfo> userFaceInfos);

}

+ 1
- 1
src/main/java/com/yzx/Main.java Прегледај датотеку

@@ -25,7 +25,7 @@ public class Main {
//3.如果文件上传失败,需要重试,如果失败了,先存在本地,利用数据库的id作为标识,写一个定时任务,重新更新和上传.

new Thread(() -> {
IHardwareEquipment hardwareEquipment1 = new HKVersion(new HardwareEquipmentInfo("192.168.69.64",(short) 8000,"admin","yzx123456.",alarmCallback));
IHardwareEquipment hardwareEquipment1 = new HKVersion(new HardwareEquipmentInfo("192.168.69.64",(short) 8000,"admin","yzx123456.",alarmCallback),true);
while (true){}
// if(hardwareEquipment1.getStatus() == 1){
// String deployInfo1 = hardwareEquipment1.getDeployInfo();


+ 31
- 0
src/main/java/com/yzx/impl/CardTemplateInfo.java Прегледај датотеку

@@ -0,0 +1,31 @@
package com.yzx.impl;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class CardTemplateInfo {

private int templateId;
private String templateName;
private byte enable;//模板是否生效 1是 0否
private List<TimeSegmentInfo> timeSegmentInfos = new ArrayList();


@Data
public static class TimeSegmentInfo{
private int weekday;//周几
private int timeSegment;//时间段 0-7 八个时间段
private byte enable;//是否有效 1 是 0 否
private byte beginTimeHour;//开始小时
private byte beginTimeMinute;//开始分钟
private byte beginTimeSecond;//开始秒
private byte endTimeHour;//开始小时
private byte endTimeMinute;//开始分钟
private byte endTimeSecond;//开始秒
}

}

+ 28
- 2
src/main/java/com/yzx/impl/HKVersion.java Прегледај датотеку

@@ -1,6 +1,7 @@
package com.yzx.impl;

import com.common.osSelect;
import com.hkversion.Acs.UserManage;
import com.hkversion.FMSGCallBack;
import com.hkversion.FMSGCallBack_V31;
import com.hkversion.HCNetSDK;
@@ -8,6 +9,9 @@ import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.yzx.IHardwareEquipment;
import com.yzx.callback.AlarmCallback;
import com.yzx.pojo.UserFaceInfo;

import java.util.List;

public class HKVersion implements IHardwareEquipment {

@@ -37,9 +41,11 @@ public class HKVersion implements IHardwareEquipment {
hCNetSDK.NET_DVR_SetLogToFile(3, "../sdklog", false);
}
private HardwareEquipmentInfo info;
public HKVersion(HardwareEquipmentInfo info){
public HKVersion(HardwareEquipmentInfo info,boolean deploy){
this.info = info;
this.alarm(info.getAlarmCallback());
if(deploy){
this.alarm(info.getAlarmCallback());
}
}

private void alarm(AlarmCallback callback){
@@ -215,6 +221,26 @@ public class HKVersion implements IHardwareEquipment {
return -1;
}


@Override
public int setCardTemplate(CardTemplateInfo cardTemplateInfo) {
this.Login_V40(this.info.getIp(),this.info.getPort(),this.info.getUsername(),this.info.getPassword());
return UserManage.setCardTemplate(lUserID,cardTemplateInfo);
}

@Override
public void modifyUserInfo(List<UserFaceInfo> userFaceInfos) {
for (UserFaceInfo userFaceInfo : userFaceInfos) {
try {
int i = UserManage.modifyUserInfo(lUserID, userFaceInfo.getEmployeeNo(), userFaceInfo.getTemplateId());
userFaceInfo.setStatus(i);
} catch (InterruptedException e) {
e.printStackTrace();
userFaceInfo.setStatus(-1);
}
}
}

/**
* 动态库加载
*


+ 11
- 0
src/main/java/com/yzx/pojo/UserFaceInfo.java Прегледај датотеку

@@ -0,0 +1,11 @@
package com.yzx.pojo;

import lombok.Data;

@Data
public class UserFaceInfo {
private int templateId;
private String employeeNo;
private int status;//状态 1 成功 -1失败
private int person_id;
}

Loading…
Откажи
Сачувај