From 97b1e0d4820606bef726f60e459b66afb1e8eab1 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 21 十一月 2025 11:50:51 +0800
Subject: [PATCH] 优化与日志

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java |   80 +++++++++++++++++++++------------------
 1 files changed, 43 insertions(+), 37 deletions(-)

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 d5a28ce..bc7a065 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
@@ -608,8 +608,8 @@
         List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class);
         log.info("澶у皬:{}",onlineResult.size());
         //姝ゅ闇�瑕佽繃婊ゆ帀璁惧鍏ㄦ櫙鍦ㄧ嚎 缁嗚妭涓嶅湪绾跨殑鎯呭喌  鍙互鎸� point鍒嗙粍 鍒嗘垜璁稿缁勪箣鍚庡啀鍋氬鐞�
-        Map<String, List<TMonitorResult>> ipToDevices = onlineResult.stream()
-                .collect(Collectors.groupingBy(TMonitorResult::getIp));
+//        Map<String, List<TMonitorResult>> ipToDevices = onlineResult.stream()
+//                .collect(Collectors.groupingBy(TMonitorResult::getIp)); //閲嶈鎿嶄綔 鎸塱p鍒嗙粍
 
 //        onlineResult = ipToDevices.values().stream()
 //                .map(devices -> {
@@ -632,7 +632,7 @@
 
         log.info("鏈堜唤鍦ㄧ嚎鏁版嵁:{}鏉℃暟", onlineResult.size());
         // 浣跨敤Collectors.toMap鍘婚噸锛屼繚鐣欐瘡涓狽o鐨勭涓�涓亣鍒扮殑鍏冪礌
-        Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream()
+        Map<String, TMonitorResult> fullDataMap = onlineResult.stream()
                 .collect(Collectors.toMap(
                         TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁
                         Function.identity(),  // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬�
@@ -640,16 +640,14 @@
                 ));
 
 
-        // 灏� Map 杞崲涓� List
-        List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values());
-        log.info("鍘婚噸鍚庡ぇ灏�:{}", tMonitorResults.size());
-
-
+        // 灏� Map 杞崲涓� List  鍘婚噸鍚庡噺灏戞暟鎹簱娑堣��
+        List<TMonitorResult> tMonitorResults = new ArrayList<>(fullDataMap.values());
+//        log.info("鍘婚噸鍚庡ぇ灏�:{}", tMonitorResults.size());
 
         // 鑾峰彇鍔ㄦ�佸垪鏁版嵁骞舵瀯寤虹紦瀛楳ap
         Map<Integer, List<DynamicColumnVO>> dynamicColumnMap = new HashMap<>();
         if (!tMonitorResults.isEmpty()) {
-            //鑾峰彇鐐逛綅闆嗗悎
+            //鑾峰彇ip闆嗗悎
             List<Integer> pointIds = tMonitorResults.stream()
                     .map(TMonitorResult::getPointId)
                     .distinct() // 鍘婚噸锛屽噺灏戞暟鎹簱鏌ヨ
@@ -664,36 +662,34 @@
             }
 
             // 琛ュ厖鍔ㄦ�佸垪鏁版嵁
+            // 鍘婚噸鍚庣殑鍔ㄦ�佸垪淇℃伅
             for (TMonitorResult result : tMonitorResults) {
                 result.setDynamicColumnList(dynamicColumnMap.getOrDefault(result.getPointId(), Collections.emptyList()));
             }
         }
-
         // 鎸夐儴闂ㄥ垎缁勶紝鍑忓皯鍚庣画寰幆涓殑杩囨护鎿嶄綔
-        Map<Integer, List<TMonitorResult>> deptMonitorMap = tMonitorResults.stream()
+        Map<Integer, List<TMonitorResult>> deptMonitorMap = tMonitorResults.stream() //鍘婚噸鍚庢寚鍚� 姣忎釜璁惧鍙湁绗竴澶╃殑鏁版嵁
                 .collect(Collectors.groupingBy(TMonitorResult::getDeptId));
 
         // 鎸夎澶囩紪鍙峰垎缁刼nlineResult锛屽姞閫熷悗缁煡鎵�
-        Map<String, List<TMonitorResult>> noToOnlineMap = onlineResult.stream()
+        Map<String, List<TMonitorResult>> noToOnlineMap = onlineResult.stream() //杩欓噷鍊兼墍浠ユ暟鎹互璁惧鏍囧彿鍒嗙粍锛屽緱鍒板叾璇︽儏 濡� 1鍙峰埌31鍙风殑褰曞儚鎯呭喌
                 .collect(Collectors.groupingBy(TMonitorResult::getNo));
 
         // 骞惰澶勭悊鍚勯儴闂ㄦ暟鎹�
