From d1883c9da86e3e36e0c997554ad79b44a8f35494 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 01 八月 2024 18:05:13 +0800
Subject: [PATCH] 数据上传及时性

---
 ycl-server/src/main/java/com/ycl/task/HKTask.java                            |   30 ++--
 ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java  |    2 
 ycl-server/src/main/java/com/ycl/task/CarTask.java                           |   22 ++
 ycl-server/src/main/java/com/ycl/feign/UYClient.java                         |    2 
 ycl-common/src/main/java/constant/ApiConstants.java                          |    6 
 ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java        |    6 
 ycl-server/src/main/java/com/ycl/task/FaceTask.java                          |   18 ++
 ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java  |  141 ++++++++++++++++++++
 ycl-common/src/main/java/constant/CalculationStrategyConstants.java          |   12 +
 ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java   |    2 
 ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java |  136 +++++++++++++++++++
 ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java                    |    2 
 ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java        |   14 +
 13 files changed, 359 insertions(+), 34 deletions(-)

diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java
index 026249d..105d11d 100644
--- a/ycl-common/src/main/java/constant/ApiConstants.java
+++ b/ycl-common/src/main/java/constant/ApiConstants.java
@@ -10,9 +10,9 @@
     public final static Integer pageNo = 1;
     public final static Integer pageSize = 5000;
     //璇锋眰鍙傛暟dataType-鍗″彛杩囪溅
-    public final static Integer HK_DATATYPE_CAR = 1;
+    public final static Integer HK_DataType_CAR = 1;
     //璇锋眰鍙傛暟dataType-浜鸿劯鏁版嵁
-    public final static Integer HK_DATATYPE_FACE = 2;
+    public final static Integer HK_DataType_FACE = 2;
 
     //鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋� 姝e父
     public final static Integer HK_SnapCount_ResultType_Normal = 1;
@@ -22,7 +22,7 @@
     public final static Integer HK_SnapCount_ResultType_Descent = 3;
 
     //璇锋眰鍙傛暟dataType 鏁版嵁閲忓皯
-    public final static Integer HK_DATATYPE_ResultType_Low = 4;
+    public final static Integer HK_DataType_ResultType_Low = 4;
 
     //缁忕含搴︽娴嬬粨鏋� 姝e父
     public final static Integer HK_Info_LayType_Normal = 1;
diff --git a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java
index d1228fe..667e3d1 100644
--- a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java
+++ b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java
@@ -8,7 +8,7 @@
     /**
      * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
      */
-    public static final String CAR_SiteOnline_ViewStability = "carSiteOnlineViewStability";
+    public static final String Car_SiteOnline_ViewStability = "carSiteOnlineViewStability";
     /**
      * 浜鸿劯鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
      */
@@ -16,9 +16,17 @@
     /**
      * 杞﹁締鍗″彛灞炴�х洃娴嬬粨鏋�
      */
-    public static final String CAR_InfoAccuracy = "carInfoAccuracy";
+    public static final String Car_InfoAccuracy = "carInfoAccuracy";
     /**
      * 浜鸿劯灞炴�х洃娴嬬粨鏋�
      */
     public static final String Face_InfoAccuracy = "faceInfoAccuracy";
+    /**
+     * 杞﹁締鏁版嵁涓婁紶鍙婃椂鎬�
+     */
+    public static final String Car_SnapshotDelay = "carSnapshotDelay";
+    /**
+     * 浜鸿劯鏁版嵁涓婁紶鍙婃椂鎬�
+     */
+    public static final String Face_SnapshotDelay = "faceSnapshotDelay";
 }
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 c46d4d3..f1d31d6 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java
@@ -129,7 +129,7 @@
         Map<String, Object> siteOnlineParam = new HashMap<>();
         siteOnlineParam.put("totalSites", stats.totalSites);
         siteOnlineParam.put("qualifySite", stats.qualifySite);
