From 73caf5a7072976021f43a764ed2ad73404f4d040 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 02 一月 2025 13:42:15 +0800
Subject: [PATCH] mongo索引、运行监控报表调整

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java     |    4 
 ycl-server/src/main/java/com/ycl/task/ContractTask.java                                     |   20 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java    |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java      |    6 
 ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java                        |  102 +++---
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/QueryVqdResult.java                |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java    |    6 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java             |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java                |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java        |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java          |   13 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java              |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java   |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java  |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoQualityResult.java            |    3 
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml                               |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java            |    6 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java                       |    9 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java         |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java               |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java               |    5 
 ycl-server/src/main/resources/application-dev.yml                                           |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java          |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java        |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java             |  539 ++++++++++++++++++++++++++--------------
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java          |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java               |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java        |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java             |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java              |    2 
 32 files changed, 433 insertions(+), 346 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java
index 461ebe2..dafcdd1 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java
@@ -4,6 +4,8 @@
 import org.bson.types.ObjectId;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.index.TextIndexed;
 
 import java.time.LocalDate;
 import java.util.Date;
@@ -17,14 +19,17 @@
      * 鏁版嵁鏃ユ湡
      */
     @CreatedDate
+    @Indexed(background = true)
     private LocalDate mongoCreateTime;
     /**
      * 鍥芥爣鐮�
      */
+    @Indexed(background = true)
     private String no;
     /**
      * 鐪佸巺
      */
+    @Indexed(background = true)
     private Boolean provinceTag;
     //鎺ユ敹mysql鏁版嵁鐢�
     private Boolean provinceTagVideo;
@@ -34,20 +39,24 @@
     /**
      * 閮ㄧ骇
      */
+    @Indexed(background = true)
     private Boolean deptTag;
 
     /**
      * 閲嶇偣
      */
+    @Indexed(background = true)
     private Boolean importantTag;
 
     /**
      * 閲嶇偣鎸囨尌鍥惧儚
      */
+    @Indexed(background = true)
     private Boolean importantCommandImageTag;
 
     /**
      * 鏂拌澶�, true浠h〃鏂拌澶囷紝false鍜宯ull涓嶆槸鏂拌澶�
      */
+    @Indexed(background = true)
     private Boolean newDevice;
 }
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 7c9f0d7..e1e1fc6 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
@@ -22,13 +22,11 @@
     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鎴栧崱鍙e悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
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 75b2953..d5d904c 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
@@ -17,13 +17,11 @@
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍖哄煙
      */
-    @TextIndexed
     private String orgName;
 
     /**
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 6fd707e..791fe51 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
@@ -17,13 +17,11 @@
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     /**
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 27fd236..cfab5c6 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
@@ -17,13 +17,11 @@
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     /**
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 7078f96..ad43a7c 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
@@ -19,25 +19,21 @@
     /**
      * 缁勭粐缂栧彿锛岀敤浜庢煡璇㈣缁勭粐鍙婂叾鎵�鏈変笅绾х粍缁囧崱鍙e紓甯告儏鍐点�傝嫢涓嶄紶锛岃繑鍥炴墍鏈夊崱鍙e紓甯歌鎯呫��
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 閲囬泦璁惧鍐呯爜锛岀敤浜庢爣璇嗙壒瀹氱殑閲囬泦璁惧銆�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 鍥芥爣缂栫爜锛堝鐮侊級锛岀敤浜庢爣鍑嗗寲鏍囪瘑閲囬泦璁惧銆�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 鍗″彛鍚嶇О锛岀敤浜庢弿杩版垨鏍囪瘑鍗″彛銆�
      */
-    @TextIndexed
     private String crossName;
 
     /**
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 c038942..a714942 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
@@ -17,25 +17,21 @@
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
      /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-     @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鎴栧崱鍙e悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
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 dc8a6ee..5d45a79 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
@@ -17,13 +17,11 @@
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍖哄煙
      */
-    @TextIndexed
     private String orgName;
 
     /**
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 97a0b15..d2037c4 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
@@ -19,37 +19,31 @@
     /**
      * 璁惧鍚嶇О
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 璁惧缂栧彿
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�2鎴�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * IP鍦板潃
      */
-    @TextIndexed
     private String networkAddr;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     /**
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 92d85be..40fb956 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
@@ -22,37 +22,31 @@
     /**
      * 璁惧鍚嶇О
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�2鎴�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * IP鍦板潃
      */
-    @TextIndexed
     private String networkAddr;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     // 浠ヤ笅涓哄祵濂楀璞$殑瀛楁
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 c3b82cc..ee6241d 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
@@ -30,13 +30,11 @@
         /**
          * 鍚嶇О
          */
-        @TextIndexed
         private String monitorName;
 
         /**
          * 缂栧彿
          */
-        @TextIndexed
         private String monitorCode;
 
         /**
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 d4105dd..5dfebbf 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
@@ -19,25 +19,21 @@
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 閲囬泦璁惧鍐呯爜
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 鍥芥爣缂栫爜锛堝鐮侊級
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 閲囬泦璁惧鍚嶇О
      */
-    @TextIndexed
     private String cameraName;
 
     /**
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 bd11406..785e73a 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
@@ -31,13 +31,11 @@
         /**
          * 缁勭粐缂栧彿
          */
-        @TextIndexed
         private String orgCode;
 
         /**
          * 缁勭粐鍚嶇О
          */
-        @TextIndexed
         private String orgName;
 
         /**
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 29815f6..660c856 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
@@ -22,25 +22,21 @@
     /**
      * 鏁版嵁绫诲瀷涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝鏁版嵁绫诲瀷涓�2鎴�11鏃惰〃绀轰汉鑴搁噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鎴栧崱鍙e悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
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 53e4f17..4365b71 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
@@ -22,25 +22,21 @@
     /**
      * dataType涓�1锛氬崱鍙e唴鐮�   dataType涓�2鎴�11锛氶噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鎴栧崱鍙e悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
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 3b5aa0c..731b83c 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
@@ -19,25 +19,21 @@
     /**
      * dataType涓�1锛氬崱鍙e唴鐮�   dataType涓�2鎴�11锛氶噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鎴栧崱鍙e悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
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 9914bcf..6a6b806 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
@@ -19,32 +19,27 @@
     /**
      * 璁惧缂栧彿锛宒ataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鍚嶇О
      */
-    @TextIndexed
     private String deviceName;
 
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     /**
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 02e1390..ff11462 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
@@ -22,31 +22,26 @@
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 璁惧鎴栧崱鍙e浗鏍囩紪鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鎴栧崱鍙e悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     // 浠ヤ笅涓哄祵濂楀璞$殑瀛楁
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java
index b22f45d..14fc361 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java
@@ -20,7 +20,6 @@
     /**
      * IP鍦板潃
      */
-    @TextIndexed
     private QualifyResult ip;
     /**
      * 鐩戞帶鐐逛綅绫诲瀷
@@ -41,7 +40,6 @@
     /**
      * 璁惧鍚�
      */
-    @TextIndexed
     private QualifyResult name;
     /**
      * 璁惧鐘舵��
@@ -50,7 +48,6 @@
     /**
      * 璁惧缂栫爜
      */
-    @TextIndexed
     private QualifyResult serialNumber;
     /**
      * 鎽勫儚鏈洪噰闆嗗尯鍩�
@@ -75,12 +72,10 @@
         /**
          * 灞曠ず鍊�
          */
-        @TextIndexed
         private String showValue;
         /**
          * 鏁版嵁鍘熷鍊硷紝濡傚浗鏍囩爜绛�
          */
-        @TextIndexed
         private String value;
     }
 
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java
index 7b80843..63d9094 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java
@@ -22,19 +22,16 @@
     /**
      * 璁惧缂栫爜锛�20浣嶏細涓績缂栫爜銆佽涓氱紪鐮併�佽澶囩被鍨嬨�佺綉缁滄爣璇嗐�佽澶囧簭鍙凤紝涓庤仈缃戝钩鍙�/鍏变韩骞冲彴鍥芥爣缂栫爜涓�鑷淬��
      */
-    @TextIndexed
     private String SBBM;
 
     /**
      * 璁惧鍚嶇О锛屾爣璇嗚澶囩殑鍩烘湰鍚嶇О銆傚懡鍚嶆柟寮忓弬鐓с�奊AT751-2008瑙嗛鍥惧儚鏂囧瓧鏍囨敞瑙勮寖銆嬨��
      */
