From 17244068535a9163ab1fd6b3be2a794d9a857879 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 15 八月 2024 17:48:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml                           |    4 
 ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java       |  145 +++++++++++++
 ycl-server/src/main/java/com/ycl/task/CarTask.java                                   |   17 +
 ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java            |    7 
 ycl-server/src/main/resources/mapper/zgyw/PlatformOnlineMapper.xml                   |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java |    5 
 ycl-server/src/main/java/com/ycl/platform/service/IContractScoreService.java         |    6 
 ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java            |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java |    2 
 ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java               |   10 
 ycl-common/src/main/java/constant/CalculationStrategyConstants.java                  |   14 +
 ycl-server/src/main/java/com/ycl/task/MonitorTask.java                               |   15 +
 ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java               |    4 
 document/海康api.docx                                                                  |    0 
 ycl-server/src/main/java/com/ycl/task/HKTask.java                                    |    8 
 ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java             |  132 ++++++++++++
 ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml                    |   10 
 ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java                |    8 
 ycl-server/src/main/java/com/ycl/task/FaceTask.java                                  |   15 +
 ycl-server/src/main/java/com/ycl/platform/mapper/PlatformOnlineMapper.java           |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/ImageDetectionResult.java   |    2 
 ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml                       |   19 +
 ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java            |  131 +++++++++++
 ycl-server/src/main/java/com/ycl/task/VideoTask.java                                 |   11 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java    |   10 
 ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java             |    5 
 ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java                |   59 +++++
 27 files changed, 590 insertions(+), 60 deletions(-)

diff --git "a/document/\346\265\267\345\272\267api.docx" "b/document/\346\265\267\345\272\267api.docx"
index c7f8091..90d6642 100644
--- "a/document/\346\265\267\345\272\267api.docx"
+++ "b/document/\346\265\267\345\272\267api.docx"
Binary files differ
diff --git a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java
index a726877..86f1149 100644
--- a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java
+++ b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java
@@ -28,7 +28,10 @@
      * 杞﹁締鏃堕挓鍑嗙‘鎬�
      */
     public static final String Car_ClockAccuracy = "carClockAccuracy";
-
+    /**
+     * 杞﹁締鐩綍涓�鑷寸巼
+     */
+    public static final String Car_DirectConsistent = "carDirectConsistent";
 
     /**
      * 浜鸿劯鏁版嵁涓婁紶鍙婃椂鎬�
@@ -50,8 +53,15 @@
      * 浜鸿劯鏃堕挓鍑嗙‘鎬�
      */
     public static final String Face_ClockAccuracy = "faceClockAccuracy";
+    /**
+     * 浜鸿劯鐩綍涓�鑷寸巼
+     */
+    public static final String Face_DirectConsistent = "faceDirectConsistent";
 
-
+    /**
+     * 涓�鏈轰竴妗f敞鍐岀巼銆佹。妗堣�冩牳姣�
+     */
+    public static final String Video_MonitorRegis_ArchiveRate = "videoMonitorRegisArchiveRate";
     /**
      * 涓�鏈轰竴妗e悎鏍肩巼
      */
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java
index 3afed9b..14e91b0 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java
@@ -6,7 +6,7 @@
 import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
- * 閲囬泦璁惧灞炴�х洃娴嬬粨鏋滐細浜鸿劯锛堣澶囨姄鎷嶅浘鐗囧悎鏍兼�э級
+ * 閲囬泦璁惧灞炴�х洃娴嬬粨鏋滐細浜鸿劯锛堜汉鑴稿崱鍙d俊鎭噰闆嗗噯纭巼锛�
  *
  * @author gonghl
  */
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/ImageDetectionResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/ImageDetectionResult.java
index 34403df..79b84c9 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/ImageDetectionResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/ImageDetectionResult.java
@@ -12,7 +12,7 @@
  * @date锛�2024/8/8 20:36
  */
 @Data
