From c6976365d5bfb39a32db8b541b1fe3ceb30c7826 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 14 二月 2025 10:03:17 +0800
Subject: [PATCH] Merge branch 'dev'

---
 ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java |  123 +++++++++++++++++++++++++++++-----------
 1 files changed, 88 insertions(+), 35 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
index 8edbed3..1ccda7a 100644
--- a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
+++ b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
@@ -25,6 +25,7 @@
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -44,57 +45,98 @@
 
     /**
      * 鐩戞祴鐐逛綅鍦ㄧ嚎宸ュ叿绫�
+     *
      * @return
      */
-    public TMonitorResult check(TMonitorResult monitor) {
+    public TMonitorResult check(TMonitorResult monitor,Integer times) {
         // 鍏堟娴嬭兘鍚﹁闂ip鐨勭綉椤�
-        ResponseEntity<Object> res = null;
-        log.info("鐩戞祴IP锛�" + monitor.getIp());
+        ResponseEntity<String> res = null;
         String prefix = "http://";
         if ("127.0.0.1".equals(monitor.getIp())) {
-            monitor.setOnline(Boolean.FALSE);
+            monitor.setPingOnline(Boolean.FALSE);
+            log.error("ip鏈夎"+monitor.getIp());
             return monitor;
         }
         try {
             res = selfHttpUtil.get(prefix + monitor.getIp(), null, null);
-            monitor.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode());
+            monitor.setPingOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode());
         } catch (Exception e) {
-            monitor.setOnline(Boolean.FALSE);
+            monitor.setPingOnline(Boolean.FALSE);
         }
-
         // 濡傛灉http寰楀埌鐨勪笉鍦ㄧ嚎锛岄偅涔堝啀ping涓�涓�
         boolean reachable = false;
         Integer checkTimes = 1;
         Integer offLineTimes = 0;
-        Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getIp());
-        if (!CollectionUtils.isEmpty(map)) {
+        Integer continueOffTimes = 0;
+        List<String> offTimeList = new ArrayList<>();
+        // 浠嶳edis鑾峰彇鏁版嵁鏃惰繘琛岀被鍨嬪畨鍏ㄧ殑杞崲
+        Map<String, Object> map = null;
+        Object mapObj = redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getNo());
+        if (mapObj != null) {
+            map = (Map<String, Object>) mapObj;
             checkTimes = (Integer) map.get("checkTimes") + 1;
             offLineTimes = (Integer) map.get("offLineTimes");
+            continueOffTimes = (Integer) map.get("continueOffTimes");
+            Object offTimeListObj = map.get("offTimeList");
+            if (offTimeListObj instanceof List) {
+                offTimeList = new ArrayList<>((List<String>) offTimeListObj);
+            }
         } else {
             map = new HashMap<>();
         }
-        if (!monitor.getOnline()) {
-            try {
-                reachable = InetAddress.getByName(monitor.getIp()).isReachable(3000);
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            monitor.setOnline(reachable);
+        if (!monitor.getPingOnline()) {
+            reachable = checkPing(monitor, reachable);
+            monitor.setPingOnline(reachable);
         }
-        if (!monitor.getOnline()) {
+        if (!monitor.getPingOnline()) {
             offLineTimes++;
+            continueOffTimes++;
+            //璁板綍绂荤嚎鏃堕棿
+            Date now = new Date();
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            offTimeList.add(dateFormat.format(now));
+            monitor.setOffLineTimeStr(offTimeList);
+            //鍒拌揪浜х敓宸ュ崟鐨勯槇鍊兼鏁�
+            if (continueOffTimes>=times) {
+                //浜х敓浜嗗伐鍗曟墠浼氬瓨鍌ㄧ绾挎椂闂�,瀛樺偍鏈�杩戜竴娆′骇鐢熷伐鍗曠殑杩欏嚑涓绾挎椂闂寸偣
+                monitor.setCreateWorkOrder(Boolean.TRUE);
+                //浜х敓浜嗕竴娆″伐鍗曞垯娓呴櫎
+                continueOffTimes = 0;
+            }
+        }else {
+            //濡傛灉鍦ㄧ嚎浜嗭紝娓呯┖杩炵画绂荤嚎娆℃暟锛屾竻绌虹绾挎椂闂�
+            continueOffTimes = 0;
         }
         map.put("checkTimes", checkTimes);
         map.put("offLineTimes", offLineTimes);
-        redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getIp(), map);
+        map.put("continueOffTimes", continueOffTimes);
+        map.put("offTimeList", offTimeList);
+        redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getNo(), map);
         monitor.setCheckCount(checkTimes);
         monitor.setOffLineCount(offLineTimes);
         return monitor;
     }
 
