From 9490c47566a0f253f35a1019fd1b1e1473630d67 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 20 一月 2025 09:48:53 +0800
Subject: [PATCH] Merge branch 'dev'

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDelayMonitorResult.java    |    4 
 ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java                    |    8 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java      |    6 
 ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java                 |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKScoreResult.java                 |   88 +
 ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml                   |    5 
 ycl-server/src/main/resources/application-prod.yml                                          |    8 
 ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java                     |   16 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java                  |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java                         |    5 
 ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java     |  152 +
 ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml                                  |    2 
 ycl-server/src/main/java/com/ycl/task/MonitorTask.java                                      |  131 
 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java                       |    8 
 ycl-server/src/main/java/com/ycl/utils/bean/BeanUtils.java                                  |   17 
 ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java                 |    8 
 ycl-server/src/main/resources/logback.xml                                                   |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKTreeResult.java                  |   32 
 ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java                     |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java                       |   14 
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml                      |    6 
 ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java                        |   11 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitorResourceResult.java         |    2 
 ycl-common/src/main/java/constant/PointHeaderConstant.java                                  |    9 
 ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java                |   12 
 ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java                                 |   74 
 ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java          |  248 +-
 ycl-server/src/main/resources/mapper/zgyw/CalculateRecordMapper.xml                         |   22 
 ycl-server/src/main/java/com/ycl/task/CheckScoreTask.java                                   |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/ContractResultVO.java                     |    2 
 ycl-server/src/main/java/com/ycl/task/OsdTask.java                                          |   45 
 ycl-server/src/main/java/com/ycl/task/VideoTask.java                                        |   15 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java             |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java              |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDetectResult.java              |    2 
 ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml                           |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java          |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java              |    1 
 ycl-server/src/main/java/com/ycl/platform/mapper/CalculateReportMapper.java                 |    4 
 ycl-common/src/main/java/constant/ApiConstants.java                                         |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java                   |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java        |    4 
 ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml                                 |  192 -
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java |    5 
 ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java                                 |   46 
 ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java                         |   16 
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/PointExport.java                       |   25 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CodeByAreaResult.java              |    2 
 ycl-server/src/main/java/com/ycl/task/HKTask.java                                           |  318 +++
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml                               |   75 
 ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java                        |   19 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java                          |   52 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckTagVO.java                           |    4 
 ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml                               |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/MonitorQualifyResult.java          |   55 
 ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java                |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java              |    6 
 ycl-common/src/main/java/constant/CheckConstants.java                                       |    2 
 ycl-server/src/main/java/com/ycl/task/ContractTask.java                                     |   94 
 ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java               |    2 
 ycl-server/src/main/java/com/ycl/task/ContractResultTask.java                               |   40 
 ycl-server/src/main/java/com/ycl/feign/HKFeignConfig.java                                   |   41 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java    |    6 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OsdCheckResult.java                |   63 
 ycl-server/src/main/java/com/ycl/platform/mapper/CheckScoreMapper.java                      |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java          |   13 
 ycl-server/src/main/java/com/ycl/thread/PointImportCallable.java                            |    4 
 ycl-server/src/main/java/com/ycl/platform/controller/CheckScoreController.java              |   11 
 ycl-server/src/main/java/com/ycl/platform/service/UYErrorTypeCheckService.java              |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/TContractServiceImpl.java            |   67 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java               |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java                    |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java               |    5 
 ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java                 |    2 
 ycl-server/src/main/resources/mapper/zgyw/ContractResultMapper.xml                          |   16 
 ycl-server/src/main/java/com/ycl/feign/HKClient.java                                        |  471 +++--
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/OrganizationTreeResult.java        |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java                    |    1 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java           |   75 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CarDetectResult.java               |    2 
 ycl-server/src/main/java/com/ycl/task/UYTask.java                                           |   81 
 ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java                       |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java     |    5 
 ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml                                  |    7 
 ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java               |   15 
 ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRecordMapper.java                 |    6 
 ycl-server/src/main/java/com/ycl/feign/HkApiUtil.java                                       |   58 
 ycl-server/src/main/java/com/ycl/handler/CustomCellWriteHandler.java                        |  102 
 ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml                         |  155 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/TMonitorExp.java                       |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/QueryVqdResult.java                |    3 
 ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java               |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java             |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/CalculateExport.java                   |    8 
 ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/TreeParam.java                      |    9 
 ycl-server/src/main/java/com/ycl/utils/DateUtils.java                                       |    1 
 ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java                             |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckScore.java                       |    1 
 document/2024年运维考核细则.docx                                                                   |    0 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java      |  105 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java                         |    5 
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java            |  127 +
 ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java                  |   11 
 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               |   18 
 ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java              |   99 
 ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml                                |  264 +-
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/AttrRecognitionMonitorResult.java  |    2 
 ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java                      |    4 
 ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java                    |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java                          |   23 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoQualityResult.java            |    3 
 ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java         |   27 
 ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java             |    8 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java                       |    2 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java                   |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java                            |    9 
 ycl-server/src/main/resources/application-dev.yml                                           |    5 
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java           |   70 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java                    |    1 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java          |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/TMonitorVO.java                           |    4 
 ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java             |  664 +++++--
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/DataIntegrityMonitoringResult.java |    4 
 ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml                              |    6 
 ycl-server/src/main/java/com/ycl/platform/service/impl/ContractResultServiceImpl.java       |   25 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CoordinateByAreaResult.java        |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckTemplateServiceImpl.java        |    2 
 ycl-common/src/main/java/enumeration/ErrorType.java                                         |   46 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java                        |    2 
 ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java              |   38 
 131 files changed, 3,097 insertions(+), 1,705 deletions(-)

diff --git "a/document/2024\345\271\264\350\277\220\347\273\264\350\200\203\346\240\270\347\273\206\345\210\231.docx" "b/document/2024\345\271\264\350\277\220\347\273\264\350\200\203\346\240\270\347\273\206\345\210\231.docx"
new file mode 100644
index 0000000..309584a
--- /dev/null
+++ "b/document/2024\345\271\264\350\277\220\347\273\264\350\200\203\346\240\270\347\273\206\345\210\231.docx"
Binary files differ
diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java
index e1eb920..4da7af9 100644
--- a/ycl-common/src/main/java/constant/ApiConstants.java
+++ b/ycl-common/src/main/java/constant/ApiConstants.java
@@ -80,6 +80,10 @@
     //娴峰悍璁块棶鏃堕棿璺緞
     public final static String HK_OSD_TIME = "/ISAPI/System/time";
 
+    //娴峰悍鎴愮哗閲嶇偣鏍囩
+    public final static Integer HK_FOCUS_FLAG_ALL = 0;
+    public final static Integer HK_FOCUS_FLAG_Important = 1;
+
     //鍥芥爣鐮侀�氶亾绱㈠紩
     public final static Integer SerialNumber_Channel = 13;
     //鍥芥爣鐮佽澶囩被鍨嬬储寮�
diff --git a/ycl-common/src/main/java/constant/CheckConstants.java b/ycl-common/src/main/java/constant/CheckConstants.java
index 465c0fb..02a8d2d 100644
--- a/ycl-common/src/main/java/constant/CheckConstants.java
+++ b/ycl-common/src/main/java/constant/CheckConstants.java
@@ -4,6 +4,8 @@
  * 鑰冩牳甯搁噺
  */
 public class CheckConstants {
+    //瑙嗛鎴栬溅杈嗘垨浜鸿劯
+    public static final Short Rule_Category_Or = 0;
     //瑙嗛瑙勫垯
     public static final Short Rule_Category_Video = 1;
     //杞﹁締瑙勫垯
diff --git a/ycl-common/src/main/java/constant/PointHeaderConstant.java b/ycl-common/src/main/java/constant/PointHeaderConstant.java
index 38ff7b3..ff3d813 100644
--- a/ycl-common/src/main/java/constant/PointHeaderConstant.java
+++ b/ycl-common/src/main/java/constant/PointHeaderConstant.java
@@ -14,12 +14,17 @@
     public final static String Area = "鍖哄幙(涓嶅彲淇敼)";
     public final static String Unit = "杩愮淮鍗曚綅(涓嶅彲淇敼)";
     public final static String IP = "鐐逛綅IP(鍙慨鏀�)";
-    public final static String Province_Tag = "鏄惁鐪佸巺鏍囩(鍙慨鏀�)";
+    public final static String Province_Tag_Video = "鏄惁鐪佸巺瑙嗛鏍囩(鍙慨鏀�)";
+    public final static String Province_Tag_Car = "鏄惁鐪佸巺杞﹁締鏍囩(鍙慨鏀�)";
+    public final static String Province_Tag_Face = "鏄惁鐪佸巺浜鸿劯鏍囩(鍙慨鏀�)";
     public final static String Impotrant_Command_Image = "鏄惁閲嶇偣鎸囨尌鍥惧儚(鍙慨鏀�)";
     public final static String Dept_Tag = "鏄惁閮ㄧ骇鏍囩(鍙慨鏀�)";
+    public final static String Username = "鐢ㄦ埛鍚�(鍙慨鏀�)";
+    public final static String Password = "瀵嗙爜(鍙慨鏀�)";
 
     // 鍙互灏嗚繖浜涘凡鐭ョ殑閿斁鍏ヤ竴涓泦鍚堜腑锛屾柟渚挎鏌�
     public static final Set<String> KNOWN_KEYS = new HashSet<>(Arrays.asList(
-            ID,Point_Name, IP, Serial_Number,Area, Unit,Province_Tag, Impotrant_Command_Image, Dept_Tag
+            ID,Point_Name, IP, Serial_Number,Area, Unit,Province_Tag_Video,Province_Tag_Car,Province_Tag_Face, Impotrant_Command_Image, Dept_Tag
+            ,Username,Password
     ));
 }
diff --git a/ycl-common/src/main/java/enumeration/ErrorType.java b/ycl-common/src/main/java/enumeration/ErrorType.java
index 4c4b3f1..50342a9 100644
--- a/ycl-common/src/main/java/enumeration/ErrorType.java
+++ b/ycl-common/src/main/java/enumeration/ErrorType.java
@@ -17,18 +17,20 @@
     //閫氱敤
 //    PLATFORM_OFFLINE("PLATFORMOFFLINE", "骞冲彴绂荤嚎","COMMON"),
 //    SEVER_INTERRUPT("SEVERINTERRUPT", "鏈嶅姟涓柇","COMMON"),
-    DEVICE_OFFLINE("DEVICEOFFLINE", "璁惧绂荤嚎","COMMON"),
-    POINT_INFO_ERROR("POINTINFOERRO", "鐐逛綅淇℃伅閿欒","COMMON"),
+    DEVICE_OFFLINE("DEVICEOFFLINE", "璁惧绂荤嚎","COMMON",false),
+    POINT_INFO_ERROR("POINTINFOERRO", "鐐逛綅淇℃伅閿欒","COMMON",false),
     //瑙嗛
-    CLOCK_SKEW("CLOCKSKEW", "鏃堕挓鍋忓樊","VIDEO"),
-    SIGNAL_LOSS("SIGNALMISS", "淇″彿缂哄け","VIDEO"),
-    SCREEN_COLOR_DEVIATION("SCREENCOLOR", "鐢婚潰鍋忚壊","VIDEO"),
-    SNOW_STORM("SCREENSNOW", "闆姳骞叉壈","VIDEO"),
-    STRIPE_INTERFERENCE("SCREENSTRIP", "鏉$汗骞叉壈","VIDEO"),
-    SCREEN_OCCLUSION("SCREENSHADE", "鐢婚潰閬尅","VIDEO"),
-    ABNORMAL_CLARITY("SCREENBLUR", "娓呮櫚搴﹀紓甯�","VIDEO"),
+    CLOCK_SKEW("CLOCKSKEW", "鏃堕挓鍋忓樊","VIDEO",false),
+    SIGNAL_LOSS("SIGNALMISS", "淇″彿缂哄け","VIDEO",true),
+    SCREEN_COLOR_DEVIATION("SCREENCOLOR", "鐢婚潰鍋忚壊","VIDEO",true),
+    SNOW_STORM("SCREENSNOW", "闆姳骞叉壈","VIDEO",true),
+    STRIPE_INTERFERENCE("SCREENSTRIP", "鏉$汗骞叉壈","VIDEO",true),
+    SCREEN_OCCLUSION("SCREENSHADE", "鐢婚潰閬尅","VIDEO",true),
+    ABNORMAL_CLARITY("SCREENBLUR", "娓呮櫚搴﹀紓甯�","VIDEO",true),
+    //鏂板鐨勫浘鍍忓紓甯革紝鍚堝苟鍓嶉潰鎵�鏈夊紓甯哥被鍨�
+    ABNORMAL_PIC("ABNORMALPIC", "鍥惧儚寮傚父","VIDEO",false),
 //    ABNORMAL_BRIGHTNESS("SCREENLIGHT", "浜害寮傚父","VIDEO"),
-    OSD_ERROR("OSD", "osd寮傚父","VIDEO"),
+    OSD_ERROR("OSD", "osd寮傚父","VIDEO",false),
 //    VIDEO_LOSS("VIDEOMISS", "褰曞儚缂哄け","VIDEO"),
 //    VIDEO_NONE("NOVIDEO", "鏃犲綍鍍�","VIDEO"),
 //    POINT_INFO_MISS("POINTINFOMISS", "鐐逛綅淇℃伅涓嶅叏","COMMON"),
@@ -40,16 +42,16 @@
 
     // 闃堝��
     //杞﹁締浜鸿劯閫氱敤
-    CLOCK_RIGHT("CLOCK_RIGHT", "鏃堕挓鍑嗙‘鐜囧紓甯�","CARORFACE"),
-    LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "闀挎椂闂存棤鏁版嵁","CARORFACE"),
-    DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "鏁版嵁鍙婃椂鎬у紓甯�","CARORFACE"),
-    NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "涓嶅敮涓�鏁版嵁閲忓紓甯�","CARORFACE"),
-    UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "鐧藉ぉ鏈瘑鍒暟鎹噺寮傚父","CARORFACE"),
+    CLOCK_RIGHT("CLOCK_RIGHT", "鏃堕挓鍑嗙‘鐜囧紓甯�","CARORFACE",false),
+    LONG_DAY_NO_DATA("LONG_DAY_NO_DATA", "闀挎椂闂存棤鏁版嵁","CARORFACE",false),
+    DATA_TIMELY_ERROR("DATA_TIMELY_ERROR", "鏁版嵁鍙婃椂鎬у紓甯�","CARORFACE",false),
+    NOT_UNIQUE_DATA_VOLUME("NOT_UNIQUE_DATA_VOLUME", "涓嶅敮涓�鏁版嵁閲忓紓甯�","CARORFACE",false),
+    UNRECOGNIZED_DAY_VOLUME("UNRECOGNIZED_DAY_VOLUME", "鐧藉ぉ鏈瘑鍒暟鎹噺寮傚父","CARORFACE",false),
     //杞﹁締
-    CAR_SIX("CAR_SIX", "杞﹁締鍏」灞炴�т笉瀹屾暣","CAR"),
+    CAR_SIX("CAR_SIX", "杞﹁締鍏」灞炴�т笉瀹屾暣","CAR",false),
     //浜鸿劯
-    MODELING_FAIL("MODELING_FAIL", "寤烘ā澶辫触鐜囧紓甯�","FACE"),
-    FACE_LOW("FACE_LOW", "浜鸿劯浣庡垎鐜囧紓甯�","FACE"),
+    MODELING_FAIL("MODELING_FAIL", "寤烘ā澶辫触鐜囧紓甯�","FACE",false),
+    FACE_LOW("FACE_LOW", "浜鸿劯浣庡垎鐜囧紓甯�","FACE",false),
     ;
 
     private String value;
@@ -57,17 +59,21 @@
     private String desc;
 
     private String category;
+    //false琛ㄧず鍦ㄤ娇鐢紝true琛ㄧず鍙仛缈昏瘧涓嶅仛杩斿洖瀛楀吀
+    private Boolean deleted;
 
-    ErrorType(String value, String desc,String category) {
+    ErrorType(String value, String desc,String category,Boolean deleted) {
         this.value = value;
         this.desc = desc;
         this.category = category;
+        this.deleted = deleted;
+
     }
 
     // 鏍规嵁鍒嗙被鑾峰彇閿欒绫诲瀷鍒楄〃
     public static List<ErrorType> getErrorTypesByCategory(String category) {
         return Arrays.stream(values())
-                .filter(errorType -> errorType.getCategory() == category)
+                .filter(errorType -> errorType.getCategory() == category && !errorType.getDeleted())
                 .collect(Collectors.toList());
     }
 
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java
index 06fc99d..5bbd972 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CalculateRecord.java
@@ -47,5 +47,7 @@
     @TableField("which_month")
     private Integer whichMonth;
 
-
+    @ApiModelProperty("鍙戝竷鐘舵��")
+    @TableField("status")
+    private String status;
 }
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 d3a75e7..94b02f6 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
@@ -79,4 +79,5 @@
     @TableField(exist = false)
     private List<String> quarter;
 
+
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java
index 4160aca..30daa2b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractResult.java
@@ -45,4 +45,7 @@
     private Integer deleted;
 
     private Date updateTime;
+
+    private Integer whichYear;
+    private Integer whichMonth;
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
index 26f4ee1..eb47cd8 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TContract.java
@@ -87,10 +87,8 @@
     private Integer deleted;
 
     @TableField(exist = false)
-    @NotBlank
     private String ruleList;
     @TableField(exist = false)
-    @NotNull
     private MultipartFile file;
 
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java
index a233222..00fbaa9 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java
@@ -147,5 +147,8 @@
 
     /** 璁惧鍘傚晢锛� 0娴峰悍  1澶у崕  2瀹囪*/
     private Integer deviceType;
-
+    @TableField(exist = false)
+    private String username;
+    @TableField(exist = false)
+    private String password;
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
index e80c904..1ce5182 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
@@ -63,9 +63,17 @@
     @TableField("important_tag")
     private Boolean importantTag;
 
-    @ApiModelProperty("鐪佸巺鐐逛綅鏍囩")
-    @TableField("province_tag")
-    private Boolean provinceTag;
+    @ApiModelProperty("鐪佸巺瑙嗛鐐逛綅鏍囩")
+    @TableField("province_tag_video")
+    private Boolean provinceTagVideo;
+
+    @ApiModelProperty("鐪佸巺杞﹁締鐐逛綅鏍囩")
+    @TableField("province_tag_car")
+    private Boolean provinceTagCar;
+
+    @ApiModelProperty("鐪佸巺浜鸿劯鐐逛綅鏍囩")
+    @TableField("province_tag_face")
+    private Boolean provinceTagFace;
 
     @ApiModelProperty("閲嶇偣鎸囨尌鍥惧儚鏍囩")
     @TableField("important_command_image_tag")
@@ -78,6 +86,10 @@
     @ApiModelProperty("1鍦ㄧ嚎 0鏈煡 -1绂荤嚎")
     @TableField("online")
     private Integer online;
+
+    @ApiModelProperty("1鍦ㄧ嚎 0鏈煡 -1绂荤嚎")
+    @TableField("ping_online")
+    private Integer pingOnline;
 
     @TableField("serial_number")
     private String serialNumber;
@@ -92,4 +104,9 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date recoveryTime;
 
+    //璁惧鐧诲綍鐨勭敤鎴峰悕瀵嗙爜
+    @TableField("username")
+    private String username;
+    @TableField("password")
+    private String password;
 }
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
index 7a6cb83..a1bd3df 100644
--- 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
@@ -29,6 +29,12 @@
     @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "瑙勫垯鍚嶇О"})
     @ColumnWidth(130)
     private String ruleName;
+    /**
+     * 缁嗗垯
+     */
+    @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "缁嗗垯"})
+    @ColumnWidth(130)
+    private String detailName;
 
     /**
      * 鏁伴噺
@@ -40,7 +46,7 @@
      * 鍒嗘暟
      */
     @ExcelProperty({"鑷础甯傚叕鍏辫棰戠洃鎺х郴缁熺画缁村悎鍚�", "鍒嗘暟"})
-    private Integer score;
+    private BigDecimal score;
 
     /**
      * 閲戦
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/PointExport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/PointExport.java
index 9189529..c354891 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/PointExport.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/PointExport.java
@@ -49,12 +49,25 @@
     private Date endTime;
 
     @ExcelIgnore
-    private Boolean provinceTag;
+    private Boolean provinceTagVideo;
+
+    @ExcelIgnore
+    private Boolean provinceTagCar;
+
+    @ExcelIgnore
+    private Boolean provinceTagFace;
 
     @ColumnWidth(20)
-    @ExcelProperty("鏄惁鐪佸巺鏍囩(鍙慨鏀�)")
-    private String provinceTagString;
+    @ExcelProperty("鏄惁鐪佸巺瑙嗛鏍囩(鍙慨鏀�)")
+    private String provinceTagVideoString;
 
+    @ColumnWidth(20)
+    @ExcelProperty("鏄惁鐪佸巺杞﹁締鏍囩(鍙慨鏀�)")
+    private String provinceTagCarString;
+
+    @ColumnWidth(20)
+    @ExcelProperty("鏄惁鐪佸巺浜鸿劯鏍囩(鍙慨鏀�)")
+    private String provinceTagFaceString;
     @ColumnWidth(20)
     @ExcelProperty("鏄惁閲嶇偣鎸囨尌鍥惧儚(鍙慨鏀�)")
     private String importantCommandImageTagString;
@@ -71,6 +84,12 @@
     @ExcelProperty("鏄惁閲嶇偣鐐逛綅")
     private String importantTagString;
 
+    @ColumnWidth(20)
+    @ExcelProperty("鐢ㄦ埛鍚�(鍙慨鏀�)")
+    private String username;
+    @ColumnWidth(20)
+    @ExcelProperty("瀵嗙爜(鍙慨鏀�)")
+    private String password;
     @ExcelIgnore
     private Boolean importantCommandImageTag;
 
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/TMonitorExp.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/TMonitorExp.java
index a5edb27..d74e23c 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/TMonitorExp.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/TMonitorExp.java
@@ -53,7 +53,9 @@
      */
     @Excel(name = "鏍囩")
     private String tag;
-    private Boolean provinceTag;
+    private Boolean provinceTagVideo;
+    private Boolean provinceTagCar;
+    private Boolean provinceTagFace;
     private Boolean deptTag;
     private Boolean importantTag;
     private Boolean importantCommandImageTag;
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java
index adb6bfc..78f45f2 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/YwPointForm.java
@@ -39,8 +39,12 @@
     @ApiModelProperty("鐩戠閮ㄩ棬")
     private Long deptId;
 
-    @ApiModelProperty("鐪佸巺鐐逛綅鏍囩")
-    private Boolean provinceTag;
+    @ApiModelProperty("鐪佸巺瑙嗛鐐逛綅鏍囩")
+    private Boolean provinceTagVideo;
+    @ApiModelProperty("鐪佸巺杞﹁締鐐逛綅鏍囩")
+    private Boolean provinceTagCar;
+    @ApiModelProperty("鐪佸巺浜鸿劯鐐逛綅鏍囩")
+    private Boolean provinceTagFace;
 
     @ApiModelProperty("閲嶇偣鐐逛綅鏍囩")
     private Boolean importantTag;
@@ -79,6 +83,9 @@
     @TableField("end_time")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date endTime;
+
+    private String username;
+    private String password;
     public static YwPoint getEntityByForm(@NonNull YwPointForm form, YwPoint entity) {
         if(entity == null) {
           entity = new YwPoint();
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
new file mode 100644
index 0000000..befd0e7
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
@@ -0,0 +1,16 @@
+package com.ycl.platform.domain.param.HK;
+
+import lombok.Data;
+
+@Data
+public class ScoreParam extends BaseParam{
+    //yyyy-MM-dd
+    private String startDate;
+    private String endDate;
+    //閲嶇偣鐐逛綅鏍囨敞 闈炲繀濉� 1閲嶇偣 0鍏ㄩ噺 榛樿鍏ㄩ噺
+    private Integer focusFlag;
+    //浜鸿劯涓氬姟鏍戠紪鐮�
+    private String faceTree;
+    //杞﹁締涓氬姟鏍戠紪鐮�
+    private String carTree;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/TreeParam.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/TreeParam.java
new file mode 100644
index 0000000..a85da52
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/TreeParam.java
@@ -0,0 +1,9 @@
+package com.ycl.platform.domain.param.HK;
+
+import lombok.Data;
+
+@Data
+public class TreeParam extends BaseParam{
+    private String startDate;
+    private String endDate;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java
index c96a6a5..3c630d7 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/CalculateReportQuery.java
@@ -23,5 +23,11 @@
 
     private Integer unitId;
 
+    private String status;
+
+    private Integer contractId;
+
+    private Integer whichYear;
+
 }
 
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
index 11fd6a2..3f98a2a 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.base.AbsQuery;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 import utils.DateUtils;
 
 import java.util.Date;
@@ -18,6 +19,7 @@
 @Data
 public class DataCenterQuery extends AbsQuery {
     @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date date;
 
     /** 寮�濮嬫椂闂� */
@@ -42,7 +44,8 @@
     private Integer deviceType;
     /** 涓嬫媺妗� */
     private Integer option;
-
+    /** 鑰冩牳鐘舵�� */
+    private Integer examineStatus;
     public void setTime() {
         if (Objects.nonNull(this.date)) {
             this.startTime = DateUtils.getDayStart(this.date);
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java
index 222727f..80c1b08 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DistributeWorkOrderQuery.java
@@ -31,6 +31,7 @@
      * 鏁呴殰绫诲瀷
      */
     private String errorType;
+    private List<String> errorTypeList;
 
     /**
      * 宸ュ崟id
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
index 41f829b..6edf28e 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
@@ -35,4 +35,9 @@
      * 鑰冩牳鏍囩1/2 鐪佸巺/鍏畨閮�
      */
     private Integer examineTag;
+
+    /**
+     * 鏁版嵁绫诲瀷1/2 绱鏁版嵁/姣忔棩鏁版嵁
+     */
+    private Integer category;
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java
index 1475c1d..d0a02df 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderExportQuery.java
@@ -39,6 +39,7 @@
      * 鏁呴殰绫诲瀷
      */
     private String errorType;
+    private List<String> errorTypeList;
 
     /**
      * 鐘舵��
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
index d1fa4cf..f1c0a34 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
@@ -43,6 +43,7 @@
      * 鏁呴殰绫诲瀷
      */
     private String errorType;
+    private List<String> errorTypeList;
     /**
      * 鏁呴殰绫诲瀷
      */
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 022fd14..8586e5c 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
@@ -1,9 +1,12 @@
 package com.ycl.platform.domain.result;
 
+import annotation.Excel;
 import lombok.Data;
 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,33 +20,44 @@
      * 鏁版嵁鏃ユ湡
      */
     @CreatedDate
+    @Indexed(background = true)
     private LocalDate mongoCreateTime;
     /**
      * 鍥芥爣鐮�
      */
+    @Indexed(background = true)
     private String no;
     /**
      * 鐪佸巺
      */
+    @Indexed(background = true)
     private Boolean provinceTag;
+    //鎺ユ敹mysql鏁版嵁鐢�
+    private Boolean provinceTagVideo;
+    private Boolean provinceTagCar;
+    private Boolean provinceTagFace;
 
     /**
      * 閮ㄧ骇
      */
+    @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/HKScoreResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKScoreResult.java
new file mode 100644
index 0000000..535c58e
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKScoreResult.java
@@ -0,0 +1,88 @@
+package com.ycl.platform.domain.result.HK;
+
+import lombok.Data;
+
+//鑰冩牳鎴愮哗
+@Data
+public class HKScoreResult{
+    //鍖哄煙鍚�
+    private String areaName;
+    //鍖哄煙缂栫爜
+    private String areaCode;
+    //鎺掑悕
+    private Integer ranking;
+    //鎵�鏈夋寚鏍囧緱鍒�
+    private String totalScore;
+    private String fullScore;
+    //ZDR鍔ㄥ悜鍑嗙‘鏂�(鏆傛椂娌$敤)
+    private String downCrossZdrAccuracyQualityScoreString;
+    /** 杞﹁締
+     * url鍙敤鎬�
+     * 淇℃伅閲囬泦鍑嗙‘鎬�
+     * */
+    //鎵归噺鏌ヨ杞﹁締
+    private String downCarQueryInterfaceQualityScoreString;
+    //杞﹁締鏁版嵁涓婁紶绋冲畾鎬у緱鍒�(瑙嗗浘搴撳鎺ョǔ瀹氭��)
+    private String downCarDataUploadScoreString;
+    //杞﹁締娉ㄥ唽鐜�
+    private String downCrossCarSignUpScoreString;
+    //杞﹁締鍗″彛鏁伴噺鎺ㄩ��(璁惧鐩綍涓�鑷寸巼)
+    private String downCrossNumPushCarScoreString;
+    //杞﹁締鍗″彛杩愯璐ㄩ噺(鐐逛綅鍦ㄧ嚎鐜�)
+    private String downCrossQualityCarScoreString;
+    //杞﹁締鏁版嵁瀹屾暣鎬�(鎶撴媿鏁版嵁瀹屾暣鎬�)
+    private String downCrossAllCarDataIntegrityScoreString;
+    //杞﹁締杩囪溅鏁版嵁涓昏灞炴�у噯纭��(鎶撴媿鏁版嵁鍑嗙‘鎬�)
+    private String downCrossAccuracyCarScoreString;
+    //杞﹁締杩囪溅鏁版嵁閲嶈灞炴�у噯纭��(鎶撴媿鏁版嵁鍑嗙‘鎬�)
+    private String downCrossDataTypeAccuracyCarScoreString;
+    //杞﹁締鍗″彛鏃堕挓鍑嗙‘鎬�(鏃堕挓鍑嗙‘鎬�)
+    private String downCrossCarInvertScoreString;
+    //杞﹁締鍗″彛涓婁紶鍙婃椂鎬�(鏁版嵁涓婁紶鍙婃椂鎬�)
+    private String downCrossAllCarDelayScoreString;
+    //杞﹁締鍗″彛澶у浘鍙敤鎬�(澶у浘鍙敤鎬�)
+    private String downCrossPictureQualityCarScoreString;
+
+    //閲嶇偣杞﹁締鍗″彛鏁版嵁涓婁紶鍙婃椂鎬�
+    private String downCrossFocusCarDelayScoreString;
+    //閲嶇偣杞﹁締鍗″彛澶у浘鍙敤鎬�
+    private String downCrossFocusPictureQualityCarScoreString;
+    //閲嶇偣杞﹁締鎶撴媿鏁版嵁瀹屾暣鎬�
+    private String downCrossFocusCarDataIntegrityScoreString;
+    //閲嶇偣杞﹁締杩囪溅鏁版嵁涓昏灞炴�у噯纭��
+    private String downCrossFocusAccuracyCarScoreString;
+    //閲嶇偣杞﹁締杩囪溅鏁版嵁閲嶈灞炴�у噯纭��
+    private String downCrossFocusDataTypeAccuracyCarScoreString;
+    /** 浜鸿劯
+     *
+     * 鐩綍涓�鑷寸巼
+     * 浜鸿劯淇℃伅閲囬泦鍑嗙‘鏂�
+     * 璁惧鎶撴媿鍥剧墖鍚堟牸鎬�
+     *
+     * */
+    //鎵归噺鏌ヨ浜鸿劯
+    private String downFaceQueryInterfaceQualityScoreString;
+    //鎼滃浘寰楀垎
+    private String downDrawFaceInterfaceQualityScoreString;
+    //浜鸿劯鏁版嵁涓婁紶绋冲畾鎬у緱鍒�(瑙嗗浘搴撳鎺ョǔ瀹氭��)
+    private String downFaceDataUploadScoreString;
+    //浜鸿劯娉ㄥ唽鐜�
+    private String downCrossFaceSignUpScoreString;
+    //浜鸿劯鍗″彛鏁伴噺鎺ㄩ��(璁惧鐩綍涓�鑷寸巼)
+    private String downCrossNumPushFaceScoreString;
+    //浜鸿劯鍗″彛杩愯璐ㄩ噺(鐐逛綅鍦ㄧ嚎鐜�)
+    private String downCrossQualityFaceScoreString;
+    //浜鸿劯鍗″彛灏忓浘鍙敤鎬�
+    private String downCrossFaceBuildRateScoreString;
+    //浜鸿劯鍗″彛涓婁紶鍙婃椂鎬�(鏁版嵁涓婁紶鍙婃椂鎬�)
+    private String downCrossAllFaceDelayScoreString;
+    //浜鸿劯鍗″彛鏃堕挓鍑嗙‘鎬�(鏃堕挓鍑嗙‘鎬�)
+    private String downCrossFaceInvertScoreString;
+    //浜鸿劯鍗″彛澶у浘鍙敤鎬�(澶у浘鍙敤鎬�)
+    private String downCrossPictureQualityFaceScoreString;
+
+    //閲嶇偣浜鸿劯鍗″彛涓婁紶鍙婃椂鎬�
+    private String downCrossFocusFaceDelayScoreString;
+    //閲嶇偣浜鸿劯鍗″彛澶у浘鍙敤鎬�
+    private String downCrossFocusPictureQualityFaceScoreString;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKTreeResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKTreeResult.java
new file mode 100644
index 0000000..63b4f98
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/HKTreeResult.java
@@ -0,0 +1,32 @@
+package com.ycl.platform.domain.result.HK;
+
+import com.ycl.platform.domain.result.BaseResult;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+//鑰冩牳涓氬姟鏍�
+@Data
+public class HKTreeResult extends BaseResult {
+    //涓氬姟鏍戠被鍨� face/car
+    private String type;
+
+    private List<Tree> treeList;
+
+    /**
+     * 鑰冩牳涓氬姟鏍�
+     */
+    @Data
+    public static class Tree {
+        //涓氬姟鏍戠紪鐮�
+        private String cTreeCode;
+        //涓氬姟鏍戝悕绉�
+        private String cTreeName;
+        private Integer cType;
+        private String open;
+        private String iSystem;
+        private Date dCreateTime;
+
+    }
+}
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 049c639..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;
 
     /**
@@ -73,6 +69,7 @@
      */
     private String resultTypeText;
 
+    private String ip;
     public String getResultTypeText() {
         if (Objects.equals(resultType, 1)) {
             resultTypeText = "姝e父";
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 3c48e69..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;
     }
 
@@ -108,31 +103,31 @@
 
     public static MonitorQualifyResultVO getVO(MonitorQualifyResult result) {
         MonitorQualifyResultVO vo = new MonitorQualifyResultVO();
-        vo.setCivilCode(result.getCivilCode().getShowValue());
-        vo.setCivilCodeError(result.getCivilCode().getError());
-        vo.setIp(result.getIp().getShowValue());
-        vo.setIpError(result.getIp().getError());
-        vo.setIntegratedDevice(result.getIntegrated_device().getShowValue());
-        vo.setIntegratedDeviceError(result.getIntegrated_device().getError());
-        vo.setJkdwlx(result.getJkdwlx().getShowValue());
-        vo.setJkdwlxError(result.getJkdwlx().getError());
-        vo.setLatitude(result.getLatitude().getShowValue());
-        vo.setLatitudeError(result.getLatitude().getError());
-        vo.setLongitude(result.getLongitude().getShowValue());
-        vo.setLongitudeError(result.getLongitude().getError());
-        vo.setMacdz(result.getMacdz().getShowValue());
-        vo.setMacdzError(result.getMacdz().getError());
-        vo.setName(result.getName().getShowValue());
-        vo.setNameError(result.getName().getError());
-        vo.setSbzt(result.getSbzt().getShowValue());
-        vo.setSbztError(result.getSbzt().getError());
-        vo.setSerialNumber(result.getSerialNumber().getShowValue());
-        vo.setSerialNumberError(result.getSerialNumber().getError());
-        vo.setSxjcjqy(result.getSxjcjqy().getShowValue());
-        vo.setSxjcjqyError(result.getSxjcjqy().getError());
-        vo.setSxjgnlx(result.getSxjgnlx().getShowValue());
-        vo.setSxjgnlxError(result.getSxjgnlx().getError());
-        if (result.getNewDevice()) {
+        vo.setCivilCode(result.getCivilCode()!=null?result.getCivilCode().getShowValue():"");
+        vo.setCivilCodeError(result.getCivilCode()!=null?result.getCivilCode().getError():Boolean.FALSE);
+        vo.setIp(result.getIp()!=null?result.getIp().getShowValue():"");
+        vo.setIpError(result.getIp()!=null?result.getIp().getError():Boolean.FALSE);
+        vo.setIntegratedDevice(result.getIntegrated_device()!=null?result.getIntegrated_device().getShowValue():"");
+        vo.setIntegratedDeviceError(result.getIntegrated_device()!=null?result.getIntegrated_device().getError():Boolean.FALSE);
+        vo.setJkdwlx(result.getJkdwlx()!=null?result.getJkdwlx().getShowValue():"");
+        vo.setJkdwlxError(result.getJkdwlx()!=null?result.getJkdwlx().getError():Boolean.FALSE);
+        vo.setLatitude(result.getLatitude()!=null?result.getLatitude().getShowValue():"");
+        vo.setLatitudeError(result.getLatitude()!=null?result.getLatitude().getError():Boolean.FALSE);
+        vo.setLongitude(result.getLongitude()!=null?result.getLongitude().getShowValue():"");
+        vo.setLongitudeError(result.getLongitude()!=null?result.getLongitude().getError():Boolean.FALSE);
+        vo.setMacdz(result.getMacdz()!=null?result.getMacdz().getShowValue():"");
+        vo.setMacdzError(result.getMacdz()!=null?result.getMacdz().getError():Boolean.FALSE);
+        vo.setName(result.getName()!=null?result.getName().getShowValue():"");
+        vo.setNameError(result.getName()!=null?result.getName().getError():Boolean.FALSE);
+        vo.setSbzt(result.getSbzt()!=null?result.getSbzt().getShowValue():"");
+        vo.setSbztError(result.getSbzt()!=null?result.getSbzt().getError():Boolean.FALSE);
+        vo.setSerialNumber(result.getSerialNumber()!=null?result.getSerialNumber().getShowValue():"");
+        vo.setSerialNumberError(result.getSerialNumber()!=null?result.getSerialNumber().getError():Boolean.FALSE);
+        vo.setSxjcjqy(result.getSxjcjqy()!=null?result.getSxjcjqy().getShowValue():"");
+        vo.setSxjcjqyError(result.getSxjcjqy()!=null?result.getSxjcjqy().getError():Boolean.FALSE);
+        vo.setSxjgnlx(result.getSxjgnlx()!=null?result.getSxjgnlx().getShowValue():"");
+        vo.setSxjgnlxError(result.getSxjgnlx()!=null?result.getSxjgnlx().getError():Boolean.FALSE);
+        if (result.getNewDevice()!=null && result.getNewDevice()) {
             vo.setNewDevice("鏄�");
         } else {
             vo.setNewDevice("鍚�");
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 f46261c..7a1a108 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
@@ -1,5 +1,6 @@
 package com.ycl.platform.domain.result.UY;
 
+import annotation.Excel;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.domain.result.BaseResult;
 import constant.ApiConstants;
@@ -23,17 +24,19 @@
     /**
      * 鍥芥爣鐮�
      */
-    @TextIndexed
+    @Excel(name = "璁惧缂栫爜",sort = 1,width = 20)
     private String deviceNo;
 
     /**
      *  鎽勫儚鏈哄搧鐗�0/1/2 娴峰悍/澶у崕/瀹囪
      */
     private Integer deviceBrand;
-
+    @Excel(name = "鏍囩",sort = 4)
+    private String tagStr;
     /**
      *  鎽勫儚鏈哄搧鐗�0/1/2 娴峰悍/澶у崕/瀹囪
      */
+    @Excel(name = "璁惧鍝佺墝",sort = 2)
     private String deviceBrandStr;
     /**
      * 璁惧绫诲瀷
@@ -43,98 +46,111 @@
     /**
      * ip
      */
-    @TextIndexed
+    @Excel(name = "IP",sort = 3)
     private String ip;
 
     /**
      * 妫�娴嬫椂闂�
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "妫�娴嬫椂闂�",dateFormat = "yyyy-MM-dd HH:mm:ss",sort = 11)
     private Date checkTime;
 
     /**
      * 鏍囨敞鏃堕棿
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "OSD鏍囨敞鏃堕棿",dateFormat = "yyyy-MM-dd HH:mm:ss",sort = 10)
     private Date setTime;
+
 
     /**
      * osd閫氶亾鍚�
      */
-    @TextIndexed
+    @Excel(name = "閫氶亾鍚嶇О",sort = 5,width = 32)
     private String osdName;
     /**
      * osd鐪�
      */
+    @Excel(name = "OSD鐪�",sort = 6)
     private String osdProvince;
 
     /**
      * osd甯�
      */
+    @Excel(name = "OSD甯�",sort = 7)
     private String osdCity;
 
     /**
      * osd鍖�
      */
+    @Excel(name = "OSD鍖�",sort = 8)
     private String osdPart;
 
     /**
      * osd宸︿笅瑙�
      */
+    @Excel(name = "OSD宸︿笅瑙�",sort = 9)
     private String osdLB;
 
     /**
      * osdTimeCorrect鏃堕棿鏄惁姝g‘
      */
+    @Excel(name = "鏃堕棿鏄惁姝g‘",sort = 17, readConverterExp = "0=鏈煡,1=姝g‘,-1=閿欒")
     private Integer osdTimeCorrect;
 
     /**
      * osdTimeCorrect鏃堕棿鏄惁姝g‘
      */
-    private String osdTimeCorrectText;
+    private Boolean osdTimeError;
 
     /**
      * osd閫氶亾鍚嶆槸鍚︽纭�   1姝g‘  0鏈煡  -1閿�
      */
+    @Excel(name = "閫氶亾鍚嶆槸鍚︽纭�",sort = 12, readConverterExp = "0=鏈煡,1=姝g‘,-1=閿欒")
     private Integer osdNameCorrect;
 
     /**
-     * osd閫氶亾鍚嶆槸鍚︽纭�   1姝g‘  0鏈煡  -1閿�
+     * osd閫氶亾鍚嶆槸鍚︽纭�
      */
-    private String osdNameCorrectText;
+    private Boolean osdNameError;
 
     /**
      * osd鐪佹槸鍚︽纭�
      */
+    @Excel(name = "OSD鐪佹槸鍚︽纭�",sort = 13, readConverterExp = "0=鏈煡,1=姝g‘,-1=閿欒")
     private Integer osdProvinceCorrect;
 
     /**
      * osd鐪佹槸鍚︽纭�
      */
-    private String osdProvinceCorrectText;
+    private Boolean osdProvinceError;
 
     /**
      * osd甯傛槸鍚︽纭�
      */
+    @Excel(name = "OSD甯傛槸鍚︽纭�",sort = 14, readConverterExp = "0=鏈煡,1=姝g‘,-1=閿欒")
     private Integer osdCityCorrect;
 
     /**
      * osd甯傛槸鍚︽纭�
      */
-    private String osdCityCorrectText;
+    private Boolean osdCityError;
 
     /**
      * osd鍖烘槸鍚︽纭�
      */
+    @Excel(name = "OSD鍖烘槸鍚︽纭�",sort = 15, readConverterExp = "0=鏈煡,1=姝g‘,-1=閿欒")
     private Integer osdPartCorrect;
 
     /**
      * osd鍖烘槸鍚︽纭�
      */
-    private String osdPartCorrectText;
+    private Boolean osdPartError;
     /**
      * osd宸︿笅瑙掓槸鍚︽纭�
      */
+    @Excel(name = "OSD宸︿笅鏄惁姝g‘",sort = 16, readConverterExp = "0=鏈煡,1=姝g‘,-1=閿欒")
     private Integer osdLbCorrect;
 
 
@@ -150,26 +166,21 @@
         return ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect());
     }
 
-    public static void getText(OsdCheckResult result) {
-        if(ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect())) result.setOsdTimeCorrectText("姝g‘");
-        else if(ApiConstants.OSD_Error.equals(result.getOsdTimeCorrect())) result.setOsdTimeCorrectText("閿欒");
-        else { result.setOsdTimeCorrectText("鏈煡"); }
+    public static void getError(OsdCheckResult result) {
+        if(ApiConstants.OSD_Correct.equals(result.getOsdTimeCorrect())) result.setOsdTimeError(Boolean.FALSE);
+        else {result.setOsdTimeError(Boolean.TRUE); }
 
-        if(ApiConstants.OSD_Correct.equals(result.getOsdNameCorrect())) result.setOsdNameCorrectText("姝g‘");
-        else if(ApiConstants.OSD_Error.equals(result.getOsdNameCorrect())) result.setOsdNameCorrectText("閿欒");
-        else { result.setOsdNameCorrectText("鏈煡"); }
+        if(ApiConstants.OSD_Correct.equals(result.getOsdNameCorrect())) result.setOsdNameError(Boolean.FALSE);
+        else { result.setOsdNameError(Boolean.TRUE); }
 
-        if(ApiConstants.OSD_Correct.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceCorrectText("姝g‘");
-        else if(ApiConstants.OSD_Error.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceCorrectText("閿欒");
-        else { result.setOsdProvinceCorrectText("鏈煡"); }
+        if(ApiConstants.OSD_Correct.equals(result.getOsdProvinceCorrect())) result.setOsdProvinceError(Boolean.FALSE);
+        else { result.setOsdProvinceError(Boolean.TRUE); }
 
-        if(ApiConstants.OSD_Correct.equals(result.getOsdCityCorrect())) result.setOsdCityCorrectText("姝g‘");
-        else if(ApiConstants.OSD_Error.equals(result.getOsdCityCorrect())) result.setOsdCityCorrectText("閿欒");
-        else { result.setOsdCityCorrectText("鏈煡"); }
+        if(ApiConstants.OSD_Correct.equals(result.getOsdCityCorrect())) result.setOsdCityError(Boolean.FALSE);
+        else { result.setOsdCityError(Boolean.TRUE); }
 
-        if(ApiConstants.OSD_Correct.equals(result.getOsdPartCorrect())) result.setOsdPartCorrectText("姝g‘");
-        else if(ApiConstants.OSD_Error.equals(result.getOsdPartCorrect())) result.setOsdPartCorrectText("閿欒");
-        else { result.setOsdPartCorrectText("鏈煡"); }
+        if(ApiConstants.OSD_Correct.equals(result.getOsdPartCorrect())) result.setOsdPartError(Boolean.FALSE);
+        else { result.setOsdPartError(Boolean.TRUE); }
 
         if(DeviceType.DH.getType().equals(result.getDeviceBrand())) result.setDeviceBrandStr(DeviceType.DH.getDesc());
         else if(DeviceType.HK.getType().equals(result.getDeviceBrand())) result.setDeviceBrandStr(DeviceType.HK.getDesc());
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/CalculateRecordVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
index ee49511..f311d58 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRecordVO.java
@@ -49,6 +49,7 @@
     /** 鏈�鏂颁竴鏉℃牳绠楁爣璇� */
     private Boolean latest;
 
+    private String status;
     public static CalculateRecordVO getVoByEntity(@NonNull CalculateRecord entity, CalculateRecordVO vo) {
         if(vo == null) {
             vo = new CalculateRecordVO();
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
index 4f6d8e4..3d4870e 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportDetailVO.java
@@ -24,14 +24,17 @@
 
     private Integer id;
 
+
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createTime;
 
     /** 鍚堝悓 */
     private Integer contractId;
 
+    private Integer whichYear;
     /** 杩愮淮鍗曚綅 */
     private String unitName;
+    private Integer unitId;
 
     /** 鍚堝悓鍚嶇О */
     private String contractName;
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
index ea5e790..6af1baa 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateReportVO.java
@@ -53,6 +53,10 @@
     /** 鏄庣粏 */
     private List<CalculateRecordVO> recordList;
 
+    private Integer whichYear;
+    private Integer whichMonth;
+    private Integer latestMonth;
+
     public static CalculateReportVO getVoByEntity(@NonNull CalculateReport entity, CalculateReportVO vo) {
         if(vo == null) {
             vo = new CalculateReportVO();
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckTagVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckTagVO.java
index e6f6d0a..4e33b9d 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckTagVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CheckTagVO.java
@@ -17,7 +17,9 @@
     /**
      * 鐪佸巺
      */
-    private Boolean provinceTag;
+    private Boolean provinceTagVideo;
+    private Boolean provinceTagCar;
+    private Boolean provinceTagFace;
 
     /**
      * 閮ㄧ骇
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/ContractResultVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/ContractResultVO.java
index ca7956c..ce5e3f5 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/ContractResultVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/ContractResultVO.java
@@ -49,4 +49,6 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createEndTime;
 
+    private Integer whichYear;
+    private Integer whichMonth;
 }
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-pojo/src/main/java/com/ycl/platform/domain/vo/TMonitorVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/TMonitorVO.java
index d8f4e47..756757c 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/TMonitorVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/TMonitorVO.java
@@ -222,7 +222,11 @@
 
     private Long deptId;
     private String deptName;
+    //璇锋眰鍙傛暟
     private Boolean provinceTag;
+    private Boolean provinceTagVideo;
+    private Boolean provinceTagCar;
+    private Boolean provinceTagFace;
     private Boolean deptTag;
     private String area;
     private String error;
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
index 015c632..68259c9 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
@@ -18,4 +18,6 @@
     private Integer online;
 
     private Date updateTime;
+
+    private String serialNumber;
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
index 1cdc1eb..597277b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
@@ -31,7 +31,7 @@
     private String workOrderNo;
     private Integer id;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @Excel(name = "鏁呴殰鏃堕棿",sort = 6,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鏁呴殰鏃堕棿",sort = 7,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
@@ -40,41 +40,55 @@
 
     /** 杩愮淮鍗曚綅 */
     private Integer unitId;
-    @Excel(name = "杩愮淮鍗曚綅",sort = 5)
+    @Excel(name = "杩愮淮鍗曚綅",sort = 6)
     private String unitName;
     private String unitContact;
     private String unitContactPhone;
 
     /** 宸ュ崟鏉ユ簮/璁惧鍚嶇О */
-    @Excel(name = "璁惧鍚嶇О",sort = 3)
+    @Excel(name = "璁惧鍚嶇О",sort = 3,width = 25)
     private String source;
     /** ip */
-    @Excel(name = "IP",sort = 4)
+    @Excel(name = "IP",sort = 5)
     private String ip;
     /**
      * 璁惧缂栧彿
      */
-    @Excel(name = "璁惧缂栧彿",sort = 2)
+    @Excel(name = "璁惧缂栧彿",sort = 2,width = 22)
     private String serialNumber;
-
-    private Boolean provinceTag;
-
-    private Boolean importantTag;
-
-    private Boolean importantCommandImageTag;
+    /**
+     * 鑰冩牳鏍囩
+     * @param entity
+     * @param vo
+     * @return
+     */
+    @Excel(name = "鑰冩牳鏍囩",sort = 4)
+    private String tag;
 
     /**
      * 鏄惁閲嶇偣鐐逛綅
      */
-    private Boolean important;
+    private Boolean importantTag;
+    private Boolean importantCommandImageTag;
+    private Boolean deptTag;
+    private Boolean provinceTagVideo;
+    private Boolean provinceTagCar;
+    private Boolean provinceTagFace;
 
     /** 鏁呴殰绫诲瀷 */
     private List<String> errorTypeList;
 
     /** 鏁呴殰绫诲瀷 */
-    @Excel(name = "鏁呴殰绫诲瀷")
+    @Excel(name = "鏁呴殰绫诲瀷",sort = 8)
     private String errorType;
-
+    /**
+     * 璁惧鏍囩
+     * @param entity
+     * @param vo
+     * @return
+     */
+    @Excel(name = "璁惧鏍囩",sort = 9,width = 30)
+    private String dynamicTag;
     /** 宸ュ崟妫�娴嬪浘鐗� */
     private String imgListStr;
 
@@ -82,7 +96,7 @@
 
     /** 杩愮淮浜哄憳 */
     private Integer ywPeopleId;
-
+    private Long pointId;
     private String ywPeopleName;
 
     /** 杩愮淮澶勭悊鏃堕棿 */
@@ -105,7 +119,6 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date distributeTime;
 
-    private Date auditTime;
     /** 涓嬪彂浜� */
     private String realName;
 
@@ -113,6 +126,13 @@
      * 鏄惁鎵h繃绉垎
      */
     private Boolean deduct;
+    //澶勭悊鏃堕棿鐐归泦鍚�
+    private List<Date> handleTimeList;
+    private Date handleTime;
+    //瀹℃牳鏃堕棿鐐归泦鍚�
+    private List<Date> auditTimeList;
+    private Date auditTime;
+
 
     public static WorkOrderVO getVoByEntity(@NonNull WorkOrder entity, WorkOrderVO vo) {
         if(vo == null) {
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java
index 4f3aaf6..2bf1176 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/YwPointVO.java
@@ -1,5 +1,6 @@
 package com.ycl.platform.domain.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.base.AbsVo;
 import com.ycl.platform.domain.entity.YwPoint;
@@ -50,7 +51,9 @@
     private Boolean importantTag;
 
     /** 鐪佸巺鐐逛綅鏍囩 */
-    private Boolean provinceTag;
+    private Boolean provinceTagVideo;
+    private Boolean provinceTagCar;
+    private Boolean provinceTagFace;
 
     /** 閲嶇偣鎸囨尌鍥惧儚鏍囩 */
     private Boolean importantCommandImageTag;
@@ -66,6 +69,10 @@
      */
     private List<DynamicColumnVO> dynamicColumnList;
 
+    /** 璁惧鐧诲綍鐨勭敤鎴峰悕瀵嗙爜 */
+    private String username;
+    private String password;
+
     public static YwPointVO getVoByEntity(@NonNull YwPoint entity, YwPointVO vo) {
         if(vo == null) {
             vo = new YwPointVO();
diff --git a/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java b/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
index 63f9881..5d3b406 100644
--- a/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
+++ b/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
@@ -160,6 +160,7 @@
 //            log.error("CLIENT_QueryDeviceTime Failed!" + ToolKits.getErrorCodePrint());
             return null;
         }
+        log.info("OSD鏃堕棿鍘熷鏁版嵁鏍煎紡,{},toString鏍煎紡{}",deviceTime,deviceTime.toStringTime());
         Date checkTime = new Date();
         osdResult.setCheckTime(checkTime);
         String date = deviceTime.toStringTime();
@@ -195,6 +196,7 @@
             osdInfo.read();
             NET_GBMODE_CUSTOMTITLE_INFO[] stuCustomTitle = osdInfo.stuCustomTitle;
             for (NET_GBMODE_CUSTOMTITLE_INFO title : stuCustomTitle) {
+                log.info("OSD鍘熷鏁版嵁鏍煎紡{}",title);
                 String position = new String(title.szPositon, StandardCharsets.UTF_8).trim();
                 if("LeftDown".equals(position)) {
                     NET_TITLE_OSD_INFO[] stuOSD = title.stuOSD;
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java
index 01dfdd3..8c2dd89 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarClockAccuracyCalculation.java
@@ -73,7 +73,7 @@
         AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
         stats.totalSites++;
         //鏃堕挓鍑嗙‘鐜囧ぇ浜�90%涓哄悎鏍艰澶�
-        if (result.getSnapClock().getClockPercent() >= 0.9) {
+        if (result.getSnapClock()!=null &&  result.getSnapClock().getClockPercent()!=null && result.getSnapClock().getClockPercent() >= 0.9) {
             stats.accuracySites++;
         }
     }
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java
index 667faa0..ad8ecef 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarDataIntegrityCalculation.java
@@ -48,7 +48,7 @@
     @Override
     public void calculate(List<DataIntegrityMonitoringResult> list) {
         //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺
-        Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list,Boolean.FALSE);
+        Map<String, CarDataIntegrityCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list, Boolean.FALSE);
         if (areaStatsMap == null) return;
 
         // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
@@ -75,13 +75,13 @@
         AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
         stats.totalSites++;
         //90%鍙婁互涓婃暟鎹悎鏍煎垯姝よ溅杈嗗崱鍙h澶囪瑙嗕负鎶撴媿鏁版嵁瀹屾暣
-        if (result.getMainNoIntegrityPercent() <= 0.1) {
+        if (result.getMainNoIntegrityPercent() != null && result.getMainNoIntegrityPercent() <= 0.1) {
             stats.integritySites++;
         }
         //閲嶇偣鐐逛綅涓哄叚椤瑰睘鎬у畬鏁�
-        if (result.getImportantTag()!=null && result.getImportantTag()) {
+        if (result.getImportantTag() != null && result.getImportantTag()) {
             stats.importantTotalSites++;
-            if (result.getNoIntegrityPercent() <= 0.1) {
+            if (result.getNoIntegrityPercent()!=null && result.getNoIntegrityPercent() <= 0.1) {
                 stats.importantIntegritySites++;
             }
         }
diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java
index 4e030ee..dbd6824 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceClockAccuracyCalculation.java
@@ -77,7 +77,7 @@
         AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
         stats.totalSites++;
         //鏃堕挓鍑嗙‘鐜囧ぇ浜�90%涓哄悎鏍艰澶�
-        if (result.getSnapClock().getClockPercent() >= 0.9) {
+        if (result.getSnapClock()!=null && result.getSnapClock().getClockPercent()!=null && result.getSnapClock().getClockPercent() >= 0.9) {
             stats.accuracySites++;
         }
     }
diff --git a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
index 2892129..9398f7d 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
@@ -117,7 +117,7 @@
         BigDecimal siteOnline = siteOnline(param);
         checkIndexVideo.setSiteOnline(siteOnline);
         //鍖哄幙涓嶅皯浜�100璺�
-        if(stats.totalSites < CheckThreadConstants.Check_Video_SiteOnline){
+        if(!key.startsWith(ApiConstants.Dept) && stats.totalSites < CheckThreadConstants.Check_Video_SiteOnline){
             checkIndexVideo.setSiteOnline(BigDecimal.ZERO);
         }
         //璋冪敤鐐逛綅鍦ㄧ嚎鐜囪绠楁柟娉� 璁$畻閲嶇偣鐐逛綅鍦ㄧ嚎鐜�
@@ -132,7 +132,7 @@
         }
 
         //鍖哄幙瑙嗛閲嶇偣鐐逛綅鏁颁笉灏戜簬10璺�
-        if(stats.importantSites<CheckThreadConstants.Check_Video_ImportantSite){
+        if(!key.startsWith(ApiConstants.Dept) && stats.importantSites < CheckThreadConstants.Check_Video_ImportantSite){
             checkIndexVideo.setKeySiteOnline(BigDecimal.ZERO);
         }
 
diff --git a/ycl-server/src/main/java/com/ycl/feign/HKClient.java b/ycl-server/src/main/java/com/ycl/feign/HKClient.java
index ecb06bb..92b19bf 100644
--- a/ycl-server/src/main/java/com/ycl/feign/HKClient.java
+++ b/ycl-server/src/main/java/com/ycl/feign/HKClient.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.ycl.platform.domain.param.HK.*;
 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;
@@ -16,236 +17,252 @@
 @Component
 @FeignClient(name = "HKClient", url = "${request.haiKangDomain}", configuration = HKFeignConfig.class)
 public interface HKClient {
+    /**
+     * 鑾峰彇娴峰悍鑰冩牳涓氬姟鏍�
+     * 鑾峰彇娴峰悍鑰冩牳涓氬姟鏍�
+     * @return 涓氬姟鏍�
+     */
+    @GetMapping("/aaoo/api/third/timeTree")
+    JSONObject getTree(@SpringQueryMap TreeParam param);
 
     /**
-     * 鎸夊尯鍩熺粺璁$粡绾害寮傚父璁惧鎴栧崱鍙�
-     * 1銆佹牴鎹粍缁囧尯鍩熸瘡10鍒嗛挓姹囨�婚噰闆嗚澶�/鍗″彛缁忕含搴﹀紓甯告暟閲忋��
-     * 2銆佸紓甯稿寘鎷細
-     * (1)绮惧害杩囦綆锛氱粡绾害灏忔暟鐐瑰悗涓嶈冻6浣嶃��
-     * (2)缁忕含搴︾己澶憋細缁忓害鎴栫含搴﹀瓨鍦ㄧ己澶�
-     * (3)涓嶅湪杈栧尯锛氱粡绾害瓒呭嚭鎵�灞炶鏀垮尯鍒掕寖鍥�
-     * 3銆佸綋鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
-     * @param param 璇锋眰鍙傛暟
-     * @return 鎸夊尯鍩熺粺璁$粡绾害寮傚父璁惧鎴栧崱鍙�
+     * 鑾峰彇娴峰悍鑰冩牳鎴愮哗
+     * 鑾峰彇娴峰悍鑰冩牳鎴愮哗
+     * @return 鑰冩牳鎴愮哗
      */
-    @PostMapping("/dqd/service/rs/v1/device/coordinateExpInfo/query")
-    JSONObject coordinateByArea(@RequestBody CoordinateByAreaParam param);
+    @GetMapping("/aaoo/api/third/score/get")
+    JSONObject getScore(@SpringQueryMap ScoreParam param);
+//    /**
+//     * 鎸夊尯鍩熺粺璁$粡绾害寮傚父璁惧鎴栧崱鍙�
+//     * 1銆佹牴鎹粍缁囧尯鍩熸瘡10鍒嗛挓姹囨�婚噰闆嗚澶�/鍗″彛缁忕含搴﹀紓甯告暟閲忋��
+//     * 2銆佸紓甯稿寘鎷細
+//     * (1)绮惧害杩囦綆锛氱粡绾害灏忔暟鐐瑰悗涓嶈冻6浣嶃��
+//     * (2)缁忕含搴︾己澶憋細缁忓害鎴栫含搴﹀瓨鍦ㄧ己澶�
+//     * (3)涓嶅湪杈栧尯锛氱粡绾害瓒呭嚭鎵�灞炶鏀垮尯鍒掕寖鍥�
+//     * 3銆佸綋鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鎸夊尯鍩熺粺璁$粡绾害寮傚父璁惧鎴栧崱鍙�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/device/coordinateExpInfo/query")
+//    JSONObject coordinateByArea(@RequestBody CoordinateByAreaParam param);
+//
+//    /**
+//     * 鎸夊尯鍩熺粺璁$紪鐮佸紓甯歌澶囨垨鍗″彛
+//     * 1銆佹牴鎹粍缁囧尯鍩熸瘡10鍒嗛挓缁熻閲囬泦璁惧鍜屽崱鍙e浗鏍囩紪鐮佸紓甯搁噺銆�
+//     * 2銆佸紓甯稿寘鎷細
+//     * (1)鍓�6浣嶄笉绗﹀悎鏍囧噯锛氬浗鏍囩紪鐮佸墠鍏綅涓庣粍缁囩紪鍙峰墠鍏綅姣旇緝
+//     * (2)11-13浣嶇鍚堟爣鍑嗭細鏍规嵁鐜板満瀹為檯鎯呭喌鍦╥dad鏁版嵁閰嶇疆鐣岄潰閰嶇疆鎵�寰�,鍙�氳繃鎸囨爣閰嶇疆淇℃伅鎺ュ彛鑾峰彇閰嶇疆鍙傛暟
+//     * (3)缂栫爜闀垮害涓嶆槸20浣�
+//     * 3銆佸綋鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鎸夊尯鍩熺粺璁$紪鐮佸紓甯歌澶囨垨鍗″彛
+//     */
+//    @PostMapping("/dqd/service/rs/v1/device/gbCodeExpInfo/query")
+//    JSONObject codeByArea(@RequestBody CodeByAreaParam param);
+//
+//    /**
+//     * 鎸夊尯鍩熺粺璁′汉鑴告暟鎹洃娴嬫寚鏍囬」
+//     * 1銆佹牴鎹尯鍩熸瘡10鍒嗛挓姹囨�诲尯鍩熷唴浠ヤ笅鐩戞祴缁撴灉锛�
+//     * (1)璁惧娲昏穬鎬э細鏃犳姄鎷嶃�佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄嶃��
+//     * (2)鏃堕挓鍑嗙‘鎬э細鏃堕挓鍑嗙‘鐜囥�佷笉鍑嗙‘閲忋�佽澶囧悎鏍肩巼绛夈��
+//     * (3)涓婁紶鍙婃椂鎬э細涓婁紶鍙婃椂鐜囥�佸欢杩熷悇鍖洪棿鏁版嵁閲忋�佽澶囧悎鏍肩巼銆�
+//     * (4)澶у浘鍙敤鎬э細澶у浘鍙敤閲忋�佽闂紓甯搁噺銆佹爣娉ㄥ紓甯搁噺銆佸ぇ灏忓浘涓嶄竴鑷撮噺銆�
+//     * (5)鍥剧墖鍚堟牸鎬э細浜鸿劯鍞竴閲忋�佷笉鍞竴閲忕瓑銆�
+//     * (6)鍥剧墖鏈夋晥鎬э細寤烘ā澶辫触閲忋�佷綆璇勫垎閲忕瓑銆�
+//     * (7)鍥剧墖鍏宠仈鎬э細鏈笂鎶ヨ澶囨暟銆佹湭涓婃姤鎶撴媿閲忋��
+//     * (8)鏁版嵁鍞竴鎬э細涓嶅敮涓�鏁版嵁銆佷笉鍞竴鏁版嵁閲忋��
+//     * 2銆佸彲鏌ヨ杩�30澶╁唴鐨勬暟鎹紓甯告儏鍐点��
+//     * 3銆佷粖鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
+//     *
+//     * 娉細浠婃棩鏁版嵁鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦�傛暟鎹獊闄嶇粨璁烘棤娉曠粰鍑恒�傛晠锛屾暟鎹獊闄嶅紓甯告槸鍙拡瀵规埅姝㈠巻鍙茬殑鏁版嵁寮傚父鐩戞祴銆�
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鎸夊尯鍩熺粺璁′汉鑴告暟鎹洃娴嬫寚鏍囬」
+//     */
+//    @PostMapping("/dqd/service/rs/v2/data/faceDetect/query")
+//    JSONObject faceDetectByArea(@RequestBody FaceDetectParam param);
+//
+//    /**
+//     * 鎸夊尯鍩熺粺璁¤溅杈嗘暟鎹洃娴嬫寚鏍囬」
+//     * 1銆佹牴鎹尯鍩熸瘡10鍒嗛挓姹囨�诲尯鍩熷唴浠ヤ笅鐩戞祴缁撴灉锛�
+//     * (1)璁惧娲昏穬鎬э細鏃犳姄鎷嶃�佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄嶇殑鍗″彛/璁惧鎯呭喌銆�
+//     * (2)鏃堕挓鍑嗙‘鎬э細杞﹁締鏁版嵁鏃堕挓鍑嗙‘鐜囥�佸崱鍙�/璁惧鍚堟牸鐜囩瓑銆�
+//     * (3)涓婁紶鍙婃椂鎬э細杞﹁締鏁版嵁涓婁紶鍙婃椂鐜囥�佸崱鍙�/璁惧鍚堟牸鐜囩瓑銆�
+//     * (4)澶у浘鍙敤鎬э細杞﹁締鑳屾櫙澶у浘鍙敤鐜囥�佷笉鍙敤閲忕瓑銆�
+//     * (5)杞︾墝鍚堣鎬э細杞︾墝鏈瘑鍒噺銆佽溅鐗岃瘑鍒巼浣庡拰鏄煎璇嗗埆绐佸彉鍗″彛/閲囬泦璁惧鏁伴噺鐏��
+//     * (6)鏁版嵁鍑嗙‘鎬э細杞﹁締鏁版嵁涓昏灞炴�т竴鑷撮噺銆侀噸瑕佸睘鎬т竴鑷撮噺銆�
+//     * (7)鏁版嵁瀹屾暣鎬э細涓嬬骇涓婁紶鐨勮溅杈嗘暟鎹紝鍏」灞炴�т笉瀹屾暣閲忋�佷袱椤瑰睘鎬т笉瀹屾暣閲忋��
+//     * (8)鏁版嵁鍏宠仈鎬э細鏈笂鎶ヨ澶囨暟銆佹湭涓婃姤鎶撴媿閲忋��
+//     * (9)鏁版嵁鍞竴鎬э細杞﹁締鏁版嵁涓嶅敮涓�鏁版嵁銆佷笉鍞竴鏁版嵁閲忋��
+//     * 2銆佸彲鏌ヨ杩�30澶╁唴鐨勬暟鎹紓甯告儏鍐点��
+//     * 3銆佷粖鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
+//     *
+//     * 娉細浠婃棩鏁版嵁鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦�傛暟鎹獊闄嶇粨璁烘棤娉曠粰鍑恒�傛晠锛屾暟鎹獊闄嶅紓甯告槸鍙拡瀵规埅姝㈠巻鍙茬殑鏁版嵁寮傚父鐩戞祴銆�
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鎸夊尯鍩熺粺璁¤溅杈嗘暟鎹洃娴嬫寚鏍囬」
+//     */
+//    @PostMapping("/dqd/service/rs/v2/data/passDetect/query")
+//    JSONObject carDetectByArea(@RequestBody CarDetectParam param);
+//
+//    /**
+//     * 閲囬泦璁惧灞炴�х洃娴嬬粨鏋�
+//     * 1銆佹瘡10鍒嗛挓鍚屾璐ㄩ噺璁$畻鏈嶅姟鐨勮祫婧愭暟鎹紝杩涜閲囬泦璁惧灞炴�у紓甯哥洃娴嬨��
+//     * 2銆佷富瑕佸寘鍚細閲囬泦璁惧鍩烘湰淇℃伅浠ュ強缁忕含搴︺�佸浗鏍囩紪鐮佸拰鏃堕棿宸洃娴嬬粨鏋溿�傚彲鏍规嵁缁勭粐銆佺粡绾害鍜屽浗鏍囩紪鐮佺洃娴嬬粨鏋滆繘琛岃繃婊ゃ��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 閲囬泦璁惧灞炴�х洃娴嬬粨鏋�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/device/cameraExpDetailInfo/query")
+//    JSONObject monitorDetail(@RequestBody MonitoringDetailParam param);
+//
+//    /**
+//     * 鍗″彛灞炴�х洃娴嬬粨鏋�
+//     * 1銆佹瘡10鍒嗛挓鍚屾璐ㄩ噺璁$畻鏈嶅姟鐨勮祫婧愭暟鎹紝杩涜鍗″彛灞炴�у紓甯哥洃娴嬨��
+//     * 2銆佷富瑕佸寘鍚細鍗″彛鍩烘湰淇℃伅浠ュ強缁忕含搴︺�佸浗鏍囩紪鐮佺洃娴嬬粨鏋溿�傚彲鏍规嵁缁勭粐銆佺粡绾害鍜屽浗鏍囩紪鐮佺洃娴嬬粨鏋滆繘琛岃繃婊ゃ��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鍗″彛灞炴�х洃娴嬬粨鏋�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/device/crossExpDetailInfo/query")
+//    JSONObject crossDetail(@RequestBody CrossDetailParam param);
+//
+//    /**
+//     * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋�
+//     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勭偣浣嶄汉鑴告暟閲忥紝瀵规暟鎹噺杩涜鐩戞祴銆�
+//     * 2銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙h繃杞︽暟閲忥紝瀵硅繃杞﹂噺杩涜鐩戞祴.
+//     * 3銆佷汉鑴告暟鎹噺鐩戞祴缁撴灉涓昏鍖呮嫭锛氭甯搞�佹棤鎶撴媿銆佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄�
+//     * (1)鏃犳姄鎷嶏細鐐逛綅浜鸿劯鏁版嵁閲忎负0
+//     * (2)鎶撴媿杩囧皯锛氱偣浣嶄汉鑴告暟鎹噺灏戜簬鏌愪竴鏁版嵁閲忥紙閰嶇疆锛夈�傚彲閫氳繃鎺ュ彛2.3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細lowFaceCriteria锛夎幏鍙栭厤缃�
+//     * (3)鎶撴媿绐侀檷锛氾紙骞冲潎鎶撴媿閲�-褰撳ぉ鎶撴媿鏁版嵁閲忥級/骞冲潎鎶撴媿閲�>=鏌愪竴姣斾緥锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細faceDropCriteriaPercent锛夎幏鍙栭厤缃�
+//     * 4.鍗″彛/璁惧杩囪溅閲忕洃娴嬬粨鏋滀富瑕佸寘鎷細姝e父銆佹棤鎶撴媿銆佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄�
+//     * (1)鏃犳姄鎷嶏細鍗″彛杩囪溅鏁版嵁閲忎负0
+//     * (2)鎶撴媿杩囧皯锛氬崱鍙h繃杞︽暟鎹噺灏戜簬鏌愪竴鏁版嵁閲忥紙閰嶇疆锛夈�傚彲閫氳繃鎺ュ彛2.3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細lowVelCriteria锛夎幏鍙栭厤缃�
+//     * (3)鎶撴媿绐侀檷锛氾紙骞冲潎鎶撴媿閲�-褰撳ぉ鎶撴媿鏁版嵁閲忥級/骞冲潎鎶撴媿閲�>=鏌愪竴姣斾緥锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細velDropCriteriaPercent锛夎幏鍙栭厤缃�
+//     * 5銆佹暟鎹瘡灏忔椂鏇存柊锛屽彧鏀寔鏄ㄦ棩鍜屼粖鏃ョ殑鏌ヨ銆�
+//     *
+//     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦�傛暟鎹獊闄嶄笌鎸佺画鏃犳暟鎹ぉ鏁板畾璁烘棤娉曠粰鍑恒�傛晠锛屾暟鎹獊闄嶅紓甯稿拰鎸佺画鏃犳暟鎹ぉ鏁版槸鍙拡瀵瑰巻鍙茬殑鏁版嵁寮傚父鐩戞祴銆�
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/data/snapCountDetail/query")
+//    JSONObject snapshotDataMonitor(@RequestBody SnapshotDataMonitorParam param);
+//
+//    /**
+//     * 鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉
+//     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勭偣浣嶄汉鑴告暟閲忓拰寤惰繜鍊掓寕鏁版嵁閲忥紝瀵规椂鏁堟�ц繘琛岀洃娴嬨��
+//     * 2銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁伴噺鍜屽欢杩熷�掓寕鏁版嵁閲忥紝瀵硅繃杞︽椂鏁堟�ц繘琛岀洃娴�.
+//     * 3銆佸垽鏂暟鎹欢杩熷�掓寕渚濇嵁锛�
+//     * (1)寤惰繜锛氭暟鎹帴鏀舵椂闂�-鎶撴媿鏃堕棿 >13s锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細faceDelayCriteria 鍜寁elDelayCriteria 锛夎幏鍙栭厤缃�
+//     * (2)鍊掓寕锛氭姄鎷嶆椂闂�-鏁版嵁鎺ユ敹鏃堕棿>5s锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細faceHangCriteria鍜寁elHangCriteria锛夎幏鍙栭厤缃�
+//     * 4銆佹暟鎹瘡灏忔椂鏇存柊锛屽彧鏀寔鏄ㄦ棩鍜屼粖鏃ョ殑鏌ヨ銆�
+//     *
+//     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉
+//     */
+//    @PostMapping("/dqd/service/rs/v1/data/snapAgingDetail/query")
+//    JSONObject snapshotDelayMonitor(@RequestBody SnapshotDelayMonitorParam param);
+//
+//    /**
+//     * 鍥剧墖璁块棶鐩戞祴缁撴灉
+//     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勭偣浣嶄汉鑴告暟鎹腑鍥剧墖鎶芥璁块棶鎯呭喌銆�
+//     * 2銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁版嵁涓浘鐗囨娊妫�璁块棶鎯呭喌銆�
+//     * 3銆佹暟鎹瘡10鍒嗛挓鏇存柊锛屾敮鎸佽繎涓�涓湀鏁版嵁缁撴灉鐨勬煡璇€�備粖鏃ユ暟鎹彉鍖栬緝澶э紝鍥犺�屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰�
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鍥剧墖璁块棶鐩戞祴缁撴灉
+//     */
+//    @PostMapping("/dqd/service/rs/v1/data/picAccessDetail/query")
+//    JSONObject picAccessMonitor(@RequestBody PicAccessParam param);
+//
+//    /**
+//     * 灞炴�ц瘑鍒噯纭洃娴嬬粨鏋�
+//     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁版嵁灞炴�ц瘑鍒噯纭�х粨鏋溿��
+//     * 2銆佸彧鏀寔杩戜竴涓湀鐨勫巻鍙茬洃娴嬬粨鏋滄煡璇€��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 灞炴�ц瘑鍒噯纭洃娴嬬粨鏋�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/data/attributeRecognition/query")
+//    JSONObject attrRecognitionMonitor(@RequestBody AttrRecognitionParam param);
+//
+//    /**
+//     * 鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋�
+//     * 1銆� 姣�10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁版嵁涓細
+//     * (1)鏁版嵁涓嶅畬鏁存暟閲忓強瀵瑰簲鍚勫睘鎬у瓧娈典笉瀹屾暣鐨勬暟閲忋��
+//     * (2)瀵逛簬涓昏灞炴�т細鍙﹀鍗曠嫭缁熻涓嶅畬鏁撮噺銆�
+//     * 2銆� 鎶撴媿鏁版嵁瀹屾暣锛氳溅杈嗗崱鍙h澶囨姄鎷嶈溅杈嗘暟鎹寘鍚鍚圙A/T 1400.3鏍囧噯鐨勮溅鐗屽彿鐮併�佽溅鐗岄鑹层�佽溅杈嗙被鍨嬨�佽溅杈嗗搧鐗屻�佽溅韬鑹层�佽溅杈嗗瀷鍙峰睘鎬у瓧娈点�傚叾涓紝涓昏灞炴�у寘鎷細杞︾墝鍙风爜銆佽溅鐗岄
+//     * 3銆佷粖鏃ユ暟鎹瘡10鍒嗛挓鏇存柊锛屾敮鎸佽繎涓�涓湀鐨勫睘鎬ц瘑鍒洃娴嬬粨鏋滄煡璇€��
+//     * 娉細浠婃棩鏁版嵁瀹炴椂鍦ㄥ彉锛�10鍒嗛挓鏇存柊涓�娆$殑缁撴灉浠呬緵鍙傝�冦��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/data/attributeIntegrity/query")
+//    JSONObject dataIntegrityMonitoring(@RequestBody DataIntegrityMonitoringParam param);
+//
+//    /**
+//     * 浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
+//     * 1銆佹眹鎬讳汉鑴歌澶囨椿璺冩�с�佹暟鎹強鏃舵�с�佹椂閽熷噯纭�с�佸浘鐗囨湁鏁堟�с�佷汉鑴稿敮涓�鎬у叏妫�鎸囨爣鐩戞祴缁撴灉
+//     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
+//     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
+//     */
+//    @PostMapping("/dqd/service/rs/v2/data/faceFullAmount/query")
+//    JSONObject faceDeviceInspection(@RequestBody FaceDeviceInspectionParam param);
+//
+//    /**
+//     * 浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
+//     * 1銆佹眹鎬讳汉鑴歌澶囧ぇ鍥惧彲鐢ㄦ�с�佸浘鐗囧悎鏍兼�ф娊妫�鎸囨爣鐩戞祴缁撴灉
+//     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
+//     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
+//     */
+//    @PostMapping("/dqd/service/rs/v2/data/faceSampleAmount/query")
+//    JSONObject faceDeviceSampling(@RequestBody FaceDeviceSamplingParam param);
+//
+//    /**
+//     * 杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
+//     * 1銆佹眹鎬昏溅杈嗚澶囨椿璺冩�с�佹暟鎹強鏃舵�с�佹椂閽熷噯纭�с�佹暟鎹畬鏁存�с�佹暟鎹敮涓�鎬у叏妫�鎸囨爣鐩戞祴缁撴灉
+//     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
+//     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
+//     */
+//    @PostMapping("/dqd/service/rs/v2/data/vehFullAmount/query")
+//    JSONObject vehicleDeviceInspection(@RequestBody VehicleDeviceInspectionParam param);
+//
+//    /**
+//     * 杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
+//     * 1銆佹眹鎬昏溅杈嗚澶囧ぇ鍥惧彲鐢ㄦ�с�佹暟鎹噯纭�ф娊妫�鎸囨爣鐩戞祴缁撴灉
+//     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
+//     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
+//     */
+//    @PostMapping("/dqd/service/rs/v2/data/vehSampleAmount/query")
+//    JSONObject vehicleDeviceSampling(@RequestBody VehicleDeviceSamplingParam param);
+//
+//    /**
+//     * 鍏虫敞鐩戞祴璧勬簮鏌ヨ
+//     * 1銆佹牴鎹渶姹傚彲鍦╥dad閰嶇疆鍚勫尯鍩熷叧娉ㄧ偣浣嶆垨鍗″彛淇℃伅銆侷dad瀵硅繖鎵圭偣浣嶆垨鍗″彛杩涜寮傚父鐩戞祴銆傛鎺ュ彛鍙煡璇㈠叧娉ㄧ殑璧勬簮淇℃伅銆�
+//     * @param param 璇锋眰鍙傛暟
+//     * @return 鍏虫敞鐩戞祴璧勬簮鏌ヨ
+//     */
+//    @PostMapping("/dqd/service/rs/v1/alarm/monitorResource/query")
+//    JSONObject monitorResource(@RequestBody MonitorResourceParam param);
+//
+//    /**
+//     * 鎸囨爣閰嶇疆淇℃伅鏌ヨ
+//     * 鏌ヨ鍚勭被鏁版嵁寮傚父鏍囧噯銆備緥濡傦細鎶撴媿鏁版嵁閲忎綆浜庡灏戣涓烘暟鎹噺杩囧皯
+//     * @return 鎸囨爣閰嶇疆淇℃伅鏌ヨ
+//     */
+//    @GetMapping("/dqd/service/rs/v1/statistics/criteria/query")
+//    JSONObject criteria();
+//
+//    /**
+//     * 缁勭粐鏍戞煡璇�
+//     * 鏀寔鍥芥爣缁勭粐鏍戝拰涓氬姟缁勭粐鏍戜俊鎭煡璇€��
+//     * @return 缁勭粐鏍戞煡璇�
+//     */
+//    @PostMapping("/dqd/service/rs/v1/orgInfo/standard/query")
+//    JSONObject organizationTree(@RequestBody OrganizationTreeParam param);
 
-    /**
-     * 鎸夊尯鍩熺粺璁$紪鐮佸紓甯歌澶囨垨鍗″彛
-     * 1銆佹牴鎹粍缁囧尯鍩熸瘡10鍒嗛挓缁熻閲囬泦璁惧鍜屽崱鍙e浗鏍囩紪鐮佸紓甯搁噺銆�
-     * 2銆佸紓甯稿寘鎷細
-     * (1)鍓�6浣嶄笉绗﹀悎鏍囧噯锛氬浗鏍囩紪鐮佸墠鍏綅涓庣粍缁囩紪鍙峰墠鍏綅姣旇緝
-     * (2)11-13浣嶇鍚堟爣鍑嗭細鏍规嵁鐜板満瀹為檯鎯呭喌鍦╥dad鏁版嵁閰嶇疆鐣岄潰閰嶇疆鎵�寰�,鍙�氳繃鎸囨爣閰嶇疆淇℃伅鎺ュ彛鑾峰彇閰嶇疆鍙傛暟
-     * (3)缂栫爜闀垮害涓嶆槸20浣�
-     * 3銆佸綋鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
-     * @param param 璇锋眰鍙傛暟
-     * @return 鎸夊尯鍩熺粺璁$紪鐮佸紓甯歌澶囨垨鍗″彛
-     */
-    @PostMapping("/dqd/service/rs/v1/device/gbCodeExpInfo/query")
-    JSONObject codeByArea(@RequestBody CodeByAreaParam param);
 
-    /**
-     * 鎸夊尯鍩熺粺璁′汉鑴告暟鎹洃娴嬫寚鏍囬」
-     * 1銆佹牴鎹尯鍩熸瘡10鍒嗛挓姹囨�诲尯鍩熷唴浠ヤ笅鐩戞祴缁撴灉锛�
-     * (1)璁惧娲昏穬鎬э細鏃犳姄鎷嶃�佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄嶃��
-     * (2)鏃堕挓鍑嗙‘鎬э細鏃堕挓鍑嗙‘鐜囥�佷笉鍑嗙‘閲忋�佽澶囧悎鏍肩巼绛夈��
-     * (3)涓婁紶鍙婃椂鎬э細涓婁紶鍙婃椂鐜囥�佸欢杩熷悇鍖洪棿鏁版嵁閲忋�佽澶囧悎鏍肩巼銆�
-     * (4)澶у浘鍙敤鎬э細澶у浘鍙敤閲忋�佽闂紓甯搁噺銆佹爣娉ㄥ紓甯搁噺銆佸ぇ灏忓浘涓嶄竴鑷撮噺銆�
-     * (5)鍥剧墖鍚堟牸鎬э細浜鸿劯鍞竴閲忋�佷笉鍞竴閲忕瓑銆�
-     * (6)鍥剧墖鏈夋晥鎬э細寤烘ā澶辫触閲忋�佷綆璇勫垎閲忕瓑銆�
-     * (7)鍥剧墖鍏宠仈鎬э細鏈笂鎶ヨ澶囨暟銆佹湭涓婃姤鎶撴媿閲忋��
-     * (8)鏁版嵁鍞竴鎬э細涓嶅敮涓�鏁版嵁銆佷笉鍞竴鏁版嵁閲忋��
-     * 2銆佸彲鏌ヨ杩�30澶╁唴鐨勬暟鎹紓甯告儏鍐点��
-     * 3銆佷粖鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
-     *
-     * 娉細浠婃棩鏁版嵁鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦�傛暟鎹獊闄嶇粨璁烘棤娉曠粰鍑恒�傛晠锛屾暟鎹獊闄嶅紓甯告槸鍙拡瀵规埅姝㈠巻鍙茬殑鏁版嵁寮傚父鐩戞祴銆�
-     * @param param 璇锋眰鍙傛暟
-     * @return 鎸夊尯鍩熺粺璁′汉鑴告暟鎹洃娴嬫寚鏍囬」
-     */
-    @PostMapping("/dqd/service/rs/v2/data/faceDetect/query")
-    JSONObject faceDetectByArea(@RequestBody FaceDetectParam param);
-
-    /**
-     * 鎸夊尯鍩熺粺璁¤溅杈嗘暟鎹洃娴嬫寚鏍囬」
-     * 1銆佹牴鎹尯鍩熸瘡10鍒嗛挓姹囨�诲尯鍩熷唴浠ヤ笅鐩戞祴缁撴灉锛�
-     * (1)璁惧娲昏穬鎬э細鏃犳姄鎷嶃�佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄嶇殑鍗″彛/璁惧鎯呭喌銆�
-     * (2)鏃堕挓鍑嗙‘鎬э細杞﹁締鏁版嵁鏃堕挓鍑嗙‘鐜囥�佸崱鍙�/璁惧鍚堟牸鐜囩瓑銆�
-     * (3)涓婁紶鍙婃椂鎬э細杞﹁締鏁版嵁涓婁紶鍙婃椂鐜囥�佸崱鍙�/璁惧鍚堟牸鐜囩瓑銆�
-     * (4)澶у浘鍙敤鎬э細杞﹁締鑳屾櫙澶у浘鍙敤鐜囥�佷笉鍙敤閲忕瓑銆�
-     * (5)杞︾墝鍚堣鎬э細杞︾墝鏈瘑鍒噺銆佽溅鐗岃瘑鍒巼浣庡拰鏄煎璇嗗埆绐佸彉鍗″彛/閲囬泦璁惧鏁伴噺鐏��
-     * (6)鏁版嵁鍑嗙‘鎬э細杞﹁締鏁版嵁涓昏灞炴�т竴鑷撮噺銆侀噸瑕佸睘鎬т竴鑷撮噺銆�
-     * (7)鏁版嵁瀹屾暣鎬э細涓嬬骇涓婁紶鐨勮溅杈嗘暟鎹紝鍏」灞炴�т笉瀹屾暣閲忋�佷袱椤瑰睘鎬т笉瀹屾暣閲忋��
-     * (8)鏁版嵁鍏宠仈鎬э細鏈笂鎶ヨ澶囨暟銆佹湭涓婃姤鎶撴媿閲忋��
-     * (9)鏁版嵁鍞竴鎬э細杞﹁締鏁版嵁涓嶅敮涓�鏁版嵁銆佷笉鍞竴鏁版嵁閲忋��
-     * 2銆佸彲鏌ヨ杩�30澶╁唴鐨勬暟鎹紓甯告儏鍐点��
-     * 3銆佷粖鏃ユ暟鎹洿鏂伴鐜囦负姣�10鍒嗛挓涓�娆°�傚巻鍙叉暟鎹繚鐣欎竴涓湀锛屾瘡鏃ュ噷鏅ㄧ敓鎴愭槰鏃ヤ竴鏁村ぉ鍖哄煙姹囨�荤粨鏋溿��
-     *
-     * 娉細浠婃棩鏁版嵁鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦�傛暟鎹獊闄嶇粨璁烘棤娉曠粰鍑恒�傛晠锛屾暟鎹獊闄嶅紓甯告槸鍙拡瀵规埅姝㈠巻鍙茬殑鏁版嵁寮傚父鐩戞祴銆�
-     * @param param 璇锋眰鍙傛暟
-     * @return 鎸夊尯鍩熺粺璁¤溅杈嗘暟鎹洃娴嬫寚鏍囬」
-     */
-    @PostMapping("/dqd/service/rs/v2/data/passDetect/query")
-    JSONObject carDetectByArea(@RequestBody CarDetectParam param);
-
-    /**
-     * 閲囬泦璁惧灞炴�х洃娴嬬粨鏋�
-     * 1銆佹瘡10鍒嗛挓鍚屾璐ㄩ噺璁$畻鏈嶅姟鐨勮祫婧愭暟鎹紝杩涜閲囬泦璁惧灞炴�у紓甯哥洃娴嬨��
-     * 2銆佷富瑕佸寘鍚細閲囬泦璁惧鍩烘湰淇℃伅浠ュ強缁忕含搴︺�佸浗鏍囩紪鐮佸拰鏃堕棿宸洃娴嬬粨鏋溿�傚彲鏍规嵁缁勭粐銆佺粡绾害鍜屽浗鏍囩紪鐮佺洃娴嬬粨鏋滆繘琛岃繃婊ゃ��
-     * @param param 璇锋眰鍙傛暟
-     * @return 閲囬泦璁惧灞炴�х洃娴嬬粨鏋�
-     */
-    @PostMapping("/dqd/service/rs/v1/device/cameraExpDetailInfo/query")
-    JSONObject monitorDetail(@RequestBody MonitoringDetailParam param);
-
-    /**
-     * 鍗″彛灞炴�х洃娴嬬粨鏋�
-     * 1銆佹瘡10鍒嗛挓鍚屾璐ㄩ噺璁$畻鏈嶅姟鐨勮祫婧愭暟鎹紝杩涜鍗″彛灞炴�у紓甯哥洃娴嬨��
-     * 2銆佷富瑕佸寘鍚細鍗″彛鍩烘湰淇℃伅浠ュ強缁忕含搴︺�佸浗鏍囩紪鐮佺洃娴嬬粨鏋溿�傚彲鏍规嵁缁勭粐銆佺粡绾害鍜屽浗鏍囩紪鐮佺洃娴嬬粨鏋滆繘琛岃繃婊ゃ��
-     * @param param 璇锋眰鍙傛暟
-     * @return 鍗″彛灞炴�х洃娴嬬粨鏋�
-     */
-    @PostMapping("/dqd/service/rs/v1/device/crossExpDetailInfo/query")
-    JSONObject crossDetail(@RequestBody CrossDetailParam param);
-
-    /**
-     * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋�
-     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勭偣浣嶄汉鑴告暟閲忥紝瀵规暟鎹噺杩涜鐩戞祴銆�
-     * 2銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙h繃杞︽暟閲忥紝瀵硅繃杞﹂噺杩涜鐩戞祴.
-     * 3銆佷汉鑴告暟鎹噺鐩戞祴缁撴灉涓昏鍖呮嫭锛氭甯搞�佹棤鎶撴媿銆佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄�
-     * (1)鏃犳姄鎷嶏細鐐逛綅浜鸿劯鏁版嵁閲忎负0
-     * (2)鎶撴媿杩囧皯锛氱偣浣嶄汉鑴告暟鎹噺灏戜簬鏌愪竴鏁版嵁閲忥紙閰嶇疆锛夈�傚彲閫氳繃鎺ュ彛2.3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細lowFaceCriteria锛夎幏鍙栭厤缃�
-     * (3)鎶撴媿绐侀檷锛氾紙骞冲潎鎶撴媿閲�-褰撳ぉ鎶撴媿鏁版嵁閲忥級/骞冲潎鎶撴媿閲�>=鏌愪竴姣斾緥锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細faceDropCriteriaPercent锛夎幏鍙栭厤缃�
-     * 4.鍗″彛/璁惧杩囪溅閲忕洃娴嬬粨鏋滀富瑕佸寘鎷細姝e父銆佹棤鎶撴媿銆佹姄鎷嶈繃灏戙�佹姄鎷嶇獊闄�
-     * (1)鏃犳姄鎷嶏細鍗″彛杩囪溅鏁版嵁閲忎负0
-     * (2)鎶撴媿杩囧皯锛氬崱鍙h繃杞︽暟鎹噺灏戜簬鏌愪竴鏁版嵁閲忥紙閰嶇疆锛夈�傚彲閫氳繃鎺ュ彛2.3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細lowVelCriteria锛夎幏鍙栭厤缃�
-     * (3)鎶撴媿绐侀檷锛氾紙骞冲潎鎶撴媿閲�-褰撳ぉ鎶撴媿鏁版嵁閲忥級/骞冲潎鎶撴媿閲�>=鏌愪竴姣斾緥锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細velDropCriteriaPercent锛夎幏鍙栭厤缃�
-     * 5銆佹暟鎹瘡灏忔椂鏇存柊锛屽彧鏀寔鏄ㄦ棩鍜屼粖鏃ョ殑鏌ヨ銆�
-     *
-     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦�傛暟鎹獊闄嶄笌鎸佺画鏃犳暟鎹ぉ鏁板畾璁烘棤娉曠粰鍑恒�傛晠锛屾暟鎹獊闄嶅紓甯稿拰鎸佺画鏃犳暟鎹ぉ鏁版槸鍙拡瀵瑰巻鍙茬殑鏁版嵁寮傚父鐩戞祴銆�
-     * @param param 璇锋眰鍙傛暟
-     * @return 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋�
-     */
-    @PostMapping("/dqd/service/rs/v1/data/snapCountDetail/query")
-    JSONObject snapshotDataMonitor(@RequestBody SnapshotDataMonitorParam param);
-
-    /**
-     * 鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉
-     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勭偣浣嶄汉鑴告暟閲忓拰寤惰繜鍊掓寕鏁版嵁閲忥紝瀵规椂鏁堟�ц繘琛岀洃娴嬨��
-     * 2銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁伴噺鍜屽欢杩熷�掓寕鏁版嵁閲忥紝瀵硅繃杞︽椂鏁堟�ц繘琛岀洃娴�.
-     * 3銆佸垽鏂暟鎹欢杩熷�掓寕渚濇嵁锛�
-     * (1)寤惰繜锛氭暟鎹帴鏀舵椂闂�-鎶撴媿鏃堕棿 >13s锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細faceDelayCriteria 鍜寁elDelayCriteria 锛夎幏鍙栭厤缃�
-     * (2)鍊掓寕锛氭姄鎷嶆椂闂�-鏁版嵁鎺ユ敹鏃堕棿>5s锛堥厤缃級銆傚彲閫氳繃鎺ュ彛3.2 鎸囨爣閰嶇疆淇℃伅鏌ヨ锛堣繑鍥炲弬鏁帮細faceHangCriteria鍜寁elHangCriteria锛夎幏鍙栭厤缃�
-     * 4銆佹暟鎹瘡灏忔椂鏇存柊锛屽彧鏀寔鏄ㄦ棩鍜屼粖鏃ョ殑鏌ヨ銆�
-     *
-     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
-     * @param param 璇锋眰鍙傛暟
-     * @return 鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉
-     */
-    @PostMapping("/dqd/service/rs/v1/data/snapAgingDetail/query")
-    JSONObject snapshotDelayMonitor(@RequestBody SnapshotDelayMonitorParam param);
-
-    /**
-     * 鍥剧墖璁块棶鐩戞祴缁撴灉
-     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勭偣浣嶄汉鑴告暟鎹腑鍥剧墖鎶芥璁块棶鎯呭喌銆�
-     * 2銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁版嵁涓浘鐗囨娊妫�璁块棶鎯呭喌銆�
-     * 3銆佹暟鎹瘡10鍒嗛挓鏇存柊锛屾敮鎸佽繎涓�涓湀鏁版嵁缁撴灉鐨勬煡璇€�備粖鏃ユ暟鎹彉鍖栬緝澶э紝鍥犺�屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰�
-     * @param param 璇锋眰鍙傛暟
-     * @return 鍥剧墖璁块棶鐩戞祴缁撴灉
-     */
-    @PostMapping("/dqd/service/rs/v1/data/picAccessDetail/query")
-    JSONObject picAccessMonitor(@RequestBody PicAccessParam param);
-
-    /**
-     * 灞炴�ц瘑鍒噯纭洃娴嬬粨鏋�
-     * 1銆佹瘡10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁版嵁灞炴�ц瘑鍒噯纭�х粨鏋溿��
-     * 2銆佸彧鏀寔杩戜竴涓湀鐨勫巻鍙茬洃娴嬬粨鏋滄煡璇€��
-     * @param param 璇锋眰鍙傛暟
-     * @return 灞炴�ц瘑鍒噯纭洃娴嬬粨鏋�
-     */
-    @PostMapping("/dqd/service/rs/v1/data/attributeRecognition/query")
-    JSONObject attrRecognitionMonitor(@RequestBody AttrRecognitionParam param);
-
-    /**
-     * 鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋�
-     * 1銆� 姣�10鍒嗛挓缁熻浠婃棩鍚勫崱鍙�/璁惧杩囪溅鏁版嵁涓細
-     * (1)鏁版嵁涓嶅畬鏁存暟閲忓強瀵瑰簲鍚勫睘鎬у瓧娈典笉瀹屾暣鐨勬暟閲忋��
-     * (2)瀵逛簬涓昏灞炴�т細鍙﹀鍗曠嫭缁熻涓嶅畬鏁撮噺銆�
-     * 2銆� 鎶撴媿鏁版嵁瀹屾暣锛氳溅杈嗗崱鍙h澶囨姄鎷嶈溅杈嗘暟鎹寘鍚鍚圙A/T 1400.3鏍囧噯鐨勮溅鐗屽彿鐮併�佽溅鐗岄鑹层�佽溅杈嗙被鍨嬨�佽溅杈嗗搧鐗屻�佽溅韬鑹层�佽溅杈嗗瀷鍙峰睘鎬у瓧娈点�傚叾涓紝涓昏灞炴�у寘鎷細杞︾墝鍙风爜銆佽溅鐗岄
-     * 3銆佷粖鏃ユ暟鎹瘡10鍒嗛挓鏇存柊锛屾敮鎸佽繎涓�涓湀鐨勫睘鎬ц瘑鍒洃娴嬬粨鏋滄煡璇€��
-     * 娉細浠婃棩鏁版嵁瀹炴椂鍦ㄥ彉锛�10鍒嗛挓鏇存柊涓�娆$殑缁撴灉浠呬緵鍙傝�冦��
-     * @param param 璇锋眰鍙傛暟
-     * @return 鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋�
-     */
-    @PostMapping("/dqd/service/rs/v1/data/attributeIntegrity/query")
-    JSONObject dataIntegrityMonitoring(@RequestBody DataIntegrityMonitoringParam param);
-
-    /**
-     * 浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-     * 1銆佹眹鎬讳汉鑴歌澶囨椿璺冩�с�佹暟鎹強鏃舵�с�佹椂閽熷噯纭�с�佸浘鐗囨湁鏁堟�с�佷汉鑴稿敮涓�鎬у叏妫�鎸囨爣鐩戞祴缁撴灉
-     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
-     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
-     * @param param 璇锋眰鍙傛暟
-     * @return 浜鸿劯璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-     */
-    @PostMapping("/dqd/service/rs/v2/data/faceFullAmount/query")
-    JSONObject faceDeviceInspection(@RequestBody FaceDeviceInspectionParam param);
-
-    /**
-     * 浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
-     * 1銆佹眹鎬讳汉鑴歌澶囧ぇ鍥惧彲鐢ㄦ�с�佸浘鐗囧悎鏍兼�ф娊妫�鎸囨爣鐩戞祴缁撴灉
-     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
-     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
-     * @param param 璇锋眰鍙傛暟
-     * @return 浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
-     */
-    @PostMapping("/dqd/service/rs/v2/data/faceSampleAmount/query")
-    JSONObject faceDeviceSampling(@RequestBody FaceDeviceSamplingParam param);
-
-    /**
-     * 杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-     * 1銆佹眹鎬昏溅杈嗚澶囨椿璺冩�с�佹暟鎹強鏃舵�с�佹椂閽熷噯纭�с�佹暟鎹畬鏁存�с�佹暟鎹敮涓�鎬у叏妫�鎸囨爣鐩戞祴缁撴灉
-     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
-     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
-     * @param param 璇锋眰鍙傛暟
-     * @return 杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
-     */
-    @PostMapping("/dqd/service/rs/v2/data/vehFullAmount/query")
-    JSONObject vehicleDeviceInspection(@RequestBody VehicleDeviceInspectionParam param);
-
-    /**
-     * 杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
-     * 1銆佹眹鎬昏溅杈嗚澶囧ぇ鍥惧彲鐢ㄦ�с�佹暟鎹噯纭�ф娊妫�鎸囨爣鐩戞祴缁撴灉
-     * 2銆佸彧鏀寔杩戜竴涓湀鐨勭洃娴嬬粨鏋滄煡璇€��
-     * 娉細浠婃棩鏁版嵁姣�10鍒嗛挓鍙樺寲杈冨ぇ锛屽洜鑰屼粖鏃ユ姄鎷嶅紓甯哥粺璁℃儏鍐典粎渚涘弬鑰冦��
-     * @param param 璇锋眰鍙傛暟
-     * @return 杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉
-     */
-    @PostMapping("/dqd/service/rs/v2/data/vehSampleAmount/query")
-    JSONObject vehicleDeviceSampling(@RequestBody VehicleDeviceSamplingParam param);
-
-    /**
-     * 鍏虫敞鐩戞祴璧勬簮鏌ヨ
-     * 1銆佹牴鎹渶姹傚彲鍦╥dad閰嶇疆鍚勫尯鍩熷叧娉ㄧ偣浣嶆垨鍗″彛淇℃伅銆侷dad瀵硅繖鎵圭偣浣嶆垨鍗″彛杩涜寮傚父鐩戞祴銆傛鎺ュ彛鍙煡璇㈠叧娉ㄧ殑璧勬簮淇℃伅銆�
-     * @param param 璇锋眰鍙傛暟
-     * @return 鍏虫敞鐩戞祴璧勬簮鏌ヨ
-     */
-    @PostMapping("/dqd/service/rs/v1/alarm/monitorResource/query")
-    JSONObject monitorResource(@RequestBody MonitorResourceParam param);
-
-    /**
-     * 鎸囨爣閰嶇疆淇℃伅鏌ヨ
-     * 鏌ヨ鍚勭被鏁版嵁寮傚父鏍囧噯銆備緥濡傦細鎶撴媿鏁版嵁閲忎綆浜庡灏戣涓烘暟鎹噺杩囧皯
-     * @return 鎸囨爣閰嶇疆淇℃伅鏌ヨ
-     */
-    @GetMapping("/dqd/service/rs/v1/statistics/criteria/query")
-    JSONObject criteria();
-
-    /**
-     * 缁勭粐鏍戞煡璇�
-     * 鏀寔鍥芥爣缁勭粐鏍戝拰涓氬姟缁勭粐鏍戜俊鎭煡璇€��
-     * @return 缁勭粐鏍戞煡璇�
-     */
-    @PostMapping("/dqd/service/rs/v1/orgInfo/standard/query")
-    JSONObject organizationTree(@RequestBody OrganizationTreeParam param);
 }
diff --git a/ycl-server/src/main/java/com/ycl/feign/HKFeignConfig.java b/ycl-server/src/main/java/com/ycl/feign/HKFeignConfig.java
index d0b40ba..3612b8a 100644
--- a/ycl-server/src/main/java/com/ycl/feign/HKFeignConfig.java
+++ b/ycl-server/src/main/java/com/ycl/feign/HKFeignConfig.java
@@ -1,24 +1,48 @@
 package com.ycl.feign;
 
 import com.ycl.interceptor.HKFeignInterceptor;
+import feign.Client;
+import feign.Logger;
 import feign.RequestInterceptor;
 import feign.codec.ErrorDecoder;
+import org.springframework.cloud.configuration.SSLContextFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
 
 /**
  *娴峰悍鎺ュ彛閰嶇疆
  */
 @Configuration
 public class HKFeignConfig {
-    /**
-     * 娉ㄥ叆鎷︽埅鍣�
-     */
+    //璺宠繃ssl楠岃瘉
     @Bean
-    public RequestInterceptor requestInterceptor(){
-        return new HKFeignInterceptor();
+    public Client generateClient() {
+        try {
+            SSLContext ctx = SSLContext.getInstance("SSL");
+            X509TrustManager tm = new X509TrustManager() {
+                @Override
+                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                }
+                @Override
+                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                }
+                @Override
+                public X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+            };
+            ctx.init(null, new TrustManager[]{tm}, null);
+            return new Client.Default(ctx.getSocketFactory(), (hostname, session) -> true);
+        } catch (Exception e) {
+            return null;
+        }
     }
-
     /**
      * 璋冪敤寮傚父澶勭悊
      * @return
@@ -27,4 +51,9 @@
     public ErrorDecoder errorDecoder() {
         return new FeignErrorDecoder();
     }
+
+    @Bean
+    Logger.Level feignLoggerLevel(){
+        return Logger.Level.FULL;
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/feign/HkApiUtil.java b/ycl-server/src/main/java/com/ycl/feign/HkApiUtil.java
index 20beae5..32685ba 100644
--- a/ycl-server/src/main/java/com/ycl/feign/HkApiUtil.java
+++ b/ycl-server/src/main/java/com/ycl/feign/HkApiUtil.java
@@ -2,16 +2,20 @@
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.hikvision.artemis.sdk.ArtemisHttpUtil;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
 import com.ycl.platform.domain.param.HK.BaseParam;
 import com.ycl.platform.domain.param.HK.FaceDetectParam;
 import com.ycl.utils.DateUtils;
+import com.ycl.utils.bean.BeanUtils;
 import constant.ApiConstants;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.CollectionUtils;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -27,7 +31,7 @@
 
 
     /**
-     * 璋冪敤娴峰悍鎺ュ彛
+     * 璋冪敤娴峰悍鎺ュ彛 鍩虹鏁版嵁骞冲彴 Post璇锋眰
      *
      * @param apiUrl 鎺ュ彛鍦板潃锛�/api/dqd/service/rs/v2/data/faceDetect/query
      * @param params 璇锋眰鍙傛暟
@@ -80,6 +84,8 @@
         return dataList;
     }
 
+
+
     //瑙f瀽鏁版嵁
     private static <T> List<T> getDataList(JSONObject jsonObject, Class<T> resultClass) {
         if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) {
@@ -96,6 +102,56 @@
         return null;
     }
 
+    /**
+     * 瀹炰綋瀵硅薄杞垚Map
+     * @param obj 瀹炰綋瀵硅薄
+     * @return
+     */
+    public static Map<String, String> object2Map(Object obj) {
+        Map<String, String> map = new HashMap<>();
+        if (obj == null) {
+            return map;
+        }
+        Class clazz = obj.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        try {
+            for (Field field : fields) {
+                field.setAccessible(true);
+                map.put(field.getName(), field.get(obj).toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
 
+    /**
+     * Map杞垚瀹炰綋瀵硅薄
+     * @param map map瀹炰綋瀵硅薄鍖呭惈灞炴��
+     * @param clazz 瀹炰綋瀵硅薄绫诲瀷
+     * @return
+     */
+    public static Object map2Object(Map<String, Object> map, Class<?> clazz) {
+        if (map == null) {
+            return null;
+        }
+        Object obj = null;
+        try {
+            obj = clazz.newInstance();
+
+            Field[] fields = obj.getClass().getDeclaredFields();
+            for (Field field : fields) {
+                int mod = field.getModifiers();
+                if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
+                    continue;
+                }
+                field.setAccessible(true);
+                field.set(obj, map.get(field.getName()));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return obj;
+    }
 }
 
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/controller/CalculateReportController.java b/ycl-server/src/main/java/com/ycl/platform/controller/CalculateReportController.java
index 7c23eea..7fe05da 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,5 +1,6 @@
 package com.ycl.platform.controller;
 
+import com.ycl.platform.domain.entity.CalculateRecord;
 import com.ycl.platform.domain.form.CalculateReportBackfillForm;
 import com.ycl.platform.domain.query.CalculateReportQuery;
 import com.ycl.platform.service.CalculateReportService;
@@ -41,25 +42,35 @@
         return calculateReportService.backfill(form);
     }
 
-    @GetMapping("/{id}")
+    @GetMapping("/{contractId}/{whichYear}")
     @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
     @PreAuthorize("@ss.hasPermi('system:calculate:report:detail')")
-    public Result detail(@PathVariable("id") Long id) {
-        return calculateReportService.detail(id);
+    public Result detail(@PathVariable("contractId") Integer contractId,@PathVariable("whichYear") Integer whichYear) {
+        CalculateReportQuery query = new CalculateReportQuery();
+        query.setContractId(contractId);
+        query.setWhichYear(whichYear);
+        return calculateReportService.detail(query);
     }
 
-    @PutMapping("/status/{reportId}")
+    @PutMapping("/status/{contractId}/{whichYear}")
     @ApiOperation(value = "淇敼鍙戝竷鐘舵��", notes = "淇敼鍙戝竷鐘舵��")
     @PreAuthorize("@ss.hasPermi('system:calculate:report:status')")
-    public Result updatePublishStatus(@PathVariable("reportId") Long reportId) {
-        return calculateReportService.updatePublishStatus(reportId);
+    public Result updatePublishStatus(@PathVariable("contractId") Integer contractId,@PathVariable("whichYear") Integer whichYear) {
+        return calculateReportService.updatePublishStatus(contractId,whichYear);
     }
 
+    @PutMapping("/status/detail/{id}/{status}")
+    @ApiOperation(value = "淇敼鍙戝竷鐘舵��", notes = "淇敼鍙戝竷鐘舵��")
+    @PreAuthorize("@ss.hasPermi('system:calculate:report:status')")
+    public Result updatePublishStatusById(@PathVariable("id") Integer id,@PathVariable("status") String status) {
+
+        return calculateReportService.updatePublishStatusById(id,status);
+    }
     @PostMapping("/export")
     @ApiOperation(value = "瀵煎嚭", notes = "瀵煎嚭")
     @PreAuthorize("@ss.hasPermi('system:calculate:report:export')")
-    public void export(Integer contractId, HttpServletResponse response) {
-        calculateReportService.export(contractId, response);
+    public void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response) {
+        calculateReportService.export(whichYear,whichMonth,contractId, response);
     }
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/CheckScoreController.java b/ycl-server/src/main/java/com/ycl/platform/controller/CheckScoreController.java
index 1a53890..09f209b 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/CheckScoreController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/CheckScoreController.java
@@ -43,7 +43,16 @@
         Map<Long, List<CheckScore>> deptMap = checkScoreService.selectCheckScoreList(checkScore);
         return success(deptMap);
     }
-
+    /**
+     * 鏌ヨ鑰冩牳绉垎鍗$墖鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('check:score:query')")
+    @PostMapping("/bar")
+    public AjaxResult bar(@RequestBody CheckScore checkScore)
+    {
+        Map<Long, List<CheckScore>> deptMap = checkScoreService.selectCheckScoreList(checkScore);
+        return success(deptMap);
+    }
     /**
      * 鏌ヨ鑰冩牳绉垎鎶樼嚎鍥�
      */
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java b/ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java
index 4ebc0d6..fdc0114 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/ContractController.java
@@ -22,6 +22,7 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -79,6 +80,17 @@
     }
 
     /**
+     * 鍚堝悓瀵煎叆瑙勫垯
+     *
+     * @return 瀵煎叆缁撴灉
+     */
+    @Log(title = "鍚堝悓瀵煎叆", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:import')")
+    @PostMapping("/updateRule")
+    public AjaxResult importRule(TContract tContract) throws IOException {
+        return tContractService.importRule(tContract.getFile(), tContract);
+    }
+    /**
      * 鑾峰彇銆愯濉啓鍔熻兘鍚嶇О銆戣缁嗕俊鎭�
      */
     @PreAuthorize("@ss.hasPermi('system:contract:query')")
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java b/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
index 55cb5e8..e1cd357 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
@@ -1,11 +1,14 @@
 package com.ycl.platform.controller;
 
+import annotation.Log;
 import com.ycl.platform.domain.query.DataCenterQuery;
 import com.ycl.platform.service.DataCenterService;
 import com.ycl.platform.service.ITMonitorService;
 import com.ycl.platform.service.PlatformOnlineService;
 import com.ycl.system.Result;
+import enumeration.BusinessType;
 import io.swagger.annotations.ApiOperation;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -38,7 +41,26 @@
         query.setTime();
         return monitorService.assetManagement(query);
     }
-
+    /**
+     * 璧勪骇绠$悊缁熻
+     *
+     * @param query
+     * @return
+     */
+    @GetMapping("/assetManagement/count")
+    @ApiOperation(value = "璧勪骇绠$悊缁熻", notes = "璧勪骇绠$悊缁熻")
+    @PreAuthorize("@ss.hasPermi('assetManagement:page')")
+    public Result assetManagementCount(DataCenterQuery query) {
+        query.setTime();
+        return monitorService.assetManagementCount(query);
+    }
+    @DeleteMapping("/assetManagement/clear")
+    @ApiOperation(value = "娓呯悊涓�鏈轰竴妗�", notes = "娓呯悊涓�鏈轰竴妗�")
+    @PreAuthorize("@ss.hasPermi('point:remove')")
+    @Log(title = "娓呯悊涓�鏈轰竴妗�", businessType = BusinessType.DELETE)
+    public Result clear() {
+        return monitorService.clearMonitor();
+    }
     /**
      * 骞冲彴鍦ㄧ嚎鐜�
      *
@@ -160,9 +182,19 @@
         query.setTime();
         return dataCenterService.videoImportantPointLabelingAccuracy(query);
     }
-
     /**
-     * 瑙嗛锛氭牎鏃舵纭巼
+     * 瑙嗛锛氬鍑洪噸鐐圭偣浣嶆爣娉ㄦ纭巼
+     *
+     * @param query
+     * @return
+     */
+    @PostMapping("/videoImportantPointLabelingAccuracy/export")
+    public void videoImportantPointLabelingAccuracyExport(HttpServletResponse response,DataCenterQuery query) {
+        query.setTime();
+        dataCenterService.videoImportantPointLabelingAccuracyExport(response,query);
+    }
+    /**
+     * 瑙嗛锛氭牎鏃舵纭巼 锛堟柊瑙勫垯宸茬粡寮冪敤锛�
      *
      * @param query
      * @return
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
index 0be073f..c3e52a4 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
@@ -101,6 +101,7 @@
     @DeleteMapping("/{id}")
     @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
     @PreAuthorize("@ss.hasPermi('work:order:remove')")
+    @Log(title = "鍒犻櫎宸ュ崟", businessType = BusinessType.DELETE)
     public Result removeById(@PathVariable("id") String id) {
         return workOrderService.removeById(id);
     }
@@ -205,6 +206,7 @@
     @DeleteMapping("/batchDelete")
     @PreAuthorize("@ss.hasPermi('work:order:delete')")
     @ApiOperation(value = "鎵归噺鍒犻櫎宸ュ崟", notes = "鎵归噺鍒犻櫎宸ュ崟")
+    @Log(title = "鎵归噺鍒犻櫎宸ュ崟", businessType = BusinessType.DELETE)
     public Result batchDeleteWorkOrder(@RequestBody List<String> workOrderNos) {
         return workOrderService.batchDeleteWorkOrder(workOrderNos);
     }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java b/ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java
index 5cbd808..f7fce50 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/YwPointController.java
@@ -143,4 +143,5 @@
         return ywPointService.importData(file, unitId, start, end, needUpdateUnit);
     }
 
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java b/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java
index c1b2daa..10724b8 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/YwThresholdController.java
@@ -173,4 +173,12 @@
         return ywThresholdService.importWhite(file);
     }
 
+    /**
+     * 鏂板鐧藉悕鍗曟晠闅滅被鍨�
+     */
+    @PostMapping("/addBatch")
+    @ApiOperation(value = "鏂板鐧藉悕鍗曟晠闅滅被鍨�", notes = "鏂板鐧藉悕鍗曟晠闅滅被鍨�")
+    public Result addBatch(@RequestBody WorkOrderWhite addErrorForm) {
+        return ywThresholdService.addBatch(addErrorForm);
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRecordMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRecordMapper.java
index 08a00f2..71e2687 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRecordMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/CalculateRecordMapper.java
@@ -2,6 +2,7 @@
 
 import com.ycl.platform.domain.entity.CalculateRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.platform.domain.form.CalculateReportBackfillForm;
 import com.ycl.platform.domain.vo.CalculateRecordVO;
 import com.ycl.platform.domain.form.CalculateRecordForm;
 
@@ -19,4 +20,9 @@
 @Mapper
 public interface CalculateRecordMapper extends BaseMapper<CalculateRecord> {
 
+    public void updateBatch(List<CalculateReportBackfillForm.RecordForm> list);
+
+    void batchPublish(Integer contractId, Integer whichYear);
+
+    void updatePublishById(Integer id, String status);
 }
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 8b5e223..4536b7d 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
@@ -36,11 +36,11 @@
      * @param id 鏍哥畻ID
      * @return
      */
-    CalculateReportDetailVO getById(@Param("id") Long id);
+    CalculateReportDetailVO getById(@Param("query") CalculateReportQuery query);
 
     /**
      * 瀵煎嚭鏁版嵁
      * @return 鏁版嵁
      */
-    List<CalculateExport> exportData(Integer contractId);
+    List<CalculateExport> exportData(Integer whichYear,Integer whichMonth,Integer contractId);
 }
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 61c4981..8c5999e 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
@@ -81,7 +81,7 @@
      * 棣栭〉鑰冩牳棰勮
      * @return 鏁版嵁
      */
-    List<Map<String, Object>> home();
+    List<Map<String, Object>> home(Date startTime,Date endTime);
 
     /**
      * 棣栭〉鏍哥畻
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
index ecfd274..9b3c66e 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -11,11 +11,11 @@
 import com.ycl.platform.domain.result.SYS.TMonitorResult;
 import com.ycl.platform.domain.vo.TMonitorVO;
 import com.ycl.platform.domain.vo.UpdateOnlineVO;
+import com.ycl.platform.domain.vo.WorkOrderVO;
 import com.ycl.platform.domain.vo.screen.MonitorRateVO;
 import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
-import org.springframework.security.core.parameters.P;
 
 import java.util.Date;
 import java.util.List;
@@ -167,7 +167,13 @@
      * 鏍规嵁ip淇敼鐐逛綅琛ㄧ殑鏄惁鍦ㄧ嚎瀛楁
      * @param onlineList
      */
-    void updateOnline(@Param("onlineList") List<UpdateOnlineVO> onlineList);
+    void updateOnlineFromUyOrHk(@Param("onlineList") List<UpdateOnlineVO> onlineList);
+
+    /**
+     * 鏍规嵁鍥芥爣淇敼
+     * @param onlineList
+     */
+    void updateOnlineFromHk(@Param("onlineList") List<UpdateOnlineVO> onlineList);
 
 
     /**
@@ -183,4 +189,13 @@
     List<TMonitor> selectCarOrFace();
 
     List<TMonitorExp> exportTMonitorList(TMonitorVO tMonitor);
+
+    List<TMonitorResult> getByIp(@Param("ipList")List<String> ips);
+
+    void clearMonitor();
+
+    List<String> getVideoIds();
+
+    Map<String, String> assetManagementCount();
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
index ddcdfab..9b48848 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
@@ -77,7 +77,7 @@
      */
     List<DeviceInfoVO> hasErrorWorkOrderList(@Param("start") Date start, @Param("end") Date end);
 
-    List<WorkOrderVO> selectPassOrder(@Param("startTime") LocalDateTime now, @Param("endTime")LocalDateTime thirtyDaysAgo, @Param("status") String status, @Param("auditStatus") String auditStatus);
+    List<WorkOrderVO> selectPassOrder(@Param("startTime") LocalDateTime now, @Param("endTime")LocalDateTime thirtyDaysAgo, @Param("status") String status, @Param("errorList") List<String> errorList,@Param("auditStatus") String auditStatus);
 
     int addMany(@Param("workOrderList") List<WorkOrder> workOrderList);
 
@@ -115,4 +115,10 @@
     List<WorkOrder> selectByNos(@Param("workOrderNos") List<String> workOrderNos);
 
 
+    List<String> getOfflineWorkOrder();
+
+    List<WorkOrderVO> getAuditTimeList(@Param("workOrderNos")List<String> workOrderNos);
+
+    List<WorkOrderVO> getHandleTimeList(@Param("workOrderNos")List<String> workOrderNos);
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java
index a17659f..7cb2a2d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/YwPointMapper.java
@@ -36,21 +36,12 @@
 
     IPage page(IPage<YwPointVO> page, @Param("query") YwPointQuery query);
 
-    IPage dataCenterPage(IPage<PointDetailVO> page, @Param("query") DataCenterQuery query);
 
     /**
      * 棣栭〉鍒版湡棰勮
      * @return 鏁版嵁
      */
     List<YwPoint> home();
-
-    /**
-     * 閫氳繃鏍囩鏌ラ噸鐐圭偣浣嶆垨鐪佸巺鐐逛綅鎴栭噸鐐规寚鎸ュ浘鍍�
-     */
-    List<YwPoint> selectByTag(@Param("important")Boolean important,
-                              @Param("province")Boolean province,
-                              @Param("commandImage")Boolean commandImage,
-                              @Param("deptTag") Boolean deptTag);
 
     /**
      * 瀵煎嚭鏁版嵁
@@ -118,11 +109,6 @@
      */
     List<CheckTagVO> getTagsByGB(@Param("gbList") List<String> gbList);
 
-    /**
-     * 鏌ヨ璁惧鎬绘暟
-     * @return
-     */
-    Integer distinctCount(@Param("query") DataCenterQuery query);
 
     /**
      * 璁惧鏁伴噺
@@ -133,4 +119,6 @@
     List<YwPointVO> selectToCount(Short examineCategory, Short examineTag);
 
     void myUpdateById(YwPoint entity);
+
+    void clearMonitor();
 }
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 96d9dd8..b0a3bc0 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
@@ -55,10 +55,10 @@
 
     /**
      * 鏍规嵁id鏌ユ壘
-     * @param id
+     * @param
      * @return
      */
-    Result detail(Long id);
+    Result detail(CalculateReportQuery query);
 
     /**
      * 鍒楄〃
@@ -77,14 +77,20 @@
     /**
      * 淇敼鍙戝竷鐘舵��
      *
-     * @param reportId
+     * @param
      * @return
      */
-    Result updatePublishStatus(Long reportId);
-
+    Result updatePublishStatus(Integer contractId,Integer whichYear);
+    /**
+     * 淇敼鍙戝竷鐘舵��
+     *
+     * @param
+     * @return
+     */
+    Result updatePublishStatusById(Integer id,String status);
     /**
      * 瀵煎嚭
      * @param response 鍝嶅簲
      */
-    void export(Integer contractId, HttpServletResponse response);
+    void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java b/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java
index 8db5653..bad47b9 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java
@@ -6,6 +6,7 @@
 import com.ycl.platform.domain.result.UY.OneMachineFileResult;
 import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
 import com.ycl.system.Result;
+import jakarta.servlet.http.HttpServletResponse;
 
 import java.util.List;
 
@@ -97,6 +98,7 @@
      * @return
      */
     Result videoImportantPointLabelingAccuracy(DataCenterQuery query);
+    void videoImportantPointLabelingAccuracyExport(HttpServletResponse response,DataCenterQuery query);
 
     /**
      * 瑙嗛锛氭牎鏃舵纭巼
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java b/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
index b1b8e6f..7e62bf5 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ITContractService.java
@@ -9,6 +9,7 @@
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -34,6 +35,13 @@
     AjaxResult importData(MultipartFile file, TContract tContract);
 
     /**
+     * 瀵煎叆鍚堝悓瑙勫垯
+     * @param file 鏂囦欢
+     * @param tContract 鍚堝悓淇℃伅
+     * @return 瀵煎叆缁撴灉
+     */
+    AjaxResult importRule(MultipartFile file, TContract tContract) throws IOException;
+    /**
      * 鍒嗛〉鏌ヨ
      *
      * @param query
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java b/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java
index 3b8a84b..15fbd8b 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java
@@ -130,4 +130,8 @@
     Map<String, Object> videoHome(HomeQuery monitorQuery) throws ParseException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException;
 
     void export(HttpServletResponse response, TMonitorVO tMonitor);
+
+    Result clearMonitor();
+
+    Result assetManagementCount(DataCenterQuery query);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java b/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java
index 6eaa5f7..15bed87 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/IYwThresholdService.java
@@ -1,6 +1,7 @@
 package com.ycl.platform.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.platform.domain.entity.WorkOrder;
 import com.ycl.platform.domain.entity.WorkOrderWhite;
 import com.ycl.platform.domain.entity.YwThreshold;
 import com.ycl.platform.domain.excel.PointExport;
@@ -9,6 +10,7 @@
 import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult;
 import com.ycl.system.Result;
 import com.ycl.system.page.TableDataInfo;
+import enumeration.CompareType;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -129,11 +131,18 @@
      *
      * @param response
      */
-    void whiteExport(HttpServletResponse response) throws IOException;;
+    void whiteExport(HttpServletResponse response) throws IOException;
     /**
      * 鎵归噺瀵煎叆宸ュ崟鐧藉悕鍗�
      *
      * @author
      */
     Result importWhite(MultipartFile file) throws IOException;
+
+    public Map<String, YwThreshold> getYwThresholdMap(String name);
+    public <T extends Comparable<T>> void check(String key, T value, String serialNumber, Map<String, YwThreshold> thresholds, WorkOrder workOrder, CompareType compareType, String errorType);
+
+
+    Result addBatch (WorkOrderWhite workOrderWhite);
+
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/UYErrorTypeCheckService.java b/ycl-server/src/main/java/com/ycl/platform/service/UYErrorTypeCheckService.java
index ce38103..d9071a2 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/UYErrorTypeCheckService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/UYErrorTypeCheckService.java
@@ -1,5 +1,6 @@
 package com.ycl.platform.service;
 
+import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
 import com.ycl.platform.domain.result.UY.*;
 
 import java.util.List;
@@ -44,6 +45,7 @@
 //     */
 //    void osdMonitorCheck(List<OsdMonitorResult> dataList);
 
+     void hkOnlineCheck(List<SnapshotDataMonitorResult> dataList);
     /**
      * 娴峰悍
      */
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java b/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java
index 9776ebd..f0185dc 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java
@@ -142,7 +142,7 @@
      * @param dataList 鏁版嵁
      * @return
      */
-    <T extends BaseResult> void setDeviceTagByGB(List<T> dataList);
+    <T extends BaseResult> void setDeviceTagByGB(List<T> dataList,Short category);
 
     /**
      * 鏍规嵁鍥芥爣璁剧疆鏄惁鏂扮偣浣�
@@ -164,4 +164,5 @@
      * @author
      */
     YwPoint selectBySerialNumber(String serialNumber);
+
 }
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 10c8a12..9787572 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
@@ -16,14 +16,18 @@
 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.domain.vo.ContractResultVO;
 import com.ycl.platform.mapper.CalculateRecordMapper;
 import com.ycl.platform.mapper.CalculateReportMapper;
 import com.ycl.platform.service.CalculateReportService;
 import com.ycl.platform.service.ICalculateRuleService;
 import com.ycl.system.Result;
+import com.ycl.system.entity.SysRole;
+import com.ycl.system.entity.SysUser;
 import com.ycl.system.page.PageUtil;
 import com.ycl.utils.SecurityUtils;
 import enumeration.general.CalculateReportStatusEnum;
+import enumeration.general.PublishType;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -34,6 +38,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
@@ -125,7 +130,10 @@
     @Override
     public Result page(CalculateReportQuery query) {
         IPage<CalculateReportVO> page = PageUtil.getPage(query, CalculateReportVO.class);
+        //鍙兘鐪嬭嚜宸卞崟浣�
         query.setUnitId(SecurityUtils.getUnitId());
+        //鍙兘鐪嬪凡鍙戝竷
+        roleControl(query);
         baseMapper.page(query, page);
         page.getRecords().stream().forEach(item -> {
             if (Objects.isNull(item)) {
@@ -139,23 +147,29 @@
 
     /**
      * 鏍规嵁id鏌ユ壘
-     * @param id
+     * @param
      * @return
      */
     @Override
-    public Result detail(Long id) {
+    public Result detail(CalculateReportQuery query) {
+        roleControl(query);
         // 鏄庣粏鍒楄〃
-        CalculateReportDetailVO detail = baseMapper.getById(id);
-        if (Objects.nonNull(detail) && ! CollectionUtils.isEmpty(detail.getRecordList())) {
-            if (CalculateReportStatusEnum.NOT_PUBLISH.equals(detail.getStatus())) {
-                detail.getRecordList().get(0).setLatest(Boolean.TRUE);
-            } else {
-                detail.getRecordList().get(0).setLatest(Boolean.FALSE);
-            }
-        }
+        CalculateReportDetailVO detail = baseMapper.getById(query);
         return Result.ok().data(detail);
     }
 
+    private void roleControl(CalculateReportQuery query) {
+        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        if (!user.isAdmin()) {
+            for (SysRole role : roles) {
+                //鑿滃崟鐨勫湴鏂瑰鍔犱簡涓�涓寜閽紝瑙掕壊鏉冮檺缂栬緫濡傛灉鍕句笂浜嗚鏄庡彧鑳芥煡鐪嬪凡鍙戝竷
+                if (role.getPermissions().contains("check:contract:role:publish")) {
+                    query.setStatus(PublishType.PUBLISHED.getCode());
+                }
+            }
+        }
+    }
     /**
      * 鍒楄〃
      * @return
@@ -172,52 +186,57 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result backfill(CalculateReportBackfillForm form) {
-        CalculateReport report = baseMapper.selectById(form.getId());
-        if (Objects.isNull(report)) {
-            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
-        }
-        if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
-            throw new RuntimeException("鏈�鏂颁竴娆℃牳绠楁姤鍛婂凡缁忓彂甯冿紝鏃犳硶淇敼");
-        }
-        CalculateReportBackfillForm.RecordForm latestRecord = form.getRecordList().get(0);
-        CalculateRecord beforeRecord = calculateRecordMapper.selectById(latestRecord.getId());
-        if (Objects.isNull(beforeRecord)) {
-            throw new RuntimeException("鏈�杩戜竴娆℃牳绠楄褰曚笉瀛樺湪");
-        }
-        // 璁$畻寰楀埌鎵f鎬婚锛堝彧绠楁渶杩戜竴鏉★級
-        BigDecimal totalDeduct = report.getDeductMoney().subtract(latestRecord.getDeductMoney()).add(latestRecord.getDeductMoney());
-        report.setDeductMoney(totalDeduct);
-        baseMapper.updateById(report);
-
-        beforeRecord.setDeductMoney(latestRecord.getDeductMoney());
-        calculateRecordMapper.updateById(beforeRecord);
+//        CalculateReport report = baseMapper.selectById(form.getId());
+//        if (Objects.isNull(report)) {
+//            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
+//        }
+//        if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
+//            throw new RuntimeException("鏈�鏂颁竴娆℃牳绠楁姤鍛婂凡缁忓彂甯冿紝鏃犳硶淇敼");
+//        }
+//        CalculateReportBackfillForm.RecordForm latestRecord = form.getRecordList().get(0);
+//        CalculateRecord beforeRecord = calculateRecordMapper.selectById(latestRecord.getId());
+//        if (Objects.isNull(beforeRecord)) {
+//            throw new RuntimeException("鏈�杩戜竴娆℃牳绠楄褰曚笉瀛樺湪");
+//        }
+//        // 璁$畻寰楀埌鎵f鎬婚锛堝彧绠楁渶杩戜竴鏉★級
+//        BigDecimal totalDeduct = report.getDeductMoney().subtract(latestRecord.getDeductMoney()).add(latestRecord.getDeductMoney());
+//        report.setDeductMoney(totalDeduct);
+//        baseMapper.updateById(report);
+//
+//        beforeRecord.setDeductMoney(latestRecord.getDeductMoney());
+//        calculateRecordMapper.updateById(beforeRecord);
+        List<CalculateReportBackfillForm.RecordForm> recordList = form.getRecordList();
+        if(!CollectionUtils.isEmpty(recordList)) calculateRecordMapper.updateBatch(recordList);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
     @Override
-    public Result updatePublishStatus(Long reportId) {
-        CalculateReport report = baseMapper.selectById(reportId);
-        if (Objects.isNull(report)) {
-            throw new RuntimeException("璇ユ牳绠楁姤鍛婁笉瀛樺湪");
-        }
-        if (CalculateReportStatusEnum.NOT_PUBLISH.equals(report.getStatus())) {
-            report.setStatus(CalculateReportStatusEnum.PUBLISHED);
-        } else if (CalculateReportStatusEnum.PUBLISHED.equals(report.getStatus())) {
-            report.setStatus(CalculateReportStatusEnum.NOT_PUBLISH);
-        }
-        baseMapper.updateById(report);
+    public Result updatePublishStatus(Integer contractId,Integer whichYear) {
+
+        calculateRecordMapper.batchPublish(contractId,whichYear);
+        return Result.ok("鎿嶄綔鎴愬姛");
+    }
+
+    @Override
+    public Result updatePublishStatusById(Integer id, String status) {
+        calculateRecordMapper.updatePublishById(id,status);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
     @Override
     @SneakyThrows
-    public void export(Integer contractId, HttpServletResponse response) {
+    public void export(Integer whichYear,Integer whichMonth,Integer contractId, HttpServletResponse response) {
         // 鑾峰彇鏁版嵁
-        List<CalculateExport> list = baseMapper.exportData(contractId);
+        List<CalculateExport> list = baseMapper.exportData(whichYear,whichMonth,contractId);
         CalculateExport calculateExport = new CalculateExport();
         calculateExport.setRuleName("鍚堣");
         calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum());
-        calculateExport.setScore(100 + list.stream().mapToInt(CalculateExport::getScore).sum());
+
+        calculateExport.setScore(list.stream()
+                .map(CalculateExport::getScore)
+                .reduce(BigDecimal.ZERO, BigDecimal::add) // 璁$畻鎬诲拰
+                .add(BigDecimal.valueOf(100)) // 鍔犱笂100
+                .setScale(1, RoundingMode.HALF_UP));
         list.add(calculateExport);
         // 鑾峰彇瑙勫垯
         List<CalculateRule> ruleList = calculateRuleService.list(new LambdaQueryWrapper<CalculateRule>().eq(CalculateRule::getContractId, contractId));
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 5db992f..57a706f 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
@@ -30,6 +30,7 @@
 import enumeration.general.PublishType;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -145,33 +146,35 @@
 
     /**
      * 鏌ヨ鑰冩牳绉垎鍗$墖鍒楄〃
-     *
+     * 杩欓噷鏄剧ず褰撳ぉ鐨勬垚缁╁鏋滄病鏈夊綋澶╂垚缁╁垯鏄剧ず鏈�鍚庝竴娆℃垚缁�
      * @param checkScore 鑰冩牳绉垎
      * @return 鑰冩牳绉垎
      */
     @Override
     @DataScope(deptAlias = "d", userAlias = "u")
-    public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore) {
+    public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore query) {
+        CheckScore checkScore = new CheckScore();
+        BeanUtils.copyProperties(query,checkScore);
         //鍖哄幙鍙兘鐪嬪凡鍙戝竷
         roleControl(checkScore);
 
-        // 鑾峰彇鏁版嵁鏃ユ湡鏃堕棿
-        Calendar calendar = Calendar.getInstance();
-        getCheckScore(checkScore, calendar);
+        // 杞崲鏁版嵁鏃ユ湡鏃堕棿銆佹爣绛�
+        getCheckScore(checkScore);
 
-        // 涓�鍙锋煡璇箣鍓嶇殑鏁版嵁
-        if (LocalDateTime.now().getDayOfMonth() == 1) {
-            calendar.add(Calendar.DAY_OF_MONTH, -1);
-        }
+//        // 涓�鍙锋煡璇箣鍓嶇殑鏁版嵁
+//        if (LocalDateTime.now().getDayOfMonth() == 1) {
+//            calendar.add(Calendar.DAY_OF_MONTH, -1);
+//        }
 
         List<CheckScore> checkScores = scoreMapper.selectCheckScoreMap(checkScore);
 
         // 濡傛灉鏁版嵁涓虹┖锛屽垯鏌ヨ涔嬪墠鐨勬暟鎹�
-        if (checkScores.isEmpty()) {
+        if (CollectionUtils.isEmpty(checkScores) && (query.getStartDate() ==null || query.getStartDate() ==null)) {
             CheckScore one = scoreMapper.getLast(checkScore);
             if (Objects.nonNull(one)) {
-                calendar.setTime(one.getCreateTime());
-                getCheckScore(checkScore, calendar);
+                checkScore.setStartDate(one.getCreateTime());
+                checkScore.setEndDate(one.getCreateTime());
+                getCheckScore(checkScore);
                 checkScores = scoreMapper.selectCheckScoreMap(checkScore);
             }
         }
@@ -180,31 +183,16 @@
         return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
     }
 
-    private void getCheckScore(CheckScore checkScore, Calendar calendar) {
-        // 0.鐪佸巺鏈堝害 1.鐪佸巺瀛e害 2.甯傚眬鏈堝害 3.甯傚眬瀛e害 4.鍏畨閮ㄦ湀搴� 5.鍏畨閮ㄥ搴�
-        switch (checkScore.getExamineTag()) {
-            case 0, 2, 4:
-                checkScore.setEndDate(calendar.getTime());
-                calendar.set(Calendar.DAY_OF_MONTH, 1);
-                checkScore.setStartDate(calendar.getTime());
-                if (checkScore.getExamineTag() == 0)
-                    checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province + ""));
-                if (checkScore.getExamineTag() == 2)
-                    checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County + ""));
-                if (checkScore.getExamineTag() == 4)
-                    checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept + ""));
-                break;
-            case 1, 3, 5:
-                checkScore.setStartDate(DateUtils.getQuarterStart(calendar).getTime());
-                checkScore.setEndDate(DateUtils.getQuarterEnd(calendar).getTime());
-                if (checkScore.getExamineTag() == 1)
-                    checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province + ""));
-                if (checkScore.getExamineTag() == 3)
-                    checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County + ""));
-                if (checkScore.getExamineTag() == 5)
-                    checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept + ""));
-                break;
-        }
+    private void getCheckScore(CheckScore checkScore) {
+        checkScore.setStartDate(DateUtils.getDayStart(checkScore.getStartDate()));
+        checkScore.setEndDate(DateUtils.getDayEnd(checkScore.getEndDate()));
+        // 0.鐪佸巺 1.甯傚眬 2.鍏畨閮�
+        if (checkScore.getExamineTag() == 0)
+            checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province + ""));
+        if (checkScore.getExamineTag() == 1)
+            checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County + ""));
+        if (checkScore.getExamineTag() == 2)
+            checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept + ""));
     }
 
     /**
@@ -522,7 +510,11 @@
 
     @Override
     public List<Map<String, Object>> home() {
-        return baseMapper.home();
+        Date now = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DATE, -7);
+        Date startTime = calendar.getTime();
+        return baseMapper.home(startTime,now);
     }
 
 
@@ -539,8 +531,9 @@
     @Override
     public Map<String, Map<String, Object>> dashboard(DashboardQuery dashboardQuery) {
         Date now = new Date();
-        dashboardQuery.setStartTime(DateUtils.getMouthStart(now));
-        dashboardQuery.setEndTime(DateUtils.getMouthEnd(now));
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        dashboardQuery.setStartTime(format.format(DateUtils.getDayStart(now)));
+        dashboardQuery.setEndTime(format.format(DateUtils.getDayEnd(now)));
         List<CheckScore> dashboard = scoreMapper.dashboard(dashboardQuery);
         //鍒濆鍖栧悇涓尯鍘挎暟鎹�
         Map<String, Map<String, Object>> resultMap = new HashMap<>();
@@ -553,7 +546,7 @@
         }
         //濉厖鍚勪釜鍖哄幙鏁版嵁
         for (CheckScore checkScore : dashboard) {
-            Map<String, Object> map = new HashMap<>();
+            Map<String, Object> map = resultMap.get(checkScore.getDeptName());
             if (CheckConstants.Rule_Category_Video.equals(checkScore.getExamineCategory())) {
                 map.put("video", checkScore.getScore().setScale(1, RoundingMode.HALF_UP));
             } else if (CheckConstants.Rule_Category_Car.equals(checkScore.getExamineCategory())) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckTemplateServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckTemplateServiceImpl.java
index bc3b335..1deba5d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckTemplateServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckTemplateServiceImpl.java
@@ -249,7 +249,7 @@
         job.setConcurrent("1");
         job.setStatus(checkTemplateDTO.getStatus());
         job.setJobGroup("CHECK");
-        job.setCronExpression("0 0 6 * * ?");
+        job.setCronExpression("0 0 8 * * ?");
         job.setJobName(checkTemplateDTO.getTemplateName());
         int i = jobService.insertJob(job);
         return job;
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractResultServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractResultServiceImpl.java
index 8843ace..80320a1 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractResultServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ContractResultServiceImpl.java
@@ -8,7 +8,11 @@
 import com.ycl.platform.mapper.ContractResultMapper;
 import com.ycl.platform.mapper.ContractResultRecordMapper;
 import com.ycl.platform.service.IContractResultService;
+import com.ycl.system.entity.BaseEntity;
+import com.ycl.system.entity.SysRole;
+import com.ycl.system.entity.SysUser;
 import com.ycl.utils.SecurityUtils;
+import enumeration.general.PublishType;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -16,6 +20,7 @@
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -52,7 +57,7 @@
     @Override
     public List<ContractResultVO> selectCheckResultList(ContractResultVO contractResult) {
         //閬垮厤鏌ヨ鏉′欢澶辨晥
-        if(contractResult.getUnitId()==null) {
+        if (contractResult.getUnitId() == null) {
             Integer unitId = SecurityUtils.getUnitId();
             Long uid = null;
             if (Objects.nonNull(unitId)) {
@@ -60,8 +65,22 @@
             }
             contractResult.setUnitId(uid);
         }
+        roleControl(contractResult);
         return checkResultMapper.selectCheckResultList(contractResult);
     }
+
+    private void roleControl(ContractResultVO contractResult) {
+        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+        if (!user.isAdmin()) {
+            for (SysRole role : roles) {
+                if (role.getPermissions().contains("check:contract:role:publish")) {
+                    contractResult.setPublish(1);
+                }
+            }
+        }
+    }
+
 
     /**
      * 鏂板鑰冩牳缁撴灉
@@ -122,9 +141,11 @@
 
     @Override
     public Boolean publish(Long id) {
+        ContractResult contractResult = checkResultMapper.selectById(id);
+
         return new LambdaUpdateChainWrapper<>(checkResultMapper)
                 .eq(ContractResult::getId, id)
-                .set(ContractResult::getPublish, 1)
+                .set(ContractResult::getPublish, contractResult.getPublish() == 0 ? 1 : 0)
                 .set(ContractResult::getPublishId, SecurityUtils.getLoginUser().getUserId())
                 .update();
     }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
index c676cab..dbf36b9 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -9,6 +9,7 @@
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
 import com.ycl.platform.domain.entity.*;
+import com.ycl.platform.domain.excel.TMonitorExp;
 import com.ycl.platform.domain.query.DataCenterQuery;
 import com.ycl.platform.domain.result.HK.*;
 import com.ycl.platform.domain.result.SYS.TMonitorResult;
@@ -26,9 +27,11 @@
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.MongoUtil;
 import com.ycl.utils.bean.BeanUtils;
+import com.ycl.utils.poi.ExcelUtil;
 import constant.ApiConstants;
 import constant.CheckConstants;
 import enumeration.general.AreaDeptEnum;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.collections.CollectionUtils;
 import org.bson.Document;
@@ -227,6 +230,7 @@
         // 娣诲姞鍥哄畾鏉′欢
         criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
         criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
+        criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
         // 鏍规嵁dataType鍔ㄦ�佹坊鍔犳潯浠�
         if (params.getDataType() == 1) {
             criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
@@ -1060,7 +1064,7 @@
         MongoUtil.setPage(query, params, "checkTime");
         List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
         for (OsdCheckResult osdCheckResult : resultList) {
-            OsdCheckResult.getText(osdCheckResult);
+            OsdCheckResult.getError(osdCheckResult);
         }
         // 缁熻鏁伴噺
         MongoDatabase database = mongoTemplate.getDb();
@@ -1147,6 +1151,66 @@
         return Result.ok().data(map).total(total);
     }
 
+    @Override
+    public void videoImportantPointLabelingAccuracyExport(HttpServletResponse response, DataCenterQuery params) {
+        List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
+        List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, "checkTime", likeFileds, null);
+        Query query = new Query();
+        Criteria and = new Criteria();
+        and.andOperator(andCriteria);
+        query = Query.query(and);
+        //涓嬫媺妗嗘爣娉ㄦ纭煡璇㈡潯浠�
+        if (params.getOption() != null) {
+            if(params.getOption()==1) {
+                andCriteria.add(Criteria.where("osdNameCorrect").is(1));
+                andCriteria.add(Criteria.where("osdTimeCorrect").is(1));
+                andCriteria.add(Criteria.where("osdProvinceCorrect").is(1));
+                andCriteria.add(Criteria.where("osdCityCorrect").is(1));
+                andCriteria.add(Criteria.where("osdPartCorrect").is(1));
+                Criteria and2 = new Criteria();
+                and2.andOperator(andCriteria);
+                query = Query.query(and2);
+            }else if(params.getOption()==-1){
+                // 浣跨敤$or鏉′欢杩炴帴澶氫釜瀛楁妫�鏌ワ紝姣忎釜瀛楁妫�鏌ユ槸鍚︾瓑浜�-1
+                Criteria c1 = Criteria.where("osdNameCorrect").is(-1);
+                Criteria c2 = Criteria.where("osdTimeCorrect").is(-1);
+                Criteria c3 = Criteria.where("osdProvinceCorrect").is(-1);
+                Criteria c4 = Criteria.where("osdCityCorrect").is(-1);
+                Criteria c5 = Criteria.where("osdPartCorrect").is(-1);
+                Criteria orOperator = new Criteria().orOperator(c1, c2, c3, c4, c5);
+                orOperator.andOperator(andCriteria);
+                query = Query.query(orOperator);
+            }else {
+                Criteria c1 = Criteria.where("osdNameCorrect").is(0);
+                Criteria c2 = Criteria.where("osdTimeCorrect").is(0);
+                Criteria c3 = Criteria.where("osdProvinceCorrect").is(0);
+                Criteria c4 = Criteria.where("osdCityCorrect").is(0);
+                Criteria c5 = Criteria.where("osdPartCorrect").is(0);
+                Criteria orOperator = new Criteria().orOperator(c1, c2, c3, c4, c5);
+                orOperator.andOperator(andCriteria);
+                query = Query.query(orOperator);
+            }
+        }
+        List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
+        for (OsdCheckResult osdCheckResult : resultList) {
+            OsdCheckResult.getError(osdCheckResult);
+            StringBuilder tag = new StringBuilder("" +
+                    (osdCheckResult.getProvinceTag() ? "鐪佸巺銆�" : "") +
+                    (osdCheckResult.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") +
+                    (osdCheckResult.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") +
+                    (osdCheckResult.getDeptTag() ? "閮ㄧ骇銆�" : ""));
+            // 鍒犻櫎瀛楃涓叉湯灏剧殑"銆�"
+            if (tag.toString().endsWith("銆�")) {
+                tag = new StringBuilder(tag.substring(0, tag.length() - 1));
+            }
+            osdCheckResult.setTagStr(tag.toString());
+        }
+        ExcelUtil<OsdCheckResult> util = new ExcelUtil<>(OsdCheckResult.class);
+        String sheetName = "OSD鏍囨敞";
+
+        util.exportExcel(response, resultList, sheetName);
+    }
+
     /**
      * 瑙嗛锛氭牎鏃舵纭巼
      *
@@ -1182,7 +1246,7 @@
     @Override
     public Result videoImportantPointCheckTimeAccuracy(DataCenterQuery params) {
         List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
-        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, 3);
+        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, null);
         //涓嬫媺妗嗘爣娉ㄦ纭煡璇㈡潯浠�
         if (params.getOption() != null) {
             if(params.getOption()==1) {
@@ -1199,7 +1263,7 @@
         List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
 
         for (OsdCheckResult osdCheckResult : resultList) {
-            OsdCheckResult.getText(osdCheckResult);
+            OsdCheckResult.getError(osdCheckResult);
         }
         // 缁熻鏁伴噺
         MongoDatabase database = mongoTemplate.getDb();
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
index b9df674..d367241 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
@@ -74,6 +74,8 @@
             throw new RuntimeException("闈炶繍缁村崟浣嶆殏鏃舵棤娉曟姤澶�");
         }
         form.setUnitId(unitId);
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        form.setPeopleId(Integer.parseInt(userId+""));
         if ("浜嬪墠鎶ュ".equals(form.getReportType())) {
             // 濡傛灉鏄簨鍓嶆姤澶囬渶瑕佹楠屾槸鍚﹀凡缁忕敓鎴愪笅鍙戝伐鍗�
             YwPointVO point = ywpointMapper.countNotFinishedWorkOrderByGb(form.getPointId());
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 f01b16e..a3d1960 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
@@ -4,6 +4,7 @@
 import com.alibaba.excel.read.listener.PageReadListener;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -33,14 +34,13 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -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);
@@ -155,6 +155,59 @@
         calculateMoneyRuleService.saveBatch(JSON.parseArray(tContract.getRuleList(), CalculateMoneyRule.class).stream().peek(
                 calculateMoneyRule -> calculateMoneyRule.setContractId(tContract.getId().intValue())
         ).collect(Collectors.toList()));
+
+
+        return AjaxResult.success("鎿嶄綔鎴愬姛");
+    }
+
+    @Override
+    public AjaxResult importRule(MultipartFile file, TContract tContract) throws IOException {
+
+        // 鑾峰彇鍚堝悓Excel瑙勫垯
+        List<CalculateRule> list = new ArrayList<>();
+        if(file!=null) {
+            EasyExcel.read(file.getInputStream(), CalculateRule.class, new PageReadListener<CalculateRule>(list::addAll)).sheet().doRead();
+
+            // 閬嶅巻鐖跺瓙鍏崇郴
+            List<CalculateRule> calculateRulesToSave = new ArrayList<>();
+            for (CalculateRule calculateRule : list) {
+                // 鍒ゆ柇鏁版嵁瀹屾暣鎬�
+                if (ObjectUtils.isEmpty(calculateRule.getDeductCategory())) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    return AjaxResult.warn("璇烽�夋嫨" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "鎵e垎鏂瑰紡");
+                }
+                if (RuleDeductCategoryEnum.MULTIPLY_POINTS_AFTER_DIVIDING_QUANTITY.equals(calculateRule.getDeductCategory()) && ObjectUtils.isEmpty(calculateRule.getCalcUnit())) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    return AjaxResult.warn("璇峰~鍐�" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "闄や互鏁伴噺");
+                }
+                if (ObjectUtils.isEmpty(calculateRule.getCalcFraction())) {
+                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                    return AjaxResult.warn("璇峰~鍐�" + calculateRule.getRuleName() + calculateRule.getRuleCondition() + "鎵e垎鏁板��");
+                }
+                // 淇濆瓨瑙勫垯
+                if (StringUtils.isNotBlank(calculateRule.getRuleName())) {
+                    calculateRule.setContractId(tContract.getId().intValue());
+                    calculateRule.setCreateTime(DateUtils.getNowDate());
+                    calculateRule.setUpdateTime(DateUtils.getNowDate());
+                    calculateRulesToSave.add(calculateRule);
+                }
+            }
+            if (!CollectionUtils.isEmpty(calculateRulesToSave)) {
+                //鍒犻櫎鍘熻鍒�
+                calculateRuleService.remove(new QueryWrapper<CalculateRule>().eq("contract_id", tContract.getId()));
+                // 鎵归噺淇濆瓨瑙勫垯
+                calculateRuleService.saveBatch(calculateRulesToSave);
+            }
+        }
+        List<CalculateMoneyRule> moneyRule = JSON.parseArray(tContract.getRuleList(), CalculateMoneyRule.class).stream().peek(
+                calculateMoneyRule -> calculateMoneyRule.setContractId(tContract.getId().intValue())
+        ).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(moneyRule)) {
+            //鍒犻櫎鍘熻鍒�
+            calculateMoneyRuleService.remove(new QueryWrapper<CalculateMoneyRule>().eq("contract_id",tContract.getId()));
+            //鎵归噺淇濆瓨鑰冩牳缁撴灉搴旂敤瑙勫垯
+            calculateMoneyRuleService.saveBatch(moneyRule);
+        }
         return AjaxResult.success("鎿嶄綔鎴愬姛");
     }
 
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 d353ed2..3cc7abe 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;
@@ -32,6 +33,7 @@
 import com.ycl.platform.mapper.DynamicColumnMapper;
 import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.mapper.WorkOrderMapper;
+import com.ycl.platform.mapper.YwPointMapper;
 import com.ycl.platform.service.ITMonitorService;
 import com.ycl.system.Result;
 import com.ycl.system.entity.SysDictData;
@@ -54,7 +56,9 @@
 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.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import pojo.ExcelExp;
 import utils.poi.ExcelUtilManySheet;
@@ -72,6 +76,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;
 
 /**
@@ -85,6 +92,8 @@
     @Autowired
     private TMonitorMapper tMonitorMapper;
     @Autowired
+    private YwPointMapper pointMapper;
+    @Autowired
     private ISysConfigService configService;
     @Autowired
     private MongoTemplate mongoTemplate;
@@ -94,6 +103,8 @@
     private SysDictDataMapper dictDataMapper;
     @Autowired
     private DynamicColumnMapper dynamicColumnMapper;
+    @Autowired
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 
     /**
      * 鏌ヨ璁惧璧勪骇
@@ -352,8 +363,16 @@
         return tMonitorMapper.recoveryException(monitor);
     }
 
+    /**
+     * 鏌ongo鏌ユ煇涓湀璁惧鎬绘暟
+     * 鏌ョ湅宸ュ崟鏁伴噺鏌ョ湅寮傚父鐨勬暟
+     *
+     * @param monitorQuery 鏌ヨ鏉′欢
+     * @return
+     */
     @Override
     public Map<String, Object> home(HomeQuery monitorQuery) {
+
         Map<String, Object> dataMap = new HashMap<>();
         Map<String, Object> monthMap1 = new HashMap<>();
         Map<String, Object> monthMap2 = new HashMap<>();
@@ -425,75 +444,110 @@
             }
             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(() -> {
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                //绛涢�夐儴闂ㄦ暟鎹�
+                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());
+                Map<LocalDate, List<TMonitorResult>> onlineMap = onlineList.stream()
+                        .collect(Collectors.groupingBy(TMonitorResult::getMongoCreateTime));
+                List<RecordMetaDSumResult> recordList = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList());
+                Map<Date, List<RecordMetaDSumResult>> recordMap = recordList.stream().collect(Collectors.groupingBy(RecordMetaDSumResult::getStatTime));
+                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);
+                    try {
+                        Date parseDate = simpleDateFormat.parse(date);
+                        //鑾峰彇鏄熸湡鍑�
+                        String week = weeks[parseTime.getDayOfWeek().getValue() - 1];
+                        VideoTotalExp videoExp = new VideoTotalExp();
+                        videoExp.setDate(date);
+                        videoExp.setWeek(week);
+                        //璁剧疆鐐逛綅鍦ㄧ嚎鎬婚噺
+                        List<TMonitorResult> onlines = onlineMap.get(parseTime);
+                        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 = recordMap.get(parseDate);
+                        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);
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
                 }
-                //璁剧疆瀛樺偍鎯呭喌
-                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());
@@ -518,10 +572,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);
@@ -533,47 +599,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);
@@ -594,10 +686,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);
@@ -609,7 +713,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());
         // 鑾峰彇褰撴湀鐨勭涓�澶�
@@ -618,48 +722,75 @@
         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);
@@ -679,10 +810,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);
@@ -703,46 +842,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);
@@ -780,7 +945,7 @@
         MongoDatabase database = mongoTemplate.getDb();
         MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum");
         Integer examineTag = monitorQuery.getExamineTag();
-        Document matchConditions = new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate));
+        Document matchConditions = new Document("statTime", new Document("$gte", startDate).append("$lte", endDate));
         // 鏍规嵁examineTag鐨勫�煎姩鎬佹坊鍔犻澶栫殑鏉′欢
         if (examineTag != null && examineTag.equals(1)) {
             matchConditions.append("provinceTag", true);
@@ -790,7 +955,7 @@
         // 鏋勫缓鑱氬悎绠¢亾
         List<Document> pipeline = Arrays.asList(
                 new Document("$match", matchConditions),
-                new Document("$group", new Document("_id", "$mongoCreateTime")
+                new Document("$group", new Document("_id", "$statTime")
                         .append("normalCount", new Document("$sum",
                                 new Document("$cond", Arrays.asList(
                                         new Document("$eq", Arrays.asList("$recordStatus", 1)),
@@ -897,7 +1062,7 @@
                 String type = car.replaceAll("3", "浜鸿劯");
                 monitor.setCameraFunType(type);
             }
-            StringBuilder tag = new StringBuilder("" + (monitor.getProvinceTag() ? "鐪佸巺銆�" : "") + (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();
@@ -913,14 +1078,32 @@
         });
         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);
+    }
+
+    /**
+     * 娓呯悊涓�鏈轰竴妗�
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result clearMonitor() {
+      tMonitorMapper.clearMonitor();
+      pointMapper.clearMonitor();
+      return Result.ok();
+    }
+
+    @Override
+    public Result assetManagementCount(DataCenterQuery query) {
+        Map<String, String> map =tMonitorMapper.assetManagementCount();
+        return Result.ok().data(map);
     }
 
 
@@ -976,7 +1159,6 @@
             results.add(homecarVO);
         }
 
-        //TODO锛氬湪绾夸慨鏀癸紝闇�瑕佹妸妫�娴嬫捣搴蜂紭浜戞娴嬬殑缁撴灉瀛樺叆mongo锛宮ongo鏌ョ偣浣嶅湪绾�
         MongoCollection<Document> onlineCollection = database.getCollection("t_monitor_online");
         // 鏋勫缓鍩烘湰鐨�$match鏉′欢
         List<Document> onlineMatch = new ArrayList<>();
@@ -1007,30 +1189,33 @@
         Map<String, Object> resultMap = new HashMap<>();
         //鎸夋椂闂存帓搴�
         results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList());
-        int snapCount = 0;
-        for (HomeCarVO vo : results) {
-            if (vo.getSnapCount() != null) {
-                snapCount += vo.getSnapCount();
+        //濡傛灉鏄粯璁ゆ垨绱拰鍒欒繘琛岀疮鍜屼互鍙婅幏鍙栧熀鍑嗙嚎
+        if (monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
+            int snapCount = 0;
+            for (HomeCarVO vo : results) {
+                if (vo.getSnapCount() != null) {
+                    snapCount += vo.getSnapCount();
+                }
+                vo.setSnapCount(snapCount);
             }
-            vo.setSnapCount(snapCount);
+            //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎
+            List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
+            String condition;
+            if (examineTag != null && examineTag == 1) {
+                condition = "car_province_baseLine";
+            } else if (examineTag != null && examineTag == 2) {
+                condition = "car_dept_baseLine";
+            } else {
+                condition = "car_all_baseLine";
+            }
+
+            Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
+            if (first.isPresent()) {
+                SysDictData sysDictData = first.get();
+                resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
+            }
         }
         resultMap.put("list", results);
-        //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎
-        List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
-        String condition;
-        if (examineTag != null && examineTag == 1) {
-            condition = "car_province_baseLine";
-        } else if (examineTag != null && examineTag == 2) {
-            condition = "car_dept_baseLine";
-        } else {
-            condition = "car_all_baseLine";
-        }
-
-        Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
-        if (first.isPresent()) {
-            SysDictData sysDictData = first.get();
-            resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
-        }
         return resultMap;
     }
 
@@ -1115,32 +1300,35 @@
             HomeFaceVO vo = findOrCreateVO(doc, results, HomeFaceVO.class);
             vo.setOnline(doc.getInteger("onlineCount"));
         }
+        Map<String, Object> resultMap = new HashMap<>();
         //鎸夋椂闂存帓搴�
         results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList());
-        int snapCount = 0;
-        for (HomeFaceVO vo : results) {
-            if (vo.getSnapCount() != null) {
-                snapCount += vo.getSnapCount();
+        //濡傛灉鏄粯璁ゆ垨绱拰鍒欒繘琛岀疮鍜屼互鍙婅幏鍙栧熀鍑嗙嚎
+        if (monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) {
+            int snapCount = 0;
+            for (HomeFaceVO vo : results) {
+                if (vo.getSnapCount() != null) {
+                    snapCount += vo.getSnapCount();
+                }
+                vo.setSnapCount(snapCount);
             }
-            vo.setSnapCount(snapCount);
+            //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎
+            List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
+            String condition;
+            if (examineTag != null && examineTag == 1) {
+                condition = "face_province_baseLine";
+            } else if (examineTag != null && examineTag == 2) {
+                condition = "face_dept_baseLine";
+            } else {
+                condition = "face_all_baseLine";
+            }
+            Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
+            if (first.isPresent()) {
+                SysDictData sysDictData = first.get();
+                resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
+            }
         }
-        Map<String, Object> resultMap = new HashMap<>();
         resultMap.put("list", results);
-        //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎
-        List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine");
-        String condition;
-        if (examineTag != null && examineTag == 1) {
-            condition = "face_province_baseLine";
-        } else if (examineTag != null && examineTag == 2) {
-            condition = "face_dept_baseLine";
-        } else {
-            condition = "face_all_baseLine";
-        }
-        Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst();
-        if (first.isPresent()) {
-            SysDictData sysDictData = first.get();
-            resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue()));
-        }
         return resultMap;
     }
 
@@ -1158,7 +1346,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);
         // 鑾峰彇褰撴湀鐨勭涓�澶�
@@ -1168,7 +1357,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;
     }
 
@@ -1194,9 +1391,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();
@@ -1216,9 +1411,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/platform/service/impl/UYErrorTypeCheckServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
index 4ff8e9e..b52a9a4 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
@@ -1,15 +1,25 @@
 package com.ycl.platform.service.impl;
 
+import com.ycl.platform.controller.YwThresholdController;
 import com.ycl.platform.domain.entity.WorkOrder;
+import com.ycl.platform.domain.entity.YwThreshold;
+import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
 import com.ycl.platform.domain.result.UY.*;
+import com.ycl.platform.mapper.WorkOrderMapper;
+import com.ycl.platform.service.IYwThresholdService;
 import com.ycl.platform.service.UYErrorTypeCheckService;
 import com.ycl.platform.service.WorkOrderService;
+import com.ycl.utils.DateUtils;
 import com.ycl.utils.uuid.IdUtils;
 import constant.ApiConstants;
+import constant.YwThreadConstants;
+import enumeration.CompareType;
 import enumeration.ErrorType;
+import enumeration.general.BusinessTypeEnum;
 import enumeration.general.WorkOrderStatusEnum;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
@@ -17,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -28,6 +39,8 @@
 public class UYErrorTypeCheckServiceImpl implements UYErrorTypeCheckService {
 
     private final WorkOrderService workOrderService;
+    private final IYwThresholdService ywThresholdService;
+    private final WorkOrderMapper workOrderMapper;
 
     /**
      * 鍥惧儚妫�娴嬬敓鎴愬伐鍗�
@@ -37,40 +50,40 @@
     @Override
     public void imageDetectionCheck(List<ImageDetectionResult> dataList) {
         List<WorkOrder> workOrderList = dataList.stream().filter(item -> -1 == item.getSignal()
-                || -1 == item.getImage()
-        )
-        .map(item -> {
-            WorkOrder workOrder = new WorkOrder();
-            // 淇″彿缂哄け
-            if (-1 == item.getSigna1() ) {
-                this.genWorkOrder(workOrder, ErrorType.SIGNAL_LOSS, item.getDeviceId());
-            }
-            // 鐢婚潰鍋忚壊
-            if (-1 == item.getColor()) {
-                this.genWorkOrder(workOrder, ErrorType.SCREEN_COLOR_DEVIATION, item.getDeviceId());
-            }
-            // 闆姳骞叉壈
-            if (-1 == item.getSnow()) {
-                this.genWorkOrder(workOrder, ErrorType.SNOW_STORM, item.getDeviceId());
-            }
-            // 鏉$汗骞叉壈
-            if (-1 == item.getStripe()) {
-                this.genWorkOrder(workOrder, ErrorType.STRIPE_INTERFERENCE, item.getDeviceId());
-            }
-            // 鐢婚潰閬尅
-            if (-1 == item.getShade()) {
-                this.genWorkOrder(workOrder, ErrorType.SCREEN_OCCLUSION, item.getDeviceId());
-            }
-            // 娓呮櫚搴﹀紓甯�
-            if (-1 == item.getBlur()) {
-                this.genWorkOrder(workOrder, ErrorType.ABNORMAL_CLARITY, item.getDeviceId());
-            }
+                        || -1 == item.getImage()
+                )
+                .map(item -> {
+                    WorkOrder workOrder = new WorkOrder();
+                    // 淇″彿缂哄け
+                    if (-1 == item.getSigna1()) {
+                        this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
+                    }
+                    // 鐢婚潰鍋忚壊
+                    if (-1 == item.getColor()) {
+                        this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
+                    }
+                    // 闆姳骞叉壈
+                    if (-1 == item.getSnow()) {
+                        this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
+                    }
+                    // 鏉$汗骞叉壈
+                    if (-1 == item.getStripe()) {
+                        this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
+                    }
+                    // 鐢婚潰閬尅
+                    if (-1 == item.getShade()) {
+                        this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
+                    }
+                    // 娓呮櫚搴﹀紓甯�
+                    if (-1 == item.getBlur()) {
+                        this.genWorkOrder(workOrder, ErrorType.ABNORMAL_PIC, item.getDeviceId());
+                    }
 //            // 浜害寮傚父
 //            if (-1 == item.getLight()) {
 //                this.genWorkOrder(workOrder, ErrorType.ABNORMAL_BRIGHTNESS, item.getDeviceId());
 //            }
-            return workOrder;
-        }).collect(Collectors.toList());
+                    return workOrder;
+                }).collect(Collectors.toList());
         workOrderService.innerAddWorkOrder(workOrderList);
     }
 
@@ -83,18 +96,22 @@
     public void monitorQualifyCheck(List<MonitorQualifyResult> dataList) {
         List<WorkOrder> workOrderList = dataList.stream().map(item -> {
             WorkOrder workOrder = new WorkOrder();
-            if (item.getSerialNumber().getError()
-                    || item.getCivilCode().getError()
-                    || item.getIntegrated_device().getError()
-                    || item.getIp().getError()
-                    || item.getJkdwlx().getError()
-                    || item.getLatitude().getError()
-                    || item.getLongitude().getError()
-                    || item.getMacdz().getError()
-                    || item.getSbzt().getError()
-                    || item.getName().getError()
-                    || item.getSxjcjqy().getError()
-                    || item.getSxjgnlx().getError()) {
+            //TODO:寰呬紭浜戜慨澶嶏紝閬垮厤宸ュ崟
+            MonitorQualifyResult.QualifyResult qualifyResult = new MonitorQualifyResult.QualifyResult();
+            qualifyResult.setError(false);
+            item.setIntegrated_device(qualifyResult);
+            if (item.getSerialNumber() == null || item.getSerialNumber().getError() ||
+                    item.getCivilCode() == null || item.getCivilCode().getError() ||
+                    item.getIntegrated_device() == null || item.getIntegrated_device().getError() ||
+                    item.getIp() == null || item.getIp().getError() ||
+                    item.getJkdwlx() == null || item.getJkdwlx().getError() ||
+                    item.getLatitude() == null || item.getLatitude().getError() ||
+                    item.getLongitude() == null || item.getLongitude().getError() ||
+                    item.getMacdz() == null || item.getMacdz().getError() ||
+                    item.getSbzt() == null || item.getSbzt().getError() ||
+                    item.getName() == null || item.getName().getError() ||
+                    item.getSxjcjqy() == null || item.getSxjcjqy().getError() ||
+                    item.getSxjgnlx() == null || item.getSxjgnlx().getError()) {
                 this.genWorkOrder(workOrder, ErrorType.POINT_INFO_ERROR, item.getSerialNumber().getValue());
             }
             return workOrder;
@@ -104,16 +121,31 @@
 
     @Override
     public void videoOnlineCheck(List<VideoOnlineResult> dataList) {
-        List<WorkOrder> workOrderList = dataList.stream().map(item -> {
-            WorkOrder workOrder = new WorkOrder();
-            if (ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus()) ) {
-                this.genWorkOrder(workOrder, ErrorType.DEVICE_OFFLINE, item.getDeviceId());
-            }
-//            else if (0 == item.getStatus()) {
-//                this.genWorkOrder(workOrder, ErrorType.UNKNOWN, item.getDeviceId());
-//            }
-            return workOrder;
-        }).collect(Collectors.toList());
+        //鏌ヨ鏁版嵁搴撳凡瀛樺湪鐨勭绾垮伐鍗曡幏鍙杋p闆嗗悎锛屽墧闄�
+        List<String> ips = workOrderMapper.getOfflineWorkOrder();
+        List<WorkOrder> workOrderList = dataList.stream()
+                .filter(item -> CollectionUtils.isEmpty(ips) || !ips.contains(item.getIpAddr()))
+                .map(item -> {
+                    WorkOrder workOrder = new WorkOrder();
+                    if (ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus())) {
+                        this.genWorkOrder(workOrder, ErrorType.DEVICE_OFFLINE, item.getDeviceId());
+                    }
+                    return workOrder;
+                }).collect(Collectors.toList());
+        workOrderService.innerAddWorkOrder(workOrderList);
+    }
+
+    @Override
+    public void hkOnlineCheck(List<SnapshotDataMonitorResult> dataList) {
+        //鏌ヨ鏁版嵁搴撳凡瀛樺湪鐨勭绾垮伐鍗曡幏鍙杋p闆嗗悎锛屽墧闄�
+        List<String> ips = workOrderMapper.getOfflineWorkOrder();
+        List<WorkOrder> workOrderList = dataList.stream()
+                .filter(item -> CollectionUtils.isEmpty(ips) || !ips.contains(item.getIp()))
+                .map(item -> {
+                    WorkOrder workOrder = new WorkOrder();
+                    this.genWorkOrder(workOrder, ErrorType.DEVICE_OFFLINE, item.getExternalIndexCode());
+                    return workOrder;
+                }).collect(Collectors.toList());
         workOrderService.innerAddWorkOrder(workOrderList);
     }
 
@@ -134,13 +166,9 @@
 
     @Override
     public void osdCheck(List<OsdCheckResult> dataList) {
-        Date now = new Date();
+        Map<String, YwThreshold> ywThresholdMap = ywThresholdService.getYwThresholdMap(BusinessTypeEnum.VIDEO.name());
         List<WorkOrder> workOrderList = dataList.stream().map(item -> {
             WorkOrder workOrder = new WorkOrder();
-            // osd鏃堕棿
-            if (!ApiConstants.OSD_Correct.equals(item.getOsdTimeCorrect())) {
-                this.genWorkOrder(workOrder, ErrorType.CLOCK_SKEW, item.getDeviceNo());
-            }
             // osd淇℃伅
             if (!ApiConstants.OSD_Correct.equals(item.getOsdProvinceCorrect())
                     || (!ApiConstants.OSD_Correct.equals(item.getOsdCityCorrect()))
@@ -149,6 +177,14 @@
             ) {
                 this.genWorkOrder(workOrder, ErrorType.OSD_ERROR, item.getDeviceNo());
             }
+            // osd鏃堕棿  鏃堕棿闇�瑕佽蛋闃堝�兼鏌� 杩欓噷闇�瑕佹妸鏃堕棿鏀惧湪鍚庨潰锛氬鏋滄椂闂村浜庡緟涓嬪彂鐨勯槇鍊奸偅涔堝伐鍗曠姸鎬佷細鏀逛负寰呬笅鍙戠殑宸ュ崟
+//            if (!ApiConstants.OSD_Correct.equals(item.getOsdTimeCorrect())) {
+//                this.genWorkOrder(workOrder, ErrorType.CLOCK_SKEW, item.getDeviceNo());
+//            }
+            long checkTime = item.getCheckTime().getTime();
+            long osdTime = item.getSetTime().getTime();
+            Long timeDiff = Math.abs((checkTime - osdTime) / 1000);
+            ywThresholdService.check(YwThreadConstants.Video_DiffTime, timeDiff, item.getDeviceNo(), ywThresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.CLOCK_SKEW.getValue());
             return workOrder;
         }).collect(Collectors.toList());
         workOrderService.innerAddWorkOrder(workOrderList);
@@ -158,7 +194,7 @@
      * 宸ュ崟淇℃伅
      *
      * @param workOrder
-     * @param errorType 鏁呴殰绫诲瀷
+     * @param errorType    鏁呴殰绫诲瀷
      * @param serialNumber 鍥芥爣鐮�
      */
     private void genWorkOrder(WorkOrder workOrder, ErrorType errorType, String serialNumber) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index dd618ac..c8aaf89 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -13,6 +13,7 @@
 import com.ycl.platform.domain.entity.*;
 import com.ycl.platform.domain.form.*;
 import com.ycl.platform.domain.query.*;
+import com.ycl.platform.domain.result.SYS.TMonitorResult;
 import com.ycl.platform.domain.vo.*;
 import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO;
 import com.ycl.platform.domain.vo.screen.WorkOrderRegionVO;
@@ -78,6 +79,9 @@
 public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService {
 
     private final YwPointService ywPointService;
+    private final YwPointMapper ywPointMapper;
+    private final TMonitorMapper monitorMapper;
+    private final DynamicColumnMapper dynamicColumnMapper;
     private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper;
     private final WorkOrderAuditingRecordService workOrderAuditingRecordService;
     private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper;
@@ -211,7 +215,7 @@
         List<String> willAddSerialNumber = waitAddList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
         //鍙敓鎴愯�冩牳璁惧銆佷笖鏈夎繍缁村崟浣嶇殑宸ュ崟
         List<YwPoint> pointList = new LambdaQueryChainWrapper<>(ywPointService.getBaseMapper())
-                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getProvinceTag, YwPoint::getImportantCommandImageTag)
+                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getImportantCommandImageTag)
                 .in(YwPoint::getSerialNumber, willAddSerialNumber)
                 .eq(YwPoint::getExamineStatus, Boolean.TRUE)
                 .isNotNull(YwPoint::getUnitId)
@@ -345,15 +349,15 @@
         List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48);
         // 鍗冲皢瑕佹坊鍔犵殑閿欒绫诲瀷
         List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96);
-        if(!CollectionUtils.isEmpty(inDatabaseWorkOrderList)){
+        if (!CollectionUtils.isEmpty(inDatabaseWorkOrderList)) {
             WorkOrder workOrderInDB = inDatabaseWorkOrderList.get(0);
             List<String> errorNameList = workOrderInDB.getErrorTypeList();
             List<String> errorTypes = entity.getErrorTypeList();
-            if(errorNameList.containsAll(errorTypes)){
+            if (errorNameList.containsAll(errorTypes)) {
                 return Result.error("宸叉湁鍚岀鏁呴殰绫诲瀷宸ュ崟");
-            }else {
+            } else {
                 for (String errorType : errorTypes) {
-                    if(!errorNameList.contains(errorType)){
+                    if (!errorNameList.contains(errorType)) {
                         // 閿欒绫诲瀷涓嶄竴鏍凤紝灏辨柊澧炰竴涓敊璇被鍨嬶紝骞朵笖閲嶇疆宸ュ崟鐘舵�佷负寰呭鐞�
                         WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
                         workOrderErrorType.setWorkOrderNo(workOrderInDB.getWorkOrderNo());
@@ -391,7 +395,7 @@
                 }
             }
             return Result.ok("娣诲姞鎴愬姛");
-        }else {
+        } else {
             //鏁版嵁搴撴病鏈夋鍦ㄨ繘琛岀殑宸ュ崟
             //鏌edis浠婃棩宸ュ崟鏁伴噺
             int workOrderNum = 0;
@@ -418,7 +422,7 @@
             workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
             if (baseMapper.insert(entity) > 0) {
                 return Result.ok("娣诲姞鎴愬姛");
-            }else {
+            } else {
                 return Result.error("娣诲姞澶辫触");
             }
         }
@@ -467,10 +471,21 @@
                 UrgentLevelEnum.WARNING,
                 workOrder.getWorkOrderNo());
         notifyService.save(notify);
+        List<String> errorList = workOrderErrorTypeMapper.getErrorList(workOrder.getWorkOrderNo())
+                .stream().map(SysDictData::getDictValue).collect(Collectors.toList());
         // 鍚屾鐐逛綅鐘舵��
         if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
             ywPointService.updateRecovery(Collections.singletonList(workOrder.getSerialNumber()), 0);
+            //濡傛灉宸ュ崟涓虹绾垮伐鍗曢偅涔堜慨鏀圭偣浣峱ingOnline涓哄湪绾�
+            if(!CollectionUtils.isEmpty(errorList) && errorList.contains(ErrorType.DEVICE_OFFLINE.getValue())){
+                new LambdaUpdateChainWrapper<>(ywPointMapper)
+                        .eq(YwPoint::getSerialNumber, workOrder.getSerialNumber())
+                        .set(YwPoint::getUpdateTime, new Date())
+                        .set(YwPoint::getPingOnline, 1)
+                        .update();
+            }
         }
+
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
@@ -657,6 +672,20 @@
         }
         if (query.getStart() != null) query.setStart(DateUtils.getDayStart(query.getStart()));
         if (query.getEnd() != null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
+        if (query.getErrorType() != null) {
+            List<String> errorTypeList = new ArrayList<>();
+            errorTypeList.add(query.getErrorType());
+            if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) {
+                //List娣诲姞涔嬪墠鍑犵宸ュ崟绫诲瀷
+                errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue());
+                errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue());
+                errorTypeList.add(ErrorType.SNOW_STORM.getValue());
+                errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue());
+                errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue());
+                errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue());
+            }
+            query.setErrorTypeList(errorTypeList);
+        }
         baseMapper.page(page, query);
         if (!CollectionUtils.isEmpty(page.getRecords())) {
             page.getRecords().stream().forEach(item -> {
@@ -1113,6 +1142,13 @@
         return Result.ok().data(workOrder);
     }
 
+    /**
+     * 宸ュ崟瀵煎嚭鐨勯�昏緫
+     * 鏍囩锛氬悓涓�涓猧p鏍囩鍚堝湪涓�璧凤紝閽堝绂荤嚎宸ュ崟锛坕p鐩稿悓灏变笉浼氱敓鎴愬伐鍗曪級锛屾柟渚胯繍缁村鐞�
+     *
+     * @param query
+     * @return
+     */
     @Override
     public List<WorkOrderVO> export(WorkOrderExportQuery query) {
         if (query.getUnitId() == null) {
@@ -1120,8 +1156,81 @@
         }
         if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00");
         if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59");
-
-        return baseMapper.export(query);
+        if (query.getErrorType() != null) {
+            List<String> errorTypeList = new ArrayList<>();
+            errorTypeList.add(query.getErrorType());
+            if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) {
+                //List娣诲姞涔嬪墠鍑犵宸ュ崟绫诲瀷
+                errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue());
+                errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue());
+                errorTypeList.add(ErrorType.SNOW_STORM.getValue());
+                errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue());
+                errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue());
+                errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue());
+            }
+            query.setErrorTypeList(errorTypeList);
+        }
+        List<WorkOrderVO> export = baseMapper.export(query);
+        if (CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>();
+        List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList());
+        //鏌ュ嚭鐩稿悓ip鐨勮澶囥�佸苟鏌ュ嚭鏍囩
+        List<TMonitorResult> monitorVOS = monitorMapper.getByIp(ips);
+        //鑾峰彇鍔ㄦ�佸垪鏁版嵁
+        List<Integer> pointIds = monitorVOS.stream().map(TMonitorResult::getPointId).collect(Collectors.toList());
+        List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds);
+        //琛ュ厖鍔ㄦ�佸垪鏁版嵁
+        if (!CollectionUtils.isEmpty(dynamics)) {
+            Map<Integer, List<DynamicColumnVO>> map = dynamics.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefId));
+            for (TMonitorResult tMonitorResult : monitorVOS) {
+                Integer pointId = tMonitorResult.getPointId();
+                tMonitorResult.setDynamicColumnList(map.get(pointId));
+            }
+        }
+        export.forEach(result -> {
+            StringBuilder dynamicTag = new StringBuilder("");
+            Boolean provinceTagVideo = false;
+            Boolean provinceTagCar = false;
+            Boolean provinceTagFace = false;
+            Boolean importantTag = false;
+            Boolean importantCommandImageTag = false;
+            Boolean deptTag = false;
+            List<String> dynamicTags = new ArrayList<>();
+            for (TMonitorResult tagVO : monitorVOS) {
+                //鐪佸巺鏍囩閫氳繃ip鍒ゆ柇 (杩愮淮瑕佹眰)
+                if (tagVO.getIp().equals(result.getIp())) {
+                    if (tagVO.getProvinceTagVideo()) provinceTagVideo = true;
+                    if (tagVO.getProvinceTagCar()) provinceTagCar = true;
+                    if (tagVO.getProvinceTagFace()) provinceTagFace = true;
+                    if (tagVO.getImportantTag()) importantTag = true;
+                    if (tagVO.getImportantCommandImageTag()) importantCommandImageTag = true;
+                    if (tagVO.getDeptTag()) deptTag = true;
+                }
+                //鍔ㄦ�佸垪鏍规嵁鍥芥爣鍒ゆ柇
+                if (tagVO.getNo().equals(result.getSerialNumber())) {
+                    //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲�
+                    if (!CollectionUtils.isEmpty(tagVO.getDynamicColumnList())) {
+                        List<DynamicColumnVO> dynamicColumnList = tagVO.getDynamicColumnList();
+                        for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) {
+                            if (!dynamicTags.contains(dynamicColumnVO.getColumnValue()))
+                                dynamicTags.add(dynamicColumnVO.getColumnValue());
+                        }
+                    }
+                }
+            }
+            for (String tag : dynamicTags) {
+                dynamicTag.append(tag).append("銆�");
+            }
+            StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "鐪佸巺瑙嗛銆�" : "") + (provinceTagCar ? "鐪佸巺杞﹁締銆�" : "") + (provinceTagFace ? "鐪佸巺浜鸿劯銆�" : "") + (importantTag ? "閲嶇偣鐐逛綅銆�" : "") + (importantCommandImageTag ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (deptTag ? "閮ㄧ骇銆�" : ""));
+            if (tag.toString().endsWith("銆�")) {
+                tag = new StringBuilder(tag.substring(0, tag.length() - 1));
+            }
+            if (dynamicTag.toString().endsWith("銆�")) {
+                dynamicTag = new StringBuilder(dynamicTag.substring(0, dynamicTag.length() - 1));
+            }
+            result.setTag(tag.toString());
+            result.setDynamicTag(dynamicTag.toString());
+        });
+        return export;
     }
 
     /**
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
index dc82f15..f5adcac 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
@@ -35,6 +35,7 @@
 import com.ycl.utils.SecurityUtils;
 import com.ycl.utils.poi.EasyExcelImportUtils;
 import com.ycl.utils.uuid.IdUtils;
+import constant.CheckConstants;
 import constant.PointHeaderConstant;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
@@ -200,7 +201,11 @@
         Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
         YwPointVO vo = YwPointVO.getVoByEntity(entity, null);
         if (Objects.nonNull(entity.getDeptId())) {
-            vo.setDeptIds(sysDeptMapper.selectParents(entity.getDeptId()));
+            //TODO:鏂规硶寰呭畬鍠� 绠�鍗曞鐞�
+            List<Long> deptIds = sysDeptMapper.selectParents(entity.getDeptId());
+            deptIds.remove(deptIds.size()-1);
+            deptIds.add(entity.getDeptId());
+            vo.setDeptIds(deptIds);
         }
         return Result.ok().data(vo);
     }
@@ -260,7 +265,7 @@
         if (!CollectionUtils.isEmpty(dynamics)) {
             dynamicMap = dynamics.stream().filter(vo -> vo.getRefId() != null).collect(Collectors.groupingBy(DynamicColumnVO::getRefId));
         }
-        //瀹氫箟琛ㄥご鍒楄〃
+        //瀹氫箟鍥哄畾琛ㄥご鍒楄〃
         LinkedHashSet<String> headers = new LinkedHashSet<>();
         headers.add(PointHeaderConstant.ID);
         headers.add(PointHeaderConstant.Point_Name);
@@ -268,9 +273,13 @@
         headers.add(PointHeaderConstant.IP);
         headers.add(PointHeaderConstant.Area);
         headers.add(PointHeaderConstant.Unit);
-        headers.add(PointHeaderConstant.Province_Tag);
+        headers.add(PointHeaderConstant.Province_Tag_Video);
+        headers.add(PointHeaderConstant.Province_Tag_Car);
+        headers.add(PointHeaderConstant.Province_Tag_Face);
         headers.add(PointHeaderConstant.Impotrant_Command_Image);
         headers.add(PointHeaderConstant.Dept_Tag);
+        headers.add(PointHeaderConstant.Username);
+        headers.add(PointHeaderConstant.Password);
         List<String> headersList = new LinkedList<>();
         if (!CollectionUtils.isEmpty(dynamicsHeaders)) {
             //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷�
@@ -288,9 +297,13 @@
             list.add(export.getPointIP());
             list.add(export.getArea());
             list.add(export.getUnitName());
-            list.add(export.getProvinceTagString());
+            list.add(export.getProvinceTagVideoString());
+            list.add(export.getProvinceTagCarString());
+            list.add(export.getProvinceTagFaceString());
             list.add(export.getImportantCommandImageTagString());
             list.add(export.getDeptTagString());
+            list.add(export.getUsername());
+            list.add(export.getPassword());
             for (String header : headersList) {
                 //鍒涘缓涓�涓彉閲忚褰曟壘娌℃壘鍒拌繖涓猦eader
                 boolean flag = false;
@@ -343,9 +356,13 @@
             pointExport.setPointName(map.get(PointHeaderConstant.Point_Name));
             pointExport.setPointIP(map.get(PointHeaderConstant.IP));
             pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number));
-            pointExport.setProvinceTag("鏄�".equals(map.get(PointHeaderConstant.Province_Tag)));
+            pointExport.setProvinceTagVideo("鏄�".equals(map.get(PointHeaderConstant.Province_Tag_Video)));
+            pointExport.setProvinceTagCar("鏄�".equals(map.get(PointHeaderConstant.Province_Tag_Car)));
+            pointExport.setProvinceTagFace("鏄�".equals(map.get(PointHeaderConstant.Province_Tag_Face)));
             pointExport.setImportantCommandImageTag("鏄�".equals(map.get(PointHeaderConstant.Impotrant_Command_Image)));
             pointExport.setDeptTag("鏄�".equals(map.get(PointHeaderConstant.Dept_Tag)));
+            pointExport.setUsername(map.get(PointHeaderConstant.Username));
+            pointExport.setPassword(map.get(PointHeaderConstant.Password));
             List<DynamicColumnVO> dynamics = new ArrayList<>();
             // 澶勭悊鍔ㄦ�佸垪
             for (Map.Entry<String, String> entry : map.entrySet()) {
@@ -388,8 +405,12 @@
         List<YwPoint> pointList = dataList.stream().map(item -> {
             YwPoint point = new YwPoint();
             point.setImportantCommandImageTag(item.getImportantCommandImageTag());
-            point.setProvinceTag(item.getProvinceTag());
+            point.setProvinceTagVideo(item.getProvinceTagVideo());
+            point.setProvinceTagCar(item.getProvinceTagCar());
+            point.setProvinceTagFace(item.getProvinceTagFace());
             point.setDeptTag(item.getDeptTag());
+            point.setUsername(item.getUsername());
+            point.setPassword(item.getPassword());
             if (needUpdateUnit) {
                 if (Objects.nonNull(unitId)) {
                     point.setUnitId(Long.valueOf(unitId));
@@ -427,40 +448,32 @@
         }
         //鏍规嵁label_value鍜宺ef_id鍒ゆ柇鏄惁鏄悓涓�鏁版嵁
         for (PointExport pointExport : dataList) {
-            //寰楀埌excel涓姩鎬佸垪鍚嶄綔涓簁ey鐨刴ap
-            Map<String, DynamicColumnVO> exportMap = pointExport.getDynamicData().stream().collect(Collectors.toMap(DynamicColumnVO::getLabelValue, Function.identity()));
-            //鏌ュ嚭鏁版嵁搴撲腑杩欎釜鐐逛綅鐨勫姩鎬佸垪
-            List<DynamicColumnVO> dynamicColumnVOS = dynamicVOMap.get(pointExport.getId());
-            if (!CollectionUtils.isEmpty(dynamicColumnVOS)) {
-                //閬嶅巻鏁版嵁搴撲腑杩欎釜鐐逛綅鐨勫姩鎬佸垪锛屽苟鏍规嵁鍔ㄦ�佸垪鍚嶆壘鍑篹xcel涓殑鍊�
-                for (DynamicColumnVO vo : dynamicColumnVOS) {
-                    DynamicColumnVO dynamicColumnVO = exportMap.get(vo.getLabelValue());
-                    //瀛樺湪璇存槑excel鏈夎繖涓暟鎹紝灏嗘暟鎹簱杩欎釜鏁版嵁鐨勫�兼敼涓篹xcel鐨勫��
-                    if (dynamicColumnVO.getColumnValue() != null) {
-                        DynamicColumnValue entity = new DynamicColumnValue();
-                        entity.setColumnValue(dynamicColumnVO.getColumnValue());
-                        entity.setDynamicColumnId(vo.getId());
-                        entity.setRefId(vo.getRefId());
-                        entity.setId(vo.getValueId());
-                        updateList.add(entity);
+            //鏁版嵁搴撲腑鐨勫姩鎬佸垪
+            List<DynamicColumnVO> dynamicColumnVOS = dynamicVOMap.getOrDefault(pointExport.getId(), Collections.emptyList());
+            Map<String, DynamicColumnVO> databaseMap = dynamicColumnVOS.stream()
+                    .collect(Collectors.toMap(DynamicColumnVO::getLabelValue, Function.identity()));
 
+            for (DynamicColumnVO excelVo : pointExport.getDynamicData()) {
+                String labelValue = excelVo.getLabelValue();
+                DynamicColumnVO databaseVo = databaseMap.get(labelValue);
+                //濡傛灉excel鍊间笉涓虹┖鍒ゅ畾涓烘柊澧炴垨淇敼
+                if (excelVo.getColumnValue() != null) {
+                    Integer dynamicId = dictionary.get(labelValue);
+                    DynamicColumnValue entity = new DynamicColumnValue();
+                    entity.setColumnValue(excelVo.getColumnValue());
+                    entity.setRefId(pointExport.getId());
+                    //鏁版嵁搴撴壘涓嶅埌涓烘柊澧炲惁鍒欎负淇敼
+                    if (databaseVo != null) {
+                        entity.setDynamicColumnId(databaseVo.getId());
+                        entity.setId(databaseVo.getValueId());
+                        updateList.add(entity);
                     } else {
-                        //涓嶅瓨鍦ㄥ垯鍙栨秷鏍囩锛屽垹闄�
-                        deleteList.add(vo.getValueId());
-                    }
-                }
-            } else {
-                //鏁版嵁搴撻噷鏌ヤ笉鍒癳xcel閲岄潰鐨勮繖涓偣浣嶅姩鎬佸垪锛屽叏涓烘柊澧�
-                List<DynamicColumnVO> dynamicData = pointExport.getDynamicData();
-                for (DynamicColumnVO excelData : dynamicData) {
-                    if (excelData.getColumnValue() != null) {
-                        Integer dynamicId = dictionary.get(excelData.getLabelValue());
-                        DynamicColumnValue entity = new DynamicColumnValue();
-                        entity.setColumnValue(excelData.getColumnValue());
                         entity.setDynamicColumnId(dynamicId);
-                        entity.setRefId(pointExport.getId());
                         insertList.add(entity);
                     }
+                } else if (databaseVo != null) {
+                    //excel閲屼负绌轰絾鏄暟鎹簱瀛樺湪 鍒犻櫎
+                    deleteList.add(databaseVo.getValueId());
                 }
             }
         }
@@ -493,7 +506,7 @@
     }
 
     @Override
-    public <T extends BaseResult> void setDeviceTagByGB(List<T> dataList) {
+    public <T extends BaseResult> void setDeviceTagByGB(List<T> dataList,Short category) {
         List<String> gbList = dataList.stream().map(BaseResult::getNo).collect(Collectors.toList());
         List<CheckTagVO> pointList = baseMapper.getTagsByGB(gbList);
         Map<String, CheckTagVO> pointMap = pointList.stream().collect(Collectors.toMap(CheckTagVO::getNo, item -> item));
@@ -501,6 +514,20 @@
             CheckTagVO tag = pointMap.get(data.getNo());
             if (Objects.nonNull(tag)) {
                 BeanUtils.copyProperties(tag, data);
+                //閫氳繃璁惧绫诲瀷鎵撶渷鍘呮爣绛�
+                if(CheckConstants.Rule_Category_Video.equals(category)){
+                    data.setProvinceTag(tag.getProvinceTagVideo());
+                }else if(CheckConstants.Rule_Category_Car.equals(category)){
+                    data.setProvinceTag(tag.getProvinceTagCar());
+                }else if(CheckConstants.Rule_Category_Face.equals(category)){
+                    data.setProvinceTag(tag.getProvinceTagFace());
+                }else if(CheckConstants.Rule_Category_Or.equals(category)){
+                    if(tag.getProvinceTagVideo() || tag.getProvinceTagCar() || tag.getProvinceTagFace()) {
+                        data.setProvinceTag(Boolean.TRUE);
+                    }else {
+                        data.setProvinceTag(Boolean.FALSE);
+                    }
+                }
             }
         }
     }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
index bf9cd3d..8a19b35 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
@@ -72,6 +72,7 @@
 
     @Autowired
     private WorkOrderWhiteMapper workOrderWhiteMapper;
+
     /**
      * 鏌ヨ杩愮淮闃堝��
      *
@@ -149,7 +150,6 @@
      */
     @Override
     public void videoCheck(List list) {
-
     }
 
     @Override
@@ -157,7 +157,7 @@
         // 骞冲彴绂荤嚎鏁呴殰妫�娴�
         if (CollectionUtils.isEmpty(list)) {
             Boolean ping = PingUtil.ping("", 5);
-            if (! ping) {
+            if (!ping) {
 
             }
         }
@@ -198,34 +198,46 @@
             }
             WorkOrder workOrder = new WorkOrder();
             //妫�鏌ユ椂閽熷噯纭巼
-            Float clockPercent = result.getSnapClock().getClockPercent();
-            check(YwThreadConstants.Face_ClockPercent, clockPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CLOCK_RIGHT.getValue());
-            //妫�鏌ユ暟鎹強鏃剁巼
-            Float timelyPercent = result.getSnapTimely().getTimelyPercent();
-            check(YwThreadConstants.Face_TimelyPercent, timelyPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.DATA_TIMELY_ERROR.getValue());
-            //妫�鏌ユ寔缁棤鏁版嵁澶╂暟
-            Integer continueNoDataCount = result.getContinueNoDataCount();
-            check(YwThreadConstants.Face_ContinueNoDataCount, continueNoDataCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.LONG_DAY_NO_DATA.getValue());
-            //妫�鏌ヤ笉鍞竴鏁版嵁閲�
-            Integer nouniqueCount = result.getSnapUnique().getNouniqueCount();
-            check(YwThreadConstants.Face_NouniqueCount, nouniqueCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.NOT_UNIQUE_DATA_VOLUME.getValue());
-            //妫�鏌ヤ汉鑴镐綆璇勫垎鐜�
-            Float lowScorePercent = result.getSnapValidity().getLowScorePercent();
-            check(YwThreadConstants.Face_LowScorePercent, lowScorePercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.FACE_LOW.getValue());
-            //妫�鏌ュ缓妯″け璐ョ巼
-            Float failPercent = result.getSnapValidity().getFailPercent();
-            check(YwThreadConstants.Face_FailPercent, failPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.MODELING_FAIL.getValue());
-            // 鐐逛綅鍦ㄧ嚎鐜�
-            if (2 == result.getSnapResult()) {
-                workOrder.setSerialNumber(result.getExternalIndexCode());
-                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
-                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
-                    workOrder.setErrorTypeList(new ArrayList<>());
-                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
-                } else {
-                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
-                }
+            if (result.getSnapClock() != null) {
+                Float clockPercent = result.getSnapClock().getClockPercent();
+                check(YwThreadConstants.Face_ClockPercent, clockPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CLOCK_RIGHT.getValue());
             }
+            //妫�鏌ユ暟鎹強鏃剁巼
+            if (result.getSnapTimely() != null) {
+                Float timelyPercent = result.getSnapTimely().getTimelyPercent();
+                check(YwThreadConstants.Face_TimelyPercent, timelyPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.DATA_TIMELY_ERROR.getValue());
+            }
+            //妫�鏌ユ寔缁棤鏁版嵁澶╂暟
+            if (result.getContinueNoDataCount() != null) {
+                Integer continueNoDataCount = result.getContinueNoDataCount();
+                check(YwThreadConstants.Face_ContinueNoDataCount, continueNoDataCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.LONG_DAY_NO_DATA.getValue());
+            }
+            //妫�鏌ヤ笉鍞竴鏁版嵁閲�
+            if (result.getSnapUnique() != null) {
+                Integer nouniqueCount = result.getSnapUnique().getNouniqueCount();
+                check(YwThreadConstants.Face_NouniqueCount, nouniqueCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.NOT_UNIQUE_DATA_VOLUME.getValue());
+            }
+            //妫�鏌ヤ汉鑴镐綆璇勫垎鐜�
+            if (result.getSnapValidity() != null) {
+                Float lowScorePercent = result.getSnapValidity().getLowScorePercent();
+                check(YwThreadConstants.Face_LowScorePercent, lowScorePercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.FACE_LOW.getValue());
+            }
+            //妫�鏌ュ缓妯″け璐ョ巼
+            if (result.getSnapValidity() != null) {
+                Float failPercent = result.getSnapValidity().getFailPercent();
+                check(YwThreadConstants.Face_FailPercent, failPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.MODELING_FAIL.getValue());
+            }
+            // 鐐逛綅鍦ㄧ嚎鐜�
+//            if (2 == result.getSnapResult()) {
+//                workOrder.setSerialNumber(result.getExternalIndexCode());
+//                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+//                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
+//                    workOrder.setErrorTypeList(new ArrayList<>());
+//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
+//                } else {
+//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
+//                }
+//            }
             if (WorkOrderStatusEnum.WAIT_DISTRIBUTE.equals(workOrder.getStatus())) {
                 workOrderList.add(workOrder);
             } else if (WorkOrderStatusEnum.DISTRIBUTED.equals(workOrder.getStatus())) {
@@ -260,33 +272,43 @@
             Integer continueNoDataCount = result.getContinueNoDataCount();
             check(YwThreadConstants.Car_ContinueNoDataCount, continueNoDataCount, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.LONG_DAY_NO_DATA.getValue());
             //妫�鏌ユ椂閽熷噯纭巼
-            Float clockPercent = result.getSnapClock().getClockPercent();
-            check(YwThreadConstants.Car_ClockPercent, clockPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CLOCK_RIGHT.getValue());
-            //妫�鏌ユ暟鎹強鏃剁巼
-            Float timelyPercentResult = result.getSnapTimely().getTimelyPercent();
-            check(YwThreadConstants.Car_TimelyPercent, timelyPercentResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.DATA_TIMELY_ERROR.getValue());
-            //妫�鏌ヤ笉鍞竴鏁版嵁閲�
-            Integer nouniqueCountResult = result.getSnapUnique().getNouniqueCount();
-            check(YwThreadConstants.Car_NouniqueCount, nouniqueCountResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.NOT_UNIQUE_DATA_VOLUME.getValue());
-            //妫�鏌ョ櫧澶╂湭璇嗗埆閲�
-            Integer dayNoNumberCountResult = result.getSnapPlate().getDayNoNumberCount();
-            check(YwThreadConstants.Car_DayNoNumberCount, dayNoNumberCountResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.UNRECOGNIZED_DAY_VOLUME.getValue());
-            //杞﹁締涓昏灞炴�т竴鑷寸巼
-            Integer noIntegrityCountResult = result.getIntegrity().getMainNoIntegrityCount();
-            Integer dataCount = result.getDataCount();
-            Double integrityRate = ((double)dataCount-noIntegrityCountResult)/dataCount;
-            check(YwThreadConstants.Car_NoIntegrityCount, integrityRate, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CAR_SIX.getValue());
-            // 鐐逛綅鍦ㄧ嚎鐜�
-            if (2 == result.getSnapResult()) {
-                workOrder.setSerialNumber(result.getExternalIndexCode());
-                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
-                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
-                    workOrder.setErrorTypeList(new ArrayList<>());
-                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
-                } else {
-                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
-                }
+            if (result.getSnapClock() != null) {
+                Float clockPercent = result.getSnapClock().getClockPercent();
+                check(YwThreadConstants.Car_ClockPercent, clockPercent, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CLOCK_RIGHT.getValue());
             }
+            //妫�鏌ユ暟鎹強鏃剁巼
+            if (result.getSnapTimely() != null) {
+                Float timelyPercentResult = result.getSnapTimely().getTimelyPercent();
+                check(YwThreadConstants.Car_TimelyPercent, timelyPercentResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.DATA_TIMELY_ERROR.getValue());
+            }
+            //妫�鏌ヤ笉鍞竴鏁版嵁閲�
+            if (result.getSnapUnique() != null) {
+                Integer nouniqueCountResult = result.getSnapUnique().getNouniqueCount();
+                check(YwThreadConstants.Car_NouniqueCount, nouniqueCountResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.NOT_UNIQUE_DATA_VOLUME.getValue());
+            }
+            //妫�鏌ョ櫧澶╂湭璇嗗埆閲�
+            if (result.getSnapPlate() != null) {
+                Integer dayNoNumberCountResult = result.getSnapPlate().getDayNoNumberCount();
+                check(YwThreadConstants.Car_DayNoNumberCount, dayNoNumberCountResult, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.MORE_THAN_EQ, ErrorType.UNRECOGNIZED_DAY_VOLUME.getValue());
+            }
+            //杞﹁締涓昏灞炴�т竴鑷寸巼
+            if (result.getIntegrity() != null) {
+                Integer noIntegrityCountResult = result.getIntegrity().getMainNoIntegrityCount();
+                Integer dataCount = result.getDataCount();
+                Double integrityRate = ((double) dataCount - noIntegrityCountResult) / dataCount;
+                check(YwThreadConstants.Car_NoIntegrityCount, integrityRate, result.getExternalIndexCode(), thresholdMap, workOrder, CompareType.LESS_THAN_EQ, ErrorType.CAR_SIX.getValue());
+            }
+            // 鐐逛綅鍦ㄧ嚎鐜�
+//            if (2 == result.getSnapResult()) {
+//                workOrder.setSerialNumber(result.getExternalIndexCode());
+//                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+//                if (CollectionUtils.isEmpty(workOrder.getErrorTypeList())) {
+//                    workOrder.setErrorTypeList(new ArrayList<>());
+//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
+//                } else {
+//                    workOrder.getErrorTypeList().add(ErrorType.DEVICE_OFFLINE.getValue());
+//                }
+//            }
             if (WorkOrderStatusEnum.WAIT_DISTRIBUTE.equals(workOrder.getStatus())) {
                 workOrderList.add(workOrder);
             } else if (WorkOrderStatusEnum.DISTRIBUTED.equals(workOrder.getStatus())) {
@@ -305,7 +327,8 @@
      * @param name
      * @return
      */
-    private Map<String, YwThreshold> getYwThresholdMap(String name) {
+    @Override
+    public Map<String, YwThreshold> getYwThresholdMap(String name) {
         return ywThresholdMapper.selectList(
                 new QueryWrapper<YwThreshold>().eq("monitor_type", name)
         ).stream().collect(Collectors.toMap(
@@ -316,6 +339,7 @@
 
     /**
      * 鐧藉悕鍗曡鎯�
+     *
      * @param id
      * @return
      */
@@ -326,6 +350,7 @@
         workOrderWhite.setErrorTypeList(errorTypeList);
         return Result.ok().data(workOrderWhite);
     }
+
     /**
      * 宸ュ崟鐧藉悕鍗曞垪琛�
      *
@@ -338,10 +363,10 @@
         IPage<WorkOrderWhite> page = PageUtil.getPage(query, WorkOrderWhite.class);
         workOrderWhiteMapper.page(page, query);
         List<WorkOrderWhite> records = page.getRecords();
-        records.forEach(white-> {
+        records.forEach(white -> {
             List<String> errorTextList = new ArrayList<>();
             List<String> errorTypeList = Arrays.asList(white.getErrorType().split(","));
-            errorTypeList.forEach(error->{
+            errorTypeList.forEach(error -> {
                 String errorText = ErrorType.getDescriptionByValue(error);
                 errorTextList.add(errorText);
             });
@@ -365,12 +390,13 @@
             return Result.error("璇ヨ澶囧凡瀛樺湪鐧藉悕鍗�");
         } else {
             List<String> errorTypeList = workOrderWhite.getErrorTypeList();
-            workOrderWhite.setErrorType(String.join(",",errorTypeList));
+            workOrderWhite.setErrorType(String.join(",", errorTypeList));
             workOrderWhite.setCreateBy(SecurityUtils.getUsername());
             workOrderWhiteMapper.insert(workOrderWhite);
             return Result.ok();
         }
     }
+
     /**
      * 淇敼宸ュ崟鐧藉悕鍗�
      *
@@ -383,7 +409,7 @@
         WorkOrderWhite white = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber());
         workOrderWhite.setId(white.getId());
         List<String> errorTypeList = workOrderWhite.getErrorTypeList();
-        workOrderWhite.setErrorType(String.join(",",errorTypeList));
+        workOrderWhite.setErrorType(String.join(",", errorTypeList));
         workOrderWhiteMapper.updateById(workOrderWhite);
         return Result.ok();
     }
@@ -399,8 +425,10 @@
         workOrderWhiteMapper.batchDelete(ids);
         return Result.ok();
     }
+
     /**
      * 鐧藉悕鍗曞鍑�
+     *
      * @param response
      * @throws IOException
      */
@@ -408,10 +436,10 @@
     public void whiteExport(HttpServletResponse response) throws IOException {
         //鐧藉悕鍗曟暟鎹�
         List<WorkOrderWhiteExport> data = workOrderWhiteMapper.whiteExport();
-        data.forEach(white-> {
+        data.forEach(white -> {
             List<String> errorTextList = new ArrayList<>();
             List<String> errorTypeList = Arrays.asList(white.getErrorType().split(","));
-            errorTypeList.forEach(error->{
+            errorTypeList.forEach(error -> {
                 String errorText = ErrorType.getDescriptionByValue(error);
                 errorTextList.add(errorText);
             });
@@ -426,7 +454,7 @@
             errorExports.add(errorExport);
         });
         ExcelWriter excelWriter = null;
-        try(OutputStream outputStream = response.getOutputStream()) {
+        try (OutputStream outputStream = response.getOutputStream()) {
             excelWriter = EasyExcel.write(outputStream).build();
 
             WriteSheet whiteSheet = EasyExcel.writerSheet(0, "宸ュ崟鐧藉悕鍗曟竻鍗�").head(WorkOrderWhiteExport.class).build();
@@ -436,7 +464,7 @@
             excelWriter.write(errorExports, errorSheet);
             excelWriter.finish();
             outputStream.flush();
-        }catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
         } finally {
             try {
@@ -451,12 +479,13 @@
 
     /**
      * 瀵煎叆宸ュ崟鐧藉悕鍗�
+     *
      * @param file
      * @return
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Result importWhite(MultipartFile file) throws IOException{
+    public Result importWhite(MultipartFile file) throws IOException {
 //        Consumer<List<WorkOrderWhiteExport>> consumer = (dataList) -> {
 //            try {
 //                this.updateWhite(dataList);
@@ -477,17 +506,17 @@
                 // 灏嗚鍙栧埌鐨勬瘡涓�琛屽瓨鍏eportDetails闆嗗悎涓�
                 dataList.add(excel);
             }
+
             @Override
-            public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
+            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+            }
         }).sheet().doRead();
 
         if (CollectionUtils.isEmpty(dataList)) {
             throw new RuntimeException("瀵煎叆鏁版嵁涓嶈兘涓虹┖");
         }
         boolean duplic = checkDuplic(dataList);
-        if(duplic) throw new RuntimeException("瀛樺湪閲嶅鍥芥爣璁惧");
-        //宸插瓨鍦ㄧ殑鐧藉悕鍗�
-        Map<String, WorkOrderWhite> whiteMap = workOrderWhiteMapper.selectList().stream().collect(Collectors.toMap(WorkOrderWhite::getSerialNumber, Function.identity()));
+        if (duplic) throw new RuntimeException("瀛樺湪閲嶅鍥芥爣璁惧");
         List<WorkOrderWhite> addList = new ArrayList<>();
         dataList.stream().forEach(item -> {
             WorkOrderWhite white = new WorkOrderWhite();
@@ -496,34 +525,33 @@
             //澶囨敞
             white.setRemark(item.getRemark());
             String errorType = item.getErrorType();
-            if(StringUtils.isEmpty(errorType)){
-                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滀笉鑳戒负绌�");
+            if (StringUtils.isEmpty(errorType)) {
+                throw new RuntimeException("鍥芥爣鐮佷负" + item.getSerialNumber() + "鐨勮澶囨晠闅滀笉鑳戒负绌�");
             }
             try {
                 List<String> errorDataList = new ArrayList<>();
                 List<String> errorExcelList = Arrays.asList(item.getErrorType().split(","));
-                errorExcelList.forEach(desc->{
+                errorExcelList.forEach(desc -> {
                     //鎶婁腑鏂囪浆鎹负鏁版嵁搴撳瓨鍌ㄦ牸寮�
                     String errorText = ErrorType.getValueByDescription(desc);
                     //鎵句笉鍒版姏鍑哄紓甯�
-                    if(errorText == null) throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+                    if (errorText == null)
+                        throw new RuntimeException("鍥芥爣鐮佷负" + item.getSerialNumber() + "鐨勮澶囨晠闅滅被鍨嬫湁璇�");
                     errorDataList.add(errorText);
                 });
                 white.setErrorType(String.join(",", errorDataList));
-                //濡傛灉宸插瓨鍦ㄨˉ鍏卛d
-                WorkOrderWhite whiteExsit = whiteMap.get(white.getSerialNumber());
-                if(whiteExsit!=null) white.setId(whiteExsit.getId());
                 addList.add(white);
             } catch (Exception e) {
-                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+                throw new RuntimeException("鍥芥爣鐮佷负" + item.getSerialNumber() + "鐨勮澶囨晠闅滅被鍨嬫湁璇�");
             }
         });
-        if(!CollectionUtils.isEmpty(addList)) {
+        if (!CollectionUtils.isEmpty(addList)) {
             workOrderWhiteMapper.deleteAll();
             workOrderWhiteMapper.insertBatch(addList);
         }
         return Result.ok();
     }
+
     /**
      * 淇敼鐧藉悕鍗�
      *
@@ -545,45 +573,49 @@
             //澶囨敞
             white.setRemark(item.getRemark());
             String errorType = item.getErrorType();
-            if(StringUtils.isEmpty(errorType)){
-                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滀笉鑳戒负绌�");
+            if (StringUtils.isEmpty(errorType)) {
+                throw new RuntimeException("鍥芥爣鐮佷负" + item.getSerialNumber() + "鐨勮澶囨晠闅滀笉鑳戒负绌�");
             }
             try {
                 List<String> errorDataList = new ArrayList<>();
                 List<String> errorExcelList = Arrays.asList(item.getErrorType().split(","));
-                errorExcelList.forEach(desc->{
+                errorExcelList.forEach(desc -> {
                     //鎶婁腑鏂囪浆鎹负鏁版嵁搴撳瓨鍌ㄦ牸寮�
                     String errorText = ErrorType.getValueByDescription(desc);
                     //鎵句笉鍒版姏鍑哄紓甯�
-                    if(errorText == null) throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+                    if (errorText == null)
+                        throw new RuntimeException("鍥芥爣鐮佷负" + item.getSerialNumber() + "鐨勮澶囨晠闅滅被鍨嬫湁璇�");
                     errorDataList.add(errorText);
                 });
                 white.setErrorType(String.join(",", errorDataList));
-                if(!CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(white.getSerialNumber())){
+                if (!CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(white.getSerialNumber())) {
                     updateList.add(white);
-                }else {
+                } else {
                     addList.add(white);
                 }
             } catch (Exception e) {
-                throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+                throw new RuntimeException("鍥芥爣鐮佷负" + item.getSerialNumber() + "鐨勮澶囨晠闅滅被鍨嬫湁璇�");
             }
         });
-        if(!CollectionUtils.isEmpty(addList)) workOrderWhiteMapper.insertBatch(addList);
-        if(!CollectionUtils.isEmpty(updateList)) workOrderWhiteMapper.updateBatch(updateList);
+        if (!CollectionUtils.isEmpty(addList)) workOrderWhiteMapper.insertBatch(addList);
+        if (!CollectionUtils.isEmpty(updateList)) workOrderWhiteMapper.updateBatch(updateList);
     }
 
     /**
      * 妫�鏌ラ槇鍊�
      *
-     * @param key 鏌愰槇鍊兼爣璇�
-     * @param value 鎺ュ彛鑾峰彇鍒扮殑鍊�
+     * @param key          鏌愰槇鍊兼爣璇�
+     * @param value        鎺ュ彛鑾峰彇鍒扮殑鍊�
      * @param serialNumber 鍥芥爣鐮�
-     * @param thresholds 闃堝�兼潯浠秏ap
-     * @param compareType 姣旇緝鏂瑰紡锛�>=    <=
-     * @param errorType 鏁呴殰绫诲瀷
+     * @param thresholds   闃堝�兼潯浠秏ap
+     * @param compareType  姣旇緝鏂瑰紡锛�>=    <=
+     * @param errorType    鏁呴殰绫诲瀷
      * @param <T>
      */
-    private <T extends Comparable<T>> void check(String key, T value, String serialNumber, Map<String, YwThreshold> thresholds, WorkOrder workOrder, CompareType compareType,String errorType) {
+    @Override
+    public <T extends Comparable<T>> void check(String key, T value, String
+            serialNumber, Map<String, YwThreshold> thresholds, WorkOrder workOrder, CompareType compareType, String
+                                                        errorType) {
         Optional.ofNullable(value).ifPresentOrElse(
                 v -> {
                     YwThreshold ywThreshold = thresholds.get(key);
@@ -592,7 +624,7 @@
                     T thresholdAutoValue = parseThreshold(ywThreshold.getValueAuto(), value.getClass());
                     //鐩存帴涓嬪彂宸ュ崟闃堝��
                     T thresholdValue = parseThreshold(ywThreshold.getValue(), value.getClass());
-                    if("percent".equals(ywThreshold.getCountType())){
+                    if ("percent".equals(ywThreshold.getCountType())) {
                         if (thresholdAutoValue instanceof Float) {
                             thresholdAutoValue = (T) Float.valueOf(((Float) thresholdAutoValue) / 100f);
                         }
@@ -627,6 +659,34 @@
         );
     }
 
+    /**
+     * 鎵�鏈夌櫧鍚嶅崟娣诲姞鏁呴殰绫诲瀷
+     *
+     * @param workOrderWhite
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result addBatch(WorkOrderWhite workOrderWhite) {
+        List<String> errorTypeListAdd = workOrderWhite.getErrorTypeList();
+        List<WorkOrderWhite> whites = workOrderWhiteMapper.selectList();
+        for (WorkOrderWhite white : whites) {
+            List<String> errorTypeList = new ArrayList<>(Arrays.asList(white.getErrorType().split(",")));
+            for (String newError : errorTypeListAdd) {
+                if (errorTypeList.contains(newError)) {
+                    continue;
+                } else {
+                    errorTypeList.add(newError);
+                }
+            }
+            white.setErrorType(String.join(",", errorTypeList));
+        }
+        if (!CollectionUtils.isEmpty(whites)) {
+            workOrderWhiteMapper.deleteAll();
+            workOrderWhiteMapper.insertBatch(whites);
+        }
+        return Result.ok();
+    }
+
     private <T extends Comparable<T>> T parseThreshold(String thresholdStr, Class<?> type) {
         if (Integer.class.equals(type)) {
             return (T) Integer.valueOf(thresholdStr);
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java
index 76da7e9..56546b7 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwUnitServiceImpl.java
@@ -23,6 +23,7 @@
 import com.ycl.system.page.PageUtil;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.SecurityUtils;
+import enumeration.ErrorType;
 import lombok.RequiredArgsConstructor;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
@@ -222,6 +223,20 @@
         if(query.getEnd()!=null) {
             query.setEnd(DateUtils.getDayEnd(query.getEnd()));
         }
+        if (query.getErrorType() != null) {
+            List<String> errorTypeList = new ArrayList<>();
+            errorTypeList.add(query.getErrorType());
+            if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) {
+                //List娣诲姞涔嬪墠鍑犵宸ュ崟绫诲瀷
+                errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue());
+                errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue());
+                errorTypeList.add(ErrorType.SNOW_STORM.getValue());
+                errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue());
+                errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue());
+                errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue());
+            }
+            query.setErrorTypeList(errorTypeList);
+        }
         List<YwUnit> ywUnits = baseMapper.selectList(null);
         List<YwUnitVO> lists = ywUnits.stream().map(item -> {
             YwUnitVO vo = new YwUnitVO();
diff --git a/ycl-server/src/main/java/com/ycl/task/CheckScoreTask.java b/ycl-server/src/main/java/com/ycl/task/CheckScoreTask.java
index 5b8b350..9cd10d1 100644
--- a/ycl-server/src/main/java/com/ycl/task/CheckScoreTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/CheckScoreTask.java
@@ -49,6 +49,7 @@
         if (checkTemplate != null) {
             Short examineCategory = checkTemplate.getExamineCategory();
             Short examineTag = checkTemplate.getExamineTag();
+            //鐢ㄤ簬琛ュ厖鏁伴噺
             List<YwPointVO> pointVOS= pointMapper.selectToCount(examineCategory, examineTag);
             //鏌ユ潈閲�
             CheckTemplateRule checkTemplateRule = new CheckTemplateRule();
@@ -150,10 +151,12 @@
         String adjustWay = checkTemplate.getAdjustWay();
         BigDecimal adjustCoefficient = checkTemplate.getAdjustCoefficient();
         if (CheckConstants.Multiply.equals(adjustWay)) {
-            scoreFinal = adjustCoefficient.multiply(scoreFinal).multiply(new BigDecimal(100));
+//            scoreFinal = adjustCoefficient.multiply(scoreFinal).multiply(new BigDecimal(100));
+            scoreFinal = adjustCoefficient.multiply(scoreFinal);
         } else if (CheckConstants.Divided.equals(adjustWay)) {
             //鍥涜垗浜斿叆淇濈暀灏忔暟鍚庡洓浣�
-            scoreFinal = scoreFinal.divide(adjustCoefficient, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+//            scoreFinal = scoreFinal.divide(adjustCoefficient, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            scoreFinal = scoreFinal.divide(adjustCoefficient, 4, RoundingMode.HALF_UP);
         }
         checkScore.setCreateTime(new Date());
         checkScore.setExamineTag(Integer.parseInt(examineTag + ""));
diff --git a/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java b/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
index 339f924..ce627db 100644
--- a/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/ContractResultTask.java
@@ -1,14 +1,15 @@
 package com.ycl.task;
 
-import com.ycl.platform.domain.entity.ContractResult;
-import com.ycl.platform.domain.entity.ContractResultRecord;
-import com.ycl.platform.domain.entity.ContractScore;
-import com.ycl.platform.domain.entity.TContract;
+import com.ycl.platform.domain.entity.*;
+import com.ycl.platform.mapper.CalculateRecordMapper;
+import com.ycl.platform.service.CalculateRecordService;
 import com.ycl.platform.service.IContractResultService;
 import com.ycl.platform.service.IContractScoreService;
 import com.ycl.platform.service.ITContractService;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.bean.BeanUtils;
+import enumeration.general.CalculateReportStatusEnum;
+import enumeration.general.PublishType;
 import lombok.Data;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -16,6 +17,8 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -30,7 +33,7 @@
     private final ITContractService contractService;
     private final IContractScoreService contractScoreService;
     private final IContractResultService checkResultService;
-
+    private final CalculateRecordMapper calculateRecordMapper;
     private String startTime;
     private String endTime;
 
@@ -38,7 +41,6 @@
      * 姣忎釜鏈�1鍙锋墽琛岋紝缁熻鑰冩牳缁撴灉
      */
     @Transactional
-    // @PostConstruct //鍚姩鏃舵墽琛屼竴娆�
     public void contractResultTask() {
         // 鏌ヨ鏈夋晥鏈熷唴鐨勫悎鍚�
         List<TContract> list = contractService.selectUsingContract();
@@ -47,11 +49,28 @@
             // 涓婁釜鏈堟墸鍒嗚褰�
             List<ContractScore> contractScore = contractScoreService.getDateRangeScoreByContractId(tContract.getId(), startTime, endTime);
             // 鏂板鑰冩牳缁撴灉
+            //鑾峰彇涓婁釜鏈堟椂闂�
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.MONTH, -1);
             ContractResult contractResult = getCheckResult(tContract, contractScore);
+            contractResult.setWhichMonth(calendar.get(Calendar.MONTH)+1);
+            contractResult.setWhichYear(calendar.get(Calendar.YEAR));
             checkResultService.save(contractResult);
-            // 鏂板鑰冩牳缁撴灉璁板綍
-            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, contractResult);
-            checkResultService.saveBatchRecord(contractResultRecord);
+//            // 鏂板鑰冩牳缁撴灉璁板綍
+//            List<ContractResultRecord> contractResultRecord = getContractResultRecord(contractScore, contractResult);
+//            checkResultService.saveBatchRecord(contractResultRecord);
+            // 鏂板鏍哥畻鏄庣粏璁板綍
+            CalculateRecord calculateRecord = new CalculateRecord();
+            //鏀逛负鐩存帴鍘绘煡
+//            calculateRecord.setScore(contractResult.getScore());
+            calculateRecord.setContractId(Integer.parseInt(tContract.getId()+""));
+            calculateRecord.setCreateTime(new Date());
+            calculateRecord.setUpdateTime(new Date());
+            calculateRecord.setStatus(PublishType.UNPUBLISHED.getCode());
+
+            calculateRecord.setWhichYear(calendar.get(Calendar.YEAR));
+            calculateRecord.setWhichMonth(calendar.get(Calendar.MONTH)+1);
+            calculateRecordMapper.insert(calculateRecord);
         }
     }
 
@@ -87,7 +106,8 @@
         contractResult.setContractId(tContract.getId());
         contractResult.setPublish(0);
         contractResult.setCheckTime(DateUtils.getNowDate());
-        contractResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get()));
+        //鏀逛负鐩存帴鍘绘煡
+//        contractResult.setScore(contractScore.isEmpty() ? new BigDecimal("100") : new BigDecimal("100").subtract(contractScore.stream().map(ContractScore::getScore).reduce(BigDecimal::add).get()));
         return contractResult;
     }
 
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 60eb9b8..1d637c2 100644
--- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -80,7 +80,7 @@
                 .filter(calculateRuleVO -> ContractRule.CONTRACT_RULE_Online.getName().equals(calculateRuleVO.getRuleName()))
                 .collect(Collectors.toList());
         List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList());
-        List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds));
+        List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unit_id", unitIds).eq("examine_status",1));
         //key鏄痷nitId value鏄澶囩紪鐮侀泦鍚�
         Map<Long, List<YwPoint>> unitMap = ywPoints.stream().filter(point -> point.getUnitId() != null)
                 .collect(Collectors.groupingBy(
@@ -99,7 +99,7 @@
                 if (!CollectionUtils.isEmpty(reportNumbers) && reportNumbers.contains(point.getSerialNumber()))
                     continue;
                 totalSite++;
-                if (ApiConstants.UY_OnlineSite_Online.equals(point.getOnline())) {
+                if (ApiConstants.UY_OnlineSite_Online.equals(point.getOnline()) && ApiConstants.UY_OnlineSite_Online.equals(point.getPingOnline())) {
                     onlineSite++;
                 }
             }
@@ -120,7 +120,6 @@
 
     //鏈堝簳璁$畻鍦ㄧ嚎鐜囧垎鏁�
     public void calculateOnlineScore() {
-        //TODO:妫�鏌ヨ〃
         log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼鍒嗘暟");
         //鏈堝簳闇�瑕佺粺璁″钩鍧囧湪绾跨巼鐒跺悗杩涜绉垎鎵i櫎
         String mouthStart = DateUtils.getMouthStart(new Date());
@@ -179,7 +178,7 @@
                 .collect(Collectors.groupingBy(
                         CalculateRuleVO::getRuleName,  // 鎸夎鍒欏悕绉板垎缁�
                         Collectors.groupingBy(
-                                CalculateRuleVO::getContractId // 姣忎釜瑙勫垯鍚嶇О鍐呴儴鍐嶆寜鍚堝悓ID鍒嗙粍,value涓鸿鍒欓泦鍚�
+                                CalculateRuleVO::getContractId // 姣忎釜瑙勫垯鍚嶇О鍐呴儴鍐嶆寜鍚堝悓ID鍒嗙粍,value涓鸿鍒欓泦鍚�(澶氫釜鍚堝悓鎯呭喌)
                         )
                 ));
         //鍓嶇鎰熺煡婧愭不鐞嗗伐浣滐紙鏃堕挓鍚屾瑙勫垯銆丱SD瑙勫垯銆佷竴鏈轰竴妗h鍒欙級 鑾峰彇key涓哄悎鍚宨d锛寁alue涓鸿鍒欑殑map
@@ -195,12 +194,38 @@
         LocalDateTime endTime = LocalDateTime.now();
         // 璁$畻30澶╁墠鐨勬棩鏈�
         LocalDateTime startTime = endTime.minusDays(30);
-        List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(), "瀹℃牳閫氳繃");
+        //鑷姩鎵e垎鐨勫伐鍗曟晠闅滅被鍨�
+        List<String> deductErrorType = new ArrayList<>();
+        deductErrorType.add(ErrorType.OSD_ERROR.getValue());
+        deductErrorType.add(ErrorType.ABNORMAL_PIC.getValue());
+        deductErrorType.add(ErrorType.POINT_INFO_ERROR.getValue());
+        deductErrorType.add(ErrorType.CLOCK_SKEW.getValue());
+        List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(),deductErrorType,"瀹℃牳閫氳繃");
+        //瀛樺湪鏈変袱绉嶆墸鍒嗙殑鏁呴殰 鍙墸鍑忕涓�涓晠闅�
+        Map<String, WorkOrderVO> map = workOrders.stream()
+                .collect(Collectors.toMap(
+                        WorkOrderVO::getWorkOrderNo,
+                        Function.identity(),
+                        (older, newer) -> older.getDistributeTime().compareTo(newer.getDistributeTime()) <= 0 ? older : newer
+                ));
+        workOrders = new ArrayList<>(map.values());
+        List<String> workOrderNos = workOrders.stream().map(WorkOrderVO::getWorkOrderNo).collect(Collectors.toList());
+        List<WorkOrderVO> auditTimeList = workOrderMapper.getAuditTimeList(workOrderNos);
+        Map<String, List<Date>> auditTimeMap = auditTimeList.stream()
+                .collect(Collectors.groupingBy(
+                        WorkOrderVO::getWorkOrderNo, // 鍒嗙粍鐨勯敭
+                        Collectors.mapping(WorkOrderVO::getAuditTime, Collectors.toList())));
+        List<WorkOrderVO> handleTimeList = workOrderMapper.getHandleTimeList(workOrderNos);
+        Map<String, List<Date>> handleTimeMap = handleTimeList.stream()
+                .collect(Collectors.groupingBy(
+                        WorkOrderVO::getWorkOrderNo, // 鍒嗙粍鐨勯敭
+                        Collectors.mapping(WorkOrderVO::getHandleTime, Collectors.toList())));
         for (WorkOrderVO workOrder : workOrders) {
             //妫�娴嬫槸鍚︽姤澶囪繃
             if (!CollectionUtils.isEmpty(reportNumbers)) {
                 if (reportNumbers.contains(workOrder.getSerialNumber())) 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)) {
@@ -227,7 +252,7 @@
 //                }
 //            }
             //鍓嶇鎰熺煡婧愭不鐞嗗伐浣滐紙鏃堕挓鍚屾瑙勫垯銆丱SD瑙勫垯銆佷竴鏈轰竴妗h鍒欙級
-            if (ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType) || ErrorType.CLOCK_RIGHT.getValue().equals(errorType)) {
+            if (ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType) || ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)) {
                 if (!CollectionUtils.isEmpty(monitorRuleMap)) {
                     monitorRuleMap.forEach((contractId, rules) -> {
                         Integer unitId = rules.get(0).getUnitId();
@@ -235,10 +260,24 @@
                         if (workOrder.getUnitId().equals(unitId)) {
                             //宸ュ崟涓嬪彂鏃堕棿
                             Date createTime = workOrder.getDistributeTime();
-                            Date auditTime = workOrder.getAuditTime();
-                            double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60);
-                            //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯
+                            List<Date> auditTimes = auditTimeMap.get(workOrder.getWorkOrderNo());
+                            List<Date> handleTimes = handleTimeMap.get(workOrder.getWorkOrderNo());
+                            //鎷垮埌瀹℃牳鏃堕棿
+                            long auditDuration = getAuditDuration(auditTimes, handleTimes);
+                            //瀹℃牳閫氳繃鏃堕棿
+                            Date passTime = Collections.max(auditTimes);
+                            //澶勭悊鑺辫垂鎬绘椂闀�
+                            double diffTime = (double) (passTime.getTime() - createTime.getTime() - auditDuration) / (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 + "鍒�");
@@ -251,7 +290,7 @@
                 }
             }
             //鐐逛綅寮傚父鎯呭喌澶勭悊锛堥暅澶村紓甯搞�佹憚鍍忓ご閬尅绛夛級
-            if (ErrorType.SCREEN_OCCLUSION.getValue().equals(errorType)) {
+            if (ErrorType.ABNORMAL_PIC.getValue().equals(errorType)) {
                 if (!CollectionUtils.isEmpty(monitorRuleMap)) {
                     siteRuleMap.forEach((contractId, rules) -> {
                         Integer unitId = rules.get(0).getUnitId();
@@ -259,8 +298,13 @@
                         if (workOrder.getUnitId().equals(unitId)) {
                             //宸ュ崟涓嬪彂鏃堕棿
                             Date createTime = workOrder.getDistributeTime();
-                            Date auditTime = workOrder.getAuditTime();
-                            double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60);
+                            List<Date> auditTimes = auditTimeMap.get(workOrder.getWorkOrderNo());
+                            List<Date> handleTimes = handleTimeMap.get(workOrder.getWorkOrderNo());
+                            //鎷垮埌瀹℃牳鏃堕棿
+                            long auditDuration = getAuditDuration(auditTimes, handleTimes);
+                            //瀹℃牳閫氳繃鏃堕棿
+                            Date passTime = Collections.max(auditTimes);
+                            double diffTime = (double) (passTime.getTime() - createTime.getTime() -auditDuration) / (1000 * 60 * 60);
                             //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯
                             for (CalculateRuleVO rule : rules) {
                                 if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) {
@@ -294,6 +338,27 @@
         log.info("缁撴潫鎵ц宸ュ崟鎵e垎");
     }
 
+    private long getAuditDuration(List<Date> auditTimes, List<Date> handleTimes) {
+        //璁$畻鍑哄鏍哥殑鎬绘椂闂�(鐢变簬鏁呴殰绫诲瀷浼氭洿鏂板鑷村彲鑳芥彁浜ょ殑鏃堕棿鐐规暟閲忓拰瀹℃牳鐨勬椂闂寸偣鏁伴噺涓嶄竴鑷�)
+        long auditDuration = 0;
+        for (Date auditTime : auditTimes) {
+            //绂昏繖娆″鏍告渶杩戠殑涓�娆℃彁浜ゅ鐞嗘椂闂寸偣
+            Date nearestHandleTime = null;
+            long minDifference = Long.MAX_VALUE;
+            for (Date handleTime : handleTimes) {
+                if(handleTime.before(auditTime)) {
+                    long difference = Math.abs(auditTime.getTime() - handleTime.getTime());
+                    if (difference < minDifference) {
+                        minDifference = difference;
+                        nearestHandleTime = handleTime;
+                    }
+                }
+            }
+            auditDuration += auditTime.getTime()-nearestHandleTime.getTime();
+        }
+        return auditDuration;
+    }
+
 
     /**
      * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎
@@ -318,7 +383,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()))
@@ -398,8 +463,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/java/com/ycl/task/HKTask.java b/ycl-server/src/main/java/com/ycl/task/HKTask.java
index 829671b..c6cad22 100644
--- a/ycl-server/src/main/java/com/ycl/task/HKTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -1,13 +1,29 @@
 package com.ycl.task;
 
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mongodb.client.result.DeleteResult;
+import com.ycl.feign.HKClient;
 import com.ycl.feign.HkApiUtil;
+import com.ycl.feign.UYClient;
+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.param.HK.*;
 import com.ycl.platform.domain.result.HK.*;
+import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
+import com.ycl.platform.domain.result.UY.VideoOnlineResult;
+import com.ycl.platform.domain.vo.UpdateOnlineVO;
+import com.ycl.platform.mapper.CheckIndexCarMapper;
+import com.ycl.platform.mapper.CheckIndexFaceMapper;
+import com.ycl.platform.mapper.TMonitorMapper;
+import com.ycl.platform.mapper.WorkOrderMapper;
 import com.ycl.platform.service.*;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
+import constant.CheckConstants;
+import enumeration.general.AreaDeptEnum;
+import enumeration.general.PublishType;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -17,9 +33,11 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 //娴峰悍瀵规帴鏁版嵁浠诲姟
 @Slf4j
@@ -32,12 +50,34 @@
     public String appKey;
     @Value("${HK.appSecret}")
     public String appSecret;
+    @Value("${HK.carCode}")
+    public String carCode;
+    @Value("${HK.faceCode}")
+    public String faceCode;
+    @Value("${HK.carProvinceCode}")
+    public String carProvinceCode;
+    @Value("${HK.faceProvinceCode}")
+    public String faceProvinceCode;
     @Autowired
     private MongoTemplate mongoTemplate;
     @Autowired
     private IYwThresholdService ywThresholdService;
     @Autowired
     private YwPointService pointService;
+    @Autowired
+    private TMonitorMapper monitorMapper;
+    @Autowired
+    private UYErrorTypeCheckService uyErrorTypeCheckService;
+    @Autowired
+    private HKClient hkClient;
+    @Autowired
+    private ICheckIndexCarService carService;
+    @Autowired
+    private CheckIndexCarMapper carMapper;
+    @Autowired
+    private ICheckIndexFaceService faceService;
+    @Autowired
+    private CheckIndexFaceMapper faceMapper;
 
     //杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
     public void vehicleDeviceInspectionTask() {
@@ -47,7 +87,7 @@
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
         param.setDataType(ApiConstants.HK_DataType_CAR);
-        List<VehicleDeviceInspectionResult> list = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v2/data/vehFullAmount/query", param, VehicleDeviceInspectionResult.class);
+        List<VehicleDeviceInspectionResult> list = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v2/data/vehFullAmount/query", param, VehicleDeviceInspectionResult.class);
         if (!CollectionUtils.isEmpty(list)) {
             //濡傛灉瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
@@ -57,7 +97,7 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(list);
+            pointService.setDeviceTagByGB(list, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insertAll(list);
             //鍚屾鐨勬暟鎹繘琛屽伐鍗曢槇鍊煎鐞�
@@ -76,7 +116,7 @@
         param.setPageNo(ApiConstants.PageNo);
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
-        List<FaceDeviceInspectionResult> list = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v2/data/faceFullAmount/query", param, FaceDeviceInspectionResult.class);
+        List<FaceDeviceInspectionResult> list = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v2/data/faceFullAmount/query", param, FaceDeviceInspectionResult.class);
         if (!CollectionUtils.isEmpty(list)) {
             //濡傛灉瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
@@ -86,7 +126,7 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(list);
+            pointService.setDeviceTagByGB(list, CheckConstants.Rule_Category_Face);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insertAll(list);
             //鍚屾鐨勬暟鎹繘琛屽伐鍗曢槇鍊煎鐞�
@@ -107,7 +147,7 @@
         carParam.setPageSize(ApiConstants.HKPageSize);
         carParam.setDate(DateUtils.getDate());
         carParam.setDataType(ApiConstants.HK_DataType_CAR);
-        List<SnapshotDataMonitorResult> carList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/snapCountDetail/query", carParam, SnapshotDataMonitorResult.class);
+        List<SnapshotDataMonitorResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/snapCountDetail/query", carParam, SnapshotDataMonitorResult.class);
         if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
@@ -119,12 +159,10 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(carList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
             carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR));
             mongoTemplate.insertAll(carList);
-            //TODO:鏇存柊point琛ㄥ湪绾跨姸鎬侊紙鏈夋姄鎷嶉噺瑙嗕綔鍦ㄧ嚎锛�
-            //宸ュ崟
         }
 
         /** 浜鸿劯鏁版嵁 */
@@ -133,9 +171,8 @@
         faceParam.setPageSize(ApiConstants.HKPageSize);
         faceParam.setDate(DateUtils.getDate());
         faceParam.setDataType(ApiConstants.HK_DataType_FACE);
-        List<SnapshotDataMonitorResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/snapCountDetail/query", faceParam, SnapshotDataMonitorResult.class);
+        List<SnapshotDataMonitorResult> faceList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/snapCountDetail/query", faceParam, SnapshotDataMonitorResult.class);
         if (!CollectionUtils.isEmpty(faceList)) {
-            log.info("缁撴灉鏁版嵁澶у皬锛歿}",faceList.size());
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))
@@ -146,14 +183,62 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(faceList, CheckConstants.Rule_Category_Face);
             //瀛樻斁鍦╩ongo涓�
             faceList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE));
             mongoTemplate.insertAll(faceList);
-            //TODO:鏇存柊point琛ㄥ湪绾跨姸鎬侊紙鏈夋姄鎷嶉噺瑙嗕綔鍦ㄧ嚎锛�
-            //宸ュ崟
         }
-
+        //淇敼online鐘舵��
+        List<SnapshotDataMonitorResult> totalResult = new ArrayList<>();
+        totalResult.addAll(carList);
+        totalResult.addAll(faceList);
+        if (!CollectionUtils.isEmpty(totalResult)) {
+            //鍏堟嬁浼樹簯鐨勫湪绾匡紝杩囨护鎺変紭浜戝凡鏈夌殑鍥芥爣鐮�
+            Query query = new Query();
+            query.addCriteria(Criteria
+                    .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            List<VideoOnlineResult> results = mongoTemplate.find(query, VideoOnlineResult.class);
+            if (!CollectionUtils.isEmpty(results)) {
+                Date now = new Date();
+                List<String> uyNoList = results.stream().map(VideoOnlineResult::getNo).collect(Collectors.toList());
+                List<String> numbers = totalResult.stream().filter(result->!uyNoList.contains(result.getExternalIndexCode()))
+                        .map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList());
+                //鎺掗櫎鎺変紭浜戜笖涓嶅寘鍚棰戣澶囩殑鍥芥爣
+                Map<String, TMonitor> map = monitorMapper.selectList(new QueryWrapper<TMonitor>()
+                                .in("serial_number", numbers))
+                        .stream().filter(monitor -> monitor.getCameraFunType()!=null && !monitor.getCameraFunType().contains("1"))
+                        .collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
+                List<UpdateOnlineVO> willUpdateList = new ArrayList<>();
+                totalResult.forEach(item -> {
+                    TMonitor monitor = map.get(item.getExternalIndexCode());
+                    if(monitor!=null) {
+                        UpdateOnlineVO vo = new UpdateOnlineVO();
+                        vo.setOnline(item.getDataCount() > 0 ? 1 : -1);
+                        vo.setSerialNumber(monitor.getSerialNumber());
+                        vo.setUpdateTime(now);
+                        willUpdateList.add(vo);
+                    }
+                });
+                if(!CollectionUtils.isEmpty(willUpdateList)) monitorMapper.updateOnlineFromHk(willUpdateList);
+//            List<UpdateOnlineVO> willUpdateList = totalResult.stream().map(item -> {
+//                UpdateOnlineVO vo = new UpdateOnlineVO();
+//                vo.setOnline(item.getDataCount() > 0 ? 1 : -1);
+//                vo.setIp(map.get(item.getExternalIndexCode()).getIp());
+//                vo.setUpdateTime(now);
+//                return vo;
+//            }).collect(Collectors.toList());
+//            monitorMapper.updateOnlineFromUyOrHk(willUpdateList);
+//            //绂荤嚎鐢熸垚宸ュ崟,涓�涓猧p鍙敓鎴愪竴涓伐鍗�
+//            List<SnapshotDataMonitorResult> workOrders = new ArrayList<>(totalResult.stream()
+//                    .filter(item -> ApiConstants.UY_OnlineSite_Offline.equals(item.getDataCount() > 0 ? 1 : -1))
+//                    .collect(Collectors.toMap(
+//                            SnapshotDataMonitorResult::getIp,
+//                            Function.identity(),
+//                            (existing, replacement) -> existing // 濡傛灉閬囧埌鐩稿悓鐨� IP锛屼繚鐣欑涓�涓紙existing锛�
+//                    )).values());
+//            uyErrorTypeCheckService.hkOnlineCheck(workOrders);
+            }
+        }
         log.info("缁撴潫鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹悓姝�");
     }
 
@@ -165,7 +250,7 @@
         param.setPageNo(ApiConstants.PageNo);
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
-        List<MonitoringDetailResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/device/cameraExpDetailInfo/query", param, MonitoringDetailResult.class);
+        List<MonitoringDetailResult> faceList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/device/cameraExpDetailInfo/query", param, MonitoringDetailResult.class);
         if (!CollectionUtils.isEmpty(faceList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
@@ -176,7 +261,7 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(faceList, CheckConstants.Rule_Category_Face);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insertAll(faceList);
         }
@@ -191,20 +276,20 @@
         param.setPageNo(ApiConstants.PageNo);
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
-        List<CrossDetailResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/device/crossExpDetailInfo/query", param, CrossDetailResult.class);
-        if (!CollectionUtils.isEmpty(faceList)) {
+        List<CrossDetailResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/device/crossExpDetailInfo/query", param, CrossDetailResult.class);
+        if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
             DeleteResult result = mongoTemplate.remove(query, CrossDetailResult.class);
-            faceList.stream().forEach(item -> {
+            carList.stream().forEach(item -> {
                 if (Objects.nonNull(item.getExternalIndexCode())) {
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(faceList);
+            mongoTemplate.insertAll(carList);
         }
         log.info("缁撴潫鍗″彛灞炴�х洃娴嬬粨鏋滄暟鎹悓姝�");
     }
@@ -218,21 +303,21 @@
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
         param.setDataType(ApiConstants.HK_DataType_CAR);
-        List<DataIntegrityMonitoringResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/attributeIntegrity/query", param, DataIntegrityMonitoringResult.class);
+        List<DataIntegrityMonitoringResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/attributeIntegrity/query", param, DataIntegrityMonitoringResult.class);
 
-        if (!CollectionUtils.isEmpty(faceList)) {
+        if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
             DeleteResult result = mongoTemplate.remove(query, DataIntegrityMonitoringResult.class);
-            faceList.stream().forEach(item -> {
+            carList.stream().forEach(item -> {
                 if (Objects.nonNull(item.getExternalIndexCode())) {
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(faceList);
+            mongoTemplate.insertAll(carList);
         }
         log.info("缁撴潫鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋滄暟鎹悓姝�");
     }
@@ -246,21 +331,21 @@
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
         param.setDataType(ApiConstants.HK_DataType_CAR);
-        List<AttrRecognitionMonitorResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/attributeRecognition/query", param, AttrRecognitionMonitorResult.class);
+        List<AttrRecognitionMonitorResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/attributeRecognition/query", param, AttrRecognitionMonitorResult.class);
 
-        if (!CollectionUtils.isEmpty(faceList)) {
+        if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
             DeleteResult result = mongoTemplate.remove(query, AttrRecognitionMonitorResult.class);
-            faceList.stream().forEach(item -> {
+            carList.stream().forEach(item -> {
                 if (Objects.nonNull(item.getExternalIndexCode())) {
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(faceList);
+            mongoTemplate.insertAll(carList);
         }
         log.info("缁撴潫灞炴�ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹悓姝�");
 
@@ -276,7 +361,7 @@
         carParam.setPageSize(ApiConstants.HKPageSize);
         carParam.setDate(DateUtils.getDate());
         carParam.setDataType(ApiConstants.HK_DataType_CAR);
-        List<SnapshotDelayMonitorResult> carList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/snapAgingDetail/query", carParam, SnapshotDelayMonitorResult.class);
+        List<SnapshotDelayMonitorResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/snapAgingDetail/query", carParam, SnapshotDelayMonitorResult.class);
 
         if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
@@ -291,7 +376,7 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(carList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             mongoTemplate.insertAll(carList);
         }
 
@@ -301,7 +386,7 @@
         faceParam.setPageSize(ApiConstants.HKPageSize);
         faceParam.setDate(DateUtils.getDate());
         faceParam.setDataType(ApiConstants.HK_DataType_FACE);
-        List<SnapshotDelayMonitorResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/snapAgingDetail/query", faceParam, SnapshotDelayMonitorResult.class);
+        List<SnapshotDelayMonitorResult> faceList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/snapAgingDetail/query", faceParam, SnapshotDelayMonitorResult.class);
 
         if (!CollectionUtils.isEmpty(faceList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
@@ -316,7 +401,7 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(faceList, CheckConstants.Rule_Category_Face);
             mongoTemplate.insertAll(faceList);
         }
         log.info("缁撴潫鎶撴媿鏁版嵁鏃跺欢鐩戞祴缁撴灉鏁版嵁鍚屾");
@@ -331,21 +416,21 @@
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
         param.setDataType(ApiConstants.HK_DataType_CAR);
-        List<PicAccessResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v1/data/picAccessDetail/query", param, PicAccessResult.class);
+        List<PicAccessResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v1/data/picAccessDetail/query", param, PicAccessResult.class);
 
-        if (!CollectionUtils.isEmpty(faceList)) {
+        if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
             DeleteResult result = mongoTemplate.remove(query, PicAccessResult.class);
-            faceList.stream().forEach(item -> {
+            carList.stream().forEach(item -> {
                 if (Objects.nonNull(item.getExternalIndexCode())) {
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(faceList);
+            mongoTemplate.insertAll(carList);
         }
         log.info("缁撴潫鍥剧墖璁块棶鐩戞祴缁撴灉鏁版嵁鍚屾");
     }
@@ -359,21 +444,21 @@
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
         param.setDataType(ApiConstants.HK_DataType_CAR);
-        List<VehicleDeviceSamplingResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v2/data/vehSampleAmount/query", param, VehicleDeviceSamplingResult.class);
+        List<VehicleDeviceSamplingResult> carList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v2/data/vehSampleAmount/query", param, VehicleDeviceSamplingResult.class);
 
-        if (!CollectionUtils.isEmpty(faceList)) {
+        if (!CollectionUtils.isEmpty(carList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria
                     .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
             DeleteResult result = mongoTemplate.remove(query, VehicleDeviceSamplingResult.class);
-            faceList.stream().forEach(item -> {
+            carList.stream().forEach(item -> {
                 if (Objects.nonNull(item.getExternalIndexCode())) {
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(carList, CheckConstants.Rule_Category_Car);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(faceList);
+            mongoTemplate.insertAll(carList);
         }
         log.info("缁撴潫杞﹁締璁惧鎶芥鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
     }
@@ -386,7 +471,7 @@
         param.setPageNo(ApiConstants.PageNo);
         param.setPageSize(ApiConstants.HKPageSize);
         param.setDate(DateUtils.getDate());
-        List<FaceDeviceSamplingResult> faceList = HkApiUtil.sendAPI(host,appKey,appSecret,"/api/dqd/service/rs/v2/data/faceSampleAmount/query", param, FaceDeviceSamplingResult.class);
+        List<FaceDeviceSamplingResult> faceList = HkApiUtil.sendAPI(host, appKey, appSecret, "/api/dqd/service/rs/v2/data/faceSampleAmount/query", param, FaceDeviceSamplingResult.class);
 
         if (!CollectionUtils.isEmpty(faceList)) {
             //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
@@ -398,17 +483,148 @@
                     item.setNo(item.getExternalIndexCode());
                 }
             });
-            pointService.setDeviceTagByGB(faceList);
+            pointService.setDeviceTagByGB(faceList, CheckConstants.Rule_Category_Face);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insertAll(faceList);
         }
         log.info("缁撴潫浜鸿劯璁惧鎶芥鎸囨爣鐩戞祴缁撴灉鏁版嵁鍚屾");
     }
 
+    //鑰冩牳鎴愮哗
+    public void HkScoreTask() {
+        log.info("寮�濮嬫墽琛屾捣搴疯�冩牳鎴愮哗鏁版嵁");
+        //鍑嗗鏂板鎴栦慨鏀圭殑鏁版嵁
+        List<CheckIndexCar> cars = new ArrayList<>();
+        List<CheckIndexFace> faces = new ArrayList<>();
+        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+        List<CheckIndexFace> checkIndexFaceList = faceMapper.selectToday(utils.DateUtils.getDate());
+        List<CheckIndexCar> checkIndexCarList = carMapper.selectToday(utils.DateUtils.getDate());
+
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        // 鑾峰彇褰撳墠鏃堕棿鐨凜alendar瀹炰緥
+        Calendar calendar = Calendar.getInstance();
+        // 璁剧疆鏃堕棿涓哄墠涓�澶�
+        calendar.add(Calendar.DATE, -1);
+        // 鑾峰彇鍓嶄竴澶╃殑Date瀵硅薄
+        Date yesterday = calendar.getTime();
+        //鍏堣姹傚叏閲忔暟鎹�
+        ScoreParam param = new ScoreParam();
+        param.setStartDate(format.format(yesterday));
+        param.setEndDate(format.format(yesterday));
+        param.setFocusFlag(ApiConstants.HK_FOCUS_FLAG_ALL);
+        param.setCarTree(carCode);
+        param.setFaceTree(faceCode);
+        JSONObject scoreJson = hkClient.getScore(param);
+        if (scoreJson != null) {
+            String code = scoreJson.getString("code");
+            if (ApiConstants.HKSuccessCode.equals(code)) {
+                List<HKScoreResult> data = scoreJson.getList("data", HKScoreResult.class);
+                //鏍规嵁鏁版嵁杞崲涓篿ndex瀵硅薄
+                data.forEach(score -> {
+                    CheckIndexCar car = new CheckIndexCar();
+                    CheckIndexFace face = new CheckIndexFace();
+                    score2Index(score, car, face);
+                    car.setExamineTag(CheckConstants.Examine_Tag_County);
+                    face.setExamineTag(CheckConstants.Examine_Tag_County);
+                    Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
+                            .filter(index -> CheckConstants.Examine_Tag_County.equals(index.getExamineTag()) && car.getDeptId().equals(index.getDeptId()))
+                            .findFirst();
+                    Optional<CheckIndexFace> faceFirst = checkIndexFaceList.stream()
+                            .filter(index -> CheckConstants.Examine_Tag_County.equals(index.getExamineTag()) && face.getDeptId().equals(index.getDeptId()))
+                            .findFirst();
+                    if (carFirst.isPresent()) {
+                        car.setId(carFirst.get().getId());
+                    }
+                    if (faceFirst.isPresent()) {
+                        face.setId(faceFirst.get().getId());
+                    }
+                    cars.add(car);
+                    faces.add(face);
+                });
+            }
+        }
+
+        //鍏堣姹傜渷鍘呮暟鎹�
+        ScoreParam provinceParam = new ScoreParam();
+        provinceParam.setStartDate(format.format(yesterday));
+        provinceParam.setEndDate(format.format(yesterday));
+        provinceParam.setFocusFlag(ApiConstants.HK_FOCUS_FLAG_ALL);
+        provinceParam.setCarTree(carProvinceCode);
+        provinceParam.setFaceTree(faceProvinceCode);
+        JSONObject scoreProvinceJson = hkClient.getScore(provinceParam);
+        if (scoreProvinceJson != null) {
+            String code = scoreProvinceJson.getString("code");
+            if (ApiConstants.HKSuccessCode.equals(code)) {
+                List<HKScoreResult> data = scoreProvinceJson.getList("data", HKScoreResult.class);
+
+                //鏍规嵁鏁版嵁杞崲涓篿ndex瀵硅薄
+                data.forEach(score -> {
+                    CheckIndexCar car = new CheckIndexCar();
+                    CheckIndexFace face = new CheckIndexFace();
+                    score2Index(score, car, face);
+                    car.setExamineTag(CheckConstants.Examine_Tag_Province);
+                    face.setExamineTag(CheckConstants.Examine_Tag_Province);
+                    Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
+                            .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && car.getDeptId().equals(index.getDeptId()))
+                            .findFirst();
+                    Optional<CheckIndexFace> faceFirst = checkIndexFaceList.stream()
+                            .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && face.getDeptId().equals(index.getDeptId()))
+                            .findFirst();
+                    if (carFirst.isPresent()) {
+                        car.setId(carFirst.get().getId());
+                    }
+                    if (faceFirst.isPresent()) {
+                        face.setId(faceFirst.get().getId());
+                    }
+                    cars.add(car);
+                    faces.add(face);
+                });
+            }
+        }
+        //瀛樻斁鎴愮哗鍒癿ysql锛屽鏋滃瓨鍦ㄥ垯鏇挎崲涓嶅瓨鍦ㄥ氨鏂板銆�
+        if (!CollectionUtils.isEmpty(cars)) carService.saveOrUpdateBatch(cars);
+        if (!CollectionUtils.isEmpty(faces)) faceService.saveOrUpdateBatch(faces);
+        log.info("缁撴潫娴峰悍鑰冩牳鎴愮哗鏁版嵁");
+    }
+
+    private void score2Index(HKScoreResult score, CheckIndexCar car, CheckIndexFace face) {
+        car.setDeptId(Long.parseLong(AreaDeptEnum.fromCode(score.getAreaCode()).getDeptId() + ""));
+        car.setCreateTime(new Date());
+        car.setPublish(PublishType.PUBLISHED.getCode());
+        face.setDeptId(Long.parseLong(AreaDeptEnum.fromCode(score.getAreaCode()).getDeptId() + ""));
+        face.setCreateTime(new Date());
+        face.setPublish(PublishType.PUBLISHED.getCode());
+
+        car.setViewConnectStability(new BigDecimal(score.getDownCarDataUploadScoreString() == null ? "1" : score.getDownCarDataUploadScoreString()));
+        car.setSiteOnline(new BigDecimal(score.getDownCrossQualityCarScoreString() == null ? "1" : score.getDownCrossQualityCarScoreString()));
+        car.setDeviceDirectoryConsistent(new BigDecimal(score.getDownCrossNumPushCarScoreString() == null ? "1" : score.getDownCrossNumPushCarScoreString()));
+        //TODO:娌℃壘鍒拌�冩牳椤�
+        car.setVehicleInformationCollectionAccuracy(new BigDecimal("1"));
+        car.setVehicleCaptureIntegrity(new BigDecimal(score.getDownCrossAllCarDataIntegrityScoreString() == null ? "1" : score.getDownCrossAllCarDataIntegrityScoreString()));
+        //娴峰悍鏄涓�1鐨勶紝浣嗘槸鎺ュ彛鎺ㄧ殑鍘熷鏁版嵁
+        car.setVehicleCaptureAccuracy(new BigDecimal("1"));
+        car.setVehicleTimingAccuracy(new BigDecimal(score.getDownCrossCarInvertScoreString() == null ? "1" : score.getDownCrossCarInvertScoreString()));
+        car.setVehicleUploadTimeliness(new BigDecimal(score.getDownCrossAllCarDelayScoreString() == null ? "1" : score.getDownCrossAllCarDelayScoreString()));
+        //TODO:娌℃壘鍒拌�冩牳椤�
+        car.setVehicleUrlAvailability(new BigDecimal("1"));
+        car.setVehiclePictureAvailability(new BigDecimal(score.getDownCrossPictureQualityCarScoreString() == null ? "1" : score.getDownCrossPictureQualityCarScoreString()));
+
+        face.setViewConnectStability(new BigDecimal(score.getDownFaceDataUploadScoreString() == null ? "1" : score.getDownFaceDataUploadScoreString()));
+        face.setSiteOnline(new BigDecimal(score.getDownFaceDataUploadScoreString() == null ? "1" : score.getDownFaceDataUploadScoreString()));
+        face.setDeviceDirectoryConsistent(new BigDecimal(score.getDownCrossNumPushFaceScoreString() == null ? "1" : score.getDownCrossNumPushFaceScoreString()));
+        //TODO:娌℃壘鍒拌�冩牳椤�
+        face.setFaceInformationCollectionAccuracy(new BigDecimal("1"));
+        //TODO:娌℃壘鍒拌�冩牳椤�
+        face.setFacePictureQualification(new BigDecimal("1"));
+        face.setFaceTimingAccuracy(new BigDecimal(score.getDownCrossFaceInvertScoreString() == null ? "1" : score.getDownCrossFaceInvertScoreString()));
+        face.setFaceUploadTimeliness(new BigDecimal(score.getDownCrossAllFaceDelayScoreString() == null ? "1" : score.getDownCrossAllFaceDelayScoreString()));
+        face.setFacePictureAvailability(new BigDecimal(score.getDownCrossPictureQualityFaceScoreString() == null ? "1" : score.getDownCrossPictureQualityFaceScoreString()));
+    }
+
     //瑙f瀽鏁版嵁
     private <T> List<T> getDataList(JSONObject jsonObject, Class<T> resultClass, String message) {
         if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) {
-            log.info("鏁版嵁鏍煎紡"+jsonObject);
+            log.info("鏁版嵁鏍煎紡" + jsonObject);
             JSONObject data = jsonObject.getJSONObject("data");
             if (data == null) {
                 log.error(message, jsonObject);
diff --git a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
index 91c191c..b13a2cd 100644
--- a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -29,6 +29,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
@@ -61,7 +62,10 @@
     private YwPointMapper ywPointMapper;
     @Autowired
     private RedisTemplate redisTemplate;
-
+    @Value("${DH.userName}")
+    public String userName;
+    @Value("${DH.password}")
+    public String password;
     //鍚屾鐐逛綅鍦ㄧ嚎鐜囧埌mongo(寮冪敤)
 //    public void siteOnline() {
 //        log.info("寮�濮嬪悓姝ョ偣浣嶅湪绾跨巼鍒癿ongo");
@@ -83,72 +87,73 @@
 //        Date yesterday = DateUtils.addDays(new Date(), -1);
         Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
         List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class);
-        //mongo鍝佺墝鏁版嵁
-        Query OSDQuery = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
-        Map<String, OsdCheckResult> osdMap = mongoTemplate.find(query, OsdCheckResult.class).stream().collect(Collectors.toMap(OsdCheckResult::getDeviceNo, Function.identity()));
-        //鏁版嵁搴搈onitor琛ㄦ暟鎹�
-        Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
-        //鐐逛綅鏁版嵁
-        Map<String, YwPoint> pointMap = ywPointService.list(new QueryWrapper<YwPoint>()).stream().collect(Collectors.toMap(YwPoint::getSerialNumber, Function.identity()));
+        if(!CollectionUtils.isEmpty(oneMachineFileResults)) {
+            //mongo鍝佺墝鏁版嵁
+            Query OSDQuery = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+            Map<String, OsdCheckResult> osdMap = mongoTemplate.find(query, OsdCheckResult.class).stream().collect(Collectors.toMap(OsdCheckResult::getDeviceNo, Function.identity()));
+            //鏁版嵁搴搈onitor琛ㄦ暟鎹�
+            Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
+            //鐐逛綅鏁版嵁
+            Map<String, YwPoint> pointMap = ywPointService.list(new QueryWrapper<YwPoint>()).stream().collect(Collectors.toMap(YwPoint::getSerialNumber, Function.identity()));
 
-        //閲嶇偣鐐逛綅闆嗗悎瀛楀吀(瑙f瀽SXJCJQY瀛楁)
-        SysDictData sysDictData = new SysDictData();
-        sysDictData.setDictType("platform_important_site");
-        List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData);
-        //閲囬泦鍖哄煙涓洪噸鐐圭偣浣嶇殑闆嗗悎
-        List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList());
+            //閲嶇偣鐐逛綅闆嗗悎瀛楀吀(瑙f瀽SXJCJQY瀛楁)
+            SysDictData sysDictData = new SysDictData();
+            sysDictData.setDictType("platform_important_site");
+            List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData);
+            //閲囬泦鍖哄煙涓洪噸鐐圭偣浣嶇殑闆嗗悎
+            List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList());
 
-        //鍑嗗鎻掑叆璁惧琛ㄧ殑鏁版嵁
-        List<TMonitor> monitorList = new ArrayList<>();
-        //鍑嗗鎻掑叆鐐逛綅琛ㄧ殑鏁版嵁
-        List<YwPoint> ywPointList = new ArrayList<>();
+            //鍑嗗鎻掑叆璁惧琛ㄧ殑鏁版嵁
+            List<TMonitor> monitorList = new ArrayList<>();
+            //鍑嗗鎻掑叆鐐逛綅琛ㄧ殑鏁版嵁
+            List<YwPoint> ywPointList = new ArrayList<>();
 
-
-        //鍏ㄥ勾鐣欏瓨
-        for (MonitorQualifyResult result : oneMachineFileResults) {
-            TMonitor monitor = getMonitor(result, monitorVOMap, osdMap);
-            YwPoint point = getPoint(result, pointMap, importantSite);
-            monitorList.add(monitor);
-            ywPointList.add(point);
-        }
-        //娣诲姞鑰佹暟鎹�
-        List<String> numbers = CollectionUtils.isEmpty(monitorList) ? new ArrayList<>() : monitorList.stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
-        monitorVOMap.forEach((key, value) -> {
-            if (!numbers.contains(key)) {
-                TMonitor monitor = new TMonitor();
-                BeanUtils.copyProperties(value, monitor);
-                //濉ˉ鍝佺墝
-                OsdCheckResult osdCheckResult = osdMap.get(key);
-                if (osdCheckResult != null) {
-                    monitor.setDeviceType(osdCheckResult.getDeviceBrand());
-                }
-
+            //鍏ㄥ勾鐣欏瓨
+            for (MonitorQualifyResult result : oneMachineFileResults) {
+                TMonitor monitor = getMonitor(result, monitorVOMap, osdMap);
+                YwPoint point = getPoint(result, pointMap, importantSite);
                 monitorList.add(monitor);
+                ywPointList.add(point);
             }
-        });
-        List<String> points = CollectionUtils.isEmpty(ywPointList) ? new ArrayList<>() : ywPointList.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
-        pointMap.forEach((key, value) -> {
-            //鑰佽澶囩姸鎬佹敼涓轰笉鍙備笌鑰冩牳
-            if (!points.contains(key)) {
-                value.setExamineStatus(Boolean.FALSE);
-                //鍗曚綅璁剧疆涓虹┖
-                value.setUnitId(null);
-                ywPointList.add(value);
-            }
-        });
+            //娣诲姞鑰佹暟鎹�
+            List<String> numbers = CollectionUtils.isEmpty(monitorList) ? new ArrayList<>() : monitorList.stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
+            monitorVOMap.forEach((key, value) -> {
+                if (!numbers.contains(key)) {
+                    TMonitor monitor = new TMonitor();
+                    BeanUtils.copyProperties(value, monitor);
+                    //濉ˉ鍝佺墝
+                    OsdCheckResult osdCheckResult = osdMap.get(key);
+                    if (osdCheckResult != null) {
+                        monitor.setDeviceType(osdCheckResult.getDeviceBrand());
+                    }
 
-        log.info("result闆嗗悎{},璁惧闆嗗悎{},鐐逛綅闆嗗悎{}", oneMachineFileResults.size(), monitorList.size(), ywPointList.size());
-        //鎻掑叆鏁版嵁搴�
-        if (!CollectionUtils.isEmpty(monitorList)) {
-            monitorMapper.deleteAll();
-            monitorService.saveBatch(monitorList);
-        }
-        if (!CollectionUtils.isEmpty(ywPointList)) {
-            ywPointMapper.deleteAll();
-            ywPointService.saveBatch(ywPointList);
-        }
-        //鏂扮殑鏁版嵁鏀惧叆Redis涓瓑寰呰�冩牳鎸囨爣浠诲姟浣跨敤(寮冪敤锛屾敼涓烘爣绛惧舰寮�)
+                    monitorList.add(monitor);
+                }
+            });
+            List<String> points = CollectionUtils.isEmpty(ywPointList) ? new ArrayList<>() : ywPointList.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
+            pointMap.forEach((key, value) -> {
+                //鑰佽澶囩姸鎬佹敼涓轰笉鍙備笌鑰冩牳
+                if (!points.contains(key)) {
+                    value.setExamineStatus(Boolean.FALSE);
+                    //鍗曚綅璁剧疆涓虹┖
+                    value.setUnitId(null);
+                    ywPointList.add(value);
+                }
+            });
+
+            log.info("result闆嗗悎{},璁惧闆嗗悎{},鐐逛綅闆嗗悎{}", oneMachineFileResults.size(), monitorList.size(), ywPointList.size());
+            //鎻掑叆鏁版嵁搴�
+            if (!CollectionUtils.isEmpty(monitorList)) {
+                monitorMapper.deleteAll();
+                monitorService.saveBatch(monitorList);
+            }
+            if (!CollectionUtils.isEmpty(ywPointList)) {
+                ywPointMapper.deleteAll();
+                ywPointService.saveBatch(ywPointList);
+            }
+            //鏂扮殑鏁版嵁鏀惧叆Redis涓瓑寰呰�冩牳鎸囨爣浠诲姟浣跨敤(寮冪敤锛屾敼涓烘爣绛惧舰寮�)
 //        redisTemplate.opsForValue().set(RedisConstant.New_Monitor_Set, JSONArray.toJSONString(newMonitorList));
+        }
         log.info("缁撴潫鍚屾mongodb涓�鏈轰竴妗e埌鏁版嵁搴�");
     }
 
@@ -161,11 +166,15 @@
             ywPoint.setStatus(PointStatus.WAIT.getDesc());
             ywPoint.setSerialNumber(result.getSerialNumber().getValue());
             ywPoint.setImportantTag(Boolean.FALSE);
-            ywPoint.setProvinceTag(Boolean.FALSE);
+            ywPoint.setProvinceTagVideo(Boolean.FALSE);
+            ywPoint.setProvinceTagCar(Boolean.FALSE);
+            ywPoint.setProvinceTagFace(Boolean.FALSE);
             ywPoint.setImportantCommandImageTag(Boolean.FALSE);
             ywPoint.setCreateTime(new Date());
             ywPoint.setUpdateTime(new Date());
             ywPoint.setOnline(ApiConstants.UY_OnlineSite_Unknown);
+            ywPoint.setUsername(userName);
+            ywPoint.setPassword(password);
         }
         //鐘舵�佽缃负鑰冩牳璁惧
         ywPoint.setExamineStatus(Boolean.TRUE);
diff --git a/ycl-server/src/main/java/com/ycl/task/OsdTask.java b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
index 1eca90f..83c71f5 100644
--- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -2,6 +2,11 @@
 
 
 import com.mongodb.client.result.DeleteResult;
+import com.ycl.api.DH.lib.NetSDKLib;
+import com.ycl.api.DH.lib.structure.NET_CFG_GBMODE_INFO;
+import com.ycl.api.DH.lib.structure.NET_GBMODE_CUSTOMTITLE_INFO;
+import com.ycl.api.DH.lib.structure.NET_TITLE_OSD_INFO;
+import com.ycl.api.DH.module.LoginModule;
 import com.ycl.api.DH.utils.DHApi;
 import com.ycl.api.HK.HKApi;
 import com.ycl.api.YS.YSApi;
@@ -17,6 +22,7 @@
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.StringUtils;
 import constant.ApiConstants;
+import constant.CheckConstants;
 import enumeration.DeviceType;
 import enumeration.general.AreaDeptEnum;
 import lombok.extern.slf4j.Slf4j;
@@ -28,6 +34,9 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -35,6 +44,8 @@
 import java.util.concurrent.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+
+import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_GBMODE;
 
 @Slf4j
 @Component("OsdTask")
@@ -59,8 +70,10 @@
     public String YSUserName;
     @Value("${YS.password}")
     public String YSPassword;
+
     /**
      * 閫氳繃鏌ongoDB姣忔棩涓�鏈轰竴妗f暟鎹幏鍙栬澶噄p
+     * 绛涢�夎棰戣澶�
      * 閫氳繃璁惧ip銆佸搧鐗岃皟鐢ㄤ笉鍚宎pi鑾峰彇osd淇℃伅
      * 姣斿mongoDB涓�鏈轰竴妗d俊鎭紝鏁寸悊鎴恟esult瀛樺叆mongo
      * 鍚屾鍝佺墝鍒癿ysql
@@ -84,7 +97,7 @@
         List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class);
         //闇�瑕佽�冩牳鐨勬暟鎹�
         List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(serialNumbers)) {
+        if (!CollectionUtils.isEmpty(serialNumbers)) {
             ExecutorService executorService = new ThreadPoolExecutor(16,
                     128,
                     5000,
@@ -93,12 +106,15 @@
                     new ThreadPoolExecutor.CallerRunsPolicy()
             );
             List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers);
-            //杩囨护ip
-            monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList());
+            //杩囨护鎺夋棤鏁坕p骞剁瓫閫夊嚭瑙嗛璁惧
+            monitors = monitors.stream()
+                    .filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) &&
+                            !"127.0.0.1".equals(monitor.getIp()))
+                    .collect(Collectors.toList());
             List<Future<OSDResult>> futureList = new ArrayList<>(48);
             List<OSDResult> osdResultList = new ArrayList<>();
             for (TMonitor monitor : monitors) {
-                OSDCheckThread thread = new OSDCheckThread(monitor,HKUserName,HKPassword,DHUserName,DHPassword,YSUserName,YSPassword);
+                OSDCheckThread thread = new OSDCheckThread(monitor);
                 Future<OSDResult> future = executorService.submit(thread);
                 futureList.add(future);
             }
@@ -111,7 +127,7 @@
             List<OsdCheckResult> checkResults = new ArrayList<>();
             Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
             for (OSDResult osdResult : osdResultList) {
-                if(osdResult!=null) {
+                if (osdResult != null) {
                     TMonitor monitor = monitorMap.get(osdResult.getSerialNumber());
                     //灏佽OsdCheckResult
                     OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor);
@@ -127,7 +143,7 @@
                 Query pyQuery = new Query(Criteria
                         .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
                 DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class);
-                pointService.setDeviceTagByGB(checkResults);
+                pointService.setDeviceTagByGB(checkResults, CheckConstants.Rule_Category_Video);
                 //瀛樻斁鍦╩ongo涓�
                 mongoTemplate.insertAll(checkResults);
                 // 宸ュ崟鐢熸垚
@@ -159,13 +175,13 @@
         if (osdResult.getCheckTime() != null && osdResult.getOsdTime() != null) {
             long checkTime = osdResult.getCheckTime().getTime();
             long osdTime = osdResult.getOsdTime().getTime();
-            long timeDiff = (checkTime - osdTime) / 1000;
+            long timeDiff = Math.abs((checkTime - osdTime) / 1000);
             if (timeDiff <= 60) {
                 osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct);
             } else {
                 osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Error);
             }
-        }else {
+        } else {
             osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ラ�氶亾鍚嶆槸鍚︽纭�
@@ -176,7 +192,7 @@
             } else {
                 osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error);
             }
-        }else {
+        } else {
             osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ョ渷鏄惁姝g‘
@@ -186,7 +202,7 @@
             } else {
                 osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Error);
             }
-        }else {
+        } else {
             osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ュ競鏄惁姝g‘
@@ -196,7 +212,7 @@
             } else {
                 osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Error);
             }
-        }else {
+        } else {
             osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ュ尯鍘挎槸鍚︽纭�
@@ -207,10 +223,15 @@
             } else {
                 osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Error);
             }
-        }else {
+        } else {
             osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Unknown);
         }
     }
 
 
+    public void test() throws ExecutionException, InterruptedException {
+        log.info("娴嬭瘯鑾峰彇OSD");
+        OSDResult osd3 = DHApi.getOsd("51030446001320141102","51.95.68.3", DHUserName, DHPassword);
+        log.info("澶у崕缁撴灉鏁版嵁:{}",osd3);
+    }
 }
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 bd06ad5..d75304f 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -16,6 +16,7 @@
 import com.ycl.platform.domain.result.UY.VideoOnlineResult;
 import com.ycl.platform.domain.vo.UpdateOnlineVO;
 import com.ycl.platform.mapper.TMonitorMapper;
+import com.ycl.platform.mapper.WorkOrderMapper;
 import com.ycl.platform.service.UYErrorTypeCheckService;
 import com.ycl.platform.service.WorkOrderService;
 import com.ycl.platform.service.YwPointService;
@@ -25,11 +26,14 @@
 import com.ycl.utils.CheckPointUtil;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
+import constant.CheckConstants;
 import constant.RedisConstant;
 import enumeration.ErrorType;
 import enumeration.general.WorkOrderStatusEnum;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -56,6 +60,7 @@
     private final YwPointService pointService;
     private final TMonitorMapper monitorMapper;
     private final WorkOrderService workOrderService;
+    private final WorkOrderMapper workOrderMapper;
     private final SysConfigMapper sysConfigMapper;
     private final CheckPointUtil checkPointUtil;
     @Value("${youYun.tenantId}")
@@ -102,7 +107,7 @@
                                 item.setNo(item.getDeviceId());
                             }
                         });
-                        pointService.setDeviceTagByGB(records);
+                        pointService.setDeviceTagByGB(records, CheckConstants.Rule_Category_Video);
                         //瀛樻斁鍦╩ongo涓�
                         mongoTemplate.insertAll(records);
                         // 宸ュ崟鐢熸垚
@@ -151,7 +156,7 @@
                                 item.setNo(item.getSerialNumber().getShowValue());
                             }
                         });
-                        pointService.setDeviceTagByGB(records);
+                        pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Or);
                         pointService.setNew(records);
                         //瀛樻斁鍦╩ongo涓�
                         mongoTemplate.insertAll(records);
@@ -193,7 +198,9 @@
         List<TMonitorResult> monitorList = monitorMapper.getDistinctIP();
         //琛ュ厖閿欒鏃堕棿鐐�
         Query onlineQuery = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
-        Map<String, TMonitorResult> mongoMap = mongoTemplate.find(onlineQuery, TMonitorResult.class).stream().collect(Collectors.toMap(TMonitorResult::getNo, Function.identity()));
+        Map<String, TMonitorResult> mongoMap = mongoTemplate.find(onlineQuery, TMonitorResult.class)
+                .stream()
+                .collect(Collectors.toMap(TMonitorResult::getNo, Function.identity(), (existing, replacement) -> replacement));
         for (TMonitorResult result : monitorList) {
             TMonitorResult mongoData = mongoMap.get(result.getNo());
             if(mongoData!=null){
@@ -216,36 +223,6 @@
                                 ex.printStackTrace();
                             }
                             return null;
-//                            int checkTimes = 1;
-//                            int offLineTimes = 1;
-//                            Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getNo());
-//                            if (!CollectionUtils.isEmpty(map)) {
-//                                checkTimes = (Integer) map.get("checkTimes") + 1;
-//                                offLineTimes = (Integer) map.get("offLineTimes");
-//                            }else {
-//                                map = new HashMap<>();
-//                            }
-//                            monitor.setPingOnline(Boolean.FALSE);
-//                            monitor.setCheckCount(checkTimes);
-//                            monitor.setOffLineCount(offLineTimes);
-//                            List<Date> offLineTime = monitor.getOffLineTime();
-//                            if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>();
-//                            offLineTime.add(new Date());
-//                            monitor.setOffLineTime(offLineTime);
-//                            if (monitor.getOffLineCount() >= time) {
-//                                WorkOrder workOrder = new WorkOrder();
-//                                workOrder.setSerialNumber(monitor.getNo());
-//                                List<String> errList = new ArrayList<>();
-//                                errList.add(ErrorType.DEVICE_OFFLINE.getValue());
-//                                workOrder.setErrorTypeList(errList);
-//                                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
-//                                monitor.setWorkOrder(workOrder);
-//                            }
-//                            map.put("checkTimes", checkTimes);
-//                            map.put("offLineTimes", offLineTimes);
-//                            redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getNo(), map);
-//                            return monitor; // 杩斿洖澶辫触鐨勭粨鏋�
-
                         }))
                 .collect(Collectors.toList());
 
@@ -270,10 +247,9 @@
         List<String> offLineList = new ArrayList<>();
         List<String> onLineList = new ArrayList<>();
         //鏌ュ嚭鏁版嵁搴撶函杞﹁締鎴栫函浜鸿劯璁惧
-        List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
+//        List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
         dataList.forEach(item->{
-            //鏇存柊绾溅杈嗘垨绾汉鑴哥殑璁惧鐨勫湪绾跨姸鎬�(杩欓儴鍒嗚澶囦笉浼氭媺娴佹娴�)
-            if(item.getPingOnline() && !CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(item.getNo())) {
+            if(item.getPingOnline()) {
                 onLineList.add(item.getIp());
             } else if(!item.getPingOnline()) {
                 //绛涢�夊嚭ping绂荤嚎鐨勮澶囷紝鏇存敼鏁版嵁搴撲负绂荤嚎
@@ -288,15 +264,38 @@
         }
         //瀛樻斁鍒癿ongo
         if (!CollectionUtils.isEmpty(dataList)) {
+            List<TMonitorResult> mongoList = new ArrayList<>();
+            dataList.forEach(item->{
+                String monitorType = item.getMonitorType();
+                //鍚屼竴涓澶囧涓被鍨嬫瘡涓被鍨嬪瓨涓�鏉℃暟鎹紝浠ユ鍦ㄤ繚鐣欐暟鎹殑鎯呭喌涓嬪尯鍒嗙渷鍘呮爣绛�
+                if(StringUtils.isNotEmpty(monitorType)){
+                    String[] monitors = monitorType.split("/");
+                    for (String type : monitors) {
+                        TMonitorResult mongoData = new TMonitorResult();
+                        BeanUtils.copyProperties(item,mongoData);
+                        mongoData.setMonitorType(type);
+                        if("1".equals(type)){
+                            mongoData.setProvinceTag(mongoData.getProvinceTagVideo());
+                        }else if("2".equals(type)){
+                            mongoData.setProvinceTag(mongoData.getProvinceTagCar());
+                        }else if("3".equals(type)){
+                            mongoData.setProvinceTag(mongoData.getProvinceTagFace());
+                        }
+                        mongoList.add(mongoData);
+                    }
+                }
+            });
             //濡傛灉瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
             Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
             DeleteResult result = mongoTemplate.remove(query, TMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(dataList);
+            mongoTemplate.insertAll(mongoList);
         }
         //宸ュ崟锛堝悓涓�IP鍙敓鎴愪竴涓伐鍗曪級
+        //鏌ヨ鏁版嵁搴撳凡瀛樺湪鐨勭绾垮伐鍗曡幏鍙杋p闆嗗悎锛屽墧闄�
+        List<String> ips = workOrderMapper.getOfflineWorkOrder();
         List<WorkOrder> workOrderList = dataList.stream()
-                .filter(item -> Objects.nonNull(item.getWorkOrder()))
+                .filter(item -> Objects.nonNull(item.getWorkOrder()) && (CollectionUtils.isEmpty(ips) || !ips.contains(item.getIp())))
                 .collect(Collectors.toMap(
                         TMonitorResult::getIp,
                         Function.identity(),
@@ -340,7 +339,7 @@
                                 item.setNo(item.getDeviceId());
                             }
                         });
-                        pointService.setDeviceTagByGB(records);
+                        pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video);
                         //瀛樻斁鍦╩ongo涓�
                         mongoTemplate.insertAll(records);
                         //鏇存柊point琛ㄥ湪绾跨姸鎬�
@@ -352,7 +351,7 @@
                             vo.setUpdateTime(now);
                             return vo;
                         }).collect(Collectors.toList());
-                        monitorMapper.updateOnline(willUpdateList);
+                        monitorMapper.updateOnlineFromUyOrHk(willUpdateList);
                         //绂荤嚎鐢熸垚宸ュ崟,涓�涓猧p鍙敓鎴愪竴涓伐鍗�
                         List<VideoOnlineResult> workOrders = new ArrayList<>(records.stream()
                                 .filter(item -> ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus()))
@@ -407,7 +406,7 @@
                         }
                     });
                     //鎵撴爣绛�
-                    pointService.setDeviceTagByGB(records);
+                    pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video);
                     //瀛樻斁鍦╩ongo涓�
                     mongoTemplate.insertAll(records);
 //                    // 宸ュ崟鐢熸垚
diff --git a/ycl-server/src/main/java/com/ycl/task/VideoTask.java b/ycl-server/src/main/java/com/ycl/task/VideoTask.java
index a2596a9..72c32a6 100644
--- a/ycl-server/src/main/java/com/ycl/task/VideoTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/VideoTask.java
@@ -20,6 +20,7 @@
 import constant.CheckConstants;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -33,6 +34,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 瑙嗛璁$畻鑰冩牳鎸囨爣浠诲姟
@@ -64,6 +66,11 @@
         query.addCriteria(Criteria
                 .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
         List<VideoOnlineResult> results = mongoTemplate.find(query, VideoOnlineResult.class);
+        //浼樹簯涓婃湁杞﹁締鍜屼汉鑴哥殑璁惧鏁版嵁锛岄渶瑕佽繃婊ゅ嚭瑙嗛璁惧
+        List<String> videoIds = monitorMapper.getVideoIds();
+        if(!CollectionUtils.isEmpty(results)){
+            results = results.stream().filter(result -> videoIds.contains(result.getNo())).collect(Collectors.toList());
+        }
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_SiteOnline);
         calculator.calculate(results);
         log.info("缁撴潫璁$畻鐐逛綅鍦ㄧ嚎鐜�");
@@ -78,6 +85,11 @@
                 .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
 
         List<RecordMetaDSumResult> results = mongoTemplate.find(query, RecordMetaDSumResult.class);
+        //浼樹簯涓婃湁杞﹁締鍜屼汉鑴哥殑璁惧鏁版嵁锛岄渶瑕佽繃婊ゅ嚭瑙嗛璁惧
+        List<String> videoIds = monitorMapper.getVideoIds();
+        if(!CollectionUtils.isEmpty(results)){
+            results = results.stream().filter(result -> videoIds.contains(result.getNo())).collect(Collectors.toList());
+        }
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_Usability);
         calculator.calculate(results);
         log.info("缁撴潫璁$畻褰曞儚鍙敤鐜囧拰閲嶇偣褰曞儚鍙敤鐜�");
@@ -126,6 +138,7 @@
         query.addCriteria(Criteria
                 .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
         List<OsdCheckResult> results = mongoTemplate.find(query, OsdCheckResult.class);
+
         CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_OsdTime);
         calculator.calculate(results);
         log.info("缁撴潫璁$畻Osd鏍囨敞銆佹椂闂村噯纭巼");
@@ -168,7 +181,7 @@
             imageResourceSecurities.add(imageResourceSecurity);
             //鑾峰彇鏈�杩戜竴娆℃暟鎹墜鍔ㄦ墦鍒�
             ImageResourceSecurity latest = imageResourceSecurityMapper.getLatest(checkIndexVideo.getDeptId(),new Date());
-            imageResourceSecurity.setBoundaryIntegrity(latest.getBoundaryIntegrity());
+            imageResourceSecurity.setBoundaryIntegrity(latest ==null?BigDecimal.ONE:latest.getBoundaryIntegrity());
             // 鏇存柊鎸囨爣鏁版嵁
             checkIndexVideo.setImageResourceSecurity(
                     imageResourceSecurity.getPlatformOnline()
diff --git a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
index 71b2aee..28ec3f1 100644
--- a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -48,13 +48,13 @@
     private final DeviceInfoMapper deviceInfoMapper;
     private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
 
-//    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
-//            10,
-//            5000,
-//            TimeUnit.SECONDS,
-//            new ArrayBlockingQueue<>(1024),
-//            new ThreadPoolExecutor.CallerRunsPolicy()
-//    );
+    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
+            128,
+            5000,
+            TimeUnit.SECONDS,
+            new ArrayBlockingQueue<>(1000),
+            new ThreadPoolExecutor.CallerRunsPolicy()
+    );
 
     public void run() throws FFmpegFrameGrabber.Exception {
         // 鏌ュ嚭鏈�杩戜竴鍛ㄧ殑鏁呴殰鐨勮澶�
@@ -76,22 +76,24 @@
             return;
         }
         for (DeviceInfoVO deviceInfo : deviceList) {
-            // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id
-            String frameImg = null;
-            try {
-                frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
-            } catch (Exception e) {
-                e.printStackTrace();
-                continue;
-            }
-            if (StringUtils.hasText(frameImg)) {
-                WorkOrderCheckImg img = new WorkOrderCheckImg();
-                img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
-                img.setImgUrl(frameImg);
-                img.setCreateTime(new Date());
-                workOrderCheckImgMapper.insert(img);
-            }
+            executorService.submit(() -> {
+                // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id
+                String frameImg = null;
+                try {
+                    frameImg = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), deviceInfo.getDeviceId(), deviceInfo.getWorkOrderNo());
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                if (StringUtils.hasText(frameImg)) {
+                    WorkOrderCheckImg img = new WorkOrderCheckImg();
+                    img.setWorkOrderNo(deviceInfo.getWorkOrderNo());
+                    img.setImgUrl(frameImg);
+                    img.setCreateTime(new Date());
+                    workOrderCheckImgMapper.insert(img);
+                }
+            });
         }
+        log.info("宸ュ崟妫�娴嬪浘鐗囩粨鏉�");
     }
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
index 083a301..1d8863b 100644
--- a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
+++ b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
@@ -13,21 +13,9 @@
 @Slf4j
 public class OSDCheckThread implements Callable<OSDResult> {
     private TMonitor monitor;
-    public String HKUserName;
-    public String HKPassword;
-    public String DHUserName;
-    public String DHPassword;
-    public String YSUserName;
-    public String YSPassword;
 
-    public OSDCheckThread(TMonitor monitor, String HKUserName, String HKPassword, String DHUserName, String DHPassword, String YSUserName, String YSPassword) {
+    public OSDCheckThread(TMonitor monitor) {
         this.monitor = monitor;
-        this.HKUserName = HKUserName;
-        this.HKPassword = HKPassword;
-        this.DHUserName = DHUserName;
-        this.DHPassword = DHPassword;
-        this.YSUserName = YSUserName;
-        this.YSPassword = YSPassword;
     }
 
     public TMonitor getMonitor() {
@@ -38,59 +26,11 @@
         this.monitor = monitor;
     }
 
-    public String getHKUserName() {
-        return HKUserName;
-    }
-
-    public void setHKUserName(String HKUserName) {
-        this.HKUserName = HKUserName;
-    }
-
-    public String getHKPassword() {
-        return HKPassword;
-    }
-
-    public void setHKPassword(String HKPassword) {
-        this.HKPassword = HKPassword;
-    }
-
-    public String getDHUserName() {
-        return DHUserName;
-    }
-
-    public void setDHUserName(String DHUserName) {
-        this.DHUserName = DHUserName;
-    }
-
-    public String getDHPassword() {
-        return DHPassword;
-    }
-
-    public void setDHPassword(String DHPassword) {
-        this.DHPassword = DHPassword;
-    }
-
-    public String getYSUserName() {
-        return YSUserName;
-    }
-
-    public void setYSUserName(String YSUserName) {
-        this.YSUserName = YSUserName;
-    }
-
-    public String getYSPassword() {
-        return YSPassword;
-    }
-
-    public void setYSPassword(String YSPassword) {
-        this.YSPassword = YSPassword;
-    }
-
     @Override
     public OSDResult call() throws Exception {
         if (DeviceType.HK.getType().equals(monitor.getDeviceType())) {
             //娴峰悍
-            OSDResult osd = HKApi.getOsdByIP(monitor.getSerialNumber(),monitor.getIp(), HKUserName, HKPassword);
+            OSDResult osd = HKApi.getOsdByIP(monitor.getSerialNumber(),monitor.getIp(),monitor.getUsername(),monitor.getPassword());
             OSDResult osdResult = checkSuccess(monitor, osd);
             if (osdResult!=null) {
                 return osd;
@@ -99,7 +39,7 @@
             }
         } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) {
             //澶у崕
-            OSDResult osd = DHApi.getOsd(monitor.getSerialNumber(),monitor.getIp(), DHUserName, DHPassword);
+            OSDResult osd = DHApi.getOsd(monitor.getSerialNumber(),monitor.getIp(), monitor.getUsername(),monitor.getPassword());
             OSDResult osdResult = checkSuccess(monitor, osd);
             if (osdResult!=null) {
                 return osd;
@@ -108,7 +48,7 @@
             }
         } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) {
             //瀹囪
-            OSDResult osd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
+            OSDResult osd = YSApi.getOsd(monitor.getIp(), monitor.getUsername(),monitor.getPassword());
             OSDResult osdResult = checkSuccess(monitor, osd);
             if (osdResult!=null) {
                 return osd;
@@ -123,19 +63,19 @@
 
     private OSDResult tryAllApi(TMonitor monitor) {
         //灏濊瘯娴峰悍鐨刟pi
-        OSDResult hkosd = HKApi.getOsdByIP(monitor.getSerialNumber(),monitor.getIp(), HKUserName, HKPassword);
+        OSDResult hkosd = HKApi.getOsdByIP(monitor.getSerialNumber(),monitor.getIp(), monitor.getUsername(),monitor.getPassword());
         if (hkosd != null) {
             hkosd.setSerialNumber(monitor.getSerialNumber());
             return hkosd;
         }
         //灏濊瘯澶у崕鐨刟pi
-        OSDResult dhosd = DHApi.getOsd(monitor.getSerialNumber(),monitor.getIp(), DHUserName, DHPassword);
+        OSDResult dhosd = DHApi.getOsd(monitor.getSerialNumber(),monitor.getIp(),monitor.getUsername(),monitor.getPassword());
         if (dhosd != null) {
             dhosd.setSerialNumber(monitor.getSerialNumber());
             return dhosd;
         }
         //瀹囪api
-        OSDResult ysosd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
+        OSDResult ysosd = YSApi.getOsd(monitor.getIp(), monitor.getUsername(),monitor.getPassword());
         if (ysosd != null) {
             ysosd.setSerialNumber(monitor.getSerialNumber());
             return ysosd;
diff --git a/ycl-server/src/main/java/com/ycl/thread/PointImportCallable.java b/ycl-server/src/main/java/com/ycl/thread/PointImportCallable.java
index 3dbe6cd..c00f648 100644
--- a/ycl-server/src/main/java/com/ycl/thread/PointImportCallable.java
+++ b/ycl-server/src/main/java/com/ycl/thread/PointImportCallable.java
@@ -40,7 +40,9 @@
         for (YwPoint ywPoint : list) {
             boolean update = new LambdaUpdateChainWrapper<>(ywPointMapper)
                     .eq(YwPoint::getSerialNumber, ywPoint.getSerialNumber())
-                    .set(YwPoint::getProvinceTag, ywPoint.getProvinceTag())
+                    .set(YwPoint::getProvinceTagVideo, ywPoint.getProvinceTagVideo())
+                    .set(YwPoint::getProvinceTagCar, ywPoint.getProvinceTagCar())
+                    .set(YwPoint::getProvinceTagFace, ywPoint.getProvinceTagFace())
                     .set(YwPoint::getImportantCommandImageTag, ywPoint.getImportantCommandImageTag())
                     .set(YwPoint::getUnitId, ywPoint.getUnitId())
                     .set(YwPoint::getStartTime, ywPoint.getStartTime())
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 2c78faf..faa53de 100644
--- a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
+++ b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java
@@ -233,7 +233,6 @@
     /**
      * 鑾峰彇鏌愭湀寮�濮嬫棩鏈�
      */
-    //TODO:鏍¢獙閫昏緫鏄惁姝g‘
     public static String getMouthStart(@Nullable Date date) {
         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
diff --git a/ycl-server/src/main/java/com/ycl/utils/bean/BeanUtils.java b/ycl-server/src/main/java/com/ycl/utils/bean/BeanUtils.java
index 93cde63..6e5af9e 100644
--- a/ycl-server/src/main/java/com/ycl/utils/bean/BeanUtils.java
+++ b/ycl-server/src/main/java/com/ycl/utils/bean/BeanUtils.java
@@ -1,14 +1,18 @@
 package com.ycl.utils.bean;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
  * Bean 宸ュ叿绫�
- * 
+ *
  * @author ruoyi
  */
 public class BeanUtils extends org.springframework.beans.BeanUtils
@@ -24,7 +28,7 @@
 
     /**
      * Bean灞炴�у鍒跺伐鍏锋柟娉曘��
-     * 
+     *
      * @param dest 鐩爣瀵硅薄
      * @param src 婧愬璞�
      */
@@ -42,7 +46,7 @@
 
     /**
      * 鑾峰彇瀵硅薄鐨剆etter鏂规硶銆�
-     * 
+     *
      * @param obj 瀵硅薄
      * @return 瀵硅薄鐨剆etter鏂规硶鍒楄〃
      */
@@ -70,7 +74,7 @@
 
     /**
      * 鑾峰彇瀵硅薄鐨刧etter鏂规硶銆�
-     * 
+     *
      * @param obj 瀵硅薄
      * @return 瀵硅薄鐨刧etter鏂规硶鍒楄〃
      */
@@ -97,7 +101,7 @@
     /**
      * 妫�鏌ean鏂规硶鍚嶄腑鐨勫睘鎬у悕鏄惁鐩哥瓑銆�<br>
      * 濡俫etName()鍜宻etName()灞炴�у悕涓�鏍凤紝getName()鍜宻etAge()灞炴�у悕涓嶄竴鏍枫��
-     * 
+     *
      * @param m1 鏂规硶鍚�1
      * @param m2 鏂规硶鍚�2
      * @return 灞炴�у悕涓�鏍疯繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse
@@ -107,4 +111,7 @@
     {
         return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX));
     }
+
+
+
 }
diff --git a/ycl-server/src/main/resources/application-dev.yml b/ycl-server/src/main/resources/application-dev.yml
index c1636bd..3d5e6c0 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:
@@ -151,6 +152,10 @@
   host: 51.92.65.49
   appKey: 29555942
   appSecret: t9U7tCplCyYHzQPPL7cH
+  carCode: gb
+  faceCode: gb
+  carProvinceCode: 2_car
+  faceProvinceCode: 3_face
 
 DH:
   userName: admin
diff --git a/ycl-server/src/main/resources/application-prod.yml b/ycl-server/src/main/resources/application-prod.yml
index a9f9a62..52c87cd 100644
--- a/ycl-server/src/main/resources/application-prod.yml
+++ b/ycl-server/src/main/resources/application-prod.yml
@@ -110,7 +110,7 @@
 request:
   retry: 4 # 鏈�澶ч噸璇曟鏁�
   youYunDomain: http://51.92.65.56 # 浼樹簯鍦板潃
-#  haiKangDomain: 51.92.65.48 # 娴峰悍鍦板潃
+  haiKangDomain: http://51.92.65.49 # 娴峰悍鍦板潃
 youYun:
   tenantId: e10adc3949ba59abbe56e057f20f88dd
   email: yunwei-app
@@ -125,7 +125,13 @@
   host: 51.92.65.49
   appKey: 29555942
   appSecret: t9U7tCplCyYHzQPPL7cH
+  carCode: gb
+  faceCode: gb
+  carProvinceCode: 2_car
+  faceProvinceCode: 3_face
   1111: Hik12345+
+
+
 DH:
   userName: admin
   password: zg@2024dx
diff --git a/ycl-server/src/main/resources/logback.xml b/ycl-server/src/main/resources/logback.xml
index 0b59320..2a25189 100644
--- a/ycl-server/src/main/resources/logback.xml
+++ b/ycl-server/src/main/resources/logback.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 鏃ュ織瀛樻斁璺緞 -->
-	<property name="log.path" value="/home/java/logs" />
+	<property name="log.path" value="/opt/zgyw/logs" />
     <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CalculateRecordMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CalculateRecordMapper.xml
index b8944a7..1782835 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CalculateRecordMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CalculateRecordMapper.xml
@@ -14,6 +14,28 @@
         <collection property="recordList" column="contract_id" select="selectByContractId" ofType="com.ycl.platform.domain.vo.CalculateMoneyRuleVO"/>
     </resultMap>
 
+    <update id="updateBatch" parameterType="java.util.List">
+        update t_calculate_record
+        <trim prefix="set" suffixOverrides=","><!-- 琛ㄧず鍦ㄧ敓鎴愮殑 SQL 璇彞鍓嶉潰娣诲姞 set 鍏抽敭瀛楋紝骞剁Щ闄ゆ湯灏鹃�楀彿 -->
+            <trim prefix="deduct_money =case" suffix="end,"><!-- 鏋勯�燾ase璇硶 鏈熬鍔犱笂end锛屽鏋滈渶瑕佹洿鏂板涓瓧娈靛鍒惰繖涓猼rim -->
+                <foreach collection="list" item="item">
+                    when id=#{item.id} then #{item.deductMoney}
+                </foreach>
+            </trim>
+        </trim>
+        where id in
+        <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
+            #{item.id,jdbcType=BIGINT}
+        </foreach>
+    </update>
 
+    <update id="batchPublish">
+        update t_calculate_record set status = 'PUBLISHED'
+        where contract_id = #{contractId} and which_year =#{whichYear}
+    </update>
 
+    <update id="updatePublishById">
+        update t_calculate_record set status = #{status}
+        where id = #{id}
+    </update>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
index 2f3ec80..bbd8c77 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -18,46 +18,75 @@
         <result column="latestDeductMoney" property="latestDeductMoney"/>
     </resultMap>
 
-    <select id="page" resultMap="BaseResultMap">
+<!--    <select id="page" resultMap="BaseResultMap">-->
+<!--        SELECT-->
+<!--            tcr.contract_id,-->
+<!--            tyu.unit_name,-->
+<!--            tc.name,-->
+<!--            tcr.id,-->
+<!--            tcr.status,-->
+<!--            tcr.deduct_money,-->
+<!--            tcr.create_time,-->
+<!--            tcr.update_time,-->
+<!--            tcr.calculate_time,-->
+<!--            tcr.latest_time,-->
+<!--            (SELECT a.deduct_money FROM (SELECT deduct_money,which_year, which_month FROM t_calculate_record WHERE contract_id = tcr.contract_id ORDER BY which_year, which_month DESC limit 1) a) as latestDeductMoney-->
+<!--        FROM-->
+<!--        t_calculate_report tcr-->
+<!--        INNER JOIN t_contract tc ON tcr.contract_id = tc.id-->
+<!--        INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id-->
+<!--        <where>-->
+<!--            AND tcr.deleted = 0 AND tc.deleted = 0 AND tyu.deleted = 0-->
+<!--            <if test="query.unitName != null and query.unitName != '' ">-->
+<!--                AND tyu.unit_name like concat('%', #{query.unitName}, '%')-->
+<!--            </if>-->
+<!--            <if test="query.unitId != null">-->
+<!--                AND tyu.id = #{query.unitId}-->
+<!--            </if>-->
+<!--        </where>-->
+<!--    </select>-->
+    <select id="page" resultType="com.ycl.platform.domain.vo.CalculateReportVO">
         SELECT
-            tcr.contract_id,
-            tyu.unit_name,
-            tc.name,
-            tcr.id,
-            tcr.status,
-            tcr.deduct_money,
-            tcr.create_time,
-            tcr.update_time,
-            tcr.calculate_time,
-            tcr.latest_time,
-            (SELECT a.deduct_money FROM (SELECT deduct_money,which_year, which_month FROM t_calculate_record WHERE contract_id = tcr.contract_id ORDER BY which_year, which_month DESC limit 1) a) as latestDeductMoney
+        tcr.id,
+        tcr.contract_id,
+        tyu.unit_name,
+        tc.name as contractName,
+        tcr.which_year,
+        tcr.which_month,
+        SUM(tcr.deduct_money) AS deductMoney,
+        MAX(tcr.which_month) AS latest_month,
+        (
+        SELECT deduct_money
+        FROM t_calculate_record
+        WHERE contract_id = tcr.contract_id
+        AND which_year = tcr.which_year
+        ORDER BY which_month DESC
+        LIMIT 1
+        ) AS latestDeductMoney
         FROM
-        t_calculate_report tcr
+        t_calculate_record tcr
         INNER JOIN t_contract tc ON tcr.contract_id = tc.id
         INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id
         <where>
             AND tcr.deleted = 0 AND tc.deleted = 0 AND tyu.deleted = 0
-            <if test="query.unitName != null and query.unitName != '' ">
-                AND tyu.unit_name like concat('%', #{query.unitName}, '%')
-            </if>
-            <if test="query.unitId != null">
-                AND tyu.id = #{query.unitId}
+            <if test="query.status!=null and query.status !=''">
+                AND tcr.status = #{query.status}
             </if>
         </where>
+        group by contract_id,which_year
     </select>
-
     <resultMap id="DetailResultMap" type="com.ycl.platform.domain.vo.CalculateReportDetailVO">
         <result column="id" property="id"/>
         <result column="create_time" property="createTime"/>
         <result column="unit_name" property="unitName"/>
+        <result column="unit_id" property="unitId"/>
         <result column="name" property="contractName"/>
         <result column="contract_id" property="contractId"/>
-        <result column="calculate_time" property="calculateTime"/>
-        <result column="deduct_money" property="deductMoney"/>
+        <result column="which_year" property="whichYear"/>
         <result column="status" property="status"/>
         <collection property="ruleList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateMoneyRuleVO"
                     select="selectRuleByContractId"/>
-        <collection property="recordList" column="contract_id" ofType="com.ycl.platform.domain.vo.CalculateRecordVO"
+        <collection property="recordList" column="{contractId=contract_id, whichYear=which_year,status=status}" ofType="com.ycl.platform.domain.vo.CalculateRecordVO"
                     select="selectRecordByContractId"/>
     </resultMap>
 
@@ -72,46 +101,72 @@
 
     <select id="selectRecordByContractId" resultType="com.ycl.platform.domain.vo.CalculateRecordVO">
         SELECT
-               id,
-               create_time  as createTime,
-               score,
-               deduct_money as deductMoney,
-               which_year as whichYear,
-               which_month as whichMonth
+        tcr.id,
+        tcr.create_time as createTime,
+        (IFNULL(-SUM(tcs.score), 0) + 100) AS score,
+        tcr.deduct_money as deductMoney,
+        tcr.which_year as whichYear,
+        tcr.which_month as whichMonth,
+        tcr.status
         FROM
-             t_calculate_record
-        WHERE
-              contract_id = #{contractId} AND deleted = 0
+        t_calculate_record tcr
+        LEFT JOIN t_contract_score tcs
+            ON tcr.contract_id =tcs.contract_id
+                   AND tcs.deleted=0
+                   AND YEAR(tcs.create_time) = #{whichYear}
+                   AND MONTH(tcs.create_time) = tcr.which_month
+                   AND tcs.auditing_status = 'PASS'
+        <where>
+            tcr.contract_id = #{contractId} AND tcr.which_year = #{whichYear} AND tcr.deleted = 0
+            <if test="status!=null">
+                AND tcr.status=#{status}
+            </if>
+        </where>
+        group by tcr.id
         ORDER BY
-            create_time DESC
-
+        tcr.create_time
     </select>
 
     <select id="getById" resultMap="DetailResultMap">
         SELECT tyu.unit_name,
-               tc.name,
-               tcr.id,
-               tcr.contract_id,
-               tcr.deduct_money,
-               tcr.create_time,
-               tcr.update_time,
-               tcr.calculate_time,
-               tcr.status
-        FROM t_calculate_report tcr
-                 INNER JOIN t_contract tc ON tcr.contract_id = tc.id
-                 INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id
-        WHERE tcr.id = #{id}
+        tyu.id as unit_id,
+        tc.name,
+        tcr.id,
+        tcr.contract_id,
+        tcr.create_time,
+        tcr.update_time,
+        tcr.which_year,
+        #{query.status} as status
+        FROM t_calculate_record tcr
+        INNER JOIN t_contract tc ON tcr.contract_id = tc.id
+        INNER JOIN t_yw_unit tyu ON tyu.id = tc.unit_id
+        <where>
+            tcr.contract_id = #{query.contractId} AND tcr.which_year = #{query.whichYear}
+        </where>
+        limit 1
     </select>
 
     <select id="exportData" resultType="com.ycl.platform.domain.excel.CalculateExport">
         SELECT
-            a.rule_name,
-            COUNT(b.id) AS num,
-            IFNULL(-SUM(score), 0) AS score
+        a.rule_name as ruleName,
+        a.rule_condition as detailName,
+        COUNT(b.id) AS num,
+        IFNULL(-SUM(b.score), 0) AS score
         FROM t_calculate_rule a
+        LEFT JOIN t_calculate_record tcr ON a.contract_id = tcr.contract_id
         LEFT JOIN t_contract_score b ON b.rule_id = a.id AND auditing_status = 'PASS' AND b.deleted = 0
-        WHERE a.contract_id = #{contractId} AND a.deleted = 0
-        GROUP BY a.rule_name
+            AND MONTH(b.create_time) = tcr.which_month
+            AND YEAR(b.create_time) = tcr.which_year
+        <where>
+            a.deleted = 0 and a.contract_id = #{contractId}
+            <if test="whichMonth!=null">
+                and tcr.which_month = #{whichMonth}
+            </if>
+            <if test="whichYear!=null">
+                and tcr.which_year = #{whichYear}
+            </if>
+        </where>
+        GROUP BY a.id
     </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 4a0a076..33bfe57 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml
@@ -180,21 +180,21 @@
                d.area,
                CASE
                    WHEN cs.examine_tag = '0' THEN '鐪佸巺'
-                   WHEN cs.examine_tag = '1' THEN '甯傚眬'
+                   WHEN cs.examine_tag = '1' THEN '鍖哄幙'
                    WHEN cs.examine_tag = '2' THEN '' END        AS examineTag,
                ct.template_name                                 AS templateName,
                cs.score
         FROM t_check_score cs
                  LEFT JOIN t_check_template ct ON cs.template_id = ct.id
                  LEFT JOIN sys_dept d ON cs.dept_id = d.dept_id
-        WHERE cs.score < ct.alarm_score
+        WHERE cs.score < ct.alarm_score and cs.create_time between #{startTime} and #{endTime}
         ORDER BY cs.create_time DESC
         ]]>
     </select>
 
     <select id="calculate" resultType="java.util.Map">
         SELECT area              AS deptName,
-               ROUND(AVG(score)) AS score
+               ROUND(AVG(score),2) AS score
         FROM t_check_score tcs
                  LEFT JOIN sys_dept d ON tcs.dept_id = d.dept_id
         WHERE examine_tag = 1
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ContractResultMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ContractResultMapper.xml
index 2206157..589615f 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ContractResultMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ContractResultMapper.xml
@@ -4,7 +4,8 @@
 
 
     <select id="selectCheckResultList" resultType="com.ycl.platform.domain.vo.ContractResultVO">
-        SELECT c.*,
+        SELECT c.id,c.publish,c.contract_id,c.check_time,c.unit_id,c.which_year,c.which_month,
+        (IFNULL(-SUM(b.score), 0) + 100) AS score,
         u.unit_name AS unitName,
         ct.name AS contractName
         FROM t_contract_result c
@@ -12,7 +13,8 @@
         t_yw_unit u ON c.unit_id = u.id and u.deleted = 0
         LEFT JOIN
         t_contract ct ON c.contract_id = ct.id and ct.deleted = 0
-        where
+        LEFT JOIN t_contract_score b ON b.contract_id = c.contract_id AND auditing_status = 'PASS' AND b.deleted = 0  AND MONTH(b.create_time) = c.which_month AND YEAR(b.create_time) = c.which_year
+        <where>
         c.deleted = 0
         <if test="unitId != null">
             AND c.unit_id = #{unitId}
@@ -23,16 +25,20 @@
         <if test="publish != null">
             AND c.publish = #{publish}
         </if>
+        </where>
+        GROUP BY c.id
     </select>
 
     <select id="selectCheckResultRecordList" resultType="com.ycl.platform.domain.entity.ContractResultRecord">
         SELECT
             a.rule_name,
             COUNT(b.id) AS num,
-            IFNULL(-SUM(score), 0) AS score
+            IFNULL(-SUM(b.score), 0) AS score
         FROM t_calculate_rule a
-                LEFT JOIN t_contract_result_record b ON SUBSTRING_INDEX(b.rule_ids, ',', -1) = a.id AND b.deleted = 0  AND b.result_id = #{resultId}
-        WHERE a.contract_id = #{contractId} AND a.deleted = 0
+            LEFT JOIN t_contract_result tcr on a.contract_id = tcr.contract_id AND tcr.id = #{resultId}
+            LEFT JOIN t_contract_score b ON b.rule_id = a.id AND auditing_status = 'PASS' AND b.deleted = 0  AND MONTH(b.create_time) = tcr.which_month AND YEAR(b.create_time) = tcr.which_year
+        WHERE
+        a.contract_id = #{contractId} AND a.deleted = 0
         GROUP BY a.rule_name
     </select>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
index c640b36..3a5bce8 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
@@ -84,7 +84,7 @@
         *
         FROM
         t_dynamic_column_value dcv
-        LEFT JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{tableName}
+        INNER JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{tableName}
         WHERE
         dcv.ref_id in
         <foreach collection="ids" item="id" separator="," open="(" close=")">
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml
index 1b67217..550bc1a 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ImageResourceSecurityMapper.xml
@@ -102,8 +102,9 @@
         </foreach>
     </delete>
     <select id="getLatest" resultType="com.ycl.platform.domain.entity.ImageResourceSecurity">
-        select * from t_image_resource_security where dept_id = #{deptId}
-        where date_format(create_time,'%Y-%m')  = date_format(#{date}, '%Y-%m')
+        select * from t_image_resource_security
+        where dept_id = #{deptId}
+        and date_format(create_time,'%Y-%m')  = date_format(#{date}, '%Y-%m')
         order by create_time desc
         limit 1
     </select>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
index 1877141..732099c 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
@@ -31,7 +31,7 @@
         FROM
         t_report r
         LEFT JOIN t_yw_unit u ON r.unit_id = u.id and u.deleted = 0
-        LEFT JOIN t_yw_people p ON r.people_id = p.id and p.deleted = 0
+        LEFT JOIN t_yw_people p ON r.people_id = p.user_id and p.deleted = 0
         LEFT JOIN t_yw_point pt ON r.serial_number = pt.serial_number and pt.deleted = 0
         INNER JOIN t_report_error_type ret ON ret.report_id = r.id and ret.deleted = 0 <if test="query.errorTypeList != null and query.errorTypeList.size() > 0">
         AND ret.error_type in <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType}</foreach>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
index 1620c03..91e239e 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
@@ -42,7 +42,7 @@
     <select id="getCalculateRule" resultType="com.ycl.platform.domain.vo.CalculateRuleVO">
         select tc.unit_id ,tcr.*
         from t_contract tc
-        left join t_calculate_rule tcr on tc.id = tcr.contract_id
+        left join t_calculate_rule tcr on tc.id = tcr.contract_id and tcr.deleted =0
         <where>
             tc.deleted =0 and #{date} between tc.start_time and tc.end_time
         </where>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
index 475d5b3..cd84be6 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -39,28 +39,6 @@
         <result property="deviceType" column="device_type"/>
     </resultMap>
 
-    <resultMap id="monitorMap" type="com.ycl.platform.domain.result.SYS.TMonitorResult">
-        <result column="m.id" property="id"/>
-        <result column="no" property="no"/>
-        <result column="m.name" property="name"/>
-        <result column="monitorType" property="monitorType"/>
-        <result column="d.dept_id" property="deptId"/>
-        <result column="p.province_tag" property="provinceTag"/>
-        <result column="p.important_tag" property="importantTag"/>
-        <result column="p.important_command_image_tag" property="importantCommandImageTag"/>
-        <result column="p.dept_tag" property="deptTag"/>
-        <result column="p.online" property="online"/>
-        <collection property="dynamicColumnList" select="getDyColumns"
-                    column="{pid=pid,tableName=tableName}"
-                    ofType="com.ycl.platform.domain.vo.DynamicColumnVO"/>
-    </resultMap>
-
-    <resultMap id="dynamicColumnMap" type="com.ycl.platform.domain.vo.DynamicColumnVO">
-        <result column="prop_name" property="propName"/>
-        <result column="label_value" property="labelValue"/>
-        <result column="column_value" property="columnValue"/>
-    </resultMap>
-
     <sql id="selectTMonitorVo">
         select id,
                serial_number,
@@ -112,15 +90,22 @@
     </select>
 
     <select id="selectByNumbers" resultType="com.ycl.platform.domain.entity.TMonitor">
-        select * from t_monitor where serial_number in
+        select m.*,p.username,p.password
+        from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number
+        where m.serial_number in
         <foreach collection="numbers" separator="," open="(" close=")" item="number">
             #{number}
         </foreach>
     </select>
-
+    <!-- TODO:寮傚父鎭㈠鐩戞帶鍜屾槸鍚︿骇鐢熷伐鍗曞瓧娈�-->
     <select id="selectTMonitorList" resultType="com.ycl.platform.domain.vo.TMonitorVO">
         select m.id, m.serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude,
-        camera_capture_area, p.online as onState, civil_code, d.dept_id, d.dept_name, d.area, p.province_tag,p.dept_tag,
+        camera_capture_area,
+        CASE
+        WHEN p.online = 1 AND p.ping_online = 1 THEN 1
+        WHEN p.online = -1 OR p.ping_online = -1 THEN -1
+        ELSE 0
+        END AS onState, civil_code, d.dept_id, d.dept_name, d.area, p.province_tag_video,p.province_tag_car,p.province_tag_face,p.dept_tag,
         IF(COUNT(w.id) OVER() > 0, '鏄�', '鍚�') AS error, u.unit_name,p.recovery_time,p.reason,p.start_time,p.end_time, w.work_order_no
         from t_monitor m
         left join t_yw_point p on m.serial_number = p.serial_number and p.deleted = 0
@@ -128,7 +113,7 @@
         left join (
         WITH cte AS (
         SELECT *,row_number() OVER(PARTITION BY serial_number ORDER BY create_time DESC) rn FROM t_work_order
-        WHERE deleted = 0 AND status = 'AUDITING_SUCCESS'
+        WHERE deleted = 0 AND status != 'AUDITING_SUCCESS'
         ) SELECT * FROM cte WHERE rn=1
         ) w on m.serial_number = w.serial_number and w.deleted = 0
         left join t_yw_unit u on p.unit_id = u.id and u.deleted = 0
@@ -141,7 +126,10 @@
                 or m.serial_number like concat('%', #{name}, '%')
                 or u.unit_name like concat('%', #{name}, '%'))
             </if>
-            <if test="provinceTag != null ">and p.province_tag = #{provinceTag}</if>
+            <if test="provinceTag != null and cameraFunType == 1">and p.province_tag_video = #{provinceTag}</if>
+            <if test="provinceTag != null and cameraFunType == 2">and p.province_tag_car = #{provinceTag}</if>
+            <if test="provinceTag != null and cameraFunType == 3">and p.province_tag_face = #{provinceTag}</if>
+            <if test="provinceTag != null and recovery == 1">and (p.province_tag_face = #{provinceTag} or p.province_tag_video = #{provinceTag} or p.province_tag_car = #{provinceTag})</if>
             <if test="deptTag != null ">and p.dept_tag = #{deptTag}</if>
             <if test="siteType != null ">and site_type = #{siteType}</if>
             <if test="macAddr != null  and macAddr != ''">and mac_addr = #{macAddr}</if>
@@ -155,7 +143,9 @@
                 #{cameraCaptureArea}
             </if>
             <if test="time !=null and time !=''">and TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <![CDATA[<=]]> #{time}</if>
-            <if test="onState != null ">and p.online = #{onState}</if>
+            <if test="onState != null and onState == 1">and (p.online = #{onState} and p.ping_online = #{onState})</if>
+            <if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
+            <if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
             <if test="civilCode != null  and civilCode != ''">and civil_code = #{civilCode}</if>
             <if test="integratedDevice != null ">and integrated_device = #{integratedDevice}</if>
             <if test="cameraBrand != null ">and camera_brand = #{cameraBrand}</if>
@@ -182,8 +172,13 @@
     </select>
 
     <select id="exportTMonitorList" resultType="com.ycl.platform.domain.excel.TMonitorExp">
-        select m.id, m.serial_number, name, ip, camera_fun_type,p.online as onState,
-        d.dept_name, p.id as pointId,p.province_tag,p.dept_tag,p.important_tag,p.important_command_image_tag,u.unit_name as managementUnit
+        select m.id, m.serial_number, name, ip, camera_fun_type,
+        CASE
+        WHEN p.online = 1 AND p.ping_online = 1 THEN 1
+        WHEN p.online = -1 OR p.ping_online = -1 THEN -1
+        ELSE 0
+        END AS onState,
+        d.dept_name, p.id as pointId,p.province_tag_video,p.province_tag_car,p.province_tag_face,p.dept_tag,p.important_tag,p.important_command_image_tag,u.unit_name as managementUnit
         from t_monitor m
         left join t_yw_point p on m.serial_number = p.serial_number and p.deleted = 0
         left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0
@@ -197,29 +192,36 @@
                 or m.serial_number like concat('%', #{name}, '%')
                 or u.unit_name like concat('%', #{name}, '%'))
             </if>
-            <if test="provinceTag != null ">and p.province_tag = #{provinceTag}</if>
+            <if test="provinceTag != null and cameraFunType==1">and p.province_tag_video = #{provinceTag}</if>
+            <if test="provinceTag != null and cameraFunType==2">and p.province_tag_car = #{provinceTag}</if>
+            <if test="provinceTag != null and cameraFunType==3">and p.province_tag_face = #{provinceTag}</if>
             <if test="deptTag != null ">and p.dept_tag = #{deptTag}</if>
             <if test="cameraFunType != null  and cameraFunType != ''">and camera_fun_type like concat('%',
                 #{cameraFunType}, '%')
             </if>
-            <if test="onState != null ">and p.online = #{onState}</if>
+            <if test="onState != null and onState == 1">and (p.online = #{onState} and p.ping_online = #{onState})</if>
+            <if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
+            <if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
             <if test="civilCode != null  and civilCode != ''">and civil_code = #{civilCode}</if>
         </where>
     </select>
-
     <select id="selectMonitorVOList" resultType="com.ycl.platform.domain.vo.TMonitorVO">
         select m.id, m.serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude,
         camera_capture_area, on_state, civil_code, integrated_device, camera_brand, address, net_working,
         public_security, installed_time, management_unit, mu_contact_info, storage_days
         , monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format,
-        camera_dept, hybm, lxbm,d.dept_id, d.dept_name,p.province_tag,p.dept_tag from t_monitor m
+        camera_dept, hybm, lxbm,d.dept_id, d.dept_name,
+        CASE
+            WHEN p.province_tag_video = 1 OR p.province_tag_car = 1 OR p.province_tag_face = 1 THEN 1
+            ELSE 0
+        END AS province_tag,p.dept_tag
+        from t_monitor m
         left join t_yw_point p on m.serial_number = p.serial_number
         left join sys_dept d on p.dept_id = d.dept_id
     </select>
-
     <select id="selectMonitorResult" resultType = "com.ycl.platform.domain.result.SYS.TMonitorResult">
         select m.id, m.serial_number as no,m.name,m.camera_fun_type as monitorType,
-        d.dept_id,p.province_tag,p.important_tag,p.important_command_image_tag,p.dept_tag,p.online,p.id as pointId
+        d.dept_id,p.province_tag_video as provinceTag,p.important_tag,p.important_command_image_tag,p.dept_tag,p.online,p.id as pointId
         from t_monitor m
         left join t_yw_point p on m.serial_number = p.serial_number
         left join sys_dept d on p.dept_id = d.dept_id
@@ -235,7 +237,7 @@
             </foreach>
             </if>
             <if test="provinceTag!=null">
-                and p.province_tag = #{provinceTag}
+                and p.province_tag_video = #{provinceTag}
             </if>
             <if test="importantTag!=null">
                 and p.important_tag = #{importantTag}
@@ -389,20 +391,25 @@
             #{id}
         </foreach>
     </delete>
-
     <select id="getVideoCount" resultType="java.util.Map">
         SELECT count(*) AS totalPosts,
-        IFNULL(SUM(IF(p.online = 1, 1, 0)), 0) AS totalMembers,
-        IFNULL(SUM(IF(p.online = -1, 1, 0)), 0) AS postsPercentage,
-        IFNULL(SUM(IF(p.online = 0, 1, 0)), 0) AS unknownNumbers,
-        IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage
+        IFNULL(SUM(IF((p.online = 1 and p.ping_online = 1), 1, 0)), 0) AS totalMembers,
+        IFNULL(SUM(IF((p.online = -1 or p.ping_online = -1), 1, 0)), 0) AS postsPercentage,
+        IFNULL(SUM(IF((p.online = 0 and p.ping_online = 0), 1, 0)), 0) AS unknownNumbers,
+        IFNULL(ROUND(SUM(IF((p.online = 1 and p.online= 1), 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage
         FROM t_monitor m
         left join t_yw_point p on m.serial_number = p.serial_number
         left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0
         <where>
             camera_fun_type like concat('%', #{cameraFunType}, '%') and p.examine_status = 1
-            <if test="provinceTag!=null">
-                and p.province_tag = #{provinceTag}
+            <if test="provinceTag!=null and cameraFunType==1">
+                and p.province_tag_video = #{provinceTag}
+            </if>
+            <if test="provinceTag!=null and cameraFunType==2">
+                and p.province_tag_car = #{provinceTag}
+            </if>
+            <if test="provinceTag!=null and cameraFunType==3">
+                and p.province_tag_face = #{provinceTag}
             </if>
             <if test="deptTag!=null">
                 and p.dept_tag = #{deptTag}
@@ -410,13 +417,22 @@
             ${params.dataScope}
         </where>
     </select>
-
+    <select id="assetManagementCount" resultType="java.util.Map">
+        SELECT count(*) AS total,
+        IFNULL(SUM(IF((m.camera_fun_type like '%1%'), 1, 0)), 0) AS video,
+        IFNULL(SUM(IF((m.camera_fun_type like '%2%'), 1, 0)), 0) AS face,
+        IFNULL(SUM(IF((m.camera_fun_type like '%3%'), 1, 0)), 0) AS car,
+        IFNULL(SUM(IF((p.examine_status = 1), 1, 0)), 0) as examine,
+        IFNULL(SUM(IF((p.examine_status = 0), 1, 0)), 0) as notExamine
+        FROM t_monitor m
+        left join t_yw_point p on m.serial_number = p.serial_number
+    </select>
     <select id="recoveryException" resultType="java.util.Map">
         SELECT count(*) AS totalPosts,
-        IFNULL(SUM(IF(p.online = 1, 1, 0)), 0) AS totalMembers,
-        IFNULL(SUM(IF(p.online = -1, 1, 0)), 0) AS postsPercentage,
-        IFNULL(SUM(IF(p.online = 0, 1, 0)), 0) AS unknownNumbers,
-        IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage
+        IFNULL(SUM(IF((p.online = 1 and p.ping_online = 1), 1, 0)), 0) AS totalMembers,
+        IFNULL(SUM(IF((p.online = -1 or p.ping_online = -1), 1, 0)), 0) AS postsPercentage,
+        IFNULL(SUM(IF((p.online = 0 and p.ping_online = 0), 1, 0)), 0) AS unknownNumbers,
+        IFNULL(ROUND(SUM(IF((p.online = 1 and p.ping_online = 1), 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage
         FROM t_monitor m
         left join t_yw_point p on m.serial_number = p.serial_number
         left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0
@@ -424,7 +440,7 @@
             p.examine_status = 1
 <!--             (p.recovery = 1 OR TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <![CDATA[<=]]> #{time}) -->
              <if test="provinceTag!=null">
-                and p.province_tag = #{provinceTag}
+                and (p.province_tag_video = #{provinceTag} or p.province_tag_car = #{provinceTag} or p.province_tag_face = #{provinceTag})
              </if>
             <if test="deptTag!=null">
                 and p.dept_tag = #{deptTag}
@@ -498,9 +514,9 @@
             COUNT(p2.id) AS errorNum,
             COUNT(p3.id)  AS normalNum
         FROM t_monitor
-        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1<if test="dataScope == 1"> AND p1.province_tag = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
-        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number  AND p2.examine_status = 1 AND p2.online = -1 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
-        LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number  AND p3.examine_status = 1 AND p3.online = 1  AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1<if test="dataScope == 1"> AND p1.province_tag_video = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number  AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag_video = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number  AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag_video = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
         WHERE INSTR(camera_fun_type, 1)
         UNION ALL
         SELECT
@@ -509,9 +525,9 @@
             COUNT(p2.id) AS errorNum,
             COUNT(p3.id) AS normalNum
         FROM t_monitor
-        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
-        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND p2.online = -1 AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
-        LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number  AND p3.examine_status = 1 AND p3.online = 1 AND p1.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag_car = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag_car = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number  AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id <if test="dataScope == 1"> AND p3.province_tag_car = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
         WHERE INSTR(camera_fun_type, 2)
         UNION ALL
         SELECT
@@ -520,9 +536,9 @@
             COUNT(p2.id) AS errorNum,
             COUNT(p3.id) AS normalNum
         FROM t_monitor
-        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number  AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
-        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number  AND p2.examine_status = 1 AND p2.online = -1 AND p1.id = p2.id<if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
-        LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number  AND p3.examine_status = 1 AND p3.online = 1  AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number  AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag_face = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number  AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id<if test="dataScope == 1"> AND p2.province_tag_face = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
+        LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number  AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag_face = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
         WHERE INSTR(camera_fun_type, 3)
     </select>
     <select id="monitorRate" resultType="com.ycl.platform.domain.vo.screen.MonitorRateVO">
@@ -538,9 +554,9 @@
                     COUNT(m2.id) AS faceErrorNum
                 FROM
                     sys_dept d
-                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0  AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if>
-                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.online = -1 AND p2.examine_status = 1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
-                        LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.online = 1 AND p3.examine_status = 1 AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0  AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag_face = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND (p2.online = -1 OR p2.ping_online = -1) AND p2.examine_status = 1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag_face = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag_face = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
                         LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 3)
                         LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 3)
                         LEFT JOIN t_monitor m3 ON m3.serial_number = p3.serial_number AND INSTR(m3.camera_fun_type, 3)
@@ -558,9 +574,9 @@
                     COUNT(m2.id) AS carErrorNum
                 FROM
                     sys_dept d
-                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if>
-                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND p2.online = -1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
-                        LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.examine_status = 1 AND p3.online = 1 AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag_car = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1)  AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag_car = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag_car = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
                         LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 2)
                         LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 2)
                         LEFT JOIN t_monitor m3 ON m3.serial_number = p3.serial_number AND INSTR(m3.camera_fun_type, 2)
@@ -578,9 +594,9 @@
                     COUNT(m2.id) AS videoErrorNum
                 FROM
                     sys_dept d
-                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if>
-                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND p2.online = -1 AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
-                        LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.examine_status = 1 AND p3.online = 1 AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0 AND p.examine_status = 1 <if test="dataScope == 1"> AND p.province_tag_video = 1 </if><if test="dataScope == 3"> AND p.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p2 ON p2.dept_id = d.dept_id AND p2.deleted = 0 AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1)  AND p.id = p2.id <if test="dataScope == 1"> AND p2.province_tag_video = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
+                        LEFT JOIN t_yw_point p3 ON p3.dept_id = d.dept_id AND p3.deleted = 0 AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p.id = p3.id <if test="dataScope == 1"> AND p3.province_tag_video  = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
                         LEFT JOIN t_monitor m ON m.serial_number = p.serial_number AND INSTR(m.camera_fun_type, 1)
                         LEFT JOIN t_monitor m2 ON m2.serial_number = p2.serial_number AND INSTR(m2.camera_fun_type, 1)
                         LEFT JOIN t_monitor m3 ON m3.serial_number = p3.serial_number AND INSTR(m3.camera_fun_type, 1)
@@ -602,16 +618,16 @@
                tm.camera_fun_type,
                tm.longitude,
                tm.latitude,
-               tm.camera_capture_area,
-               tm.on_state,
+               d.dept_name as camera_capture_area,
+               yp.examine_status as on_state,
                tm.civil_code,
                tm.integrated_device,
                tm.camera_brand,
                tm.address,
                tm.net_working,
                tm.public_security,
-               tm.installed_time,
-               tm.management_unit,
+               yp.create_time as installed_time,
+               u.unit_name as management_unit,
                tm.mu_contact_info,
                tm.storage_days,
                tm.monitor_azimuth,
@@ -621,75 +637,24 @@
                tm.camera_type,
                tm.camera_light_type,
                tm.encoded_format,
-               tm.camera_dept,
-               tm.hybm,
-               tm.lxbm
+               tm.camera_dept
         FROM
             t_monitor tm
                 INNER JOIN t_yw_point yp ON yp.serial_number = tm.serial_number
+                left join sys_dept d on yp.dept_id = d.dept_id and d.del_flag = 0
+                left join t_yw_unit u on yp.unit_id = u.id and u.deleted = 0
         <where>
             <if test="query.keyword != null and query.keyword != ''">
                 AND tm.name like concat('%', #{query.keyword}, '%')
+            </if>
+            <if test="query.examineStatus != null">
+                AND yp.examine_status = #{query.examineStatus}
             </if>
             <if test="query.startTIme != null and query.endTime != null">
                 AND yp.create_time between #{query.startTime} and #{query.endTime}
             </if>
         </where>
     </select>
-
-<!--    <select id="getDyColumns" resultMap="dynamicColumnMap">-->
-<!--        SELECT-->
-<!--               *-->
-<!--        FROM-->
-<!--             t_dynamic_column_value dcv-->
-<!--                 LEFT JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{tableName}-->
-<!--        WHERE-->
-<!--            dcv.ref_id = #{id}-->
-<!--            <if test="keyword != null and keyword != ''">-->
-<!--                and dcv.column_value like concat('%', #{keyword}, '%')-->
-<!--            </if>-->
-<!--    </select>-->
-
-<!--    <resultMap id="dyMap" type="com.ycl.platform.domain.vo.TMonitorVO">-->
-<!--        <id column="id" property="id"/>-->
-<!--        <result column="serial_number" property="serialNumber"/>-->
-<!--        <result column="name" property="name"/>-->
-<!--        <result column="site_type" property="siteType"/>-->
-<!--        <result column="mac_addr" property="macAddr"/>-->
-<!--        <result column="ip" property="ip"/>-->
-<!--        <result column="longitude" property="longitude"/>-->
-<!--        <result column="latitude" property="latitude"/>-->
-<!--        <result column="camera_capture_area" property="cameraCaptureArea"/>-->
-<!--        <result column="camera_fun_type" property="cameraFunType"/>-->
-<!--        <result column="on_state" property="onState"/>-->
-<!--        <result column="civil_code" property="civilCode"/>-->
-<!--        <result column="integrated_device" property="integratedDevice"/>-->
-<!--        <result column="camera_brand" property="cameraBrand"/>-->
-<!--        <result column="address" property="address"/>-->
-<!--        <result column="public_security" property="publicSecurity"/>-->
-<!--        <result column="installed_time" property="installedTime"/>-->
-<!--        <result column="management_unit" property="managementUnit"/>-->
-<!--        <result column="mu_contact_info" property="muContactInfo"/>-->
-<!--        <result column="storage_days" property="storageDays"/>-->
-<!--        <result column="monitor_azimuth" property="monitorAzimuth"/>-->
-<!--        <result column="scene_photo_addr" property="scenePhotoAddr"/>-->
-<!--        <result column="model" property="model"/>-->
-<!--        <result column="site_vulgo" property="siteVulgo"/>-->
-<!--        <result column="camera_type" property="cameraType"/>-->
-<!--        <result column="camera_light_type" property="cameraLightType"/>-->
-<!--        <result column="encoded_format" property="encodedFormat"/>-->
-<!--        <result column="camera_dept" property="cameraDept"/>-->
-<!--        <result column="hybm" property="hybm"/>-->
-<!--        <result column="lxbm" property="lxbm"/>-->
-<!--        <collection property="dynamicColumnList" select="getDyColumns" column="{id=id,tableName=tableName,keyword=keyword}" ofType="com.ycl.platform.domain.vo.DynamicColumnVO"/>-->
-<!--    </resultMap>-->
-
-<!--    <resultMap id="dynamicColumnMap" type="com.ycl.platform.domain.vo.DynamicColumnVO">-->
-<!--        <result column="prop_name" property="propName"/>-->
-<!--        <result column="label_value" property="labelValue"/>-->
-<!--        <result column="column_value" property="columnValue"/>-->
-<!--    </resultMap>-->
-
 
     <delete id="deleteAll">
         delete from t_monitor
@@ -703,16 +668,17 @@
         WHERE
               serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
     </select>
-
     <select id="getDistinctIP" resultType="com.ycl.platform.domain.result.SYS.TMonitorResult">
-        select DISTINCT m.id, m.ip,m.serial_number as no,m.name,m.camera_fun_type as monitorType,d.dept_id,p.province_tag,p.important_tag,p.important_command_image_tag,p.dept_tag,p.online
+        select DISTINCT m.id, m.ip,m.serial_number as no,m.name,m.camera_fun_type as monitorType,d.dept_id,
+        p.province_tag_video, p.province_tag_car, p.province_tag_face,
+        p.important_tag,p.important_command_image_tag,p.dept_tag,p.online
         from t_monitor m
             left join t_yw_point p on m.serial_number = p.serial_number
             left join sys_dept d on p.dept_id = d.dept_id
         where p.online != 0 and p.examine_status = 1
     </select>
 
-    <update id="updateOnline">
+    <update id="updateOnlineFromUyOrHk">
         <foreach collection="onlineList" item="online" separator=";">
             UPDATE
             t_yw_point
@@ -725,12 +691,24 @@
             AND t_monitor.serial_number = t_yw_point.serial_number )
         </foreach>
     </update>
+
+    <update id="updateOnlineFromHk">
+        <foreach collection="onlineList" item="online" separator=";">
+            UPDATE
+            t_yw_point
+            SET
+            online = #{online.online},
+            update_time = #{online.updateTime}
+            WHERE
+            serial_number = #{online.serialNumber}
+        </foreach>
+    </update>
     <update id="batchUpdateOnline">
             UPDATE
             t_yw_point p
             LEFT JOIN t_monitor m on p.serial_number = m.serial_number
             SET
-            p.online = #{online},
+            p.ping_online = #{online},
             p.update_time = #{date}
             WHERE m.ip in
             <foreach collection="ipList" open="(" close=")" separator="," item="ip">
@@ -744,4 +722,24 @@
         on m.serial_number = p.serial_number
         where (m.camera_fun_type = '2' or m.camera_fun_type = '3') and p.examine_status = 1
     </select>
+
+    <select id="getByIp" resultType="com.ycl.platform.domain.result.SYS.TMonitorResult">
+        select m.ip,m.serial_number as no,p.id as pointId,p.province_tag_video,p.province_tag_car,p.province_tag_face,p.dept_tag,p.important_tag,p.important_command_image_tag
+        from t_monitor m
+        left join t_yw_point p on m.serial_number = p.serial_number
+        where p.examine_status = 1 and m.ip in
+        <foreach collection="ipList" item="ip" separator="," close=")" open="(">
+            #{ip}
+        </foreach>
+    </select>
+    <!-- 娓呯悊涓�鏈轰竴妗� -->
+    <delete id="clearMonitor">
+        delete m from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number
+        where p.examine_status != 1
+    </delete>
+
+    <select id ="getVideoIds" resultType="java.lang.String">
+        select serial_number from t_monitor
+        where camera_fun_type like '%1%'
+    </select>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
index ee9d42b..d2bf388 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
@@ -98,7 +98,11 @@
     </insert>
 
     <select id="getErrorList" resultType="com.ycl.system.entity.SysDictData">
-        SELECT da.dict_value, da.dict_label FROM t_work_order_error_type oer INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value WHERE oer.work_order_no = #{workOrderNo}
+        SELECT da.dict_value, da.dict_label
+        FROM t_work_order_error_type oer
+            INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value
+        WHERE oer.work_order_no = #{workOrderNo}
+        ORDER BY oer.create_time
     </select>
 
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
index 1b74f97..5a5c238 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -68,12 +68,15 @@
         <if test="query.unitId != null">
             AND wo.unit_id = #{query.unitId}
         </if>
-        <if test="query.errorType != null and query.errorType != ''">
+        <if test="query.errorTypeList != null and query.errorTypeList.size>0">
             AND (EXISTS (
             SELECT 1
             FROM t_work_order_error_type twoet
             WHERE twoet.work_order_no = wo.work_order_no
-            AND twoet.error_name = #{query.errorType}
+            AND twoet.error_name in
+            <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType">
+                        #{errorType}
+            </foreach>
             ))
         </if>
         <if test="query.keyword != null and query.keyword != ''">
@@ -92,7 +95,7 @@
         ORDER BY wo.work_order_no DESC
     </select>
 
-    <select id="export" resultMap="BaseResultMap">
+    <select id="export" resultType = "com.ycl.platform.domain.vo.WorkOrderVO">
         SELECT
         wo.id,wo.status,
         wo.work_order_no,
@@ -111,11 +114,18 @@
         p.yw_person_name,
         tm.name as source,
         tm.ip as ip,
+        yp.province_tag_video,
+        yp.province_tag_car,
+        yp.province_tag_face,
+        yp.important_tag,
+        yp.important_command_image_tag,
+        yp.dept_tag,
         GROUP_CONCAT(DISTINCT da.dict_label ORDER BY da.dict_label SEPARATOR ',') AS errorType,
         GROUP_CONCAT(DISTINCT ci.img_url ORDER BY ci.create_time DESC SEPARATOR ',') AS imgListStr
         FROM
         t_work_order wo
         INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number
+        INNER JOIN t_yw_point yp ON wo.serial_number = yp.serial_number
         INNER JOIN t_work_order_error_type et ON wo.work_order_no = et.work_order_no
         INNER JOIN sys_dict_data da ON da.dict_value = et.error_name AND da.dict_type = 'error_type'
         INNER JOIN t_yw_unit u ON wo.unit_id = u.id AND u.deleted = 0
@@ -135,12 +145,15 @@
         <if test="query.start != null and query.end != null">
             AND wo.create_time BETWEEN #{query.start} AND #{query.end}
         </if>
-        <if test="query.errorType != null and query.errorType !='' ">
+        <if test="query.errorTypeList != null and query.errorTypeList.size>0">
             AND (EXISTS (
             SELECT 1
             FROM t_work_order_error_type twoet
             WHERE twoet.work_order_no = wo.work_order_no
-            AND twoet.error_name = #{query.errorType}
+            AND twoet.error_name in
+            <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType">
+                #{errorType}
+            </foreach>
             ))
         </if>
         GROUP BY
@@ -149,7 +162,6 @@
         p.yw_person_name
         ORDER BY wo.work_order_no DESC
     </select>
-
     <select id="distributePage" resultType="com.ycl.platform.domain.vo.WorkOrderVO">
         SELECT
         wo.id,wo.status, wo.work_order_no,wo.create_time, wo.unit_id, wo.yw_people_id, wo.yw_handle_time, wo.yw_result,
@@ -157,7 +169,6 @@
         u.unit_name,
         p.yw_person_name,
         yp.serial_number,
-        yp.province_tag,
         yp.important_tag,
         yp.important_command_image_tag,
         odr.create_time as distributeTime,
@@ -205,19 +216,28 @@
         wo.yw_result, wo.yw_check_result, wo.overtime, wo.deduct,
         u.unit_name,
         p.yw_person_name,
-        yp.province_tag,
         yp.important_tag,
         yp.important_command_image_tag,
         odr.create_time,
         su.nick_name
         ORDER BY wo.create_time DESC
     </select>
-
+    <select id="getOfflineWorkOrder" resultType="java.lang.String">
+        select tm.ip
+        FROM t_work_order wo
+        INNER JOIN t_monitor tm ON wo.serial_number = tm.serial_number
+        where wo.status != 'AUDITING_SUCCESS' and wo.deleted = 0
+        AND (EXISTS (
+                SELECT 1
+                FROM t_work_order_error_type twoet
+                WHERE twoet.work_order_no = wo.work_order_no
+                  AND twoet.error_name = 'DEVICEOFFLINE'
+            ))
+    </select>
     <select id="handlingWorkOrderList" resultType="com.ycl.platform.domain.vo.YwPointJobVO">
         SELECT
              wo.id,
              wod.create_time,
-             yp.province_tag,
              yp.important_tag,
              yp.important_command_image_tag
         FROM
@@ -251,6 +271,7 @@
             WHERE DATE_FORMAT(w.create_time, '%Y') = DATE_FORMAT(NOW(), '%Y')
                 AND w.deleted = 0 AND unit_id = #{unitId}
             GROUP BY dateType
+            ORDER BY dateType
         </if>
 
         <if test="dateType == 'week'">
@@ -267,6 +288,7 @@
             w.create_time BETWEEN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) AND DATE_ADD(CURDATE(), INTERVAL (6 - WEEKDAY(CURDATE())) DAY)
                AND w.deleted = 0 AND unit_id = #{unitId}
             GROUP BY dateType
+            ORDER BY dateType
         </if>
 
         <if test="dateType == 'day'">
@@ -283,6 +305,7 @@
                 DATE_FORMAT(w.create_time, '%Y-%m-%d') BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND LAST_DAY(CURDATE())
               AND w.deleted = 0 AND unit_id = #{unitId}
             GROUP BY dateType
+            ORDER BY dateType
         </if>
     </select>
 
@@ -294,7 +317,7 @@
         FROM t_work_order w
         LEFT JOIN t_yw_point p ON w.serial_number = p.serial_number AND p.deleted = 0
         WHERE w.deleted = 0
-        <if test="dataScope == 1"> AND p.province_tag = 1 </if>
+        <if test="dataScope == 1"> AND (p.province_tag_video = 1 or p.province_tag_car = 1 or p.province_tag_face = 1)</if>
         <if test="dataScope == 3"> AND p.dept_tag = 1 </if>
         <if test="deptId != null"> AND p.dept_id = #{deptId} </if>
     </select>
@@ -309,7 +332,7 @@
         LEFT JOIN t_yw_point p ON p.dept_id = d.dept_id AND p.deleted = 0
         LEFT JOIN t_work_order w ON w.serial_number = p.serial_number AND w.deleted = 0
         WHERE d.del_flag = 0 AND d.area IS NOT NULL
-        <if test="dataScope == 1"> AND p.province_tag = 1 </if>
+        <if test="dataScope == 1"> AND (p.province_tag_video = 1 or p.province_tag_car = 1 or p.province_tag_face = 1)</if>
         <if test="dataScope == 3"> AND p.dept_tag = 1 </if>
         <!-- <if test="deptId != null"> AND p.dept_id = #{deptId} </if> -->
         GROUP BY d.area, d.dept_id
@@ -324,7 +347,7 @@
         FROM
              t_work_order wo
         WHERE
-            wo.status = 'YW_HANDLE'
+            (wo.status = 'YW_HANDLE' or wo.status ='DISTRIBUTED' )
             AND wo.deleted = 0
     </select>
 
@@ -336,12 +359,16 @@
     </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
         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
-        WHERE wo.deleted = 0 AND wo.status = #{status}  AND woar.result = #{auditStatus}
-        AND wo.deduct = 0 AND woar.create_time between #{startTime} and #{endTime}
+        LEFT JOIN t_work_order_auditing_record woar ON woar.work_order_no = wo.work_order_no and woar.result = #{auditStatus}
+        WHERE wo.deleted = 0 AND wo.deduct = 0 AND wo.status = #{status}
+        AND woet.error_name in
+        <foreach collection="errorList" item="error" separator="," open="(" close=")">
+            #{error}
+        </foreach>
+        AND woar.create_time between #{startTime} and #{endTime}
     </select>
 
     <update id="updateMany">
@@ -444,4 +471,18 @@
             </foreach>
         </where>
     </select>
+
+    <select id="getAuditTimeList" resultType="com.ycl.platform.domain.vo.WorkOrderVO">
+        select work_order_no ,create_time as auditTime from t_work_order_auditing_record where work_order_no in
+        <foreach collection="workOrderNos" item="no" open="(" close=")" separator=",">
+            #{no}
+        </foreach>
+    </select>
+    <select id="getHandleTimeList" resultType="com.ycl.platform.domain.vo.WorkOrderVO">
+        select work_order_no ,create_time as handleTime from t_work_order_yw_condition_record
+        where sys_msg = 0 and  work_order_no in
+        <foreach collection="workOrderNos" item="no" open="(" close=")" separator=",">
+            #{no}
+        </foreach>
+    </select>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
index 0b266b3..74a5004 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/YwPointMapper.xml
@@ -2,26 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ycl.platform.mapper.YwPointMapper">
 
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="BaseResultMap" type="com.ycl.platform.domain.vo.YwPointVO">
-        <result column="id" property="id"/>
-        <result column="point_name" property="pointName"/>
-        <result column="start_time" property="startTime"/>
-        <result column="end_time" property="endTime"/>
-        <result column="unit_id" property="unitId"/>
-        <result column="unit_name" property="unitName"/>
-        <result column="status" property="status"/>
-        <result column="dept_id" property="deptId"/>
-        <result column="dept_name" property="deptName"/>
-        <result column="remark" property="remark"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="province_tag" property="provinceTag"/>
-        <result column="important_tag" property="importantTag"/>
-        <result column="important_command_image_tag" property="importantCommandImageTag"/>
-        <result column="dept_tag" property="deptTag"/>
-    </resultMap>
-
     <!-- 鍒嗛〉鏄犲皠缁撴灉 -->
     <resultMap id="pageMap" type="com.ycl.platform.domain.vo.YwPointVO">
         <result column="id" property="id"/>
@@ -33,10 +13,14 @@
         <result column="status" property="status"/>
         <result column="dept_id" property="deptId"/>
         <result column="dept_name" property="deptName"/>
+        <result column="username" property="username"/>
+        <result column="password" property="password"/>
         <result column="remark" property="remark"/>
         <result column="create_time" property="createTime"/>
         <result column="update_time" property="updateTime"/>
-        <result column="province_tag" property="provinceTag"/>
+        <result column="province_tag_video" property="provinceTagVideo"/>
+        <result column="province_tag_car" property="provinceTagCar"/>
+        <result column="province_tag_face" property="provinceTagFace"/>
         <result column="important_tag" property="importantTag"/>
         <result column="important_command_image_tag" property="importantCommandImageTag"/>
         <result column="dept_tag" property="deptTag"/>
@@ -50,7 +34,6 @@
         <result column="label_value" property="labelValue"/>
         <result column="column_value" property="columnValue"/>
     </resultMap>
-
     <select id="page" resultMap="pageMap">
         SELECT
         typ.id,
@@ -66,7 +49,9 @@
         typ.create_time,
         typ.update_time,
         typ.important_tag,
-        typ.province_tag,
+        typ.province_tag_video,
+        typ.province_tag_car,
+        typ.province_tag_face,
         typ.important_command_image_tag,
         typ.dept_tag,
         't_yw_point' as tableName,
@@ -99,125 +84,17 @@
 <!--        </if>-->
     </select>
 
-    <select id="dataCenterPage" resultType="com.ycl.platform.domain.vo.PointDetailVO">
-        SELECT
-        m.*
-        FROM
-        t_yw_point p INNER JOIN t_monitor m ON p.serial_number = m.serial_number
-        <where>
-            <if test="query.keyword != null and query.keyword != ''">
-                AND (m.name like concat('%', #{query.keyword}, '%') OR m.serial_number like concat('%',
-                #{query.keyword}, '%'))
-            </if>
-            <if test="query.dataType == 1">
-                AND p.province_tag = 1
-            </if>
-            <if test="query.dataType == 2">
-                AND p.dept_tag = 1
-            </if>
-            <choose>
-                <when test="query.deptTag == 1">
-                    AND p.dept_tag = 1
-                </when>
-                <when test="query.deptTag == 2">
-                    AND p.province_tag = 1
-                </when>
-                <when test="query.deptTag == 3">
-                    AND p.important_tag = 1
-                </when>
-                <when test="query.deptTag == 4">
-                    AND p.important_command_image_tag = 1
-                </when>
-                <when test="query.deptTag == 5">
-                    AND p.new_device = 1
-                </when>
-            </choose>
-            <choose>
-                <when test="query.deviceType == 1">
-                    AND m.camera_fun_type like '%1%'
-                </when>
-                <when test="query.deviceType == 2">
-                    AND m.camera_fun_type like '%2%'
-                </when>
-                <when test="query.deviceType == 3">
-                    AND m.camera_fun_type like '%3%'
-                </when>
-            </choose>
-        </where>
-    </select>
-
-    <select id="distinctCount" resultType="integer">
-        SELECT
-        count(DISTINCT m.serial_number)
-        FROM
-        t_yw_point p INNER JOIN t_monitor m ON p.serial_number = m.serial_number
-        <where>
-            <if test="query.dataType == 1">
-                AND p.province_tag = 1
-            </if>
-            <if test="query.dataType == 2">
-                AND p.dept_tag = 1
-            </if>
-            <choose>
-                <when test="query.deptTag == 1">
-                    AND dept_tag = 1
-                </when>
-                <when test="query.deptTag == 2">
-                    AND province_tag = 1
-                </when>
-                <when test="query.deptTag == 3">
-                    AND important_tag = 1
-                </when>
-                <when test="query.deptTag == 4">
-                    AND important_command_image_tag = 1
-                </when>
-                <when test="query.deptTag == 5">
-                    AND new_device = 1
-                </when>
-            </choose>
-            <choose>
-                <when test="query.deviceType == 1">
-                    AND m.camera_fun_type like '%1%'
-                </when>
-                <when test="query.deviceType == 2">
-                    AND m.camera_fun_type like '%2%'
-                </when>
-                <when test="query.deviceType == 3">
-                    AND m.camera_fun_type like '%3%'
-                </when>
-            </choose>
-        </where>
-    </select>
-
     <select id="home" resultType="com.ycl.platform.domain.entity.YwPoint">
         <![CDATA[
         SELECT t_yw_point.id, point_name, start_time, end_time, status, unit_name AS remark
         FROM t_yw_point
                  LEFT JOIN t_yw_unit ON t_yw_unit.id = t_yw_point.unit_id AND t_yw_point.deleted = 0
-        WHERE t_yw_point.deleted = 0
+        WHERE t_yw_point.deleted = 0 AND t_yw_point.examine_status = 1
           AND TIMESTAMPDIFF(MONTH, NOW(), end_time) <= (SELECT config_value
                                                         FROM sys_config
                                                         WHERE config_key = 'operation.and.maintenance.expiration.warning.time')
         ORDER BY end_time limit 50
         ]]>
-    </select>
-
-    <select id="selectByTag" resultType="com.ycl.platform.domain.entity.YwPoint">
-        select * from t_yw_point
-        <where>
-            <if test="important!=null and important == true ">
-                and important_tag = #{important}
-            </if>
-            <if test="province!=null and province == true ">
-                and province_tag = #{province}
-            </if>
-            <if test="commandImage!=null and commandImage == true ">
-                and important_command_image_tag = #{commandImage}
-            </if>
-            <if test="deptTag !=null and deptTag == true ">
-                and dept_tag = #{deptTag}
-            </if>
-        </where>
     </select>
 
     <select id="export" resultType ="com.ycl.platform.domain.excel.PointExport">
@@ -229,8 +106,12 @@
         yu.unit_name,
         yp.start_time,
         yp.end_time,
+        yp.username,
+        yp.password,
         d.area,
-        CASE WHEN yp.province_tag = 0 THEN '鍚�' ELSE '鏄�' END AS provinceTagString,
+        CASE WHEN yp.province_tag_video = 0 THEN '鍚�' ELSE '鏄�' END AS provinceTagVideoString,
+        CASE WHEN yp.province_tag_car = 0 THEN '鍚�' ELSE '鏄�' END AS provinceTagCarString,
+        CASE WHEN yp.province_tag_face = 0 THEN '鍚�' ELSE '鏄�' END AS provinceTagFaceString,
         CASE WHEN yp.important_tag = 0 THEN '鍚�' ELSE '鏄�' END AS importantTagString,
         CASE WHEN yp.important_command_image_tag = 0 THEN '鍚�' ELSE '鏄�' END AS importantCommandImageTagString,
         CASE WHEN yp.dept_tag = 0 THEN '鍚�' ELSE '鏄�' END AS deptTagString
@@ -265,9 +146,13 @@
                 start_time = #{point.startTime},
                 end_time = #{point.endTime},
             </if>
-            province_tag = #{point.provinceTag},
+            province_tag_video = #{point.provinceTagVideo},
+            province_tag_car = #{point.provinceTagCar},
+            province_tag_face = #{point.provinceTagFace},
             important_command_image_tag = #{point.importantCommandImageTag},
-            dept_tag = #{point.deptTag}
+            dept_tag = #{point.deptTag},
+            username = #{point.username},
+            password = #{point.password}
             WHERE serial_number = #{point.serialNumber}
         </foreach>
     </update>
@@ -344,17 +229,16 @@
             AND ar.result = 1
         ORDER BY ar.create_time DESC limit 1
     </select>
-
     <select id="getTagsByGB" resultType="com.ycl.platform.domain.vo.CheckTagVO">
         SELECT
-        serial_number as no, province_tag, important_tag, important_command_image_tag, dept_tag
+        serial_number as no, province_tag_face,province_tag_car,province_tag_video, important_tag, important_command_image_tag, dept_tag
         FROM
         t_yw_point
         WHERE
         deleted = 0 AND serial_number in
         <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
         GROUP BY
-        serial_number, province_tag, important_tag, important_command_image_tag, dept_tag
+        serial_number, province_tag_face,province_tag_car,province_tag_video, important_tag, important_command_image_tag, dept_tag
     </select>
 
     <select id="selectToCount" resultType="com.ycl.platform.domain.vo.YwPointVO">
@@ -362,8 +246,14 @@
         left join t_monitor m on p.serial_number = m.serial_number
         <where>
             p.examine_status = 1 and m.camera_fun_type like concat('%',#{examineCategory},'%')
-            <if test="examineTag == 0">
-                and p.province_tag = 1
+            <if test="examineTag == 0 and examineCategory ==1" >
+                and p.province_tag_video = 1
+            </if>
+            <if test="examineTag == 0 and examineCategory ==2" >
+                and p.province_tag_car = 1
+            </if>
+            <if test="examineTag == 0 and examineCategory ==3" >
+                and p.province_tag_face = 1
             </if>
             <if test="examineTag == 2">
                 and p.dept_tag = 1
@@ -382,8 +272,14 @@
             <if test="deptId !=null">
                 dept_id = #{deptId},
             </if>
-            <if test="provinceTag !=null">
-                province_tag = #{provinceTag},
+            <if test="provinceTagVideo !=null">
+                province_tag_video = #{provinceTagVideo},
+            </if>
+            <if test="provinceTagCar !=null">
+                province_tag_car = #{provinceTagCar},
+            </if>
+            <if test="provinceTagFace !=null">
+                province_tag_face = #{provinceTagFace},
             </if>
             <if test="importantTag !=null">
                 important_tag = #{importantTag},
@@ -394,6 +290,12 @@
             <if test="deptTag !=null">
                 dept_tag = #{deptTag},
             </if>
+            <if test="username !=null and username!=''">
+                username = #{username},
+            </if>
+            <if test="password !=null and password !=''">
+                password = #{password},
+            </if>
             unit_id = #{unitId},
             start_time = #{startTime},
             end_time = #{endTime},
@@ -401,4 +303,10 @@
         </set>
         where id =#{id}
     </update>
+
+    <!-- 娓呯悊涓�鏈轰竴妗� -->
+    <delete id="clearMonitor">
+        delete from t_yw_point p
+        where p.examine_status != 1
+    </delete>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
index 6f84271..23545c9 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/YwUnitMapper.xml
@@ -57,12 +57,15 @@
         <if test="query.start != null and query.end != null">
             AND wo.create_time BETWEEN #{query.start} AND #{query.end}
         </if>
-        <if test="query.errorType != null and query.errorType !='' ">
+        <if test="query.errorTypeList != null and query.errorTypeList.size>0">
             AND (EXISTS (
             SELECT 1
             FROM t_work_order_error_type twoet
             WHERE twoet.work_order_no = wo.work_order_no
-            AND twoet.error_name = #{query.errorType}
+            AND twoet.error_name in
+            <foreach collection="query.errorTypeList" open="(" close=")" separator="," item="errorType">
+                #{errorType}
+            </foreach>
             ))
         </if>
     </select>

--
Gitblit v1.8.0