From c8ca3c42906b89c5de910ad3ff9f164e6b846a4c Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 09 八月 2024 15:41:21 +0800 Subject: [PATCH] 一机一档合格率 --- ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java | 138 +++++++++++++++++++++++ ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java | 58 +++++++++ ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java | 2 ycl-common/src/main/java/constant/ApiConstants.java | 2 ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java | 6 ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java | 4 ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java | 2 ycl-common/src/main/java/constant/CalculationStrategyConstants.java | 8 + ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java | 4 ycl-server/src/main/java/com/ycl/task/VideoTask.java | 45 +++---- ycl-server/src/main/java/com/ycl/task/MonitorTask.java | 32 +++- ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java | 2 ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java | 14 + ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java | 2 21 files changed, 275 insertions(+), 58 deletions(-) diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java index abaa992..be1ac7b 100644 --- a/ycl-common/src/main/java/constant/ApiConstants.java +++ b/ycl-common/src/main/java/constant/ApiConstants.java @@ -60,4 +60,6 @@ //鑷础琛屾斂缂栫爜 public final static String AreaNo = "5103"; + //鐪佸巺鍓嶇紑 + public final static String Province = "Province_"; } diff --git a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java index ab8f49a..a726877 100644 --- a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java +++ b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java @@ -53,6 +53,10 @@ /** + * 涓�鏈轰竴妗e悎鏍肩巼 + */ + public static final String Video_MonitorQualify = "videoMonitorQualify"; + /** * 瑙嗛鐐逛綅鍦ㄧ嚎鐜� */ public static final String Video_SiteOnline = "videoSiteOnline"; @@ -60,4 +64,8 @@ * 瑙嗛褰曞儚鍙敤鐜� */ public static final String Video_Usability = "videoUsability"; + /** + * 骞冲彴鍦ㄧ嚎鐜� + */ + public static final String Video_PlatformOnline = "videoPlatformOnline"; } 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 df47586..09d8173 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java @@ -73,7 +73,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 375aca0..8863fb4 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java @@ -68,7 +68,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result, importantIds); } } 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 3db70da..f8d9300 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java @@ -74,7 +74,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result, importantIds); } } 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 e567bac..7acdf17 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java @@ -70,7 +70,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 f26b39c..0e98ab3 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java @@ -73,7 +73,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } @@ -137,7 +137,7 @@ BigDecimal siteOnline = siteOnline(siteOnlineParam); checkIndexCar.setSiteOnline(siteOnline); //瑙嗗浘搴撳鎺ョǔ瀹氭�� - BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg; + BigDecimal avgCount = key.startsWith(ApiConstants.Province) ? cityCountAvg : countyCountAvg; Map<String, Object> viewConnectParam = new HashMap<>(); viewConnectParam.put("totalDataSum", stats.totalDataSum); viewConnectParam.put("avgCount", avgCount); 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 23dfe19..7c70908 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java @@ -75,7 +75,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 2da526d..a2c1afc 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java @@ -68,7 +68,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 c7e8bce..ba700d3 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java @@ -66,7 +66,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 ce028fc..1514d8b 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java @@ -67,7 +67,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 633223a..4e4818e 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java @@ -74,7 +74,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } @@ -132,7 +132,7 @@ BigDecimal siteOnline = siteOnline(siteOnlineParam); checkIndexFace.setSiteOnline(siteOnline); //瑙嗗浘搴撳鎺ョǔ瀹氭�� - BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg; + BigDecimal avgCount = key.startsWith(ApiConstants.Province) ? cityCountAvg : countyCountAvg; Map<String, Object> viewConnectParam = new HashMap<>(); viewConnectParam.put("totalDataSum", stats.totalDataSum); viewConnectParam.put("avgCount", avgCount); 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 41d4ce9..62929dd 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java @@ -71,7 +71,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } } 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 1b36b5b..f9cb60e 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java +++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java @@ -4,6 +4,7 @@ import com.ycl.platform.base.CheckIndex; import com.ycl.platform.domain.entity.YwPoint; import com.ycl.platform.mapper.YwPointMapper; +import constant.ApiConstants; import constant.CheckConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +26,13 @@ public class IndexCalculationServe { @Autowired private YwPointMapper pointMapper; + + //涓�鏈轰竴妗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 qualifyMonitor.divide(totalMonitors, 4, RoundingMode.HALF_UP); + } //鐐逛綅鍦ㄧ嚎鐜� public BigDecimal siteOnline(Map<String, Object> param) { @@ -136,7 +144,7 @@ // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 Optional<T> existingIndex = checkIndexList.stream() .filter(index -> key.equals(index.getDeptId().toString()) && - (key.startsWith("Province_") ? CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) + (key.startsWith(ApiConstants.Province) ? CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) : CheckConstants.Examine_Tag_County.equals(index.getExamineTag()))) .findFirst(); @@ -145,8 +153,8 @@ } else { try { checkIndex = clazz.getDeclaredConstructor().newInstance(); - checkIndex.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); - checkIndex.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_Province : CheckConstants.Examine_Tag_County); + 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; diff --git a/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java new file mode 100644 index 0000000..484ae15 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/MonitorQualifyCalculation.java @@ -0,0 +1,138 @@ +package com.ycl.calculate; + +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 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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 璁$畻涓�鏈轰竴妗e悎鏍肩巼 + * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId + * 寰幆map璁$畻鏁版嵁涓婁紶鍙婃椂鎬� + * 鏇存柊鎴栨柊澧� + */ +@Component +public class MonitorQualifyCalculation extends IndexCalculationServe implements CalculationStrategy<MonitorQualifyResult> { + @Autowired + private CheckIndexVideoMapper checkIndexVideoMapper; + @Autowired + private TMonitorMapper monitorMapper; + @Autowired + private ICheckIndexVideoService checkIndexVideoService; + + //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫� + private static class AreaStats { + //鎬绘。妗堟暟 + int totalMonitors = 0; + //鍚堟牸妗f鏁� + int qualifyMonitor = 0; + } + + @Override + public void calculate(List<MonitorQualifyResult> list) { + if (CollectionUtils.isEmpty(list)) { + 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); + } + } + + // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� + List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate()); + List<CheckIndexVideo> checkIndexVideos = new ArrayList<>(); + areaStatsMap.forEach((deptId, stats) -> { + if (stats.totalMonitors > 0) { + CheckIndexVideo CheckIndexVideo = createOrUpdateCheckIndexVideo(deptId, stats, checkIndexVideoList); + if (CheckIndexVideo != null) { + checkIndexVideos.add(CheckIndexVideo); + } + } + }); + + checkIndexVideoService.saveOrUpdateBatch(checkIndexVideos); + } + + /** + * 绱鎬绘。妗堟暟鍜屽悎鏍兼。妗堟暟 + */ + private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitorQualifyResult result) { + //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value + AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); + stats.totalMonitors++; + if (result != null && correct(result)){ + stats.qualifyMonitor++; + } + } + //鍏ㄥ杩攖ure + private boolean correct(MonitorQualifyResult result) { + return checkError(result.getName()) && + checkError(result.getCivilCode()) && + checkError(result.getIp()) && + checkError(result.getSerialNumber()) && + checkError(result.getMacdz()) && + checkError(result.getLatitude()) && + checkError(result.getLongitude()) && + checkError(result.getSbzt()) && + checkError(result.getSxjcjqy()) && + checkError(result.getSxjgnlx()) && + checkError(result.getJkdwlx()) && + checkError(result.getIntegrated_device()) + ; + } + + //妫�鏌ユ寚鏍囷紝姝e父杩斿洖true + private boolean checkError(MonitorQualifyResult.QualifyResult result) { + return result.getError() != null && !result.getError(); + } + + /** + * 涓�鏈轰竴妗e悎鏍肩巼 + */ + private CheckIndexVideo createOrUpdateCheckIndexVideo(String key, AreaStats stats, List<CheckIndexVideo> checkIndexVideoList) { + CheckIndexVideo checkIndexVideo = getCheckIndex(key, checkIndexVideoList, CheckIndexVideo.class); + if (checkIndexVideo == null) { + return null; + } + //璋冪敤涓�鏈轰竴妗e悎鏍肩巼璁$畻鏂规硶 + Map<String, Object> param = new HashMap<>(); + param.put("totalMonitors", stats.totalMonitors); + param.put("qualifyMonitor", stats.qualifyMonitor); + BigDecimal index = monitorQualify(param); + checkIndexVideo.setMonitorQualification(index); + return checkIndexVideo; + } +} 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 2ae0bfb..6514277 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/PlatformOnlineCalculation.java @@ -1,13 +1,67 @@ package com.ycl.calculate; +import com.ycl.platform.domain.entity.CheckIndexVideo; import com.ycl.platform.domain.result.UY.QueryVqdResult; +import com.ycl.platform.domain.vo.PlatformOnlineVO; +import com.ycl.platform.mapper.CheckIndexVideoMapper; +import com.ycl.platform.service.ICheckIndexVideoService; +import com.ycl.system.mapper.SysDeptMapper; +import constant.ApiConstants; +import constant.CheckConstants; +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.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; -public class PlatformOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<QueryVqdResult> { +/** + * 骞冲彴鍦ㄧ嚎鐜囪绠� + * 绂荤嚎鏃堕暱姣忚秴杩�30鍒嗛挓鎵g櫨鍒嗕箣鍗� + * 涓嶅尯鍒嗗尯鍩� + */ +@Component +public class PlatformOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<PlatformOnlineVO> { + @Autowired + private SysDeptMapper deptMapper; + @Autowired + private CheckIndexVideoMapper videoMapper; + @Autowired + private ICheckIndexVideoService checkIndexVideoService; @Override - public void calculate(List<QueryVqdResult> list) { + public void calculate(List<PlatformOnlineVO> list) { + if (!CollectionUtils.isEmpty(list)) { + //鎬荤绾挎椂闀� + int time = list.stream().map(PlatformOnlineVO::getTodayOutlineSed).reduce(0, Integer::sum); + //绂荤嚎鏃堕暱杞崲浣嶅垎閽熺劧鍚庡彇妯� + int num = (time / 60) % 30; + double score = Math.max(1 - num * 0.1, 0); + //鏄惁宸茬粡瀛樺湪褰撴棩鏁版嵁 + List<CheckIndexVideo> checkIndexVideos = videoMapper.selectToday(DateUtils.getDate()); + //鎵�鏈夊尯鍩熼儴闂� + List<Long> deptIds = deptMapper.selectByParentId(207L); + List<String> keys = new ArrayList<>(); + //鍑嗗鍖哄垎鐪佸巺銆佸尯鍩熺殑deptId list + for (Long deptId : deptIds) { + keys.add(deptId + ""); + keys.add(ApiConstants.Province + deptId); + } + List<CheckIndexVideo> videos = new ArrayList<>(); + keys.forEach(key -> { + //濡傛灉涓嶅瓨鍦ㄥ氨鏂板濡傛灉瀛樺湪鍒欏鐢� + CheckIndexVideo checkIndex = getCheckIndex(key, checkIndexVideos, CheckIndexVideo.class); + if (checkIndex != null) { + checkIndex.setPlatformOnline(new BigDecimal(score)); + videos.add(checkIndex); + } + }); + checkIndexVideoService.saveOrUpdateBatch(videos); + } } } 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 64a724b..6258a85 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java @@ -74,7 +74,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result, important); } } 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 1e30c0e..1b267fc 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/VideoUsabilityCalculation.java @@ -72,7 +72,7 @@ // 澶勭悊鐪佸巺鏁版嵁 if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { - String provinceKey = "Province_" + deptId; + String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result, important); } } diff --git a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java index e28b42e..196a70d 100644 --- a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java +++ b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java @@ -1,6 +1,7 @@ package com.ycl.factory; import com.ycl.calculate.*; +import com.ycl.platform.domain.result.UY.VideoQualityResult; import constant.CalculationStrategyConstants; import java.util.HashMap; @@ -36,11 +37,14 @@ calculators.put(CalculationStrategyConstants.Face_ClockAccuracy, new FaceClockAccuracyCalculation()); //TODO锛氫汉鑴哥洰褰曚竴鑷� + //涓�鏈轰竴妗e悎鏍肩巼 + calculators.put(CalculationStrategyConstants.Video_MonitorQualify, new MonitorQualifyCalculation()); //瑙嗛鐐逛綅鍦ㄧ嚎鐜� calculators.put(CalculationStrategyConstants.Video_SiteOnline, new VideoOnlineCalculation()); //瑙嗛褰曞儚鍙敤鐜� calculators.put(CalculationStrategyConstants.Video_Usability, new VideoUsabilityCalculation()); - + //骞冲彴鍦ㄧ嚎鐜� + calculators.put(CalculationStrategyConstants.Video_PlatformOnline,new PlatformOnlineCalculation()); } public static CalculationStrategy getCalculator(String indexName) { diff --git a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java index bce6e07..25d072f 100644 --- a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java +++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java @@ -54,7 +54,7 @@ Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); List<OneMachineFileResult> oneMachineFileResults = mongoTemplate.find(query, OneMachineFileResult.class); //鏁版嵁搴搈onitor琛ㄦ暟鎹� - List<String> serialNumberInBase = monitorService.selectTMonitorList(null).stream().map(TMonitorVO::getSerialNumber).collect(Collectors.toList()); + Map<String, TMonitorVO> monitorVOMap = monitorService.selectTMonitorList(null).stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); //鍑嗗鎻掑叆璁惧琛ㄧ殑鏁版嵁 List<TMonitor> monitorList = new ArrayList<>(); //鍑嗗鎻掑叆鐐逛綅琛ㄧ殑鏁版嵁 @@ -68,24 +68,27 @@ sysDictData.setDictType("platform_important_site"); List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData); List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList()); + + //TODO:鍏ㄥ勾鐣欏瓨杩樻槸鍗曟鐣欏瓨 for (OneMachineFileResult result : oneMachineFileResults) { - TMonitor monitor = getMonitor(result); + TMonitor monitor = getMonitor(result,monitorVOMap); YwPoint point = getPoint(result, pointMap, importantSite); monitorList.add(monitor); + ywPointList.add(point); //姣斿绛涢�夊嚭鏂扮殑鏁版嵁 - if (!CollectionUtils.isEmpty(serialNumberInBase) && !serialNumberInBase.contains(result.getSBBM())) { + if (!CollectionUtils.isEmpty(monitorVOMap) && !monitorVOMap.containsKey(result.getSBBM())) { newMonitorList.add(monitor); } } //鎻掑叆鏁版嵁搴� if (!CollectionUtils.isEmpty(monitorList)) { - monitorService.deleteTMonitorById(null); - monitorService.saveBatch(monitorList); + monitorService.saveOrUpdateBatch(monitorList); + } + if(!CollectionUtils.isEmpty(ywPointList)){ + ywPointService.saveOrUpdateBatch(ywPointList); } //鏂扮殑鏁版嵁鏀惧叆Redis涓瓑寰呰�冩牳鎸囨爣浠诲姟浣跨敤 redisTemplate.opsForValue().set(RedisConstant.New_Monitor_Set, JSONArray.toJSONString(newMonitorList)); - - } private YwPoint getPoint(OneMachineFileResult result, Map<String, YwPoint> pointMap, List<String> importantSite) { @@ -108,15 +111,22 @@ //瑙f瀽deptId //鍖哄煙琛屾斂缂栫爜 String areaCode = result.getSBBM().substring(0, 6); - Integer deptId = AreaDeptEnum.fromCode(areaCode).getDeptId(); - if (deptId != null) { - ywPoint.setDeptId(Long.valueOf(deptId + "")); + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode); + //濡傛灉瑙f瀽涓嶅嚭鍖哄煙deptId涓�-1 + Integer deptId = -1; + if(areaDeptEnum!=null){ + deptId = areaDeptEnum.getDeptId(); } + ywPoint.setDeptId(Long.valueOf(deptId + "")); + return ywPoint; } - private TMonitor getMonitor(OneMachineFileResult result) { + private TMonitor getMonitor(OneMachineFileResult result, Map<String, TMonitorVO> monitorVOMap) { TMonitor monitor = new TMonitor(); + if (monitorVOMap.containsKey(result.getSBBM())) { + monitor.setId(monitorVOMap.get(result.getSBBM()).getId()); + } monitor.setSerialNumber(result.getSBBM()); monitor.setName(result.getSBMC()); monitor.setSiteType(Long.valueOf(result.getJKDWLX())); diff --git a/ycl-server/src/main/java/com/ycl/task/VideoTask.java b/ycl-server/src/main/java/com/ycl/task/VideoTask.java index 827d57a..fe804d8 100644 --- a/ycl-server/src/main/java/com/ycl/task/VideoTask.java +++ b/ycl-server/src/main/java/com/ycl/task/VideoTask.java @@ -6,6 +6,7 @@ import com.ycl.platform.domain.entity.CheckIndexVideo; import com.ycl.platform.domain.param.UY.RecordMetaDSumParam; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; +import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.result.UY.QueryVqdResult; import com.ycl.platform.domain.vo.PlatformOnlineVO; import com.ycl.platform.mapper.CheckIndexVideoMapper; @@ -41,14 +42,11 @@ private MongoTemplate mongoTemplate; @Autowired private PlatformOnlineMapper platformOnlineMapper; - @Autowired - private CheckIndexVideoMapper videoMapper; - @Autowired - private SysDeptMapper deptMapper; + public void siteOnlineTask() { Date yesterday = DateUtils.addDays(new Date(), -1); - //璁$畻鐐逛綅鍦ㄧ嚎鐜囧拰閲嶇偣鐐逛綅鍦ㄧ嚎鐜� + //TODO锛氳绠楃偣浣嶅湪绾跨巼鍜岄噸鐐圭偣浣嶅湪绾跨巼 Query query = new Query(); query.addCriteria(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); @@ -71,31 +69,26 @@ } public void oneMonitorFileTask() { - //璁$畻涓�鏈轰竴妗f敞鍐岀巼銆佷竴鏈轰竴妗e悎鏍肩巼銆佹。妗堣�冩牳姣� + //璁$畻涓�鏈轰竴妗f敞鍐岀巼銆佹。妗堣�冩牳姣� + } + public void oneMonitorQualifyTask(){ + //璁$畻涓�鏈轰竴妗e悎鏍肩巼 + Date yesterday = DateUtils.addDays(new Date(), -1); + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); + List<MonitorQualifyResult> results = mongoTemplate.find(query, MonitorQualifyResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_MonitorQualify); + calculator.calculate(results); + } public void platformOnlineTask() { //璁$畻骞冲彴鍦ㄧ嚎鐜� - //鎷垮埌浠婃棩绂荤嚎鏃堕暱鏁版嵁 List<PlatformOnlineVO> list = platformOnlineMapper.sumYesterday(DateUtils.getMouthStart(new Date()), DateUtils.getMouthEnd(new Date())); - -// int num = (time / 60) % 30; -// double score = Math.max(1 - num * 0.1, 0); -// List<CheckIndexVideo> checkIndexVideos = videoMapper.selectToday(DateUtils.getDate()); -// List<Long> deptIds = deptMapper.selectByParentId(207L); -// Map<String, CheckIndexVideo> map = new HashMap<>(); -// for (Long deptId : deptIds) { -// CheckIndexVideo video = new CheckIndexVideo(); -// video.setExamineTag(CheckConstants.Examine_Tag_County); -// map.put(deptId + "", video); -// CheckIndexVideo provinceVideo = new CheckIndexVideo(); -// provinceVideo.setExamineTag(CheckConstants.Examine_Tag_Province); -// map.put("Province_" + deptId, new CheckIndexVideo()); -// } -// map.forEach((deptId, video) -> { -// -// }); - - + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_PlatformOnline); + calculator.calculate(list); } + + } -- Gitblit v1.8.0