From c83101eb62f5d4906b9c01ceea6b21a37f9e84d8 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期二, 18 十一月 2025 09:24:53 +0800
Subject: [PATCH] bug修复
---
ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java | 175 ++++++++++++---------------------------------------------
1 files changed, 38 insertions(+), 137 deletions(-)
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 de0049f..09164a1 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
@@ -1,160 +1,61 @@
package com.ycl.calculate;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ycl.platform.base.CheckIndex;
-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.service.ITMonitorService;
-import constant.CheckConstants;
+import com.ycl.platform.domain.result.BaseResult;
+import com.ycl.platform.domain.vo.TMonitorVO;
+import com.ycl.platform.mapper.TMonitorMapper;
+import constant.ApiConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
+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 {
+public abstract class IndexCalculationServe<T extends BaseResult, S> extends IndexCalculationUtils {
+ @Autowired
+ private TMonitorMapper monitorMapper;
- //鐐逛綅鍦ㄧ嚎鐜�
- public BigDecimal siteOnline(Map<String, Object> param) {
- BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites"));
- BigDecimal onlineSites = new BigDecimal((Integer) param.get("onlineSites"));
- return onlineSites.divide(totalSites, 4, RoundingMode.HALF_UP);
- }
+ //鎶借薄鏂规硶锛岀敱瀛愮被缂栧啓鍏蜂綋閫昏緫绠楁硶
+ protected abstract void updateAreaStats(Map<String, S> areaStatsMap, String key, T result);
- //瑙嗗浘搴撳鎺ョǔ瀹氭��
- public BigDecimal viewConnectStability(Map<String, Object> param) {
- BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum"));
- BigDecimal avgCount = new BigDecimal((Integer) param.get("avgCount"));
- return avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP);
- }
+ protected Map<String, S> getAreaStatsMap(List<T> list, Boolean needDept) {
+ if (CollectionUtils.isEmpty(list)) {
+ log.info("鏁版嵁涓虹┖");
+ return null;
+ }
+ //杩斿洖浠ュ浗鏍囩爜涓簁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<>();
- //鏍囨敞姝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 qualifySiteCount.divide(totalSitesCount, 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);
- //鏁版嵁涓婁紶鍙婃椂鎬�
- public BigDecimal snapshopDelay(Map<String, Object> param) {
- BigDecimal totalCount = new BigDecimal((Integer) param.get("totalCount"));
- 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 = 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 result = integritySites.divide(totalSites, 10, RoundingMode.HALF_UP)
- .add(importantIntegritySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP));
- return result.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 result = accuracySites.divide(totalSites, 10, RoundingMode.HALF_UP)
- .add(importantAccuracySites.divide(importantTotalSites, 10, RoundingMode.HALF_UP));
- return result.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 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 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 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 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 usabilitySites.divide(totalSites, 4, RoundingMode.HALF_UP);
- }
-
- //杩斿洖鐪佸巺鍥芥爣鐮侀泦鍚�
- public List<String> getProvince() {
- // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹�
- List<String> list = new ArrayList<>();
- return list;
- }
-
- //杩斿洖閲嶇偣鐐逛綅闆嗗悎
- public List<String> getImportant() {
- // TODO: 閲嶇偣鐐逛綅 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹�
- List<String> list = new ArrayList<>();
- return list;
- }
-
- //妫�鏌ユ槸鍚﹀瓨鍦ㄥ綋鏃ユ暟鎹�
- public <T extends CheckIndex> T getCheckIndex(String key, List<T> checkIndexList, Class<T> clazz) {
- T checkIndex;
-
- // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁
- Optional<T> existingIndex = checkIndexList.stream()
- .filter(index -> key.equals(index.getDeptId().toString()) &&
- (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(index.getExamineTag())
- : CheckConstants.Examine_Tag_County.equals(index.getExamineTag())))
- .findFirst();
-
- if (existingIndex.isPresent()) {
- checkIndex = existingIndex.get();
- } 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_City : 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);
+ }
+ // 澶勭悊鍏畨閮ㄨ�冩牳鏁版嵁(鍏畨閮ㄦ暟鎹彧鏈夎棰戞墠鏈夛紝鎵�浠ヨ繖閲屽畾涔変簡needDept鏉ュ喅瀹氭槸鍚﹂渶瑕佸鐞嗛儴绾ф暟鎹�)
+ if (needDept) {
+ if (result.getDeptTag() != null && result.getDeptTag()) {
+ String deptKey = ApiConstants.Dept + deptId;
+ updateAreaStats(areaStatsMap, deptKey, result);
+ }
}
}
- return checkIndex;
+ return areaStatsMap;
}
}
--
Gitblit v1.8.0