From 4082ee4d1cd2357771d7f844a57fe4932a1dd4c4 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 21 八月 2024 15:03:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ycl-common/src/main/java/constant/RedisConstant.java                                        |    3 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/SnapshotDataMonitorResult.java     |   22 +
 ycl-server/src/main/java/com/ycl/task/ContractTask.java                                     |  102 ++++
 ycl-common/src/main/java/constant/CheckThreadConstants.java                                 |    4 
 ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java                          |    4 
 ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml                         |   13 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java    |   78 +++
 ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java              |   65 +++
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/CrossDetailResult.java             |   45 ++
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/MonitoringDetailResult.java        |   47 ++
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java          |   18 
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java |   96 ++++
 ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java      |   20 
 ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml                                  |    6 
 ycl-server/src/main/java/com/ycl/task/MonitorTask.java                                      |   33 +
 ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml                      |   81 +++
 ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java                       |    3 
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java           |   60 +-
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java          |  329 +++++++++++++++
 ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java                  |   12 
 ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml                               |   21 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRuleVO.java                      |   62 ++
 ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java                 |   11 
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java               |   38 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/VideoOnlineResult.java             |   39 +
 25 files changed, 1,142 insertions(+), 70 deletions(-)

diff --git a/ycl-common/src/main/java/constant/CheckThreadConstants.java b/ycl-common/src/main/java/constant/CheckThreadConstants.java
index 2f4335e..1099519 100644
--- a/ycl-common/src/main/java/constant/CheckThreadConstants.java
+++ b/ycl-common/src/main/java/constant/CheckThreadConstants.java
@@ -13,7 +13,5 @@
     //杞﹁締銆佷汉鑴歌�冩牳锛岀偣浣嶅湪绾跨巼锛屽尯鍘夸笉灏戜簬40璺�
     public final static Integer Check_Car_SiteOnline = 40;
     public final static Integer Check_Face_SiteOnline = 40;
-    //杞﹁締銆佷汉鑴稿湪绾跨巼  Redis 姣忔湀鏁版嵁涓柇娆℃暟 Hash key
-    public final static String Check_Car_ViewConnect = "CarViewConnectNoData";
-    public final static String Check_Face_ViewConnect = "FaceViewConnectNoData";
+
 }
diff --git a/ycl-common/src/main/java/constant/RedisConstant.java b/ycl-common/src/main/java/constant/RedisConstant.java
index 2e024e8..b576a18 100644
--- a/ycl-common/src/main/java/constant/RedisConstant.java
+++ b/ycl-common/src/main/java/constant/RedisConstant.java
@@ -3,4 +3,7 @@
 public class RedisConstant {
     /** 涓�鏈轰竴妗g洰褰曚竴鑷寸巼 澶氬嚭鏉ョ殑璁惧 Set闆嗗悎 */
     public static final String New_Monitor_Set="New_Monitor_Set";
+    //杞﹁締銆佷汉鑴稿湪绾跨巼  Redis 姣忔湀鏁版嵁涓柇娆℃暟 Hash key
+    public final static String Check_Car_ViewConnect = "CarViewConnectNoData";
+    public final static String Check_Face_ViewConnect = "FaceViewConnectNoData";
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java
new file mode 100644
index 0000000..96d83e9
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/ContractRuleRecord.java
@@ -0,0 +1,38 @@
+package com.ycl.platform.domain.entity;
+
+import annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 鍚堝悓瑙勫垯璁板綍瀵硅薄 t_contract_rule_record
+ *
+ * @author ruoyi
+ * @date 2024-08-21
+ */
+@Data
+public class ContractRuleRecord
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 鍗曚綅id */
+    @Excel(name = "鍗曚綅id")
+    private Long unitId;
+
+    /** 鐐逛綅鍦ㄧ嚎鐜� */
+    @Excel(name = "鐐逛綅鍦ㄧ嚎鐜�")
+    private Integer siteOnline;
+
+    /** 鍒涘缓鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+
+    private Long deleted;
+}
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 af13839..7078f96 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
@@ -5,6 +5,8 @@
 import org.springframework.data.mongodb.core.index.TextIndexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.Objects;
+
 /**
  * 鍗″彛灞炴�х洃娴嬬粨鏋滐細杞﹁締锛堣溅杈嗗崱鍙d俊鎭噰闆嗗噯纭巼銆侊級
  *
@@ -55,9 +57,52 @@
     private Integer lalType;
 
     /**
+     * 缁忕含搴︾洃娴嬬粨鏋滐紝琛ㄧず缁忕含搴︿俊鎭殑鐩戞祴鐘舵�併��
+     * 1:姝e父 2:缁忕含搴︾己澶� 3:涓嶅湪杈栧尯 4:绮惧害杩囦綆
+     */
+    private String lalTypeText;
+
+    /**
      * 鍥芥爣缂栫爜鐩戞祴缁撴灉锛岃〃绀哄浗鏍囩紪鐮佺殑鐩戞祴鐘舵�併��
      * 1:姝e父 2:缂栫爜闀垮害涓嶇瓑浜�20浣� 3:鍓�6浣嶄笉绗﹀悎鏍囧噯 4:11鑷�13浣嶄笉绗﹀悎鏍囧噯
      */
     private Integer gbCodeType;
 
+    /**
+     * 鍥芥爣缂栫爜鐩戞祴缁撴灉锛岃〃绀哄浗鏍囩紪鐮佺殑鐩戞祴鐘舵�併��
+     * 1:姝e父 2:缂栫爜闀垮害涓嶇瓑浜�20浣� 3:鍓�6浣嶄笉绗﹀悎鏍囧噯 4:11鑷�13浣嶄笉绗﹀悎鏍囧噯
+     */
+    private String gbCodeTypeText;
+
+    public String getLalTypeText() {
+        if (Objects.equals(lalType, 1)) {
+            lalTypeText = "姝e父";
+        }
+        if (Objects.equals(lalType, 2)) {
+            lalTypeText = "缁忕含搴︾己澶�";
+        }
+        if (Objects.equals(lalType, 3)) {
+            lalTypeText = "涓嶅湪杈栧尯";
+        }
+        if (Objects.equals(lalType, 4)) {
+            lalTypeText = "绮惧害杩囦綆";
+        }
+        return lalTypeText;
+    }
+
+    public String getGbCodeTypeText() {
+        if (Objects.equals(gbCodeType, 1)) {
+            gbCodeTypeText = "姝e父";
+        }
+        if (Objects.equals(gbCodeType, 2)) {
+            gbCodeTypeText = "缂栫爜闀垮害涓嶇瓑浜�20浣�";
+        }
+        if (Objects.equals(gbCodeType, 3)) {
+            gbCodeTypeText = "鍓�6浣嶄笉绗﹀悎鏍囧噯";
+        }
+        if (Objects.equals(gbCodeType, 4)) {
+            gbCodeTypeText = "11鑷�13浣嶄笉绗﹀悎鏍囧噯";
+        }
+        return gbCodeTypeText;
+    }
 }
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 309d49c..b7b4fa0 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
@@ -75,6 +75,11 @@
      */
     private Integer snapResult;
 
+    /**
+     * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋滐紝1:姝e父 2:鏃犳暟鎹� 4:鏁版嵁閲忓皯
+     */
+    private String snapResultText;
+
     // 浠ヤ笅涓哄祵濂楀璞$殑瀛楁
 
     /**
@@ -97,6 +102,19 @@
      */
     private SnapUnique snapUnique;
 
+    public String getSnapResultText() {
+        if (snapResult == 1) {
+            snapResultText = "姝e父";
+        }
+        if (snapResult == 2) {
+            snapResultText = "鏃犳暟鎹�";
+        }
+        if (snapResult == 4) {
+            snapResultText = "鏁版嵁閲忓皯";
+        }
+        return snapResultText;
+    }
+
     // 鍐呭祵瀵硅薄瀹氫箟
 
     @Data
