From 083ac7646ef2ab4a2614678b158a3dce1482e75c Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 05 十二月 2024 02:32:13 +0800
Subject: [PATCH] 省厅标签拆分

---
 ycl-server/src/main/java/com/ycl/task/UYTask.java |  153 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 105 insertions(+), 48 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java
index 1c489f3..ebc9afb 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.mongodb.client.result.DeleteResult;
 import com.ycl.feign.UYClient;
+import com.ycl.platform.domain.entity.TMonitor;
 import com.ycl.platform.domain.entity.WorkOrder;
 import com.ycl.platform.domain.param.UY.ImageDetectionParam;
 import com.ycl.platform.domain.param.UY.MonitorQualifyParam;
@@ -24,6 +25,7 @@
 import com.ycl.utils.CheckPointUtil;
 import com.ycl.utils.DateUtils;
 import constant.ApiConstants;
+import constant.CheckConstants;
 import constant.RedisConstant;
 import enumeration.ErrorType;
 import enumeration.general.WorkOrderStatusEnum;
@@ -40,6 +42,7 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 //浼樹簯瀵规帴鏁版嵁浠诲姟
@@ -100,7 +103,7 @@
                                 item.setNo(item.getDeviceId());
                             }
                         });
-                        pointService.setDeviceTagByGB(records);
+                        pointService.setDeviceTagByGB(records, CheckConstants.Rule_Category_Video);
                         //瀛樻斁鍦╩ongo涓�
                         mongoTemplate.insertAll(records);
                         // 宸ュ崟鐢熸垚
@@ -149,7 +152,8 @@
                                 item.setNo(item.getSerialNumber().getShowValue());
                             }
                         });
-                        pointService.setDeviceTagByGB(records);
+                        //TODO:浼樹簯鐨勪竴鏈轰竴妗e寘鍚簡瑙嗛銆佽溅杈嗐�佷汉鑴� 鏄湁涓�绉嶆槸鐪佸巺灏辩畻鐪佸巺鍚�
+                        pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video);
                         pointService.setNew(records);
                         //瀛樻斁鍦╩ongo涓�
                         mongoTemplate.insertAll(records);
@@ -173,8 +177,9 @@
 
     /**
      * 鐐逛綅鍦ㄧ嚎PING妫�娴�
+     * 浠诲姟浼氬厛鎵ц涓�娆′紭浜戝悓姝ワ紝鐒跺悗鎵цping妫�娴�
+     * online瀛楁鏉ヨ嚜浜庝紭浜戯紝pingOnline涓轰富鍔╬ing妫�娴嬬殑銆傚瓨鍏ongo缁欐暟鎹腑蹇冩煡闃�
      */
-    //TODO锛氱偣浣嶅湪绾匡紙淇敼閫昏緫鍙拡瀵瑰伐鍗曪級
     public void pointOnline() throws ExecutionException, InterruptedException {
         log.info("寮�濮嬫娴嬬偣浣嶅湪绾�");
         Integer times = 2;
@@ -186,8 +191,19 @@
         } else {
             log.error("璇烽厤缃绾挎鏁帮紝姝ゆ璁剧疆涓洪粯璁ゅ��2");
         }
-        // 鍏堟煡鍑哄湪绾跨殑璁惧IP闆嗗悎,鍓旈櫎鎺夊湪绾挎儏鍐垫槸鏈煡鐨�,骞朵笖鍙娴嬫鍦ㄨ�冩牳鐨勮澶囬伩鍏嶅浣欏伐鍗�
+        // 鍏堟煡鍑鸿澶嘔P闆嗗悎,鍓旈櫎鎺夊湪绾挎儏鍐垫槸鏈煡鐨�,骞朵笖鍙娴嬫鍦ㄨ�冩牳鐨勮澶囬伩鍏嶅浣欏伐鍗�
+        //TODO锛氶渶瑕佹妸娴峰悍鍜屼紭浜戠殑浠诲姟鐨勬椂闂磋皟鍒皃ing涔嬪墠
+        //TODO锛氳繖閲岄渶瑕佸瓨涓変釜鏍囩鍚�
         List<TMonitorResult> monitorList = monitorMapper.getDistinctIP();
+        //琛ュ厖閿欒鏃堕棿鐐�
+        Query onlineQuery = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+        Map<String, TMonitorResult> mongoMap = mongoTemplate.find(onlineQuery, TMonitorResult.class).stream().collect(Collectors.toMap(TMonitorResult::getNo, Function.identity()));
+        for (TMonitorResult result : monitorList) {
+            TMonitorResult mongoData = mongoMap.get(result.getNo());
+            if(mongoData!=null){
+                result.setOffLineTimeStr(mongoData.getOffLineTimeStr());
+            }
+        }
         List<TMonitorResult> dataList = new ArrayList<>(48);
         Integer time = times;
         List<CompletableFuture<TMonitorResult>> futureList = monitorList.stream()
