From a767f8b7e2aabf9bb3bb98344e8c559c71c1d442 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 11 八月 2023 14:40:28 +0800 Subject: [PATCH] 过滤通用光电报警只保留移动侦测、周界入侵报警、越界侦测报警 增加报警主机、门禁主机、通用光电数据同步 --- src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java | 101 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 84 insertions(+), 17 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 7a52bec..7b0f9ab 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 @@ -1,6 +1,10 @@ package com.ard.alarm.camera.service.impl; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.mapper.ArdCamerasMapper; @@ -27,30 +31,62 @@ @Slf4j(topic = "camera") @Order(4) public class ArdCamerasServiceImpl implements IArdCamerasService, ApplicationRunner { + private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + public static List<ArdCameras> ardCameraList = new ArrayList<>(); + @Resource private ArdCamerasMapper ardCamerasMapper; - @Resource - private ArdEquipExternalMapper ardEquipExternalMapper; @Override - public void run(ApplicationArguments args) { + public void run(ApplicationArguments args) { //鍔犺浇sdk搴� HikClientUtil.loadHCNetSDKLib(); //鑾峰彇鍏ㄩ儴娴峰悍鍏夌數灏濊瘯鐧诲綍 - List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); - HikClientUtil.loginAllCamera(ardCameras); - //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍 - ArdEquipExternal alarmHost = new ArdEquipExternal(); - alarmHost.setFactory("1"); - alarmHost.setType("1"); - List<ArdEquipExternal> alarmHosts = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost); - HikClientUtil.loginAllAlarmHost(alarmHosts); - //鑾峰彇鍏ㄩ儴闂ㄧ涓绘満灏濊瘯鐧诲綍 - ArdEquipExternal accessControlHost = new ArdEquipExternal(); - accessControlHost.setFactory("1"); - accessControlHost.setType("6"); - List<ArdEquipExternal>accessControlHosts = ardEquipExternalMapper.selectArdEquipExternalList(accessControlHost); - HikClientUtil.loginAllAccessControlHost(accessControlHosts); + ardCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); + HikClientUtil.loginAllCamera(ardCameraList); + syncTask(); + } + + /** + * 鍚屾浠诲姟 + * 鍒樿嫃涔� + * 2023/8/11 9:09:27 + */ + private void syncTask() { + scheduler.scheduleAtFixedRate(() -> { + try { + //region 瀹氭椂鍚屾鐩告満 + List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); + //闇�瑕佹洿鏂扮殑鏁版嵁 + List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList); + if (updateList.size() > 0) { + HikClientUtil.logoutAllCamera(updateList); + HikClientUtil.loginAllCamera(updateList); + ardCameraList.clear(); + ardCameraList.addAll(newArdCameraList); + } + //闇�瑕佸垹闄ょ殑鏁版嵁 + List<ArdCameras> delList = diffList(ardCameraList, newArdCameraList); + if (delList.size() > 0) { + HikClientUtil.logoutAllCamera(delList); + for (ArdCameras ardCameras : delList) { + ardCameraList.remove(ardCameras); + } + } + //闇�瑕佹柊澧炵殑鏁版嵁 + List<ArdCameras> inserList = diffList(newArdCameraList, ardCameraList); + if (inserList.size() > 0) { + HikClientUtil.loginAllCamera(inserList); + for (ArdCameras ardCameras : inserList) { + ardCameraList.add(ardCameras); + } + } + //endregion + } catch (Exception e) { + log.error("鍚屾鐩告満浠诲姟鎵ц鍑洪敊" + e.getMessage()); + } + }, 10, 10, TimeUnit.SECONDS); } /** @@ -74,4 +110,35 @@ public List<ArdCameras> selectArdCamerasList(ArdCameras ardCameras) { return ardCamerasMapper.selectArdCamerasList(ardCameras); } + + + // 姹備袱涓璞ist鐨勫樊闆� + private List<ArdCameras> diffList(List<ArdCameras> oldArrayList, List<ArdCameras> newArrayList) { + List<ArdCameras> resultList = oldArrayList.stream() + .filter(item -> !newArrayList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(item.getId())) + .collect(Collectors.toList()); + return resultList; + } + + //姹備袱涓璞ist鐨勪氦闆嗗瓧娈典笉鍚孖d鐩稿悓 + private List<ArdCameras> sameListWithDifferent(List<ArdCameras> oldList, List<ArdCameras> newList) { + List<ArdCameras> differentFieldsList = newList.stream() + .filter(newItem -> { + ArdCameras oldItem = oldList.stream() + .filter(item -> item.getId().equals(newItem.getId())) + .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()); + + }) + .collect(Collectors.toList()); + + return differentFieldsList; + } } -- Gitblit v1.9.3