-        BigDecimal infoAccuracy = InfoAccuracy(siteOnlineParam);
+        BigDecimal infoAccuracy = infoAccuracy(siteOnlineParam);
         checkIndexCar.setVehicleInformationCollectionAccuracy(infoAccuracy);
         return checkIndexCar;
     }
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java
new file mode 100644
index 0000000..f58e3e9
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java
@@ -0,0 +1,141 @@
+package com.ycl.calculate;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.domain.result.HK.SnapshotDelayMonitorResult;
+import com.ycl.platform.mapper.CheckIndexCarMapper;
+import com.ycl.platform.service.ICheckIndexCarService;
+import com.ycl.platform.service.ITMonitorService;
+import com.ycl.system.mapper.SysConfigMapper;
+import constant.ApiConstants;
+import constant.CheckConstants;
+import constant.CheckSnapCountConstants;
+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.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 璁$畻杞﹁締澶囨姄鎷嶆暟鎹笂浼犲強鏃舵��
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 寰幆map璁$畻鏁版嵁涓婁紶鍙婃椂鎬�
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class CarSnapshotDelayCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDelayMonitorResult> {
+    @Autowired
+    private CheckIndexCarMapper checkIndexCarMapper;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ITMonitorService monitorService;
+    @Autowired
+    private ICheckIndexCarService checkIndexCarService;
+
+    //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
+    private static class AreaStats {
+        int totalCount = 0;
+        //0-180s
+        int delayCount1 = 0;
+        //180-300s
+        int delayCount2 = 0;
+        //300-600s
+        int delayCount3 = 0;
+    }
+
+    @Override
+    public void calculate(List<SnapshotDelayMonitorResult> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+
+        //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap
+        Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>()
+                        .in("serial_number", list.stream().map(SnapshotDelayMonitorResult::getExternalIndexCode).collect(Collectors.toList())))
+                .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
+        //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚�
+        List<String> provinceIds = getProvince();
+
+        Map<String, AreaStats> areaStatsMap = new HashMap<>();
+        for (SnapshotDelayMonitorResult result : list) {
+            TMonitor monitor = monitorMap.get(result.getExternalIndexCode());
+            if (monitor == null) continue;
+
+            String deptId = monitor.getDeptId().toString();
+            updateAreaStats(areaStatsMap, deptId, result);
+
+            // 澶勭悊鐪佸巺鏁版嵁
+            if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) {
+                String provinceKey = "Province_" + deptId;
+                updateAreaStats(areaStatsMap, provinceKey, result);
+            }
+        }
+
+        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+        List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate());
+        List<CheckIndexCar> checkIndexCars = new ArrayList<>();
+        areaStatsMap.forEach((deptId, stats) -> {
+            if (stats.totalCount > 0) {
+                CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList);
+                checkIndexCars.add(checkIndexCar);
+            }
+        });
+
+        checkIndexCarService.saveOrUpdateBatch(checkIndexCars);
+    }
+
+    /**
+     * 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
+     */
+    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalCount += result.getDataCount();
+        stats.delayCount1 += result.getDataDelayCount1();
+        stats.delayCount2 += result.getDataDelayCount2();
+        stats.delayCount3 += result.getDataDelayCount3();
+    }
+
+
+    /**
+     * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
+     */
+    private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) {
+        CheckIndexCar checkIndexCar;
+
+        // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁
+        Optional<CheckIndexCar> existingCar = checkIndexCarList.stream()
+                .filter(car -> key.equals(car.getDeptId().toString()) &&
+                        (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(car.getExamineTag())
+                                : CheckConstants.Examine_Tag_County.equals(car.getExamineTag())))
+                .findFirst();
+
+        if (existingCar.isPresent()) {
+            checkIndexCar = existingCar.get();
+        } else {
+            checkIndexCar = new CheckIndexCar();
+            checkIndexCar.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key));
+            checkIndexCar.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County);
+            checkIndexCar.setCreateTime(new Date());
+        }
+
+        //璋冪敤鎶撴媿涓婁紶鍙婃椂鎬ц绠楁柟娉�
+        Map<String, Object> param = new HashMap<>();
+        param.put("totalCount", stats.totalCount);
+        param.put("delayCount1", stats.delayCount1);
+        param.put("delayCount2", stats.delayCount2);
+        param.put("delayCount3", stats.delayCount3);
+        BigDecimal index = snapshopDelay(param);
+        checkIndexCar.setSiteOnline(index);
+        return checkIndexCar;
+    }
+}
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 0cdabf8..3eef548 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java
@@ -125,7 +125,7 @@
         Map<String, Object> siteOnlineParam = new HashMap<>();
         siteOnlineParam.put("totalSites", stats.totalSites);
         siteOnlineParam.put("qualifySite", stats.qualifySite);