@@ -200,28 +216,40 @@
                             if (ex instanceof TimeoutException) {
                                 log.error("浠诲姟鎵ц瓒呮椂:"+monitor.getIp());
                             } else {
-                                log.error("浠诲姟鎵ц寮傚父:"+monitor.getIp() + ex);
+                                log.error("浠诲姟鎵ц寮傚父:"+monitor.getIp() +ex);
+                                ex.printStackTrace();
                             }
-                            int checkTimes = 1;
-                            int offLineTimes = 1;
-                            Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getIp());
-                            if (!CollectionUtils.isEmpty(map)) {
-                                checkTimes = (Integer) map.get("checkTimes") + 1;
-                                offLineTimes = (Integer) map.get("offLineTimes");
-                            }
-                            monitor.setOnline(Boolean.FALSE);
-                            monitor.setCheckCount(checkTimes);
-                            monitor.setOffLineCount(offLineTimes);
-                            if (monitor.getOffLineCount() >= time) {
-                                WorkOrder workOrder = new WorkOrder();
-                                workOrder.setSerialNumber(monitor.getNo());
-                                List<String> errList = new ArrayList<>();
-                                errList.add(ErrorType.DEVICE_OFFLINE.getValue());
-                                workOrder.setErrorTypeList(errList);
-                                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
-                                monitor.setWorkOrder(workOrder);
-                            }
-                            return monitor; // 杩斿洖澶辫触鐨勭粨鏋�
+                            return null;
+//                            int checkTimes = 1;
+//                            int offLineTimes = 1;
+//                            Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getNo());
+//                            if (!CollectionUtils.isEmpty(map)) {
+//                                checkTimes = (Integer) map.get("checkTimes") + 1;
+//                                offLineTimes = (Integer) map.get("offLineTimes");
+//                            }else {
+//                                map = new HashMap<>();
+//                            }
+//                            monitor.setPingOnline(Boolean.FALSE);
+//                            monitor.setCheckCount(checkTimes);
+//                            monitor.setOffLineCount(offLineTimes);
+//                            List<Date> offLineTime = monitor.getOffLineTime();
+//                            if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>();
+//                            offLineTime.add(new Date());
+//                            monitor.setOffLineTime(offLineTime);
+//                            if (monitor.getOffLineCount() >= time) {
+//                                WorkOrder workOrder = new WorkOrder();
+//                                workOrder.setSerialNumber(monitor.getNo());
+//                                List<String> errList = new ArrayList<>();
+//                                errList.add(ErrorType.DEVICE_OFFLINE.getValue());
+//                                workOrder.setErrorTypeList(errList);
+//                                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+//                                monitor.setWorkOrder(workOrder);
+//                            }
+//                            map.put("checkTimes", checkTimes);
+//                            map.put("offLineTimes", offLineTimes);
+//                            redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getNo(), map);
+//                            return monitor; // 杩斿洖澶辫触鐨勭粨鏋�
+
                         }))
                 .collect(Collectors.toList());
 
@@ -232,7 +260,7 @@
         try {
             allOf.get(60, TimeUnit.SECONDS); // 缁欎簣棰濆鐨�5绉掓潵鏀堕泦缁撴灉
         } catch (TimeoutException e) {
-            log.warn("閮ㄥ垎浠诲姟鏈湪鎸囧畾鏃堕棿鍐呭畬鎴�");
+            log.error("閮ㄥ垎浠诲姟鏈湪鎸囧畾鏃堕棿鍐呭畬鎴�");
         } catch (Exception e2){
             log.error("鏁版嵁鏀堕泦寮傚父"+e2);
         }
@@ -241,23 +269,26 @@
                 .map(CompletableFuture::join)
                 .filter(Objects::nonNull)
                 .collect(Collectors.toList());
-        //绛涢�夊嚭ping绂荤嚎鐨勮澶囷紝鏇存敼鏁版嵁搴撲负绂荤嚎
+
         Date now = new Date();