-    @TextIndexed
     private String SBMC;
 
     /**
      * 鎽勫儚鏈洪噰闆嗗尯鍩燂紙鍙傝�冩枃妗hВ鏋愶級
      */
-    @TextIndexed
     private String SXJCJQY;
 
     /**
@@ -46,7 +43,6 @@
     /**
      * IPV4鍦板潃锛屾憚鍍忔満IP鍦板潃銆�
      */
-    @TextIndexed
     private String IP;
 
     /**
@@ -72,7 +68,6 @@
     /**
      * MAC鍦板潃锛屾憚鍍忔満MAC鍦板潃銆�
      */
-    @TextIndexed
     private String MACDZ;
 
     /**
@@ -85,7 +80,6 @@
     /**
      * 璁惧鍘傚晢锛岀紪鐮�1-娴峰悍濞佽锛�2-澶у崕锛�3-澶╁湴浼熶笟锛�4-绉戣揪锛�5-瀹夎澹紱6-鍗氫笘锛�7-浜氬畨锛�8-鑻遍鎷擄紱9-瀹囪锛�10-娴蜂俊锛�11-涓槦鐢靛瓙锛�12-鏄庢櫙锛�13-鑱旀兂锛�14-涓叴锛�99-鍏朵粬銆�
      */
-    @TextIndexed
     private String SBCS;
 
     /**
@@ -101,7 +95,6 @@
     /**
      * 鐐逛綅淇楃О锛岀洃鎺х偣浣嶉檮杩戝鏈夋爣蹇楁�у缓绛戙�佸満鎵�鎴栫洃鎺х偣浣嶅浜庡叕浼楃害瀹氫織鎴愮殑鍦扮偣锛屽彲浠ュ~鍐欐爣蹇楁�у缓璁惧悕绉板拰鍦扮偣淇楃О銆�
      */
-    @TextIndexed
     private String DWSC;
 
     /**
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java
index ea63c09..1c04824 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java
@@ -23,7 +23,6 @@
     /**
      * 鍥芥爣鐮�
      */
-    @TextIndexed
     private String deviceNo;
 
     /**
@@ -43,7 +42,6 @@
     /**
      * ip
      */
-    @TextIndexed
     private String ip;
 
     /**
@@ -62,7 +60,6 @@
     /**
      * osd閫氶亾鍚�
      */
-    @TextIndexed
     private String osdName;
     /**
      * osd鐪�
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
index 8ccba5c..d950d48 100644
--- 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
@@ -22,7 +22,6 @@
     /**
      * 琛屾斂鍖哄垝鍚嶇О
      */
-    @TextIndexed
     private String arealayernoName;
     /**
      *
@@ -63,12 +62,10 @@
     /**
      * 璁惧 IP
      */
-    @TextIndexed
     private String deviceIp;
     /**
      * 璁惧鍚嶇О
      */
-    @TextIndexed
     private String deviceName;
     /**
      *
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 a07c5c9..f005ce1 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
@@ -3,6 +3,9 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.springframework.data.mongodb.core.index.CompoundIndex;
+import org.springframework.data.mongodb.core.index.CompoundIndexes;
+import org.springframework.data.mongodb.core.index.Indexed;
 import org.springframework.data.mongodb.core.index.TextIndexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
@@ -16,12 +19,16 @@
  */
 @Data
 @Document(collection = "uy_record_meta_d_sum")
