From 85446b5b526ac53af9add7c83cfd72f39ec39611 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 07 七月 2023 10:51:13 +0800
Subject: [PATCH] 优化外联设备报警解析并上传mqtt

---
 src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java |   48 +++++
 src/main/java/com/ard/utils/hiksdk/service/impl/LoginResultCallBack.java           |   22 -
 src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java                          |   41 ++++
 src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java         |   31 +++
 src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java            |   33 +++
 src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java                 |   62 +++++-
 src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java                      |    3 
 src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java              |   25 --
 src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java                  |   40 ++-
 src/main/resources/mapper/ArdEquipExternalMapper.xml                               |   55 ++++++
 src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java         |   28 ++
 src/main/java/com/ard/utils/mqtt/MqttConsumer.java                                 |   69 ++++---
 src/main/java/com/ard/utils/tcp/ClientInitialize.java                              |   10 
 src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java                  |   55 ++++++
 src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java                     |   14 +
 15 files changed, 426 insertions(+), 110 deletions(-)

diff --git a/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java b/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
index 914fd59..71d9b4b 100644
--- a/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
@@ -4,8 +4,13 @@
 import com.ard.alarm.camera.domain.ArdCameras;
 import com.ard.alarm.camera.mapper.ArdCamerasMapper;
 import com.ard.alarm.camera.service.IArdCamerasService;
+import com.ard.alarm.external.domain.ArdEquipExternal;
+import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
 import com.ard.utils.hiksdk.service.impl.HikClientUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
@@ -19,17 +24,25 @@
  */
 @Service
 @Slf4j(topic = "camera")
