From e71d3d823093bafe0283a57aa640928709d09434 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期一, 25 九月 2023 11:51:01 +0800 Subject: [PATCH] 优化sql框架使用mybatis-plus代替mybatis --- src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 157 insertions(+), 13 deletions(-) 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 2753ea4..723ab35 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 @@ -1,53 +1,197 @@ package com.ard.alarm.external.service.impl; -import java.util.List; +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.external.domain.ArdEquipExternal; import com.ard.alarm.external.mapper.ArdEquipExternalMapper; import com.ard.alarm.external.service.IArdEquipExternalService; +import com.ard.utils.hiksdk.service.impl.HikClientUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; /** * externalService涓氬姟灞傚鐞� - * + * * @author zj * @date 2023-03-13 */ @Service -public class ArdEquipExternalServiceImpl implements IArdEquipExternalService -{ +@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){ + //鑾峰彇鍏ㄩ儴娴峰悍鎶ヨ涓绘満灏濊瘯鐧诲綍 + ArdEquipExternal alarmHost = new ArdEquipExternal(); + alarmHost.setFactory("1"); + alarmHost.setType("1"); + ardAlarmHostList = selectArdEquipExternalList(alarmHost); + HikClientUtil.loginAllAlarmHost(ardAlarmHostList); + log.debug("鎶ヨ涓绘満灏濊瘯鐧诲綍"); + //鑾峰彇鍏ㄩ儴闂ㄧ涓绘満灏濊瘯鐧诲綍 + ArdEquipExternal accessControlHost = new ArdEquipExternal(); + accessControlHost.setFactory("1"); + accessControlHost.setType("6"); + ardAccessHostList = selectArdEquipExternalList(accessControlHost); + HikClientUtil.loginAllAccessControlHost(ardAccessHostList); + log.debug("闂ㄧ涓绘満灏濊瘯鐧诲綍"); + //鍚屾浠诲姟 + syncTask(); + } + + /** + * 鍚屾浠诲姟 + * 鍒樿嫃涔� + * 2023/8/11 9:09:27 + */ + private void syncTask() { + scheduler.scheduleAtFixedRate(() -> { + try { + //region 瀹氭椂鍚屾鎶ヨ涓绘満 + ArdEquipExternal alarmHost = new ArdEquipExternal(); + alarmHost.setFactory("1"); + alarmHost.setType("1"); + List<ArdEquipExternal> newAlarmHostList = selectArdEquipExternalList(alarmHost); + //闇�瑕佹洿鏂扮殑鏁版嵁 + List<ArdEquipExternal> updateList = sameListWithDifferent(ardAlarmHostList, newAlarmHostList); + if (updateList.size() > 0) { + HikClientUtil.logoutAllAlarmHost(updateList); + HikClientUtil.loginAllAlarmHost(updateList); + ardAlarmHostList.clear(); + ardAlarmHostList.addAll(newAlarmHostList); + } + //闇�瑕佸垹闄ょ殑鏁版嵁 + List<ArdEquipExternal> delList = diffList(ardAlarmHostList, newAlarmHostList); + if (delList.size() > 0) { + HikClientUtil.logoutAllAlarmHost(delList); + for (ArdEquipExternal ardEquipExternal : delList) { + ardAlarmHostList.remove(ardEquipExternal); + } + } + //闇�瑕佹柊澧炵殑鏁版嵁 + List<ArdEquipExternal> inserList = diffList(newAlarmHostList, ardAlarmHostList); + if (inserList.size() > 0) { + HikClientUtil.loginAllAlarmHost(inserList); + for (ArdEquipExternal ardEquipExternal : inserList) { + ardAlarmHostList.add(ardEquipExternal); + } + } + + //endregion + //region 瀹氭椂鍚屾闂ㄧ涓绘満 + alarmHost = new ArdEquipExternal(); + alarmHost.setFactory("1"); + alarmHost.setType("6"); + List<ArdEquipExternal> newAccessHostList = selectArdEquipExternalList(alarmHost); + //闇�瑕佹洿鏂扮殑鏁版嵁 + updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList); + if (updateList.size() > 0) { + HikClientUtil.logoutAllAlarmHost(updateList); + HikClientUtil.loginAllAlarmHost(updateList); + ardAccessHostList.clear(); + ardAccessHostList.addAll(newAccessHostList); + } + //闇�瑕佸垹闄ょ殑鏁版嵁 + delList = diffList(ardAccessHostList, newAccessHostList); + if (delList.size() > 0) { + HikClientUtil.logoutAllAccessControlHost(delList); + for (ArdEquipExternal ardEquipExternal : delList) { + ardAccessHostList.remove(ardEquipExternal); + } + } + //闇�瑕佹柊澧炵殑鏁版嵁 + inserList = diffList(newAccessHostList, ardAccessHostList); + if (inserList.size() > 0) { + HikClientUtil.loginAllAccessControlHost(inserList); + for (ArdEquipExternal ardEquipExternal : inserList) { + ardAccessHostList.add(ardEquipExternal); + } + } + //endregion + } catch (Exception e) { + log.error("鍚屾澶栬仈浠诲姟鎵ц鍑洪敊" + e.getMessage()); + } + }, 10, 10, TimeUnit.SECONDS); + } + + /** * 鏌ヨexternal - * + * * @param id external涓婚敭 * @return external */ @Override - public ArdEquipExternal selectArdEquipExternalById(String id) - { - return ardEquipExternalMapper.selectArdEquipExternalById(id); + public ArdEquipExternal selectArdEquipExternalById(String id) { + return ardEquipExternalMapper.selectById(id); } @Override public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) { - return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal); + QueryWrapper<ArdEquipExternal> queryWrapper=new QueryWrapper<>(ardEquipExternal); + return ardEquipExternalMapper.selectOne(queryWrapper); } /** * 鏌ヨexternal鍒楄〃 - * + * * @param ardEquipExternal external * @return external */ @Override - public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) - { - return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal); + public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) { + QueryWrapper<ArdEquipExternal> queryWrapper=new QueryWrapper<>(ardEquipExternal); + return ardEquipExternalMapper.selectList(queryWrapper); } + + //姹備袱涓璞ist鐨勪氦闆嗗瓧娈典笉鍚孖d鐩稿悓 + private List<ArdEquipExternal> sameListWithDifferent(List<ArdEquipExternal> oldList, List<ArdEquipExternal> newList) { + List<ArdEquipExternal> differentFieldsList = newList.stream() + .filter(newItem -> { + ArdEquipExternal 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; + } + + + // 姹備袱涓璞ist鐨勫樊闆� + private List<ArdEquipExternal> diffList(List<ArdEquipExternal> oldArrayList, List<ArdEquipExternal> newArrayList) { + List<ArdEquipExternal> resultList = oldArrayList.stream() + .filter(item -> !newArrayList.stream().map(e -> e.getId()).collect(Collectors.toList()).contains(item.getId())) + .collect(Collectors.toList()); + return resultList; + } } -- Gitblit v1.9.3