-        BigDecimal infoAccuracy = InfoAccuracy(siteOnlineParam);
+        BigDecimal infoAccuracy = infoAccuracy(siteOnlineParam);
         checkIndexFace.setFaceInformationCollectionAccuracy(infoAccuracy);
         return checkIndexFace;
     }
diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java
new file mode 100644
index 0000000..8013800
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java
@@ -0,0 +1,136 @@
+package com.ycl.calculate;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ycl.platform.domain.entity.CheckIndexFace;
+import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult;
+import com.ycl.platform.mapper.CheckIndexFaceMapper;
+import com.ycl.platform.service.ICheckIndexFaceService;
+import com.ycl.platform.service.ITMonitorService;
+import com.ycl.system.mapper.SysConfigMapper;
+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.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 璁$畻浜鸿劯璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 寰幆map璁$畻鏁版嵁涓婁紶鍙婃椂鎬�
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class FaceSnapshotDelayCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDelayMonitorResult> {
+    @Autowired
+    private CheckIndexFaceMapper checkIndexFaceMapper;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ITMonitorService monitorService;
+    @Autowired
+    private ICheckIndexFaceService checkIndexFaceService;
+
+    //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
+    private static class AreaStats {
+        int totalCount = 0;
+        //0-180s
+        int delayCount1 = 0;
+        //180-300s
+        int delayCount2 = 0;
+        //300-600s
+        int delayCount3 = 0;
+    }
+
+    @Override
+    public void calculate(List<SnapshotDelayMonitorResult> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+
+        //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap
+        Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>()
+                        .in("serial_number", list.stream().map(SnapshotDelayMonitorResult::getExternalIndexCode).collect(Collectors.toList())))
+                .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
+        //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚�
+        List<String> provinceIds = getProvince();
+
+        Map<String, AreaStats> areaStatsMap = new HashMap<>();
+        for (SnapshotDelayMonitorResult result : list) {
+            TMonitor monitor = monitorMap.get(result.getExternalIndexCode());
+            if (monitor == null) continue;
+
+            String deptId = monitor.getDeptId().toString();
+            updateAreaStats(areaStatsMap, deptId, result);
+
+            // 澶勭悊鐪佸巺鏁版嵁
+            if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) {
+                String provinceKey = "Province_" + deptId;
+                updateAreaStats(areaStatsMap, provinceKey, result);
+            }
+        }
+
+        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+        List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate());
+        List<CheckIndexFace> checkIndexFaces = new ArrayList<>();
+        areaStatsMap.forEach((deptId, stats) -> {
+            if (stats.totalCount > 0) {
+                CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, checkIndexFaceList);
+                checkIndexFaces.add(checkIndexFace);
+            }
+        });
+
+        checkIndexFaceService.saveOrUpdateBatch(checkIndexFaces);
+    }
+
+    /**
+     * 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
+     */
+    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalCount += result.getDataCount();
+        stats.delayCount1 += result.getDataDelayCount1();
+        stats.delayCount2 += result.getDataDelayCount2();
+        stats.delayCount3 += result.getDataDelayCount3();
+    }
+
+
+    /**
+     * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
+     */
+    private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList) {
+        CheckIndexFace checkIndexFace;
+
+        // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁
+        Optional<CheckIndexFace> existingFace = checkIndexFaceList.stream()
+                .filter(face -> key.equals(face.getDeptId().toString()) &&
+                        (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(face.getExamineTag())
+                                : CheckConstants.Examine_Tag_County.equals(face.getExamineTag())))
+                .findFirst();
+
+        if (existingFace.isPresent()) {
+            checkIndexFace = existingFace.get();
+        } else {
+            checkIndexFace = new CheckIndexFace();
+            checkIndexFace.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key));
+            checkIndexFace.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County);
+            checkIndexFace.setCreateTime(new Date());
+        }
+
+        //璋冪敤鎶撴媿涓婁紶鍙婃椂鎬ц绠楁柟娉�
+        Map<String, Object> param = new HashMap<>();
+        param.put("totalCount", stats.totalCount);
+        param.put("delayCount1", stats.delayCount1);
+        param.put("delayCount2", stats.delayCount2);
+        param.put("delayCount3", stats.delayCount3);
+        BigDecimal index = snapshopDelay(param);
+        checkIndexFace.setSiteOnline(index);
+        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 4362c05..6d5d7b7 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
@@ -42,12 +42,24 @@
     }
 
     //鏍囨敞姝g‘鐜�
-    public BigDecimal InfoAccuracy(Map<String, Object> param) {
+    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);
     }
 
+    //鏁版嵁涓婁紶鍙婃椂鎬�
+    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 List<String> getProvince() {
         // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹�
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 1ad511a..912cd56 100644
--- a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
+++ b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
@@ -10,10 +10,12 @@
     private static final Map<String, CalculationStrategy> calculators = new HashMap<>();
 
     static {
-        calculators.put(CalculationStrategyConstants.CAR_SiteOnline_ViewStability, new CarSiteOnlineCalculation());
+        calculators.put(CalculationStrategyConstants.Car_SiteOnline_ViewStability, new CarSiteOnlineCalculation());
         calculators.put(CalculationStrategyConstants.Face_SiteOnline_ViewStability, new FaceSiteOnlineCalculation());
-        calculators.put(CalculationStrategyConstants.CAR_InfoAccuracy, new CarInFoAccuracyCalculation());
+        calculators.put(CalculationStrategyConstants.Car_InfoAccuracy, new CarInFoAccuracyCalculation());
         calculators.put(CalculationStrategyConstants.Face_InfoAccuracy, new FaceInFoAccuracyCalculation());
+        calculators.put(CalculationStrategyConstants.Car_SnapshotDelay, new CarSnapshotDelayCalculation());
+        calculators.put(CalculationStrategyConstants.Face_SnapshotDelay, new FaceSnapshotDelayCalculation());
     }
 
     public static CalculationStrategy getCalculator(String indexName) {
diff --git a/ycl-server/src/main/java/com/ycl/feign/UYClient.java b/ycl-server/src/main/java/com/ycl/feign/UYClient.java
index 44d25b8..7a5ccad 100644
--- a/ycl-server/src/main/java/com/ycl/feign/UYClient.java
+++ b/ycl-server/src/main/java/com/ycl/feign/UYClient.java
@@ -15,7 +15,7 @@
  */
 
 @Component
-@FeignClient(name = "UYClient", url = "${request.youYunDomain}", configuration = YYFeignConfig.class)
+@FeignClient(name = "UYClient", url = "${request.youYunDomain}", configuration = UYFeignConfig.class)
 public interface UYClient {
 
     /**
diff --git a/ycl-server/src/main/java/com/ycl/feign/YYFeignConfig.java b/ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java
similarity index 95%
rename from ycl-server/src/main/java/com/ycl/feign/YYFeignConfig.java
rename to ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java
index cdc7833..d11f33e 100644
--- a/ycl-server/src/main/java/com/ycl/feign/YYFeignConfig.java
+++ b/ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java
@@ -11,7 +11,7 @@
  * 浼樹簯鎺ュ彛閰嶇疆
  */
 @Configuration
-public class YYFeignConfig {
+public class UYFeignConfig {
     /**
      * 娉ㄥ叆鎷︽埅鍣�
      */
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 e90d9ab..5608389 100644
--- a/ycl-server/src/main/java/com/ycl/task/CarTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java
@@ -5,6 +5,7 @@
 import com.ycl.factory.IndexCalculationFactory;
 import com.ycl.platform.domain.result.HK.CrossDetailResult;
 import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
+import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
 import constant.CalculationStrategyConstants;
@@ -34,19 +35,32 @@
         Query query = new Query();
         query.addCriteria(Criteria
                 .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
-                .and("dataType").is(ApiConstants.HK_DATATYPE_CAR));
+                .and("dataType").is(ApiConstants.HK_DataType_CAR));
         List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
-        CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.CAR_SiteOnline_ViewStability);
+        CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline_ViewStability);
         calculator.calculate(results);
     }
-    public void InfoAccuracyTask(){
+    public void infoAccuracyTask(){
         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<CrossDetailResult> results = mongoTemplate.find(query, CrossDetailResult.class);
-        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.CAR_InfoAccuracy);
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_InfoAccuracy);
         calculator.calculate(results);
     }