-public class ArdCamerasServiceImpl implements IArdCamerasService {
+@Order(4)
+public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner {
     @Resource
     private ArdCamerasMapper ardCamerasMapper;
+    @Resource
+    private ArdEquipExternalMapper ardEquipExternalMapper;
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
 
-
-    @PostConstruct
-    public void init()
-    {
-        List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
         HikClientUtil.loadHCNetSDKLib();
-        HikClientUtil.loginAll(ardCameras);
+        //鑾峰彇鍏ㄩ儴娴峰悍鍏夌數
+        List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+        HikClientUtil.loginAllCamera(ardCameras);
+        //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満
+        ArdEquipExternal ardEquipExternal= new ArdEquipExternal();
+        ardEquipExternal.setFactory("1");
+        ardEquipExternal.setType("1");
+        List<ArdEquipExternal> ardEquipExternals = ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
+        HikClientUtil.loginAllAlarmHost(ardEquipExternals);
     }
     /**
      * 鏌ヨ鐩告満璁惧
@@ -53,4 +66,5 @@
         return ardCamerasMapper.selectArdCamerasList(ardCameras);
     }
 
+
 }
diff --git a/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java b/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java
new file mode 100644
index 0000000..9d517e0
--- /dev/null
+++ b/src/main/java/com/ard/alarm/external/domain/ArdEquipExternal.java
@@ -0,0 +1,55 @@
+package com.ard.alarm.external.domain;
+
+import lombok.Data;
+
+/**
+ * 澶栬仈璁惧绠$悊瀵硅薄 ard_equip_external
+ *
+ * @author ard
+ * @date 2023-07-07
+ */
+@Data
+public class ArdEquipExternal
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private String id;
+
+    /** 鍚嶇О */
+    private String name;
+
+    /** 璁惧绫诲瀷 */
+    private String type;
+
+    /** 鍘傚晢 */
+    private String factory;
+
+    /** ip */
+    private String ip;
+
+    /** 绔彛 */
+    private Integer port;
+
+    /** 鐢ㄦ埛鍚� */
+    private String username;
+
+    /** 瀵嗙爜 */
+    private String password;
+
+    /** 缁忓害 */
+    private Double longitude;
+
+    /** 绾害 */
+    private Double latitude;
+
+    /** 瀹夎楂樺害 */
+    private Double altitude;
+
+    /** 閮ㄩ棬id */
+    private Integer deptId;
+
+    /** 鐢ㄦ埛id */
+    private String userId;
+
+}
diff --git a/src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java b/src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java
new file mode 100644
index 0000000..a93f6f1
--- /dev/null
+++ b/src/main/java/com/ard/alarm/external/mapper/ArdEquipExternalMapper.java
@@ -0,0 +1,33 @@
+package com.ard.alarm.external.mapper;
+
+import java.util.List;
+import com.ard.alarm.external.domain.ArdEquipExternal;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * externalMapper鎺ュ彛
+ * 
+ * @author zj
+ * @date 2023-03-13
+ */
+@Mapper
+public interface ArdEquipExternalMapper 
+{
+    /**
+     * 鏌ヨexternal
+     * 
+     * @param id external涓婚敭
+     * @return external
+     */
+    public ArdEquipExternal selectArdEquipExternalById(String id);
+
+    /**
+     * 鏌ヨexternal鍒楄〃
+     * 
+     * @param ardEquipExternal external
+     * @return external闆嗗悎
+     */
+    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal);
+
+}
diff --git a/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java b/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java
new file mode 100644
index 0000000..1c455a6
--- /dev/null
+++ b/src/main/java/com/ard/alarm/external/service/IArdEquipExternalService.java
@@ -0,0 +1,31 @@
+package com.ard.alarm.external.service;
+
+import java.util.List;
+import com.ard.alarm.external.domain.ArdEquipExternal;
+
+
+/**
+ * externalService鎺ュ彛
+ * 
+ * @author zj
+ * @date 2023-03-13
+ */
+public interface IArdEquipExternalService 
+{
+    /**
+     * 鏌ヨexternal
+     * 
+     * @param id external涓婚敭
+     * @return external
+     */
+    public ArdEquipExternal selectArdEquipExternalById(String id);
+
+    /**
+     * 鏌ヨexternal鍒楄〃
+     * 
+     * @param ardEquipExternal external
+     * @return external闆嗗悎
+     */
+    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal);
+
+}
diff --git a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
new file mode 100644
index 0000000..4c05ebf
--- /dev/null
+++ b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
@@ -0,0 +1,48 @@
+package com.ard.alarm.external.service.impl;
+
+import java.util.List;
+
+import com.ard.alarm.external.domain.ArdEquipExternal;
+import com.ard.alarm.external.mapper.ArdEquipExternalMapper;
+import com.ard.alarm.external.service.IArdEquipExternalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * externalService涓氬姟灞傚鐞�
+ * 
+ * @author zj
+ * @date 2023-03-13
+ */
+@Service
+public class ArdEquipExternalServiceImpl implements IArdEquipExternalService
+{
+    @Autowired
+    private ArdEquipExternalMapper ardEquipExternalMapper;
+
+    /**
+     * 鏌ヨexternal
+     * 
+     * @param id external涓婚敭
+     * @return external
+     */
+    @Override
+    public ArdEquipExternal selectArdEquipExternalById(String id)
+    {
+        return ardEquipExternalMapper.selectArdEquipExternalById(id);
+    }
+
+    /**
+     * 鏌ヨexternal鍒楄〃
+     * 
+     * @param ardEquipExternal external
+     * @return external
+     */
+    @Override
+    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal)
+    {
+        return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
+    }
+
+}
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 ee7702e..ce6bd9c 100644
--- a/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java
+++ b/src/main/java/com/ard/alarm/tube/service/TubeAlarmService.java
@@ -7,6 +7,9 @@
 import com.ard.utils.udp.NettyUdpServer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
@@ -24,7 +27,8 @@
  **/
 @Service
 @Slf4j(topic = "tube")
-public class TubeAlarmService {
+@Order(3)
+public class TubeAlarmService implements ApplicationRunner {
     @Resource
     NettyUdpServer nettyUdpServer;
 
@@ -32,15 +36,15 @@
     private Integer udpPort;
     @Value("${spring.netty.udp.enabled}")
     private String UdpServerEnable;
-
-    @PostConstruct
-    public void init() {
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
         if (UdpServerEnable.equals("false")) {
             return;
         }
         nettyUdpServer.init(udpPort);
         log.info("绠$嚎娉勯湶UDP鏈嶅姟宸插惎鍔�");
     }
+
 
     @Async("alarm")
     public void alarmHandler(String message) {
@@ -79,4 +83,6 @@
             log.error("tube鎶ヨ鏁版嵁鎺ㄩ�佸紓甯革細" + ex.getMessage());
         }
     }
+
+
 }
diff --git a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
index cf3cd15..6eee57f 100644
--- a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
+++ b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
@@ -1,6 +1,7 @@
 package com.ard.utils.hiksdk.common;
 
 import com.ard.alarm.camera.domain.ArdCameras;