-        List<CompletableFuture<ExcelExp>> futures = new ArrayList<>(exportForm.getDeptIds().size());
-        Map<Integer, List<VideoDailyExp>> deptExpMap = new ConcurrentHashMap<>();
+        List<CompletableFuture<ExcelExp>> futures = new ArrayList<>(exportForm.getDeptIds().size());//鎸夊墠绔紶鍏ョ殑 閮ㄩ棬缂栧彿 鏉ュ垽鏂渶瑕佸紑澶氬皯涓嚎绋�
 
+        Map<Integer, List<VideoDailyExp>> deptExpMap = new ConcurrentHashMap<>();
         for (Integer deptId : exportForm.getDeptIds()) {
             // 浣跨敤閮ㄩ棬ID鐨勬渶缁堝彉閲�
             final Integer currentDeptId = deptId;
             CompletableFuture<ExcelExp> future = CompletableFuture.supplyAsync(() -> {
-                // 鐩存帴浠庨鍒嗙粍鐨凪ap涓幏鍙栵紝閬垮厤姣忔杩囨护
+                //  deptMonitorMap涓婇潰宸茬粡鍦ㄥ幓閲嶅悗鍒嗚繃缁勪簡锛堣繖閲屽彧鏄綋鐜颁簡鍘婚噸鐨勪綔鐢紝涓嬫柟姣忔棩鏁版嵁鏄�氳繃no鍦╪oToOnlineMap涓彇鍒扮殑锛�
+
                 List<TMonitorResult> monitors = deptMonitorMap.getOrDefault(currentDeptId, Collections.emptyList());
-
-
 
                 if (monitors.isEmpty()) {
                     return null;
                 }
-
                 List<VideoDailyExp> videoDailyExps = new ArrayList<>(monitors.size());
                 AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(currentDeptId);
                 String areaName = areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName();
@@ -726,21 +722,22 @@
                     }
                     videoDailyExp.setTag(tag.toString());
 
-                    // 璁剧疆鍦ㄧ嚎鏁版嵁
+                    //  璁剧疆鍦ㄧ嚎鏁版嵁閲嶇偣浣嶇疆
                     try {
-                        // 浠庨鏋勫缓鐨凪ap涓幏鍙栵紝閬垮厤姣忔杩囨护
+                        // 浠庨鏋勫缓鐨凪ap涓幏鍙栵紝閬垮厤姣忔杩囨护 姝g‘鑾峰緱鍦ㄧ嚎鏁版嵁浣嶇疆
                         List<TMonitorResult> onlines = noToOnlineMap.getOrDefault(result.getNo(), Collections.emptyList());
+                        // 閲嶇偣鏌ョ湅涓嬮潰杩欎釜鏂规硶 videoDailyExp 浼犲叆闇�瑕佺粍瑁呭璞$殑 videoDailyExp 鍜� 鏁版嵁婧恟esult鍖呭惈鍔ㄦ�佸垪淇℃伅鐨勫璞� 鍜屼粬瀵瑰簲1鍒�31澶╃殑鍦ㄧ绾跨姸鎬�
                         setOnlineDaily(videoDailyExp, result, onlines);
                     } catch (Exception e) {
                         log.error("璁剧疆鍦ㄧ嚎鏁版嵁寮傚父", e);
                     }
-
+//
                     videoDailyExps.add(videoDailyExp);
                 }
-
-                // 瀛樺偍缁撴灉鍒扮嚎绋嬪畨鍏ㄧ殑Map
+//
+                // 瀛樺偍缁撴灉鍒扮嚎绋嬪畨鍏ㄧ殑Map 缁撴灉濡� 鎸夊尯鍒嗗垎缁� 瀵瑰簲璁惧鐨� 1鍒�31鏃ョ殑鍦ㄧ绾胯鎯�
                 deptExpMap.put(currentDeptId, videoDailyExps);
-
+//
                 return new ExcelExp(areaName, videoDailyExps, VideoDailyExp.class);
             }, threadPoolTaskExecutor);
 
@@ -778,8 +775,9 @@
         log.info("car鏁�:{}", car);
         log.info("video鏁�:{}", video);
 
-        // 澶勭悊绂荤嚎鏁扮粺璁″拰鍦ㄧ嚎鐜囩粺璁�
+        // 绂荤嚎鏁扮粺璁�
         List<VideoTypeOffOnlineExp> videoTypeOffOnlineExps = new ArrayList<>();