@@ -117,6 +135,11 @@
         private Integer todayClockResult;
 
         /**
+         * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String todayClockResultText;
+
+        /**
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹腑鏃堕挓鍑嗙‘鏁版嵁閲�
          */
         private Integer allClockCount;
@@ -125,6 +148,31 @@
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹腑鏃堕挓鍑嗙‘鎬у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
          */
         private Integer allClockResult;
+
+        /**
+         * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹腑鏃堕挓鍑嗙‘鎬у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String allClockResultText;
+
+        public String getTodayClockResultText() {
+            if (todayClockResult == 1) {
+                todayClockResultText = "鍚堟牸";
+            }
+            if (todayClockResult == 0) {
+                todayClockResultText = "涓嶅悎鏍�";
+            }
+            return todayClockResultText;
+        }
+
+        public String getAllClockResultText() {
+            if (allClockResult == 1) {
+                allClockResultText = "鍚堟牸";
+            }
+            if (allClockResult == 0) {
+                allClockResultText = "涓嶅悎鏍�";
+            }
+            return allClockResultText;
+        }
     }
 
     @Data
@@ -160,6 +208,11 @@
         private Integer todayTimelyResult;
 
         /**
+         * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹強鏃舵�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String todayTimelyResultText;
+
+        /**
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹腑寤惰繜鏁版嵁閲�
          */
         private Integer allDelayCount;
@@ -183,6 +236,31 @@
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹腑鍙婃椂鎬у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
          */
         private Integer allTimelyResult;
+
+        /**
+         * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹腑鍙婃椂鎬у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String allTimelyResultText;
+
+        public String getTodayTimelyResultText() {
+            if (todayTimelyResult == 1) {
+                todayTimelyResultText = "鍚堟牸";
+            }
+            if (todayTimelyResult == 0) {
+                todayTimelyResultText = "涓嶅悎鏍�";
+            }
+            return todayTimelyResultText;
+        }
+
+        public String getAllTimelyResultText() {
+            if (allTimelyResult == 1) {
+                allTimelyResultText = "鍚堟牸";
+            }
+            if (allTimelyResult == 0) {
+                allTimelyResultText = "涓嶅悎鏍�";
+            }
+            return allTimelyResultText;
+        }
     }
 
     @Data
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 14e91b0..d4105dd 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
@@ -5,6 +5,8 @@
 import org.springframework.data.mongodb.core.index.TextIndexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.Objects;
+
 /**
  * 閲囬泦璁惧灞炴�х洃娴嬬粨鏋滐細浜鸿劯锛堜汉鑴稿崱鍙d俊鎭噰闆嗗噯纭巼锛�
  *
@@ -54,9 +56,21 @@
     private Integer lalType;
 
     /**
+     * 缁忕含搴︾洃娴嬬粨鏋滐紝琛ㄧず缁忕含搴︿俊鎭殑鐩戞祴鐘舵�併��
+     * 1:姝e父 2:缁忕含搴︾己澶� 3:涓嶅湪杈栧尯 4:绮惧害杩囦綆
+     */
+    private String lalTypeText;
+
+    /**
      * 鍥芥爣缂栫爜鐩戞祴缁撴灉: 1:姝e父 2:缂栫爜闀垮害涓嶇瓑浜�20浣� 3:鍓�6浣嶄笉绗﹀悎鏍囧噯 4:11鑷�13浣嶄笉绗﹀悎鏍囧噯
      */
     private Integer gbCodeType;
+
+    /**
+     * 鍥芥爣缂栫爜鐩戞祴缁撴灉锛岃〃绀哄浗鏍囩紪鐮佺殑鐩戞祴鐘舵�併��
+     * 1:姝e父 2:缂栫爜闀垮害涓嶇瓑浜�20浣� 3:鍓�6浣嶄笉绗﹀悎鏍囧噯 4:11鑷�13浣嶄笉绗﹀悎鏍囧噯
+     */
+    private String gbCodeTypeText;
 
     /**
      * 鏅�氳兘鍔涢泦
@@ -68,4 +82,37 @@
      */
     private String intelligentSet;
 
+
+    public String getLalTypeText() {
+        if (Objects.equals(lalType, 1)) {
+            lalTypeText = "姝e父";
+        }
+        if (Objects.equals(lalType, 2)) {
+            lalTypeText = "缁忕含搴︾己澶�";
+        }
+        if (Objects.equals(lalType, 3)) {
+            lalTypeText = "涓嶅湪杈栧尯";
+        }
+        if (Objects.equals(lalType, 4)) {
+            lalTypeText = "绮惧害杩囦綆";
+        }
+        return lalTypeText;
+    }
+
+    public String getGbCodeTypeText() {
+        if (Objects.equals(gbCodeType, 1)) {
+            gbCodeTypeText = "姝e父";
+        }
+        if (Objects.equals(gbCodeType, 2)) {
+            gbCodeTypeText = "缂栫爜闀垮害涓嶇瓑浜�20浣�";
+        }
+        if (Objects.equals(gbCodeType, 3)) {
+            gbCodeTypeText = "鍓�6浣嶄笉绗﹀悎鏍囧噯";
+        }
+        if (Objects.equals(gbCodeType, 4)) {
+            gbCodeTypeText = "11鑷�13浣嶄笉绗﹀悎鏍囧噯";
+        }
+        return gbCodeTypeText;
+    }
+
 }
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 d343175..049c639 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
@@ -5,6 +5,8 @@
 import org.springframework.data.mongodb.core.index.TextIndexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.Objects;
+
 /**
  * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋滐細杞﹁締锛堣鍥惧簱瀵规帴绋冲畾鎬с�佺偣浣嶅湪绾跨巼銆侊級
  *
@@ -66,4 +68,24 @@
      */
     private int resultType;
 
+    /**
+     * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋� 1:姝e父 2:鏃犳暟鎹� 3:鏁版嵁绐侀檷 4:鏁版嵁閲忓皯
+     */
+    private String resultTypeText;
+
+    public String getResultTypeText() {
+        if (Objects.equals(resultType, 1)) {
+            resultTypeText = "姝e父";
+        }
+        if (Objects.equals(resultType, 2)) {
+            resultTypeText = "鏃犳暟鎹�";
+        }
+        if (Objects.equals(resultType, 3)) {
+            resultTypeText = "鏁版嵁绐侀檷";
+        }
+        if (Objects.equals(resultType, 4)) {
+            resultTypeText = "鏁版嵁閲忓皯";
+        }
+        return resultTypeText;
+    }
 }
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 0a86ceb..2141d74 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
@@ -70,6 +70,11 @@
      */
     private Integer snapResult;
 
+    /**
+     * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋滐紝1:姝e父 2:鏃犳暟鎹� 4:鏁版嵁閲忓皯
+     */
+    private String snapResultText;
+
     // 浠ヤ笅涓哄祵濂楀璞$殑瀛楁
 
     /**
@@ -97,6 +102,19 @@
      */
     private Integrity integrity;
 
+    public String getSnapResultText() {
+        if (snapResult == 1) {
+            snapResultText = "姝e父";
+        }
+        if (snapResult == 2) {
+            snapResultText = "鏃犳暟鎹�";
+        }
+        if (snapResult == 4) {
+            snapResultText = "鏁版嵁閲忓皯";
+        }
+        return snapResultText;
+    }
+
     // 鍐呭祵瀵硅薄瀹氫箟
 
     @Data
@@ -117,6 +135,11 @@
         private Integer todayClockResult;
 
         /**
+         * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String todayClockResultText;
+
+        /**
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹椂閽熷噯纭暟鎹噺
          */
         private Integer allClockCount;
@@ -125,6 +148,31 @@
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
          */
         private Integer allClockResult;
