From f63535115eff538f30b1004faf90a428ebdca963 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 31 七月 2024 11:55:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java                   |  149 +++++
 ycl-server/src/main/java/com/ycl/calculate/CalculationStrategy.java                         |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java    |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java      |    5 
 ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java                       |   30 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java    |    3 
 ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java                    |  146 +++++
 ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/VideoQualityParam.java              |   31 +
 ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java                      |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java          |    3 
 ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexCarService.java                |    5 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexFaceServiceImpl.java       |   37 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java                       |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java         |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java               |    5 
 ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml                          |   16 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java        |    5 
 ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java                       |   19 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java           |   43 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java               |    5 
 ycl-server/src/main/java/com/ycl/task/UYTask.java                                           |   14 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java              |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java     |    8 
 ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml                         |   11 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/QueryVqdResult.java                |  246 ++++++++
 ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java                 |   14 
 ycl-server/src/main/java/com/ycl/feign/UYClient.java                                        |   26 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java             |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java                   |   51 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java        |    5 
 ycl-server/src/main/java/com/ycl/utils/DateUtils.java                                       |   31 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OnlineResult.java                  |    2 
 ycl-server/src/main/java/com/ycl/platform/mapper/CheckIndexFaceMapper.java                  |   20 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckScore.java                       |   11 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java |    3 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java      |   59 +
 ycl-server/src/main/java/com/ycl/platform/controller/VehicleDataMonitorController.java      |   10 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java              |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java   |    5 
 ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java               |    8 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java  |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoQualityResult.java            |   66 ++
 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java        |  130 ----
 ycl-server/src/main/java/com/ycl/task/HKTask.java                                           |  240 ++++++-
 ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java         |   26 
 ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexFaceService.java               |   10 
 ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/QueryVqdParam.java                  |  136 ++++
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java |    7 
 ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml                              |   19 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java        |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CriteriaResult.java                |    5 
 51 files changed, 1,392 insertions(+), 320 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckScore.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckScore.java
index 030bc2c..cf3e0a7 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckScore.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckScore.java
@@ -6,14 +6,9 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.system.entity.BaseEntity;
 import lombok.Data;