+@CompoundIndexes({
+        //name锛氱储寮曞悕绉� def锛氬瓧娈�(1姝e簭 -1鍊掑簭) unique锛氭槸鍚﹀敮涓�绱㈠紩
+        //鐩存帴鍔犲埌瀛楁涓婇潰娌$敤
+        @CompoundIndex(name = "video_record", def = "{statTime:-1, no:1}")
+})
 public class RecordMetaDSumResult extends BaseResult {
 
     /**
      * 琛屾斂鍖哄煙鍚嶇О
      */
-    @TextIndexed
     private String arealayername;
 
     /**
@@ -38,13 +45,11 @@
     /**
      * 鎽勫儚鏈篒D
      */
-    @TextIndexed
     private String deviceId;
 
     /**
      * 鎽勫儚鏈哄悕绉�
      */
-    @TextIndexed
     private String deviceName;
 
     /**
@@ -60,7 +65,6 @@
     /**
      * 鍥芥爣骞冲彴ID
      */
-    @TextIndexed
     private String platId;
 
     /**
@@ -82,6 +86,7 @@
      * 缁熻鏃堕棿锛屾牸寮忎负鏃ユ湡瀛楃涓�
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Indexed(background = true)
     private Date statTime;
 
     /**
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java
index 6a7bb2f..d6cd5ac 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java
@@ -30,7 +30,6 @@
     /**
      * 琛屾斂鍖哄垝鍚嶇О
      */
-    @TextIndexed
     private String arealayerName;
 
     /**
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
index 39118cf..a68bddd 100644
--- 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
@@ -16,7 +16,6 @@
     private String arealayernoCode;
 
     /** 琛屾斂鍖哄垝鍚嶇О */
-    @TextIndexed
     private String arealayernoName;
 
     /** 妯$硦 */
@@ -35,11 +34,9 @@
     private String deviceId;
 
     /** 鎽勫儚鏈篿p */
-    @TextIndexed
     private String deviceIp;
 
     /** 鎽勫儚鏈鸿澶囧悕绉� */
-    @TextIndexed
     private String deviceName;
 
     /** 缁熻绾害 */
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java
index 94b381c..4c4097b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java
@@ -16,32 +16,27 @@
     /**
      * 璁惧缂栧彿锛宒ataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String externalIndexCode;
 
     /**
      * 璁惧鍚嶇О
      */
-    @TextIndexed
     private String deviceName;
 
 
     /**
      * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮�
      */
-    @TextIndexed
     private String indexCode;
 
     /**
      * 缁勭粐缂栧彿
      */
-    @TextIndexed
     private String orgCode;
 
     /**
      * 缁勭粐鍚嶇О
      */
-    @TextIndexed
     private String orgName;
 
     /**
diff --git a/ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java b/ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java
index f928385..9a50226 100644
--- a/ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java
+++ b/ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java
@@ -182,56 +182,56 @@
     }
 
 
-    public static void main(String[] args) {
-        EasyExcel.write("test.xlsx", CalculateRule.class)
-                // 鑷�傚簲鍒楀
-                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
-                // 涓嬫媺妗�
-                .registerWriteHandler(new CustomSheetWriteHandler(Arrays.asList("鎵f寚瀹氬垎鏁�", "鍒嗘暟涔樹互鏁伴噺", "闄や互鏁伴噺鍚庝箻浠ュ垎鏁�")))
-                .registerWriteHandler(new CustomCellWriteHandler())
-                // 鏍囨敞
-                .registerWriteHandler(new CommentWriteHandler())
-                .sheet("鍚堝悓瀵煎叆妯℃澘")
-                .doWrite(getExcelData());
-    }
-
-    private static List<CalculateRule> getExcelData() {
-        ArrayList<CalculateRule> list = new ArrayList<>();
-
-        setTemplateRule(list,1,"璁惧骞冲潎鍦ㄧ嚎鐜�","鈮�98%",null,98D,RuleDeductCategoryEnum.DEDUCT_POINTS,0.00);
-        setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","95%鈮よ澶囧钩鍧囧湪绾跨巼锛�98%",97D,95D,RuleDeductCategoryEnum.DEDUCT_POINTS,5.00);
-        setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","90%鈮よ澶囧钩鍧囧湪绾跨巼锛�95%",94D,90D,RuleDeductCategoryEnum.DEDUCT_POINTS,10.00);
-        setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","锛�90%",89D,null,RuleDeductCategoryEnum.DEDUCT_POINTS,20.00);
-
-        setTemplateRule(list,2,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","鏃堕挓鍚屾锛堣秴杩嚶�3绉掍负涓嶅悎鏍硷級",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
-        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","OSD鏍囪瘑",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
-        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","涓�鏈轰竴妗�",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
-
-        setTemplateRule(list,3,"瀵逛簬鍓嶇鐐逛綅寮傚父鎯呭喌鐨勫鐞�","闀滃ご鏁呴殰鎴栨薄鏌撴垨鏍戞灊閬尅鎴栨灙鏈鸿瑙掑亸绉绘甯歌搴︽垨琛ュ厜鐏簲浜湭浜�,24灏忔椂鍚庢湭淇鐨�",null,24D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.5);
-        setTemplateRule(list,null,"瀵逛簬鍓嶇鐐逛綅寮傚父鎯呭喌鐨勫鐞�","闀滃ご鏁呴殰鎴栨薄鏌撴垨鏍戞灊閬尅鎴栨灙鏈鸿瑙掑亸绉绘甯歌搴︽垨琛ュ厜鐏簲浜湭浜�,48灏忔椂鍚庢湭淇鐨�",null,48D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.0);
-
-        setTemplateRule(list,4,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","姣忚矾瑙嗛绱涓㈠け10鍒嗛挓浠ュ唴",10D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.2);
-        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け10-60 鍒嗛挓",10D,60D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.5);
-        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け1 灏忔椂-4 灏忔椂锛堝惈锛�",60D,240D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.0);
-        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け4 灏忔椂-12 灏忔椂锛堝惈锛�",240D,720D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.5);
-        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け12 灏忔椂浠ヤ笂",null,720D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,2.0);
-
-        setTemplateRule(list,5,"纭繚鍥剧墖瀹屾暣涓嶅畾鏈熷鎵�鏈変汉鑴歌溅杈嗕互鍙婃櫤鑳藉墠绔姄鎷嶇殑鍥剧墖瀹屾暣鎬ф娊鏌�","鍙戠幇鍚庡彴瀛樺偍涓嶈兘璋冨彇鍓嶇璁惧鍥剧墖",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,2.0);
-
-
-        return list;
-    }
-
-    private static void setTemplateRule(ArrayList<CalculateRule> list,Integer id,String ruleName,String condition,Double max,Double min,RuleDeductCategoryEnum deductCategoryEnum,Double calcFraction) {
-        CalculateRule calculateRule = new CalculateRule();
-        calculateRule.setId(id);
-        calculateRule.setRuleName(ruleName);
-        calculateRule.setRuleCondition(condition);
-        calculateRule.setMax(max);
-        calculateRule.setMin(min);
-        calculateRule.setDeductCategory(deductCategoryEnum);
-        calculateRule.setCalcFraction(calcFraction);
-        list.add(calculateRule);
-    }
+//    public static void main(String[] args) {
+//        EasyExcel.write("test.xlsx", CalculateRule.class)
+//                // 鑷�傚簲鍒楀
+//                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+//                // 涓嬫媺妗�
+//                .registerWriteHandler(new CustomSheetWriteHandler(Arrays.asList("鎵f寚瀹氬垎鏁�", "鍒嗘暟涔樹互鏁伴噺", "闄や互鏁伴噺鍚庝箻浠ュ垎鏁�")))
+//                .registerWriteHandler(new CustomCellWriteHandler())
+//                // 鏍囨敞
+//                .registerWriteHandler(new CommentWriteHandler())
+//                .sheet("鍚堝悓瀵煎叆妯℃澘")
+//                .doWrite(getExcelData());
+//    }
+//
+//    private static List<CalculateRule> getExcelData() {
+//        ArrayList<CalculateRule> list = new ArrayList<>();
+//
+//        setTemplateRule(list,1,"璁惧骞冲潎鍦ㄧ嚎鐜�","鈮�98%",null,98D,RuleDeductCategoryEnum.DEDUCT_POINTS,0.00);
+//        setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","95%鈮よ澶囧钩鍧囧湪绾跨巼锛�98%",97D,95D,RuleDeductCategoryEnum.DEDUCT_POINTS,5.00);
+//        setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","90%鈮よ澶囧钩鍧囧湪绾跨巼锛�95%",94D,90D,RuleDeductCategoryEnum.DEDUCT_POINTS,10.00);
+//        setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","锛�90%",89D,null,RuleDeductCategoryEnum.DEDUCT_POINTS,20.00);
+//
+//        setTemplateRule(list,2,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","鏃堕挓鍚屾锛堣秴杩嚶�3绉掍负涓嶅悎鏍硷級",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
+//        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","OSD鏍囪瘑",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
+//        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","涓�鏈轰竴妗�",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
+//
+//        setTemplateRule(list,3,"瀵逛簬鍓嶇鐐逛綅寮傚父鎯呭喌鐨勫鐞�","闀滃ご鏁呴殰鎴栨薄鏌撴垨鏍戞灊閬尅鎴栨灙鏈鸿瑙掑亸绉绘甯歌搴︽垨琛ュ厜鐏簲浜湭浜�,24灏忔椂鍚庢湭淇鐨�",null,24D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.5);
+//        setTemplateRule(list,null,"瀵逛簬鍓嶇鐐逛綅寮傚父鎯呭喌鐨勫鐞�","闀滃ご鏁呴殰鎴栨薄鏌撴垨鏍戞灊閬尅鎴栨灙鏈鸿瑙掑亸绉绘甯歌搴︽垨琛ュ厜鐏簲浜湭浜�,48灏忔椂鍚庢湭淇鐨�",null,48D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.0);
+//
+//        setTemplateRule(list,4,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","姣忚矾瑙嗛绱涓㈠け10鍒嗛挓浠ュ唴",10D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.2);
+//        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け10-60 鍒嗛挓",10D,60D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.5);
+//        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け1 灏忔椂-4 灏忔椂锛堝惈锛�",60D,240D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.0);
+//        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け4 灏忔椂-12 灏忔椂锛堝惈锛�",240D,720D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.5);
+//        setTemplateRule(list,null,"纭繚褰曞儚瀹屾暣涓嶅畾鏈熷鎵�鏈夌偣浣嶅綍鍍忓畬鏁存�ф娊鏌�","涓㈠け12 灏忔椂浠ヤ笂",null,720D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,2.0);
+//
+//        setTemplateRule(list,5,"纭繚鍥剧墖瀹屾暣涓嶅畾鏈熷鎵�鏈変汉鑴歌溅杈嗕互鍙婃櫤鑳藉墠绔姄鎷嶇殑鍥剧墖瀹屾暣鎬ф娊鏌�","鍙戠幇鍚庡彴瀛樺偍涓嶈兘璋冨彇鍓嶇璁惧鍥剧墖",null,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,2.0);
+//
+//
+//        return list;
+//    }
+//
+//    private static void setTemplateRule(ArrayList<CalculateRule> list,Integer id,String ruleName,String condition,Double max,Double min,RuleDeductCategoryEnum deductCategoryEnum,Double calcFraction) {
+//        CalculateRule calculateRule = new CalculateRule();
+//        calculateRule.setId(id);
+//        calculateRule.setRuleName(ruleName);
+//        calculateRule.setRuleCondition(condition);
+//        calculateRule.setMax(max);
+//        calculateRule.setMin(min);
+//        calculateRule.setDeductCategory(deductCategoryEnum);
+//        calculateRule.setCalcFraction(calcFraction);
+//        list.add(calculateRule);
+//    }
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
index 7bd7178..0e0e896 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java
@@ -85,9 +85,9 @@
         setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","90%鈮よ澶囧钩鍧囧湪绾跨巼锛�95%",94D,90D,RuleDeductCategoryEnum.DEDUCT_POINTS,10.00);
         setTemplateRule(list,null,"璁惧骞冲潎鍦ㄧ嚎鐜�","锛�90%",89D,null,RuleDeductCategoryEnum.DEDUCT_POINTS,20.00);
 
-        setTemplateRule(list,2,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","鏃堕挓鍚屾",24D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
-        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","OSD鏍囪瘑",24D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
-        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","涓�鏈轰竴妗�",24D,null,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
+        setTemplateRule(list,2,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","鏃堕挓鍚屾",null,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
+        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","OSD鏍囪瘑",null,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
+        setTemplateRule(list,null,"鍓嶇鎰熺煡婧愭不鐞嗗伐浣�","涓�鏈轰竴妗�",null,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.1);
 
         setTemplateRule(list,3,"瀵逛簬鍓嶇鐐逛綅寮傚父鎯呭喌鐨勫鐞�","闀滃ご鏁呴殰鎴栨薄鏌撴垨鏍戞灊閬尅鎴栨灙鏈鸿瑙掑亸绉绘甯歌搴︽垨琛ュ厜鐏簲浜湭浜�,24灏忔椂鍚庢湭淇鐨�",48D,25D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,0.5);
         setTemplateRule(list,null,"瀵逛簬鍓嶇鐐逛綅寮傚父鎯呭喌鐨勫鐞�","闀滃ご鏁呴殰鎴栨薄鏌撴垨鏍戞灊閬尅鎴栨灙鏈鸿瑙掑亸绉绘甯歌搴︽垨琛ュ厜鐏簲浜湭浜�,48灏忔椂鍚庢湭淇鐨�",null,49D,RuleDeductCategoryEnum.MULTIPLY_POINTS_BY_QUANTITY,1.0);
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
index b044f0c..5a5f199 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -3,6 +3,7 @@
 import annotation.DataScope;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mongodb.ExplainVerbosity;
 import com.mongodb.client.AggregateIterable;
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
@@ -54,6 +55,7 @@
 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.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import pojo.ExcelExp;
@@ -72,6 +74,9 @@
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
+import java.util.concurrent.*;
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -94,6 +99,8 @@
     private SysDictDataMapper dictDataMapper;
     @Autowired
     private DynamicColumnMapper dynamicColumnMapper;
+    @Autowired
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 
     /**
      * 鏌ヨ璁惧璧勪骇
@@ -353,8 +360,9 @@
     }
 
     /**
-     *  鏌ongo鏌ユ煇涓湀璁惧鎬绘暟
-     *  鏌ョ湅宸ュ崟鏁伴噺鏌ョ湅寮傚父鐨勬暟
+     * 鏌ongo鏌ユ煇涓湀璁惧鎬绘暟
+     * 鏌ョ湅宸ュ崟鏁伴噺鏌ョ湅寮傚父鐨勬暟
+     *
      * @param monitorQuery 鏌ヨ鏉′欢
      * @return
      */
@@ -432,75 +440,102 @@
             }
             exportForm.setDeptIds(deptIds);
         }