+    private boolean checkPing(TMonitorResult monitor, boolean reachable) {
+        try {
+            int[] sleepTimes = {5000, 15000, 30000};
+            for (int sleepTime : sleepTimes) {
+                reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000);
+                if (reachable) {
+                    break;
+                }
+                Thread.sleep(sleepTime);
+            }
+        } catch (Exception e) {
+            log.error("Ping寮傚父",e);
+        }
+        return reachable;
+    }
+
 
     /**
      * 鐩戞祴鐐逛綅鍦ㄧ嚎
+     *
      * @return
      */
     public CheckResult webCheck(CheckUtil checkUtil) {
@@ -116,9 +158,10 @@
         }
         boolean webReachable = false;
         try {
-            ResponseEntity<Object> res = selfHttpUtil.get(prefix + checkUtil.getIp(), null, null);
+            ResponseEntity<String> res = selfHttpUtil.get(prefix + checkUtil.getIp(), null, null);
             webReachable = Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode();
         } catch (Exception e) {
+            log.info("妫�娴媤eb寮傚父" + e.getMessage());
             webReachable = Boolean.FALSE;
         }
         // ping
@@ -131,31 +174,39 @@
         } catch (IOException e) {
             e.printStackTrace();
         }
-
         String imgUrl = "";
-        // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹�
-        List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
-                .orderByDesc(DeviceInfo::getUpdateTime)
-                .last("limit 1")
-                .list();
-        if (! CollectionUtils.isEmpty(gbDevices)) {
-            try {
-                imgUrl = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), checkUtil.getSerialNumber(), IdUtils.workOrderNO(new Date(), "99999"));
-                result.setImg(imgUrl);
-            } catch (Exception e) {
-                e.printStackTrace();
+        if (pingReachable || webReachable) {
+            // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹�
+            List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
+                    .orderByDesc(DeviceInfo::getUpdateTime)
+                    .last("limit 1")
+                    .list();
+            if (!CollectionUtils.isEmpty(gbDevices)) {
+                try {
+                    imgUrl = workOrderService.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), checkUtil.getSerialNumber(), IdUtils.workOrderNO(new Date(), "99999"));
+                    result.setImg(imgUrl);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         }
-
         String status = "";
-        if (! webReachable) {
+        if (!webReachable) {
             status += "璁惧web璁块棶澶辫触锛�";
+        } else if (webReachable) {
+            status += "璁惧web璁块棶姝e父锛�";
         }
-        if (! pingReachable) {
+
+        if (!pingReachable) {
             status += "璁惧ip鏈猵ing閫氾紱";
+        } else if (pingReachable) {
+            status += "璁惧ipPing姝e父锛�";
         }
+
         if (StringUtils.isEmpty(imgUrl)) {
             status += "鏈幏鍙栧埌鍥剧墖";
+        } else {
+            status += "鑾峰彇鍥剧墖姝e父";
         }
         result.setStatus(status);
         return result;
@@ -186,8 +237,10 @@
             e.printStackTrace();
         }
         String status = "";
-        if (! pingReachable) {
+        if (!pingReachable) {
             status += "ip鏈猵ing閫氾紱";
+        } else {
+            status += "鎴愬姛";
         }
         result.setStatus(status);
         return result;

--
Gitblit v1.8.0