+import com.ard.alarm.external.domain.ArdEquipExternal;
 import lombok.Data;
 import java.util.HashMap;
 import java.util.Map;
@@ -16,6 +17,8 @@
 public class GlobalVariable {
     //淇濆瓨鐩告満淇℃伅key:ip value:camera瀵硅薄
     public static Map<String, ArdCameras> cameraMap = new HashMap<>();
+    //淇濆瓨鐩告満淇℃伅key:ip value:鎶ヨ涓绘満瀵硅薄
+    public static Map<String, ArdEquipExternal> alarmHostMap = new HashMap<>();
     //淇濆瓨鐩告満鐧诲綍淇℃伅key:cameraId value:loginId
     public static Map<String, Integer> loginMap = new HashMap<>();
 }
diff --git a/src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java
new file mode 100644
index 0000000..c0da44c
--- /dev/null
+++ b/src/main/java/com/ard/utils/hiksdk/domain/DeviceInfo.java
@@ -0,0 +1,41 @@
+package com.ard.utils.hiksdk.domain;
+
+import lombok.Data;
+
+/**
+ * @Description:
+ * @ClassName: DeviceInfo
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�07鏃�9:45
+ * @Version: 1.0
+ **/
+@Data
+public class DeviceInfo {
+    /**
+     * 璁惧ID
+     */
+    private String deviceId;
+    /**
+     * 璁惧绫诲瀷
+     */
+    private String deviceType;
+    /**
+     * ip
+     */
+    private String ip;
+
+    /**
+     * 绔彛
+     */
+    private Integer port;
+
+    /**
+     * 鐢ㄦ埛鍚�
+     */
+    private String username;
+
+    /**
+     * 瀵嗙爜
+     */
+    private String password;
+}
diff --git a/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java
index 6ae023e..6f768be 100644
--- a/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java
+++ b/src/main/java/com/ard/utils/hiksdk/domain/ExternalAlarmEventInfo.java
@@ -42,29 +42,8 @@
      */
     Integer subSysNo;
     /**
-     * 鍏宠仈鐩告満id
+     * 鍏宠仈鎶ヨ涓绘満id
      */
-    String cameraId;
-    /**
-     * 鍏宠仈鐩告満鍚嶇О
-     */
-    String cameraName;
-    /**
-     * 鍏宠仈鐩告満ip
-     */
-    String cameraIp;
-
-    /**
-     * 鍏宠仈鐩告満缁忓害
-     */
-    Double longitude;
-    /**
-     * 鍏宠仈鐩告満绾害
-     */
-    Double latitude;
-    /**
-     * 鍏宠仈鐩告満绫诲瀷
-     */
-    String cameraType;
+    String alarmHostId;
 
 }
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 a8a32c0..991e60a 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
@@ -3,7 +3,11 @@
 import com.alibaba.fastjson2.JSON;
 import com.ard.alarm.camera.domain.ArdCameras;
 import com.ard.alarm.camera.domain.CameraCmd;
+import com.ard.alarm.camera.service.IArdCamerasService;
 import com.ard.alarm.camera.service.impl.ArdCamerasServiceImpl;
+import com.ard.alarm.external.domain.ArdEquipExternal;
+import com.ard.alarm.external.service.IArdEquipExternalService;
+import com.ard.alarm.external.service.impl.ArdEquipExternalServiceImpl;
 import com.ard.config.MinioClientSingleton;
 import com.ard.utils.ByteUtils;
 import com.ard.utils.hiksdk.common.GlobalVariable;
@@ -45,13 +49,10 @@
      */
     @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;//浜嬩欢淇℃伅
@@ -60,6 +61,11 @@
         switch (lCommand) {
             case HCNetSDK.COMM_ALARM_RULE:
                 //region 琛屼负鍒嗘瀽淇℃伅
+                ArdCameras ardCameras = new ArdCameras();
+                ardCameras.setIp(sDeviceIP);
+                ardCameras.setPort(wLinkPort);
+                IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
+                ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
                 log.info("鎶ヨ浜嬩欢绫诲瀷:lCommand:" + Integer.toHexString(lCommand));
                 HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM();
                 strVcaAlarm.write();
@@ -146,6 +152,13 @@
                 break;
             case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
                 log.info("鎶ヨ涓绘満 CID 鎶ュ憡鎶ヨ涓婁紶");
+                ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
+                ardEquipExternal.setIp(sDeviceIP);
+                ardEquipExternal.setPort(wLinkPort);
+                IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class);
+                ardEquipExternal = ardEquipExternalService.selectArdEquipExternalList(ardEquipExternal).get(0);
+
+
                 HCNetSDK.NET_DVR_CID_ALARM netDvrCidAlarm = new HCNetSDK.NET_DVR_CID_ALARM();
                 netDvrCidAlarm.write();
                 Pointer pCIDInfo = netDvrCidAlarm.getPointer();
