Browse Source

设备事件

master
07 3 years ago
parent
commit
45859b1636
  1. 4
      src/main/java/com/oldwei/hikdev/controller/DeviceController.java
  2. 54
      src/main/java/com/oldwei/hikdev/scheduled/ScheduledTask.java
  3. 75
      src/main/java/com/oldwei/hikdev/service/impl/HikAccessControlServiceImpl.java
  4. 50
      src/main/java/com/oldwei/hikdev/util/NetDvrTimeUtil.java

4
src/main/java/com/oldwei/hikdev/controller/DeviceController.java

@ -75,8 +75,8 @@ public class DeviceController {
* @return 注销结果 true/false
*/
@PostMapping("clean")
public HikDevResponse clean(@RequestBody DeviceSn deviceSn) {
return this.hikDeviceService.clean(deviceSn.getDeviceSn()) ? new HikDevResponse().ok() : new HikDevResponse().err();
public HikDevResponse clean(String deviceSn) {
return this.hikDeviceService.clean(deviceSn) ? new HikDevResponse().ok() : new HikDevResponse().err();
}
/**

54
src/main/java/com/oldwei/hikdev/scheduled/ScheduledTask.java

@ -42,31 +42,31 @@ public class ScheduledTask {
//
//每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
/**
* 一分钟执行一次
*
* @throws IOException
*/
@Scheduled(cron = "0 */1 * * * ?")
public void searchHikDevice() throws IOException {
String uuid = "<Probe><Uuid>" + IdUtil.randomUUID().toUpperCase() + "</Uuid><Types>inquiry</Types></Probe>";
InetAddress address = InetAddress.getByName("239.255.255.250");
byte[] data = uuid.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, address, 37020);
this.udpDatagramSocket.getDatagramSocket().send(packet);
}
/**
* 获取云端设备列表进行登录
*
* @throws IOException
*/
@Scheduled(cron = "0 */1 * * * ?")
public void getHikDeviceAndLogin() {
// 根据项目id获取云端设备列表
// 比对当前登录设备
// 登录需要登陆的设备
}
// /**
// * 一分钟执行一次
// *
// * @throws IOException
// */
// @Scheduled(cron = "0 */1 * * * ?")
// public void searchHikDevice() throws IOException {
// String uuid = "<Probe><Uuid>" + IdUtil.randomUUID().toUpperCase() + "</Uuid><Types>inquiry</Types></Probe>";
// InetAddress address = InetAddress.getByName("239.255.255.250");
// byte[] data = uuid.getBytes();
// DatagramPacket packet = new DatagramPacket(data, data.length, address, 37020);
// this.udpDatagramSocket.getDatagramSocket().send(packet);
// }
//
// /**
// * 获取云端设备列表进行登录
// *
// * @throws IOException
// */
// @Scheduled(cron = "0 */1 * * * ?")
// public void getHikDeviceAndLogin() {
// // 根据项目id获取云端设备列表
//
// // 比对当前登录设备
//
// // 登录需要登陆的设备
// }
}

75
src/main/java/com/oldwei/hikdev/service/impl/HikAccessControlServiceImpl.java