-import lombok.experimental.Accessors;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.Map;
 
 /**
  * 鑰冩牳绉垎鏄庣粏瀵硅薄 t_check_score
@@ -69,4 +64,10 @@
     @TableField(exist = false)
     private String date;
 
+    @TableField(exist = false)
+    private Date startDate;
+
+    @TableField(exist = false)
+    private Date endDate;
+
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java
new file mode 100644
index 0000000..7f7e84e
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java
@@ -0,0 +1,51 @@
+package com.ycl.platform.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.*;
+import com.alibaba.excel.enums.BooleanEnum;
+import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
+import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author gonghl
+ * @since 2024/7/30 涓婂崍 10:01
+ */
+@Data
+@ColumnWidth(20)
+@HeadRowHeight(30)
+@ContentRowHeight(30)
+@HeadStyle(fillForegroundColor = 64)
+@ContentStyle(horizontalAlignment = HorizontalAlignmentEnum.CENTER, verticalAlignment = VerticalAlignmentEnum.CENTER)
+@ContentFontStyle(fontHeightInPoints = 18, bold = BooleanEnum.TRUE, fontName = "瀹嬩綋")
+@HeadFontStyle(fontHeightInPoints = 18, bold = BooleanEnum.TRUE, fontName = "瀹嬩綋")
+public class CalculateExport {
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "瑙勫垯鍚嶇О"})
+    @ColumnWidth(40)
+    private String ruleName;
+
+    /**
+     * 鏁伴噺
+     */
+    @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "鏁伴噺"})
+    private Integer num;
+
+    /**
+     * 鍒嗘暟
+     */
+    @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "鍒嗘暟"})
+    private Integer score;
+
+    /**
+     * 閲戦
+     */
+    @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "閲戦"})
+    private BigDecimal money;
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/QueryVqdParam.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/QueryVqdParam.java
new file mode 100644
index 0000000..2357dc2
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/QueryVqdParam.java
@@ -0,0 +1,136 @@
+package com.ycl.platform.domain.param.UY;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 鍥惧儚妫�娴嬭瘖鏂粨鏋�
+ */
+@Data
+@Accessors(chain = true)
+public class QueryVqdParam {
+    /**
+     * 绉熸埛id
+     */
+    private String tenantId;
+    /**
+     * 琛屾斂鍖哄煙缂栫爜
+     */
+    private String arealayerno;
+    /**
+     * 妯$硦 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String blur;
+    /**
+     * 棰滆壊 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String color;
+    /**
+     * 鎽勫儚鏈哄浗鏍嘔D
+     */
+    private String deviceId;
+    /**
+     * 鎽勫儚鏈哄悕绉�
+     */
+    private String deviceName;
+    /**
+     * 鎺掑簭鏂瑰紡 鍙�夊�间负 desc锛氬�掑簭鎺掑簭 asc锛氭搴忔帓搴� 榛樿鍊掑簭鎺掑簭
+     */
+    private String direction;
+    /**
+     * 0锛氬疄鏃剁爜娴佽瘖鏂� 1锛氬巻鍙茬爜娴佽瘖鏂�
+     */
+    private Integer groupFlag;
+    /**
+     * 璇婃柇鍒嗙粍ID
+     */
+    private String groupId;
+    /**
+     * 鍥惧儚璐ㄩ噺鐘舵�� 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String imgStatus;
+    /**
+     * 浜害 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String light;
+    /**
+     * 鍦ㄧ嚎鐘舵�� 1:鍦ㄧ嚎 0锛氭湭鐭� -1锛氱绾�
+     */
+    private String onlineStatus;
+    /**
+     * 鍒嗛〉椤电爜,榛樿浠�1寮�濮�
+     */
+    private Integer pageNum;
+    /**
+     * 鍒嗛〉澶у皬,榛樿1000
+     */
+    private Integer pageSize;
+    /**
+     * 鍥芥爣骞冲彴ID
+     */
+    private String platId;
+    /**
+     * 閬尅 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String shade;
+    /**
+     * 鎶栧姩 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String shake;
+    /**
+     * 鏃犱俊鍙� 1:鏈変俊鍙� 0锛氭湭鐭� -1锛氭棤淇″彿
+     */
+    private String signal;
+    /**
+     * 淇″彿鐘舵�� 1:鏈変俊鍙� 0锛氭湭鐭� -1锛氭棤淇″彿
+     */
+    private String signalStatus;
+    /**
+     * 闆姳 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String snow;
+    /**
+     * 鎺掑簭鐨勫瓧娈� 鎸夋寚瀹氬瓧娈垫帓搴� 榛樿鎸夋媺鐮佹祦鏃堕棿鎺掑簭
+     */
+    private String sortedField;
+    /**
+     * 鏉$汗 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private String stripe;
+    /**
+     * 璇婃柇浠诲姟鍒涘缓鏃堕棿
+     */
+    private String taskCreateTime;
+    /**
+     * 璇婃柇浠诲姟澶嶆牳鏃堕棿
+     */
+    private String taskRecheckTime;
+    /**
+     * 瑙嗛璇婃柇鐘舵��
+     */
+    private String videoDiagStatus;
+    /**
+     * 瑙嗛娴佽瘖鏂紑濮嬫椂闂�
+     */
+    private String videoDiagTimeBegin;
+    /**
+     * 瑙嗛娴佽瘖鏂粨鏉熸椂闂�
+     */
+    private String videoDiagTimeEnd;
+    /**
+     * 鑾峰彇瑙嗛娴佺姸鎬�
+     */
+    private String videoGetStatus;
+    /**
+     * 瑙嗛娴佽幏鍙栨椂闂村紑濮嬫椂闂�
+     */
+    private String videoGetTimeBegin;
+    /**
+     * 瑙嗛娴佽幏鍙栨椂闂寸粨鏉熸椂闂�
+     */
+    private String videoGetTimeEnd;
+    /**
+     * 鏄惁闇�瑕佸垎椤佃繑鍥炵粨鏋滐紝褰撲负true鏃秔ageSize鍜宲ageNum鍙傛暟澶辨晥
+     */
+    private Boolean withOutPaging;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/VideoQualityParam.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/VideoQualityParam.java
new file mode 100644
index 0000000..dcd9db6
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/UY/VideoQualityParam.java
@@ -0,0 +1,31 @@
+package com.ycl.platform.domain.param.UY;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 瑙嗛鍥惧儚璐ㄩ噺
+ */
+@Data
+@Accessors(chain = true)
+public class VideoQualityParam {
+    /** 鍖哄煙缂栫爜 */
+    private String arealayerno;
+    private Object[] dbConditionItems;
+    /** 璁惧 ID */
+    private String deviceId;
+    /** 璁惧鍚嶇О */
+    private String deviceName;
+    /** 鍔ㄦ�佹潯浠� */
+    private String dynamicConditionJson;
+    /** 鎺掑簭瀛楁 */
+    private String field;
+    /** 鎺掑簭鏂瑰紡锛宒esc: 闄嶅簭, asc: 鍗囧簭 */
+    private String order;
+    /** 鍒嗛〉椤电爜 */
+    private Integer pageNum;
+    /** 鍒嗛〉澶у皬 */
+    private Integer pageSize;
+    /** 鐘舵�� */
+    private Integer status;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/BaseResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java
similarity index 85%
rename from ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/BaseResult.java
rename to ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java
index 48d2cae..9680e21 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/BaseResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java
@@ -1,4 +1,4 @@
-package com.ycl.platform.domain.result.HK;
+package com.ycl.platform.domain.result;
 
 import lombok.Data;
 import org.bson.types.ObjectId;
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java
index 7357db3..e376fad 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 灞炴�ц瘑鍒噯纭洃娴嬬粨鏋�
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class AttrRecognitionMonitorResult {
+@Document(collection = "attr_recognition_monitor")
+public class AttrRecognitionMonitorResult extends BaseResult {
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java
index 8b0994a..448e475 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鎸夊尯鍩熺粺璁¤溅杈嗘暟鎹洃娴嬫寚鏍囬」锛�2.3.0鏂板锛�
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class CarDetectResult {
+@Document(collection = "car_detect")
+public class CarDetectResult extends BaseResult {
 
     /**
      * 缁勭粐缂栧彿
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java
index 6618159..f87a3e9 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鎸夊尯鍩熺粺璁$紪鐮佸紓甯歌澶囨垨鍗″彛
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class CodeByAreaResult {
+@Document(collection = "code_by_area")
+public class CodeByAreaResult extends BaseResult {
 
     /**
      * 缁勭粐缂栧彿
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java
index cf9078a..42dc94b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鎸夊尯鍩熺粺璁$粡绾害寮傚父璁惧鎴栧崱鍙�
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class CoordinateByAreaResult {
+@Document(collection = "coordinate_by_area")
+public class CoordinateByAreaResult extends BaseResult {
 
     /**
      * 缁勭粐缂栧彿
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CriteriaResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CriteriaResult.java
index c8b9614..81287fd 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CriteriaResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CriteriaResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鎸囨爣閰嶇疆淇℃伅鏌ヨ
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class CriteriaResult {
+@Document(collection = "criteria")
+public class CriteriaResult extends BaseResult {
 
     /**
      * 浜鸿劯璇勫垎浣庢爣鍑嗭紝渚嬪锛�0.4
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java
index f8867c8..e954bbf 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鍗″彛灞炴�х洃娴嬬粨鏋滐紙璋冩暣锛屽彲鏌ュ巻鍙诧級
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class CrossDetailResult {
+@Document(collection = "cross_detail")
+public class CrossDetailResult extends BaseResult {
 
     /**
      * 缁勭粐缂栧彿锛岀敤浜庢煡璇㈣缁勭粐鍙婂叾鎵�鏈変笅绾х粍缁囧崱鍙e紓甯告儏鍐点�傝嫢涓嶄紶锛岃繑鍥炴墍鏈夊崱鍙e紓甯歌鎯呫��
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java
index fbfc517..f48fab5 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋滐紝2.2.0鐗堟湰鏂板
@@ -8,14 +10,15 @@
  * @author gonghl
  */
 @Data
-public class DataIntegrityMonitoringResult {
+@Document(collection = "data_integrity_monitoring")
+public class DataIntegrityMonitoringResult extends BaseResult {
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
     private String indexCode;
 
-    /**
+     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
     private String externalIndexCode;
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java
index 373c796..5bded9b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鎸夊尯鍩熺粺璁′汉鑴告暟鎹洃娴嬫寚鏍囬」锛�2.3.0鏂板锛�
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class FaceDetectResult {
+@Document(collection = "face_detect")
+public class FaceDetectResult extends BaseResult {
 
     /**
      * 缁勭粐缂栧彿
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java
index fd2b8e6..6bf7b78 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java
@@ -1,5 +1,6 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
 import org.springframework.data.mongodb.core.mapping.Document;
 
@@ -10,7 +11,7 @@
  */
 @Data
 @Document(collection = "face_device_inspection")
-public class FaceDeviceInspectionResult extends BaseResult{
+public class FaceDeviceInspectionResult extends BaseResult {
 
     /**
      * 璁惧鍚嶇О
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 bf3f498..be04912 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
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉锛�2.3.0鐗堟湰鏂板
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class FaceDeviceSamplingResult {
+@Document(collection = "face_device_sampling")
+public class FaceDeviceSamplingResult extends BaseResult {
 
     /**
      * 璁惧鍚嶇О
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java
index bfc6c6f..69e5211 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.List;
 
@@ -9,7 +11,8 @@
  * @author gonghl
  */
 @Data
-public class MonitorResourceResult {
+@Document(collection = "monitor_resource")
+public class MonitorResourceResult extends BaseResult {
 
     /**
      * 鍏虫敞璧勬簮鍒楄〃
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 d0b7a5b..11bf95c 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
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 閲囬泦璁惧灞炴�х洃娴嬬粨鏋�
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class MonitoringDetailResult {
+@Document(collection = "monitoring_detail")
+public class MonitoringDetailResult extends BaseResult {
 
     /**
      * 缁勭粐缂栧彿
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java
index 7a53baf..1530159 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.List;
 
@@ -10,7 +12,8 @@
  * @author gonghl
  */
 @Data
-public class OrganizationTreeResult {
+@Document(collection = "organization_tree")
+public class OrganizationTreeResult extends BaseResult {
 
     /**
      * 缁勭粐鍒楄〃
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java
index 3dbce4c..198895e 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鍥剧墖璁块棶鐩戞祴缁撴灉
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class PicAccessResult {
+@Document(collection = "pic_access")
+public class PicAccessResult extends BaseResult {
 
     /**
      * 鏁版嵁绫诲瀷涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝鏁版嵁绫诲瀷涓�2鎴�11鏃惰〃绀轰汉鑴搁噰闆嗚澶囧唴鐮�
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java
index 91b6c63..20f8da0 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java
@@ -1,5 +1,6 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
 import org.springframework.data.mongodb.core.mapping.Document;
 
@@ -10,8 +11,11 @@
  */
 @Data
 @Document(collection = "snapshot_data_monitor")
-public class SnapshotDataMonitorResult extends BaseResult{
-
+public class SnapshotDataMonitorResult extends BaseResult {
+    /**
+     * 鏁版嵁绫诲瀷
+     */
+    private Integer dataType;
     /**
      * dataType涓�1锛氬崱鍙e唴鐮�   dataType涓�2鎴�11锛氶噰闆嗚澶囧唴鐮�
      */
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java
index c114e9c..3c826f5 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉
@@ -8,8 +10,9 @@
  * @author gonghl
  */
 @Data
-public class SnapshotDelayMonitorResult {
-
+@Document(collection = "snapshop_delay_monitor")
+public class SnapshotDelayMonitorResult extends BaseResult {
+    private Integer dataType;
     /**
      * dataType涓�1锛氬崱鍙e唴鐮�   dataType涓�2鎴�11锛氶噰闆嗚澶囧唴鐮�
      */
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java
index fdb3827..0f87d90 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java
@@ -1,5 +1,6 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
 import org.springframework.data.mongodb.core.mapping.Document;
 
@@ -10,7 +11,7 @@
  */
 @Data
 @Document(collection = "vehicle_device_inspection")
-public class VehicleDeviceInspectionResult extends BaseResult{
+public class VehicleDeviceInspectionResult extends BaseResult {
 
     /**
      * 璁惧缂栧彿锛宒ataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java
index eaf9529..349f687 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java
@@ -1,6 +1,8 @@
 package com.ycl.platform.domain.result.HK;
 
+import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * 杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉锛�2.3.0鐗堟湰鏂板
@@ -8,7 +10,8 @@
  * @author gonghl
  */
 @Data
-public class VehicleDeviceSamplingResult {
+@Document(collection = "vehicle_device_sampling")
+public class VehicleDeviceSamplingResult extends BaseResult {
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OnlineResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OnlineResult.java
index 8e6f1b1..c5884ff 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OnlineResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OnlineResult.java
@@ -9,7 +9,7 @@
  * @since 2024-4-19 11:37:30
  */
 @Data
-public class OnlineResult {
+public class OnlineResult{
 
     /**
      * 琛屾斂鍖哄垝缂栫爜
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/QueryVqdResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/QueryVqdResult.java
new file mode 100644
index 0000000..d076629
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/QueryVqdResult.java
@@ -0,0 +1,246 @@
+package com.ycl.platform.domain.result.UY;
+
+import lombok.Data;
+
+/**
+ * 鍥惧儚鐩戞祴璇婃柇缁撴灉
+ */
+@Data
+public class QueryVqdResult {
+    /**
+     *
+     */
+    private String arealayerPath;
+    /**
+     * 琛屾斂鍖哄垝缂栫爜
+     */
+    private String arealayernoCode;
+    /**
+     * 琛屾斂鍖哄垝鍚嶇О
+     */
+    private String arealayernoName;
+    /**
+     *
+     */
+    private String binaryTenantId;
+    /**
+     * 妯$硦
+     */
+    private Integer blur;
+    /**
+     * 妯$硦鍘熷鍒嗗��
+     */
+    private Integer blurRaw;
+    /**
+     * 妯$硦闃堝��
+     */
+    private Integer blurThreshold;
+    /**
+     * 棰滆壊
+     */
+    private Integer color;
+    /**
+     * 棰滆壊鍘熷鍒嗗��
+     */
+    private Integer colorRaw;
+    /**
+     * 棰滆壊闃堝��
+     */
+    private Integer colorThreshold;
+    /**
+     *
+     */
+    private String decodeInfo;
+    /**
+     * 璁惧 ID
+     */
+    private String deviceId;
+    /**
+     * 璁惧 IP
+     */
+    private String deviceIp;
+    /**
+     * 璁惧鍚嶇О
+     */
+    private String deviceName;
+    /**
+     *
+     */
+    private String extJson;
+    /**
+     *
+     */
+    private String frameLostRate;
+    /**
+     *
+     */
+    private String groupId;
+    /**
+     *
+     */
+    private String id;
+    /**
+     *
+     */
+    private Integer ifmDelay;
+    /**
+     * 鍥惧儚鍦板潃
+     */
+    private String imagePath;
+    /**
+     * 鍥惧儚璐ㄩ噺鐘舵�� 1:姝e父 0锛氭湭鐭� -1锛氬紓甯�
+     */
+    private Integer imgStatus;
+    /**
+     *
+     */
+    private Boolean inTime;
+    /**
+     * 缁村害
+     */
+    private String latitude;
+    /**
+     * 浜害
+     */
+    private Integer light;
+    /**
+     * 浜害鍘熷鍒嗗��
+     */
+    private Integer lightRaw;
+    /**
+     * 浜害闃堝��
+     */
+    private Integer lightThreshold;
+    /**
+     * 缁忓害
+     */
+    private String longitude;
+    /**
+     * 鍦ㄧ嚎鐘舵�� 1:鍦ㄧ嚎 0锛氭湭鐭� -1锛氱绾�
+     */
+    private Integer onlineStatus;
+    /**
+     *
+     */
+    private String originalPlatId;
+    /**
+     *
+     */
+    private String payloadType;
+    /**
+     *
+     */
+    private String pixelInfo;
+    /**
+     * 鍥芥爣骞冲彴ID
+     */
+    private String platId;
+    /**
+     * 閬尅
+     */
+    private Integer shade;
+    /**
+     * 閬尅鍘熷鍒嗗��
+     */
+    private Integer shadeRaw;
+    /**
+     * 閬尅闃堝��
+     */
+    private Integer shadeThreshold;
+    /**
+     * 鎶栧姩
+     */
+    private Integer shake;
+    /**
+     * 鎶栧姩鍘熷鍒嗗��
+     */
+    private Integer shakeRaw;
+    /**
+     * 鎶栧姩闃堝��
+     */
+    private Integer shakeThreshold;
+    /**
+     * 淇″彿
+     */
+    private Integer signal;
+    /**
+     * 淇″彿鍘熷鍒嗗��
+     */
+    private Integer signalRaw;
+    /**
+     * 淇″彿鐘舵�� 鏃犱俊鍙� 1:鏈変俊鍙� 0锛氭湭鐭� -1锛氭棤淇″彿
+     */
+    private Integer signalStatus;
+    /**
+     * 淇″彿闃堝��
+     */
+    private Integer signalThreshold;
+    /**
+     *
+     */
+    private Integer sipDelay;
+    /**
+     * 闆姳
+     */
+    private Integer snow;
+    /**
+     * 闆姳鍘熷鍒嗗��
+     */
+    private Integer snowRaw;
+    /**
+     * 闆姳闃堝��
+     */
+    private Integer snowThreshold;
+    /**
+     * 鏉$汗
+     */
+    private Integer stripe;
+    /**
+     * 鏉$汗鍘熷鍒嗗��
+     */
+    private Integer stripeRaw;
+    /**
+     * 鏉$汗闃堝��
+     */
+    private Integer stripeThreshold;
+    /**
+     *
+     */
+    private String tags;
+    /**
+     *
+     */
+    private String taskCreateTime;
+    /**
+     *
+     */
+    private String taskRecheckTime;
+    /**
+     *
+     */
+    private String tenantId;
+    /**
+     *
+     */
+    private Integer videoDelay;
+    /**
+     *
+     */
+    private Integer videoDiagStatus;
+    /**
+     *
+     */
+    private String videoDiagTime;
+    /**
+     *
+     */
+    private Integer videoGetStatus;
+    /**
+     *
+     */
+    private String videoGetTime;
+    /**
+     *
+     */
+    private Integer vqdAtNight;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
index 94819a5..86f5770 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
@@ -6,10 +6,11 @@
 
 /**
  * 褰曞儚鍙敤鎬�
+ *
  * @author gonghl
  */
 @Data
-public class RecordMetaDSumResult {
+public class RecordMetaDSumResult{
 
     /**
      * 琛屾斂鍖哄煙鍚嶇О
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoQualityResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoQualityResult.java
new file mode 100644
index 0000000..0a16fc4
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoQualityResult.java
@@ -0,0 +1,66 @@
+package com.ycl.platform.domain.result.UY;
+
+import lombok.Data;
+
+/**
+ * 瑙嗛鍥惧儚璐ㄩ噺
+ */
+@Data
+public class VideoQualityResult {
+    /** 琛屾斂鍖哄垝缂栫爜 */
+    private String arealayernoCode;
+    /** 琛屾斂鍖哄垝鍚嶇О */
+    private String arealayernoName;
+    /** 妯$硦 */
+    private Integer blur;
+    /** 妯$硦鍘熷鍒嗗�� */
+    private Integer blurRaw;
+    /** 棰滆壊 */
+    private Integer color;
+    /** 棰滆壊鍘熷鍒嗗�� */
+    private Integer colorRaw;
+    /** 鎽勫儚鏈�-鍥芥爣id */
+    private String deviceId;
+    /** 鎽勫儚鏈篿p */
+    private String deviceIp;
+    /** 鎽勫儚鏈鸿澶囧悕绉� */
+    private String deviceName;
+    /** 缁熻绾害 */
+    private String dim;
+    /** 鍥惧儚鏄惁姝e父 -1锛氬紓甯革紝1姝e父锛�0锛氭湭璇婃柇*/
+    private Integer isImgAbnormal;
+    /** 淇″彿鏄惁涓㈠け -1锛氬紓甯革紝1姝e父锛�0锛氭湭璇婃柇*/
+    private Integer isSignalMiss;
+    /** 浜害 */
+    private Integer light;
+    /** 浜害鍘熷鍒嗗�� */
+    private Integer lightRaw;
+    /** 閬尅 */
+    private Integer shade;
+    /** 閬尅鍘熷鍒嗗�� */
+    private Integer shadeRaw;
+    /** 鎶栧姩 */
+    private Integer shake;
+    /** 鎶栧姩鍘熷鍒嗗�� */
+    private Integer shakeRaw;
+    /** 鏃犱俊鍙� */
+    private Integer signal;
+    /** 鏃犱俊鍙峰師濮嬪垎鍊� */
+    private Integer signalRaw;
+    /** 闆姳 */
+    private Integer snow;
+    /** 闆姳鍘熷鍒嗗�� */
+    private Integer snowRaw;
+    /** 鎺掑簭灞炴�� */
+    private String sortFiled;
+    /** 璇婃柇鐘舵�佺紪鐮� -1锛氬紓甯革紝1锛氭甯革紝0锛氭湭璇婃柇 */
+    private String status;
+    /** 璇婃柇鐘舵�佸悕绉� */
+    private String statusName;
+    /** 鏉$汗 */
+    private Integer stripe;
+    /** 鏉$汗鍘熷鍒嗗�� */
+    private Integer stripeRaw;
+    /** 璇婃柇鏃堕棿 */
+    private String vqdTime;
+}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CalculationStrategy.java b/ycl-server/src/main/java/com/ycl/calculate/CalculationStrategy.java
new file mode 100644
index 0000000..3595ad4
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/CalculationStrategy.java
@@ -0,0 +1,7 @@
+package com.ycl.calculate;
+
+import java.util.List;
+
+public interface CalculationStrategy<T> {
+    void calculate(List<T> list);
+}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java
new file mode 100644
index 0000000..9cf047a
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java
@@ -0,0 +1,146 @@
+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.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.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 璁$畻杞﹁締銆佷汉鑴哥偣浣嶅湪绾跨巼銆佽鍥惧簱瀵规帴绋冲畾鎬�
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 寰幆map璁$畻鐐逛綅鍦ㄧ嚎鐜�
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class CarSiteOnlineCalculation implements CalculationStrategy<SnapshotDataMonitorResult> {
+    @Autowired
+    private CheckIndexCarMapper checkIndexCarMapper;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ITMonitorService monitorService;
+    @Autowired
+    private ICheckIndexCarService checkIndexCarService;
+
+    //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
+    private static class AreaStats {
+        int totalSites = 0;
+        int offlineSites = 0;
+        int totalDataSum = 0;
+    }
+
+    @Override
+    public void calculate(List<SnapshotDataMonitorResult> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        Map<String, AreaStats> areaStatsMap = new HashMap<>();
+        Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>()
+                        .in("serial_number", list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList())))
+                .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
+
+        // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹�
+        List<String> provinceIds = new ArrayList<>(); // 杩欓噷闇�瑕佹牴鎹偣浣嶈ˉ鍏�
+
+        for (SnapshotDataMonitorResult 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);
+            }
+        }
+
+        //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊� 鐪佸巺銆佸競灞�
+        BigDecimal cityCountAvg = getAverageCount(CheckSnapCountConstants.City);
+        BigDecimal countyCountAvg = getAverageCount(CheckSnapCountConstants.County);
+
+        // 鏌ヨ浠婃棩鏁版嵁
+        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, cityCountAvg, countyCountAvg, checkIndexCarList);
+                checkIndexCars.add(checkIndexCar);
+            }
+        });
+
+        checkIndexCarService.saveOrUpdateBatch(checkIndexCars);
+    }
+
+    //绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
+    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalSites++;
+        if (ApiConstants.HK_SnapCount_ResultType_Null == result.getResultType()) {
+            stats.offlineSites++;
+        } else {
+            stats.totalDataSum += result.getDataCount();
+        }
+    }
+
+    //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊�
+    private BigDecimal getAverageCount(String configKey) {
+        String count = sysConfigMapper.checkConfigKeyUnique(configKey).getConfigValue();
+        return new BigDecimal(count).multiply(new BigDecimal(CheckSnapCountConstants.Multiply))
+                .divide(new BigDecimal(CheckSnapCountConstants.CountyNum), 0, RoundingMode.HALF_UP);
+    }
+
+    //杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
+    private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, BigDecimal cityCountAvg, BigDecimal countyCountAvg, 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> siteOnlineParam = new HashMap<>();
+        siteOnlineParam.put("totalSites", stats.totalSites);
+        siteOnlineParam.put("offlineSites", stats.offlineSites);
+        BigDecimal siteOnline = IndexCalculationUtils.siteOnline(siteOnlineParam);
+        checkIndexCar.setSiteOnline(siteOnline);
+        //瑙嗗浘搴撳鎺ョǔ瀹氭��
+        BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg;
+        Map<String, Object> viewConnectParam = new HashMap<>();
+        viewConnectParam.put("totalDataSum", stats.totalDataSum);
+        viewConnectParam.put("avgCount", avgCount);
+        BigDecimal viewConnectStability = IndexCalculationUtils.viewConnectStability(viewConnectParam);
+        checkIndexCar.setViewConnectStability(viewConnectStability);
+        return checkIndexCar;
+    }
+}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java
new file mode 100644
index 0000000..4d625dd
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java
@@ -0,0 +1,149 @@
+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.CheckIndexFace;
+import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
+import com.ycl.platform.mapper.CheckIndexCarMapper;
+import com.ycl.platform.mapper.CheckIndexFaceMapper;
+import com.ycl.platform.service.ICheckIndexCarService;
+import com.ycl.platform.service.ICheckIndexFaceService;
+import com.ycl.platform.service.ITMonitorService;
+import com.ycl.platform.service.impl.CheckIndexFaceServiceImpl;
+import com.ycl.system.mapper.SysConfigMapper;
+import com.ycl.system.mapper.SysDeptMapper;
+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.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 璁$畻浜鸿劯鐐逛綅鍦ㄧ嚎鐜囥�佽鍥惧簱瀵规帴绋冲畾鎬�
+ * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
+ * 寰幆map璁$畻鐐逛綅鍦ㄧ嚎鐜�
+ * 鏇存柊鎴栨柊澧�
+ */
+@Component
+public class FaceSiteOnlineCalculation implements CalculationStrategy<SnapshotDataMonitorResult> {
+    @Autowired
+    private CheckIndexFaceMapper checkIndexFaceMapper;
+    @Autowired
+    private ICheckIndexFaceService checkIndexFaceService;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ITMonitorService monitorService;
+
+    //鍖哄煙浜鸿劯鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
+    private static class AreaStats {
+        int totalSites = 0;
+        int offlineSites = 0;
+        int totalDataSum = 0;
+    }
+
+    @Override
+    public void calculate(List<SnapshotDataMonitorResult> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+
+        Map<String, AreaStats> areaStatsMap = new HashMap<>();
+        Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>()
+                        .in("serial_number", list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList())))
+                .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
+
+        // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹�
+        List<String> provinceIds = new ArrayList<>(); // 杩欓噷闇�瑕佹牴鎹偣浣嶈ˉ鍏�
+
+        for (SnapshotDataMonitorResult 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);
+            }
+        }
+
+        //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊� 鐪佸巺銆佸競灞�
+        BigDecimal cityCountAvg = getAverageCount(CheckSnapCountConstants.City);
+        BigDecimal countyCountAvg = getAverageCount(CheckSnapCountConstants.County);
+
+        // 鏌ヨ浠婃棩鏁版嵁
+        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, cityCountAvg, countyCountAvg, checkIndexFaceList);
+                checkIndexFaces.add(checkIndexFace);
+            }
+        });
+
+        checkIndexFaceService.saveOrUpdateBatch(checkIndexFaces);
+    }
+
+    //绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
+    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) {
+        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
+        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
+        stats.totalSites++;
+        if (ApiConstants.HK_SnapCount_ResultType_Null == result.getResultType()) {
+            stats.offlineSites++;
+        } else {
+            stats.totalDataSum += result.getDataCount();
+        }
+    }
+
+    //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊�
+    private BigDecimal getAverageCount(String configKey) {
+        String count = sysConfigMapper.checkConfigKeyUnique(configKey).getConfigValue();
+        return new BigDecimal(count).multiply(new BigDecimal(CheckSnapCountConstants.Multiply))
+                .divide(new BigDecimal(CheckSnapCountConstants.CountyNum), 0, RoundingMode.HALF_UP);
+    }
+
+    //杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
+    private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, BigDecimal cityCountAvg, BigDecimal countyCountAvg, 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());
+        }
+
+        // 鐐逛綅鍦ㄧ嚎鐜�
+        BigDecimal totalSitesBd = new BigDecimal(stats.totalSites);
+        BigDecimal offlineSitesBd = new BigDecimal(stats.offlineSites);
+        BigDecimal onlineSitesBd = totalSitesBd.subtract(offlineSitesBd);
+        checkIndexFace.setSiteOnline(onlineSitesBd.divide(totalSitesBd, 4, RoundingMode.HALF_UP));
+        //瑙嗗浘搴撳鎺ョǔ瀹氭��
+        BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg;
+        checkIndexFace.setViewConnectStability(new BigDecimal(stats.totalDataSum).divide(avgCount, 4, RoundingMode.HALF_UP));
+
+        return checkIndexFace;
+    }
+}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java
new file mode 100644
index 0000000..919e9c1
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java
@@ -0,0 +1,30 @@
+package com.ycl.calculate;
+
+
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Map;
+
+/**
+ * 璁$畻鍏紡
+ */
+public class IndexCalculationUtils {
+
+    //鐐逛綅鍦ㄧ嚎鐜�
+    public static BigDecimal siteOnline(Map<String, Object> param) {
+        BigDecimal totalSitesBd = new BigDecimal((Integer) param.get("totalSites"));
+        BigDecimal offlineSitesBd = new BigDecimal((Integer) param.get("offlineSites"));
+        BigDecimal onlineSitesBd = totalSitesBd.subtract(offlineSitesBd);
+        return onlineSitesBd.divide(totalSitesBd, 4, RoundingMode.HALF_UP);
+    }
+
+    //瑙嗗浘搴撳鎺ョǔ瀹氭��
+    public static BigDecimal viewConnectStability(Map<String, Object> param){
+        BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum"));
+        BigDecimal avgCount = new BigDecimal((Integer) param.get("avgCount"));
+        return totalDataSum.divide(avgCount, 4, RoundingMode.HALF_UP);
+    }
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
new file mode 100644
index 0000000..1b638dc
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java
@@ -0,0 +1,19 @@
+package com.ycl.factory;
+
+import com.ycl.calculate.CalculationStrategy;
+import com.ycl.calculate.CarSiteOnlineCalculation;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class IndexCalculationFactory {
+    private static final Map<String, CalculationStrategy> calculators = new HashMap<>();
+
+    static {
+        calculators.put("siteOnline", new CarSiteOnlineCalculation());
+    }
+
+    public static CalculationStrategy getCalculator(String indexName) {
+        return calculators.get(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 5cb01dc..5286b2a 100644
--- a/ycl-server/src/main/java/com/ycl/feign/UYClient.java
+++ b/ycl-server/src/main/java/com/ycl/feign/UYClient.java
@@ -1,10 +1,9 @@
 package com.ycl.feign;
 
 import com.alibaba.fastjson2.JSONObject;
-import com.ycl.platform.domain.param.UY.CameraParam;
-import com.ycl.platform.domain.param.UY.OnlineParam;
-import com.ycl.platform.domain.param.UY.RecordMetaDSumParam;
+import com.ycl.platform.domain.param.UY.*;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -27,7 +26,7 @@
      * @return 鏌ヨ鎽勫儚鏈烘竻鍗曢泦鍚�
      */
     @GetMapping("/VIID/Cameras")
-    JSONObject cameraList(@RequestParam CameraParam cameraParam);
+    JSONObject cameraList(@SpringQueryMap CameraParam cameraParam);
 
     /**
      * 鐐逛綅鍦ㄧ嚎
@@ -36,7 +35,7 @@
      * @return 鏌ヨ鍦ㄧ嚎缁熻鍒楄〃
      */
     @GetMapping("/openapi/v1/report/online/list")
-    JSONObject onlineList(@RequestParam OnlineParam onlineParam);
+    JSONObject onlineList(@SpringQueryMap OnlineParam onlineParam);
 
     /**
      * 褰曞儚鍙敤
@@ -50,4 +49,21 @@
     @GetMapping("/api/v1/app/osdMonitor/list")
     JSONObject osdMonitorList();
 
+    /**
+     * 鍥惧儚妫�娴嬭瘖鏂粨鏋�
+     *
+     * @param param
+     * @return
+     */
+    @GetMapping("/openapi/v1/vqdMonitor/queryVqdResult")
+    JSONObject queryVqdResult(@SpringQueryMap QueryVqdParam param);
+
+    /**
+     * 瑙嗛鍥惧儚璐ㄩ噺
+     *
+     * @param param
+     * @return
+     */
+    @GetMapping("/api/v1/app/report/vqd/detail/list")
+    JSONObject queryVqdResult(@SpringQueryMap VideoQualityParam param);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java b/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
index f6049ca..7c23eea 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
@@ -1,22 +1,15 @@
 package com.ycl.platform.controller;
 
 import com.ycl.platform.domain.form.CalculateReportBackfillForm;
-import com.ycl.platform.domain.param.HK.CoordinateByAreaParam;
-import com.ycl.system.domain.group.Update;
-import com.ycl.system.domain.group.Add;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import lombok.RequiredArgsConstructor;
-import java.util.List;
-import org.springframework.validation.annotation.Validated;
-import jakarta.validation.constraints.NotEmpty;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import com.ycl.platform.domain.query.CalculateReportQuery;
 import com.ycl.platform.service.CalculateReportService;
 import com.ycl.system.Result;
-import com.ycl.platform.domain.form.CalculateReportForm;
-import com.ycl.platform.domain.query.CalculateReportQuery;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -62,4 +55,11 @@
         return calculateReportService.updatePublishStatus(reportId);
     }
 
+    @PostMapping("/export")
+    @ApiOperation(value = "瀵煎嚭", notes = "瀵煎嚭")
+    @PreAuthorize("@ss.hasPermi('system:calculate:report:export')")
+    public void export(Integer contractId, HttpServletResponse response) {
+        calculateReportService.export(contractId, response);
+    }
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/VehicleDataMonitorController.java b/ycl-server/src/main/java/com/ycl/platform/controller/VehicleDataMonitorController.java
index c52fd50..744c8ae 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/VehicleDataMonitorController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/VehicleDataMonitorController.java
@@ -30,7 +30,7 @@
     /**
      * 鏌ヨ鍗″彛杩囪溅鏁版嵁涓�鑷存�у垪琛�
      */
-   @PreAuthorize("@ss.hasPermi('platform:platform:list')")
+    @PreAuthorize("@ss.hasPermi('platform:platform:list')")
     @GetMapping("/list")
     public TableDataInfo list(VehicleDataMonitor vehicleDataMonitor) {
         startPage();
@@ -53,7 +53,7 @@
     /**
      * 鑾峰彇鍗″彛杩囪溅鏁版嵁涓�鑷存�ц缁嗕俊鎭�
      */
-   @PreAuthorize("@ss.hasPermi('platform:platform:query')")
+    @PreAuthorize("@ss.hasPermi('platform:platform:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Integer id) {
         return success(vehicleDataMonitorService.selectVehicleDataMonitorById(id));
@@ -62,7 +62,7 @@
     /**
      * 鏂板鍗″彛杩囪溅鏁版嵁涓�鑷存��
      */
-   @PreAuthorize("@ss.hasPermi('platform:platform:add')")
+    @PreAuthorize("@ss.hasPermi('platform:platform:add')")
     @Log(title = "鍗″彛杩囪溅鏁版嵁涓�鑷存��", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody VehicleDataMonitor vehicleDataMonitor) {
@@ -72,7 +72,7 @@
     /**
      * 淇敼鍗″彛杩囪溅鏁版嵁涓�鑷存��
      */
-   @PreAuthorize("@ss.hasPermi('platform:platform:edit')")
+    @PreAuthorize("@ss.hasPermi('platform:platform:edit')")
     @Log(title = "鍗″彛杩囪溅鏁版嵁涓�鑷存��", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@RequestBody VehicleDataMonitor vehicleDataMonitor) {
@@ -82,7 +82,7 @@
     /**
      * 鍒犻櫎鍗″彛杩囪溅鏁版嵁涓�鑷存��
      */
-   @PreAuthorize("@ss.hasPermi('platform:platform:remove')")
+    @PreAuthorize("@ss.hasPermi('platform:platform:remove')")
     @Log(title = "鍗″彛杩囪溅鏁版嵁涓�鑷存��", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public AjaxResult remove(@PathVariable Integer[] ids) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
index b8d17a4..8b5e223 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java
@@ -1,16 +1,16 @@
 package com.ycl.platform.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ycl.platform.domain.entity.CalculateReport;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.platform.domain.excel.CalculateExport;
 import com.ycl.platform.domain.query.CalculateReportQuery;
-import com.ycl.platform.domain.vo.CalculateRecordVO;
 import com.ycl.platform.domain.vo.CalculateReportDetailVO;
 import com.ycl.platform.domain.vo.CalculateReportVO;
-import com.ycl.platform.domain.form.CalculateReportForm;
-import java.util.List;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 鏍哥畻鎶ュ憡 Mapper 鎺ュ彛
@@ -37,4 +37,10 @@
      * @return
      */
     CalculateReportDetailVO getById(@Param("id") Long id);
+
+    /**
+     * 瀵煎嚭鏁版嵁
+     * @return 鏁版嵁
+     */
+    List<CalculateExport> exportData(Integer contractId);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/CheckIndexFaceMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/CheckIndexFaceMapper.java
index 6fb00bf..2e12b8c 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/CheckIndexFaceMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/CheckIndexFaceMapper.java
@@ -1,20 +1,21 @@
 package com.ycl.platform.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ycl.platform.domain.entity.CheckIndexFace;
 
 import java.util.List;
 
 /**
  * 浜鸿劯鎸囨爣姒傜巼鏁版嵁Mapper鎺ュ彛
- * 
+ *
  * @author ruoyi
  * @date 2024-04-29
  */
-public interface CheckIndexFaceMapper 
+public interface CheckIndexFaceMapper extends BaseMapper<CheckIndexFace>
 {
     /**
      * 鏌ヨ浜鸿劯鎸囨爣姒傜巼鏁版嵁
-     * 
+     *
      * @param id 浜鸿劯鎸囨爣姒傜巼鏁版嵁涓婚敭
      * @return 浜鸿劯鎸囨爣姒傜巼鏁版嵁
      */
@@ -22,7 +23,7 @@
 
     /**
      * 鏌ヨ浜鸿劯鎸囨爣姒傜巼鏁版嵁鍒楄〃
-     * 
+     *
      * @param checkIndexFace 浜鸿劯鎸囨爣姒傜巼鏁版嵁
      * @return 浜鸿劯鎸囨爣姒傜巼鏁版嵁闆嗗悎
      */
@@ -30,7 +31,7 @@
 
     /**
      * 鏂板浜鸿劯鎸囨爣姒傜巼鏁版嵁
-     * 
+     *
      * @param checkIndexFace 浜鸿劯鎸囨爣姒傜巼鏁版嵁
      * @return 缁撴灉
      */
@@ -38,7 +39,7 @@
 
     /**
      * 淇敼浜鸿劯鎸囨爣姒傜巼鏁版嵁
-     * 
+     *
      * @param checkIndexFace 浜鸿劯鎸囨爣姒傜巼鏁版嵁
      * @return 缁撴灉
      */
@@ -46,7 +47,7 @@
 
     /**
      * 鍒犻櫎浜鸿劯鎸囨爣姒傜巼鏁版嵁
-     * 
+     *
      * @param id 浜鸿劯鎸囨爣姒傜巼鏁版嵁涓婚敭
      * @return 缁撴灉
      */
@@ -54,9 +55,12 @@
 
     /**
      * 鎵归噺鍒犻櫎浜鸿劯鎸囨爣姒傜巼鏁版嵁
-     * 
+     *
      * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
      * @return 缁撴灉
      */
     public int deleteCheckIndexFaceByIds(Long[] ids);
+
+    List<CheckIndexFace> selectToday(String date);
+
 }
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 526a05d..aaf2b40 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
@@ -73,4 +73,5 @@
 
     void saveBatch(List<CheckScore> scoreList);
 
+    List<CheckScore> selectCheckScoreMap(CheckScore checkScore);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java b/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
index 2281a39..96d9dd8 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/CalculateReportService.java
@@ -6,6 +6,8 @@
 import com.ycl.system.Result;
 import com.ycl.platform.domain.form.CalculateReportForm;
 import com.ycl.platform.domain.query.CalculateReportQuery;
+import jakarta.servlet.http.HttpServletResponse;
+
 import java.util.List;
 
 /**
@@ -79,4 +81,10 @@
      * @return
      */
     Result updatePublishStatus(Long reportId);
+
+    /**
+     * 瀵煎嚭
+     * @param response 鍝嶅簲
+     */
+    void export(Integer contractId, HttpServletResponse response);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexCarService.java b/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexCarService.java
index f5cb235..24ecc0c 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexCarService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexCarService.java
@@ -62,9 +62,4 @@
      */
     public int deleteCheckIndexCarById(Long id);
 
-    /**
-     * 璁$畻杞﹁締鐐逛綅鍦ㄧ嚎鐜�
-     * @param list
-     */
-    void siteOnline(List<SnapshotDataMonitorResult> list);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexFaceService.java b/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexFaceService.java
index 860f25c..8b0eb91 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexFaceService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ICheckIndexFaceService.java
@@ -1,5 +1,7 @@
 package com.ycl.platform.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.platform.domain.entity.CheckIndexCar;
 import com.ycl.platform.domain.entity.CheckIndexFace;
 import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
 
@@ -11,7 +13,7 @@
  * @author ruoyi
  * @date 2024-04-29
  */
-public interface ICheckIndexFaceService
+public interface ICheckIndexFaceService extends IService<CheckIndexFace>
 {
     /**
      * 鏌ヨ浜鸿劯鎸囨爣姒傜巼鏁版嵁
@@ -60,11 +62,5 @@
      * @return 缁撴灉
      */
     public int deleteCheckIndexFaceById(Long id);
-
-    /**
-     * 璁$畻浜鸿劯鐐逛綅鍦ㄧ嚎鐜�
-     * @param list
-     */
-    void siteOnline(List<SnapshotDataMonitorResult> list);
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
index 8943806..e603c06 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -1,40 +1,37 @@
 package com.ycl.platform.service.impl;
 
-import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.platform.domain.entity.CalculateRecord;
 import com.ycl.platform.domain.entity.CalculateReport;
+import com.ycl.platform.domain.excel.CalculateExport;
 import com.ycl.platform.domain.form.CalculateReportBackfillForm;
-import com.ycl.platform.domain.vo.CalculateRecordVO;
+import com.ycl.platform.domain.form.CalculateReportForm;
+import com.ycl.platform.domain.query.CalculateReportQuery;
 import com.ycl.platform.domain.vo.CalculateReportDetailVO;
+import com.ycl.platform.domain.vo.CalculateReportVO;
 import com.ycl.platform.mapper.CalculateRecordMapper;
 import com.ycl.platform.mapper.CalculateReportMapper;
 import com.ycl.platform.service.CalculateReportService;
 import com.ycl.system.Result;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ycl.platform.domain.form.CalculateReportForm;
-import com.ycl.platform.domain.vo.CalculateReportVO;
-import com.ycl.platform.domain.query.CalculateReportQuery;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-import com.ycl.utils.SecurityUtils;
-import enumeration.general.CalculateReportStatusEnum;
-import org.apache.commons.lang3.StringUtils;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ycl.system.page.PageUtil;
-import org.springframework.stereotype.Service;
-import org.springframework.security.core.context.SecurityContextHolder;
+import enumeration.general.CalculateReportStatusEnum;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.Assert;
-import java.util.ArrayList;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
-import lombok.RequiredArgsConstructor;
-import org.springframework.util.CollectionUtils;
 
 /**
  * 鏍哥畻鎶ュ憡 鏈嶅姟瀹炵幇绫�
@@ -198,4 +195,24 @@
         baseMapper.updateById(report);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
+
+    @Override
+    @SneakyThrows
+    public void export(Integer contractId, HttpServletResponse response) {
+        // 鑾峰彇鏁版嵁
+        List<CalculateExport> list = baseMapper.exportData(contractId);
+        CalculateExport calculateExport = new CalculateExport();
+        calculateExport.setRuleName("鍚堣");
+        calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum());
+        calculateExport.setScore(list.stream().mapToInt(CalculateExport::getScore).sum());
+        list.add(calculateExport);
+        // 杈撳嚭鏂囦欢
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        String fileName = URLEncoder.encode("鏍哥畻鎶ュ憡", StandardCharsets.UTF_8).replace("\\+", "%20");
+        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), CalculateExport.class)
+                .sheet("鏍哥畻鎶ュ憡")
+                .doWrite(list);
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java
index bbc61e8..45313ed 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java
@@ -1,34 +1,19 @@
 package com.ycl.platform.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ycl.platform.domain.entity.CalculateReport;
+import com.ycl.calculate.IndexCalculationUtils;
 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.mapper.CalculateReportMapper;
 import com.ycl.platform.mapper.CheckIndexCarMapper;
 import com.ycl.platform.service.ICheckIndexCarService;
 import com.ycl.platform.service.ITMonitorService;
-import com.ycl.system.domain.SysConfig;
-import com.ycl.system.entity.SysDept;
 import com.ycl.system.mapper.SysConfigMapper;
 import com.ycl.system.mapper.SysDeptMapper;
-import constant.ApiConstants;
-import constant.CheckConstants;
-import constant.CheckSnapCountConstants;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 import utils.DateUtils;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
 
 /**
  * 杞﹁締鎸囨爣姒傜巼鏁版嵁Service涓氬姟灞傚鐞�
@@ -47,7 +32,6 @@
     private ITMonitorService monitorService;
     @Autowired
     private SysDeptMapper deptMapper;
-
     /**
      * 鏌ヨ杞﹁締鎸囨爣姒傜巼鏁版嵁
      *
@@ -114,116 +98,4 @@
     public int deleteCheckIndexCarById(Long id) {
         return checkIndexCarMapper.deleteCheckIndexCarById(id);
     }
-
-    /**
-     * 璁$畻杞﹁締鐐逛綅鍦ㄧ嚎鐜囥�佽鍥惧簱瀵规帴绋冲畾鎬�
-     * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId
-     * 寰幆map璁$畻鐐逛綅鍦ㄧ嚎鐜�
-     * 鏇存柊鎴栨柊澧�
-     *
-     * @param list
-     */
-    //TODO锛氫换鍔¢『搴忛渶瑕佹帓鍦ㄤ竴鏈轰竴妗d箣鍚�
-    @Override
-    public void siteOnline(List<SnapshotDataMonitorResult> list) {
-        if (CollectionUtils.isEmpty(list)) {
-            return;
-        }
-
-        Map<String, AreaStats> areaStatsMap = new HashMap<>();
-        Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>()
-                        .in("serial_number", list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList())))
-                .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
-
-        // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹�
-        List<String> provinceIds = new ArrayList<>(); // 杩欓噷闇�瑕佹牴鎹偣浣嶈ˉ鍏�
-
-        for (SnapshotDataMonitorResult 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);
-            }
-        }
-
-        //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊� 鐪佸巺銆佸競灞�
-        BigDecimal cityCountAvg = getAverageCount(CheckSnapCountConstants.City);
-        BigDecimal countyCountAvg = getAverageCount(CheckSnapCountConstants.County);
-
-        // 鏌ヨ浠婃棩鏁版嵁
-        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, cityCountAvg, countyCountAvg, checkIndexCarList);
-                checkIndexCars.add(checkIndexCar);
-            }
-        });
-
-        saveOrUpdateBatch(checkIndexCars);
-    }
-
-    //绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
-    private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) {
-        //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
-        AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
-        stats.totalSites++;
-        if (ApiConstants.HK_SnapCount_ResultType_Null == result.getResultType()) {
-            stats.offlineSites++;
-        } else {
-            stats.totalDataSum += result.getDataCount();
-        }
-    }
-
-    //鑾峰彇2022鍚屾湡鎶撴媿骞冲潎鍊�
-    private BigDecimal getAverageCount(String configKey) {
-        String count = sysConfigMapper.checkConfigKeyUnique(configKey).getConfigValue();
-        return new BigDecimal(count).multiply(new BigDecimal(CheckSnapCountConstants.Multiply))
-                .divide(new BigDecimal(CheckSnapCountConstants.CountyNum), 0, RoundingMode.HALF_UP);
-    }
-    //杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
-    private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, BigDecimal cityCountAvg, BigDecimal countyCountAvg, 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());
-        }
-
-        // 鐐逛綅鍦ㄧ嚎鐜�
-        BigDecimal totalSitesBd = new BigDecimal(stats.totalSites);
-        BigDecimal offlineSitesBd = new BigDecimal(stats.offlineSites);
-        BigDecimal onlineSitesBd = totalSitesBd.subtract(offlineSitesBd);
-        checkIndexCar.setSiteOnline(onlineSitesBd.divide(totalSitesBd, 4, RoundingMode.HALF_UP));
-        //瑙嗗浘搴撳鎺ョǔ瀹氭��
-        BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg;
-        checkIndexCar.setViewConnectStability(new BigDecimal(stats.totalDataSum).divide(avgCount, 4, RoundingMode.HALF_UP));
-
-        return checkIndexCar;
-    }
-
-    //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
-    private static class AreaStats {
-        int totalSites = 0;
-        int offlineSites = 0;
-        int totalDataSum = 0;
-    }
-
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexFaceServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexFaceServiceImpl.java
index e23ab19..6f4a5e9 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexFaceServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexFaceServiceImpl.java
@@ -1,14 +1,30 @@
 package com.ycl.platform.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.platform.domain.entity.CheckIndexCar;
 import com.ycl.platform.domain.entity.CheckIndexFace;
+import com.ycl.platform.domain.entity.TMonitor;
 import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
+import com.ycl.platform.mapper.CheckIndexCarMapper;
 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 com.ycl.system.mapper.SysDeptMapper;
+import constant.ApiConstants;
+import constant.CheckConstants;
+import constant.CheckSnapCountConstants;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import utils.DateUtils;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 浜鸿劯鎸囨爣姒傜巼鏁版嵁Service涓氬姟灞傚鐞�
@@ -17,10 +33,15 @@
  * @date 2024-04-29
  */
 @Service
-public class CheckIndexFaceServiceImpl implements ICheckIndexFaceService {
+public class CheckIndexFaceServiceImpl extends ServiceImpl<CheckIndexFaceMapper, CheckIndexFace> implements ICheckIndexFaceService {
     @Autowired
     private CheckIndexFaceMapper checkIndexFaceMapper;
-
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ITMonitorService monitorService;
+    @Autowired
+    private SysDeptMapper deptMapper;
     /**
      * 鏌ヨ浜鸿劯鎸囨爣姒傜巼鏁版嵁
      *
@@ -88,13 +109,7 @@
         return checkIndexFaceMapper.deleteCheckIndexFaceById(id);
     }
 
-    /**
-     * 璁$畻浜鸿劯鐐逛綅鍦ㄧ嚎鐜�
-     *
-     * @param list
-     */
-    @Override
-    public void siteOnline(List<SnapshotDataMonitorResult> list) {
 
-    }
+
+
 }
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 4993e48..4767a29 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
@@ -2,8 +2,6 @@
 
 import annotation.DataScope;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ycl.platform.base.BaseSelect;
-import com.ycl.platform.base.CheckIndex;
 import com.ycl.platform.domain.dto.CheckScoreDTO;
 import com.ycl.platform.domain.dto.CheckScoreIndexDTO;
 import com.ycl.platform.domain.dto.ScoreIndexDTO;
@@ -17,14 +15,11 @@
 import com.ycl.platform.service.ICheckIndexFaceService;
 import com.ycl.platform.service.ICheckIndexVideoService;
 import com.ycl.platform.service.ICheckScoreService;
-import com.ycl.system.Result;
 import com.ycl.system.entity.SysRole;
 import com.ycl.system.service.ISysDeptService;
+import com.ycl.utils.DateUtils;
 import com.ycl.utils.SecurityUtils;
 import com.ycl.utils.StringUtils;
-import com.ycl.utils.poi.ExcelUtil;
-import constant.CheckConstants;
-import enumeration.general.CheckScoreType;
 import enumeration.general.PublishType;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
@@ -32,16 +27,13 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import pojo.ExcelExp;
-import utils.DateUtils;
 import utils.poi.ExcelUtilManySheet;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 鑰冩牳绉垎鏄庣粏Service涓氬姟灞傚鐞�
@@ -137,21 +129,24 @@
         //鍖哄幙鍙兘鐪嬪凡鍙戝竷
         roleControl(checkScore);
 
-        //鏌ヨ鎴愮哗
-        String date = checkScore.getDate();
-        if(StringUtils.isEmpty(date)){
-            //濡傛灉涓虹┖鏌ユ湰鏈堢殑鏁版嵁
-            Calendar now = Calendar.getInstance();
-            //鍙栨槰澶�
-            now.add(Calendar.DATE, -1);
-            Date yesterday = now.getTime();
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
-            date = simpleDateFormat.format(yesterday);
-            checkScore.setDate(date);
+        // 鑾峰彇鏁版嵁鏃ユ湡鏃堕棿
+        Calendar calendar = Calendar.getInstance();
+        // 涓�鍙锋煡璇箣鍓嶇殑鏁版嵁
+        if (LocalDateTime.now().getDayOfMonth() == 1) { calendar.add(Calendar.DAY_OF_MONTH, -1); }
+        // 0 鐪佸巺鏈堝害 1 甯傚眬鏈堝害 2 鐪佸巺瀛e害 3 甯傚眬瀛e害
+        switch (checkScore.getExamineTag()) {
+            case 0, 1:
+                checkScore.setEndDate(calendar.getTime());
+                calendar.set(Calendar.DAY_OF_MONTH, 1);
+                checkScore.setStartDate(calendar.getTime());
+                break;
+            case 2, 3:
+                checkScore.setStartDate(DateUtils.getQuarterStart(calendar).getTime());
+                checkScore.setEndDate(DateUtils.getQuarterEnd(calendar).getTime());
+                checkScore.setExamineTag(checkScore.getExamineTag() == 2 ? 0 : 1);
+                break;
         }
-        List<CheckScore> checkScores = scoreMapper.selectCheckScoreList(checkScore);
-        Map<Long, List<CheckScore>> deptMap = checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
-        return deptMap;
+        return scoreMapper.selectCheckScoreMap(checkScore).stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
     }
 
 
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 5424408..69e7a29 100644
--- a/ycl-server/src/main/java/com/ycl/task/HKTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -1,26 +1,25 @@
 package com.ycl.task;
 
 import com.alibaba.fastjson2.JSONObject;
-import com.ycl.platform.domain.param.HK.FaceDeviceInspectionParam;
-import com.ycl.platform.domain.param.HK.SnapshotDataMonitorParam;
-import com.ycl.platform.domain.param.HK.VehicleDeviceInspectionParam;
-import com.ycl.platform.domain.result.HK.BaseResult;
-import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult;
-import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
-import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult;
+import com.mongodb.client.result.DeleteResult;
+import com.ycl.platform.domain.param.HK.*;
+import com.ycl.platform.domain.result.BaseResult;
+import com.ycl.platform.domain.result.HK.*;
 import com.ycl.platform.service.ICheckIndexCarService;
 import com.ycl.platform.service.ICheckIndexFaceService;
 import com.ycl.platform.service.ICheckIndexVideoService;
 import com.ycl.platform.service.IYwThresholdService;
+import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
 import com.ycl.feign.HKClient;
 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.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
@@ -43,13 +42,16 @@
     private ICheckIndexVideoService checkIndexVideoService;
 
     //杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-    public void VehicleDeviceInspectionTask() {
+    public void vehicleDeviceInspectionTask() {
         log.info("寮�濮嬫墽琛岃溅杈嗚澶囧叏妫�鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
         VehicleDeviceInspectionParam param = new VehicleDeviceInspectionParam();
-        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(getToday());
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate());
         JSONObject jsonObject = hkClient.VehicleDeviceInspection(param);
         List<VehicleDeviceInspectionResult> list = getDataList(jsonObject, VehicleDeviceInspectionResult.class, "杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉鏁版嵁涓虹┖");
         if (!CollectionUtils.isEmpty(list)) {
+            //濡傛灉瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria.where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, VehicleDeviceInspectionResult.class);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insert(list);
             //鍚屾鐨勬暟鎹繘琛屽伐鍗曢槇鍊煎鐞�
@@ -59,16 +61,20 @@
     }
 
     //浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-    public void FaceDeviceInspectionTask() {
+    public void faceDeviceInspectionTask() {
         log.info("寮�濮嬫墽琛屼汉鑴歌澶囧叏妫�鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
         FaceDeviceInspectionParam param = new FaceDeviceInspectionParam();
-        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(getToday());
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate());
         JSONObject jsonObject = hkClient.FaceDeviceInspection(param);
         List<FaceDeviceInspectionResult> list = getDataList(jsonObject, FaceDeviceInspectionResult.class, "浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉鏁版嵁涓虹┖");
         if (!CollectionUtils.isEmpty(list)) {
+            //濡傛灉瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria.where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, FaceDeviceInspectionResult.class);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insert(list);
             //鍚屾鐨勬暟鎹繘琛屽伐鍗曢槇鍊煎鐞�
+            //TODO:鍙兘鏈夐噸澶嶅伐鍗�
             ywThresholdService.faceCheck(list);
         }
         log.info("缁撴潫浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
@@ -76,79 +82,221 @@
 
 
     //鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋�
-    public void SnapshotDataMonitorTask() {
+    public void snapshotDataMonitorTask() {
         log.info("寮�濮嬫墽琛屾姄鎷嶆暟鎹噺妫�娴嬬粨鏋滄暟鎹悓姝�");
         /** 杞﹁締鏁版嵁 */
         SnapshotDataMonitorParam carParam = new SnapshotDataMonitorParam();
-        carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(getToday()).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("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
+                    .and("dataType").is(ApiConstants.HK_DATATYPE_CAR));
+            DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_CAR));
             mongoTemplate.insert(carList);
-            //TODO:杞﹁締鐐逛綅鍦ㄧ嚎鐜�
-            checkIndexCarService.siteOnline(carList);
         }
 
         /** 浜鸿劯鏁版嵁 */
         SnapshotDataMonitorParam faceParam = new SnapshotDataMonitorParam();
-        faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(getToday()).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 list = getDataList(faceJsonObject, SnapshotDataMonitorResult.class, "浜鸿劯鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹负绌�");
-        if (!CollectionUtils.isEmpty(list)) {
+        List<SnapshotDataMonitorResult> faceList = getDataList(faceJsonObject, SnapshotDataMonitorResult.class, "浜鸿劯鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹负绌�");
+        if (!CollectionUtils.isEmpty(faceList)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
+                    .and("dataType").is(ApiConstants.HK_DATATYPE_FACE));
+            DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insert(list);
-            //TODO:浜鸿劯鐐逛綅鍦ㄧ嚎鐜�
-            checkIndexFaceService.siteOnline(list);
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_FACE));
+            mongoTemplate.insert(faceList);
         }
-
+        //TODO:宸ュ崟
         log.info("缁撴潫鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹悓姝�");
     }
 
-
-    //涓�鏈轰竴妗�
-    public void task2() {
-        //鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼
+    //閲囬泦璁惧灞炴�х洃娴嬬粨鏋�(浜鸿劯)
+    public void monitorDetailTask() {
+        log.info("寮�濮嬫墽琛岄噰闆嗚澶囧睘鎬х洃娴嬬粨鏋滄暟鎹悓姝�");
+        //浜鸿劯鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
+        MonitoringDetailParam param = new MonitoringDetailParam();
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate());
+        JSONObject jsonObject = hkClient.monitorDetail(param);
+        List<MonitoringDetailResult> faceList = getDataList(jsonObject, MonitoringDetailResult.class, "閲囬泦璁惧灞炴�х洃娴嬬粨鏋滄暟鎹负绌�");
+        if (!CollectionUtils.isEmpty(faceList)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, MonitoringDetailResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫閲囬泦璁惧灞炴�х洃娴嬬粨鏋滄暟鎹悓姝�");
     }
 
     //鍗″彛灞炴�х洃娴嬬粨鏋�
-    public void task3() {
+    public void crossDetailTask() {
+        log.info("寮�濮嬫墽琛屽崱鍙e睘鎬х洃娴嬬粨鏋滄暟鎹悓姝�");
         //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
+        CrossDetailParam param = new CrossDetailParam();
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate());
+        JSONObject jsonObject = hkClient.crossDetail(param);
+        List<CrossDetailResult> faceList = getDataList(jsonObject, CrossDetailResult.class, "鍗″彛灞炴�х洃娴嬬粨鏋滄暟鎹负绌�");
+        if (!CollectionUtils.isEmpty(faceList)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, CrossDetailResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫鍗″彛灞炴�х洃娴嬬粨鏋滄暟鎹悓姝�");
     }
 
     //鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋�
-    public void task4() {
+    public void dataIntegrityMonitoringTask() {
+        log.info("寮�濮嬫墽琛屾暟鎹畬鏁存�х洃娴嬬粨鏋滄暟鎹悓姝�");
         //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�
+        DataIntegrityMonitoringParam param = new DataIntegrityMonitoringParam();
+        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)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, DataIntegrityMonitoringResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋滄暟鎹悓姝�");
     }
 
     //灞炴�ц瘑鍒噯纭洃娴嬬粨鏋�
-    public void task5() {
-        //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�
-    }
+    public void attrRecognitionMonitorTask() {
+        log.info("寮�濮嬫墽琛屽睘鎬ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹悓姝�");
+        //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�
+        AttrRecognitionParam param = new AttrRecognitionParam();
+        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)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, AttrRecognitionMonitorResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫灞炴�ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹悓姝�");
 
-    //杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-    public void task6() {
-        //杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�
     }
 
     //鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉
-    public void task7() {
+    public void snapshopDelayMonitorTask() {
+        log.info("寮�濮嬫墽琛屾姄鎷嶆暟鎹椂寤剁洃娴嬬粨鏋滄暟鎹悓姝�");
         //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�
+        /** 杞﹁締鏁版嵁 */
+        SnapshotDelayMonitorParam carParam = new SnapshotDelayMonitorParam();
+        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("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
+                    .and("dataType").is(ApiConstants.HK_DATATYPE_CAR));
+            DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            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);
+        JSONObject faceJsonObject = hkClient.SnapshotDelayMonitor(faceParam);
+        List<SnapshotDelayMonitorParam> faceList = getDataList(faceJsonObject, SnapshotDelayMonitorParam.class, "浜鸿劯鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹负绌�");
+        if (!CollectionUtils.isEmpty(faceList)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
+                    .and("dataType").is(ApiConstants.HK_DATATYPE_FACE));
+            DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_FACE));
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟
+        log.info("缁撴潫鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉鏁版嵁鍚屾");
     }
 
     //鍥剧墖璁块棶鐩戞祴缁撴灉
-    public void task8() {
-        //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
-
-        //杞﹁締鍗″彛璁惧url鍙敤鎬�
+    public void PicAccessTask() {
+        log.info("寮�濮嬫墽琛屽浘鐗囪闂洃娴嬬粨鏋滄暟鎹悓姝�");
+        //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜囥�佽溅杈嗗崱鍙h澶噓rl鍙敤鎬�
+        PicAccessParam param = new PicAccessParam();
+        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)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, PicAccessResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫鍥剧墖璁块棶鐩戞祴缁撴灉鏁版嵁鍚屾");
     }
 
-    //鑾峰彇褰撳墠鏃ユ湡
-    private String getToday() {
-        Date date = new Date();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        String today = sdf.format(date);
-        return today;
+    //浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
+    public void Face() {
+        log.info("寮�濮嬫墽琛屼汉鑴歌澶囨娊妫�鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
+        //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜囥�佽溅杈嗗崱鍙h澶噓rl鍙敤鎬�
+        FaceDeviceSamplingParam param = new FaceDeviceSamplingParam();
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate());
+        JSONObject jsonObject = hkClient.FaceDeviceSampling(param);
+        List<FaceDeviceSamplingResult> faceList = getDataList(jsonObject, FaceDeviceSamplingResult.class, "浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉鏁版嵁涓虹┖");
+        if (!CollectionUtils.isEmpty(faceList)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, PicAccessResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
+    }
+
+    //杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
+    public void FaceDeviceSamplingTask() {
+        log.info("寮�濮嬫墽琛岃溅杈嗚澶囨娊妫�鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
+        //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜囥�佽溅杈嗗崱鍙h澶噓rl鍙敤鎬�
+        FaceDeviceSamplingParam param = new FaceDeviceSamplingParam();
+        param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate());
+        JSONObject jsonObject = hkClient.FaceDeviceSampling(param);
+        List<FaceDeviceSamplingResult> faceList = getDataList(jsonObject, FaceDeviceSamplingResult.class, "浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉鏁版嵁涓虹┖");
+        if (!CollectionUtils.isEmpty(faceList)) {
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            Query query = new Query(Criteria
+                    .where("createTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            DeleteResult result = mongoTemplate.remove(query, PicAccessResult.class);
+            //瀛樻斁鍦╩ongo涓�
+            mongoTemplate.insert(faceList);
+        }
+        //TODO:宸ュ崟澶勭悊
+        log.info("缁撴潫浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
     }
 
     //瑙f瀽鏁版嵁
diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java
index 4d94bba..be50d01 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -1,5 +1,6 @@
 package com.ycl.task;
 
+import com.ycl.platform.domain.param.UY.OnlineParam;
 import com.ycl.platform.service.IYwThresholdService;
 import com.ycl.feign.UYClient;
 import lombok.extern.slf4j.Slf4j;
@@ -49,8 +50,12 @@
     }
 
     //鍥惧儚鐩戞祴璇婃柇缁撴灉
-    public void task2() {
+    public void queryVqdResultTask() {
         //鐐逛綅鍦ㄧ嚎鐜�
+        log.info("寮�濮嬫墽琛屽浘鍍忕洃娴嬭瘖鏂粨鏋滄暟鎹悓姝�");
+
+
+        log.info("缁撴潫鎵ц鍥惧儚鐩戞祴璇婃柇缁撴灉鏁版嵁鍚屾");
     }
 
     //褰曞儚鍙敤
@@ -58,10 +63,5 @@
         //褰曞儚鍙敤鐜�
     }
 
-    private String getToday() {
-        Date date = new Date();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        String today = sdf.format(date);
-        return today;
-    }
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
index 0be7f5f..a27708e 100644
--- a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
+++ b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
@@ -8,6 +8,7 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.Objects;
 
@@ -227,4 +228,34 @@
         LocalDateTime of = LocalDateTime.of(localDateTime.getYear(), localDateTime.getMonth(), localDateTime.getDayOfMonth(), 23, 59, 59);
         return Timestamp.valueOf(of);
     }
+
+    /**
+     * 鑾峰彇鎸囧畾Calendar鐨勫搴﹀紑濮嬫棩鏈�
+      * @param calendar 鏃ュ巻
+     * @return 瀛e害绗竴澶�
+     */
+    public static Calendar getQuarterStart(Calendar calendar) {
+        Calendar quarterStart = (Calendar) calendar.clone();
+        // 璁剧疆涓哄綋鍓嶅搴︾殑绗竴涓湀鐨勭涓�澶�
+        quarterStart.set(Calendar.DAY_OF_MONTH, 1);
+        int month = quarterStart.get(Calendar.MONTH);
+        quarterStart.set(Calendar.MONTH, (month / 3) * 3);
+        return quarterStart;
+    }
+
+    /**
+     * 鑾峰彇鎸囧畾Calendar鐨勫搴︾粨鏉熸棩鏈�
+     * @param calendar 鏃ュ巻
+     * @return 瀛e害鏈�鍚庝竴澶�
+     */
+    public static Calendar getQuarterEnd(Calendar calendar) {
+        Calendar quarterEnd = getQuarterStart(calendar);
+        // 灏嗘湀浠借缃负涓嬩竴涓搴︾殑绗竴涓湀
+        quarterEnd.add(Calendar.MONTH, 3);
+        // 璁剧疆涓洪偅涓湀鐨勬渶鍚庝竴澶�
+        quarterEnd.add(Calendar.DAY_OF_MONTH, -1);
+        return quarterEnd;
+    }
+
+
 }
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
index 21c56ba..a3c9adf 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -20,6 +20,7 @@
 
     <select id="page" resultMap="BaseResultMap">
         SELECT
+            tcr.contract_id,
             tyu.unit_name,
             tc.name,
             tcr.id,
@@ -99,4 +100,14 @@
         WHERE tcr.id = #{id}
     </select>
 
+    <select id="exportData" resultType="com.ycl.platform.domain.excel.CalculateExport">
+        SELECT
+            SUBSTRING_INDEX(rule_name, '/', 1) AS rule_name,
+            COUNT(*) AS num,
+            -SUM(score) AS score
+        FROM t_contract_score
+        WHERE contract_id = #{contractId} AND 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/CheckIndexFaceMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml
index 7c73d45..43aaf4d 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CheckIndexFaceMapper.xml
@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ycl.platform.mapper.CheckIndexFaceMapper">
-    
+
     <resultMap type="com.ycl.platform.domain.entity.CheckIndexFace" id="CheckIndexFaceResult">
         <result property="id"    column="id"    />
         <result property="deptId"    column="dept_id"    />
@@ -26,7 +26,7 @@
     <select id="selectCheckIndexFaceList"  resultMap="CheckIndexFaceResult">
         select tcif.*,sd.dept_name
         from t_check_index_face tcif left join sys_dept sd on tcif.dept_id = sd.dept_id
-        <where>  
+        <where>
             <if test="deptId != null "> and tcif.dept_id = #{deptId}</if>
             <if test="examineTag != null "> and examine_tag = #{examineTag}</if>
             <if test="date != null "> and  date_format(tcif.create_time,'%Y-%m') = #{date}</if>
@@ -46,12 +46,12 @@
             </if>
         </where>
     </select>
-    
+
     <select id="selectCheckIndexFaceById"  resultMap="CheckIndexFaceResult">
         <include refid="selectCheckIndexFaceVo"/>
         where id = #{id}
     </select>
-        
+
     <insert id="insertCheckIndexFace"  useGeneratedKeys="true" keyProperty="id">
         insert into t_check_index_face
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -105,9 +105,13 @@
     </delete>
 
     <delete id="deleteCheckIndexFaceByIds" >
-        delete from t_check_index_face where id in 
+        delete from t_check_index_face where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-</mapper>
\ No newline at end of file
+
+    <select id="selectToday">
+        select * from t_check_index_car where DATE(create_time) = #{today}
+    </select>
+</mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
index 45fc2ec..12fb02b 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
@@ -114,4 +114,23 @@
         (#{score.score},#{score.deptId},#{score.templateId},#{score.examineTag},#{score.examineCategory},#{score.createTime})
     </foreach>
     </insert>
+
+    <select id="selectCheckScoreMap" resultType="com.ycl.platform.domain.entity.CheckScore">
+        SELECT
+            tcs.dept_id,
+            examine_category,
+            AVG(score) AS score,
+            #{startDate} AS startDate,
+            #{endDate} AS endDate
+        FROM
+            t_check_score tcs
+                LEFT JOIN sys_dept d ON tcs.dept_id = d.dept_id
+        WHERE
+            examine_tag = #{examineTag}
+          AND tcs.create_time BETWEEN #{startDate} AND #{endDate}
+        GROUP BY
+            tcs.dept_id,
+            examine_category
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0