-@Document(collation = "uy_image_detection")
+@Document(collection = "uy_image_detection")
 public class ImageDetectionResult extends BaseResult {
 
     /**
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java
new file mode 100644
index 0000000..3b216a4
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarConsistentCalculation.java
@@ -0,0 +1,132 @@
+package com.ycl.calculate;
+
+import com.alibaba.fastjson2.JSONArray;
+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.vo.TMonitorVO;
+import com.ycl.platform.mapper.CheckIndexCarMapper;
+import com.ycl.platform.mapper.TMonitorMapper;
+import com.ycl.platform.service.ICheckIndexCarService;
+import constant.ApiConstants;
+import constant.CheckConstants;
+import constant.RedisConstant;
+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;
+
+/**
+ * 璁$畻杞﹁締鐩綍涓�鑷寸巼
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class CarConsistentCalculation extends IndexCalculationServe implements CalculationStrategy<TMonitorVO> {
+    @Autowired
+    private CheckIndexCarMapper checkIndexCarMapper;
+    @Autowired
+    private TMonitorMapper monitorMapper;
+    @Autowired
+    private ICheckIndexCarService checkIndexCarService;
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫�
+    private static class AreaStats {
+        int totalSites = 0;
+        int newSites = 0;
+    }
+
+    @Override
+    public void calculate(List<TMonitorVO> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            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);
+            }
+        }
+
+        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+        List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate());
+        List<CheckIndexCar> checkIndexCars = new ArrayList<>();
+        areaStatsMap.forEach((deptId, stats) -> {
+            if (stats.totalSites > 0) {
+                CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList);
+                if (checkIndexCar != null) {
+                    checkIndexCars.add(checkIndexCar);
+                }
+            }
+        });
+
+        checkIndexCarService.saveOrUpdateBatch(checkIndexCars);
+    }
+
+    /**
+     * 绱杞﹁締鐩綍涓�鑷寸巼
+     */
+    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result,Map<String,TMonitor> newMonitorMap) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalSites++;
+        if(newMonitorMap.containsKey(result.getSerialNumber())){
+            stats.newSites++;
+        }
+    }
+
+    /**
+     * 杞﹁締淇℃伅閲囬泦姝g‘鐜�
+     */
+    private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) {
+        CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class);
+        if (checkIndexCar == null) {
+            return null;
+        }
+        //璋冪敤鐩綍涓�鑷寸巼璁$畻鏂规硶
+        Map<String, Object> param = new HashMap<>();
+        param.put("totalSites", stats.totalSites);
+        param.put("newSites", stats.newSites);
+        BigDecimal directoryConstant = directoryConstant(param);
+        checkIndexCar.setDeviceDirectoryConsistent(directoryConstant);
+        return checkIndexCar;
+    }
+
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java
new file mode 100644
index 0000000..a483526
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java
@@ -0,0 +1,131 @@
+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.mapper.CheckIndexFaceMapper;
+import com.ycl.platform.mapper.TMonitorMapper;
+import com.ycl.platform.service.ICheckIndexFaceService;
+import constant.ApiConstants;
+import constant.CheckConstants;
+import constant.RedisConstant;
+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;
+
+/**
+ * 璁$畻杞﹁締鐩綍涓�鑷寸巼
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class FaceConsistentCalculation extends IndexCalculationServe implements CalculationStrategy<TMonitorVO> {
+    @Autowired
+    private CheckIndexFaceMapper checkIndexFaceMapper;
+    @Autowired
+    private TMonitorMapper monitorMapper;
+    @Autowired
+    private ICheckIndexFaceService checkIndexFaceService;
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫�
+    private static class AreaStats {
+        int totalSites = 0;
+        int newSites = 0;
+    }
+
+    @Override
+    public void calculate(List<TMonitorVO> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            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);
+            }
+        }
+
+        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+        List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate());
+        List<CheckIndexFace> checkIndexFaces = new ArrayList<>();
+        areaStatsMap.forEach((deptId, stats) -> {
+            if (stats.totalSites > 0) {
+                CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, checkIndexFaceList);
+                if (checkIndexFace != null) {
+                    checkIndexFaces.add(checkIndexFace);
+                }
+            }
+        });
+
+        checkIndexFaceService.saveOrUpdateBatch(checkIndexFaces);
+    }
+
+    /**
+     * 绱浜鸿劯鐩綍涓�鑷寸巼
+     */
+    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, TMonitorVO result,Map<String,TMonitor> newMonitorMap) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalSites++;
+        if(newMonitorMap.containsKey(result.getSerialNumber())){
+            stats.newSites++;
+        }
+    }
+
+    /**
+     * 浜鸿劯淇℃伅閲囬泦姝g‘鐜�
+     */
+    private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList) {
+        CheckIndexFace checkIndexFace = getCheckIndex(key, checkIndexFaceList, CheckIndexFace.class);
+        if (checkIndexFace == null) {
+            return null;
+        }
+        //璋冪敤鐩綍涓�鑷寸巼璁$畻鏂规硶
+        Map<String, Object> param = new HashMap<>();
+        param.put("totalSites", stats.totalSites);
+        param.put("newSites", stats.newSites);
+        BigDecimal directoryConstant = directoryConstant(param);
+        checkIndexFace.setDeviceDirectoryConsistent(directoryConstant);
+        return checkIndexFace;
+    }
+
+
+}
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 6546b7b..a13d14e 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
@@ -2,18 +2,27 @@
 
 
 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.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;
 
 /**
@@ -25,13 +34,32 @@
     @Autowired
     private YwPointMapper pointMapper;
 
+    @Autowired
+    private TMonitorMapper monitorMapper;
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
     //涓�鏈轰竴妗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);
     }
-
+    //涓�鏈轰竴妗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 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 todayFiles.divide(allFiles, 4, RoundingMode.HALF_UP);
+    }
     //鐐逛綅鍦ㄧ嚎鐜�
     public BigDecimal siteOnline(Map<String, Object> param) {
         BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites"));
@@ -39,6 +67,18 @@
         return onlineSites.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;
+        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"));
@@ -140,7 +180,24 @@
         List<YwPoint> commandImages = pointMapper.selectByTag(null, null, Boolean.TRUE);
         return CollectionUtils.isEmpty(commandImages) ? new ArrayList<>() : commandImages.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
     }
+    //杩斿洖閲嶇偣鎸囨尌鍥惧儚闆嗗悎
+    public List<String> getMonitorFromMongo() {
+        // 鑾峰彇Calendar瀹炰緥锛岄粯璁や娇鐢ㄥ綋鍓嶆椂鍖哄拰璇█鐜
+        Calendar calendar = Calendar.getInstance();
+        // 娓呴櫎Calendar涓殑鎵�鏈夊瓧娈靛�硷紝浠ラ伩鍏嶅畠浠褰撳墠鏃ユ湡鏃堕棿鏈夊奖鍝�
+        calendar.clear();
+        // 璁剧疆骞翠唤銆佹湀浠斤紙娉ㄦ剰锛氭湀浠芥槸浠�0寮�濮嬬殑锛屾墍浠�8鏈堟槸7锛夈�佹棩鏈�
+        calendar.set(Calendar.YEAR, 2024);
+        calendar.set(Calendar.MONTH, Calendar.AUGUST);
+        calendar.set(Calendar.DAY_OF_MONTH, 13);
+        // Calendar.getTime()鏂规硶杩斿洖涓�涓〃绀烘Calendar鏃堕棿鍊肩殑Date瀵硅薄
+        Date date = calendar.getTime();
+        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
+//        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+        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;
diff --git a/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java
new file mode 100644
index 0000000..d654649
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/MonitorRegistrationCalculation.java
@@ -0,0 +1,145 @@
+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.mapper.CheckIndexVideoMapper;
+import com.ycl.platform.mapper.TMonitorMapper;
+import com.ycl.platform.service.ICheckIndexVideoService;
+import constant.ApiConstants;
+import constant.RedisConstant;
+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;
+
+/**
+ * 璁$畻涓�鏈轰竴妗f敞鍐岀巼銆佹。妗堣�冩牳姣�
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class MonitorRegistrationCalculation extends IndexCalculationServe implements CalculationStrategy<TMonitorVO> {
+    @Autowired
+    private CheckIndexVideoMapper checkIndexVideoMapper;
+    @Autowired
+    private ICheckIndexVideoService checkIndexVideoService;
+    @Autowired
+    private RedisTemplate redisTemplate;
+
+    //鍖哄煙瑙嗛鍦ㄧ嚎鐜囩殑鍐呴儴绫�
+    private static class AreaStats {
+        //璧勪骇搴撶櫥璁板湪鐢ㄦ暟
+        int totalSites = 0;
+        //鏈敞鍐岀殑鏁伴噺
+        int newSites = 0;
+        //鍏ㄥ勾鐣欏瓨鏁�
+        int allFiles = 0;
+        //褰撴棩妗f鏁�
+        int todayFiles = 0;
+    }
+
+    @Override
+    public void calculate(List<TMonitorVO> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            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);
+            }
+        }
+
+        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+        List<CheckIndexVideo> checkIndexVideoList = checkIndexVideoMapper.selectToday(DateUtils.getDate());
+        List<CheckIndexVideo> checkIndexVideos = new ArrayList<>();
+        areaStatsMap.forEach((deptId, stats) -> {
+            if (stats.totalSites > 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, TMonitorVO result,Map<String,TMonitor> newMonitors,List<String> todayMonitor) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalSites++;
+        stats.allFiles++;
+        if(newMonitors.containsKey(result.getSerialNumber())){
+            stats.newSites++;
+        }
+        if(todayMonitor.contains(result.getSerialNumber())){
+            stats.todayFiles++;
+        }
+    }
+
+    /**
+     * 瑙嗛鐐逛綅鍦ㄧ嚎鐜�
+     */
+    private CheckIndexVideo createOrUpdateCheckIndexVideo(String key, AreaStats stats, List<CheckIndexVideo> checkIndexVideoList) {
+        CheckIndexVideo checkIndexVideo = getCheckIndex(key, checkIndexVideoList, CheckIndexVideo.class);
+        if (checkIndexVideo == null) {
+            return null;
+        }
+        //璋冪敤涓�鏈轰竴妗f敞鍐岀巼
+        Map<String, Object> param = new HashMap<>();
+        param.put("totalSites", stats.totalSites);
+        param.put("newSites", stats.newSites);
+        BigDecimal monitorRegistration = monitorRegistration(param);
+        checkIndexVideo.setMonitorRegistration(monitorRegistration);
+        //璋冪敤妗f鑰冩牳姣旇绠�
+        Map<String, Object> importantParam = new HashMap<>();
+        param.put("allFiles", stats.allFiles);
+        param.put("todayFiles", stats.todayFiles);
+        BigDecimal archivesRate = archivesRate(importantParam);
+        checkIndexVideo.setArchivesRate(archivesRate);
+
+        return checkIndexVideo;
+    }
+}
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 9a8d1b4..5c4f9ea 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
@@ -88,7 +88,7 @@
         List<CheckIndexVideo> checkIndexVideos = new ArrayList<>();
         areaStatsMap.forEach((deptId, stats) -> {
             if (stats.totalSites > 0) {
-                CheckIndexVideo CheckIndexVideo = createOrUpdateCheckIndexFace(deptId, stats, checkIndexVideoList);
+                CheckIndexVideo CheckIndexVideo = createOrUpdateCheckIndexVideo(deptId, stats, checkIndexVideoList);
                 if (CheckIndexVideo != null) {
                     checkIndexVideos.add(CheckIndexVideo);
                 }
@@ -127,7 +127,7 @@
     /**
      * 瑙嗛鐐逛綅鍦ㄧ嚎鐜�
      */
-    private CheckIndexVideo createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexVideo> checkIndexVideoList) {
+    private CheckIndexVideo createOrUpdateCheckIndexVideo(String key, AreaStats stats, List<CheckIndexVideo> checkIndexVideoList) {
         CheckIndexVideo checkIndexVideo = getCheckIndex(key, checkIndexVideoList, CheckIndexVideo.class);
         if (checkIndexVideo == null) {
             return null;
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 196a70d..7c5c7ea 100644
--- a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
+++ b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
@@ -23,7 +23,8 @@
         calculators.put(CalculationStrategyConstants.Car_DataAccuracy_Url_PicUsability, new CarDeviceSampleCalculation());
         //杞﹁締鏃堕挓鍑嗙‘鎬�
         calculators.put(CalculationStrategyConstants.Car_ClockAccuracy, new CarClockAccuracyCalculation());
-        //TODO锛氳溅杈嗙洰褰曚竴鑷�
+        //杞﹁締鐩綍涓�鑷�
+        calculators.put(CalculationStrategyConstants.Car_DirectConsistent, new CarConsistentCalculation());
 
         //浜鸿劯鐐逛綅鍦ㄧ嚎銆佽鍥惧簱瀵规帴绋冲畾
         calculators.put(CalculationStrategyConstants.Face_SiteOnline_ViewStability, new FaceSnapshotDataCalculation());
@@ -35,8 +36,11 @@
         calculators.put(CalculationStrategyConstants.Face_DataAccuracy_PicUsability, new FaceDeviceSampleCalculation());
         //浜鸿劯鏃堕挓鍑嗙‘鎬�
         calculators.put(CalculationStrategyConstants.Face_ClockAccuracy, new FaceClockAccuracyCalculation());
-        //TODO锛氫汉鑴哥洰褰曚竴鑷�
+        //浜鸿劯鐩綍涓�鑷�
+        calculators.put(CalculationStrategyConstants.Face_DirectConsistent, new FaceConsistentCalculation());
 
+        //涓�鏈轰竴妗f敞鍐岀巼銆佹。妗堣�冩牳姣�
+        calculators.put(CalculationStrategyConstants.Video_MonitorRegis_ArchiveRate,new MonitorRegistrationCalculation())
         //涓�鏈轰竴妗e悎鏍肩巼
         calculators.put(CalculationStrategyConstants.Video_MonitorQualify, new MonitorQualifyCalculation());
         //瑙嗛鐐逛綅鍦ㄧ嚎鐜�
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java b/ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java
index d0406b8..dd9e475 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/HomeController.java
@@ -22,7 +22,6 @@
     private final ITMonitorService tMonitorService;
     private final WorkOrderService workOrderService;
     private final YwPointService ywPointService;
-    private final IContractScoreService contractScoreService;
     private final ICheckScoreService checkScoreService;
 
     @GetMapping("/ywUnitList")
@@ -56,8 +55,8 @@
     }
 
     @GetMapping("/calculate")
-    public AjaxResult calculate() {
-        return AjaxResult.success(contractScoreService.calculate());
+    public AjaxResult calculate(String category) {
+        return AjaxResult.success(checkScoreService.calculate(category));
     }
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java
index a62f559..42a0ce9 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java
@@ -7,6 +7,7 @@
 import com.ycl.platform.domain.entity.CheckScore;
 import enumeration.OperationType;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -80,4 +81,13 @@
      * @return 鏁版嵁
      */
     List<Map<String, Object>> home();
+
+    /**
+     * 棣栭〉鏍哥畻
+     * @param startDate 鏈湀绗竴澶�
+     * @param endDate 褰撳墠鏃堕棿
+     * @param category 鍒嗙被
+     * @return 鏁版嵁
+     */
+    List<Map<String, Object>> calculate(Date startDate, Date endDate, String category);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java
index 9c9ec38..df7532b 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractScoreMapper.java
@@ -4,7 +4,6 @@
 import com.ycl.platform.domain.entity.ContractScore;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 鍚堝悓鎵撳垎Mapper鎺ュ彛
@@ -61,10 +60,4 @@
      * @return 缁撴灉
      */
     public int deleteDefaultScoreByIds(Long[] ids);
-
-    /**
-     * 棣栭〉鏍哥畻
-     * @return 鏍哥畻
-     */
-    List<Map<String, Object>> calculate();
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/PlatformOnlineMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/PlatformOnlineMapper.java
index 1a2a23c..1436cc5 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/PlatformOnlineMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/PlatformOnlineMapper.java
@@ -34,6 +34,6 @@
     IPage getPage(IPage page, @Param("query") DataCenterQuery query);
 
     //鏄ㄦ棩鏁版嵁
-    List<PlatformOnlineVO> sumYesterday(@Param("startDate")String startDate, @Param("endDate")String endDate);
+    List<PlatformOnlineVO> yesterdayData(@Param("startDate")String startDate, @Param("endDate")String endDate);
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java b/ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java
index 7302032..48af587 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ICheckScoreService.java
@@ -55,6 +55,13 @@
      * @return 鏁版嵁
      */
     List<Map<String, Object>> home();
+
+
+    /**
+     * 棣栭〉鏍哥畻
+     * @return 鏍哥畻
+     */
+    List<Map<String, Object>> calculate(String category);
 //    /**
 //     * 鏂板鑰冩牳绉垎鏄庣粏
 //     *
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/IContractScoreService.java b/ycl-server/src/main/java/com/ycl/platform/service/IContractScoreService.java
index 6240574..b50a7f4 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/IContractScoreService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/IContractScoreService.java
@@ -5,7 +5,6 @@
 
 import java.io.Serializable;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 鍚堝悓鎵撳垎Service鎺ュ彛
@@ -48,9 +47,4 @@
      */
     List<ContractScore> getDateRangeScoreByContractId(Long id, String startTime, String endTime);
 
-    /**
-     * 棣栭〉鏍哥畻
-     * @return 鏍哥畻
-     */
-    List<Map<String, Object>> calculate();
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
index e9503ef..decb126 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -295,6 +295,16 @@
         return baseMapper.home();
     }
 
+
+    @Override
+    public List<Map<String, Object>> calculate(String category) {
+        Calendar calendar = Calendar.getInstance();
+        Date endDate = calendar.getTime();
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        Date startDate = calendar.getTime();
+        return scoreMapper.calculate(startDate, endDate, category);
+    }
+
     //    /**
 //     * 鏂板鑰冩牳绉垎
 //     *
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
index 7e46a9c..33d47fe 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractScoreServiceImpl.java
@@ -17,7 +17,6 @@
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -90,8 +89,4 @@
                 .list();
     }
 
-    @Override
-    public List<Map<String, Object>> calculate() {
-        return contractScoreMapper.calculate();
-    }
 }
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 66e5257..fd36a2a 100644
--- a/ycl-server/src/main/java/com/ycl/task/CarTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java
@@ -4,9 +4,12 @@
 import com.ycl.calculate.CalculationStrategy;
 import com.ycl.factory.IndexCalculationFactory;
 import com.ycl.platform.domain.result.HK.*;
+import com.ycl.platform.domain.vo.TMonitorVO;
+import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
 import constant.CalculationStrategyConstants;
+import constant.CheckConstants;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -16,6 +19,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 杞﹁締璁$畻鑰冩牳鎸囨爣浠诲姟
@@ -26,7 +30,8 @@
 public class CarTask {
     @Autowired
     private MongoTemplate mongoTemplate;
-
+    @Autowired
+    private TMonitorMapper monitorMapper;
     public void siteOnlineTask() {
         Date yesterday = DateUtils.addDays(new Date(), -1);
         //璁$畻鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
@@ -95,8 +100,12 @@
         calculator.calculate(results);
     }
 
-    public void test() {
-        Date yesterday = DateUtils.addDays(new Date(), -1);
-        //TODO锛氫竴鏈轰竴妗� 鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼
+    public void directConsistentTask() {
+        //杞﹁締鐩綍涓�鑷寸巼
+        List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList();
+        List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO -> tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Car + "")).collect(Collectors.toList());
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DirectConsistent);
+        calculator.calculate(list);
     }
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/task/FaceTask.java b/ycl-server/src/main/java/com/ycl/task/FaceTask.java
index 125770d..3d7cfc3 100644
--- a/ycl-server/src/main/java/com/ycl/task/FaceTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/FaceTask.java
@@ -4,9 +4,12 @@
 import com.ycl.calculate.CalculationStrategy;
 import com.ycl.factory.IndexCalculationFactory;
 import com.ycl.platform.domain.result.HK.*;
+import com.ycl.platform.domain.vo.TMonitorVO;
+import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
 import constant.CalculationStrategyConstants;
+import constant.CheckConstants;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -16,6 +19,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 浜鸿劯璁$畻鑰冩牳鎸囨爣浠诲姟
@@ -26,6 +30,8 @@
 public class FaceTask {
     @Autowired
     private MongoTemplate mongoTemplate;
+    @Autowired
+    private TMonitorMapper monitorMapper;
 
     public void siteOnlineTask() {
         Date yesterday = DateUtils.addDays(new Date(), -1);
@@ -80,8 +86,11 @@
         calculator.calculate(results);
     }
 
-    public void test() {
-        Date yesterday = DateUtils.addDays(new Date(), -1);
-        //TODO锛氫竴鏈轰竴妗� 鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼
+    public void directConsistentTask() {
+        //浜鸿劯鐩綍涓�鑷寸巼
+        List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList();
+        List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO -> tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Face + "")).collect(Collectors.toList());
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_DirectConsistent);
+        calculator.calculate(list);
     }
 }