@ -21,10 +21,12 @@ import com.oldwei.hikdev.entity.access.Valid;
import com.oldwei.hikdev.entity.param.AccessControlUser;
import com.oldwei.hikdev.entity.param.EditUserParam;
import com.oldwei.hikdev.entity.param.UserFaceParam;
import com.oldwei.hikdev.service.HCNetSDK;
import com.oldwei.hikdev.service.IHikAccessControlService;
import com.oldwei.hikdev.service.IHikDevService;
import com.oldwei.hikdev.structure.*;
import com.oldwei.hikdev.util.ImageFromNetWork;
import com.oldwei.hikdev.util.NetDvrTimeUtil;
import com.oldwei.hikdev.util.StringEncodingUtil;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
@ -36,10 +38,7 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @author oldwei
@ -1127,4 +1126,72 @@ public class HikAccessControlServiceImpl implements IHikAccessControlService {
return result;
}
/**
* 调用设备事件
*/
public void getDeviceCase(String deviceSn,Date startTime,Date endTime) {
Map<String,String> eventMap;// 储存事件信息的map
// 调用获取设备事件长连接
HCNetSDK.NET_DVR_ACS_EVENT_COND struAcsEventCond = new HCNetSDK.NET_DVR_ACS_EVENT_COND();
struAcsEventCond.read();
struAcsEventCond.dwSize = struAcsEventCond.size();
struAcsEventCond.dwMajor = 5;// 5代表event事件
struAcsEventCond.dwMinor = 0x4b;// 代表刷脸成功
struAcsEventCond.struStartTime = NetDvrTimeUtil.getDvrStruTime(startTime);// ****必须要
struAcsEventCond.struEndTime = NetDvrTimeUtil.getDvrStruTime(endTime);// ***必须要
struAcsEventCond.write();
Pointer ptrStruEventCond = struAcsEventCond.getPointer();
Integer longUserId = this.dataCache.getInteger(DataCachePrefixConstant.HIK_REG_USERID + deviceSn);
Integer lHandle = this.hikDevService.NET_DVR_StartRemoteConfig(longUserId,HCNetSDK.NET_DVR_GET_ACS_EVENT,ptrStruEventCond,struAcsEventCond.size(),null,null);
if (lHandle == -1){
System.out.println("建立获取设备事件长连接失败,错误码为"+this.hikDevService.NET_DVR_GetLastError());
return;
}else{
System.out.println("建立获取设备事件连接成功!"+lHandle);
}
// 获取设备详细事件开始
HCNetSDK.NET_DVR_ACS_EVENT_CFG struEventCFG = new HCNetSDK.NET_DVR_ACS_EVENT_CFG();
struEventCFG.read();
struEventCFG.dwSize = struEventCFG.size();
struEventCFG.write();
while(true){
Integer dwState = this.hikDevService.NET_DVR_GetNextRemoteConfig(lHandle, struEventCFG.getPointer(), struEventCFG.size());
struEventCFG.read();
if (dwState == -1){
System.out.println("NET_DVR_GetNextRemoteConfig接口调用失败,错误码:" + this.hikDevService.NET_DVR_GetLastError());
continue;
}else if (dwState == HCNetSDK.NET_SDK_GET_NEXT_STATUS_NEED_WAIT){
// 配置等待
System.out.println("==========配置等待==============");
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
continue;
}else if (dwState == HCNetSDK.NET_SDK_GET_NEXT_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_GET_NEXT_STATUS_SUCCESS){
// 获取设备事件成功
eventMap = new HashMap<>(16);
eventMap.put("employeeNo",StringEncodingUtil.guessEncodingTransformString(struEventCFG.struAcsEventInfo.byEmployeeNo));
eventMap.put("cardNo",StringEncodingUtil.guessEncodingTransformString(struEventCFG.struAcsEventInfo.byCardNo));
eventMap.put("struTime",NetDvrTimeUtil.getDateStr(NetDvrTimeUtil.getDate(struEventCFG.struTime)));
// eventList.add(eventMap);
continue;
}else if(dwState == HCNetSDK.NET_SDK_NEXT_STATUS__FINISH) {
// 获取设备事件信息完成
System.out.println("=============获取设备事件完成================");
break;
}
}
}
}

50
src/main/java/com/oldwei/hikdev/util/NetDvrTimeUtil.java

@ -0,0 +1,50 @@
package com.oldwei.hikdev.util;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import com.oldwei.hikdev.service.HCNetSDK;
import lombok.extern.slf4j.Slf4j;
import org.mozilla.universalchardet.UniversalDetector;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author oldwei
* @date 2021-5-14 17:28
*/
@Slf4j
public class NetDvrTimeUtil {
public static HCNetSDK.NET_DVR_TIME getDvrStruTime(Date date) {
HCNetSDK.NET_DVR_TIME dvrTime = new HCNetSDK.NET_DVR_TIME();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
dvrTime.dwYear = cal.get(Calendar.YEAR);
dvrTime.dwMonth = cal.get(Calendar.MONTH)+1;
dvrTime.dwDay = cal.get(Calendar.DATE);
dvrTime.dwHour=0;
dvrTime.dwMinute=0;
dvrTime.dwSecond=0;
return dvrTime;
}
public static Date getDate(HCNetSDK.NET_DVR_TIME dvrTime) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,dvrTime.dwYear);
cal.set(Calendar.MONTH,dvrTime.dwMonth-1);
cal.set(Calendar.DATE,dvrTime.dwDay);
cal.set(Calendar.HOUR_OF_DAY,dvrTime.dwHour);
cal.set(Calendar.MINUTE,dvrTime.dwMinute);
cal.set(Calendar.SECOND,dvrTime.dwSecond);
return cal.getTime();
}
public static String getDateStr(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
}
Loading…
Cancel
Save