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