diff --git a/ycl-server/src/main/java/com/ycl/task/HKTask.java b/ycl-server/src/main/java/com/ycl/task/HKTask.java
index bdcda0d..79123b7 100644
--- a/ycl-server/src/main/java/com/ycl/task/HKTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -231,7 +231,7 @@
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
                     .and("dataType").is(ApiConstants.HK_DataType_CAR));
-            DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorParam.class);
+            DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
             carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR));
             mongoTemplate.insertAll(carList);
@@ -243,16 +243,16 @@
         faceParam.setPageSize(ApiConstants.HKPageSize);
         faceParam.setDate(DateUtils.getDate());
         faceParam.setDataType(ApiConstants.HK_DataType_FACE);
-        List<SnapshotDelayMonitorParam> faceList = HkApiUtil.sendAPI("/api/dqd/service/rs/v1/data/snapAgingDetail/query", faceParam, SnapshotDelayMonitorParam.class);
+        List<SnapshotDelayMonitorResult> faceList = HkApiUtil.sendAPI("/api/dqd/service/rs/v1/data/snapAgingDetail/query", faceParam, SnapshotDelayMonitorResult.class);
 
         if (!CollectionUtils.isEmpty(faceList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
                     .and("dataType").is(ApiConstants.HK_DataType_FACE));
-            DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorParam.class);
+            DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
-            carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE));
+            faceList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE));
             mongoTemplate.insertAll(faceList);
         }
         //TODO:宸ュ崟
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 76725ba..9dc6986 100644
--- a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -55,7 +55,18 @@
     //鍚屾mongodb涓�鏈轰竴妗e埌鏁版嵁搴�
     @Transactional
     public void synchronize() {
-        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+        // 鑾峰彇Calendar瀹炰緥锛岄粯璁や娇鐢ㄥ綋鍓嶆椂鍖哄拰璇█鐜
+        Calendar calendar = Calendar.getInstance();
+        // 娓呴櫎Calendar涓殑鎵�鏈夊瓧娈靛�硷紝浠ラ伩鍏嶅畠浠褰撳墠鏃ユ湡鏃堕棿鏈夊奖鍝�
+        calendar.clear();
+        // 璁剧疆骞翠唤銆佹湀浠斤紙娉ㄦ剰锛氭湀浠芥槸浠�0寮�濮嬬殑锛屾墍浠�8鏈堟槸7锛夈�佹棩鏈�
+        calendar.set(Calendar.YEAR, 2024);
+        calendar.set(Calendar.MONTH, Calendar.AUGUST);
+        calendar.set(Calendar.DAY_OF_MONTH, 13);
+        // Calendar.getTime()鏂规硶杩斿洖涓�涓〃绀烘Calendar鏃堕棿鍊肩殑Date瀵硅薄
+        Date date = calendar.getTime();
+        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
+//        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
         List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class);
         //鏁版嵁搴搈onitor琛ㄦ暟鎹�
         Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
