From c0a6471efcf392e54aeefe318a27d5da78220fd7 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 19 八月 2024 16:32:51 +0800
Subject: [PATCH] 人脸指标计算测试+修改

---
 ycl-common/src/main/java/constant/ApiConstants.java                                    |    4 +
 ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java             |    1 
 ycl-server/src/main/java/com/ycl/task/FaceTask.java                                    |   35 +++++++++--
 ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java           |    2 
 ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java            |   54 ++++++++++++++----
 ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java              |    4 
 ycl-server/src/main/java/com/ycl/task/CarTask.java                                     |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java |    3 
 ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java            |   14 +++-
 ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml                     |    2 
 10 files changed, 90 insertions(+), 31 deletions(-)

diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java
index 420f200..9037425 100644
--- a/ycl-common/src/main/java/constant/ApiConstants.java
+++ b/ycl-common/src/main/java/constant/ApiConstants.java
@@ -75,6 +75,8 @@
     /** 鑰冩牳鎸囨爣 鏉′欢鍙傛暟  */
     //杞﹁締鑰冩牳锛岀偣浣嶅湪绾跨巼锛屽尯鍘夸笉灏戜簬40璺�
     public final static Integer Check_Car_SiteOnline = 40;
+    public final static Integer Check_Face_SiteOnline = 40;
     //杞﹁締鍦ㄧ嚎鐜�  Redis 姣忔湀鏁版嵁涓柇娆℃暟 Hash key
-    public final static String Check_Car_ViewConnect = "ViewConnectNoData";
+    public final static String Check_Car_ViewConnect = "CarViewConnectNoData";
+    public final static String Check_Face_ViewConnect = "FaceViewConnectNoData";
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java
index 655f5a4..1281e23 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java
@@ -60,7 +60,8 @@
     /**
      * 浜鸿劯鍚堟牸鎬х浉鍏虫暟鎹�
      */
-    private FaceEligibility faceElig;
+    //TODO:鍙傛暟鍚嶄慨鏀圭湅鎺ュ彛鏄惁鏈夊弬鏁�
+    private FaceEligibility faceEligibility;
 
     // 鍐呭祵瀵硅薄瀹氫箟
 
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 e447cec..33469c9 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
@@ -111,7 +111,6 @@
     /**
      * 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
      */
-    //TODO:鏃犳暟鎹鐞�
     private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) {
         //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
         AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java
index 318c549..88e4b7e 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceConsistentCalculation.java
@@ -27,7 +27,7 @@
 import java.util.stream.Collectors;
 
 /**
- * 璁$畻杞﹁締鐩綍涓�鑷寸巼
+ * 璁$畻浜鸿劯鐩綍涓�鑷寸巼
  * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
  * 鏇存柊鎴栨柊澧�
  */
@@ -62,7 +62,7 @@
         }
         //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚�
         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);
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 4acd0cd..d598f12 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java
@@ -93,15 +93,19 @@
         //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
         AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
         FaceDeviceSamplingResult.BigUsefulness bigUseful = result.getBigUseful();
-        FaceDeviceSamplingResult.FaceEligibility faceElig = result.getFaceElig();
+        FaceDeviceSamplingResult.FaceEligibility faceElig = result.getFaceEligibility();
         stats.totalSites++;
         //90%鍙婁互涓婃暟鎹悎鏍煎垯姝や汉鑴歌澶囪瑙嗕负鍥剧墖鍚堟牸
