From 85446b5b526ac53af9add7c83cfd72f39ec39611 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Fri, 07 Jul 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 @@
"【IP】" + info.getCameraIp() + "【通道】" + info.getCameraChannel() + "【型号】" + info.getCameraType() +
"【图片】" + info.getPicUrl() + "【坐标】" + info.getLongitude() + "," + info.getLatitude());
}
+
/**
* 打印外联报警日志
*/
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());
+ "【时间】" + info.getAlarmTime() + "【报警主机ID】" + info.getAlarmHostId());
}
/**
@@ -308,13 +318,15 @@
// 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));
+ 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和false
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 + "【qos】:" + qos + "【pushMessage】:" + 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 + "【qos】:" + qos + "【pushMessage】:" + 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