@@ -73,7 +84,7 @@
         List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData);
         List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList());
 
-        //TODO:鍏ㄥ勾鐣欏瓨杩樻槸鍗曟鐣欏瓨
+        //鍏ㄥ勾鐣欏瓨
         for (MonitorQualifyResult result : oneMachineFileResults) {
             TMonitor monitor = getMonitor(result, monitorVOMap);
             YwPoint point = getPoint(result, pointMap, importantSite);
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 7b0f7ec..38e698b 100644
--- a/ycl-server/src/main/java/com/ycl/task/VideoTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -10,8 +10,10 @@
 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.domain.vo.TMonitorVO;
 import com.ycl.platform.mapper.CheckIndexVideoMapper;
 import com.ycl.platform.mapper.PlatformOnlineMapper;
+import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.service.PlatformOnlineService;
 import com.ycl.system.mapper.SysDeptMapper;
 import com.ycl.utils.DateUtils;
@@ -43,7 +45,8 @@
     private MongoTemplate mongoTemplate;
     @Autowired
     private PlatformOnlineMapper platformOnlineMapper;
-
+    @Autowired
+    private TMonitorMapper monitorMapper;
 
     public void siteOnlineTask() {
         Date yesterday = DateUtils.addDays(new Date(), -1);
@@ -71,7 +74,9 @@
 
     public void oneMonitorFileTask() {
         //璁$畻涓�鏈轰竴妗f敞鍐岀巼銆佹。妗堣�冩牳姣�
-
+        List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList();
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_Usability);
+        calculator.calculate(tMonitorVOS);
     }
 
     public void oneMonitorQualifyTask(){
@@ -86,7 +91,7 @@
     }
     public void platformOnlineTask() {
         //璁$畻骞冲彴鍦ㄧ嚎鐜�
-        List<PlatformOnlineVO> list = platformOnlineMapper.sumYesterday(DateUtils.getMouthStart(new Date()), DateUtils.getMouthEnd(new Date()));
+        List<PlatformOnlineVO> list = platformOnlineMapper.yesterdayData(DateUtils.getMouthStart(new Date()), DateUtils.getMouthEnd(new Date()));
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_PlatformOnline);
         calculator.calculate(list);
     }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