-        if (faceElig.getFaceEligPercent() >= 0.9) {
-            stats.picQualifySites++;
+        if (faceElig != null) {
+            if (faceElig.getFaceEligPercent() >= 0.9) {
+                stats.picQualifySites++;
+            }
         }
         //澶у浘鍙敤鐜囧ぇ浜�90%瑙嗕负鍚堟牸
-        if (bigUseful.getBigUsefulPercent() >= 0.9) {
-            stats.picUsabilitySites++;
+        if (bigUseful != null) {
+            if (bigUseful.getBigUsefulPercent() >= 0.9) {
+                stats.picUsabilitySites++;
+            }
         }
     }
 
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 321c50d..c1500fc 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java
@@ -16,6 +16,7 @@
 import constant.CheckSnapCountConstants;
 import lombok.extern.slf4j.Slf4j;
 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;
@@ -23,6 +24,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -46,6 +48,8 @@
     private SysConfigMapper sysConfigMapper;
     @Autowired
     private TMonitorMapper monitorMapper;
+    @Autowired
+    private RedisTemplate redisTemplate;
 
     //鍖哄煙浜鸿劯鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
     private static class AreaStats {
@@ -67,7 +71,15 @@
         List<String> provinceIds = getProvince();
 
         Map<String, AreaStats> areaStatsMap = new HashMap<>();
-
+        // 鑾峰彇褰撳墠鏃ユ湡
+        LocalDate today = LocalDate.now();
+        // 鑾峰彇鏈湀鐨勭涓�澶�
+        LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
+        // 鍒ゆ柇浠婂ぉ鏄惁鏄湰鏈堢殑绗竴澶�
+        if (today.equals(firstDayOfMonth)) {
+            // 濡傛灉鏄紝鍒欐竻闄edis涓褰曚腑鏂鏁扮殑鏁版嵁
+            redisTemplate.delete(ApiConstants.Check_Face_ViewConnect);
+        }
         for (SnapshotDataMonitorResult result : list) {
             TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode());
             if (monitor == null) continue;
@@ -129,18 +141,36 @@
             return null;
         }
         //璋冪敤鐐逛綅鍦ㄧ嚎璁$畻鏂规硶
-        Map<String, Object> siteOnlineParam = new HashMap<>();
-        siteOnlineParam.put("totalSites", stats.totalSites);
-        siteOnlineParam.put("onlineSites", stats.onlineSites);
-        BigDecimal siteOnline = siteOnline(siteOnlineParam);
-        checkIndexFace.setSiteOnline(siteOnline);
+        if (stats.totalSites >= ApiConstants.Check_Face_SiteOnline) {
+            Map<String, Object> siteOnlineParam = new HashMap<>();
+            siteOnlineParam.put("totalSites", stats.totalSites);
+            siteOnlineParam.put("onlineSites", stats.onlineSites);
+            BigDecimal siteOnline = siteOnline(siteOnlineParam);
+            checkIndexFace.setSiteOnline(siteOnline);
+        } else {
+            checkIndexFace.setSiteOnline(BigDecimal.ZERO);
+        }
         //瑙嗗浘搴撳鎺ョǔ瀹氭��
-        BigDecimal avgCount = key.startsWith(ApiConstants.Province) ? cityCountAvg : countyCountAvg;
-        Map<String, Object> viewConnectParam = new HashMap<>();
-        viewConnectParam.put("totalDataSum", stats.totalDataSum);
-        viewConnectParam.put("avgCount", avgCount);
-        BigDecimal viewConnectStability = viewConnectStability(viewConnectParam);
-        checkIndexFace.setViewConnectStability(viewConnectStability);
+        //Redis璁板綍璇ュ尯鍘垮綋鏈堟棤鏁版嵁涓婁紶娆℃暟
+        Integer noDateCount = (Integer) redisTemplate.opsForHash().get(ApiConstants.Check_Face_ViewConnect, key);
+        // 濡傛灉鍊间负null锛屽垯鍒濆鍖栦负0
+        if (noDateCount == null) {
+            noDateCount = 0;
+        }
+        Double deductScore = 0.1 * noDateCount;
+        if (stats.totalDataSum != 0) {
+            BigDecimal avgCount = key.startsWith(ApiConstants.Province) ? cityCountAvg : countyCountAvg;
+            Map<String, Object> viewConnectParam = new HashMap<>();
+            viewConnectParam.put("totalDataSum", stats.totalDataSum);
+            viewConnectParam.put("avgCount", avgCount);
+            BigDecimal viewConnectStability = viewConnectStability(viewConnectParam);
+            viewConnectStability = viewConnectStability.subtract(new BigDecimal(deductScore)).max(BigDecimal.ZERO).min(BigDecimal.ONE);
+            checkIndexFace.setViewConnectStability(viewConnectStability);
+        } else {
+            noDateCount++;
+        }
+        // 灏嗘柊鐨勫�兼斁鍥濰ash涓�
+        redisTemplate.opsForHash().put(ApiConstants.Check_Face_ViewConnect, key, noDateCount);
         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
index e109c2e..f40268e 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java
@@ -120,7 +120,7 @@
         param.put("delayCount2", stats.delayCount2);
         param.put("delayCount3", stats.delayCount3);
         BigDecimal index = snapshopDelay(param);
-        checkIndexFace.setSiteOnline(index);
+        checkIndexFace.setFaceUploadTimeliness(index);
         return checkIndexFace;
     }
 }
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 8e5fbaa..26b1c93 100644
--- a/ycl-server/src/main/java/com/ycl/task/CarTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java
@@ -34,7 +34,7 @@
     @Autowired
     private TMonitorMapper monitorMapper;
     public void siteOnlineTask() {
-        log.info("寮�濮嬭绠楃偣浣嶅湪绾跨巼鍜岃鍥惧簱瀵规帴绋冲畾鎬�");
+        log.info("寮�濮嬭绠楄溅杈嗙偣浣嶅湪绾跨巼鍜岃鍥惧簱瀵规帴绋冲畾鎬�");
         Date yesterday = DateUtils.addDays(new Date(), -1);
         //TODO:鏃堕棿鍐欐浜�
         Date date = DateUtils.getDay(2024,7,13);
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 3d7cfc3..cf4ba45 100644
--- a/ycl-server/src/main/java/com/ycl/task/FaceTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/FaceTask.java
@@ -7,6 +7,7 @@
 import com.ycl.platform.domain.vo.TMonitorVO;
 import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.utils.DateUtils;
+import com.ycl.utils.StringUtils;
 import constant.ApiConstants;
 import constant.CalculationStrategyConstants;
 import constant.CheckConstants;
@@ -34,63 +35,85 @@
     private TMonitorMapper monitorMapper;
 
     public void siteOnlineTask() {
+        log.info("寮�濮嬭绠椾汉鑴哥偣浣嶅湪绾跨巼鍜岃鍥惧簱瀵规帴绋冲畾鎬�");
         Date yesterday = DateUtils.addDays(new Date(), -1);
+        //TODO:鏃堕棿鍐欐浜�
+        Date date = DateUtils.getDay(2024,7,13);
         //鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
         Query query = new Query();
         query.addCriteria(Criteria
-                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))
                 .and("dataType").is(ApiConstants.HK_DataType_FACE));
         List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline_ViewStability);
         calculator.calculate(results);
