From 483f72f5540bdefb3ddd4726113b3c171eb7107d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 06 七月 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瀛楄妭杞琀ex
      *
      * @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;
+    /**
+     * 瀛愮郴缁烮D
+     */
+    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() +"銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() +
+        log.info("銆愯鍒欍��" + info.getAlarmName() + "銆愯鍒檌d銆�" + info.getRuleId() + "銆愮被鍨嬨��" + info.getAlarmType() +
                 "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篿d銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() +
-                "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() +"銆愬瀷鍙枫��" + info.getCameraType() +
+                "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() + "銆愬瀷鍙枫��" + info.getCameraType() +
                 "銆愬浘鐗囥��" + info.getPicUrl() + "銆愬潗鏍囥��" + info.getLongitude() + "," + info.getLatitude());
     }
     /**
-     * 鎺ㄩ�乵qtt
+     * 鎵撳嵃澶栬仈鎶ヨ鏃ュ織
+     */
+    private void printLog(ExternalAlarmEventInfo info) {
+        log.info("銆愭姤璀D銆�" + info.getAlarmId() + "銆愭姤璀﹀悕绉般��" + info.getAlarmName() +
+                "銆愰槻鍖篒D銆�" + info.getDefenseId() + "銆愰槻鍖哄悕绉般��" + info.getDefenseName() + "銆愮被鍨嬨��" + info.getAlarmType() +
+                "銆愭椂闂淬��" + info.getAlarmTime() + "銆愮浉鏈篒D銆�" + info.getCameraId() + "銆愮浉鏈恒��" + info.getCameraName() +
+                "銆怚P銆�" + info.getCameraIp() + "銆愬瀷鍙枫��" + info.getCameraType());
+    }
+
+    /**
+     * 閫氱敤鍏夌數鎶ヨ鎺ㄩ�乵qtt
      */
     private void publishMqtt(alarmEventInfo info) {
-       // printLog(info);
+        // printLog(info);
         MqttConsumer.publish(2, false, "camera", JSON.toJSONString(info));
     }
+    /**
+     * 澶栬仈鎶ヨ鎺ㄩ�乵qtt
+     */
+    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- 瑙i攣锛�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];  //娴両Ds    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];
     }
 }
+
 //鎾斁搴撳嚱鏁板0鏄�,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("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + 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("鎶ヨ淇℃伅锛�" + "銆恑d銆�" + id + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + 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