-        List<ExcelExp> mysheet = new ArrayList<>();
-        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + ""));
+        List<ExcelExp> sheet = new ArrayList<>();
+        //閫氳繃Collections闈欐�佹柟娉曪紝鎶妉ist杞负绾跨▼瀹夊叏鐨刲ist
+        List mysheet = Collections.synchronizedList(sheet);
         VideoExportForm.convertTags(exportForm);
-        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
-        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
-        Query query = getQuery(deviceIds, exportForm.getMonth());
+        Query query = getQuery(exportForm);
         //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁
         List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
+        // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌
+        Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream()
+                .collect(Collectors.toMap(
+                        TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁
+                        Function.identity(),  // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬�
+                        (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓�
+                ));
+        // 灏� Map 杞崲涓� List
+        List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values());
+        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
+        // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄
+        YearMonth yearMonth = YearMonth.parse(exportForm.getMonth());
+        // 鑾峰彇褰撴湀鐨勭涓�澶�
+        LocalDate start = yearMonth.atDay(1);
+        // 鑾峰彇涓嬩釜鏈堢殑绗竴澶╋紙閫氳繃鍔犱笂1涓湀骞惰缃棩涓�1锛�
+        YearMonth nextMonth = yearMonth.plusMonths(1);
+        LocalDate end = nextMonth.atDay(1);
+        //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹紝褰曞儚鐢变簬鏄墠涓�澶╃殑鎵�浠ヤ笉鐢╟reateTime瀛楁
+        Query videoQuery = new Query(Criteria.where("statTime").gte(start).lt(end));
+        videoQuery.addCriteria(Criteria.where("no").in(deviceIds));
         //鏈堜唤姣忔棩褰曞儚鏁版嵁
-        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class);
+        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(videoQuery, RecordMetaDSumResult.class);
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         String[] weeks = {"鏄熸湡涓�", "鏄熸湡浜�", "鏄熸湡涓�", "鏄熸湡鍥�", "鏄熸湡浜�", "鏄熸湡鍏�", "鏄熸湡鏃�"};
         // 鍒涘缓涓�涓狹ap鏉ュ瓨鍌ㄦ瘡澶╃殑绱姞鏁版嵁
-        Map<String, VideoTotalExp> totalMap = new HashMap<>();
+        Map<String, VideoTotalExp> totalMap = new ConcurrentHashMap<>();
+        List<CompletableFuture<Void>> futures = new ArrayList<>();
         //涓�涓儴闂ㄤ竴涓猻heet
         for (Integer deptId : exportForm.getDeptIds()) {
-            //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹�
-            List<String> ids = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).map(BaseResult::getNo).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(ids)) continue;
-            //绛涢�夐儴闂ㄦ暟鎹�
-            List<TMonitorResult> onlineList = onlineResult.stream().filter(tMonitorResult -> ids.contains(tMonitorResult.getNo())).collect(Collectors.toList());
-            List<RecordMetaDSumResult> recordList = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList());
-            List<VideoTotalExp> videoTotalExps = new ArrayList<>();
-            for (int i = 0; i < 31; i++) {
-                String date = exportForm.getMonth();
-                date += "-" + (i < 9 ? "0" + (i + 1) : (i + 1));
-                //鎬婚噺
-                VideoTotalExp totalExp = totalMap.computeIfAbsent(date, k -> new VideoTotalExp());
-                LocalDate parseTime = LocalDate.parse(date, formatter);
-                //鑾峰彇鏄熸湡鍑�
-                String week = weeks[parseTime.getDayOfWeek().getValue() - 1];
-                VideoTotalExp videoExp = new VideoTotalExp();
-                videoExp.setDate(date);
-                videoExp.setWeek(week);
-                //璁剧疆鐐逛綅鍦ㄧ嚎鎬婚噺
-                List<TMonitorResult> onlines = onlineList.stream().filter(tMonitorResult -> tMonitorResult.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList());
-                if (!CollectionUtils.isEmpty(onlines)) {
-                    videoExp.setTotal(onlines.size());
-                    long count = onlines.stream()
-                            .filter(item -> ApiConstants.UY_OnlineSite_Online.equals(item.getOnline()))
-                            .count();
-                    videoExp.setOnline(Integer.valueOf(count + ""));
-                    videoExp.setOffline(videoExp.getTotal() - videoExp.getOnline());
+            CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
+                //绛涢�夐儴闂ㄦ暟鎹�
+                Set<String> ids = onlineResult.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).map(BaseResult::getNo).collect(Collectors.toSet());
+                if (CollectionUtils.isEmpty(ids)) return;
+                //绛涢�夐儴闂ㄦ暟鎹�
+                List<TMonitorResult> onlineList = onlineResult.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList());
+                List<RecordMetaDSumResult> recordList = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList());
+                List<VideoTotalExp> videoTotalExps = new ArrayList<>();
+                for (int i = 0; i < 31; i++) {
+                    String date = exportForm.getMonth();
+                    date += "-" + (i < 9 ? "0" + (i + 1) : (i + 1));
+                    //鎬婚噺
+                    VideoTotalExp totalExp = totalMap.computeIfAbsent(date, k -> new VideoTotalExp());
+                    LocalDate parseTime = LocalDate.parse(date, formatter);
+                    //鑾峰彇鏄熸湡鍑�
+                    String week = weeks[parseTime.getDayOfWeek().getValue() - 1];
+                    VideoTotalExp videoExp = new VideoTotalExp();
+                    videoExp.setDate(date);
+                    videoExp.setWeek(week);
+                    //璁剧疆鐐逛綅鍦ㄧ嚎鎬婚噺
+                    List<TMonitorResult> onlines = onlineList.stream().filter(tMonitorResult -> tMonitorResult.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(onlines)) {
+                        videoExp.setTotal(onlines.size());
+                        long count = onlines.stream()
+                                .filter(item -> ApiConstants.UY_OnlineSite_Online.equals(item.getOnline()))
+                                .count();
+                        videoExp.setOnline(Integer.valueOf(count + ""));
+                        videoExp.setOffline(videoExp.getTotal() - videoExp.getOnline());
+                    }
+                    //璁剧疆瀛樺偍鎯呭喌
+                    List<RecordMetaDSumResult> records = recordList.stream().filter(record -> record.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(records)) {
+                        videoExp.setNoStore(Integer.valueOf(records.stream()
+                                .filter(record -> ApiConstants.UY_RecordStatus_Abnormal.equals(record.getRecordStatus()))
+                                .count() + ""));
+                        videoExp.setPartStore(Integer.valueOf(records.stream()
+                                .filter(record -> ApiConstants.UY_RecordStatus_Interval.equals(record.getRecordStatus()))
+                                .count() + ""));
+                    }
+                    videoTotalExps.add(videoExp);
+                    //绱姞浣滀负鍏ㄩ噺琛�
+                    totalExp.setDate(date);
+                    totalExp.setWeek(week);
+                    totalExp.setTotal((totalExp.getTotal() == null ? 0 : totalExp.getTotal()) + (videoExp.getTotal() == null ? 0 : videoExp.getTotal()));
+                    totalExp.setOnline((totalExp.getOnline() == null ? 0 : totalExp.getOnline()) + (videoExp.getOnline() == null ? 0 : videoExp.getOnline()));
+                    totalExp.setOffline((totalExp.getOffline() == null ? 0 : totalExp.getOffline()) + (videoExp.getOffline() == null ? 0 : videoExp.getOffline()));
+                    totalExp.setNoStore((totalExp.getNoStore() == null ? 0 : totalExp.getNoStore()) + (videoExp.getNoStore() == null ? 0 : videoExp.getNoStore()));
+                    totalExp.setPartStore((totalExp.getPartStore() == null ? 0 : totalExp.getPartStore()) + (videoExp.getPartStore() == null ? 0 : videoExp.getPartStore()));
+                    totalMap.put(date, totalExp);
                 }