index 6c5fa75..6096ce2 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
@@ -137,6 +137,7 @@
     </select>
 
     <select id="home" resultType="java.util.Map">
+        <![CDATA[
         SELECT
             DATE_FORMAT(cs.create_time, '%Y-%m-%d %h:%i:%s') AS createTime,
             d.area,
@@ -147,8 +148,24 @@
             t_check_score cs
                 LEFT JOIN t_check_template ct ON cs.template_id = ct.id
                 LEFT JOIN sys_dept d ON cs.dept_id = d.dept_id
-        WHERE cs.score > ct.alarm_score
+        WHERE cs.score < ct.alarm_score
         ORDER BY cs.create_time DESC
+        ]]>
+    </select>
+
+    <select id="calculate" resultType="java.util.Map">
+        SELECT
+            dept_name AS deptName,
+            ROUND(AVG(score)) AS score
+        FROM
+            t_check_score tcs
+                LEFT JOIN sys_dept d ON tcs.dept_id = d.dept_id
+        WHERE
+            examine_tag = 1
+          AND examine_category = #{category}
+          AND DATE_FORMAT(tcs.create_time, '%Y-%m') BETWEEN DATE_FORMAT(#{startDate}, '%Y-%m') AND DATE_FORMAT(#{endDate}, '%Y-%m')
+        GROUP BY tcs.dept_id
+        ORDER BY score DESC, tcs.dept_id
     </select>
 
 </mapper>
\ No newline at end of file
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml
index 9446601..fdfb7ca 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ContractScoreMapper.xml
@@ -112,14 +112,4 @@
         </foreach>
     </delete>
 
-    <select id="calculate" resultType="java.util.Map">
-        SELECT
-            SUBSTRING_INDEX(rule_name, '/', 1) AS name,
-            COUNT(*) AS num,
-            -SUM(score) AS score
-        FROM t_contract_score
-        WHERE auditing_status = 'PASS' AND deleted = 0
-        GROUP BY SUBSTRING_INDEX(rule_name, '/', 1)
-    </select>
-
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/PlatformOnlineMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/PlatformOnlineMapper.xml
index d52330e..ef4cec1 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/PlatformOnlineMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/PlatformOnlineMapper.xml
@@ -47,7 +47,7 @@
     </select>
 
 
-    <select id="sumYesterday" resultMap="BaseResultMap">
+    <select id="yesterdayData" resultMap="BaseResultMap">
         select * from t_platform_online
         where create_date between #{startDate} and #{endDate}
     </select>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
index 21f0424..9df4474 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
@@ -112,11 +112,13 @@
     <select id="ywUnitCount" resultType="java.util.Map">
         SELECT
             u.unit_name AS name,
-            COUNT(tcs.id) AS num
+            COUNT(tcs.id) AS num,
+            100 - SUM(score) AS score
         FROM
             t_contract_score tcs
                 LEFT JOIN t_yw_unit u ON tcs.unit_id = u.id
         WHERE tcs.deleted = 0
         GROUP BY tcs.unit_id
+        ORDER BY score DESC
     </select>
 </mapper>

--
Gitblit v1.8.0