@@ -202,7 +215,7 @@
                 String wDefenceName = "";
                 if (!bySubSysNo.equals(-1)) {
                     CameraCmd cmd = new CameraCmd();
-                    cmd.setCameraId(ardcamere.getId());
+                    cmd.setCameraId(ardEquipExternal.getId());
                     cmd.setWZoneIndex(wDefenceNo);
                     wDefenceName = HikClientUtil.getDefenseZoneName(cmd);
                 }
@@ -212,15 +225,12 @@
                 ExternalAlarmEventInfo externalAlarmEventInfo = new ExternalAlarmEventInfo();
                 externalAlarmEventInfo.setAlarmId(sCIDCode);
                 externalAlarmEventInfo.setAlarmName(sCIDDescribe);
-                externalAlarmEventInfo.setDefenseId((wDefenceNo + 1) );
+                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());
+                externalAlarmEventInfo.setAlarmHostId(ardEquipExternal.getId());
                 publishMqtt(externalAlarmEventInfo);
                 break;
             default:
@@ -291,14 +301,14 @@
                 "銆怚P銆�" + info.getCameraIp() + "銆愰�氶亾銆�" + info.getCameraChannel() + "銆愬瀷鍙枫��" + info.getCameraType() +
                 "銆愬浘鐗囥��" + info.getPicUrl() + "銆愬潗鏍囥��" + info.getLongitude() + "," + info.getLatitude());
     }
+
     /**
      * 鎵撳嵃澶栬仈鎶ヨ鏃ュ織
      */
     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());
+                "銆愭椂闂淬��" + info.getAlarmTime() + "銆愭姤璀︿富鏈篒D銆�" + info.getAlarmHostId());
     }
 
     /**
@@ -308,13 +318,15 @@
         // 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));
+        MqttConsumer.publish(2, false, "external", JSON.toJSONString(info));
     }
+
     /**
      * 鏃堕棿鏍煎紡鍖�
      */
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 62455b1..5e9590d 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,8 +2,10 @@
 
 import com.ard.alarm.camera.domain.ArdCameras;
 import com.ard.alarm.camera.domain.CameraCmd;
+import com.ard.alarm.external.domain.ArdEquipExternal;
 import com.ard.utils.ByteUtils;
 import com.ard.utils.hiksdk.common.GlobalVariable;
+import com.ard.utils.hiksdk.domain.DeviceInfo;
 import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
 import com.ard.utils.hiksdk.util.minio.MinioUtils;
 import com.sun.jna.Native;
@@ -11,12 +13,13 @@
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
 
 import java.io.*;
 import java.nio.ByteBuffer;
 import java.util.*;
 
