From 2a2885f45160b4048a27e75d5be03ba9232c7363 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期二, 10 九月 2024 17:34:42 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-server/src/main/java/com/ycl/task/OsdTask.java | 253 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 248 insertions(+), 5 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/task/OsdTask.java b/ycl-server/src/main/java/com/ycl/task/OsdTask.java index 0e75f94..0c493a9 100644 --- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java +++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java @@ -1,18 +1,261 @@ package com.ycl.task; -import com.ycl.api.DH.module.LoginModule; +import com.mongodb.client.result.DeleteResult; +import com.ycl.api.DH.utils.DHApi; import com.ycl.api.HK.HKApi; +import com.ycl.api.YS.YSApi; +import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.result.OSDResult; +import com.ycl.platform.domain.result.UY.MonitorQualifyResult; +import com.ycl.platform.domain.result.UY.OsdCheckResult; +import com.ycl.platform.mapper.TMonitorMapper; +import com.ycl.platform.service.UYErrorTypeCheckService; +import com.ycl.utils.DateUtils; +import com.ycl.utils.StringUtils; +import constant.ApiConstants; +import enumeration.DeviceType; +import enumeration.general.AreaDeptEnum; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; @Slf4j @Component("OsdTask") public class OsdTask { + @Value("${HK.userName}") + public String HKUserName; + @Value("${HK.password}") + public String HKPassword; + @Value("${DH.userName}") + public String DHUserName; + @Value("${DH.password}") + public String DHPassword; + @Value("${YS.userName}") + public String YSUserName; + @Value("${YS.password}") + public String YSPassword; + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private TMonitorMapper monitorMapper; + @Autowired + private UYErrorTypeCheckService uyErrorTypeCheckService; + + /** + * 閫氳繃鏌ongoDB姣忔棩涓�鏈轰竴妗f暟鎹幏鍙栬澶噄p + * 閫氳繃璁惧ip銆佸搧鐗岃皟鐢ㄤ笉鍚宎pi鑾峰彇osd淇℃伅 + * 姣斿mongoDB涓�鏈轰竴妗d俊鎭紝鏁寸悊鎴恟esult瀛樺叆mongo + * 鍚屾鍝佺墝鍒癿ysql + */ + //TODO锛氬ぇ鍗庡姩鎬佸簱linux鎹綅缃� public void getOSD() { - HKApi.getOsdByIP("51.95.68.80"); - long loginId = LoginModule.login("51.95.67.189", 80, "admin", "zg@2024dx"); - String osdTime = LoginModule.getOsdTime(); - LoginModule.logout(); + log.info("寮�濮嬭幏鍙朞SD"); + List<OSDResult> osdResultList = new ArrayList<>(); + //鏌ヤ竴鏈轰竴妗onitor + Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); + List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class); + //闇�瑕佽�冩牳鐨勬暟鎹� + List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(serialNumbers)) { + ExecutorService executorService = new ThreadPoolExecutor(16, + 128, + 5000, + TimeUnit.SECONDS, + new ArrayBlockingQueue<>(1000), + new ThreadPoolExecutor.CallerRunsPolicy() + ); + List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers); + monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList()); +// log.info("澶勭悊鏁版嵁澶у皬{}", monitors.size()); + for (TMonitor monitor : monitors) { + executorService.submit(() -> { + if (DeviceType.HK.getType().equals(monitor.getDeviceType())) { + //娴峰悍 + OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword); + if (checkSuccess(osdResultList, monitor, osd)) { + log.info("娴峰悍璋冪敤鎴愬姛" + osd); + return; + } + } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) { + //澶у崕 + OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); + if (checkSuccess(osdResultList, monitor, osd)) { + log.info("澶у崕璋冪敤鎴愬姛" + osd); + return; + } + } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) { + //瀹囪 + OSDResult osd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword); + if (checkSuccess(osdResultList, monitor, osd)) { + log.info("瀹囪璋冪敤鎴愬姛" + osd); + return; + } + } + //鏈煡鍝佺墝鎴栬�卆pi璋冪敤澶辫触锛屾尐涓墽琛屾墍鏈塧pi + OSDResult osd = tryAllApi(monitor); + if (osd != null) { + synchronized (osdResultList) { + osdResultList.add(osd); + } + } + }); + } + //涓嶅啀鎺ユ敹鏂颁换鍔� + executorService.shutdown(); + try { + // 绛夊緟鎵�鏈変换鍔″畬鎴愶紝鏈�澶氱瓑寰�10绉掞紙鍙互鏍规嵁闇�瑕佽皟鏁达級 + if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) { + // 濡傛灉瓒呮椂锛屽皾璇曞仠姝㈠綋鍓嶆鍦ㄦ墽琛岀殑浠诲姟 + executorService.shutdownNow(); + } + } catch (InterruptedException e) { + // 褰撳墠绾跨▼鍦ㄧ瓑寰呰繃绋嬩腑琚腑鏂� + executorService.shutdownNow(); + } + //缁撴潫api鎵ц锛屽紑濮嬫牎楠� + List<OsdCheckResult> checkResults = new ArrayList<>(); + Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + for (OSDResult osdResult : osdResultList) { + TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); + //灏佽OsdCheckResult + OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); + checkCorrect(osdResult, monitor, osdCheckResult); + log.info("鏍¢獙缁撴灉锛歿}",osdCheckResult); + checkResults.add(osdCheckResult); + } + log.info("缁撴灉鏁版嵁澶у皬:{}", checkResults.size()); + //缁撴灉瀛樺叆mongo + if (!CollectionUtils.isEmpty(checkResults)) { + log.info("瀛樺叆mongo"); + //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 + Query pyQuery = new Query(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); + DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class); + //瀛樻斁鍦╩ongo涓� + mongoTemplate.insertAll(checkResults); + // 宸ュ崟鐢熸垚 + uyErrorTypeCheckService.osdCheck(checkResults); + } + } + log.info("缁撴潫鑾峰彇OSD"); + } + + private OsdCheckResult getOsdCheckResult(OSDResult osdResult, TMonitor monitor) { + OsdCheckResult osdCheckResult = new OsdCheckResult(); + osdCheckResult.setDeviceNo(osdResult.getSerialNumber()); + osdCheckResult.setIp(monitor.getIp()); + osdCheckResult.setDeviceType(monitor.getCameraFunType()); + osdCheckResult.setCheckTime(osdResult.getCheckTime()); + osdCheckResult.setSetTime(osdResult.getOsdTime()); + osdCheckResult.setOsdProvince(osdResult.getOSD1()); + osdCheckResult.setOsdCity(osdResult.getOSD2()); + osdCheckResult.setOsdPart(osdResult.getOSD3()); + osdCheckResult.setOsdLB(osdResult.getOSD4()); + osdCheckResult.setOsdName(osdResult.getName()); + osdCheckResult.setDeviceBrand(osdResult.getDeviceBrand()); + return osdCheckResult; + } + + private void checkCorrect(OSDResult osdResult, TMonitor monitor, OsdCheckResult osdCheckResult) { + //妫�鏌ユ椂闂存槸鍚︽纭� + if (osdResult.getCheckTime() != null && osdResult.getOsdTime() != null) { + long checkTime = osdResult.getCheckTime().getTime(); + long osdTime = osdResult.getOsdTime().getTime(); + long timeDiff = (checkTime - osdTime) / 1000; + if (timeDiff <= 60) { + osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct); + } else { + osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Error); + } + } + //妫�鏌ラ�氶亾鍚嶆槸鍚︽纭� + //鏍¢獙瑙勫垯锛岃繖閲屾殏鏃朵笉姣旇緝鍏ㄦ櫙鍜岀粏鑺備袱瀛椼�� + if (!StringUtils.isEmpty(osdResult.getName()) && !StringUtils.isEmpty(monitor.getName())) { + if (monitor.getName().equals(osdResult.getName()) || monitor.getName().replace("鍏ㄦ櫙", "缁嗚妭").equals(osdResult.getName()) || monitor.getName().replace("缁嗚妭", "鍏ㄦ櫙").equals(osdResult.getName())) { + osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct); + osdCheckResult.setOsdName(osdResult.getName()); + } else { + osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error); + } + } + //妫�鏌ョ渷鏄惁姝g‘ + if (!StringUtils.isEmpty(osdResult.getOSD1())) { + if ("鍥涘窛".equals(osdResult.getOSD1())) { + osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Correct); + } else { + osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Error); + } + } + //妫�鏌ュ競鏄惁姝g‘ + if (!StringUtils.isEmpty(osdResult.getOSD2())) { + if ("鑷础".equals(osdResult.getOSD2())) { + osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Correct); + } else { + osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Error); + } + } + //妫�鏌ュ尯鍘挎槸鍚︽纭� + if (!StringUtils.isEmpty(osdResult.getOSD3())) { + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(monitor.getSerialNumber().substring(0, 6)); + if (areaDeptEnum != null && osdResult.getOSD3().equals(areaDeptEnum.getName())) { + osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Correct); + } else { + osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Error); + } + } + } + + private boolean checkSuccess(List<OSDResult> osdResultList, TMonitor monitor, OSDResult osd) { + if (osd != null) { + osd.setSerialNumber(monitor.getSerialNumber()); + synchronized (osdResultList) { + osdResultList.add(osd); + } + return true; + } else { + return false; + } + } + + private OSDResult tryAllApi(TMonitor monitor) { + //灏濊瘯娴峰悍鐨刟pi + OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword); + if (hkosd != null) { + hkosd.setSerialNumber(monitor.getSerialNumber()); + log.info("娴峰悍璋冪敤鎴愬姛" + hkosd); + return hkosd; + } + //灏濊瘯澶у崕鐨刟pi + OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); + if (dhosd != null) { + dhosd.setSerialNumber(monitor.getSerialNumber()); + log.info("澶у崕璋冪敤鎴愬姛" + dhosd); + return dhosd; + } + //瀹囪api + OSDResult ysosd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword); + if (ysosd != null) { + ysosd.setSerialNumber(monitor.getSerialNumber()); + log.info("瀹囪璋冪敤鎴愬姛" + ysosd); + return ysosd; + } + return null; } } -- Gitblit v1.8.0