From 3b0516a2959e25576e4f3fda697a3b025d06c8c9 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期二, 24 六月 2025 14:09:07 +0800 Subject: [PATCH] 每日录像可用指标添加日志,修改大屏为查看当前月平均 --- ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java | 110 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 79 insertions(+), 31 deletions(-) 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 97e4f78..98c4b3e 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java @@ -24,7 +24,7 @@ import java.util.*; /** - * 璁$畻杞﹁締鐐逛綅鍦ㄧ嚎鐜囥�佽鍥惧簱瀵规帴绋冲畾鎬� + * 璁$畻杞﹁締瑙嗗浘搴撳鎺ョǔ瀹氭�� * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋滄帴鍙f暟鎹� * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId * 寰幆map璁$畻鐐逛綅鍦ㄧ嚎鐜� @@ -41,17 +41,19 @@ private RedisTemplate redisTemplate; @Autowired private SysDictDataMapper dictDataMapper; - //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被 + + //鍖哄煙杞﹁締瑙嗗浘搴撳鎺ョǔ瀹氭�х殑鍐呴儴绫� protected static class AreaStats { int totalSites = 0; - int onlineSites = 0; int totalDataSum = 0; + //鍔犳潈鍚庣殑鍚屾湡鎶撴媿閲� + int lastSnapCount = 0; } @Override public void calculate(List<SnapshotDataMonitorResult> list) { //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 - Map<String, CarSnapshopDataCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list); + Map<String, CarSnapshopDataCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list, Boolean.FALSE); if (areaStatsMap == null) return; // 鑾峰彇褰撳墠鏃ユ湡 @@ -64,13 +66,15 @@ redisTemplate.delete(RedisConstant.Check_Car_ViewConnect); } //浠庡瓧鍏歌幏鍙栧悓鏈熸姄鎷嶉噺 - List<SysDictData> carSnap = dictDataMapper.selectDictDataByType(CheckConstants.DICT_CAR_SNAP); + List<SysDictData> lastSnap = dictDataMapper.selectDictDataByType(CheckConstants.DICT_LAST_SNAP); + //鏍规嵁鍚勪釜鍖哄幙鐐逛綅鏁版嵁瀵瑰悓鏈熸姄鎷嶉噺鍋氬姞鏉冨鐞� + fillLastSnap(areaStatsMap, lastSnap); // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); List<CheckIndexCar> checkIndexCars = new ArrayList<>(); areaStatsMap.forEach((key, stats) -> { if (stats.totalSites > 0) { - CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(key, stats, checkIndexCarList,carSnap); + CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(key, stats, checkIndexCarList); if (checkIndexCar != null) { checkIndexCars.add(checkIndexCar); } @@ -78,6 +82,67 @@ }); checkIndexCarService.saveOrUpdateBatch(checkIndexCars); + } + + //鏍规嵁鐐逛綅鏁伴噺瀵瑰悓鏈熸姄鎷嶉噺浣滃姞鏉冨鐞� + private void fillLastSnap(Map<String, AreaStats> areaStatsMap, List<SysDictData> lastSnap) { + //鐪佸巺鎬荤偣浣嶆暟 + int provinceTotalSites = 0; + //鍖哄幙鎬荤偣浣嶆暟 + int countyTotalSites = 0; + //鍚屾湡鐪佸巺鎶撴媿閲� + int lastProvinceSnap = 0; + //鍚屾湡鍖哄幙鎶撴媿閲� + int lastCountySnap = 0; + //浠庡瓧鍏搁噷绛涢�夌渷鍘呭�� + Optional<SysDictData> first = lastSnap.stream().filter(sysDictData -> CheckConstants.SNAP_PROVINCE_CAR.equals(sysDictData.getDictLabel())).findFirst(); + if (first.isPresent()) { + lastProvinceSnap = Integer.parseInt(first.get().getDictValue()); + } + //浠庡瓧鍏搁噷绛涢�夊尯鍘垮�� + Optional<SysDictData> first2 = lastSnap.stream().filter(sysDictData -> CheckConstants.SNAP_COUNTY_CAR.equals(sysDictData.getDictLabel())).findFirst(); + if (first2.isPresent()) { + lastCountySnap = Integer.parseInt(first2.get().getDictValue()); + } + log.info("鐪佸巺鍚屾湡锛歿}锛屽尯鍘垮悓鏈燂細{}",lastProvinceSnap,lastCountySnap); + //璁$畻鎬绘暟 + for (Map.Entry<String, AreaStats> entry : areaStatsMap.entrySet()) { + String key = entry.getKey(); + AreaStats value = entry.getValue(); + if (key.startsWith(ApiConstants.Province)) { + provinceTotalSites += value.totalSites; + } else { + countyTotalSites += value.totalSites; + } + } + log.info("鐪佸巺鎬绘暟锛歿}锛屽尯鍘挎�绘暟锛歿}",provinceTotalSites,countyTotalSites); + //鍔犳潈鎿嶄綔,琛ュ厖鍚屾湡鎶撴媿閲� + for (Map.Entry<String, AreaStats> entry : areaStatsMap.entrySet()) { + String key = entry.getKey(); + AreaStats value = entry.getValue(); + //鐪佸巺 + if (key.startsWith(ApiConstants.Province)) { + if (value.totalSites == 0) { + value.lastSnapCount = 0; + } else { + BigDecimal result = new BigDecimal(value.totalSites) + .divide(new BigDecimal(provinceTotalSites), 2, RoundingMode.HALF_UP) + .multiply(new BigDecimal(lastProvinceSnap)); + value.lastSnapCount = result.setScale(0, RoundingMode.HALF_UP).intValue(); + } + } else { + //鍖哄幙 + if (value.totalSites == 0) { + value.lastSnapCount = 0; + } else { + BigDecimal result = new BigDecimal(value.totalSites) + .divide(new BigDecimal(countyTotalSites), 2, RoundingMode.HALF_UP) + .multiply(new BigDecimal(lastCountySnap)); + value.lastSnapCount = result.setScale(0, RoundingMode.HALF_UP).intValue(); + } + } + log.info("璁$畻鐨勬暟鎹細鎬荤偣浣嶆暟锛歿}锛屾�绘姄鎷嶉噺锛歿}锛屽悓鏈熸姄鎷嶉噺锛歿}",value.totalSites,value.totalDataSum,value.lastSnapCount); + } } /** @@ -90,31 +155,20 @@ stats.totalSites++; if (ApiConstants.HK_SnapCount_ResultType_Null != result.getResultType()) { - stats.onlineSites++; stats.totalDataSum += result.getDataCount(); } } /** - * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭�� + * 杞﹁締瑙嗗浘搴撳鎺ョǔ瀹氭�� */ - private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList,List<SysDictData> carSnap) { + private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); if (checkIndexCar == null) { return null; } - //璋冪敤鐐逛綅鍦ㄧ嚎璁$畻鏂规硶 - if (stats.totalSites >= CheckThreadConstants.Check_Car_SiteOnline) { - Map<String, Object> siteOnlineParam = new HashMap<>(); - siteOnlineParam.put("totalSites", stats.totalSites); - siteOnlineParam.put("onlineSites", stats.onlineSites); - BigDecimal siteOnline = siteOnline(siteOnlineParam); - checkIndexCar.setSiteOnline(siteOnline.min(BigDecimal.ONE)); - } else { - checkIndexCar.setSiteOnline(BigDecimal.ZERO); - } //瑙嗗浘搴撳鎺ョǔ瀹氭�� //Redis璁板綍璇ュ尯鍘垮綋鏈堟棤鏁版嵁涓婁紶娆℃暟 Integer noDateCount = (Integer) redisTemplate.opsForHash().get(RedisConstant.Check_Car_ViewConnect, key); @@ -125,18 +179,12 @@ Double deductScore = 0.1 * noDateCount; if (stats.totalDataSum != 0) { - Integer deptId = key.startsWith(ApiConstants.Province) ? Integer.parseInt(key.split("_")[1]) : Integer.parseInt(key); - String dictKey = key.startsWith(ApiConstants.Province) ? ApiConstants.Province+AreaDeptEnum.fromDept(deptId).getCode() : ApiConstants.County+AreaDeptEnum.fromDept(deptId).getCode(); - Optional<SysDictData> first = carSnap.stream().filter(sysDictData -> sysDictData.getDictLabel().equals(dictKey)).findFirst(); - if(first.isPresent()){ - String value = first.get().getDictValue(); - Map<String, Object> viewConnectParam = new HashMap<>(); - viewConnectParam.put("totalDataSum", stats.totalDataSum); - viewConnectParam.put("avgCount", new BigDecimal(value).multiply(new BigDecimal(CheckConstants.MultiplyNum)).divide(new BigDecimal(LocalDate.now().getDayOfMonth()), 0, RoundingMode.HALF_UP)); - BigDecimal viewConnectStability = viewConnectStability(viewConnectParam); - viewConnectStability = viewConnectStability.subtract(new BigDecimal(deductScore)).max(BigDecimal.ZERO).min(BigDecimal.ONE); - checkIndexCar.setViewConnectStability(viewConnectStability); - } + Map<String, Object> viewConnectParam = new HashMap<>(); + viewConnectParam.put("totalDataSum", stats.totalDataSum); + viewConnectParam.put("lastCount", new BigDecimal(stats.lastSnapCount).multiply(new BigDecimal(CheckConstants.MultiplyNum)).divide(new BigDecimal(LocalDate.now().getDayOfMonth()), 0, RoundingMode.HALF_UP)); + BigDecimal viewConnectStability = viewConnectStability(viewConnectParam); + viewConnectStability = viewConnectStability.subtract(new BigDecimal(deductScore)).max(BigDecimal.ZERO).min(BigDecimal.ONE); + checkIndexCar.setViewConnectStability(viewConnectStability); } else { noDateCount++; } -- Gitblit v1.8.0