From 1e89a0c2fc96040ba50d0fe4305ace22f3daa6cf Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Fri, 11 Aug 2023 15:35:21 +0800
Subject: [PATCH] 优化通用光电报警只获取小光电数据
---
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java | 68 ++++------------
src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java | 4 +
src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | 67 +++++++++-------
src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java | 12 +-
src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java | 11 +-
src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java | 19 ++--
6 files changed, 80 insertions(+), 101 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 7b0f9ab..7513cd8 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
@@ -42,8 +42,10 @@
public void run(ApplicationArguments args) {
//加载sdk库
HikClientUtil.loadHCNetSDKLib();
- //获取全部海康光电尝试登录
- ardCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+ //获取小光电尝试登录
+ ArdCameras ardCamera=new ArdCameras();
+ ardCamera.setGdtype("0");
+ ardCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
HikClientUtil.loginAllCamera(ardCameraList);
syncTask();
}
@@ -56,8 +58,10 @@
private void syncTask() {
scheduler.scheduleAtFixedRate(() -> {
try {
- //region 定时同步相机
- List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
+ //region 定时同步小光电
+ ArdCameras ardCamera=new ArdCameras();
+ ardCamera.setGdtype("0");
+ List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
//需要更新的数据
List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList);
if (updateList.size() > 0) {
@@ -129,12 +133,7 @@
.findFirst()
.orElse(null);
- return oldItem == null ||
- !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime()) ||
- !Objects.equals(oldItem.getIp(), newItem.getIp()) ||
- !Objects.equals(oldItem.getPort(), newItem.getPort()) ||
- !Objects.equals(oldItem.getUsername(), newItem.getUsername()) ||
- !Objects.equals(oldItem.getPassword(), newItem.getPassword());
+ return oldItem == null || !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime());
})
.collect(Collectors.toList());
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
index 9d77347..e5fa5e8 100644
--- a/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
+++ b/src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
@@ -29,26 +29,32 @@
@Slf4j(topic = "external")
@Order(5)
public class ArdEquipExternalServiceImpl implements IArdEquipExternalService, ApplicationRunner {
+
private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+
public static List<ArdEquipExternal> ardAlarmHostList = new ArrayList<>();
public static List<ArdEquipExternal> ardAccessHostList = new ArrayList<>();
+
@Autowired
private ArdEquipExternalMapper ardEquipExternalMapper;
@Override
- public void run(ApplicationArguments args) throws Exception {
+ public void run(ApplicationArguments args){
//获取全部海康报警主机尝试登录
ArdEquipExternal alarmHost = new ArdEquipExternal();
alarmHost.setFactory("1");
alarmHost.setType("1");
ardAlarmHostList = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
HikClientUtil.loginAllAlarmHost(ardAlarmHostList);
+
//获取全部门禁主机尝试登录
ArdEquipExternal accessControlHost = new ArdEquipExternal();
accessControlHost.setFactory("1");
accessControlHost.setType("6");
ardAccessHostList = ardEquipExternalMapper.selectArdEquipExternalList(accessControlHost);
HikClientUtil.loginAllAccessControlHost(ardAccessHostList);
+
+ //同步任务
syncTask();
}
@@ -97,7 +103,7 @@
alarmHost.setType("6");
List<ArdEquipExternal> newAccessHostList = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
//需要更新的数据
- updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
+ updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
if (updateList.size() > 0) {
HikClientUtil.logoutAllAlarmHost(updateList);
HikClientUtil.loginAllAlarmHost(updateList);
@@ -125,6 +131,34 @@
log.error("同步外联任务执行出错" + e.getMessage());
}
}, 10, 10, TimeUnit.SECONDS);
+ }
+
+
+ /**
+ * 查询external
+ *
+ * @param id external主键
+ * @return external
+ */
+ @Override
+ public ArdEquipExternal selectArdEquipExternalById(String id) {
+ return ardEquipExternalMapper.selectArdEquipExternalById(id);
+ }
+
+ @Override
+ public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
+ return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
+ }
+
+ /**
+ * 查询external列表
+ *
+ * @param ardEquipExternal external
+ * @return external
+ */
+ @Override
+ public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) {
+ return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
}
@@ -157,33 +191,4 @@
.collect(Collectors.toList());
return resultList;
}
-
- /**
- * 查询external
- *
- * @param id external主键
- * @return external
- */
- @Override
- public ArdEquipExternal selectArdEquipExternalById(String id) {
- return ardEquipExternalMapper.selectArdEquipExternalById(id);
- }
-
- @Override
- public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
- return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
- }
-
- /**
- * 查询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/utils/hiksdk/common/GlobalVariable.java b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
index 5e79fef..b7cadae 100644
--- a/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
+++ b/src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
@@ -15,14 +15,12 @@
**/
@Data
public class GlobalVariable {
- //保存相机信息key:ip value:camera对象
+ //保存相机信息key:(ip:port) value:camera对象
public static Map<String, ArdCameras> cameraMap = new HashMap<>();
- //保存相机信息key:ip value:报警主机对象
- public static Map<String, ArdEquipExternal> alarmHostMap = new HashMap<>();
- //保存相机信息key:ip value:门禁主机对象
- public static Map<String, ArdEquipExternal> accessHostMap = new HashMap<>();
- //保存相机登录信息key:cameraId value:loginId
+
+ //保存设备登录信息key:deviceId value:loginId
public static Map<String, Integer> loginMap = new HashMap<>();
- //保存相机的布防信息key:cameraId value:lAlarmHandle
+
+ //保存设备的布防信息key:deviceId value:lAlarmHandle
public static Map<String, Integer> alarmMap = new HashMap<>();
}
diff --git a/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java b/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
index 19bea4e..ff82dae 100644
--- a/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
+++ b/src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
@@ -41,6 +41,10 @@
*/
String cameraIp;
/**
+ * 关联相机port
+ */
+ Integer cameraPort;
+ /**
* 关联相机通道
*/
Integer cameraChannel;
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 9314aa7..237152b 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
@@ -56,7 +56,7 @@
//log.debug("报警事件类型:lCommand:" + Integer.toHexString(lCommand));
switch (lCommand) {
case HCNetSDK.COMM_ALARM_V30:
- log.debug("移动侦测");
+ //log.debug("移动侦测");
ArdCameras ardCameras = new ArdCameras();
ardCameras.setIp(sDeviceIP);
ardCameras.setPort(wLinkPort);
@@ -75,6 +75,7 @@
info.setCameraName(camera.getName());
info.setCameraId(camera.getId());
info.setCameraIp(camera.getIp());
+ info.setCameraPort(camera.getPort());
info.setCameraType(camera.getGdtype());
info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0]));
info.setLongitude(camera.getLongitude());
@@ -89,7 +90,7 @@
}
case HCNetSDK.COMM_ALARM_RULE:
- log.debug("行为分析信息报警信息上报");
+ //log.debug("行为分析信息报警信息上报");
//region 行为分析信息
ardCameras = new ArdCameras();
ardCameras.setIp(sDeviceIP);
@@ -112,6 +113,7 @@
info.setCameraName(ardCamera.getName());
info.setCameraId(ardCamera.getId());
info.setCameraIp(ipaddr);
+ info.setCameraPort(ardCamera.getPort());
info.setCameraType(ardCamera.getGdtype());
info.setCameraChannel(channel);
info.setLongitude(ardCamera.getLongitude());
@@ -185,7 +187,7 @@
// log.debug("GPS报警信息上报(暂不解析)");
// break;
case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
- log.debug("报警主机CID报告报警上报");
+ //log.debug("报警主机CID报告报警上报");
//region 报警主机报警处理
ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
ardEquipExternal.setIp(sDeviceIP);
@@ -401,7 +403,8 @@
*/
private String savePicture(CameraEventInfo info) {
CameraCmd cmd = new CameraCmd();
- ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp());
+ String key=info.getCameraIp()+":"+info.getCameraPort();
+ ArdCameras Cameras = GlobalVariable.cameraMap.get(key);
if (Cameras == null) {
return "";
}
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 1faeb54..02e1fe5 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
@@ -210,7 +210,8 @@
info.setUsername(camera.getUsername());
info.setPassword(camera.getPassword());
login(info);
- GlobalVariable.cameraMap.put(camera.getIp(), camera);
+ String key = camera.getIp() + ":" + camera.getPort();
+ GlobalVariable.cameraMap.put(key, camera);
}
} catch (Exception ex) {
log.error("初始化登录相机异常:" + ex.getMessage());
@@ -233,7 +234,8 @@
info.setUsername(camera.getUsername());
info.setPassword(camera.getPassword());
logout(info);
- GlobalVariable.cameraMap.remove(camera.getIp());
+ String key = camera.getIp() + ":" + camera.getPort();
+ GlobalVariable.cameraMap.remove(key);
}
} catch (Exception ex) {
log.error("初始化登录相机异常:" + ex.getMessage());
@@ -256,20 +258,20 @@
info.setUsername(alarmHost.getUsername());
info.setPassword(alarmHost.getPassword());
login(info);
- String ip = alarmHost.getIp();
- GlobalVariable.alarmHostMap.put(ip, alarmHost);
+// String key=alarmHost.getIp()+":"+alarmHost.getPort();
+// GlobalVariable.alarmHostMap.put(key, alarmHost);
}
} catch (Exception ex) {
log.error("初始化报警主机异常:" + ex.getMessage());
}
}
+
/**
* @描述 登出所有报警主机
* @创建人 刘苏义
* @创建时间 2023/2/3 10:10
*/
- public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals)
- {
+ public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) {
try {
for (ArdEquipExternal alarmHost : ardEquipExternals) {
Thread.sleep(100);
@@ -280,13 +282,14 @@
info.setUsername(alarmHost.getUsername());
info.setPassword(alarmHost.getPassword());
logout(info);
- String ip = alarmHost.getIp();
- GlobalVariable.alarmHostMap.remove(ip);
+// String key=alarmHost.getIp()+":"+alarmHost.getPort();
+// GlobalVariable.alarmHostMap.remove(key);
}
} catch (Exception ex) {
log.error("初始化登录相机异常:" + ex.getMessage());
}
}
+
/**
* @描述 登录所有门禁主机
* @创建人 刘苏义
@@ -303,13 +306,15 @@
info.setUsername(accessControlHost.getUsername());
info.setPassword(accessControlHost.getPassword());
login(info);
- String ip = accessControlHost.getIp();
- GlobalVariable.accessHostMap.put(ip, accessControlHost);
+//
+// String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
+// GlobalVariable.accessHostMap.put(key, accessControlHost);
}
} catch (Exception ex) {
log.error("初始化报警主机异常:" + ex.getMessage());
}
}
+
/**
* @描述 登出所有门禁主机
* @创建人 刘苏义
@@ -326,47 +331,14 @@
info.setUsername(accessControlHost.getUsername());
info.setPassword(accessControlHost.getPassword());
logout(info);
- String ip = accessControlHost.getIp();
- GlobalVariable.accessHostMap.remove(ip);
+// String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
+// GlobalVariable.accessHostMap.remove(key);
}
} catch (Exception ex) {
log.error("初始化报警主机异常:" + ex.getMessage());
}
}
- /**
- * @描述 注销登录
- * @参数 [dvrLogin]
- * @返回值 java.lang.Integer
- * @创建人 刘苏义
- * @创建时间 2023/1/17 16:12
- * @修改人和其它信息
- */
- public static boolean loginOut(String cameraId) {
- if (!GlobalVariable.loginMap.containsKey(cameraId)) {
- return false;
- }
- Integer userId = GlobalVariable.loginMap.get(cameraId);
- boolean b = hCNetSDK.NET_DVR_Logout(userId);
- if (b) {
- GlobalVariable.loginMap.remove(cameraId);
- }
- return b;
- }
- /**
- * 是否在线
- *
- * @param cmd
- */
- public static boolean isOnLine(CameraCmd cmd) {
- String cameraId = cmd.getCameraId();
- if (!GlobalVariable.loginMap.containsKey(cameraId)) {
- return false;
- }
- Integer userId = GlobalVariable.loginMap.get(cameraId);
- boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
- return isOnLine;
- }
/**
* 建立布防上传通道,用于传输数据
@@ -402,8 +374,6 @@
lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
if (lAlarmHandle == -1) {
log.error("设备【" + deviceIpPort + "】布防失败,错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
- // 注销 释放sdk资源
- logout(lUserID);
} else {
log.debug("设备【" + deviceIpPort + "】布防成功");
}
@@ -452,11 +422,11 @@
//设置图片大小
ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
// 抓图到内存,单帧数据捕获并保存成JPEG存放在指定的内存空间中
- // log.debug("-----------这里开始封装 NET_DVR_CaptureJPEGPicture_NEW---------");
+ // log.debug("-----------这里开始封装 NET_DVR_CaptureJPEGPicture_NEW---------");
boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
//log.debug("-----------这里开始图片存入内存----------" + is);
if (is) {
- // log.debug("hksdk(抓图)-结果状态值(0表示成功):" + hCNetSDK.NET_DVR_GetLastError());
+ // log.debug("hksdk(抓图)-结果状态值(0表示成功):" + hCNetSDK.NET_DVR_GetLastError());
byte[] array = jpegBuffer.array();
//存储到minio
--
Gitblit v1.9.3