+
+        /**
+         * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String allClockResultText;
+
+        public String getTodayClockResultText() {
+            if (todayClockResult == 1) {
+                todayClockResultText = "鍚堟牸";
+            }
+            if (todayClockResult == 0) {
+                todayClockResultText = "涓嶅悎鏍�";
+            }
+            return todayClockResultText;
+        }
+
+        public String getAllClockResultText() {
+            if (allClockResult == 1) {
+                allClockResultText = "鍚堟牸";
+            }
+            if (allClockResult == 0) {
+                allClockResultText = "涓嶅悎鏍�";
+            }
+            return allClockResultText;
+        }
     }
 
     @Data
@@ -160,6 +208,11 @@
         private Integer todayTimelyResult;
 
         /**
+         * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹暟鎹強鏃舵�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String todayTimelyResultText;
+
+        /**
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ暟鎹欢杩熼噺
          */
         private Integer allDelayCount;
@@ -183,6 +236,31 @@
          * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ暟鎹強鏃舵�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
          */
         private Integer allTimelyResult;
+
+        /**
+         * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ暟鎹強鏃舵�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸
+         */
+        private String allTimelyResultText;
+
+        public String getTodayTimelyResultText() {
+            if (todayTimelyResult == 1) {
+                todayTimelyResultText = "鍚堟牸";
+            }
+            if (todayTimelyResult == 0) {
+                todayTimelyResultText = "涓嶅悎鏍�";
+            }
+            return todayTimelyResultText;
+        }
+
+        public String getAllTimelyResultText() {
+            if (allTimelyResult == 1) {
+                allTimelyResultText = "鍚堟牸";
+            }
+            if (allTimelyResult == 0) {
+                allTimelyResultText = "涓嶅悎鏍�";
+            }
+            return allTimelyResultText;
+        }
     }
 
     @Data
@@ -214,6 +292,24 @@
          * 杞︾墝璇嗗埆寮傚父锛氱粨鏋滅被鍨� 1:姝e父 2:璇嗗埆鐜囦綆 3:鏄煎璇嗗埆鐜囩獊鍙�
          */
         private Integer recgResult;
+
+        /**
+         * 杞︾墝璇嗗埆寮傚父锛氱粨鏋滅被鍨� 1:姝e父 2:璇嗗埆鐜囦綆 3:鏄煎璇嗗埆鐜囩獊鍙�
+         */
+        private String recgResultText;
+
+        public String getRecgResultText() {
+            if (recgResult == 1) {
+                recgResultText = "姝e父";
+            }
+            if (recgResult == 2) {
+                recgResultText = "璇嗗埆鐜囦綆";
+            }
+            if (recgResult == 3) {
+                recgResultText = "鏄煎璇嗗埆鐜囩獊鍙�";
+            }
+            return recgResultText;
+        }
     }
 
     @Data
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 44dd4ff..7b80843 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
@@ -2,10 +2,12 @@
 
 import com.ycl.platform.domain.result.BaseResult;
 import lombok.Data;
+import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.data.mongodb.core.index.TextIndexed;
 import org.springframework.data.mongodb.core.mapping.Document;
+import utils.StringUtils;
 
-import java.util.Date;
+import java.util.*;
 
 /**
  * 涓�鏈轰竴妗�
@@ -173,4 +175,329 @@
      */
     private String SSBMHY;
 