-                //璁剧疆瀛樺偍鎯呭喌
-                List<RecordMetaDSumResult> records = recordList.stream().filter(record -> record.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList());
-                if (!CollectionUtils.isEmpty(records)) {
-                    videoExp.setNoStore(Integer.valueOf(records.stream()
-                            .filter(record -> ApiConstants.UY_RecordStatus_Abnormal.equals(record.getRecordStatus()))
-                            .count() + ""));
-                    videoExp.setPartStore(Integer.valueOf(records.stream()
-                            .filter(record -> ApiConstants.UY_RecordStatus_Interval.equals(record.getRecordStatus()))
-                            .count() + ""));
-                }
-                videoTotalExps.add(videoExp);
-                //绱姞浣滀负鍏ㄩ噺琛�
-                totalExp.setDate(date);
-                totalExp.setWeek(week);
-                totalExp.setTotal((totalExp.getTotal() == null ? 0 : totalExp.getTotal()) + (videoExp.getTotal() == null ? 0 : videoExp.getTotal()));
-                totalExp.setOnline((totalExp.getOnline() == null ? 0 : totalExp.getOnline()) + (videoExp.getOnline() == null ? 0 : videoExp.getOnline()));
-                totalExp.setOffline((totalExp.getOffline() == null ? 0 : totalExp.getOffline()) + (videoExp.getOffline() == null ? 0 : videoExp.getOffline()));
-                totalExp.setNoStore((totalExp.getNoStore() == null ? 0 : totalExp.getNoStore()) + (videoExp.getNoStore() == null ? 0 : videoExp.getNoStore()));
-                totalExp.setPartStore((totalExp.getPartStore() == null ? 0 : totalExp.getPartStore()) + (videoExp.getPartStore() == null ? 0 : videoExp.getPartStore()));
-                totalMap.put(date, totalExp);
-            }
-            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
-            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoTotalExps, VideoTotalExp.class);
-            mysheet.add(excelExp);
+                AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
+                ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoTotalExps, VideoTotalExp.class);
+                mysheet.add(excelExp);
+            }, threadPoolTaskExecutor);
+            futures.add(future);
         }
+        // 绛夊緟鎵�鏈変换鍔″畬鎴�
+        CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
+        allFutures.join(); // 杩欏皢闃诲鐩村埌鎵�鏈変换鍔″畬鎴�
+
         //娣诲姞鍏ㄩ噺琛�
         List<VideoTotalExp> totalExps = new ArrayList<>(totalMap.values());
         totalExps = totalExps.stream().sorted(Comparator.comparing(VideoTotalExp::getDate)).collect(Collectors.toList());
@@ -525,10 +560,22 @@
             }
             exportForm.setDeptIds(deptIds);
         }
-        List<ExcelExp> mysheet = new ArrayList<>();
-        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + ""));
+        List<ExcelExp> sheet = new ArrayList<>();
+        //閫氳繃Collections闈欐�佹柟娉曪紝鎶妉ist杞负绾跨▼瀹夊叏鐨刲ist
+        List mysheet = Collections.synchronizedList(sheet);
         VideoExportForm.convertTags(exportForm);
-        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
+        Query query = getQuery(exportForm);
+        //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁
+        List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
+        // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌
+        Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream()
+                .collect(Collectors.toMap(
+                        TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁
+                        Function.identity(),  // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬�
+                        (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓�
+                ));
+        // 灏� Map 杞崲涓� List
+        List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values());
         //鑾峰彇鍔ㄦ�佸垪鏁版嵁
         List<Integer> pointIds = tMonitorResults.stream().map(TMonitorResult::getPointId).collect(Collectors.toList());
         List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds);
@@ -540,47 +587,73 @@
                 tMonitorResult.setDynamicColumnList(map.get(pointId));
             }
         }
-        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
-        Query query = getQuery(deviceIds, exportForm.getMonth());
-        //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁
-        List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
-        //鍏ㄩ噺琛�
-        List<VideoDailyExp> totalExps = new ArrayList<>();
+        List<CompletableFuture<List<VideoDailyExp>>> futures = new ArrayList<>();
         for (Integer deptId : exportForm.getDeptIds()) {
-            List<VideoDailyExp> videoDailyExps = new ArrayList<>();
-            //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹�
-            List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(monitors)) continue;
-            List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList());
-            //绛涢�塵ongo鍖哄幙鏁版嵁
-            List<TMonitorResult> onlines = onlineResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList());
-            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
-            for (TMonitorResult result : monitors) {
-                VideoDailyExp videoDailyExp = new VideoDailyExp();
-                videoDailyExp.setSerialNumber(result.getNo());
-                videoDailyExp.setDeviceName(result.getName());
-                videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName());
-                StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""));
-                //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
-                if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) {
-                    List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList();
-                    for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
-                        tag.append(dynamicColumnVO.getColumnValue()).append("銆�");
+            CompletableFuture<List<VideoDailyExp>> future = CompletableFuture.supplyAsync(() -> {
+                List<VideoDailyExp> videoDailyExps = new ArrayList<>();
+                //绛涢�夐儴闂ㄦ暟鎹�
+                List<TMonitorResult> monitors = tMonitorResults.stream()
+                        .filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId()))
+                        .collect(Collectors.toList());
+                if (CollectionUtils.isEmpty(monitors)) return videoDailyExps;
+
+                List<String> ids = monitors.stream()
+                        .map(BaseResult::getNo)
+                        .collect(Collectors.toList());
+                //绛涢�塵ongo鍖哄幙鏁版嵁
+                List<TMonitorResult> onlines = onlineResult.stream()
+                        .filter(result -> ids.contains(result.getNo()))
+                        .collect(Collectors.toList());
+
+                AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
+                for (TMonitorResult result : monitors) {
+                    VideoDailyExp videoDailyExp = new VideoDailyExp();
+                    videoDailyExp.setSerialNumber(result.getNo());
+                    videoDailyExp.setDeviceName(result.getName());
+                    videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName());
+
+                    StringBuilder tag = new StringBuilder("" +
+                            (result.getProvinceTag() ? "鐪佸巺銆�" : "") +
+                            (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") +
+                            (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") +
+                            (result.getDeptTag() ? "閮ㄧ骇銆�" : ""));
+
+                    //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
+                    if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) {
+                        for (DynamicColumnVO dynamicColumnVO : result.getDynamicColumnList()) {
+                            tag.append(dynamicColumnVO.getColumnValue()).append("銆�");
+                        }
                     }
+                    // 鍒犻櫎瀛楃涓叉湯灏剧殑"銆�"
+                    if (tag.toString().endsWith("銆�")) {
+                        tag = new StringBuilder(tag.substring(0, tag.length() - 1));
+                    }
+                    videoDailyExp.setTag(tag.toString());
+
+                    try {
+                        setOnlineDaily(videoDailyExp, result, onlines);
+                    } catch (Exception e) {
+                        log.error(e.getMessage());
+                    }
+                    videoDailyExps.add(videoDailyExp);
                 }
-                // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲��
-                if (tag.toString().endsWith("銆�")) {
-                    tag = new StringBuilder(tag.substring(0, tag.length() - 1));
-                }
-                videoDailyExp.setTag(tag.toString());
-                setOnlineDaily(videoDailyExp, result, onlines);
-                videoDailyExps.add(videoDailyExp);
-                //鍏ㄩ噺琛�
-                totalExps.add(videoDailyExp);
-            }
-            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class);
-            mysheet.add(excelExp);
+
+                ExcelExp excelExp = new ExcelExp(
+                        areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(),
+                        videoDailyExps,
+                        VideoDailyExp.class
+                );
+                mysheet.add(excelExp);
+
+                return videoDailyExps;
+            }, threadPoolTaskExecutor);
+            futures.add(future);
         }