+    public void snapShopDelay(){
+        Date yesterday = DateUtils.addDays(new Date(), -1);
+        //璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
+        Query query = new Query();
+        query.addCriteria(Criteria
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
+                .and("dataType").is(ApiConstants.HK_DataType_CAR));
+        List<SnapshotDelayMonitorResult> results = mongoTemplate.find(query, SnapshotDelayMonitorResult.class);
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SnapshotDelay);
+        calculator.calculate(results);
+    }
+
+
 }
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 23522d2..f258b5a 100644
--- a/ycl-server/src/main/java/com/ycl/task/FaceTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/FaceTask.java
@@ -6,6 +6,7 @@
 import com.ycl.platform.domain.result.HK.CrossDetailResult;
 import com.ycl.platform.domain.result.HK.MonitoringDetailResult;
 import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
+import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
 import constant.CalculationStrategyConstants;
@@ -35,9 +36,9 @@
         Query query = new Query();
         query.addCriteria(Criteria
                 .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
-                .and("dataType").is(ApiConstants.HK_DATATYPE_FACE));
+                .and("dataType").is(ApiConstants.HK_DataType_FACE));
         List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
-        CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline_ViewStability);
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline_ViewStability);
         calculator.calculate(results);
     }
     public void InfoAccuracyTask(){
@@ -47,7 +48,18 @@
         query.addCriteria(Criteria
                 .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
         List<MonitoringDetailResult> results = mongoTemplate.find(query, MonitoringDetailResult.class);
-        CalculationStrategy<MonitoringDetailResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_InfoAccuracy);
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_InfoAccuracy);
+        calculator.calculate(results);
+    }
+    public void snapShopDelay(){
+        Date yesterday = DateUtils.addDays(new Date(), -1);
+        //璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
+        Query query = new Query();
+        query.addCriteria(Criteria
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
+                .and("dataType").is(ApiConstants.HK_DataType_FACE));
+        List<SnapshotDelayMonitorResult> results = mongoTemplate.find(query, SnapshotDelayMonitorResult.class);
+        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SnapshotDelay);
         calculator.calculate(results);
     }
 }
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 dd81b77..376f750 100644
--- a/ycl-server/src/main/java/com/ycl/task/HKTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -86,33 +86,33 @@
         log.info("寮�濮嬫墽琛屾姄鎷嶆暟鎹噺妫�娴嬬粨鏋滄暟鎹悓姝�");
         /** 杞﹁締鏁版嵁 */
         SnapshotDataMonitorParam carParam = new SnapshotDataMonitorParam();
-        carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR);
+        carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR);
         JSONObject carJsonObject = hkClient.SnapshotDataMonitor(carParam);
         List<SnapshotDataMonitorResult> carList = getDataList(carJsonObject, SnapshotDataMonitorResult.class, "杞﹁締鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹�");
         if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
-                    .and("dataType").is(ApiConstants.HK_DATATYPE_CAR));
+                    .and("dataType").is(ApiConstants.HK_DataType_CAR));
             DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