+        // 鍦ㄧ嚎鐜囩粺璁�
         List<VideoOnlineRateExp> videoOnlineRateExps = new ArrayList<>();
 
         for (Map.Entry<Integer, List<VideoDailyExp>> entry : deptExpMap.entrySet()) {
@@ -787,7 +785,7 @@
             List<VideoDailyExp> list = entry.getValue();
             AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
 
-            // 鎵归噺澶勭悊涓夌璁惧绫诲瀷
+            // 鎵归噺澶勭悊涓夌璁惧绫诲瀷 姣忎釜璁惧1鍒�31鍙峰湪绂荤嚎鎯呭喌
             addDeviceStats(list, areaDeptEnum, "1", "浜鸿劯", videoTypeOffOnlineExps, videoOnlineRateExps);
             addDeviceStats(list, areaDeptEnum, "2", "鍗″彛", videoTypeOffOnlineExps, videoOnlineRateExps);
             addDeviceStats(list, areaDeptEnum, "3", "瑙嗛", videoTypeOffOnlineExps, videoOnlineRateExps);
@@ -893,7 +891,7 @@
         videoTypeOffOnlineExp.setArea("鑷础甯�");
         videoTypeOffOnlineExp.setType(type + "鍚堣");
     }
-    //鍦ㄧ嚎璁惧鏁版嵁锛屽悎璁″璞★紝淇℃伅瑁呴厤
+//    鍦ㄧ嚎璁惧鏁版嵁锛屽悎璁″璞★紝淇℃伅瑁呴厤
     public void setAllVideoTypeOnlineExpCount(
             long allVideoCount,List<VideoOnlineRateExp> videoOnlineRateExps,
                                               VideoOnlineRateExp videoOnlineRateExp,
@@ -1069,18 +1067,27 @@
             String fieldName = "day" + i;
             String countName = "count" + i;
             for(VideoDailyExp videoDailyExp: videoDailyExps){
-                // 鏋勯�犲瓧娈靛悕
-                Field field = videoDailyExp.getClass().getDeclaredField(fieldName);
-                // 纭繚瀛楁鏄鏈夌殑鍙互璁块棶
-                field.setAccessible(true);
-                // 鑾峰彇瀛楁鍊�
-                String value = (String) field.get(videoDailyExp);
-                if ("鍦ㄧ嚎".equals(value)) {
-                    count ++;
+                try {
+                    // 鏋勯�犲瓧娈靛悕
+                    Field field = videoDailyExp.getClass().getDeclaredField(fieldName);
+                    // 纭繚瀛楁鏄鏈夌殑鍙互璁块棶
+                    field.setAccessible(true);
+                    // 鑾峰彇瀛楁鍊�
+                    String value = (String) field.get(videoDailyExp);
+                    if ("鍦ㄧ嚎".equals(value)) {
+                        count ++;
+                    }
+                } catch (NoSuchFieldException e) {
+                    // 瀛楁涓嶅瓨鍦ㄦ椂璺宠繃褰撳墠寰幆锛岃褰曟棩蹇�
+                    log.warn("VideoDailyExp 涓嶅瓨鍦ㄥ瓧娈�: {}", fieldName, e);
+                } catch (IllegalAccessException e) {
+                    // 瀛楁璁块棶寮傚父鏃惰烦杩囷紝璁板綍鏃ュ織
+                    log.error("璁块棶瀛楁 {} 澶辫触", fieldName, e);
                 }
             }
             //姣忔棩鍦ㄧ嚎鐜�
             double rate = (double) count / videoDailyExps.size();
+            log.info("鎵撳嵃璁$畻鍑虹殑count:{}",count);
             //鍙嶅皠娣诲姞鍒板璞″睘鎬т腑
             Field field = videoOnlineRateExp.getClass().getDeclaredField(fieldName);
             Field countField = videoOnlineRateExp.getClass().getDeclaredField(countName);
@@ -1898,6 +1905,7 @@
         List<TMonitorResult> onlineResult = onlines.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList());
         videoDailyExp.setOnlineStateList(onlineResult);
         for (TMonitorResult monitorResult : onlineResult) {
+            //涓虹┖鐧界殑鍘熷洜 濡傝繘鍏ョ1鍙锋椂 monitorResult娌℃湁瀵瑰簲涓�鍙风殑鏁版嵁锛屽氨鏄竴鍙穖ongodb閲岄潰娌℃湁瀵瑰簲璇ヨ澶囩殑鏁版嵁
             int dayOfMonth = monitorResult.getMongoCreateTime().getDayOfMonth();
             String online = "";
             if (ApiConstants.UY_OnlineSite_Online.equals(monitorResult.getOnline())) {
@@ -1912,8 +1920,6 @@
             field.setAccessible(true);
             field.set(videoDailyExp, online);
         }
-
-
     }
 
     //璁剧疆姣忔棩褰曞儚鏁版嵁

--
Gitblit v1.8.0