From 2574db703fa175765394dba9d4e0d623a1bcd16a Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期三, 29 十一月 2023 17:19:57 +0800 Subject: [PATCH] 修复bug --- src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java | 133 ++++++++++++++++++++++++++++++++++++++----- 1 files changed, 116 insertions(+), 17 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 4c05ebf..782a1c9 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,48 +1,147 @@ 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; + +import javax.annotation.Resource; /** * externalService涓氬姟灞傚鐞� - * + * * @author zj * @date 2023-03-13 */ @Service -public class ArdEquipExternalServiceImpl implements IArdEquipExternalService -{ - @Autowired +@Slf4j(topic = "external") +@Order(5) +public class ArdEquipExternalServiceImpl implements IArdEquipExternalService, ApplicationRunner { + + private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + public static List<ArdEquipExternal> ardEquipExternalList = new ArrayList<>(); + @Resource private ArdEquipExternalMapper ardEquipExternalMapper; + + @Override + public void run(ApplicationArguments args) { + List<String> targetTypes = Arrays.asList("1", "5", "6"); + List<ArdEquipExternal> ardEquipExternals = selectArdEquipExternalListByTypes(targetTypes); + HikClientUtil.loginAllArdEquipExternals(ardEquipExternals); + ardEquipExternalList.addAll(ardEquipExternals); + log.debug("澶栬仈璁惧灏濊瘯鐧诲綍"); + //鍚屾浠诲姟 + syncTask(); + } + + /** + * 鍚屾浠诲姟 + * 鍒樿嫃涔� + * 2023/8/11 9:09:27 + */ + private void syncTask() { + scheduler.scheduleAtFixedRate(() -> { + try { + //region 瀹氭椂鍚屾澶栬仈璁惧 + List<String> targetTypes = Arrays.asList("1", "5", "6"); + List<ArdEquipExternal> ardEquipExternalsNew = selectArdEquipExternalListByTypes(targetTypes); + //闇�瑕佹洿鏂扮殑鏁版嵁 + List<ArdEquipExternal> updateList = sameListWithDifferent(ardEquipExternalList, ardEquipExternalsNew); + if (updateList.size() > 0) { + HikClientUtil.logoutAllArdEquipExternals(updateList); + HikClientUtil.loginAllArdEquipExternals(updateList); + ardEquipExternalList.clear(); + ardEquipExternalList.addAll(ardEquipExternalsNew); + } + //闇�瑕佸垹闄ょ殑鏁版嵁 + List<ArdEquipExternal> delList = diffList(ardEquipExternalList, ardEquipExternalsNew); + if (delList.size() > 0) { + HikClientUtil.logoutAllArdEquipExternals(delList); + for (ArdEquipExternal ardEquipExternal : delList) { + ardEquipExternalList.remove(ardEquipExternal); + } + } + //闇�瑕佹柊澧炵殑鏁版嵁 + List<ArdEquipExternal> inserList = diffList(ardEquipExternalsNew, ardEquipExternalList); + if (inserList.size() > 0) { + HikClientUtil.loginAllArdEquipExternals(inserList); + for (ArdEquipExternal ardEquipExternal : inserList) { + ardEquipExternalList.add(ardEquipExternal); + } + } + //endregion + } catch (Exception e) { + log.error("鍚屾澶栬仈浠诲姟鎵ц鍑洪敊" + e.getMessage()); + } + }, 10, 10, TimeUnit.SECONDS); + } /** * 鏌ヨexternal - * - * @param id external涓婚敭 - * @return external + * + * @param ardEquipExternal external + * @return external闆嗗悎 */ @Override - public ArdEquipExternal selectArdEquipExternalById(String id) - { - return ardEquipExternalMapper.selectArdEquipExternalById(id); + public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) { + QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(ardEquipExternal); + return ardEquipExternalMapper.selectOne(queryWrapper); } /** - * 鏌ヨexternal鍒楄〃 - * - * @param ardEquipExternal external + * 鎸夌被鍨嬪垪琛ㄦ煡璇xternal鍒楄〃 + * + * @param types 绫诲瀷鍒楄〃 * @return external */ @Override - public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) - { - return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal); + public List<ArdEquipExternal> selectArdEquipExternalListByTypes(List<String> types) { + QueryWrapper<ArdEquipExternal> queryWrapper = new QueryWrapper<>(); + queryWrapper.in("type", types); + 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