From 40ab33e2f20233d1d30571247c33465ad9afc534 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 09 十二月 2024 09:47:21 +0800 Subject: [PATCH] 一些bug,非空判断、日志路径 --- ycl-server/src/main/java/com/ycl/task/OsdTask.java | 210 +++++++++++++++++++++++----------------------------- 1 files changed, 94 insertions(+), 116 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 511633b..d1fbf3d 100644 --- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java +++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java @@ -1,21 +1,23 @@ package com.ycl.task; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.mongodb.client.result.DeleteResult; -import com.ycl.api.DH.module.LoginModule; 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.domain.vo.OnlineThreadVO; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.UYErrorTypeCheckService; +import com.ycl.platform.service.YwPointService; +import com.ycl.thread.OSDCheckThread; import com.ycl.utils.DateUtils; import com.ycl.utils.StringUtils; import constant.ApiConstants; +import constant.CheckConstants; import enumeration.DeviceType; import enumeration.general.AreaDeptEnum; import lombok.extern.slf4j.Slf4j; @@ -31,16 +33,21 @@ 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.concurrent.*; import java.util.function.Function; import java.util.stream.Collectors; @Slf4j @Component("OsdTask") public class OsdTask { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private TMonitorMapper monitorMapper; + @Autowired + private UYErrorTypeCheckService uyErrorTypeCheckService; + @Autowired + private YwPointService pointService; @Value("${HK.userName}") public String HKUserName; @Value("${HK.password}") @@ -49,100 +56,92 @@ public String DHUserName; @Value("${DH.password}") public String DHPassword; - @Autowired - private MongoTemplate mongoTemplate; - @Autowired - private TMonitorMapper monitorMapper; - @Autowired - private UYErrorTypeCheckService uyErrorTypeCheckService; - - private static final ExecutorService executorService = new ThreadPoolExecutor(8, - 24, - 5000, - TimeUnit.SECONDS, - new ArrayBlockingQueue<>(10), - new ThreadPoolExecutor.CallerRunsPolicy() - ); - + @Value("${YS.userName}") + public String YSUserName; + @Value("${YS.password}") + public String YSPassword; /** * 閫氳繃鏌ongoDB姣忔棩涓�鏈轰竴妗f暟鎹幏鍙栬澶噄p * 閫氳繃璁惧ip銆佸搧鐗岃皟鐢ㄤ笉鍚宎pi鑾峰彇osd淇℃伅 * 姣斿mongoDB涓�鏈轰竴妗d俊鎭紝鏁寸悊鎴恟esult瀛樺叆mongo * 鍚屾鍝佺墝鍒癿ysql */ - public void getOSD() { - //鎵归噺淇敼娴峰悍鍝佺墝闆嗗悎 - List<String> hkList = new ArrayList<>(); - //鎵归噺淇敼澶у崕鍝佺墝闆嗗悎 - List<String> dhList = new ArrayList<>(); - //鎵归噺淇敼瀹囪鍝佺墝闆嗗悎 - List<String> ysList = new ArrayList<>(); - List<OSDResult> osdResultList = new ArrayList<>(); + public void getOSD() throws ExecutionException, InterruptedException { + log.info("寮�濮嬭幏鍙朞SD"); +// //娴峰悍璁惧娴嬭瘯 +// //鍏ㄦ櫙 +// OSDResult osd1 = HKApi.getOsdByIP("51031140001320359101","51.95.99.112", HKUserName, HKPassword); +// log.info("娴峰悍鍏ㄦ櫙:{}",osd1); +// //缁嗚妭 +// OSDResult osd2 = HKApi.getOsdByIP("51031140001321359101","51.95.99.112", HKUserName, HKPassword); +// log.info("娴峰悍缁嗚妭:{}",osd2); +// //澶у崕璁惧娴嬭瘯 +// OSDResult osd3 = DHApi.getOsd("51030244001320120201","51.95.4.3", DHUserName, DHPassword); +// log.info("澶у崕鍏ㄦ櫙:{}",osd3); +// OSDResult osd4 = DHApi.getOsd("51030244001321120201","51.95.4.3", DHUserName, DHPassword); +// log.info("澶у崕缁嗚妭:{}",osd4); //鏌ヤ竴鏈轰竴妗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); + //杩囨护ip + monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList()); + List<Future<OSDResult>> futureList = new ArrayList<>(48); + List<OSDResult> osdResultList = new ArrayList<>(); + for (TMonitor monitor : monitors) { + OSDCheckThread thread = new OSDCheckThread(monitor,HKUserName,HKPassword,DHUserName,DHPassword,YSUserName,YSPassword); + Future<OSDResult> future = executorService.submit(thread); + futureList.add(future); + } + for (Future<OSDResult> future : futureList) { + osdResultList.add(future.get()); + } + executorService.shutdown(); - List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers); - 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)) return; - } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) { - //澶у崕鍝佺墝 - OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); - if (checkSuccess(osdResultList, monitor, osd)) return; - } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) { - //TODO锛氬畤瑙哸pi + //缁撴潫api鎵ц锛屽紑濮嬫牎楠� + List<OsdCheckResult> checkResults = new ArrayList<>(); + Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + for (OSDResult osdResult : osdResultList) { + if(osdResult!=null) { + TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); + //灏佽OsdCheckResult + OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); + checkCorrect(osdResult, monitor, osdCheckResult); + checkResults.add(osdCheckResult); } - //鏈煡鍝佺墝鎴栬�卆pi璋冪敤澶辫触锛屾尐涓墽琛屾墍鏈塧pi - OSDResult osd = tryAllApi(monitor, hkList, dhList, ysList); - if (osd != null) { - synchronized (osdResultList) { - osdResultList.add(osd); - } - } - }); + } + 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); + pointService.setDeviceTagByGB(checkResults,CheckConstants.Rule_Category_Video); + //瀛樻斁鍦╩ongo涓� + mongoTemplate.insertAll(checkResults); + // 宸ュ崟鐢熸垚 + uyErrorTypeCheckService.osdCheck(checkResults); + } } - executorService.shutdown(); - //缁撴潫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); - checkResults.add(osdCheckResult); - } - //缁撴灉瀛樺叆mongo - if(CollectionUtils.isEmpty(checkResults)){ - //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 - 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); - } - //淇敼鏁版嵁搴撳搧鐗� - if(!CollectionUtils.isEmpty(hkList)){ - monitorMapper.batchUpdateDeviceType(hkList,DeviceType.HK.getType()); - } - if(!CollectionUtils.isEmpty(dhList)){ - monitorMapper.batchUpdateDeviceType(dhList,DeviceType.DH.getType()); - } - //TODO:瀹囪 log.info("缁撴潫鑾峰彇OSD"); } private OsdCheckResult getOsdCheckResult(OSDResult osdResult, TMonitor monitor) { OsdCheckResult osdCheckResult = new OsdCheckResult(); osdCheckResult.setDeviceNo(osdResult.getSerialNumber()); + osdCheckResult.setNo(osdResult.getSerialNumber()); osdCheckResult.setIp(monitor.getIp()); osdCheckResult.setDeviceType(monitor.getCameraFunType()); osdCheckResult.setCheckTime(osdResult.getCheckTime()); @@ -152,6 +151,7 @@ osdCheckResult.setOsdPart(osdResult.getOSD3()); osdCheckResult.setOsdLB(osdResult.getOSD4()); osdCheckResult.setOsdName(osdResult.getName()); + osdCheckResult.setDeviceBrand(osdResult.getDeviceBrand()); return osdCheckResult; } @@ -161,19 +161,24 @@ long checkTime = osdResult.getCheckTime().getTime(); long osdTime = osdResult.getOsdTime().getTime(); long timeDiff = (checkTime - osdTime) / 1000; - if (timeDiff <=60) { + if (timeDiff <= 60) { osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct); } else { osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Error); } + }else { + osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Unknown); } //妫�鏌ラ�氶亾鍚嶆槸鍚︽纭� if (!StringUtils.isEmpty(osdResult.getName()) && !StringUtils.isEmpty(monitor.getName())) { if (monitor.getName().equals(osdResult.getName())) { osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct); + osdCheckResult.setOsdName(osdResult.getName()); } else { osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error); } + }else { + osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Unknown); } //妫�鏌ョ渷鏄惁姝g‘ if (!StringUtils.isEmpty(osdResult.getOSD1())) { @@ -182,6 +187,8 @@ } else { osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Error); } + }else { + osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Unknown); } //妫�鏌ュ競鏄惁姝g‘ if (!StringUtils.isEmpty(osdResult.getOSD2())) { @@ -190,50 +197,21 @@ } else { osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Error); } + }else { + osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Unknown); } //妫�鏌ュ尯鍘挎槸鍚︽纭� if (!StringUtils.isEmpty(osdResult.getOSD3())) { AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(monitor.getSerialNumber().substring(0, 6)); - if (areaDeptEnum != null && osdResult.getOSD3().equals(areaDeptEnum.getName())) { + if (areaDeptEnum != null && osdResult.getOSD3().equals(areaDeptEnum.getOsdName())) { osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Correct); } else { osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Error); } + }else { + osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Unknown); } } - 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, List<String> hkList, List<String> dhList, List<String> ysList) { - //灏濊瘯娴峰悍鐨刟pi - OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword); - if (hkosd != null) { - hkosd.setSerialNumber(monitor.getSerialNumber()); - synchronized (hkList) { - hkList.add(monitor.getSerialNumber()); - } - return hkosd; - } - //灏濊瘯澶у崕鐨刟pi - OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword); - if (dhosd != null) { - dhosd.setSerialNumber(monitor.getSerialNumber()); - synchronized (dhList) { - dhList.add(monitor.getSerialNumber()); - } - return dhosd; - } - //TODO锛氬畤瑙哸pi - return null; - } } -- Gitblit v1.8.0