+        // 鑾峰彇鍏ㄩ噺鏁版嵁
+        List<VideoDailyExp> totalExps = futures.stream()
+                .map(CompletableFuture::join)
+                .flatMap(List::stream)
+                .collect(Collectors.toList());
         ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoDailyExp.class);
         mysheet.add(excelExp);
         ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet);
@@ -601,10 +674,22 @@
             }
             exportForm.setDeptIds(deptIds);
         }
-        List<ExcelExp> mysheet = new ArrayList<>();
-        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + ""));
+
         VideoExportForm.convertTags(exportForm);
-        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
+        Query query = getQuery(exportForm);
+        //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁
+        List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
+
+        // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌
+        Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream()
+                .collect(Collectors.toMap(
+                        TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁
+                        Function.identity(),  // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬�
+                        (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓�
+                ));
+        // 灏� Map 杞崲涓� List
+        List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values());
+        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
         //鑾峰彇鍔ㄦ�佸垪鏁版嵁
         List<Integer> pointIds = tMonitorResults.stream().map(TMonitorResult::getPointId).collect(Collectors.toList());
         List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds);
@@ -616,7 +701,7 @@
                 tMonitorResult.setDynamicColumnList(map.get(pointId));
             }
         }
-        List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
+
         // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄
         YearMonth yearMonth = YearMonth.parse(exportForm.getMonth());
         // 鑾峰彇褰撴湀鐨勭涓�澶�
@@ -625,48 +710,74 @@
         YearMonth nextMonth = yearMonth.plusMonths(1);
         LocalDate end = nextMonth.atDay(1);
         //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹紝褰曞儚鐢变簬鏄墠涓�澶╃殑鎵�浠ヤ笉鐢╟reateTime瀛楁
-        Query query = new Query(Criteria.where("statTime").gte(start).lt(end));
-        query.addCriteria(Criteria.where("no").in(deviceIds));
+        Query videoQuery = new Query(Criteria.where("statTime").gte(start).lt(end));
+        videoQuery.addCriteria(Criteria.where("no").in(deviceIds));
         //鏈堜唤姣忔棩褰曞儚绾挎暟鎹�
-        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class);
-        //鍏ㄩ噺琛�
-        List<VideoDailyExp> totalExps = new ArrayList<>();
+        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(videoQuery, RecordMetaDSumResult.class);
+
+        // 棰勫厛鎸夐儴闂↖D鍒嗙粍
+        Map<Integer, List<TMonitorResult>> monitorsByDept = tMonitorResults.stream()
+                .collect(Collectors.groupingBy(TMonitorResult::getDeptId));
+        // 棰勫厛鏋勫缓鏄犲皠
+        Map<String, List<RecordMetaDSumResult>> recordMap = recordResult.stream()
+                .collect(Collectors.groupingBy(RecordMetaDSumResult::getNo));
+        List<CompletableFuture<List<VideoDailyExp>>> futures = new ArrayList<>();
         for (Integer deptId : exportForm.getDeptIds()) {
-            List<VideoDailyExp> videoDailyExps = new ArrayList<>();
-            //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹�
-            List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(monitors)) continue;
-            List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList());
-            //绛涢�塵ongo鍖哄幙鏁版嵁
-            List<RecordMetaDSumResult> records = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList());
-            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
-            for (TMonitorResult result : monitors) {
-                VideoDailyExp videoDailyExp = new VideoDailyExp();
-                videoDailyExp.setSerialNumber(result.getNo());
-                videoDailyExp.setDeviceName(result.getName());
-                videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName());
-                StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""));
-                //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
-                if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) {
-                    List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList();
-                    for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
-                        tag.append(dynamicColumnVO.getColumnValue()).append("銆�");
+            CompletableFuture<List<VideoDailyExp>> future = CompletableFuture.supplyAsync(() -> {
+                List<VideoDailyExp> videoDailyExps = new ArrayList<>();
+                // 鑾峰彇褰撳墠閮ㄩ棬鐨勬暟鎹�
+                List<TMonitorResult> monitors = monitorsByDept.getOrDefault(deptId, Collections.emptyList());
+                if (CollectionUtils.isEmpty(monitors)) return videoDailyExps;
+                AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
+                for (TMonitorResult result : monitors) {
+                    VideoDailyExp videoDailyExp = new VideoDailyExp();
+                    videoDailyExp.setSerialNumber(result.getNo());
+                    videoDailyExp.setDeviceName(result.getName());
+                    videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName());
+                    StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""));
+                    //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
+                    if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) {
+                        List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList();
+                        for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
+                            tag.append(dynamicColumnVO.getColumnValue()).append("銆�");
+                        }
                     }
+                    // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲��
+                    if (tag.toString().endsWith("銆�")) {
+                        tag = new StringBuilder(tag.substring(0, tag.length() - 1));
+                    }
+                    videoDailyExp.setTag(tag.toString());
+                    // 浣跨敤Map鐩存帴鑾峰彇璁板綍锛岄伩鍏峟ilter鎿嶄綔
+                    List<RecordMetaDSumResult> recordsResult = recordMap.get(result.getNo());
+                    try {
+                        if(!CollectionUtils.isEmpty(recordsResult)) setRecordDaily(videoDailyExp, result, recordsResult);
+                    } catch (Exception e) {
+                        log.error(e.getMessage());
+                    }
+                    //鍖哄幙琛�
+                    videoDailyExps.add(videoDailyExp);
                 }
-                // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲��
-                if (tag.toString().endsWith("銆�")) {
-                    tag = new StringBuilder(tag.substring(0, tag.length() - 1));
-                }
-                videoDailyExp.setTag(tag.toString());
-                setRecordDaily(videoDailyExp, result, records);
-                //鍖哄幙琛�
-                videoDailyExps.add(videoDailyExp);
-                //鍏ㄩ噺琛�
-                totalExps.add(videoDailyExp);
-            }
-            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class);
-            mysheet.add(excelExp);
+                return videoDailyExps;
+            }, threadPoolTaskExecutor);
+            futures.add(future);
         }
+        // 绛夊緟鎵�鏈変换鍔″畬鎴�
+        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
+        // 姣忎釜閮ㄩ棬鐨勬暟鎹崟鐙繚瀛�
+        List<List<VideoDailyExp>> results = futures.stream()
+                .map(CompletableFuture::join)  // 鑾峰彇姣忎釜Future鐨勭粨鏋�
+                .collect(Collectors.toList());
+        List<VideoDailyExp> totalExps = new ArrayList<>();
+        List<ExcelExp> mysheet = new ArrayList<>();
+        for (List<VideoDailyExp> result : results) {
+            ExcelExp excelExp = new ExcelExp(
+                    result.get(0).getArea() == null ? "鏈煡" : result.get(0).getArea(),
+                    result,
+                    VideoDailyExp.class);
+            mysheet.add(excelExp);
+            totalExps.addAll(result);
+        }
+
         ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoDailyExp.class);
         mysheet.add(excelExp);
         ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet);
@@ -686,10 +797,18 @@
             }
             exportForm.setDeptIds(deptIds);
         }
-        List<ExcelExp> mysheet = new ArrayList<>();
-        exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + ""));
-        VideoExportForm.convertTags(exportForm);
-        List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm);
+        Query query = getQuery(exportForm);
+        //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁
+        List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
+        // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌
+        Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream()
+                .collect(Collectors.toMap(
+                        TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁
+                        Function.identity(),  // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬�
+                        (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓�
+                ));
+        // 灏� Map 杞崲涓� List
+        List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values());
         //鑾峰彇鍔ㄦ�佸垪鏁版嵁
         List<Integer> pointIds = tMonitorResults.stream().map(TMonitorResult::getPointId).collect(Collectors.toList());
         List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds);
@@ -710,46 +829,72 @@
         YearMonth nextMonth = yearMonth.plusMonths(1);
         LocalDate end = nextMonth.atDay(1);
         //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹紝褰曞儚鐢变簬鏄墠涓�澶╃殑鎵�浠ヤ笉鐢╟reateTime瀛楁
-        Query query = new Query(Criteria.where("statTime").gte(start).lt(end));
-        query.addCriteria(Criteria.where("no").in(deviceIds));
+        Query videoQuery = new Query(Criteria.where("statTime").gte(start).lt(end));
+        videoQuery.addCriteria(Criteria.where("no").in(deviceIds));
         //鏈堜唤姣忔棩褰曞儚绾挎暟鎹�
