From d5c2dc44df6e6442b3bb5033cd9ca116777aecbc Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 09 九月 2024 17:47:08 +0800 Subject: [PATCH] 考核指标代码调整 --- ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java | 44 - ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java | 54 - ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java | 76 -- ycl-server/src/main/java/com/ycl/task/CarTask.java | 14 ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java | 32 - ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java | 193 ++++++++ ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java | 35 - ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java | 44 - ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java | 49 - ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java | 1 ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java | 63 -- ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java | 36 - ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java | 54 - ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java | 2 ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java | 42 - ycl-server/src/main/resources/application-dev.yml | 6 ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java | 35 - ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java | 6 ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java | 54 - ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java | 55 - ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java | 56 - ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java | 45 - ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java | 65 -- ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java | 37 - ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java | 243 +--------- 25 files changed, 411 insertions(+), 930 deletions(-) diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java index 4e13bc9..a11d4ff 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java @@ -8,6 +8,8 @@ import java.time.LocalDate; import java.util.Date; + +//deptId涓嶅仛璁板綍锛屽鏋滄洿鎹㈠尯鍩燂紝鍥芥爣鐮佸墠8浣嶄細鏀癸紝绛変簬涓�涓柊璁惧涓嶄細褰卞搷鍘嗗彶鏁版嵁 @Data public class BaseResult { @Id diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java index 47892d1..b7489eb 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java @@ -39,7 +39,7 @@ */ @Component @Slf4j -public class CarClockAccuracyCalculation extends IndexCalculationServe implements CalculationStrategy<VehicleDeviceInspectionResult> { +public class CarClockAccuracyCalculation extends IndexCalculationServe<VehicleDeviceInspectionResult, CarClockAccuracyCalculation.AreaStats> implements CalculationStrategy<VehicleDeviceInspectionResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; @Autowired @@ -48,38 +48,16 @@ private ICheckIndexCarService checkIndexCarService; //鍖哄煙杞﹁締鏃堕挓鍑嗙‘鎬х殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int accuracySites = 0; } @Override public void calculate(List<VehicleDeviceInspectionResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(VehicleDeviceInspectionResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (VehicleDeviceInspectionResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); @@ -99,7 +77,8 @@ /** * 绱鏃堕挓鍚堟牸璁惧 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VehicleDeviceInspectionResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VehicleDeviceInspectionResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java index a5f0897..3fea7ec 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java @@ -4,6 +4,8 @@ import com.ycl.platform.domain.entity.CheckIndexCar; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.result.HK.DataIntegrityMonitoringResult; +import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult; +import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexCarMapper; import com.ycl.platform.mapper.TMonitorMapper; @@ -34,7 +36,7 @@ */ @Component @Slf4j -public class CarConsistentCalculation extends IndexCalculationServe implements CalculationStrategy<TMonitorVO> { +public class CarConsistentCalculation extends IndexCalculationServe<MonitorQualifyResult, CarConsistentCalculation.AreaStats> implements CalculationStrategy<MonitorQualifyResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; @Autowired @@ -44,48 +46,17 @@ @Autowired private RedisTemplate redisTemplate; - //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� - private static class AreaStats { + //鍖哄煙杞﹁締鐩綍涓�鑷寸巼鐨勫唴閮ㄧ被 + protected static class AreaStats { int totalSites = 0; int newSites = 0; } @Override - public void calculate(List<TMonitorVO> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = new HashMap<>(); - if(!CollectionUtils.isEmpty(list)){ - monitorMap = list.stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - } - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //鏈敞鍐岃溅杈嗚澶� - Map<String,TMonitor> newMonitorMap = new HashMap<>(); - //Mongo涓�鏈轰竴妗e悓姝ysql鏃舵斁鍏edis 绛涢�夊嚭杞﹁締妗f - String json = (String) redisTemplate.opsForValue().get(RedisConstant.New_Monitor_Set); - if (!StringUtils.isEmpty(json)) { - List<TMonitor> newMonitors = JSONArray.parseArray(json, TMonitor.class); - if(!CollectionUtils.isEmpty(newMonitors)){ - newMonitorMap = newMonitors.stream().filter(tMonitor -> tMonitor.getCameraFunType().contains(CheckConstants.Rule_Category_Car+"")).collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); - } - } - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (TMonitorVO result : list) { - TMonitorVO monitor = monitorMap.get(result.getSerialNumber()); - if (monitor == null) continue; - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result,newMonitorMap); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result,newMonitorMap); - } - } + public void calculate(List<MonitorQualifyResult> list) { + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); @@ -98,18 +69,19 @@ } } }); - checkIndexCarService.saveOrUpdateBatch(checkIndexCars); } + /** * 绱杞﹁締鐩綍涓�鑷寸巼 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result,Map<String,TMonitor> newMonitorMap) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitorQualifyResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; - if(newMonitorMap.containsKey(result.getSerialNumber())){ + if(result.getNewDevice()!=null && result.getNewDevice()){ stats.newSites++; } } diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java index bd35aec..8c510a8 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java @@ -29,7 +29,7 @@ */ @Component @Slf4j -public class CarDataIntegrityCalculation extends IndexCalculationServe implements CalculationStrategy<DataIntegrityMonitoringResult> { +public class CarDataIntegrityCalculation extends IndexCalculationServe<DataIntegrityMonitoringResult, CarDataIntegrityCalculation.AreaStats> implements CalculationStrategy<DataIntegrityMonitoringResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; @Autowired @@ -38,7 +38,7 @@ private ICheckIndexCarService checkIndexCarService; //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int importantTotalSites = 0; int integritySites = 0; @@ -47,30 +47,9 @@ @Override public void calculate(List<DataIntegrityMonitoringResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(DataIntegrityMonitoringResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //鑾峰彇閲嶇偣鐐逛綅闆嗗悎 - List<String> importantIds = getImportant(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (DataIntegrityMonitoringResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result, importantIds); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result, importantIds); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); @@ -90,7 +69,8 @@ /** * 绱鎶撴媿鏁版嵁瀹屾暣璁惧鏁板拰璁惧鎬绘暟锛屽尯鍒嗛噸鐐圭偣浣� */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, DataIntegrityMonitoringResult result, List<String> importantIds) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, DataIntegrityMonitoringResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; @@ -99,7 +79,7 @@ stats.integritySites++; } //閲嶇偣鐐逛綅涓哄叚椤瑰睘鎬у畬鏁� - if (importantIds.contains(result.getExternalIndexCode())) { + if (result.getImportantTag()!=null && result.getImportantTag()) { stats.importantTotalSites++; if (result.getNoIntegrityPercent() <= 0.1) { stats.importantIntegritySites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java index f4b1ed6..32c1e2f 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java @@ -30,7 +30,7 @@ */ @Component @Slf4j -public class CarDeviceSampleCalculation extends IndexCalculationServe implements CalculationStrategy<VehicleDeviceSamplingResult> { +public class CarDeviceSampleCalculation extends IndexCalculationServe<VehicleDeviceSamplingResult, CarDeviceSampleCalculation.AreaStats> implements CalculationStrategy<VehicleDeviceSamplingResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; @Autowired @@ -39,7 +39,7 @@ private ICheckIndexCarService checkIndexCarService; //鍖哄煙杞﹁締鎶芥鎸囨爣 - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int importantTotalSites = 0; //灞炴�ц瘑鍒噯纭殑鐐逛綅鏁� @@ -54,30 +54,9 @@ @Override public void calculate(List<VehicleDeviceSamplingResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(VehicleDeviceSamplingResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //鑾峰彇閲嶇偣鐐逛綅闆嗗悎 - List<String> importantIds = getImportant(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (VehicleDeviceSamplingResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result, importantIds); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result, importantIds); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, CarDeviceSampleCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); @@ -97,7 +76,8 @@ /** * 绱鎶撴媿鏁版嵁鍑嗙‘璁惧鏁板拰璁惧鎬绘暟锛屽尯鍒嗛噸鐐圭偣浣� */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VehicleDeviceSamplingResult result, List<String> importantIds) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VehicleDeviceSamplingResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); VehicleDeviceSamplingResult.VehicleDifference vehDiff = result.getVehDiff(); @@ -108,7 +88,7 @@ stats.accuracySites++; } //閲嶇偣鐐逛綅涓哄叚椤瑰睘鎬� - if (importantIds.contains(result.getExternalIndexCode())) { + if (result.getImportantTag() != null && result.getImportantTag()) { stats.importantTotalSites++; if (vehDiff.getImportantConPercent() >= 0.9) { stats.importantAccuracySites++; @@ -138,7 +118,7 @@ if (checkIndexCar == null) { return null; } - log.info("key:{},杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬э細totalSites锛歿}锛宨mportantTotalSites:{}锛宎ccuracySites:{}锛宨mportantAccuracySites:{}",key,stats.totalSites,stats.importantTotalSites,stats.accuracySites,stats.importantAccuracySites); + log.info("key:{},杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬э細totalSites锛歿}锛宨mportantTotalSites:{}锛宎ccuracySites:{}锛宨mportantAccuracySites:{}", key, stats.totalSites, stats.importantTotalSites, stats.accuracySites, stats.importantAccuracySites); //璋冪敤杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬ц绠楁柟娉� Map<String, Object> accuracyParam = new HashMap<>(); accuracyParam.put("totalSites", stats.totalSites); @@ -147,14 +127,14 @@ accuracyParam.put("importantAccuracySites", stats.importantAccuracySites); BigDecimal dataAccuracy = dataAccuracy(accuracyParam); checkIndexCar.setVehicleCaptureAccuracy(dataAccuracy); - log.info("url鍙敤鎬�: totalSites:{},urlQualifySites:{}",stats.totalSites,stats.urlUsabilitySites); + log.info("url鍙敤鎬�: totalSites:{},urlQualifySites:{}", stats.totalSites, stats.urlUsabilitySites); //璋冪敤url鍙敤鎬ц绠楁柟娉� Map<String, Object> urlParam = new HashMap<>(); urlParam.put("totalSites", stats.totalSites); urlParam.put("urlQualifySites", stats.urlUsabilitySites); BigDecimal urlUsability = urlUsability(urlParam); checkIndexCar.setVehicleUrlAvailability(urlUsability); - log.info("澶у浘鍙敤鎬�: totalSites:{},picUsabilitySites:{}",stats.totalSites,stats.picUsabilitySites); + log.info("澶у浘鍙敤鎬�: totalSites:{},picUsabilitySites:{}", stats.totalSites, stats.picUsabilitySites); //璋冪敤澶у浘鍙敤鎬ц绠楁柟娉� Map<String, Object> usabilityParam = new HashMap<>(); usabilityParam.put("totalSites", stats.totalSites); diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java index 847de71..0e6d1c5 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java @@ -36,7 +36,7 @@ */ @Component @Slf4j -public class CarInFoAccuracyCalculation extends IndexCalculationServe implements CalculationStrategy<CrossDetailResult> { +public class CarInFoAccuracyCalculation extends IndexCalculationServe<CrossDetailResult, CarInFoAccuracyCalculation.AreaStats> implements CalculationStrategy<CrossDetailResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; @Autowired @@ -45,38 +45,16 @@ private ICheckIndexCarService checkIndexCarService; //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int qualifySite = 0; } @Override public void calculate(List<CrossDetailResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(CrossDetailResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - - for (CrossDetailResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, CarInFoAccuracyCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); @@ -97,7 +75,8 @@ /** * 绱鎬荤偣浣嶆暟銆佹爣娉ㄥ紓甯哥偣浣嶆暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, CrossDetailResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, CrossDetailResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java index fbf7d2a..97e4f78 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java @@ -2,31 +2,26 @@ import com.ycl.platform.domain.entity.CheckIndexCar; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexCarMapper; -import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexCarService; import com.ycl.system.entity.SysDictData; -import com.ycl.system.mapper.SysConfigMapper; -import com.ycl.system.mapper.SysDeptMapper; import com.ycl.system.mapper.SysDictDataMapper; -import com.ycl.system.mapper.SysDictTypeMapper; import com.ycl.utils.DateUtils; -import constant.*; +import constant.ApiConstants; +import constant.CheckConstants; +import constant.CheckThreadConstants; +import constant.RedisConstant; import enumeration.general.AreaDeptEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻杞﹁締鐐逛綅鍦ㄧ嚎鐜囥�佽鍥惧簱瀵规帴绋冲畾鎬� @@ -37,13 +32,9 @@ */ @Component @Slf4j -public class CarSnapshopDataCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { +public class CarSnapshopDataCalculation extends IndexCalculationServe<SnapshotDataMonitorResult, CarSnapshopDataCalculation.AreaStats> implements CalculationStrategy<SnapshotDataMonitorResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; - @Autowired - private SysConfigMapper sysConfigMapper; - @Autowired - private TMonitorMapper monitorMapper; @Autowired private ICheckIndexCarService checkIndexCarService; @Autowired @@ -51,7 +42,7 @@ @Autowired private SysDictDataMapper dictDataMapper; //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被 - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int onlineSites = 0; int totalDataSum = 0; @@ -59,18 +50,10 @@ @Override public void calculate(List<SnapshotDataMonitorResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, CarSnapshopDataCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); // 鑾峰彇褰撳墠鏃ユ湡 LocalDate today = LocalDate.now(); // 鑾峰彇鏈湀鐨勭涓�澶� @@ -80,23 +63,6 @@ // 濡傛灉鏄紝鍒欐竻闄edis涓褰曚腑鏂鏁扮殑鏁版嵁 redisTemplate.delete(RedisConstant.Check_Car_ViewConnect); } - for (SnapshotDataMonitorResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } - -// //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊� 鐪佸巺銆佸競灞� -// BigDecimal cityCountAvg = getAverageCount(CheckSnapCountConstants.Car_City); -// BigDecimal countyCountAvg = getAverageCount(CheckSnapCountConstants.Car_County); //浠庡瓧鍏歌幏鍙栧悓鏈熸姄鎷嶉噺 List<SysDictData> carSnap = dictDataMapper.selectDictDataByType(CheckConstants.DICT_CAR_SNAP); // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� @@ -117,7 +83,8 @@ /** * 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java index 0a9c2f1..dd9a4d9 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java @@ -1,31 +1,20 @@ package com.ycl.calculate; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ycl.platform.domain.entity.CheckIndexCar; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexCarMapper; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexCarService; -import com.ycl.platform.service.ITMonitorService; -import com.ycl.system.mapper.SysConfigMapper; -import constant.ApiConstants; -import constant.CheckConstants; -import constant.CheckSnapCountConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; -import java.math.RoundingMode; -import java.time.LocalDate; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 璁$畻杞﹁締澶囨姄鎷嶆暟鎹笂浼犲強鏃舵�� @@ -36,16 +25,14 @@ */ @Component @Slf4j -public class CarSnapshotDelayCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDelayMonitorResult> { +public class CarSnapshotDelayCalculation extends IndexCalculationServe<SnapshotDelayMonitorResult, CarSnapshotDelayCalculation.AreaStats> implements CalculationStrategy<SnapshotDelayMonitorResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; - @Autowired - private TMonitorMapper monitorMapper; @Autowired private ICheckIndexCarService checkIndexCarService; //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被 - private static class AreaStats { + protected static class AreaStats { int totalCount = 0; int delayCount = 0; //0-180s @@ -58,31 +45,9 @@ @Override public void calculate(List<SnapshotDelayMonitorResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(SnapshotDelayMonitorResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (SnapshotDelayMonitorResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, CarSnapshotDelayCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); @@ -102,7 +67,8 @@ /** * 绱鎬绘暟鎹噺銆佸欢杩熸暟鎹噺 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalCount += result.getDataCount(); diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java index 061acb5..e6c5cc5 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java @@ -35,47 +35,23 @@ */ @Component @Slf4j -public class FaceClockAccuracyCalculation extends IndexCalculationServe implements CalculationStrategy<FaceDeviceInspectionResult> { +public class FaceClockAccuracyCalculation extends IndexCalculationServe<FaceDeviceInspectionResult, FaceClockAccuracyCalculation.AreaStats> implements CalculationStrategy<FaceDeviceInspectionResult> { @Autowired private CheckIndexFaceMapper CheckIndexFaceMapper; - @Autowired - private TMonitorMapper monitorMapper; @Autowired private ICheckIndexFaceService checkIndexFaceService; //鍖哄煙杞﹁締鏃堕挓鍑嗙‘鎬х殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int accuracySites = 0; } @Override public void calculate(List<FaceDeviceInspectionResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(FaceDeviceInspectionResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (FaceDeviceInspectionResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, FaceClockAccuracyCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexFace> checkIndexFaceList = CheckIndexFaceMapper.selectToday(DateUtils.getDate()); @@ -95,7 +71,8 @@ /** * 绱鏃堕挓鍚堟牸璁惧 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, FaceDeviceInspectionResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, FaceDeviceInspectionResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java index 88e4b7e..c24203c 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java @@ -1,30 +1,19 @@ package com.ycl.calculate; -import com.alibaba.fastjson2.JSONArray; import com.ycl.platform.domain.entity.CheckIndexFace; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.vo.TMonitorVO; +import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.mapper.CheckIndexFaceMapper; -import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexFaceService; -import constant.ApiConstants; -import constant.CheckConstants; -import constant.RedisConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; -import utils.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻浜鸿劯鐩綍涓�鑷寸巼 @@ -33,58 +22,23 @@ */ @Component @Slf4j -public class FaceConsistentCalculation extends IndexCalculationServe implements CalculationStrategy<TMonitorVO> { +public class FaceConsistentCalculation extends IndexCalculationServe<MonitorQualifyResult, FaceConsistentCalculation.AreaStats> implements CalculationStrategy<MonitorQualifyResult> { @Autowired private CheckIndexFaceMapper checkIndexFaceMapper; @Autowired - private TMonitorMapper monitorMapper; - @Autowired private ICheckIndexFaceService checkIndexFaceService; - @Autowired - private RedisTemplate redisTemplate; //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int newSites = 0; } @Override - public void calculate(List<TMonitorVO> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = new HashMap<>(); - if(!CollectionUtils.isEmpty(list)){ - monitorMap = list.stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - } - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //鏈敞鍐屼汉鑴歌澶� - Map<String,TMonitor> newMonitorMap = new HashMap<>(); - //Mongo涓�鏈轰竴妗e悓姝ysql鏃舵斁鍏edis 绛涢�夊嚭杞﹁締妗f - String json = (String) redisTemplate.opsForValue().get(RedisConstant.New_Monitor_Set); - if (!StringUtils.isEmpty(json)) { - List<TMonitor> newMonitors = JSONArray.parseArray(json, TMonitor.class); - if(!CollectionUtils.isEmpty(newMonitors)){ - newMonitorMap = newMonitors.stream().filter(tMonitor -> tMonitor.getCameraFunType().contains(CheckConstants.Rule_Category_Face+"")).collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); - } - } - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (TMonitorVO result : list) { - TMonitorVO monitor = monitorMap.get(result.getSerialNumber()); - if (monitor == null) continue; - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result,newMonitorMap); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result,newMonitorMap); - } - } + public void calculate(List<MonitorQualifyResult> list) { + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, FaceConsistentCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate()); @@ -104,11 +58,12 @@ /** * 绱浜鸿劯鐩綍涓�鑷寸巼 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result,Map<String,TMonitor> newMonitorMap) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitorQualifyResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; - if(newMonitorMap.containsKey(result.getSerialNumber())){ + if(result.getNewDevice()!=null && result.getNewDevice()){ stats.newSites++; } } diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java index d598f12..3019c8c 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java @@ -29,7 +29,7 @@ */ @Component @Slf4j -public class FaceDeviceSampleCalculation extends IndexCalculationServe implements CalculationStrategy<FaceDeviceSamplingResult> { +public class FaceDeviceSampleCalculation extends IndexCalculationServe<FaceDeviceSamplingResult, FaceDeviceSampleCalculation.AreaStats> implements CalculationStrategy<FaceDeviceSamplingResult> { @Autowired private CheckIndexFaceMapper checkIndexFaceMapper; @Autowired @@ -38,7 +38,7 @@ private ICheckIndexFaceService checkIndexFaceService; //鍖哄煙杞﹁締鎶芥鎸囨爣 - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; //鍥剧墖鍚堟牸鐨勭偣浣嶆暟 int picQualifySites = 0; @@ -48,28 +48,9 @@ @Override public void calculate(List<FaceDeviceSamplingResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(FaceDeviceSamplingResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (FaceDeviceSamplingResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, FaceDeviceSampleCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate()); @@ -89,7 +70,8 @@ /** * 绱鎶撴媿鏁版嵁鍑嗙‘璁惧鏁板拰璁惧鎬绘暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, FaceDeviceSamplingResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, FaceDeviceSamplingResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); FaceDeviceSamplingResult.BigUsefulness bigUseful = result.getBigUseful(); diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java index fa01638..fa1db09 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java @@ -1,29 +1,20 @@ package com.ycl.calculate; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.ycl.platform.domain.entity.CheckIndexCar; import com.ycl.platform.domain.entity.CheckIndexFace; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.result.HK.FaceDeviceSamplingResult; import com.ycl.platform.domain.result.HK.MonitoringDetailResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexFaceMapper; -import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexFaceService; -import com.ycl.platform.service.ITMonitorService; -import com.ycl.system.mapper.SysConfigMapper; import constant.ApiConstants; -import constant.CheckConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 浜鸿劯鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� 璁惧缂栫爜銆佽鏀垮尯鍒掍唬鐮併�佸畨瑁呬綅缃�佸潗鏍囩粡绾害淇℃伅瀹屾暣鍑嗙‘ @@ -33,47 +24,23 @@ */ @Component @Slf4j -public class FaceInFoAccuracyCalculation extends IndexCalculationServe implements CalculationStrategy<MonitoringDetailResult> { +public class FaceInFoAccuracyCalculation extends IndexCalculationServe<MonitoringDetailResult, FaceInFoAccuracyCalculation.AreaStats> implements CalculationStrategy<MonitoringDetailResult> { @Autowired private CheckIndexFaceMapper checkIndexFaceMapper; @Autowired private ICheckIndexFaceService checkIndexFaceService; - @Autowired - private TMonitorMapper monitorMapper; //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int qualifySite = 0; } @Override public void calculate(List<MonitoringDetailResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(MonitoringDetailResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - - for (MonitoringDetailResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, FaceInFoAccuracyCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate()); @@ -94,7 +61,8 @@ /** * 绱鎬荤偣浣嶆暟銆佹爣娉ㄥ紓甯哥偣浣嶆暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitoringDetailResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitoringDetailResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java index 33c8702..2640919 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java @@ -39,7 +39,7 @@ */ @Component @Slf4j -public class FaceSnapshotDataCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { +public class FaceSnapshotDataCalculation extends IndexCalculationServe<SnapshotDataMonitorResult, FaceSnapshotDataCalculation.AreaStats> implements CalculationStrategy<SnapshotDataMonitorResult> { @Autowired private CheckIndexFaceMapper checkIndexFaceMapper; @Autowired @@ -53,7 +53,7 @@ @Autowired private SysDictDataMapper dictDataMapper; //鍖哄煙浜鸿劯鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被 - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int onlineSites = 0; int totalDataSum = 0; @@ -61,17 +61,10 @@ @Override public void calculate(List<SnapshotDataMonitorResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, FaceSnapshotDataCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; - Map<String, AreaStats> areaStatsMap = new HashMap<>(); // 鑾峰彇褰撳墠鏃ユ湡 LocalDate today = LocalDate.now(); // 鑾峰彇鏈湀鐨勭涓�澶� @@ -81,23 +74,6 @@ // 濡傛灉鏄紝鍒欐竻闄edis涓褰曚腑鏂鏁扮殑鏁版嵁 redisTemplate.delete(RedisConstant.Check_Face_ViewConnect); } - for (SnapshotDataMonitorResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } - -// //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊� 鐪佸巺銆佸競灞� -// BigDecimal cityCountAvg = getAverageCount(CheckSnapCountConstants.Face_City); -// BigDecimal countyCountAvg = getAverageCount(CheckSnapCountConstants.Face_County); //浠庡瓧鍏歌幏鍙栧悓鏈熸姄鎷嶉噺 List<SysDictData> faceSnap = dictDataMapper.selectDictDataByType(CheckConstants.DICT_FACE_SNAP); // 鏌ヨ浠婃棩鏁版嵁 @@ -116,7 +92,8 @@ } //绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺 - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; @@ -126,14 +103,6 @@ } } -// //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊� -// private BigDecimal getAverageCount(String configKey) { -// String count = sysConfigMapper.checkConfigKeyUnique(configKey).getConfigValue(); -// return new BigDecimal(count) -// .multiply(new BigDecimal(CheckSnapCountConstants.Multiply)) -// .divide(new BigDecimal(CheckSnapCountConstants.CountyNum), 10, RoundingMode.HALF_UP) -// .divide(new BigDecimal(LocalDate.now().getDayOfMonth()), 0, RoundingMode.HALF_UP); -// } //杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭�� private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList,List<SysDictData> faceSnap) { diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java index fb91789..cf1ba6e 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java @@ -2,16 +2,11 @@ import com.ycl.platform.domain.entity.CheckIndexFace; import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexFaceMapper; -import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexFaceService; -import constant.ApiConstants; -import constant.CheckConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; @@ -19,8 +14,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻浜鸿劯璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬� @@ -31,16 +24,14 @@ */ @Component @Slf4j -public class FaceSnapshotDelayCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDelayMonitorResult> { +public class FaceSnapshotDelayCalculation extends IndexCalculationServe<SnapshotDelayMonitorResult, FaceSnapshotDelayCalculation.AreaStats> implements CalculationStrategy<SnapshotDelayMonitorResult> { @Autowired private CheckIndexFaceMapper checkIndexFaceMapper; - @Autowired - private TMonitorMapper monitorMapper; @Autowired private ICheckIndexFaceService checkIndexFaceService; //鍖哄煙浜鸿劯鏁版嵁涓婁紶寤惰繜鎸囨爣鐨勫唴閮ㄧ被 - private static class AreaStats { + protected static class AreaStats { int totalCount = 0; int delayCount = 0; //0-180s @@ -53,31 +44,9 @@ @Override public void calculate(List<SnapshotDelayMonitorResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(SnapshotDelayMonitorResult::getExternalIndexCode).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (SnapshotDelayMonitorResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, FaceSnapshotDelayCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate()); @@ -97,7 +66,8 @@ /** * 绱鎬绘暟鎹噺銆佸欢杩熸暟鎹噺 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalCount += result.getDataCount(); diff --git a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java index 4d89129..402ce11 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java +++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java @@ -1,249 +1,54 @@ package com.ycl.calculate; -import com.ycl.platform.base.CheckIndex; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.entity.YwPoint; -import com.ycl.platform.domain.result.UY.MonitorQualifyResult; +import com.ycl.platform.domain.result.BaseResult; import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.TMonitorMapper; -import com.ycl.platform.mapper.YwPointMapper; -import com.ycl.utils.DateUtils; import constant.ApiConstants; -import constant.CheckConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -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.math.BigDecimal; -import java.math.RoundingMode; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** - * 璁$畻鍏紡 + * 鎶藉嚭鍚勫尯鍩熺粺璁℃暟閲忔柟娉� */ @Component @Slf4j -public class IndexCalculationServe { - @Autowired - private YwPointMapper pointMapper; - +public abstract class IndexCalculationServe <T extends BaseResult, S> extends IndexCalculationUtils { @Autowired private TMonitorMapper monitorMapper; - @Autowired - private MongoTemplate mongoTemplate; + //鎶借薄鏂规硶锛岀敱瀛愮被缂栧啓鍏蜂綋閫昏緫绠楁硶 + protected abstract void updateAreaStats(Map<String, S> areaStatsMap, String key, T result); - //涓�鏈轰竴妗e悎鏍肩巼 - public BigDecimal monitorQualify(Map<String, Object> param) { - BigDecimal totalMonitors = new BigDecimal((Integer) param.get("totalMonitors")); - BigDecimal qualifyMonitor = new BigDecimal((Integer) param.get("qualifyMonitor")); - return BigDecimal.ZERO.compareTo(totalMonitors) == 0 ? BigDecimal.ZERO : qualifyMonitor.divide(totalMonitors, 4, RoundingMode.HALF_UP); - } - - //涓�鏈轰竴妗f敞鍐岀巼鐜� - public BigDecimal monitorRegistration(Map<String, Object> param) { - //鏂�+姝e湪鐢ㄧ殑妗f鏁� - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - //姝e湪鐢ㄧ殑妗f鏁� - BigDecimal useSites = new BigDecimal((Integer) param.get("totalSites") - (Integer) param.get("newSites")); - return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : useSites.divide(totalSites, 4, RoundingMode.HALF_UP); - } - - //妗f鑰冩牳姣� - public BigDecimal archivesRate(Map<String, Object> param) { - BigDecimal allFiles = new BigDecimal((Integer) param.get("allFiles")); - BigDecimal todayFiles = new BigDecimal((Integer) param.get("todayFiles")); - return BigDecimal.ZERO.compareTo(todayFiles) == 0 ? BigDecimal.ZERO : todayFiles.divide(allFiles, 4, RoundingMode.HALF_UP); - } - - //鐐逛綅鍦ㄧ嚎鐜� - public BigDecimal siteOnline(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal onlineSites = new BigDecimal((Integer) param.get("onlineSites")); - return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : onlineSites.divide(totalSites, 4, RoundingMode.HALF_UP); - } - - //瑙嗛Osd鍑嗙‘鐜� - public BigDecimal osdAccuracy(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal osdAccuracySites = new BigDecimal((Integer) param.get("osdAccuracySites")); - return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : osdAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); - } - - //瑙嗛鏃堕棿鍚堟牸鐜� - public BigDecimal osdTimeAccuracy(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal timeAccuracySites = new BigDecimal((Integer) param.get("timeAccuracySites")); - return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : timeAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); - } - - //鐩綍涓�鑷寸巼锛屾瘡瓒呰繃鐧惧垎涔�1鎵�10% - public BigDecimal directoryConstant(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal newSites = new BigDecimal((Integer) param.get("newSites")); - // 璁$畻newSites鍗爐otalSites鐨勭櫨鍒嗘瘮鍊嶆暟 - BigDecimal percentage = newSites.divide(totalSites, 2, RoundingMode.DOWN).multiply(BigDecimal.valueOf(100)); - BigDecimal result = BigDecimal.ONE; - //瓒呰繃鐧惧垎涔�1娌★紝瓒呰繃浜嗘墠鎵e垎 - if (BigDecimal.ONE.compareTo(percentage) <= 0) { - result = result.subtract(percentage.multiply(new BigDecimal("0.1"))); + protected Map<String, S> getAreaStatsMap(List<T> list){ + if (CollectionUtils.isEmpty(list)) { + log.info("鏁版嵁涓虹┖"); + return null; } - return result.max(BigDecimal.ZERO); - } + //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap + Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(BaseResult::getNo).collect(Collectors.toList())) + .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); + Map<String, S> areaStatsMap = new HashMap<>(); - //瑙嗗浘搴撳鎺ョǔ瀹氭�� - public BigDecimal viewConnectStability(Map<String, Object> param) { - BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum")); - BigDecimal avgCount = (BigDecimal) param.get("avgCount"); - log.info("瑙嗗浘搴撳鎺ョǔ瀹氭�э紝totalDataSum锛歿}锛宎vgCount锛歿}",totalDataSum,avgCount); - return BigDecimal.ZERO.compareTo(totalDataSum) == 0 ? BigDecimal.ZERO : avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP); - } + for (T result : list) { + //鑾峰彇璁惧鎵�灞為儴闂� + TMonitorVO monitor = monitorMap.get(result.getNo()); + if (monitor == null) continue; + String deptId = monitor.getDeptId().toString(); + updateAreaStats(areaStatsMap, deptId, result); - //鏍囨敞姝g‘鐜� - - public BigDecimal infoAccuracy(Map<String, Object> param) { - BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal qualifySiteCount = new BigDecimal((Integer) param.get("qualifySite")); - return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : qualifySiteCount.divide(totalSitesCount, 4, RoundingMode.HALF_UP); - } - - //鏁版嵁涓婁紶鍙婃椂鎬� - public BigDecimal snapshopDelay(Map<String, Object> param) { - BigDecimal totalCount = new BigDecimal((Integer) param.get("totalCount")); - BigDecimal delayCount = new BigDecimal((Integer) param.get("delayCount")); - BigDecimal delayCount1 = new BigDecimal((Integer) param.get("delayCount1")); - BigDecimal delayCount2 = new BigDecimal((Integer) param.get("delayCount2")); - BigDecimal delayCount3 = new BigDecimal((Integer) param.get("delayCount3")); - BigDecimal result = BigDecimal.ZERO.compareTo(totalCount) == 0 ? BigDecimal.ZERO : - totalCount.subtract(delayCount).divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE) - .add(delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE)) - .add(delayCount2.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.8"))) - .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6"))); - return result.setScale(4, RoundingMode.HALF_UP); - } - - //杞﹁締鏁版嵁瀹屾暣鎬� - public BigDecimal dataIntegrity(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal importantTotalSites = new BigDecimal((Integer) param.get("importantTotalSites")); - BigDecimal integritySites = new BigDecimal((Integer) param.get("integritySites")); - BigDecimal importantIntegritySites = new BigDecimal((Integer) param.get("importantIntegritySites")); - BigDecimal total = BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : integritySites.divide(totalSites, 10, RoundingMode.HALF_UP); - BigDecimal important = BigDecimal.ZERO.compareTo(importantTotalSites) == 0 ? BigDecimal.ZERO : importantIntegritySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP); - return total.multiply(important).setScale(4, RoundingMode.HALF_UP); - } - - //杞﹁締鏁版嵁瀹屾暣鎬� - public BigDecimal dataAccuracy(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal importantTotalSites = new BigDecimal((Integer) param.get("importantTotalSites")); - BigDecimal accuracySites = new BigDecimal((Integer) param.get("accuracySites")); - BigDecimal importantAccuracySites = new BigDecimal((Integer) param.get("importantAccuracySites")); - BigDecimal total = BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : accuracySites.divide(totalSites, 10, RoundingMode.HALF_UP); - BigDecimal important = BigDecimal.ZERO.compareTo(importantTotalSites) == 0 ? BigDecimal.ZERO : importantAccuracySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP); - return total.multiply(important).setScale(4, RoundingMode.HALF_UP); - } - - //鏃堕挓鍑嗙‘鎬� - public BigDecimal clockAccuracy(Map<String, Object> param) { - BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal accuracySites = new BigDecimal((Integer) param.get("accuracySites")); - return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : accuracySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); - } - - //url鍙敤鎬� - public BigDecimal urlUsability(Map<String, Object> param) { - BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal urlQualifySites = new BigDecimal((Integer) param.get("urlQualifySites")); - return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : urlQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); - } - - //澶у浘鍙敤鎬� - public BigDecimal picUsability(Map<String, Object> param) { - BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal picUsabilitySites = new BigDecimal((Integer) param.get("picUsabilitySites")); - return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : picUsabilitySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); - } - - //鍥剧墖鍚堟牸鐜� - public BigDecimal dataQualify(Map<String, Object> param) { - BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal picQualifySites = new BigDecimal((Integer) param.get("picQualifySites")); - return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : picQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); - } - - //褰曞儚鍙敤鐜� - public BigDecimal videoUsability(Map<String, Object> param) { - BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal usabilitySites = new BigDecimal((Integer) param.get("usabilitySites")); - return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : usabilitySites.divide(totalSites, 4, RoundingMode.HALF_UP); - } - - //杩斿洖鐪佸巺鍥芥爣鐮侀泦鍚� - public List<String> getProvince() { - List<YwPoint> province = pointMapper.selectByTag(null, Boolean.TRUE, null, null); - return CollectionUtils.isEmpty(province) ? new ArrayList<>() : province.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); - } - - //杩斿洖閲嶇偣鐐逛綅闆嗗悎 - public List<String> getImportant() { - List<YwPoint> important = pointMapper.selectByTag(Boolean.TRUE, null, null, null); - return CollectionUtils.isEmpty(important) ? new ArrayList<>() : important.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); - } - - //杩斿洖閲嶇偣鎸囨尌鍥惧儚闆嗗悎 - public List<String> getCommandImage() { - List<YwPoint> commandImages = pointMapper.selectByTag(null, null, Boolean.TRUE, null); - return CollectionUtils.isEmpty(commandImages) ? new ArrayList<>() : commandImages.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); - } - - //杩斿洖閮ㄧ骇鐐逛綅闆嗗悎 - public List<String> getDeptTag() { - List<YwPoint> commandImages = pointMapper.selectByTag(null, null, null, Boolean.TRUE); - return CollectionUtils.isEmpty(commandImages) ? new ArrayList<>() : commandImages.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); - } - - //杩斿洖monitor - public List<String> getMonitorFromMongo() { - Date yesterday = DateUtils.addDays(new Date(), -1); - Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); - List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class); - - return CollectionUtils.isEmpty(oneMachineFileResults) ? new ArrayList<>() : oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList()); - } - - //妫�鏌ユ槸鍚﹀瓨鍦ㄥ綋鏃ユ暟鎹� - public <T extends CheckIndex> T getCheckIndex(String key, List<T> checkIndexList, Class<T> clazz) { - T checkIndex; - - // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 - Optional<T> existingIndex = checkIndexList.stream() - .filter(index -> key.startsWith(ApiConstants.Province) ? - CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && key.split("_")[1].equals(index.getDeptId().toString()) - : CheckConstants.Examine_Tag_County.equals(index.getExamineTag()) && key.equals(index.getDeptId().toString())) - .findFirst(); - - if (existingIndex.isPresent()) { - checkIndex = existingIndex.get(); - } else { - try { - checkIndex = clazz.getDeclaredConstructor().newInstance(); - checkIndex.setDeptId(key.startsWith(ApiConstants.Province) ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); - checkIndex.setExamineTag(key.startsWith(ApiConstants.Province) ? CheckConstants.Examine_Tag_Province : CheckConstants.Examine_Tag_County); - checkIndex.setCreateTime(new Date()); - } catch (Exception e) { - checkIndex = null; - log.error("鏃犳硶鍒涘缓 checkIndex 瀹炰緥", e); + // 澶勭悊鐪佸巺鏁版嵁 + if (result.getProvinceTag()!=null && result.getProvinceTag()) { + String provinceKey = ApiConstants.Province + deptId; + updateAreaStats(areaStatsMap, provinceKey, result); } } - return checkIndex; + return areaStatsMap; } - } diff --git a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java new file mode 100644 index 0000000..17b93fe --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java @@ -0,0 +1,193 @@ +package com.ycl.calculate; + +import com.ycl.platform.base.CheckIndex; +import constant.ApiConstants; +import constant.CheckConstants; +import lombok.extern.slf4j.Slf4j; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Optional; + + +@Slf4j +public class IndexCalculationUtils { + //妫�鏌ユ槸鍚﹀瓨鍦ㄥ綋鏃ユ暟鎹� + public <I extends CheckIndex> I getCheckIndex(String key, List<I> checkIndexList, Class<I> clazz) { + I checkIndex; + + // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 + Optional<I> existingIndex = checkIndexList.stream() + .filter(index -> key.startsWith(ApiConstants.Province) ? + CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && key.split("_")[1].equals(index.getDeptId().toString()) + : CheckConstants.Examine_Tag_County.equals(index.getExamineTag()) && key.equals(index.getDeptId().toString())) + .findFirst(); + + if (existingIndex.isPresent()) { + checkIndex = existingIndex.get(); + } else { + try { + checkIndex = clazz.getDeclaredConstructor().newInstance(); + checkIndex.setDeptId(key.startsWith(ApiConstants.Province) ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); + checkIndex.setExamineTag(key.startsWith(ApiConstants.Province) ? CheckConstants.Examine_Tag_Province : CheckConstants.Examine_Tag_County); + checkIndex.setCreateTime(new Date()); + } catch (Exception e) { + checkIndex = null; + log.error("鏃犳硶鍒涘缓 checkIndex 瀹炰緥", e); + } + } + return checkIndex; + } + + /** --------鎸囨爣绠楁硶---------*/ + + //涓�鏈轰竴妗e悎鏍肩巼 + public BigDecimal monitorQualify(Map<String, Object> param) { + BigDecimal totalMonitors = new BigDecimal((Integer) param.get("totalMonitors")); + BigDecimal qualifyMonitor = new BigDecimal((Integer) param.get("qualifyMonitor")); + return BigDecimal.ZERO.compareTo(totalMonitors) == 0 ? BigDecimal.ZERO : qualifyMonitor.divide(totalMonitors, 4, RoundingMode.HALF_UP); + } + + //涓�鏈轰竴妗f敞鍐岀巼鐜� + public BigDecimal monitorRegistration(Map<String, Object> param) { + //鏂�+姝e湪鐢ㄧ殑妗f鏁� + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + //姝e湪鐢ㄧ殑妗f鏁� + BigDecimal useSites = new BigDecimal((Integer) param.get("totalSites") - (Integer) param.get("newSites")); + return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : useSites.divide(totalSites, 4, RoundingMode.HALF_UP); + } + + //妗f鑰冩牳姣� + public BigDecimal archivesRate(Map<String, Object> param) { + BigDecimal allFiles = new BigDecimal((Integer) param.get("allFiles")); + BigDecimal todayFiles = new BigDecimal((Integer) param.get("todayFiles")); + return BigDecimal.ZERO.compareTo(todayFiles) == 0 ? BigDecimal.ZERO : todayFiles.divide(allFiles, 4, RoundingMode.HALF_UP); + } + + //鐐逛綅鍦ㄧ嚎鐜� + public BigDecimal siteOnline(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal onlineSites = new BigDecimal((Integer) param.get("onlineSites")); + return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : onlineSites.divide(totalSites, 4, RoundingMode.HALF_UP); + } + + //瑙嗛Osd鍑嗙‘鐜� + public BigDecimal osdAccuracy(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal osdAccuracySites = new BigDecimal((Integer) param.get("osdAccuracySites")); + return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : osdAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); + } + + //瑙嗛鏃堕棿鍚堟牸鐜� + public BigDecimal osdTimeAccuracy(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal timeAccuracySites = new BigDecimal((Integer) param.get("timeAccuracySites")); + return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : timeAccuracySites.divide(totalSites, 4, RoundingMode.HALF_UP); + } + + //鐩綍涓�鑷寸巼锛屾瘡瓒呰繃鐧惧垎涔�1鎵�10% + public BigDecimal directoryConstant(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal newSites = new BigDecimal((Integer) param.get("newSites")); + // 璁$畻newSites鍗爐otalSites鐨勭櫨鍒嗘瘮鍊嶆暟 + BigDecimal percentage = newSites.divide(totalSites, 2, RoundingMode.DOWN).multiply(BigDecimal.valueOf(100)); + BigDecimal result = BigDecimal.ONE; + //瓒呰繃鐧惧垎涔�1娌★紝瓒呰繃浜嗘墠鎵e垎 + if (BigDecimal.ONE.compareTo(percentage) <= 0) { + result = result.subtract(percentage.multiply(new BigDecimal("0.1"))); + } + return result.max(BigDecimal.ZERO); + } + + //瑙嗗浘搴撳鎺ョǔ瀹氭�� + public BigDecimal viewConnectStability(Map<String, Object> param) { + BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum")); + BigDecimal avgCount = (BigDecimal) param.get("avgCount"); + log.info("瑙嗗浘搴撳鎺ョǔ瀹氭�э紝totalDataSum锛歿}锛宎vgCount锛歿}",totalDataSum,avgCount); + return BigDecimal.ZERO.compareTo(totalDataSum) == 0 ? BigDecimal.ZERO : avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP); + } + + //鏍囨敞姝g‘鐜� + + public BigDecimal infoAccuracy(Map<String, Object> param) { + BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal qualifySiteCount = new BigDecimal((Integer) param.get("qualifySite")); + return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : qualifySiteCount.divide(totalSitesCount, 4, RoundingMode.HALF_UP); + } + + //鏁版嵁涓婁紶鍙婃椂鎬� + public BigDecimal snapshopDelay(Map<String, Object> param) { + BigDecimal totalCount = new BigDecimal((Integer) param.get("totalCount")); + BigDecimal delayCount = new BigDecimal((Integer) param.get("delayCount")); + BigDecimal delayCount1 = new BigDecimal((Integer) param.get("delayCount1")); + BigDecimal delayCount2 = new BigDecimal((Integer) param.get("delayCount2")); + BigDecimal delayCount3 = new BigDecimal((Integer) param.get("delayCount3")); + BigDecimal result = BigDecimal.ZERO.compareTo(totalCount) == 0 ? BigDecimal.ZERO : + totalCount.subtract(delayCount).divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE) + .add(delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE)) + .add(delayCount2.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.8"))) + .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6"))); + return result.setScale(4, RoundingMode.HALF_UP); + } + + //杞﹁締鏁版嵁瀹屾暣鎬� + public BigDecimal dataIntegrity(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal importantTotalSites = new BigDecimal((Integer) param.get("importantTotalSites")); + BigDecimal integritySites = new BigDecimal((Integer) param.get("integritySites")); + BigDecimal importantIntegritySites = new BigDecimal((Integer) param.get("importantIntegritySites")); + BigDecimal total = BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : integritySites.divide(totalSites, 10, RoundingMode.HALF_UP); + BigDecimal important = BigDecimal.ZERO.compareTo(importantTotalSites) == 0 ? BigDecimal.ZERO : importantIntegritySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP); + return total.multiply(important).setScale(4, RoundingMode.HALF_UP); + } + + //杞﹁締鏁版嵁瀹屾暣鎬� + public BigDecimal dataAccuracy(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal importantTotalSites = new BigDecimal((Integer) param.get("importantTotalSites")); + BigDecimal accuracySites = new BigDecimal((Integer) param.get("accuracySites")); + BigDecimal importantAccuracySites = new BigDecimal((Integer) param.get("importantAccuracySites")); + BigDecimal total = BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : accuracySites.divide(totalSites, 10, RoundingMode.HALF_UP); + BigDecimal important = BigDecimal.ZERO.compareTo(importantTotalSites) == 0 ? BigDecimal.ZERO : importantAccuracySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP); + return total.multiply(important).setScale(4, RoundingMode.HALF_UP); + } + + //鏃堕挓鍑嗙‘鎬� + public BigDecimal clockAccuracy(Map<String, Object> param) { + BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal accuracySites = new BigDecimal((Integer) param.get("accuracySites")); + return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : accuracySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); + } + + //url鍙敤鎬� + public BigDecimal urlUsability(Map<String, Object> param) { + BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal urlQualifySites = new BigDecimal((Integer) param.get("urlQualifySites")); + return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : urlQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); + } + + //澶у浘鍙敤鎬� + public BigDecimal picUsability(Map<String, Object> param) { + BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal picUsabilitySites = new BigDecimal((Integer) param.get("picUsabilitySites")); + return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : picUsabilitySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); + } + + //鍥剧墖鍚堟牸鐜� + public BigDecimal dataQualify(Map<String, Object> param) { + BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal picQualifySites = new BigDecimal((Integer) param.get("picQualifySites")); + return BigDecimal.ZERO.compareTo(totalSitesCount) == 0 ? BigDecimal.ZERO : picQualifySites.divide(totalSitesCount, 4, RoundingMode.HALF_UP); + } + + //褰曞儚鍙敤鐜� + public BigDecimal videoUsability(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal usabilitySites = new BigDecimal((Integer) param.get("usabilitySites")); + return BigDecimal.ZERO.compareTo(totalSites) == 0 ? BigDecimal.ZERO : usabilitySites.divide(totalSites, 4, RoundingMode.HALF_UP); + } + +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java index 062cb76..b832fb5 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java @@ -2,16 +2,11 @@ import com.ycl.platform.domain.entity.CheckIndexVideo; import com.ycl.platform.domain.result.UY.MonitorQualifyResult; -import com.ycl.platform.domain.result.UY.QueryVqdResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexVideoMapper; -import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexVideoService; -import constant.ApiConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; @@ -19,8 +14,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻涓�鏈轰竴妗e悎鏍肩巼 @@ -30,16 +23,14 @@ */ @Component @Slf4j -public class MonitorQualifyCalculation extends IndexCalculationServe implements CalculationStrategy<MonitorQualifyResult> { +public class MonitorQualifyCalculation extends IndexCalculationServe<MonitorQualifyResult, MonitorQualifyCalculation.AreaStats> implements CalculationStrategy<MonitorQualifyResult> { @Autowired private CheckIndexVideoMapper checkIndexVideoMapper; - @Autowired - private TMonitorMapper monitorMapper; @Autowired private ICheckIndexVideoService checkIndexVideoService; //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { //鎬绘。妗堟暟 int totalMonitors = 0; //鍚堟牸妗f鏁� @@ -48,31 +39,9 @@ @Override public void calculate(List<MonitorQualifyResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (MonitorQualifyResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getSerialNumber().getValue()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, MonitorQualifyCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate()); @@ -92,7 +61,8 @@ /** * 绱鎬绘。妗堟暟鍜屽悎鏍兼。妗堟暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitorQualifyResult result) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitorQualifyResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalMonitors++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java index b192569..77353f2 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java @@ -1,29 +1,21 @@ package com.ycl.calculate; -import com.alibaba.fastjson2.JSONArray; import com.ycl.platform.domain.entity.CheckIndexVideo; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.entity.YwPoint; -import com.ycl.platform.domain.result.UY.VideoOnlineResult; -import com.ycl.platform.domain.vo.TMonitorVO; +import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.mapper.CheckIndexVideoMapper; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexVideoService; -import constant.ApiConstants; import constant.CheckThreadConstants; -import constant.RedisConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; -import utils.StringUtils; import java.math.BigDecimal; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 璁$畻涓�鏈轰竴妗f敞鍐岀巼銆佹。妗堣�冩牳姣� @@ -32,16 +24,16 @@ */ @Component @Slf4j -public class MonitorRegistrationCalculation extends IndexCalculationServe implements CalculationStrategy<TMonitorVO> { +public class MonitorRegistrationCalculation extends IndexCalculationServe<MonitorQualifyResult, MonitorRegistrationCalculation.AreaStats> implements CalculationStrategy<MonitorQualifyResult> { @Autowired private CheckIndexVideoMapper checkIndexVideoMapper; @Autowired private ICheckIndexVideoService checkIndexVideoService; @Autowired - private RedisTemplate redisTemplate; + private TMonitorMapper monitorMapper; //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { //璧勪骇搴撶櫥璁板湪鐢ㄦ暟 int totalSites = 0; //鏈敞鍐岀殑鏁伴噺 @@ -51,46 +43,12 @@ //褰撴棩妗f鏁帮紙鍑屾櫒璁$畻鐨勶紝瀹為檯鍙栧緱鏄槰鏃ョ殑涓�鏈轰竴妗f暟閲忥級 int todayFiles = 0; } - + //TODO:鏀逛负MonitorQualifyResult锛岀畻娉曚紭鍖� @Override - public void calculate(List<TMonitorVO> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = new HashMap<>(); - if (!CollectionUtils.isEmpty(list)) { - monitorMap = list.stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - } - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //鏈敞鍐岃澶� - Map<String, TMonitor> newMonitorMap = new HashMap<>(); - //Mongo涓�鏈轰竴妗e悓姝ysql鏃舵斁鍏edis - String json = (String) redisTemplate.opsForValue().get(RedisConstant.New_Monitor_Set); - if (!StringUtils.isEmpty(json)) { - List<TMonitor> newMonitors = JSONArray.parseArray(json, TMonitor.class); - if (!CollectionUtils.isEmpty(newMonitors)) { - newMonitorMap = newMonitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); - } - } - - //鑾峰彇鏄ㄦ棩mongo涓�鏈轰竴妗f暟閲� - List<String> todayMonitor = getMonitorFromMongo(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (TMonitorVO result : list) { - TMonitorVO monitor = monitorMap.get(result.getSerialNumber()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result, newMonitorMap, todayMonitor); - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result, newMonitorMap, todayMonitor); - } - } + public void calculate(List<MonitorQualifyResult> list) { + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, MonitorRegistrationCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate()); @@ -110,16 +68,14 @@ /** * 绱鎬荤偣浣嶆暟銆佸湪绾跨偣浣嶆暟銆侀噸鐐圭偣浣嶆暟銆侀噸鐐圭偣浣嶅湪绾挎暟銆佹寚鎸ュ浘鍍忔暟銆佹寚鎸ュ浘鍍忓湪绾挎暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result, Map<String, TMonitor> newMonitors, List<String> yesterdayMonitor) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitorQualifyResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; stats.allFiles++; - if (newMonitors.containsKey(result.getSerialNumber())) { + if (result.getNewDevice()!=null && result.getNewDevice()) { stats.newSites++; - } - if (yesterdayMonitor.contains(result.getSerialNumber())) { - stats.todayFiles++; } } diff --git a/ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java index 099bc3b..c2f7e18 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java @@ -1,7 +1,10 @@ package com.ycl.calculate; +import com.fasterxml.jackson.databind.ser.Serializers; import com.ycl.platform.domain.entity.CheckIndexVideo; +import com.ycl.platform.domain.result.BaseResult; import com.ycl.platform.domain.result.UY.QueryVqdResult; +import com.ycl.platform.domain.result.UY.VideoOnlineResult; import com.ycl.platform.domain.vo.PlatformOnlineVO; import com.ycl.platform.mapper.CheckIndexVideoMapper; import com.ycl.platform.service.ICheckIndexVideoService; @@ -28,7 +31,7 @@ */ @Component @Slf4j -public class PlatformOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<PlatformOnlineVO> { +public class PlatformOnlineCalculation extends IndexCalculationUtils implements CalculationStrategy<PlatformOnlineVO> { @Autowired private SysDeptMapper deptMapper; @Autowired @@ -71,4 +74,5 @@ log.info("鏁版嵁涓虹┖"); } } + } diff --git a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java index 2135fba..78edba5 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java @@ -1,23 +1,15 @@ package com.ycl.calculate; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ycl.platform.domain.entity.CheckIndexVideo; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; -import com.ycl.platform.domain.result.UY.QueryVqdResult; import com.ycl.platform.domain.result.UY.VideoOnlineResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexVideoMapper; import com.ycl.platform.mapper.TMonitorMapper; -import com.ycl.platform.service.ICheckIndexFaceService; import com.ycl.platform.service.ICheckIndexVideoService; -import com.ycl.platform.service.ITMonitorService; import constant.ApiConstants; import constant.CheckThreadConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; @@ -25,8 +17,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻瑙嗛璁惧鐐逛綅鍦ㄧ嚎鐜囥�侀噸鐐圭偣浣嶅湪绾跨巼銆侀噸鐐规寚鎸ュ浘鍍忓湪绾跨巼銆侀儴绾х偣浣嶅湪绾跨巼 @@ -37,7 +27,7 @@ */ @Component @Slf4j -public class VideoOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<VideoOnlineResult> { +public class VideoOnlineCalculation extends IndexCalculationServe<VideoOnlineResult, VideoOnlineCalculation.AreaStats> implements CalculationStrategy<VideoOnlineResult> { @Autowired private CheckIndexVideoMapper checkIndexVideoMapper; @Autowired @@ -46,7 +36,7 @@ private ICheckIndexVideoService checkIndexVideoService; //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int onlineSites = 0; int importantSites = 0; @@ -59,37 +49,9 @@ @Override public void calculate(List<VideoOnlineResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(VideoOnlineResult::getDeviceId).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //閲嶇偣鐐逛綅闆嗗悎 - List<String> important = getImportant(); - //閲嶇偣鎸囨尌鍥惧儚闆嗗悎 - List<String> commandImage = getCommandImage(); - //鑾峰彇閮ㄧ骇鐐逛綅闆嗗悎 - List<String> deptTag = getDeptTag(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (VideoOnlineResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getDeviceId()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result, important,commandImage,deptTag); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result, important,commandImage,deptTag); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, VideoOnlineCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate()); @@ -109,30 +71,31 @@ /** * 绱鎬荤偣浣嶆暟銆佸湪绾跨偣浣嶆暟銆侀噸鐐圭偣浣嶆暟銆侀噸鐐圭偣浣嶅湪绾挎暟銆佹寚鎸ュ浘鍍忔暟銆佹寚鎸ュ浘鍍忓湪绾挎暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VideoOnlineResult result, List<String> important, List<String> commandImage,List<String> deptTag) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, VideoOnlineResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; //閲嶇偣鐐逛綅 - if(important.contains(result.getDeviceId())){ + if(result.getImportantTag()!=null && result.getImportantTag()){ stats.importantSites++; } //鎸囨尌鍥惧儚鐐逛綅 - if(commandImage.contains(result.getDeviceId())){ + if(result.getImportantCommandImageTag()!=null && result.getImportantCommandImageTag()){ stats.commandSites++; } - if(deptTag.contains(result.getDeviceId())){ + if(result.getDeptTag()!=null && result.getDeptTag()){ stats.deptSites++; } if (ApiConstants.UY_OnlineSite_Online.equals(result.getStatus())){ stats.onlineSites++; - if(important.contains(result.getDeviceId())){ + if(result.getImportantTag()!=null && result.getImportantTag()){ stats.importantOnlineSites++; } - if(commandImage.contains(result.getDeviceId())){ + if(result.getImportantCommandImageTag()!=null && result.getImportantCommandImageTag()){ stats.commandOnlineSites++; } - if(deptTag.contains(result.getDeviceId())){ + if(result.getDeptTag()!=null && result.getDeptTag()){ stats.deptOnlineSites++; } } diff --git a/ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java index b5325f6..c4c6c0e 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOsdCalculation.java @@ -2,27 +2,19 @@ import com.ycl.platform.domain.entity.CheckIndexVideo; import com.ycl.platform.domain.result.UY.OsdCheckResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexVideoMapper; -import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexVideoService; import constant.ApiConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; -import java.time.Duration; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻瑙嗛璁惧Osd鏍囨敞淇℃伅銆佹椂闂村噯纭俊鎭� @@ -31,16 +23,14 @@ */ @Component @Slf4j -public class VideoOsdCalculation extends IndexCalculationServe implements CalculationStrategy<OsdCheckResult> { +public class VideoOsdCalculation extends IndexCalculationServe<OsdCheckResult, VideoOsdCalculation.AreaStats> implements CalculationStrategy<OsdCheckResult> { @Autowired private CheckIndexVideoMapper checkIndexVideoMapper; - @Autowired - private TMonitorMapper monitorMapper; @Autowired private ICheckIndexVideoService checkIndexVideoService; //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int importantTotalSites = 0; int importantOsdAccuracySites = 0; @@ -49,33 +39,9 @@ @Override public void calculate(List<OsdCheckResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(OsdCheckResult::getDeviceNo).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //閲嶇偣鐐逛綅闆嗗悎 - List<String> important = getImportant(); - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (OsdCheckResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getDeviceNo()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result, important); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result, important); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, VideoOsdCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate()); @@ -95,13 +61,14 @@ /** * 绱osd鍚堟牸鏁般�佹椂闂村亸宸悎鏍兼暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, OsdCheckResult result, List<String> important) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, OsdCheckResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; //閲嶇偣鐐逛綅 - if (important.contains(result.getDeviceNo())) { + if (result.getImportantTag()) { stats.importantTotalSites++; if (checkOsd(result)) { stats.importantOsdAccuracySites++; diff --git a/ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java index 592a0e8..8a8c35c 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java @@ -1,21 +1,14 @@ package com.ycl.calculate; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ycl.platform.domain.entity.CheckIndexVideo; -import com.ycl.platform.domain.entity.TMonitor; -import com.ycl.platform.domain.param.UY.RecordMetaDSumParam; -import com.ycl.platform.domain.result.UY.QueryVqdResult; import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; -import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.CheckIndexVideoMapper; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ICheckIndexVideoService; -import com.ycl.platform.service.ITMonitorService; import constant.ApiConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import utils.DateUtils; import java.math.BigDecimal; @@ -23,8 +16,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; /** * 璁$畻瑙嗛璁惧褰曞儚鍙敤鐜� @@ -35,7 +26,7 @@ */ @Component @Slf4j -public class VideoUsabilityCalculation extends IndexCalculationServe implements CalculationStrategy<RecordMetaDSumResult> { +public class VideoUsabilityCalculation extends IndexCalculationServe<RecordMetaDSumResult, VideoUsabilityCalculation.AreaStats> implements CalculationStrategy<RecordMetaDSumResult> { @Autowired private CheckIndexVideoMapper checkIndexVideoMapper; @Autowired @@ -44,7 +35,7 @@ private ICheckIndexVideoService checkIndexVideoService; //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫� - private static class AreaStats { + protected static class AreaStats { int totalSites = 0; int usabilitySites = 0; int importantSites = 0; @@ -55,33 +46,9 @@ @Override public void calculate(List<RecordMetaDSumResult> list) { - if (CollectionUtils.isEmpty(list)) { - log.info("鏁版嵁涓虹┖"); - return; - } - - //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap - Map<String, TMonitorVO> monitorMap = monitorMapper.selectListByIds(list.stream().map(RecordMetaDSumResult::getDeviceId).collect(Collectors.toList())) - .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); - //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� - List<String> provinceIds = getProvince(); - //閲嶇偣鐐逛綅闆嗗悎 - List<String> important = getImportant(); - List<String> deptTag = getDeptTag(); - Map<String, AreaStats> areaStatsMap = new HashMap<>(); - for (RecordMetaDSumResult result : list) { - TMonitorVO monitor = monitorMap.get(result.getDeviceId()); - if (monitor == null) continue; - - String deptId = monitor.getDeptId().toString(); - updateAreaStats(areaStatsMap, deptId, result, important,deptTag); - - // 澶勭悊鐪佸巺鏁版嵁 - if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = ApiConstants.Province + deptId; - updateAreaStats(areaStatsMap, provinceKey, result, important,deptTag); - } - } + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, VideoUsabilityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + if (areaStatsMap == null) return; // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate()); @@ -101,22 +68,23 @@ /** * 绱鎬荤偣浣嶆暟銆佸湪绾跨偣浣嶆暟銆侀噸鐐圭偣浣嶆暟銆侀噸鐐圭偣浣嶅湪绾挎暟 */ - private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, RecordMetaDSumResult result, List<String> important,List<String> deptTag) { + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, RecordMetaDSumResult result) { //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); stats.totalSites++; - if(important.contains(result.getDeviceId())){ + if(result.getImportantTag()!=null && result.getImportantTag()){ stats.importantSites++; } - if(deptTag.contains(result.getDeviceId())){ + if(result.getDeptTag()!=null && result.getDeptTag()){ stats.deptSite++; } if (ApiConstants.UY_RecordStatus_Integrity.equals(result.getRecordStatus())){ stats.usabilitySites++; - if(important.contains(result.getDeviceId())){ + if(result.getImportantTag()!=null && result.getImportantTag()){ stats.importantUsabilitySites++; } - if(deptTag.contains(result.getDeviceId())){ + if(result.getDeptTag()!=null && result.getDeptTag()){ stats.depteUsabilitySites++; } } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java index bd593f7..f2476f6 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java @@ -329,4 +329,5 @@ baseResult.setNewDevice(!dbGBList.contains(s)); } } + } diff --git a/ycl-server/src/main/java/com/ycl/task/CarTask.java b/ycl-server/src/main/java/com/ycl/task/CarTask.java index cb5c6a6..af47c9a 100644 --- a/ycl-server/src/main/java/com/ycl/task/CarTask.java +++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java @@ -4,6 +4,7 @@ import com.ycl.calculate.CalculationStrategy; import com.ycl.factory.IndexCalculationFactory; import com.ycl.platform.domain.result.HK.*; +import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.utils.DateUtils; @@ -20,6 +21,7 @@ import java.util.Date; import java.util.List; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -116,10 +118,16 @@ public void directConsistentTask() { log.info("寮�濮嬭绠楄溅杈嗙洰褰曚竴鑷寸巼"); //杞﹁締鐩綍涓�鑷寸巼 - List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList(); - List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO -> !StringUtils.isEmpty(tMonitorVO.getCameraFunType()) && tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Car + "")).collect(Collectors.toList()); + Date yesterday = DateUtils.addDays(new Date(), -1); + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); + // .*琛ㄧず浠绘剰鏁伴噺瀛楃 1/2/3 瑙嗛/杞﹁締/浜鸿劯 + Pattern pattern = Pattern.compile(".*2.*"); + query.addCriteria(Criteria.where("sxjgnlx.value").regex(pattern)); + List<MonitorQualifyResult> results = mongoTemplate.find(query, MonitorQualifyResult.class); CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DirectConsistent); - calculator.calculate(list); + calculator.calculate(results); log.info("缁撴潫璁$畻杞﹁締鐩綍涓�鑷寸巼"); } diff --git a/ycl-server/src/main/resources/application-dev.yml b/ycl-server/src/main/resources/application-dev.yml index 4bdf70c..cdc2747 100644 --- a/ycl-server/src/main/resources/application-dev.yml +++ b/ycl-server/src/main/resources/application-dev.yml @@ -37,9 +37,9 @@ spring: # 鏁版嵁婧愰厤缃� datasource: - url: jdbc:mysql://101.35.247.188/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://localhost:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true username: root - password: ycl@202466 + password: 1234 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver @@ -126,7 +126,7 @@ spring: data: mongodb: - uri: mongodb://root1:yunwei%402024@127.0.0.1:27017/zgyw?authSource=admin + uri: mongodb://root1:yunwei%402024@192.168.3.88:27017/zgyw?authSource=admin # 鎷夊彇鏁版嵁璇锋眰閰嶇疆 request: -- Gitblit v1.8.0