+        log.info("缁撴潫璁$畻浜鸿劯鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��");
     }
     public void deviceSampleTask() {
+        log.info("寮�濮嬭绠椾汉鑴稿浘鐗囧悎鏍肩巼銆佸ぇ鍥惧彲鐢ㄦ��");
         Date yesterday = DateUtils.addDays(new Date(), -1);
+        //TODO:鏃堕棿鍐欐浜�
+        Date date = DateUtils.getDay(2024,7,13);
         //璁$畻浜鸿劯鍥剧墖鍚堟牸鐜囥�佸ぇ鍥惧彲鐢ㄦ��
         Query query = new Query();
         query.addCriteria(Criteria
-                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
         List<FaceDeviceSamplingResult> results = mongoTemplate.find(query, FaceDeviceSamplingResult.class);
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_DataAccuracy_PicUsability);
         calculator.calculate(results);
+        log.info("缁撴潫璁$畻浜鸿劯鍥剧墖鍚堟牸鐜囥�佸ぇ鍥惧彲鐢ㄦ��");
     }
     public void infoAccuracyTask(){
+        log.info("寮�濮嬭绠椾汉鑴稿崱鍙d俊鎭噰闆嗗噯纭巼");
         Date yesterday = DateUtils.addDays(new Date(), -1);
+        //TODO:鏃堕棿鍐欐浜�
+        Date date = DateUtils.getDay(2024,7,13);
         //璁$畻浜鸿劯鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
         Query query = new Query();
         query.addCriteria(Criteria
-                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
         List<MonitoringDetailResult> results = mongoTemplate.find(query, MonitoringDetailResult.class);
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_InfoAccuracy);
         calculator.calculate(results);
+        log.info("缁撴潫璁$畻浜鸿劯鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�");
     }
     public void snapShopDelay(){
+        log.info("寮�濮嬭绠椾汉鑴告姄鎷嶆暟鎹笂浼犲強鏃舵��");
         Date yesterday = DateUtils.addDays(new Date(), -1);
+        //TODO:鏃堕棿鍐欐浜�
+        Date date = DateUtils.getDay(2024,7,13);
         //璁$畻浜鸿劯鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�
         Query query = new Query();
         query.addCriteria(Criteria
-                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))
                 .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);
+        log.info("缁撴潫璁$畻浜鸿劯鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�");
     }
     public void clockAccuracyTask() {
+        log.info("寮�濮嬭绠椾汉鑴歌澶囨椂閽熷噯纭��");
         Date yesterday = DateUtils.addDays(new Date(), -1);
+        //TODO:鏃堕棿鍐欐浜�
+        Date date = DateUtils.getDay(2024,7,13);
         //璁$畻浜鸿劯璁惧鏃堕挓鍑嗙‘鎬�
         Query query = new Query();
         query.addCriteria(Criteria
-                .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
         List<FaceDeviceInspectionResult> results = mongoTemplate.find(query, FaceDeviceInspectionResult.class);
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_ClockAccuracy);
         calculator.calculate(results);
+        log.info("缁撴潫璁$畻浜鸿劯璁惧鏃堕挓鍑嗙‘鎬�");
     }
 
     public void directConsistentTask() {
+        log.info("寮�濮嬭绠椾汉鑴哥洰褰曚竴鑷寸巼");
         //浜鸿劯鐩綍涓�鑷寸巼
         List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList();
-        List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO -> tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Face + "")).collect(Collectors.toList());
+        List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO ->!StringUtils.isEmpty(tMonitorVO.getCameraFunType()) && tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Face + "")).collect(Collectors.toList());
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_DirectConsistent);
         calculator.calculate(list);
+        log.info("缁撴潫璁$畻浜鸿劯鐩綍涓�鑷寸巼");
     }
 }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml
index 1fb3bc2..d38a48a 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml
@@ -112,7 +112,7 @@
     </delete>
 
     <select id="selectToday" resultType="com.ycl.platform.domain.entity.CheckIndexFace">
-        select * from t_check_index_car where DATE(create_time) = #{today}
+        select * from t_check_index_face where DATE(create_time) = #{today}
     </select>
 
     <select id="dashboard" resultType="com.ycl.platform.domain.entity.CheckIndexFace">

--
Gitblit v1.8.0