-        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class);
-        //鍏ㄩ噺琛�
-        List<VideoDailyExp> totalExps = new ArrayList<>();
+        List<RecordMetaDSumResult> recordResult = mongoTemplate.find(videoQuery, RecordMetaDSumResult.class);
+        // 棰勫厛鎸夐儴闂↖D鍒嗙粍
+        Map<Integer, List<TMonitorResult>> monitorsByDept = tMonitorResults.stream()
+                .collect(Collectors.groupingBy(TMonitorResult::getDeptId));
+        // 棰勫厛鏋勫缓鏄犲皠
+        Map<String, List<RecordMetaDSumResult>> recordMap = recordResult.stream()
+                .collect(Collectors.groupingBy(RecordMetaDSumResult::getNo));
+
+        List<CompletableFuture<List<VideoDailyExp>>> futures = new ArrayList<>();
         for (Integer deptId : exportForm.getDeptIds()) {
-            List<VideoDailyExp> videoDailyExps = new ArrayList<>();
-            //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹�
-            List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(monitors)) continue;
-            List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList());
-            //绛涢�塵ongo鍖哄幙鏁版嵁
-            List<RecordMetaDSumResult> records = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList());
-            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
-            for (TMonitorResult result : monitors) {
-                VideoDailyExp videoDailyExp = new VideoDailyExp();
-                videoDailyExp.setSerialNumber(result.getNo());
-                videoDailyExp.setDeviceName(result.getName());
-                videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName());
-                StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""));
-                //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
-                if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) {
-                    List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList();
-                    for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
-                        tag.append(dynamicColumnVO.getColumnValue()).append("銆�");
+            CompletableFuture<List<VideoDailyExp>> future = CompletableFuture.supplyAsync(() -> {
+                List<VideoDailyExp> videoDailyExps = new ArrayList<>();
+                // 鑾峰彇褰撳墠閮ㄩ棬鐨勬暟鎹�
+                List<TMonitorResult> monitors = monitorsByDept.getOrDefault(deptId, Collections.emptyList());
+                if (CollectionUtils.isEmpty(monitors)) return videoDailyExps;
+                AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
+                for (TMonitorResult result : monitors) {
+                    VideoDailyExp videoDailyExp = new VideoDailyExp();
+                    videoDailyExp.setSerialNumber(result.getNo());
+                    videoDailyExp.setDeviceName(result.getName());
+                    videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName());
+                    StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""));
+                    //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
+                    if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) {
+                        List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList();
+                        for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
+                            tag.append(dynamicColumnVO.getColumnValue()).append("銆�");
+                        }
                     }
+                    // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲��
+                    if (tag.toString().endsWith("銆�")) {
+                        tag = new StringBuilder(tag.substring(0, tag.length() - 1));
+                    }
+                    videoDailyExp.setTag(tag.toString());
+                    // 浣跨敤Map鐩存帴鑾峰彇璁板綍锛岄伩鍏峟ilter鎿嶄綔
+                    List<RecordMetaDSumResult> recordsResult = recordMap.get(result.getNo());
+                    try {
+                        if(!CollectionUtils.isEmpty(recordsResult)) setLoseDaily(videoDailyExp, recordsResult);
+                    } catch (Exception e) {
+                        log.error(e.getMessage());
+                    }
+                    videoDailyExps.add(videoDailyExp);
                 }
-                // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲��
-                if (tag.toString().endsWith("銆�")) {
-                    tag = new StringBuilder(tag.substring(0, tag.length() - 1));
-                }
-                videoDailyExp.setTag(tag.toString());
-                setLoseDaily(videoDailyExp, result, records);
-                videoDailyExps.add(videoDailyExp);
-                //鍏ㄩ噺琛�
-                totalExps.add(videoDailyExp);
-            }
-            ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class);
+                return videoDailyExps;
+            }, threadPoolTaskExecutor);
+            futures.add(future);
+        }
+        // 绛夊緟鎵�鏈変换鍔″畬鎴�
+        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
+
+        // 姣忎釜閮ㄩ棬鐨勬暟鎹崟鐙繚瀛�
+        List<List<VideoDailyExp>> results = futures.stream()
+                .map(CompletableFuture::join)  // 鑾峰彇姣忎釜Future鐨勭粨鏋�
+                .collect(Collectors.toList());
+        List<VideoDailyExp> totalExps = new ArrayList<>();
+        List<ExcelExp> mysheet = new ArrayList<>();
+        for (List<VideoDailyExp> result : results) {
+            ExcelExp excelExp = new ExcelExp(
+                    result.get(0).getArea() == null ? "鏈煡" : result.get(0).getArea(),
+                    result,
+                    VideoDailyExp.class);
             mysheet.add(excelExp);
+            totalExps.addAll(result);
         }
         ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoDailyExp.class);
         mysheet.add(excelExp);
@@ -904,7 +1049,7 @@
                 String type = car.replaceAll("3", "浜鸿劯");
                 monitor.setCameraFunType(type);
             }
