From 483f72f5540bdefb3ddd4726113b3c171eb7107d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Thu, 06 Jul 2023 17:20:41 +0800
Subject: [PATCH] 增加外联设备报警解析并上传mqtt
---
src/main/java/com/ard/utils/tcp/ClientHandler.java | 20 --
src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java | 3
src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java | 1
src/main/java/com/ard/utils/DateUtils.java | 9
src/main/java/com/ard/utils/ByteUtils.java | 21 +++
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | 43 +++++
src/main/java/com/ard/alarm/camera/domain/CameraCmd.java | 3
src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java | 70 ++++++++++
src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 134 +++++++++++++++++-
src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java | 78 ++++++++++
src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java | 20 --
src/main/resources/application.yml | 7
src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java | 2
13 files changed, 347 insertions(+), 64 deletions(-)
diff --git a/src/main/java/com/ard/alarm/camera/domain/CameraCmd.java b/src/main/java/com/ard/alarm/camera/domain/CameraCmd.java
index 96ef4a2..3e41669 100644
--- a/src/main/java/com/ard/alarm/camera/domain/CameraCmd.java
+++ b/src/main/java/com/ard/alarm/camera/domain/CameraCmd.java
@@ -37,4 +37,7 @@
String objectName;
/*是否上传minio*/
boolean isUploadMinio;
+
+ /*防区号 从0开始*/
+ Integer wZoneIndex;
}
diff --git a/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java b/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java
index 3689447..ee7702e 100644
--- a/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java
+++ b/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java
@@ -50,7 +50,7 @@
String start = messages[0];
String host = messages[1];
String tubeId = messages[2];
- String alarmTime = DateUtils.convertDate(messages[3]);
+ String alarmTime = DateUtils.convertDate(messages[3],"yyyy/M/d H:m:s");
String position = messages[4];
String type = messages[5];
String watcher = messages[6];
diff --git a/src/main/java/com/ard/utils/ByteUtils.java b/src/main/java/com/ard/utils/ByteUtils.java
index 33c7856..c121eaf 100644
--- a/src/main/java/com/ard/utils/ByteUtils.java
+++ b/src/main/java/com/ard/utils/ByteUtils.java
@@ -2,6 +2,7 @@
import javax.xml.bind.DatatypeConverter;
import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.zip.CRC32;
@@ -14,6 +15,26 @@
**/
public class ByteUtils {
/**
+ * byte数组转中文字符串
+ */
+ public static String bytesToStringZh(byte[] bytes) {
+ String zhStr = "";
+ try {
+ int position = ByteUtils.findIndexOfDoubleZero(bytes);
+ if (position != -1) {
+ byte[] result = new byte[position];
+ System.arraycopy(bytes, 0, result, 0, position);
+ zhStr = new String(result, "GBK");
+ } else {
+ zhStr = new String(bytes, "GBK");
+ }
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ return zhStr;
+ }
+
+ /**
* Byte字节转Hex
*
* @param b 字节
diff --git a/src/main/java/com/ard/utils/DateUtils.java b/src/main/java/com/ard/utils/DateUtils.java
index 00c25d9..c735626 100644
--- a/src/main/java/com/ard/utils/DateUtils.java
+++ b/src/main/java/com/ard/utils/DateUtils.java
@@ -199,10 +199,11 @@
/**
* 日期字符串的月日时分秒自动补零,并将/替换成-
+ * "yyyy/M/d H:m:s" to "yyyy-MM-dd HH:mm:ss"
* */
- public static String convertDate(String startDate) {
- DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy/M/d H:m:s");
- DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- return LocalDateTime.parse(startDate, inputFormat).format(outputFormat);
+ public static String convertDate(String startDate,String inputFormat) {
+ DateTimeFormatter inputdtf = DateTimeFormatter.ofPattern(inputFormat);
+ DateTimeFormatter outputdtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ return LocalDateTime.parse(startDate, inputdtf).format(outputdtf);
}
}
diff --git a/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java
new file mode 100644
index 0000000..6ae023e
--- /dev/null
+++ b/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java
@@ -0,0 +1,70 @@
+package com.ard.utils.hiksdk.domain;
+
+import lombok.Data;
+
+/**
+ * @Description: 外联报警事件信息
+ * @ClassName: ExternalAlarmEventInfo
+ * @Author: 刘苏义
+ * @Date: 2023年07月06日16:19
+ * @Version: 1.0
+ **/
+@Data
+public class ExternalAlarmEventInfo {
+
+ /**
+ * 报警ID
+ */
+ String alarmId;
+ /**
+ * 报警名称
+ */
+ String alarmName;
+ /**
+ * 防区ID
+ */
+ Integer defenseId;
+ /**
+ * 防区名称
+ */
+ String defenseName;
+
+ /**
+ * 报警类别
+ */
+ String alarmType;
+ /**
+ * 报警时间
+ */
+ String alarmTime;
+ /**
+ * 子系统ID
+ */
+ Integer subSysNo;
+ /**
+ * 关联相机id
+ */
+ String cameraId;
+ /**
+ * 关联相机名称
+ */
+ String cameraName;
+ /**
+ * 关联相机ip
+ */
+ String cameraIp;
+
+ /**
+ * 关联相机经度
+ */
+ Double longitude;
+ /**
+ * 关联相机纬度
+ */
+ Double latitude;
+ /**
+ * 关联相机类型
+ */
+ String cameraType;
+
+}
diff --git a/src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java
index ff6a06c..0f967a1 100644
--- a/src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java
+++ b/src/main/java/com/ard/utils/hiksdk/domain/alarmEventInfo.java
@@ -11,12 +11,13 @@
*/
@Data
public class alarmEventInfo {
+
/**
* 报警名称
*/
String alarmName;
/**
- * 报警类别
+ * 报警类别
*/
String alarmType;
/**
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
index b2e594c..a8a32c0 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
@@ -5,7 +5,9 @@
import com.ard.alarm.camera.domain.CameraCmd;
import com.ard.alarm.camera.service.impl.ArdCamerasServiceImpl;
import com.ard.config.MinioClientSingleton;
+import com.ard.utils.ByteUtils;
import com.ard.utils.hiksdk.common.GlobalVariable;
+import com.ard.utils.hiksdk.domain.ExternalAlarmEventInfo;
import com.ard.utils.hiksdk.domain.alarmEventInfo;
import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ard.utils.hiksdk.util.minio.MinioUtils;
@@ -15,6 +17,7 @@
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
+import javax.xml.bind.DatatypeConverter;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
@@ -43,10 +46,16 @@
@Override
public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) {
ArdCamerasServiceImpl ardCamerasService = SpringTool.getApplicationContext().getBean(ArdCamerasServiceImpl.class);
-
+ String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP);
+ Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);
+ ArdCameras ardCameras = new ArdCameras();
+ ardCameras.setIp(sDeviceIP);
+ ardCameras.setPort(wLinkPort);
+ ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
String sTime;//事件时间
String url;//事件图片
alarmEventInfo info;//事件信息
+
//lCommand是传的报警类型
switch (lCommand) {
case HCNetSDK.COMM_ALARM_RULE:
@@ -57,13 +66,10 @@
Pointer pVCAInfo = strVcaAlarm.getPointer();
pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size());
strVcaAlarm.read();
- Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID);
+ Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID);
sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//事件时间
String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//设备ip
Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//通道
- ArdCameras ardCameras = new ArdCameras();
- ardCameras.setIp(ipaddr);
- ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
info = new alarmEventInfo();
info.setAlarmName("人员行为分析");
info.setAlarmTime(sTime);
@@ -138,6 +144,85 @@
case HCNetSDK.COMM_GISINFO_UPLOAD:
log.info("GPS报警信息上报");
break;
+ case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
+ log.info("报警主机 CID 报告报警上传");
+ HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM();
+ netDvrCidAlarm.write();
+ Pointer pCIDInfo = netDvrCidAlarm.getPointer();
+ pCIDInfo.write(0, pAlarmInfo.getByteArray(0, netDvrCidAlarm.size()), 0, netDvrCidAlarm.size());
+ netDvrCidAlarm.read();
+ //CID事件名
+ String sCIDCode = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDCode);//CID事件名
+
+ //CID事件名
+ //String sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe);//CID事件名
+ int position = ByteUtils.findIndexOfDoubleZero(netDvrCidAlarm.sCIDDescribe);
+ String sCIDDescribe;
+ if (position != -1) {
+ byte[] result = new byte[position];
+ System.arraycopy(netDvrCidAlarm.sCIDDescribe, 0, result, 0, position);
+ sCIDDescribe = ByteUtils.bytesToStringZh(result);
+ } else {
+ sCIDDescribe = ByteUtils.bytesToStringZh(netDvrCidAlarm.sCIDDescribe);
+ }
+ //触发报警的时间点
+ String struTriggerTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struTriggerTime), "yyyy-M-d H:m:s");
+ //上传报警的时间点
+ String struUploadTime = DateUtils.convertDate(parseAlarmTime(netDvrCidAlarm.struUploadTime), "yyyy-M-d H:m:s");
+ //报告类型
+ String byReportType = "";
+ switch (netDvrCidAlarm.byReportType) {
+ case 1:
+ byReportType = "防区报警";
+ break;
+ case 2:
+ byReportType = "视频报警";
+ break;
+ case 3:
+ byReportType = "软防区报警";
+ break;
+ case 4:
+ byReportType = "挟持报警";
+ break;
+ case 5:
+ byReportType = "防拆报警 ";
+ break;
+ case 6:
+ byReportType = "操作报告 ";
+ break;
+ case 7:
+ byReportType = "异常报告 ";
+ break;
+ }
+ //子系统号
+ Integer bySubSysNo = Integer.valueOf(netDvrCidAlarm.bySubSysNo);
+ //防区号 起始0
+ Integer wDefenceNo = Integer.valueOf(netDvrCidAlarm.wDefenceNo);
+ //防区名称
+ String wDefenceName = "";
+ if (!bySubSysNo.equals(-1)) {
+ CameraCmd cmd = new CameraCmd();
+ cmd.setCameraId(ardcamere.getId());
+ cmd.setWZoneIndex(wDefenceNo);
+ wDefenceName = HikClientUtil.getDefenseZoneName(cmd);
+ }
+ if (sCIDDescribe.contains("恢复")) {
+ return true;
+ }
+ ExternalAlarmEventInfo externalAlarmEventInfo = new ExternalAlarmEventInfo();
+ externalAlarmEventInfo.setAlarmId(sCIDCode);
+ externalAlarmEventInfo.setAlarmName(sCIDDescribe);
+ externalAlarmEventInfo.setDefenseId((wDefenceNo + 1) );
+ externalAlarmEventInfo.setDefenseName(wDefenceName);
+ externalAlarmEventInfo.setSubSysNo(bySubSysNo);
+ externalAlarmEventInfo.setAlarmType(byReportType);
+ externalAlarmEventInfo.setAlarmTime(struTriggerTime);
+ externalAlarmEventInfo.setCameraId(ardcamere.getId());
+ externalAlarmEventInfo.setCameraName(ardcamere.getName());
+ externalAlarmEventInfo.setCameraIp(ardcamere.getIp());
+ externalAlarmEventInfo.setCameraType(ardcamere.getGdtype());
+ publishMqtt(externalAlarmEventInfo);
+ break;
default:
log.info("未知报警事件类型:lCommand:" + Integer.toHexString(lCommand));
break;
@@ -198,19 +283,48 @@
}
/**
- * 打印日志
+ * 打印通用光电日志
*/
private void printLog(alarmEventInfo info) {
- log.info("【规则】" + info.getAlarmName() +"【规则id】" + info.getRuleId() + "【类型】" + info.getAlarmType() +
+ log.info("【规则】" + info.getAlarmName() + "【规则id】" + info.getRuleId() + "【类型】" + info.getAlarmType() +
"【时间】" + info.getAlarmTime() + "【相机id】" + info.getCameraId() + "【相机】" + info.getCameraName() +
- "【IP】" + info.getCameraIp() + "【通道】" + info.getCameraChannel() +"【型号】" + info.getCameraType() +
+ "【IP】" + info.getCameraIp() + "【通道】" + info.getCameraChannel() + "【型号】" + info.getCameraType() +
"【图片】" + info.getPicUrl() + "【坐标】" + info.getLongitude() + "," + info.getLatitude());
}
/**
- * 推送mqtt
+ * 打印外联报警日志
+ */
+ private void printLog(ExternalAlarmEventInfo info) {
+ log.info("【报警ID】" + info.getAlarmId() + "【报警名称】" + info.getAlarmName() +
+ "【防区ID】" + info.getDefenseId() + "【防区名称】" + info.getDefenseName() + "【类型】" + info.getAlarmType() +
+ "【时间】" + info.getAlarmTime() + "【相机ID】" + info.getCameraId() + "【相机】" + info.getCameraName() +
+ "【IP】" + info.getCameraIp() + "【型号】" + info.getCameraType());
+ }
+
+ /**
+ * 通用光电报警推送mqtt
*/
private void publishMqtt(alarmEventInfo info) {
- // printLog(info);
+ // printLog(info);
MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info));
}
+ /**
+ * 外联报警推送mqtt
+ */
+ private void publishMqtt(ExternalAlarmEventInfo info) {
+ printLog(info);
+ MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info));
+ }
+ /**
+ * 时间格式化
+ */
+ private String parseAlarmTime(HCNetSDK.NET_DVR_TIME_EX netDvrTimeEx) {
+ short wYear = netDvrTimeEx.wYear;
+ byte byMonth = netDvrTimeEx.byMonth;
+ byte byDay = netDvrTimeEx.byDay;
+ byte byHour = netDvrTimeEx.byHour;
+ byte byMinute = netDvrTimeEx.byMinute;
+ byte bySecond = netDvrTimeEx.bySecond;
+ return wYear + "-" + byMonth + "-" + byDay + " " + byHour + ":" + byMinute + ":" + bySecond;
+ }
}
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
index 7ace4c1..62455b1 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -2,11 +2,13 @@
import com.ard.alarm.camera.domain.ArdCameras;
import com.ard.alarm.camera.domain.CameraCmd;
+import com.ard.utils.ByteUtils;
import com.ard.utils.hiksdk.common.GlobalVariable;
import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ard.utils.hiksdk.util.minio.MinioUtils;
import com.sun.jna.Native;
import com.sun.jna.Platform;
+import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
@@ -124,7 +126,6 @@
* @创建时间 2023/1/17 16:12
* @修改人和其它信息
*/
-
public static void login(ArdCameras camera) {
// 初始化
if (!hCNetSDK.NET_DVR_Init()) {
@@ -186,7 +187,7 @@
Thread.sleep(100);
login(camera);
String ip = camera.getIp();
- cameraMap.put(ip,camera);
+ cameraMap.put(ip, camera);
}
} catch (Exception ex) {
log.error("初始化登录相机异常:" + ex.getMessage());
@@ -254,7 +255,7 @@
HCNetSDK.NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
m_strAlarmInfo.dwSize = m_strAlarmInfo.size();
// 智能交通布防优先级:0 - 一等级(高),1 - 二等级(中),2 - 三等级(低)
- m_strAlarmInfo.byLevel = 1;
+ m_strAlarmInfo.byLevel = 2;
// 智能交通报警信息上传类型:0 - 老报警信息(NET_DVR_PLATE_RESULT), 1 - 新报警信息(NET_ITS_PLATE_RESULT)
m_strAlarmInfo.byAlarmInfoType = 1;
// 布防类型(仅针对门禁主机、人证设备):0 - 客户端布防(会断网续传),1 - 实时布防(只上传实时数据)
@@ -263,7 +264,6 @@
// 布防成功,返回布防成功的数据传输通道号
lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
if (lAlarmHandle == -1) {
- log.error("设备布防失败,错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
log.error("设备布防失败,错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
// 注销 释放sdk资源
logout(lUserID);
@@ -287,6 +287,7 @@
// 释放sdk资源
hCNetSDK.NET_DVR_Cleanup();
}
+
/**
* 抓图
*
@@ -344,4 +345,38 @@
return "";
}
}
+
+ /**
+ * 获取防区名称
+ * 通道号==防区号 从0开始
+ * 刘苏义
+ * 2023/7/6 10:48
+ */
+ public static String getDefenseZoneName(CameraCmd cmd) {
+ String name="";
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getWZoneIndex();//通道号==防区号
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return name;
+ }
+ Integer userId = GlobalVariable.loginMap.get(cameraId);
+
+ HCNetSDK.NET_DVR_ALARMIN_PARAM netDvrAlarminParam = new HCNetSDK.NET_DVR_ALARMIN_PARAM();
+ Pointer point = netDvrAlarminParam.getPointer();
+ IntByReference ibrBytesReturned = new IntByReference();
+ netDvrAlarminParam.write();
+ boolean b = hCNetSDK.NET_DVR_GetDVRConfig(userId, HCNetSDK.NET_DVR_GET_ALARMIN_PARAM, channelNum, point, netDvrAlarminParam.size(), ibrBytesReturned);
+ if (b) {
+ netDvrAlarminParam.read();
+ name = ByteUtils.bytesToStringZh(netDvrAlarminParam.byName);
+ } else {
+ int error = hCNetSDK.NET_DVR_GetLastError();
+ log.info("获取防区名称失败:" + error);
+ }
+ } catch (Exception ex) {
+ log.error("获取防区名称异常:" + ex.getMessage());
+ }
+ return name;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java
index 6f52be7..c5ec4a2 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java
@@ -1,6 +1,7 @@
package com.ard.utils.hiksdk.service.impl;
import com.ard.alarm.camera.domain.ArdCameras;
+import com.ard.alarm.camera.domain.CameraCmd;
import com.ard.utils.hiksdk.common.GlobalVariable;
import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.sun.jna.Pointer;
diff --git a/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java b/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java
index 23a6961..27c1363 100644
--- a/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java
+++ b/src/main/java/com/ard/utils/hiksdk/util/hikSdkUtil/HCNetSDK.java
@@ -530,9 +530,9 @@
public static final int NET_DVR_SET_DDNSCFG_EX = 275;//设置扩展DDNS参数
public static final int NET_DVR_SET_PTZPOS = 292; //云台设置PTZ位置
public static final int NET_DVR_GET_PTZPOS = 293; //云台获取PTZ位置
- public static final int NET_DVR_SET_PTZLOCKCFG=3288;//设置云台锁定信息
- public static final int NET_DVR_GET_PTZLOCKCFG=3287;//获取云台锁定信息
- public static final int NET_DVR_PTZ_INITIALPOSITIONCTRL=3283;//零方位角控制
+ public static final int NET_DVR_SET_PTZLOCKCFG = 3288;//设置云台锁定信息
+ public static final int NET_DVR_GET_PTZLOCKCFG = 3287;//获取云台锁定信息
+ public static final int NET_DVR_PTZ_INITIALPOSITIONCTRL = 3283;//零方位角控制
public static final int NET_DVR_GET_PTZSCOPE = 294;//云台获取PTZ范围
public static final int NET_DVR_SET_BASICPARAMCFG = 3271;//设置PTZ基本参数信息
public static final int NET_DVR_COMPLETE_RESTORE_CTRL = 3420; //设置完全恢复出厂值
@@ -1162,7 +1162,7 @@
public static class NET_DVR_SCHEDTIME extends HIKSDKStructure {
public byte byStartHour; //开始时间
public byte byStartMin;
- public byte byStopHour; //结束时间
+ public byte byStopHour; //结束时间
public byte byStopMin;
@@ -3150,6 +3150,66 @@
public NET_DVR_TIMEPOINT struEndPoint; //夏时制停止时间
}
+ //防区参数
+ public static class NET_DVR_ALARMIN_PARAM extends HIKSDKStructure {
+ public int dwSize;
+ public byte[] byName = new byte[NAME_LEN];
+ // public DETECTOR_TYPE wDetectorType;
+ public byte byType;
+ public byte byUploadAlarmRecoveryReport;
+ public int dwParam;
+ //public byte[][] struAlarmTime = new byte[MAX_DAYS][MAX_TIMESEGMENT];
+ public byte[] byAssociateAlarmOut = new byte[MAX_ALARMHOST_ALARMOUT_NUM];
+ public byte[] byAssociateSirenOut = new byte[8];
+ public byte bySensitivityParam;
+ public byte byArrayBypass;
+ public byte byJointSubSystem;
+ public byte byModuleStatus;
+ public short wModuleAddress;
+ public byte byModuleChan;
+ public byte byModuleType;
+ public short wZoneIndex;
+ public short wInDelay;
+ public short wOutDelay;
+ public byte byAlarmType;
+ public byte byZoneResistor;
+ public float fZoneResistorManual;
+ public byte[] byDetectorSerialNo = new byte[128];
+ public byte byZoneSignalType;
+ public byte byDisableDetectorTypeCfg;
+ public byte byTimeOutRange;
+ public byte[] byAssociateLampOut = new byte[8];
+ public short wTimeOut;
+ public byte byDetectorSignalIntensity;
+ public byte byTimeOutMethod;
+ public byte[] byRes3 = new byte[8];
+ }
+
+ enum DETECTOR_TYPE {
+ PANIC_BUTTON,
+ MAGNETIC_CONTACT,
+ SMOKE_DETECTOR,
+ ACTIVE_INFRARED_DETECTOR,
+ PASSIVE_INFRARED_DETECTOR,
+ GLASS_BREAK_DETECTOR,
+ VIBRATION_DETECTOR,
+ DUAL_TECHNOLOGY_PIR_DETECTOR,
+ TRIPLE_TECHNOLOGY_PIR_DETECTOR,
+ HUMIDITY_DETECTOR,
+ TEMPERATURE_DETECTOR,
+ COMBUSTIBLE_GAS_DETECTOR,
+ DYNAMIC_SWITCH,
+ CONTROL_SWITCH,
+ SMART_LOCK,
+ WATER_DETECTOR,
+ DISPLACEMENT_DETECTOR,
+ SINGLE_INFRARED_DETECTOR,
+ SINGLE_ZONE_MODULE,
+ CURTAIN_INFRARED_DETECTOR,
+ DOORBELL_SWITCH,
+ OTHER_DETECTOR
+ }
+
//图片质量
public static class NET_DVR_JPEGPARA extends HIKSDKStructure {
/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图,
@@ -3781,19 +3841,22 @@
public short wTiltPos;//垂直参数
public short wZoomPos;//变倍参数
}
+
//PTZ锁定信息
public static class NET_DVR_PTZ_LOCKCFG extends HIKSDKStructure {
public int dwSize;//结构体大小
public byte byWorkMode;//云台锁定控制:0- 解锁,1- 锁定
public byte[] byRes = new byte[127];
}
+
//零方位角控制信息
public static class NET_DVR_INITIALPOSITIONCTRL extends HIKSDKStructure {
- public int dwSize ;//结构体大小
+ public int dwSize;//结构体大小
public short dwChan;//设备通道号
public byte byWorkMode;//工作模式:0- 设置,1- 调用,2- 清除
public byte[] byRes = new byte[127];
}
+
//球机位置信息
public static class NET_DVR_PTZ_BASICPARAMCFG extends HIKSDKStructure {
public short dwSize;//结构体大小
@@ -10244,14 +10307,16 @@
boolean NET_DVR_InquiryRecordTimeSpan(int lUserID, int dwChannel, NET_DVR_RECORD_TIME_SPAN_INQUIRY lpInquiry, NET_DVR_RECORD_TIME_SPAN lpResult);
boolean NET_DVR_StartGetDevState(NET_DVR_CHECK_DEV_STATE pParams);
+
//强制I帧参数结构体。
- public static class NET_DVR_I_FRAME extends HIKSDKStructure{
+ public static class NET_DVR_I_FRAME extends HIKSDKStructure {
public int dwSize;
public byte[] sStreamID = new byte[32]; //流IDs SDK 中对 STREAM_ID_LEN进行了定义,赋值32
public int dwChannel;//通道号
public byte byStreamType; //码流类型:0-主码流,1-子码流,2-码流3,3-虚拟码流,以此类推
public byte[] byRes = new byte[63]; //保留,置为0 按照SDK要求进行对应赋值
}
+
//gps相关结构定义
public static class TimeSegParam extends HIKSDKStructure {
//GPS数据查找起始时间
@@ -10585,6 +10650,7 @@
public byte[] byRes = new byte[6];
}
}
+
//播放库函数声明,PlayCtrl.dll
interface PlayCtrl extends Library {
public static final int STREAME_REALTIME = 0;
diff --git a/src/main/java/com/ard/utils/tcp/ClientHandler.java b/src/main/java/com/ard/utils/tcp/ClientHandler.java
index c79496d..5a7e3ac 100644
--- a/src/main/java/com/ard/utils/tcp/ClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/ClientHandler.java
@@ -297,15 +297,7 @@
// log.info("报警类型:" + alarmType);
byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96);
- int position = ByteUtils.findIndexOfDoubleZero(szName);
- String alarmPointName;
- if (position != -1) {
- byte[] result = new byte[position];
- System.arraycopy(szName, 0, result, 0, position);
- alarmPointName = new String(result, "GBK");
- } else {
- alarmPointName = new String(szName, "GBK");
- }
+ String alarmPointName = ByteUtils.bytesToStringZh(szName);
// log.info("所属告警区域名称:" + alarmPointName);
byte[] afTx = Arrays.copyOfRange(data, index + 96, index + 100);
afTx = ByteUtils.toLittleEndian(afTx);
@@ -405,15 +397,7 @@
byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64);
//log.info("所属告警区域名称:" + DatatypeConverter.printHexBinary(szName));
- int position = ByteUtils.findIndexOfDoubleZero(szName);
- String alarmPointName;
- if (position != -1) {
- byte[] result = new byte[position];
- System.arraycopy(szName, 0, result, 0, position);
- alarmPointName = new String(result, "GBK");
- } else {
- alarmPointName = new String(szName, "GBK");
- }
+ String alarmPointName = ByteUtils.bytesToStringZh(szName);
// log.info("所属告警区域名称:" + alarmPointName);
//log.info("报警信息:" + "【id】" + id + "【name】" + alarmPointName + "【alarmType】" + alarmType + "【alarmTime】" + alarmTime);
ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar();
diff --git a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
index 37d339e..82d9685 100644
--- a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
@@ -232,15 +232,7 @@
// log.info("报警类型:" + alarmType);
byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96);
- int position = ByteUtils.findIndexOfDoubleZero(szName);
- String alarmPointName;
- if (position != -1) {
- byte[] result = new byte[position];
- System.arraycopy(szName, 0, result, 0, position);
- alarmPointName = new String(result, "GBK");
- } else {
- alarmPointName = new String(szName, "GBK");
- }
+ String alarmPointName = ByteUtils.bytesToStringZh(szName);
// log.info("所属告警区域名称:" + alarmPointName);
byte[] afTx = Arrays.copyOfRange(data, index + 96, index + 100);
afTx = ByteUtils.toLittleEndian(afTx);
@@ -340,15 +332,7 @@
byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64);
//log.info("所属告警区域名称:" + DatatypeConverter.printHexBinary(szName));
- int position = ByteUtils.findIndexOfDoubleZero(szName);
- String alarmPointName;
- if (position != -1) {
- byte[] result = new byte[position];
- System.arraycopy(szName, 0, result, 0, position);
- alarmPointName = new String(result, "GBK");
- } else {
- alarmPointName = new String(szName, "GBK");
- }
+ String alarmPointName = ByteUtils.bytesToStringZh(szName);
// log.info("所属告警区域名称:" + alarmPointName);
//log.info("报警信息:" + "【id】" + id + "【name】" + alarmPointName + "【alarmType】" + alarmType + "【alarmTime】" + alarmTime);
ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar();
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 2f6c991..4f0add0 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,3 +1,4 @@
+
spring:
datasource:
# 使用druid数据库连接池
@@ -29,7 +30,7 @@
port: 40000
enabled: true
tcp:
- enabled: true
+ enabled: false
mqtt:
host: tcp://192.168.1.15:1883
clientId: cc3
@@ -51,4 +52,6 @@
secretKey: xzx12345
logging:
level:
- com.ard: info
\ No newline at end of file
+ com.ard: info
+server:
+ port: 8088
\ No newline at end of file
--
Gitblit v1.9.3