-import static com.ard.utils.hiksdk.common.GlobalVariable.cameraMap;
 
 
 /**
@@ -126,7 +129,7 @@
      * @鍒涘缓鏃堕棿 2023/1/17 16:12
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public static void login(ArdCameras camera) {
+    public static void login(DeviceInfo deviceInfo) {
         // 鍒濆鍖�
         if (!hCNetSDK.NET_DVR_Init()) {
             log.error("SDK鍒濆鍖栧け璐�");
@@ -138,10 +141,10 @@
         } else {
             hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true);
         }
-        String m_sDeviceIP = camera.getIp();
-        String m_sUsername = camera.getUsername();
-        String m_sPassword = camera.getPassword();
-        short m_sPort = camera.getPort().shortValue();
+        String m_sDeviceIP = deviceInfo.getIp();
+        String m_sUsername = deviceInfo.getUsername();
+        String m_sPassword = deviceInfo.getPassword();
+        short m_sPort = deviceInfo.getPort().shortValue();
         //璁剧疆杩炴帴鏃堕棿涓庨噸杩炴椂闂�
         hCNetSDK.NET_DVR_SetConnectTime(2000, 1);
         hCNetSDK.NET_DVR_SetReconnect(100000, true);
@@ -162,7 +165,7 @@
         //鏄惁寮傛鐧诲綍锛�0- 鍚︼紝1- 鏄�  windowsSDK閲屾槸true鍜宖alse
         m_strLoginInfo.bUseAsynLogin = true;
         //寮傛鐧诲綍鍥炶皟
-        m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera);
+        m_strLoginInfo.cbLoginResult = new LoginResultCallBack(deviceInfo);
         m_strLoginInfo.write();
         int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
         if (i < 0) {
@@ -170,7 +173,6 @@
             log.info("鐧诲綍寮傚父锛�" + errorCode);
         }
     }
-
     /**
      * @鎻忚堪 鐧诲綍鎵�鏈夌浉鏈�
      * @鍙傛暟 []
@@ -179,18 +181,48 @@
      * @鍒涘缓鏃堕棿 2023/2/3 10:10
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-
-    public static void loginAll(List<ArdCameras> ardCameras) {
+    public static void loginAllCamera(List<ArdCameras> ardCameras) {
         try {
-            log.debug("鍔犺浇lib瀹屾垚锛�");
             for (ArdCameras camera : ardCameras) {
                 Thread.sleep(100);
-                login(camera);
+                DeviceInfo info=new DeviceInfo();
+                info.setDeviceId(camera.getId());
+                info.setIp(camera.getIp());
+                info.setPort(camera.getPort());
+                info.setUsername(camera.getUsername());
+                info.setPassword(camera.getPassword());
+                login(info);
                 String ip = camera.getIp();
-                cameraMap.put(ip, camera);
+                GlobalVariable.cameraMap.put(ip, camera);
             }
         } catch (Exception ex) {
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
+        }
+    }
+    /**
+     * @鎻忚堪 鐧诲綍鎵�鏈夋姤璀︿富鏈�
+     * @鍙傛暟 []
+     * @杩斿洖鍊� void
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/3 10:10
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public static void loginAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) {
+        try {
+            for (ArdEquipExternal alarmHost : ardEquipExternals) {
+                Thread.sleep(100);
+                DeviceInfo info=new DeviceInfo();
+                info.setDeviceId(alarmHost.getId());
+                info.setIp(alarmHost.getIp());
+                info.setPort(alarmHost.getPort());
+                info.setUsername(alarmHost.getUsername());
+                info.setPassword(alarmHost.getPassword());
+                login(info);
+                String ip = alarmHost.getIp();
+                GlobalVariable.alarmHostMap.put(ip, alarmHost);
+            }
+        } catch (Exception ex) {
+            log.error("鍒濆鍖栨姤璀︿富鏈哄紓甯革細" + ex.getMessage());
         }
     }
 
@@ -269,7 +301,7 @@
                 logout(lUserID);
                 return lAlarmHandle;
             } else {
-                log.info("鐩告満甯冮槻鎴愬姛");
+                log.info("璁惧甯冮槻鎴愬姛");
                 return lAlarmHandle;
             }
         }
@@ -379,4 +411,6 @@
         }
         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 c5ec4a2..4ee2bf5 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
@@ -3,6 +3,7 @@
 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.domain.DeviceInfo;
 import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
@@ -17,27 +18,20 @@
 @Slf4j(topic = "hikSdk")
 public class LoginResultCallBack implements HCNetSDK.FLoginResultCallBack {
 
-    private ArdCameras camera;
-    public LoginResultCallBack(ArdCameras camera) {
-        this.camera = camera;
+    private DeviceInfo deviceInfo;
+    public LoginResultCallBack(DeviceInfo deviceInfo)
+    {
+        this.deviceInfo=deviceInfo;
     }
-
     @Override
     public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) {
-        if (GlobalVariable.loginMap.containsKey(camera.getId())) {
-            GlobalVariable.loginMap.remove(camera.getId());
-        }
         if (dwResult == 1) {
-            GlobalVariable.loginMap.put(camera.getId(), lUserID);
-            log.info(camera.getIp() + ":" + camera.getPort() + "鐧诲綍鎴愬姛");
-            camera.setLoginId(lUserID);
-            camera.setChannel((int) lpDeviceinfo.byChanNum);
+            GlobalVariable.loginMap.put(deviceInfo.getDeviceId(), lUserID);
+            log.info(deviceInfo.getIp() + ":" + deviceInfo.getPort() + "鐧诲綍鎴愬姛");
             // 璁剧疆鎶ヨ鍥炶皟鍑芥暟锛屽缓绔嬫姤璀︿笂浼犻�氶亾锛堝惎鐢ㄥ竷闃诧級
             HikClientUtil.setupAlarmChan(lUserID, -1);
         } else {
-            log.info(camera.getIp() + ":" + camera.getPort() + "鐧诲綍澶辫触");
-            camera.setChannel(0);
-            camera.setLoginId(-1);
+            log.info(deviceInfo.getIp() + ":" + deviceInfo.getPort() + "鐧诲綍澶辫触");
         }
         return 1;
     }
diff --git a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java
index 144e233..55af6ec 100644
--- a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java
+++ b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java
@@ -1,12 +1,17 @@
 package com.ard.utils.mqtt;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.eclipse.paho.client.mqttv3.*;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.expression.spel.ast.NullLiteral;
 import org.springframework.stereotype.Component;
+
 import java.io.UnsupportedEncodingException;
+
 /**
  * @Description: mqtt娑堣垂瀹㈡埛绔�
  * @ClassName: MqttConsumer
@@ -16,6 +21,7 @@
  **/
 @Component
 @Slf4j(topic = "mqtt")
