From db75b45e9a7ce347162b8d3a36e4a7f46cfe199e Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 10 二月 2025 15:30:18 +0800
Subject: [PATCH] 核算导出单独对录像扣分的数量做处理

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java |  123 ++++++++++++++++++++++++++++++++++------
 1 files changed, 104 insertions(+), 19 deletions(-)

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 9ea32fa..5d2b201 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;
@@ -86,8 +89,12 @@
         if (params.getOption() != null) {
             query.addCriteria(Criteria.where("online").is(params.getOption()));
         }
+        Sort sort = Sort.by(
+                Sort.Order.asc("pingOnline"), // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.desc("offLineCount") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+        );
         // 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
-        query.with(Sort.by(Sort.Order.asc("pingOnline")));
+        query.with(sort);
         //鍒嗛〉鏁伴噺
         long total = mongoTemplate.count(query, TMonitorResult.class);
         MongoUtil.setPage(query, params, TIME_FIELD);
@@ -107,19 +114,12 @@
             } else {
                 item.setOnlineStr("鏈煡");
             }
-            List<Date> offLineTime = item.getOffLineTime();
+            List<String> offLineTime = item.getOffLineTimeStr();
             if(!CollectionUtils.isEmpty(offLineTime)) {
-                //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟)
-                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 if (offLineTime.size() > 1) {
-                    offLineTime = offLineTime.subList(0, 2);
+                    offLineTime = offLineTime.subList(offLineTime.size() - 2, offLineTime.size());
                 }
-                List<String> dateStr = new ArrayList<>();
-                for (Date date : offLineTime) {
-                    String formatDate = format.format(date);
-                    dateStr.add(formatDate);
-                }
-                item.setOffLineTimeStr(dateStr);
+                item.setOffLineTimeStr(offLineTime);
             }
         });
         params.setDeptTag(-1);
@@ -229,6 +229,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));
@@ -1062,7 +1063,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();
@@ -1096,7 +1097,7 @@
         Document errorFilter = new Document("$or", errorConditions);
         dList2.add(errorFilter);
         Document osdErrorFilter = new Document("$and", dList2);
-        //TODO锛氭湭鐭ユ暟  鏂板0鐨勭姸鎬�
+        //鏈煡鏁�
         List<Document> dList3 = new ArrayList<>(2);
         setTag(params,dList3);
         dList3.add(importantTagCondition);
@@ -1149,6 +1150,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);
+    }
+
     /**
      * 瑙嗛锛氭牎鏃舵纭巼
      *
@@ -1184,7 +1245,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) {
@@ -1201,7 +1262,7 @@
         List<OsdCheckResult> resultList = mongoTemplate.find(query, OsdCheckResult.class);
 
         for (OsdCheckResult osdCheckResult : resultList) {
-            OsdCheckResult.getText(osdCheckResult);
+            OsdCheckResult.getError(osdCheckResult);
         }
         // 缁熻鏁伴噺
         MongoDatabase database = mongoTemplate.getDb();
@@ -1235,7 +1296,7 @@
         Document errorFilter = new Document("$or", errorConditions);
         dList2.add(errorFilter);
         Document osdErrorFilter = new Document("$and", dList2);
-        //TODO锛氭湭鐭ユ暟  鏂板0鐨勭姸鎬�
+        //鏈煡鏁�
         List<Document> dList3 = new ArrayList<>(2);
         setTag(params,dList3);
         dList3.add(importantTagCondition);
@@ -1400,8 +1461,12 @@
         if (params.getOption() != null) {
             query.addCriteria(Criteria.where("online").is(params.getOption()));
         }
+        Sort sort = Sort.by(
+                Sort.Order.asc("pingOnline"), // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.desc("offLineCount") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+        );
         // 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
-        query.with(Sort.by(Sort.Order.asc("pingOnline")));
+        query.with(sort);
         //鍒嗛〉鏁伴噺
         long total = mongoTemplate.count(query, TMonitorResult.class);
         MongoUtil.setPage(query, params, TIME_FIELD);
@@ -1423,6 +1488,14 @@
                 item.setOnlineStr("绂荤嚎");
             } else {
                 item.setOnlineStr("鏈煡");
+            }
+            List<String> offLineTime = item.getOffLineTimeStr();
+            if(!CollectionUtils.isEmpty(offLineTime)) {
+                //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟)
+                if (offLineTime.size() > 1) {
+                    offLineTime = offLineTime.subList(0, 2);
+                }
+                item.setOffLineTimeStr(offLineTime);
             }
         });
 
@@ -2208,8 +2281,12 @@
         if (params.getOption() != null) {
             query.addCriteria(Criteria.where("online").is(params.getOption()));
         }
+        Sort sort = Sort.by(
+                Sort.Order.asc("pingOnline"), // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.desc("offLineCount") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+        );
         // 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
-        query.with(Sort.by(Sort.Order.asc("pingOnline")));
+        query.with(sort);
         //鍒嗛〉鏁伴噺
         long total = mongoTemplate.count(query, TMonitorResult.class);
         MongoUtil.setPage(query, params, TIME_FIELD);
@@ -2229,11 +2306,19 @@
             } else {
                 item.setOnlineStr("鏈煡");
             }
+            List<String> offLineTime = item.getOffLineTimeStr();
+            if(!CollectionUtils.isEmpty(offLineTime)) {
+                //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟)
+                if (offLineTime.size() > 1) {
+                    offLineTime = offLineTime.subList(0, 2);
+                }
+                item.setOffLineTimeStr(offLineTime);
+            }
         });
         params.setDeptTag(-1);
         params.setDeviceType(3);
 
-// 缁熻璁惧鏁伴噺
+        // 缁熻璁惧鏁伴噺
         //鍗$墖缁熻
         int totalCount = 0;
         int onlineCount = 0;

--
Gitblit v1.8.0