-            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_CAR));
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR));
             mongoTemplate.insert(carList);
         }
 
         /** 浜鸿劯鏁版嵁 */
         SnapshotDataMonitorParam faceParam = new SnapshotDataMonitorParam();
-        faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_FACE);
+        faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_FACE);
         JSONObject faceJsonObject = hkClient.SnapshotDataMonitor(carParam);
         List<SnapshotDataMonitorResult> faceList = getDataList(faceJsonObject, SnapshotDataMonitorResult.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));
+                    .and("dataType").is(ApiConstants.HK_DataType_FACE));
             DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
-            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_FACE));
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE));
             mongoTemplate.insert(faceList);
         }
         //TODO:宸ュ崟
@@ -164,7 +164,7 @@
         log.info("寮�濮嬫墽琛屾暟鎹畬鏁存�х洃娴嬬粨鏋滄暟鎹悓姝�");
         //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�
         DataIntegrityMonitoringParam param = new DataIntegrityMonitoringParam();
-        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR);
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR);
         JSONObject jsonObject = hkClient.DataIntegrityMonitoring(param);
         List<DataIntegrityMonitoringResult> faceList = getDataList(jsonObject, DataIntegrityMonitoringResult.class, "鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋滄暟鎹负绌�");
         if (!CollectionUtils.isEmpty(faceList)) {
@@ -184,7 +184,7 @@
         log.info("寮�濮嬫墽琛屽睘鎬ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹悓姝�");
         //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�
         AttrRecognitionParam param = new AttrRecognitionParam();
-        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR);
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR);
         JSONObject jsonObject = hkClient.AttrRecognitionMonitor(param);
         List<AttrRecognitionMonitorResult> faceList = getDataList(jsonObject, AttrRecognitionMonitorResult.class, "灞炴�ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹负绌�");
         if (!CollectionUtils.isEmpty(faceList)) {
@@ -206,33 +206,33 @@
         //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�
         /** 杞﹁締鏁版嵁 */
         SnapshotDelayMonitorParam carParam = new SnapshotDelayMonitorParam();
-        carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR);
+        carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR);
         JSONObject carJsonObject = hkClient.SnapshotDelayMonitor(carParam);
         List<SnapshotDelayMonitorResult> carList = getDataList(carJsonObject, SnapshotDelayMonitorResult.class, "杞﹁締鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹�");
         if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
-                    .and("dataType").is(ApiConstants.HK_DATATYPE_CAR));
+                    .and("dataType").is(ApiConstants.HK_DataType_CAR));
             DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorParam.class);
             //瀛樻斁鍦╩ongo涓�
-            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_CAR));
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR));
             mongoTemplate.insert(carList);
         }
 
         /** 浜鸿劯鏁版嵁 */
         SnapshotDelayMonitorParam faceParam = new SnapshotDelayMonitorParam();
-        faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_FACE);
+        faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_FACE);
         JSONObject faceJsonObject = hkClient.SnapshotDelayMonitor(faceParam);
         List<SnapshotDelayMonitorParam> faceList = getDataList(faceJsonObject, SnapshotDelayMonitorParam.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));
+                    .and("dataType").is(ApiConstants.HK_DataType_FACE));
             DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorParam.class);
             //瀛樻斁鍦╩ongo涓�
-            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_FACE));
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE));
             mongoTemplate.insert(faceList);
         }
         //TODO:宸ュ崟
@@ -244,7 +244,7 @@
         log.info("寮�濮嬫墽琛屽浘鐗囪闂洃娴嬬粨鏋滄暟鎹悓姝�");
         //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜囥�佽溅杈嗗崱鍙h澶噓rl鍙敤鎬�
         PicAccessParam param = new PicAccessParam();
-        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR);
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR);
         JSONObject jsonObject = hkClient.PicAccessMonitor(param);
         List<PicAccessResult> faceList = getDataList(jsonObject, PicAccessResult.class, "鍥剧墖璁块棶鐩戞祴缁撴灉鏁版嵁涓虹┖");
         if (!CollectionUtils.isEmpty(faceList)) {

--
Gitblit v1.8.0