+@Order(1)
 public class MqttConsumer implements ApplicationRunner {
 
     private static MqttClient client;
@@ -23,8 +29,7 @@
     @Override
     public void run(ApplicationArguments args) {
         log.info("鍒濆鍖栧苟鍚姩mqtt......");
-        if(PropertiesUtil.MQTT_ENABLED)
-        {
+        if (PropertiesUtil.MQTT_ENABLED) {
             this.connect();
         }
     }
@@ -49,7 +54,7 @@
     }
 
     /**
-     *  鍒涘缓瀹㈡埛绔�  --- 1 ---
+     * 鍒涘缓瀹㈡埛绔�  --- 1 ---
      */
     public void getClient() {
         try {
@@ -63,7 +68,7 @@
     }
 
     /**
-     *  鐢熸垚閰嶇疆瀵硅薄锛岀敤鎴峰悕锛屽瘑鐮佺瓑  --- 2 ---
+     * 鐢熸垚閰嶇疆瀵硅薄锛岀敤鎴峰悕锛屽瘑鐮佺瓑  --- 2 ---
      */
     public MqttConnectOptions getOptions() {
         MqttConnectOptions options = new MqttConnectOptions();
@@ -81,7 +86,7 @@
     }
 
     /**
-     *  qos   --- 3 ---
+     * qos   --- 3 ---
      */
     public int[] getQos(int length) {
 
@@ -101,7 +106,7 @@
     }
 
     /**
-     *  瑁呰浇鍚勭瀹炰緥鍜岃闃呬富棰�  --- 4 ---
+     * 瑁呰浇鍚勭瀹炰緥鍜岃闃呬富棰�  --- 4 ---
      */
     public void create(MqttConnectOptions options, String[] topic, int[] qos) {
         try {
@@ -130,8 +135,8 @@
 
     /**
      * 鍙戝竷锛岄潪鎸佷箙鍖�
-     *
-     *  qos鏍规嵁鏂囨。璁剧疆涓�1
+     * <p>
+     * qos鏍规嵁鏂囨。璁剧疆涓�1
      *
      * @param topic
      * @param msg
@@ -144,30 +149,32 @@
      * 鍙戝竷
      */
     public static void publish(int qos, boolean retained, String topic, String pushMessage) {
-        log.info("銆愪富棰樸��:" + topic + "銆恞os銆�:" + qos + "銆恜ushMessage銆�:" + pushMessage);
-        MqttMessage message = new MqttMessage();
-        message.setQos(qos);
-        message.setRetained(retained);
-        try {
-            message.setPayload(pushMessage.getBytes("UTF-8"));
-        } catch (UnsupportedEncodingException e) {
-            log.error("mqtt缂栫爜寮傚父锛�" + e.getMessage());
-        }
-        MqttTopic mTopic = client.getTopic(topic);
-        if (null == mTopic) {
-            log.error("topic锛�" + topic + " 涓嶅瓨鍦�");
-        }
-        MqttDeliveryToken token;
-        try {
-            token = mTopic.publish(message);
-            token.waitForCompletion();
-            if (token.isComplete()) {
-                log.info("娑堟伅鍙戦�佹垚鍔�");
+        if (client != null) {
+            log.info("銆愪富棰樸��:" + topic + "銆恞os銆�:" + qos + "銆恜ushMessage銆�:" + pushMessage);
+            MqttMessage message = new MqttMessage();
+            message.setQos(qos);
+            message.setRetained(retained);
+            try {
+                message.setPayload(pushMessage.getBytes("UTF-8"));
+            } catch (UnsupportedEncodingException e) {
+                log.error("mqtt缂栫爜寮傚父锛�" + e.getMessage());
             }
-        } catch (MqttPersistenceException e) {
-            log.error("mqtt鎸佷箙寮傚父锛�" + e.getMessage());
-        } catch (MqttException e) {
-            log.error("mqtt寮傚父锛�" + e.getMessage());
+            MqttTopic mTopic = client.getTopic(topic);
+            if (null == mTopic) {
+                log.error("topic锛�" + topic + " 涓嶅瓨鍦�");
+            }
+            MqttDeliveryToken token;
+            try {
+                token = mTopic.publish(message);
+                token.waitForCompletion();
+                if (token.isComplete()) {
+                    log.info("娑堟伅鍙戦�佹垚鍔�");
+                }
+            } catch (MqttPersistenceException e) {
+                log.error("mqtt鎸佷箙寮傚父锛�" + e.getMessage());
+            } catch (MqttException e) {
+                log.error("mqtt寮傚父锛�" + e.getMessage());
+            }
         }
     }
 }
diff --git a/src/main/java/com/ard/utils/tcp/ClientInitialize.java b/src/main/java/com/ard/utils/tcp/ClientInitialize.java
index 0fa3d9e..674d095 100644
--- a/src/main/java/com/ard/utils/tcp/ClientInitialize.java
+++ b/src/main/java/com/ard/utils/tcp/ClientInitialize.java
@@ -17,6 +17,9 @@
 import io.netty.channel.socket.nio.NioSocketChannel;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
@@ -34,7 +37,8 @@
  */
 @Component
 @Slf4j(topic = "netty")
-public class ClientInitialize {
+@Order(2)
+public class ClientInitialize implements ApplicationRunner {
 
     @Resource
     IArdEquipRadarService ardEquipRadarService;
@@ -119,8 +123,8 @@
     /**
      * 鍒濆鍖栨柟娉�
      */
-    @PostConstruct
-    public void initialize() {
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
         if (!tcpClientEnable) {
             return;
         }
diff --git a/src/main/resources/mapper/ArdEquipExternalMapper.xml b/src/main/resources/mapper/ArdEquipExternalMapper.xml
new file mode 100644
index 0000000..646ba44
--- /dev/null
+++ b/src/main/resources/mapper/ArdEquipExternalMapper.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ard.alarm.external.mapper.ArdEquipExternalMapper">
+
+    <resultMap type="ArdEquipExternal" id="ArdEquipExternalResult">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="type" column="type"/>
+        <result property="factory" column="factory"/>
+        <result property="ip" column="ip"/>
+        <result property="port" column="port"/>
+        <result property="username" column="username"/>
+        <result property="password" column="password"/>
+        <result property="longitude" column="longitude"/>
+        <result property="latitude" column="latitude"/>
+        <result property="altitude" column="altitude"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="userId" column="user_id"/>
+    </resultMap>
+
+    <sql id="selectArdEquipExternalVo">
+        select c.id,
+               c.name,
+               c.type,
+               c.factory,
+               c.ip,
+               c.port,
+               c.username,
+               c.password,
+               c.longitude,
+               c.latitude,
+               c.altitude
+        from ard_equip_external c
+    </sql>
+
+    <select id="selectArdEquipExternalList" parameterType="ArdEquipExternal" resultMap="ArdEquipExternalResult">
+        <include refid="selectArdEquipExternalVo"/>
+        <where>
+            <if test="name != null  and name != ''">and c.name like '%'||#{name}||'%'</if>
+            <if test="type != null  and type != ''">and c.type = #{type}</if>
+            <if test="factory != null  and factory != ''">and c.factory = #{factory}</if>
+            <if test="deptId != null ">and (c.dept_id = #{deptId} OR c.dept_id IN ( SELECT t.dept_id FROM sys_dept t
+                WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) ))
+            </if>
+            <if test="userId != null  and userId != ''">and c.user_id = #{userId}</if>
+        </where>
+    </select>
+
+    <select id="selectArdEquipExternalById" parameterType="String" resultMap="ArdEquipExternalResult">
+        <include refid="selectArdEquipExternalVo"/>
+        where id = #{id}
+    </select>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3