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()); 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); } } 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<>(); } src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
@@ -41,6 +41,10 @@ */ String cameraIp; /** * 关联相机port */ Integer cameraPort; /** * 关联相机通道 */ Integer cameraChannel; 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 ""; } 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