-            StringBuilder tag = new StringBuilder("" + (monitor.getProvinceTagVideo() ? "鐪佸巺瑙嗛銆�" : "") + (monitor.getProvinceTagCar() ? "鐪佸巺杞﹁締銆�" : "")+ (monitor.getProvinceTagFace() ? "鐪佸巺浜鸿劯銆�" : "")+ (monitor.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (monitor.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (monitor.getDeptTag() ? "閮ㄧ骇銆�" : ""));
+            StringBuilder tag = new StringBuilder("" + (monitor.getProvinceTagVideo() ? "鐪佸巺瑙嗛銆�" : "") + (monitor.getProvinceTagCar() ? "鐪佸巺杞﹁締銆�" : "") + (monitor.getProvinceTagFace() ? "鐪佸巺浜鸿劯銆�" : "") + (monitor.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (monitor.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (monitor.getDeptTag() ? "閮ㄧ骇銆�" : ""));
             //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
             if (!CollectionUtils.isEmpty(monitor.getDynamicColumnList())) {
                 List<DynamicColumnVO> dynamicColumnList = monitor.getDynamicColumnList();
@@ -920,14 +1065,14 @@
         });
         ExcelUtil<TMonitorExp> util = new ExcelUtil<>(TMonitorExp.class);
         String sheetName = "";
-        if("1".equals(tMonitor.getCameraFunType())){
+        if ("1".equals(tMonitor.getCameraFunType())) {
             sheetName = "瑙嗛";
-        }else if("2".equals(tMonitor.getCameraFunType())){
+        } else if ("2".equals(tMonitor.getCameraFunType())) {
             sheetName = "杞﹁締";
-        }else if("3".equals(tMonitor.getCameraFunType())){
+        } else if ("3".equals(tMonitor.getCameraFunType())) {
             sheetName = "浜鸿劯";
         }
-        util.exportExcel(response, monitors,sheetName);
+        util.exportExcel(response, monitors, sheetName);
     }
 
 
@@ -1014,7 +1159,7 @@
         //鎸夋椂闂存帓搴�
         results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList());
         //濡傛灉鏄粯璁ゆ垨绱拰鍒欒繘琛岀疮鍜屼互鍙婅幏鍙栧熀鍑嗙嚎
-        if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
+        if (monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
             int snapCount = 0;
             for (HomeCarVO vo : results) {
                 if (vo.getSnapCount() != null) {
@@ -1128,7 +1273,7 @@
         //鎸夋椂闂存帓搴�
         results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList());
         //濡傛灉鏄粯璁ゆ垨绱拰鍒欒繘琛岀疮鍜屼互鍙婅幏鍙栧熀鍑嗙嚎
-        if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
+        if (monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
             int snapCount = 0;
             for (HomeFaceVO vo : results) {
                 if (vo.getSnapCount() != null) {
@@ -1170,7 +1315,8 @@
         return vo;
     }
 
-    private Query getQuery(List<String> deviceIds, String month) {
+    private Query getQuery(VideoExportForm exportForm) {
+        String month = exportForm.getMonth();
         // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄
         YearMonth yearMonth = YearMonth.parse(month);
         // 鑾峰彇褰撴湀鐨勭涓�澶�
@@ -1180,7 +1326,15 @@
         LocalDate end = nextMonth.atDay(1);
         //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹�
         Query query = new Query(Criteria.where("mongoCreateTime").gte(start).lt(end));
-        query.addCriteria(Criteria.where("no").in(deviceIds));
+        if (!CollectionUtils.isEmpty(exportForm.getDeptIds()))
+            query.addCriteria(Criteria.where("deptId").in(exportForm.getDeptIds()));
+        if (exportForm.getDeptTag() != null) query.addCriteria(Criteria.where("deptTag").is(exportForm.getDeptTag()));
+        if (exportForm.getProvinceTag() != null)
+            query.addCriteria(Criteria.where("provinceTag").is(exportForm.getProvinceTag()));
+        if (exportForm.getImportantTag() != null)
+            query.addCriteria(Criteria.where("importantTag").is(exportForm.getImportantTag()));
+        if (exportForm.getImportantCommandImageTag() != null)
+            query.addCriteria(Criteria.where("importantCommandImageTag").is(exportForm.getImportantCommandImageTag()));
         return query;
     }
 
@@ -1206,9 +1360,7 @@
     }
 
     //璁剧疆姣忔棩褰曞儚鏁版嵁
-    private void setRecordDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> records) throws NoSuchFieldException, IllegalAccessException {
-        //涓�涓澶囧綋鏈堝湪绾挎儏鍐�
-        List<RecordMetaDSumResult> recordResults = records.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList());
+    private void setRecordDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> recordResults) throws NoSuchFieldException, IllegalAccessException {
         for (RecordMetaDSumResult recordResult : recordResults) {
             int dayOfMonth = DateUtils.getDayOfMonth(recordResult.getStatTime());
             Integer status = recordResult.getRecordStatus();
@@ -1228,9 +1380,8 @@
     }
 
     //璁剧疆姣忔棩褰曞儚缂哄け鏃堕暱鏁版嵁
-    private void setLoseDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> records) throws NoSuchFieldException, IllegalAccessException {
+    private void setLoseDaily(VideoDailyExp videoDailyExp, List<RecordMetaDSumResult> recordResults) throws NoSuchFieldException, IllegalAccessException {
         //涓�涓澶囧綋鏈堝湪绾挎儏鍐�
-        List<RecordMetaDSumResult> recordResults = records.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList());
         for (RecordMetaDSumResult recordResult : recordResults) {
             int dayOfMonth = DateUtils.getDayOfMonth(recordResult.getStatTime());
             //鍙嶅皠璧嬪�硷紝瀛楁缁熶竴瀹氫箟涓篸ay+1锛�2锛�3...
diff --git a/ycl-server/src/main/java/com/ycl/task/ContractTask.java b/ycl-server/src/main/java/com/ycl/task/ContractTask.java
index 2112870..7767e99 100644
--- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -179,7 +179,7 @@
                 .collect(Collectors.groupingBy(
                         CalculateRuleVO::getRuleName,  // 鎸夎鍒欏悕绉板垎缁�
                         Collectors.groupingBy(
-                                CalculateRuleVO::getContractId // 姣忎釜瑙勫垯鍚嶇О鍐呴儴鍐嶆寜鍚堝悓ID鍒嗙粍,value涓鸿鍒欓泦鍚�
+                                CalculateRuleVO::getContractId // 姣忎釜瑙勫垯鍚嶇О鍐呴儴鍐嶆寜鍚堝悓ID鍒嗙粍,value涓鸿鍒欓泦鍚�(澶氫釜鍚堝悓鎯呭喌)
                         )
                 ));
         //鍓嶇鎰熺煡婧愭不鐞嗗伐浣滐紙鏃堕挓鍚屾瑙勫垯銆丱SD瑙勫垯銆佷竴鏈轰竴妗h鍒欙級 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map
@@ -195,13 +195,14 @@
         LocalDateTime endTime = LocalDateTime.now();
         // 璁$畻30澶╁墠鐨勬棩鏈�
         LocalDateTime startTime = endTime.minusDays(30);
+        //闇�瑕佹煡瀹℃牳閫氳繃閭f潯璁板綍鐨勬椂闂�
         List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(), "瀹℃牳閫氳繃");
         for (WorkOrderVO workOrder : workOrders) {
             //妫�娴嬫槸鍚︽姤澶囪繃
             if (!CollectionUtils.isEmpty(reportNumbers)) {
                 if (reportNumbers.contains(workOrder.getSerialNumber())) continue;
             }
-            if(!WorkOrderStatusEnum.AUDITING_SUCCESS.equals(workOrder.getStatus())) continue;
+//            if(!WorkOrderStatusEnum.AUDITING_SUCCESS.equals(workOrder.getStatus())) continue;
             String errorType = workOrder.getErrorType();
             //瀛樺偍鏁呴殰 褰曞儚鎴栧浘鐗囪闂紓甯� 锛堟敼鎴愭墜鍔ㄦ墦鍒嗕簡锛�
 //            if (ErrorType.VIDEO_NONE.getValue().equals(errorType) || ErrorType.PIC_URLABNORMAL.getValue().equals(errorType)) {
@@ -238,8 +239,16 @@
                             Date createTime = workOrder.getDistributeTime();
                             Date auditTime = workOrder.getAuditTime();
                             double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60);
-                            //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯
+                            //鎵惧埌瀵瑰簲瑙勫垯銆侀�夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯
                             for (CalculateRuleVO rule : rules) {
+                                if(ErrorType.OSD_ERROR.getValue().equals(errorType)){
+                                    if(!rule.getRuleCondition().equals("OSD鏍囪瘑")) continue;
+                                }else if(ErrorType.CLOCK_SKEW.getValue().equals(errorType)){
+                                    if(!rule.getRuleCondition().equals("鏃堕挓鍚屾")) continue;
+                                }else if( ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)){
+                                    if(!rule.getRuleCondition().equals("涓�鏈轰竴妗�")) continue;
+                                }
+
                                 if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) {
                                     double deductScore = rule.getCalcFraction();
                                     ContractScore contractScore = getContractScore(rule, deductScore, Math.round(diffTime * 100) / 100 + "", Remark + "宸ュ崟缂栧彿涓�:" + workOrder.getWorkOrderNo() + "澶勭悊瓒呮椂锛屾墸闄�" + deductScore + "鍒�");
@@ -319,7 +328,7 @@
             List<ContractScore> contractScoreList = new ArrayList<>();
             //鏌ヨ鎶ュ鍒楄〃
             List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate());
-            Date date = DateUtils.getDay(2024, 7, 13);
+            Date date = new Date();
             //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map
             Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream()
                     .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_PicComplete.getName().equals(calculateRuleVO.getRuleName()))
@@ -399,8 +408,7 @@
             List<ContractScore> contractScoreList = new ArrayList<>();
             //鏌ヨ鎶ュ鍒楄〃
             List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate());
-            //TODO:娴嬭瘯鏃ユ湡
-            Date date = DateUtils.getDay(2024, 7, 13);
+            Date date = new Date();
             //鏌ュ浘鐗囧畬鏁存�ц鍒� 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map
             Map<Integer, List<CalculateRuleVO>> contractMap = contractMapper.getCalculateRule(new Date()).stream()
                     .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_VideoRecord.getName().equals(calculateRuleVO.getRuleName()))
diff --git a/ycl-server/src/main/resources/application-dev.yml b/ycl-server/src/main/resources/application-dev.yml
index c6fcd80..0a4d4be 100644
--- a/ycl-server/src/main/resources/application-dev.yml
+++ b/ycl-server/src/main/resources/application-dev.yml
@@ -131,6 +131,7 @@
     mongodb:
 #      uri: mongodb://root1:yunwei%402024@192.168.3.88:27017/zgyw?authSource=admin
        uri: mongodb://localhost:27017/zgyw
+       auto-index-creation: true
 
 # 鎷夊彇鏁版嵁璇锋眰閰嶇疆
 request:
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
index db29bbe..36a5c80 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -353,7 +353,7 @@
     </insert>
 
     <select id="selectPassOrder" resultType="com.ycl.platform.domain.vo.WorkOrderVO">
-        SELECT wo.id,wo.work_order_no,wo.unit_id,woet.error_name as errorType,woet.distribute_time,woar.create_time as auditTime
+        SELECT wo.id,wo.work_order_no,wo.unit_id,woet.error_name as errorType,woet.create_time as distributeTime,woar.create_time as auditTime
         FROM t_work_order wo
         LEFT JOIN t_work_order_error_type woet ON woet.work_order_no = wo.work_order_no
         LEFT JOIN t_work_order_auditing_record woar ON woar.work_order_no = wo.work_order_no

--
Gitblit v1.8.0