+
+    public String getJKDWLX() {
+        if (Objects.equals(JKDWLX, "1")) {
+            this.JKDWLX = "涓�绫昏棰戠洃鎺х偣";
+        }
+        if (Objects.equals(JKDWLX, "2")) {
+            this.JKDWLX = "浜岀被瑙嗛鐩戞帶鐐�";
+        }
+        if (Objects.equals(JKDWLX, "3")) {
+            this.JKDWLX = "涓夌被瑙嗛鐩戞帶鐐�";
+        }
+        if (Objects.equals(JKDWLX, "4")) {
+            this.JKDWLX = "鍏畨鍐呴儴瑙嗛鐩戞帶鐐�";
+        }
+        if (Objects.equals(JKDWLX, "9")) {
+            this.JKDWLX = "鍏朵粬鐐逛綅";
+        }
+        return JKDWLX;
+    }
+
+    public String getSXJGNLX() {
+        List<String> sxjgnlx = new ArrayList<>();
+        if (StringUtils.contains(SXJGNLX, "1")) {
+            sxjgnlx.add("瑙嗛鐩戞帶");
+        }
+        if (StringUtils.contains(SXJGNLX, "2")) {
+            sxjgnlx.add("杞﹁締璇嗗埆");
+        }
+        if (StringUtils.contains(SXJGNLX, "3")) {
+            sxjgnlx.add("浜哄憳璇嗗埆");
+        }
+        if (!sxjgnlx.isEmpty()) {
+            this.SXJGNLX = String.join("/", sxjgnlx);
+        }
+        return SXJGNLX;
+    }
+
+    public String getSBZT() {
+        if (Objects.equals(SBZT, "1")) {
+            this.SBZT = "鍦ㄧ敤";
+        }
+        if (Objects.equals(SBZT, "2")) {
+            this.SBZT = "缁翠慨";
+        }
+        if (Objects.equals(SBZT, "3")) {
+            this.SBZT = "鎷嗛櫎";
+        }
+        return SBZT;
+    }
+
+    public String getSBCS() {
+        if (Objects.equals(SBCS, "1")) {
+            this.SBCS = "娴峰悍濞佽";
+        }
+        if (Objects.equals(SBCS, "2")) {
+            this.SBCS = "澶у崕";
+        }
+        if (Objects.equals(SBCS, "3")) {
+            this.SBCS = "澶╁湴浼熶笟";
+        }
+        if (Objects.equals(SBCS, "4")) {
+            this.SBCS = "绉戣揪";
+        }
+        if (Objects.equals(SBCS, "5")) {
+            this.SBCS = "瀹夎澹�";
+        }
+        if (Objects.equals(SBCS, "6")) {
+            this.SBCS = "鍗氫笘";
+        }
+        if (Objects.equals(SBCS, "7")) {
+            this.SBCS = "浜氬畨";
+        }
+        if (Objects.equals(SBCS, "8")) {
+            this.SBCS = "鑻遍鎷�";
+        }
+        if (Objects.equals(SBCS, "9")) {
+            this.SBCS = "瀹囪";
+        }
+        if (Objects.equals(SBCS, "10")) {
+            this.SBCS = "娴蜂俊";
+        }
+        if (Objects.equals(SBCS, "11")) {
+            this.SBCS = "涓槦鐢靛瓙";
+        }
+        if (Objects.equals(SBCS, "12")) {
+            this.SBCS = "鏄庢櫙";
+        }
+        if (Objects.equals(SBCS, "13")) {
+            this.SBCS = "鑱旀兂";
+        }
+        if (Objects.equals(SBCS, "14")) {
+            this.SBCS = "涓叴";
+        }
+        if (Objects.equals(SBCS, "99")) {
+            this.SBCS = "鍏朵粬";
+        }
+        return SBCS;
+    }
+
+    public String getSXJLX() {
+        if (Objects.equals(SXJLX, "1")) {
+            this.SXJLX = "鐞冩満";
+        }
+        if (Objects.equals(SXJLX, "2")) {
+            this.SXJLX = "鍗婄悆";
+        }
+        if (Objects.equals(SXJLX, "3")) {
+            this.SXJLX = "鍥哄畾鏋満";
+        }
+        if (Objects.equals(SXJLX, "4")) {
+            this.SXJLX = "閬ユ帶鏋満";
+        }
+        if (Objects.equals(SXJLX, "5")) {
+            this.SXJLX = "鍗″彛鏋満";
+        }
+        if (Objects.equals(SXJLX, "99")) {
+            this.SXJLX = "鏈煡";
+        }
+        return SXJLX;
+    }
+
+
+    public String getBGSX() {
+        if (Objects.equals(BGSX, "1")) {
+            this.BGSX = "鏃犺ˉ鍏�";
+        }
+        if (Objects.equals(BGSX, "2")) {
+            this.BGSX = "绾㈠琛ュ厜";
+        }
+        if (Objects.equals(BGSX, "3")) {
+            this.BGSX = "鐧藉厜琛ュ厜";
+        }
+        if (Objects.equals(BGSX, "9")) {
+            this.BGSX = "鍏朵粬琛ュ厜";
+        }
+        return BGSX;
+    }
+
+    public String getSXJBMGS() {
+        if (Objects.equals(SXJBMGS, "1")) {
+            this.SXJBMGS = "MPEG-4";
+        }
+        if (Objects.equals(SXJBMGS, "2")) {
+            this.SXJBMGS = "H.264";
+        }
+        if (Objects.equals(SXJBMGS, "3")) {
+            this.SXJBMGS = "SVAC";
+        }
+        if (Objects.equals(SXJBMGS, "4")) {
+            this.SXJBMGS = "H.265";
+        }
+        return SXJBMGS;
+    }
+
+    public String getSXJWZLX() {
+        List<String> wzlx = new ArrayList<>();
+        if (StringUtils.isBlank(SXJWZLX)) {
+            return SXJWZLX;
+        }
+        String[] split = SXJWZLX.split("/");
+        if (ArrayUtils.contains(split, "1")) {
+            wzlx.add("鐪侀檯妫�鏌ョ珯");
+        }
+        if (ArrayUtils.contains(split, "2")) {
+            wzlx.add("鍏氭斂鏈哄叧");
+        }
+        if (ArrayUtils.contains(split, "3")) {
+            wzlx.add("杞︾珯鐮佸ご");
+        }
+        if (ArrayUtils.contains(split, "4")) {
+            wzlx.add("涓績骞垮満");
+        }
+        if (ArrayUtils.contains(split, "5")) {
+            wzlx.add("浣撹偛鍦洪");
+        }
+        if (ArrayUtils.contains(split, "6")) {
+            wzlx.add("鍟嗕笟涓績");
+        }
+        if (ArrayUtils.contains(split, "7")) {
+            wzlx.add("瀹楁暀鍦烘墍");
+        }
+        if (ArrayUtils.contains(split, "8")) {
+            wzlx.add("鏍″洯鍛ㄨ竟");
+        }
+        if (ArrayUtils.contains(split, "9")) {
+            wzlx.add("娌诲畨澶嶆潅鍖哄煙");
+        }
+        if (ArrayUtils.contains(split, "10")) {
+            wzlx.add("浜ら�氬共绾�");
+        }
+        if (ArrayUtils.contains(split, "11")) {
+            wzlx.add("鍖婚櫌鍛ㄨ竟");
+        }
+        if (ArrayUtils.contains(split, "12")) {
+            wzlx.add("閲戣瀺鏈烘瀯鍛ㄨ竟");
+        }
+        if (ArrayUtils.contains(split, "13")) {
+            wzlx.add("鍗遍櫓鐗╁搧鍦烘墍鍛ㄨ竟");
+        }
+        if (ArrayUtils.contains(split, "14")) {
+            wzlx.add("鍗氱墿棣嗗睍瑙堥");
+        }
+        if (ArrayUtils.contains(split, "15")) {
+            wzlx.add("閲嶇偣姘村煙銆佽埅閬�");
+        }
+        if (ArrayUtils.contains(split, "96")) {
+            wzlx.add("甯傞檯鍏畨妫�鏌ョ珯");
+        }
+        if (ArrayUtils.contains(split, "97")) {
+            wzlx.add("娑夊鍦烘墍");
+        }
+        if (ArrayUtils.contains(split, "98")) {
+            wzlx.add("杈瑰娌跨嚎");
+        }
+        if (ArrayUtils.contains(split, "99")) {
+            wzlx.add("鏃呮父鏅尯");
+        }
+        this.SXJWZLX = String.join("/", wzlx);
+        return SXJWZLX;
+    }
+
+    public String getJSFW() {
+        if (Objects.equals(JSFW, "1")) {
+            this.JSFW = "涓�";
+        }
+        if (Objects.equals(JSFW, "2")) {
+            this.JSFW = "瑗�";
+        }
+        if (Objects.equals(JSFW, "3")) {
+            this.JSFW = "鍗�";
+        }
+        if (Objects.equals(JSFW, "4")) {
+            this.JSFW = "鍖�";
+        }
+        if (Objects.equals(JSFW, "5")) {
+            this.JSFW = "涓滃崡";
+        }
+        if (Objects.equals(JSFW, "6")) {
+            this.JSFW = "涓滃寳";
+        }
+        if (Objects.equals(JSFW, "7")) {
+            this.JSFW = "瑗垮崡";
+        }
+        if (Objects.equals(JSFW, "8")) {
+            this.JSFW = "瑗垮寳";
+        }
+        if (Objects.equals(JSFW, "9")) {
+            this.JSFW = "鍏ㄥ悜";
+        }
+        return JSFW;
+    }
+
+    public String getLWSX() {
+        if (Objects.equals(LWSX, "0")) {
+            this.LWSX = "宸茶仈缃�";
+        }
+        if (Objects.equals(LWSX, "1")) {
+            this.LWSX = "鏈仈缃�";
+        }
+        return LWSX;
+    }
+
+    public String getSSBMHY() {
+        List<String> ssbmhy = new ArrayList<>();
+        if (StringUtils.isBlank(SSBMHY)) {
+            return SSBMHY;
+        }
+        String[] split = SSBMHY.split("/");
+        if (ArrayUtils.contains(split, "1")) {
+            ssbmhy.add("鍏畨鏈哄叧");
+        }
+        if (ArrayUtils.contains(split, "2")) {
+            ssbmhy.add("鐜繚閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "3")) {
+            ssbmhy.add("鏂囧崥閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "4")) {
+            ssbmhy.add("鍖荤枟閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "5")) {
+            ssbmhy.add("鏃呮父绠$悊");
+        }
+        if (ArrayUtils.contains(split, "6")) {
+            ssbmhy.add("鏂伴椈骞跨數");
+        }
+        if (ArrayUtils.contains(split, "7")) {
+            ssbmhy.add("椋熷搧鍖昏嵂鐩戠潱绠$悊閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "8")) {
+            ssbmhy.add("鏁欒偛绠$悊閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "9")) {
+            ssbmhy.add("妫�瀵熼櫌");
+        }
+        if (ArrayUtils.contains(split, "10")) {
+            ssbmhy.add("娉曢櫌");
+        }
+        if (ArrayUtils.contains(split, "11")) {
+            ssbmhy.add("閲戣瀺閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "12")) {
+            ssbmhy.add("浜ら�氶儴闂�");
+        }
+        if (ArrayUtils.contains(split, "13")) {
+            ssbmhy.add("浣忔埧鍜屽煄涔″缓璁鹃儴闂�");
+        }
+        if (ArrayUtils.contains(split, "14")) {
+            ssbmhy.add("姘村埄閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "15")) {
+            ssbmhy.add("鏋椾笟閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "16")) {
+            ssbmhy.add("瀹夊叏鐢熶骇鐩戠潱閮ㄩ棬");
+        }
+        if (ArrayUtils.contains(split, "17")) {
+            ssbmhy.add("甯傛斂甯傚濮�");
+        }
+        if (ArrayUtils.contains(split, "18")) {
+            ssbmhy.add("鍥藉湡灞�");
+        }
+        this.SSBMHY = String.join("/", ssbmhy);
+        return SSBMHY;
+    }
 }
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 9ed4af2..be732c7 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
@@ -7,6 +7,7 @@
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.Date;
+import java.util.Objects;
 
 /**
  * 褰曞儚鍙敤鎬�
@@ -72,6 +73,11 @@
     private Integer recordStatus;
 
     /**
+     * 褰曞儚瀹屾暣鐘舵�侊紝1锛氬畬鏁达紝0锛氶棿姝囷紝-1锛氬紓甯�
+     */
+    private String recordStatusText;
+
+    /**
      * 缁熻鏃堕棿锛屾牸寮忎负鏃ユ湡瀛楃涓�
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -82,4 +88,16 @@
      */
     private String tenantId;
 
+    public String getRecordStatusText() {
+        if (Objects.equals(recordStatus, 1)) {
+            recordStatusText = "瀹屾暣";
+        }
+        if (Objects.equals(recordStatus, 0)) {
+            recordStatusText = "闂存瓏";
+        }
+        if (Objects.equals(recordStatus, -1)) {
+            recordStatusText = "寮傚父";
+        }
+        return recordStatusText;
+    }
 }
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 7516d2f..6a7bb2f 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
@@ -55,6 +55,10 @@
      */
     private Integer icmpStatus;
     /**
+     * icmp鐘舵��  2/1/-1/0   鍏ㄩ儴/鍦ㄧ嚎/绂荤嚎/鏈煡
+     */
+    private String icmpStatusText;
+    /**
      * 鏈�杩慽cmp鏃堕棿
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -101,6 +105,10 @@
      */
     private Integer status;
     /**
+     * 鍦ㄧ嚎鐘舵��  2/1/-1/0   鍏ㄩ儴/鍦ㄧ嚎/绂荤嚎/鏈煡
+     */
+    private String statusText;
+    /**
      * 鐪佸巺鏍囩
      */
     private String tagStr;
@@ -122,4 +130,35 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date vqdTime;
 
+    public String getIcmpStatusText() {
+        if (icmpStatus == 2) {
+            this.icmpStatusText = "鍏ㄩ儴";
+        }
+        if (icmpStatus == 1) {
+            this.icmpStatusText = "鍦ㄧ嚎";
+        }
+        if (icmpStatus == -1) {
+            this.icmpStatusText = "绂荤嚎";
+        }
+        if (icmpStatus == 0) {
+            this.icmpStatusText = "鏈煡";
+        }
+        return icmpStatusText;
+    }
+
+    public String getStatusText() {
+        if (status == 2) {
+            this.statusText = "鍏ㄩ儴";
+        }
+        if (status == 1) {
+            this.statusText = "鍦ㄧ嚎";
+        }
+        if (status == -1) {
+            this.statusText = "绂荤嚎";
+        }
+        if (status == 0) {
+            this.statusText = "鏈煡";
+        }
+        return statusText;
+    }
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRuleVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRuleVO.java
new file mode 100644
index 0000000..a1344e8
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/CalculateRuleVO.java
@@ -0,0 +1,62 @@
+package com.ycl.platform.domain.vo;
+
+import enumeration.general.RuleDeductCategoryEnum;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CalculateRuleVO {
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 鍚堝悓id
+     */
+    private Integer contractId;
+
+    /**
+     * 瑙勫垯鍚嶇О
+     */
+    private String ruleName;
+
+    /**
+     * 瑙勫垯鏉′欢
+     */
+    private String ruleCondition;
+
+    /**
+     * 杩濊鏈�灏忓��
+     */
+    private Double min;
+
+    /**
+     * 杩濊鏈�澶у��
+     */
+    private Double max;
+
+    /**
+     * 鎵e噺鏂瑰紡 鎵f寚瀹氬垎鏁�/鍒嗘暟涔樹互鏁伴噺/闄や互鏁伴噺鍚庝箻浠ュ垎鏁�
+     */
+    private RuleDeductCategoryEnum deductCategory;
+
+    /**
+     * 鎵i櫎鍒嗘暟
+     */
+    private Double calcFraction;
+
+    /**
+     * 褰撴柟寮忎负闄や互鏃讹紝闄や互褰撳墠瀛楁鏁伴噺
+     */
+    private Integer calcUnit;
+
+    private Date createTime;
+    private Date updateTime;
+
+    private Integer deleted;
+
+    private Integer unitId;
+}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
index 716de5e..4abbad3 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
@@ -11,6 +11,7 @@
 import constant.ApiConstants;
 import constant.CheckSnapCountConstants;
 import constant.CheckThreadConstants;
+import constant.RedisConstant;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -21,7 +22,10 @@
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -74,7 +78,7 @@
         // 鍒ゆ柇浠婂ぉ鏄惁鏄湰鏈堢殑绗竴澶�
         if (today.equals(firstDayOfMonth)) {
             // 濡傛灉鏄紝鍒欐竻闄edis涓褰曚腑鏂鏁扮殑鏁版嵁
-            redisTemplate.delete(CheckThreadConstants.Check_Car_ViewConnect);
+            redisTemplate.delete(RedisConstant.Check_Car_ViewConnect);
         }
         for (SnapshotDataMonitorResult result : list) {
             TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode());
@@ -156,7 +160,7 @@
         }
         //瑙嗗浘搴撳鎺ョǔ瀹氭��
         //Redis璁板綍璇ュ尯鍘垮綋鏈堟棤鏁版嵁涓婁紶娆℃暟
-        Integer noDateCount = (Integer) redisTemplate.opsForHash().get(CheckThreadConstants.Check_Car_ViewConnect, key);
+        Integer noDateCount = (Integer) redisTemplate.opsForHash().get(RedisConstant.Check_Car_ViewConnect, key);
         // 濡傛灉鍊间负null锛屽垯鍒濆鍖栦负0
         if (noDateCount == null) {
             noDateCount = 0;
@@ -174,7 +178,7 @@
             noDateCount++;
         }
         // 灏嗘柊鐨勫�兼斁鍥濰ash涓�
-        redisTemplate.opsForHash().put(CheckThreadConstants.Check_Car_ViewConnect, key, noDateCount);
+        redisTemplate.opsForHash().put(RedisConstant.Check_Car_ViewConnect, key, noDateCount);
         return checkIndexCar;
     }
 }
diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java
index d9541ff..9ca280e 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDataCalculation.java
@@ -11,10 +11,7 @@
 import com.ycl.platform.service.ICheckIndexFaceService;
 import com.ycl.platform.service.ITMonitorService;
 import com.ycl.system.mapper.SysConfigMapper;
-import constant.ApiConstants;
-import constant.CheckConstants;
-import constant.CheckSnapCountConstants;
-import constant.CheckThreadConstants;
+import constant.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -79,7 +76,7 @@
         // 鍒ゆ柇浠婂ぉ鏄惁鏄湰鏈堢殑绗竴澶�
         if (today.equals(firstDayOfMonth)) {
             // 濡傛灉鏄紝鍒欐竻闄edis涓褰曚腑鏂鏁扮殑鏁版嵁
-            redisTemplate.delete(CheckThreadConstants.Check_Face_ViewConnect);
+            redisTemplate.delete(RedisConstant.Check_Face_ViewConnect);
         }
         for (SnapshotDataMonitorResult result : list) {
             TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode());
@@ -153,7 +150,7 @@
         }
         //瑙嗗浘搴撳鎺ョǔ瀹氭��
         //Redis璁板綍璇ュ尯鍘垮綋鏈堟棤鏁版嵁涓婁紶娆℃暟
-        Integer noDateCount = (Integer) redisTemplate.opsForHash().get(CheckThreadConstants.Check_Face_ViewConnect, key);
+        Integer noDateCount = (Integer) redisTemplate.opsForHash().get(RedisConstant.Check_Face_ViewConnect, key);
         // 濡傛灉鍊间负null锛屽垯鍒濆鍖栦负0
         if (noDateCount == null) {
             noDateCount = 0;
@@ -171,7 +168,7 @@
             noDateCount++;
         }
         // 灏嗘柊鐨勫�兼斁鍥濰ash涓�
-        redisTemplate.opsForHash().put(CheckThreadConstants.Check_Face_ViewConnect, key, noDateCount);
+        redisTemplate.opsForHash().put(RedisConstant.Check_Face_ViewConnect, key, noDateCount);
         return checkIndexFace;
     }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java
new file mode 100644
index 0000000..27a2ae8
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ContractRuleRecordMapper.java
@@ -0,0 +1,65 @@
+package com.ycl.platform.mapper;
+
+import com.ycl.platform.domain.entity.ContractRuleRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 鍚堝悓瑙勫垯璁板綍Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2024-08-21
+ */
+public interface ContractRuleRecordMapper
+{
+    /**
+     * 鏌ヨ鍚堝悓瑙勫垯璁板綍
+     *
+     * @param id 鍚堝悓瑙勫垯璁板綍涓婚敭
+     * @return 鍚堝悓瑙勫垯璁板綍
+     */
+    public ContractRuleRecord selectContractRuleRecordById(Long id);
+
+    /**
+     * 鏌ヨ鍚堝悓瑙勫垯璁板綍鍒楄〃
+     *
+     * @param contractRuleRecord 鍚堝悓瑙勫垯璁板綍
+     * @return 鍚堝悓瑙勫垯璁板綍闆嗗悎
+     */
+    public List<ContractRuleRecord> selectContractRuleRecordList(ContractRuleRecord contractRuleRecord);
+
+    /**
+     * 鏂板鍚堝悓瑙勫垯璁板綍
+     *
+     * @param contractRuleRecord 鍚堝悓瑙勫垯璁板綍
+     * @return 缁撴灉
+     */
+    public int insertContractRuleRecord(ContractRuleRecord contractRuleRecord);
+
+    public void insertBatch(@Param("list") List<ContractRuleRecord> list);
+
+    /**
+     * 淇敼鍚堝悓瑙勫垯璁板綍
+     *
+     * @param contractRuleRecord 鍚堝悓瑙勫垯璁板綍
+     * @return 缁撴灉
+     */
+    public int updateContractRuleRecord(ContractRuleRecord contractRuleRecord);
+
+    /**
+     * 鍒犻櫎鍚堝悓瑙勫垯璁板綍
+     *
+     * @param id 鍚堝悓瑙勫垯璁板綍涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteContractRuleRecordById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鍚堝悓瑙勫垯璁板綍
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteContractRuleRecordByIds(Long[] ids);
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
index aff5d13..1d574d4 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
@@ -6,6 +6,8 @@
 import com.ycl.platform.domain.query.ReportQuery;
 import com.ycl.platform.domain.vo.ReportVO;
 import com.ycl.platform.domain.form.ReportForm;
+
+import java.util.Date;
 import java.util.List;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -29,4 +31,6 @@
      * @return
      */
     List<ReportVO> examineRecord(@Param("id") Integer id);
+
+    List<String> selectNumberList(String status, String date);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java
index 5d73761..1ac8104 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TContractMapper.java
@@ -5,9 +5,11 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ycl.platform.domain.entity.TContract;
 import com.ycl.platform.domain.query.ContractQuery;
+import com.ycl.platform.domain.vo.CalculateRuleVO;
 import com.ycl.platform.domain.vo.ContractVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -21,4 +23,5 @@
     IPage<ContractVO> getPage(IPage page, @Param("query") ContractQuery query);
 
 
+    List<CalculateRuleVO> selectByRuleName(String ruleName, String ruleCondition, Date date);
 }
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 8020953..eab4a39 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java
@@ -1,10 +1,15 @@
 package com.ycl.platform.service.impl;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.platform.domain.entity.CalculateRecord;
 import com.ycl.platform.domain.entity.CalculateReport;
+import com.ycl.platform.domain.entity.CalculateRule;
 import com.ycl.platform.domain.excel.CalculateExport;
 import com.ycl.platform.domain.form.CalculateReportBackfillForm;
 import com.ycl.platform.domain.form.CalculateReportForm;
@@ -14,6 +19,7 @@
 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.page.PageUtil;
 import enumeration.general.CalculateReportStatusEnum;
@@ -44,7 +50,7 @@
 @RequiredArgsConstructor
 public class CalculateReportServiceImpl extends ServiceImpl<CalculateReportMapper, CalculateReport> implements CalculateReportService {
 
-    private final CalculateReportMapper calculateReportMapper;
+    private final ICalculateRuleService calculateRuleService;
     private final CalculateRecordMapper calculateRecordMapper;
 
     /**
@@ -211,13 +217,19 @@
         calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum());
         calculateExport.setScore(100 + list.stream().mapToInt(CalculateExport::getScore).sum());
         list.add(calculateExport);
+        // 鑾峰彇瑙勫垯
+        List<CalculateRule> ruleList = calculateRuleService.list(new LambdaQueryWrapper<CalculateRule>().eq(CalculateRule::getContractId, contractId));
         // 杈撳嚭鏂囦欢
         response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
         response.setCharacterEncoding("utf-8");
         String fileName = URLEncoder.encode("鏍哥畻鎶ュ憡", StandardCharsets.UTF_8).replace("\\+", "%20");
         response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
-        EasyExcel.write(response.getOutputStream(), CalculateExport.class)
-                .sheet("鏍哥畻鎶ュ憡")
-                .doWrite(list);
+        // 澧炲姞sheet
+        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build()){
+            WriteSheet sheet = EasyExcel.writerSheet(0, "鏍哥畻鎶ュ憡").head(CalculateExport.class).build();
+            excelWriter.write(list, sheet);
+            WriteSheet sheet2 = EasyExcel.writerSheet(1, "鏍哥畻瑙勫垯").head(CalculateRule.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            excelWriter.write(ruleList, sheet2);
+        }
     }
 }
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 7e35095..8b0c6d6 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
@@ -52,9 +52,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, VideoOnlineResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<VideoOnlineResult> resultList = mongoTemplate.find(query, VideoOnlineResult.class);
-        long total = mongoTemplate.count(query, VideoOnlineResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -77,9 +77,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -102,9 +102,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, MonitorQualifyResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<MonitorQualifyResult> resultList = mongoTemplate.find(query, MonitorQualifyResult.class);
-        long total = mongoTemplate.count(query, MonitorQualifyResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -127,9 +127,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -152,9 +152,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
-        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -177,9 +177,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
-        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -203,9 +203,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -229,9 +229,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -255,9 +255,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -281,9 +281,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -307,9 +307,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -333,9 +333,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -361,9 +361,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
-        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -386,9 +386,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
-        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -411,9 +411,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -436,9 +436,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, CrossDetailResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<CrossDetailResult> resultList = mongoTemplate.find(query, CrossDetailResult.class);
-        long total = mongoTemplate.count(query, CrossDetailResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -461,9 +461,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, DataIntegrityMonitoringResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<DataIntegrityMonitoringResult> resultList = mongoTemplate.find(query, DataIntegrityMonitoringResult.class);
-        long total = mongoTemplate.count(query, DataIntegrityMonitoringResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -486,9 +486,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, AttrRecognitionMonitorResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<AttrRecognitionMonitorResult> resultList = mongoTemplate.find(query, AttrRecognitionMonitorResult.class);
-        long total = mongoTemplate.count(query, AttrRecognitionMonitorResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -511,9 +511,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, VehicleDeviceInspectionResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<VehicleDeviceInspectionResult> resultList = mongoTemplate.find(query, VehicleDeviceInspectionResult.class);
-        long total = mongoTemplate.count(query, VehicleDeviceInspectionResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -536,9 +536,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, SnapshotDelayMonitorResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<SnapshotDelayMonitorResult> resultList = mongoTemplate.find(query, SnapshotDelayMonitorResult.class);
-        long total = mongoTemplate.count(query, SnapshotDelayMonitorResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -561,9 +561,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, PicAccessResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<PicAccessResult> resultList = mongoTemplate.find(query, PicAccessResult.class);
-        long total = mongoTemplate.count(query, PicAccessResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -586,9 +586,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, VehicleDeviceSamplingResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<VehicleDeviceSamplingResult> resultList = mongoTemplate.find(query, VehicleDeviceSamplingResult.class);
-        long total = mongoTemplate.count(query, VehicleDeviceSamplingResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -611,9 +611,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
-        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -637,9 +637,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
-        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -662,9 +662,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<OneMachineFileResult> resultList = mongoTemplate.find(query, OneMachineFileResult.class);
-        long total = mongoTemplate.count(query, OneMachineFileResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -687,9 +687,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, CrossDetailResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<CrossDetailResult> resultList = mongoTemplate.find(query, CrossDetailResult.class);
-        long total = mongoTemplate.count(query, CrossDetailResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -712,9 +712,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, MonitoringDetailResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<MonitoringDetailResult> resultList = mongoTemplate.find(query, MonitoringDetailResult.class);
-        long total = mongoTemplate.count(query, MonitoringDetailResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -737,9 +737,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, FaceDeviceInspectionResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<FaceDeviceInspectionResult> resultList = mongoTemplate.find(query, FaceDeviceInspectionResult.class);
-        long total = mongoTemplate.count(query, FaceDeviceInspectionResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -762,9 +762,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, FaceDeviceInspectionResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<FaceDeviceInspectionResult> resultList = mongoTemplate.find(query, FaceDeviceInspectionResult.class);
-        long total = mongoTemplate.count(query, FaceDeviceInspectionResult.class);
         return Result.ok().data(resultList).total(total);
     }
 
@@ -787,9 +787,9 @@
             );
         }
         query.addCriteria(criteria);
+        long total = mongoTemplate.count(query, FaceDeviceSamplingResult.class);
         query.with(Sort.by(Sort.Order.asc(TIME_FIELD))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
         List<FaceDeviceSamplingResult> resultList = mongoTemplate.find(query, FaceDeviceSamplingResult.class);
-        long total = mongoTemplate.count(query, FaceDeviceSamplingResult.class);
         return Result.ok().data(resultList).total(total);
     }
 }
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 bb95a81..a07570c 100644
--- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -1,12 +1,36 @@
 package com.ycl.task;
 
 
-import com.ycl.platform.mapper.TContractMapper;
-import com.ycl.platform.mapper.TMonitorMapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.mongodb.client.result.DeleteResult;
+import com.ycl.platform.domain.entity.ContractRuleRecord;
+import com.ycl.platform.domain.entity.Report;
+import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.entity.YwPoint;
+import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
+import com.ycl.platform.domain.result.UY.VideoOnlineResult;
+import com.ycl.platform.domain.vo.CalculateRuleVO;
+import com.ycl.platform.domain.vo.ContractVO;
+import com.ycl.platform.domain.vo.ReportVO;
+import com.ycl.platform.mapper.*;
+import com.ycl.utils.DateUtils;
+import constant.ApiConstants;
+import constant.RedisConstant;
+import enumeration.ContractRule;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.management.monitor.Monitor;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 鍚堝悓鑰冩牳瀹氭椂浠诲姟
@@ -17,20 +41,88 @@
     @Autowired
     private MongoTemplate mongoTemplate;
     @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
     private TMonitorMapper monitorMapper;
     @Autowired
     private TContractMapper contractMapper;
+    @Autowired
+    private YwPointMapper ywPointMapper;
+    @Autowired
+    private ReportMapper reportMapper;
+    @Autowired
+    private ContractRuleRecordMapper recordMapper;
+
+    private static final Integer Online = 1;
+    private static final Integer Offline = -1;
+    private static final String AuditStatus_Pass = "1";
 
     /**
      * 鍚堝悓鑰冩牳 鍦ㄧ嚎鐜囨瘡鏃ヤ换鍔℃娴�
      * 鏌ョ敓鏁堢殑鍚堝悓鍏宠仈鐨勫叕鍙革紝鑾峰彇unitId闆嗗悎
      * 鏍规嵁unitId鏌ヨ瀵瑰簲鐐逛綅鑾峰彇鍚勪釜鍏徃绠$悊鐨勮澶嘔ds
      * 鏌ヨ涓夌璁惧鍦ㄧ嚎涓嶅湪绾挎儏鍐碉紝灏佽涓轰竴涓猰ap<鍥芥爣鐮�,鍦ㄧ嚎鐘舵��>
-     * 璁$畻姣忔棩姣忓鍏徃鐨勫湪绾跨巼瀛樺叆redis
+     * 璁$畻姣忔棩姣忓鍏徃鐨勫湪绾跨巼瀛樺叆mysql
      * 鏈堝簳璁$畻骞冲潎鍊硷紝鏍规嵁鍦ㄧ嚎鐜囧拰鍚堝悓鏍囧噯鎵e噺鍒嗘暟
      */
     public void onlineCheck() {
-//        contractMapper.selectByRuleName();
+        List<CalculateRuleVO> ruleVos = contractMapper.selectByRuleName(ContractRule.CONTRACT_RULE_Online.getName(), null, new Date());
+        List<Integer> unitIds = ruleVos.stream().map(CalculateRuleVO::getUnitId).collect(Collectors.toList());
+        List<YwPoint> ywPoints = ywPointMapper.selectList(new QueryWrapper<YwPoint>().in("unitId", unitIds));
+        //key鏄痷nitId value鏄澶囩紪鐮侀泦鍚�
+        Map<Long, List<String>> unitMap = ywPoints.stream()
+                .collect(Collectors.groupingBy(
+                        YwPoint::getUnitId,
+                        Collectors.mapping(
+                                YwPoint::getSerialNumber,
+                                Collectors.toList()
+                        )
+                ));
+        Map<String, Integer> onlineStatusMap = new HashMap<>();
+        //鏌ongo鑾峰彇璁惧鍦ㄧ嚎鎯呭喌
+        Date date = DateUtils.getDay(2024, 7, 13);
+        //杞﹁締銆佷汉鑴�
+        Query query = new Query();
+        query.addCriteria(Criteria
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
+        List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
+        for (SnapshotDataMonitorResult result : results) {
+            if (ApiConstants.HK_SnapCount_ResultType_Null != result.getResultType()) {
+                onlineStatusMap.put(result.getExternalIndexCode(), Online);
+            } else {
+                onlineStatusMap.put(result.getExternalIndexCode(), Offline);
+            }
+        }
+        //瑙嗛
+        Query videoQuery = new Query(Criteria
+                .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
+        List<VideoOnlineResult> videoOnlineResults = mongoTemplate.find(videoQuery, VideoOnlineResult.class);
+        for (VideoOnlineResult videoOnlineResult : videoOnlineResults) {
+            onlineStatusMap.put(videoOnlineResult.getDeviceId(), videoOnlineResult.getStatus());
+        }
+        //鏌ヨ鎶ュ鍒楄〃
+        List<String> reportNumbers = reportMapper.selectNumberList(AuditStatus_Pass, DateUtils.getDate());
+        //璁$畻姣忎釜鍏徃鐨勭偣浣嶅湪绾跨巼
+        List<ContractRuleRecord> ruleRecordList = new ArrayList<>();
+        unitMap.forEach((unitId, serialNumberList) -> {
+            int totalSite = 0;
+            int onlineSite = 0;
+            for (String number : serialNumberList) {
+                //鎶ュ杩囦笉绾冲叆璁$畻
+                if (!CollectionUtils.isEmpty(reportNumbers) && reportNumbers.contains(number)) continue;
+                Integer status = onlineStatusMap.get(number);
+                totalSite++;
+                if (Online.equals(status)) {
+                    onlineSite++;
+                }
+            }
+            ContractRuleRecord contractRuleRecord = new ContractRuleRecord();
+            contractRuleRecord.setSiteOnline( onlineSite / totalSite);
+            contractRuleRecord.setCreateTime(new Date());
+            contractRuleRecord.setUnitId(unitId);
+            ruleRecordList.add(contractRuleRecord);
+        });
+        //瀛樺偍缁撴灉
+        recordMapper.insertBatch(ruleRecordList);
     }
-
 }
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 7941624..904cd0f 100644
--- a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -21,6 +21,7 @@
 import enumeration.general.AreaDeptEnum;
 import enumeration.general.PointStatus;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -59,26 +60,28 @@
     @Transactional(rollbackFor = Exception.class)
     public void synchronize() {
         log.info("寮�濮嬪悓姝ongodb涓�鏈轰竴妗e埌鏁版嵁搴�");
-        Date date = DateUtils.getDay(2024,7,13);
+        Date date = DateUtils.getDay(2024, 7, 13);
         Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
 //        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);
         //鏁版嵁搴搈onitor琛ㄦ暟鎹�
         Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
-        //鍑嗗鎻掑叆璁惧琛ㄧ殑鏁版嵁
-        List<TMonitor> monitorList = new ArrayList<>();
-        //鍑嗗鎻掑叆鐐逛綅琛ㄧ殑鏁版嵁
-        List<YwPoint> ywPointList = new ArrayList<>();
-        //鏂扮殑鏁版嵁锛屽師鏁版嵁搴撲腑涓嶅瓨鍦ㄧ殑鏁版嵁
-        Set<TMonitor> newMonitorList = new HashSet<>();
         //鐐逛綅鏁版嵁
         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());
+
+        //鍑嗗鎻掑叆璁惧琛ㄧ殑鏁版嵁
+        List<TMonitor> monitorList = new ArrayList<>();
+        //鍑嗗鎻掑叆鐐逛綅琛ㄧ殑鏁版嵁
+        List<YwPoint> ywPointList = new ArrayList<>();
+        //鏂扮殑鏁版嵁锛屽師鏁版嵁搴撲腑涓嶅瓨鍦ㄧ殑鏁版嵁
+        Set<TMonitor> newMonitorList = new HashSet<>();
 
         //鍏ㄥ勾鐣欏瓨
         for (MonitorQualifyResult result : oneMachineFileResults) {
@@ -91,6 +94,22 @@
                 newMonitorList.add(monitor);
             }
         }
+        //娣诲姞鑰佹暟鎹�
+        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);
+                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)){
+                ywPointList.add(value);
+            }
+        });
+
         log.info("result闆嗗悎{},璁惧闆嗗悎{},鐐逛綅闆嗗悎{}", oneMachineFileResults.size(), monitorList.size(), ywPointList.size());
         //鎻掑叆鏁版嵁搴�
         if (!CollectionUtils.isEmpty(monitorList)) {
diff --git a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
index a3c9adf..85e8d77 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/CalculateReportMapper.xml
@@ -102,12 +102,13 @@
 
     <select id="exportData" resultType="com.ycl.platform.domain.excel.CalculateExport">
         SELECT
-            SUBSTRING_INDEX(rule_name, '/', 1) AS rule_name,
-            COUNT(*) AS num,
-            -SUM(score) AS score
-        FROM t_contract_score
-        WHERE contract_id = #{contractId} AND auditing_status = 'PASS' AND deleted = 0
-        GROUP BY SUBSTRING_INDEX(rule_name, '/', 1)
+            a.rule_name,
+            COUNT(b.id) AS num,
+            IFNULL(-SUM(score), 0) AS score
+        FROM t_calculate_rule a
+        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
     </select>
 
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml
new file mode 100644
index 0000000..5ba17a2
--- /dev/null
+++ b/ycl-server/src/main/resources/mapper/zgyw/ContractRuleRecordMapper.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.platform.mapper.ContractRuleRecordMapper">
+
+    <resultMap type="com.ycl.platform.domain.entity.ContractRuleRecord" id="ContractRuleRecordResult">
+        <result property="id" column="id"/>
+        <result property="unitId" column="unit_id"/>
+        <result property="siteOnline" column="site_online"/>
+        <result property="createTime" column="create_time"/>
+        <result property="deleted" column="deleted"/>
+    </resultMap>
+
+    <sql id="selectContractRuleRecordVo">
+        select id, unit_id, site_online, create_time, deleted
+        from t_contract_rule_record
+    </sql>
+
+    <select id="selectContractRuleRecordList" resultMap="ContractRuleRecordResult">
+        <include refid="selectContractRuleRecordVo"/>
+        <where>
+            <if test="unitId != null ">and unit_id = #{unitId}</if>
+            <if test="siteOnline != null ">and site_online = #{siteOnline}</if>
+            <if test="deleted != null ">and deleted = #{deleted}</if>
+        </where>
+    </select>
+
+    <select id="selectContractRuleRecordById" resultMap="ContractRuleRecordResult">
+        <include refid="selectContractRuleRecordVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertContractRuleRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into t_contract_rule_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="unitId != null">unit_id,</if>
+            <if test="siteOnline != null">site_online,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="deleted != null">deleted,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="unitId != null">#{unitId},</if>
+            <if test="siteOnline != null">#{siteOnline},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="deleted != null">#{deleted},</if>
+        </trim>
+    </insert>
+
+    <insert id="insertBatch">
+        inner into t_contract_rule_record (unit_id,site_online,create_time)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.unitId},#{item.siteOnline},#{item.createTime})
+        </foreach>
+    </insert>
+
+    <update id="updateContractRuleRecord">
+        update t_contract_rule_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="unitId != null">unit_id = #{unitId},</if>
+            <if test="siteOnline != null">site_online = #{siteOnline},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="deleted != null">deleted = #{deleted},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteContractRuleRecordById">
+        delete
+        from t_contract_rule_record
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteContractRuleRecordByIds">
+        delete from t_contract_rule_record where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
index cc7b9e9..52bf32f 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
@@ -64,4 +64,10 @@
             r.create_time DESC
     </select>
 
