diff --git a/README.md b/README.md index 08865c7..c8993df 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ 该工程用于项目引入访问硬件设备 -支持硬件厂商: -1.大华 -2.海康 \ No newline at end of file +支持硬件厂商: +2.海康 + +因海康和大华使用的jna版本不同大华的高版本,海康的低版本,所以只支持一方 +解决办法是使用大华提供的高版本jna,将海康的HCNetSDK.java文件中的Structure 继承到最新版本jna + diff --git a/pom.xml b/pom.xml index f11f1c8..bf13951 100644 --- a/pom.xml +++ b/pom.xml @@ -20,9 +20,14 @@ 1.0.0 - net.java.dev.jna + com.hikvision + netsdk + 1.0.0 + + + com.sun.jna jna - 5.4.0 + 1.0.0 org.projectlombok diff --git a/src/main/java/com/hkversion/AlarmDataParse.java b/src/main/java/com/hkversion/AlarmDataParse.java index e23b701..822fe2a 100644 --- a/src/main/java/com/hkversion/AlarmDataParse.java +++ b/src/main/java/com/hkversion/AlarmDataParse.java @@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSONObject; import com.common.CommonUtil; import com.sun.jna.Pointer; import com.yzx.callback.AlarmCallback; +import sun.misc.BASE64Encoder; import java.io.*; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; +import java.util.Base64; import java.util.Date; /** @@ -582,6 +584,11 @@ public class AlarmDataParse { System.out.println("【门禁主机报警信息】卡号:" + new String(strACSInfo.struAcsEventInfo.byCardNo).trim() + ",卡类型:" + strACSInfo.struAcsEventInfo.byCardType + ",报警主类型:" + Integer.toHexString(strACSInfo.dwMajor) + ",报警次类型:" + Integer.toHexString(strACSInfo.dwMinor)); System.out.println("工号1:" + strACSInfo.struAcsEventInfo.dwEmployeeNo); + json.put("dwEmployeeNo",strACSInfo.struAcsEventInfo.dwEmployeeNo); + json.put("byCardNo",new String(strACSInfo.struAcsEventInfo.byCardNo).trim()); + json.put("byCardType",strACSInfo.struAcsEventInfo.byCardType); + json.put("dwMajor",Integer.toHexString(strACSInfo.dwMajor)); + json.put("dwMinor",Integer.toHexString(strACSInfo.dwMinor)); //温度信息(如果设备支持测温功能,人脸温度信息从NET_DVR_ACS_EVENT_INFO_EXTEND_V20结构体获取) if (strACSInfo.byAcsEventInfoExtendV20 == 1) { HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND_V20 strAcsInfoExV20 = new HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND_V20(); @@ -590,6 +597,7 @@ public class AlarmDataParse { pAcsInfoExV20.write(0, strACSInfo.pAcsEventInfoExtendV20.getByteArray(0, strAcsInfoExV20.size()), 0, strAcsInfoExV20.size()); strAcsInfoExV20.read(); System.out.println("实时温度值:" + strAcsInfoExV20.fCurrTemperature); + json.put("currTemperature",strAcsInfoExV20.fCurrTemperature); } //考勤状态 if (strACSInfo.byAcsEventInfoExtend == 1) { @@ -600,6 +608,8 @@ public class AlarmDataParse { strAcsInfoEx.read(); System.out.println("考勤状态:" + strAcsInfoEx.byAttendanceStatus); System.out.println("工号2:" + new String(strAcsInfoEx.byEmployeeNo).trim()); + json.put("byEmployeeNo",new String(strAcsInfoEx.byEmployeeNo).trim()); + json.put("attendanceStatus",strAcsInfoEx.byAttendanceStatus); } /** @@ -631,6 +641,7 @@ public class AlarmDataParse { buffers.get(bytes); fout.write(bytes); fout.close(); + json.put("pic_bytes",bytes); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -639,6 +650,7 @@ public class AlarmDataParse { e.printStackTrace(); } } + callback.process(json); break; case HCNetSDK.COMM_ID_INFO_ALARM: //身份证信息 diff --git a/src/main/java/com/hkversion/FMSGCallBack.java b/src/main/java/com/hkversion/FMSGCallBack.java index c5f6965..f470529 100644 --- a/src/main/java/com/hkversion/FMSGCallBack.java +++ b/src/main/java/com/hkversion/FMSGCallBack.java @@ -1,6 +1,7 @@ package com.hkversion; import com.sun.jna.Pointer; +import com.yzx.callback.AlarmCallback; /** @@ -8,9 +9,14 @@ import com.sun.jna.Pointer; * @create 2022-08-15-17:26 */ public class FMSGCallBack implements HCNetSDK.FMSGCallBack { + + private AlarmCallback callback; + public FMSGCallBack(AlarmCallback callback){ + this.callback = callback; + } //报警信息回调函数 public void invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { - AlarmDataParse.alarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser); + AlarmDataParse.alarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser,callback); return; } } diff --git a/src/main/java/com/yzx/Main.java b/src/main/java/com/yzx/Main.java index 5f5f488..26f58df 100644 --- a/src/main/java/com/yzx/Main.java +++ b/src/main/java/com/yzx/Main.java @@ -1,5 +1,6 @@ package com.yzx; +import com.alibaba.fastjson.JSONObject; import com.yzx.callback.AlarmCallback; import com.yzx.impl.HKVersion; import com.yzx.impl.HardwareEquipmentInfo; @@ -9,14 +10,13 @@ public class Main { AlarmCallback alarmCallback = new AlarmCallback() { @Override - public void process(String json) { + public void process(JSONObject json) { System.out.println(" 告警回调触发......"); System.out.println("json = " + json); } }; - HardwareEquipmentInfo info = new HardwareEquipmentInfo("192.168.69.128",(short) 8000,"admin","yzx123456",alarmCallback); - IHardwareEquipment hardwareEquipment = new HKVersion(info); - + new HKVersion(new HardwareEquipmentInfo("192.168.69.128",(short) 8000,"admin","yzx123456",alarmCallback)); + new HKVersion(new HardwareEquipmentInfo("192.168.69.140",(short) 8000,"admin","yzx123456",alarmCallback)); } } diff --git a/src/main/java/com/yzx/callback/AlarmCallback.java b/src/main/java/com/yzx/callback/AlarmCallback.java index 1dda17e..1d780f4 100644 --- a/src/main/java/com/yzx/callback/AlarmCallback.java +++ b/src/main/java/com/yzx/callback/AlarmCallback.java @@ -1,8 +1,10 @@ package com.yzx.callback; +import com.alibaba.fastjson.JSONObject; + public interface AlarmCallback { /** * 告警回调函数,调用方必须实现该函数方可收到硬件设备的告警数据 */ - void process(String json); + void process(JSONObject json); } diff --git a/src/main/java/com/yzx/impl/HKVersion.java b/src/main/java/com/yzx/impl/HKVersion.java index f5639a7..ba3fd34 100644 --- a/src/main/java/com/yzx/impl/HKVersion.java +++ b/src/main/java/com/yzx/impl/HKVersion.java @@ -35,7 +35,6 @@ public class HKVersion implements IHardwareEquipment { public HKVersion(HardwareEquipmentInfo info){ this.info = info; this.alarm(info.getAlarmCallback()); - } private void alarm(AlarmCallback callback){ diff --git a/src/main/libs/jna.jar b/src/main/libs/jna.jar index af5dd08..33461ec 100644 Binary files a/src/main/libs/jna.jar and b/src/main/libs/jna.jar differ