-        List<UpdateOnlineVO> willUpdateList = dataList.stream().filter(result->!result.getOnline()).map(item -> {
-            UpdateOnlineVO vo = new UpdateOnlineVO();
-            vo.setOnline(item.getOnline()?ApiConstants.UY_OnlineSite_Online:ApiConstants.UY_OnlineSite_Offline);
-            vo.setIp(item.getIp());
-            vo.setUpdateTime(now);
-            return vo;
-        }).collect(Collectors.toList());
-        monitorMapper.updateOnline(willUpdateList);
-        //宸ュ崟
-        List<WorkOrder> workOrderList = dataList.stream()
-                .filter(item -> Objects.nonNull(item.getWorkOrder()))
-                .map(TMonitorResult::getWorkOrder)
-                .collect(Collectors.toList());
-        if (!CollectionUtils.isEmpty(workOrderList)) {
-            workOrderService.innerAddWorkOrder(workOrderList);
+        List<String> offLineList = new ArrayList<>();
+        List<String> onLineList = new ArrayList<>();
+        //鏌ュ嚭鏁版嵁搴撶函杞﹁締鎴栫函浜鸿劯璁惧
+        List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
+        dataList.forEach(item->{
+            //鏇存柊绾溅杈嗘垨绾汉鑴哥殑璁惧鐨勫湪绾跨姸鎬�(杩欓儴鍒嗚澶囦笉浼氭媺娴佹娴�)
+            if(item.getPingOnline() && !CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(item.getNo())) {
+                onLineList.add(item.getIp());
+            } else if(!item.getPingOnline()) {
+                //绛涢�夊嚭ping绂荤嚎鐨勮澶囷紝鏇存敼鏁版嵁搴撲负绂荤嚎
+                offLineList.add(item.getIp());
+            }
+        });
+        if(!CollectionUtils.isEmpty(offLineList)) {
+            monitorMapper.batchUpdateOnline(offLineList, now, ApiConstants.UY_OnlineSite_Offline);
+        }
+        if(!CollectionUtils.isEmpty(onLineList)) {
+            monitorMapper.batchUpdateOnline(onLineList, now, ApiConstants.UY_OnlineSite_Online);
         }
         //瀛樻斁鍒癿ongo
         if (!CollectionUtils.isEmpty(dataList)) {
@@ -266,6 +297,21 @@
             DeleteResult result = mongoTemplate.remove(query, TMonitorResult.class);
             //瀛樻斁鍦╩ongo涓�
             mongoTemplate.insertAll(dataList);
+        }
+        //宸ュ崟锛堝悓涓�IP鍙敓鎴愪竴涓伐鍗曪級
+        List<WorkOrder> workOrderList = dataList.stream()
+                .filter(item -> Objects.nonNull(item.getWorkOrder()))
+                .collect(Collectors.toMap(
+                        TMonitorResult::getIp,
+                        Function.identity(),
+                        (existing, replacement) -> existing // 濡傛灉閬囧埌鐩稿悓鐨� IP锛屼繚鐣欑涓�涓� TMonitorResult 瀵硅薄
+                ))
+                .values()
+                .stream()
+                .map(TMonitorResult::getWorkOrder)
+                .collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(workOrderList)) {
+            workOrderService.innerAddWorkOrder(workOrderList);
         }
         log.info("鐐逛綅鍦ㄧ嚎鐩戞祴瀹屾垚");
     }
@@ -293,7 +339,12 @@
                                 .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
                         DeleteResult result = mongoTemplate.remove(query, VideoOnlineResult.class);
                         //鎵撴爣绛�
-                        pointService.setDeviceTagByGB(records);
+                        records.forEach(item -> {
+                            if (Objects.nonNull(item.getDeviceId())) {
+                                item.setNo(item.getDeviceId());
+                            }
+                        });
+                        pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video);
                         //瀛樻斁鍦╩ongo涓�
                         mongoTemplate.insertAll(records);
                         //鏇存柊point琛ㄥ湪绾跨姸鎬�
@@ -306,8 +357,14 @@
                             return vo;
                         }).collect(Collectors.toList());
                         monitorMapper.updateOnline(willUpdateList);
-                        //绂荤嚎鐢熸垚宸ュ崟
-                        List<VideoOnlineResult> workOrders = records.stream().filter(item -> ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus())).collect(Collectors.toList());
+                        //绂荤嚎鐢熸垚宸ュ崟,涓�涓猧p鍙敓鎴愪竴涓伐鍗�
+                        List<VideoOnlineResult> workOrders = new ArrayList<>(records.stream()
+                                .filter(item -> ApiConstants.UY_OnlineSite_Offline.equals(item.getStatus()))
+                                .collect(Collectors.toMap(
+                                        VideoOnlineResult::getIpAddr,
+                                        Function.identity(),
+                                        (existing, replacement) -> existing // 濡傛灉閬囧埌鐩稿悓鐨� IP锛屼繚鐣欑涓�涓紙existing锛�
+                                )).values());
                         uyErrorTypeCheckService.videoOnlineCheck(workOrders);
                     } else {
                         log.error("鐐逛綅鍦ㄧ嚎缁撴灉鏁版嵁涓虹┖{}", data);
@@ -354,11 +411,11 @@
                         }
                     });
                     //鎵撴爣绛�
-                    pointService.setDeviceTagByGB(records);
+                    pointService.setDeviceTagByGB(records,CheckConstants.Rule_Category_Video);
                     //瀛樻斁鍦╩ongo涓�
                     mongoTemplate.insertAll(records);
-                    // 宸ュ崟鐢熸垚
-                    uyErrorTypeCheckService.recordMetaDSumCheck(records);
+//                    // 宸ュ崟鐢熸垚
+//                    uyErrorTypeCheckService.recordMetaDSumCheck(records);
                 }
             } else {
                 log.error("褰曞儚鍙敤鏁版嵁涓虹┖{}", jsonObject);

--
Gitblit v1.8.0