+    <select id="selectNumberList" resultType="java.lang.String">
+        SELECT yp.serial_number FROM t_report r
+        LEFT JOIN t_yw_point yp ON r.point_id = yp.id
+        WHERE r.status = #{status} AND
+              #{date} between r.begin_create_time and r.end_create_time
+    </select>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
index eec44b2..7c796e6 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TContractMapper.xml
@@ -15,7 +15,7 @@
     <select id="getPage" resultType="com.ycl.platform.domain.vo.ContractVO">
         select a.*, b.unit_name
         from t_contract a
-                 left join t_yw_unit b on a.unit_id = b.id and b.deleted = 0
+        left join t_yw_unit b on a.unit_id = b.id and b.deleted = 0
         where a.deleted = 0
         <if test="query.name != null and query.name != ''">
             and a.name like concat('%', #{query.name}, '%')
@@ -23,10 +23,10 @@
         <if test="query.status != null and query.status != ''">
             <choose>
                 <when test="query.status == 'ACTIVE'">
-                    and a.start_time  &lt; sysdate() and a.end_time > sysdate()
+                    and a.start_time &lt; sysdate() and a.end_time > sysdate()
                 </when>
                 <when test="query.status == 'NOT_START'">
-                    and a.start_time  > sysdate()
+                    and a.start_time > sysdate()
                 </when>
                 <when test="query.status == 'FINISHED'">
                     and a.end_time &lt; sysdate()
@@ -36,4 +36,19 @@
         order by create_time desc
     </select>
 
+    <select id="selectByRuleName" 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
+        <where>
+            tc.deleted =0 and #{time} between tc.start_time and tc.end_time
+            <if test="ruleName !=null and ruleName!=''">
+                tcr.rule_name = #{ruleName}
+            </if>
+            <if test="ruleCondition !=null and ruleCondition!=''">
+                tcr.rule_condition = #{ruleCondition}
+            </if>
+        </where>
+
+    </select>
 </mapper>

--
Gitblit v1.8.0