From 5c978147b913754adbf913acdb6e4dcf995f0609 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 06 九月 2024 15:14:03 +0800
Subject: [PATCH] 新的点位在线率查询方式

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java             |    5 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java          |   21 ++++
 ycl-server/src/main/java/com/ycl/task/PlatformTask.java                        |    7 
 ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java           |   14 ++
 ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java                    |    3 
 ycl-server/src/main/java/com/ycl/task/OsdTask.java                             |    4 
 ycl-server/src/main/java/com/ycl/config/RestTemplateConfig.java                |   19 +++
 ycl-server/src/main/java/com/ycl/task/UYTask.java                              |   67 +++++++++++++
 ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java |    7 -
 ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml                   |   15 ++
 ycl-server/src/main/java/com/ycl/utils/http/SelfHttpUtil.java                  |  122 ++++++++++++++++++++++++
 11 files changed, 267 insertions(+), 17 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
index 9b34985..dda1f1e 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java
@@ -71,6 +71,10 @@
     @TableField("dept_tag")
     private Boolean deptTag;
 
+    @ApiModelProperty("鏄惁鍦ㄧ嚎锛歵rue 鍦ㄧ嚎")
+    @TableField("online")
+    private Boolean online;
+
     @TableField("serial_number")
     private String serialNumber;
 
@@ -83,6 +87,5 @@
     @TableField("recovery_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date recoveryTime;
-
 
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
new file mode 100644
index 0000000..ddbacf8
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/UpdateOnlineVO.java
@@ -0,0 +1,21 @@
+package com.ycl.platform.domain.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/9/6 14:48
+ */
+@Data
+public class UpdateOnlineVO {
+
+    /** ip */
+    private String ip;
+
+    /** 鏄惁鍦ㄧ嚎 */
+    private Boolean online;
+
+    private Date updateTime;
+}
diff --git a/ycl-server/src/main/java/com/ycl/config/RestTemplateConfig.java b/ycl-server/src/main/java/com/ycl/config/RestTemplateConfig.java
new file mode 100644
index 0000000..ebe5c25
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/config/RestTemplateConfig.java
@@ -0,0 +1,19 @@
+package com.ycl.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author xp
+ * @date 2022/11/16
+ */
+@Configuration
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate restTemplate() {
+        return new RestTemplate();
+    }
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
index 15f93ef..c870cd6 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -7,6 +7,7 @@
 import com.ycl.platform.domain.query.DataCenterQuery;
 import com.ycl.platform.domain.query.HomeQuery;
 import com.ycl.platform.domain.vo.TMonitorVO;
+import com.ycl.platform.domain.vo.UpdateOnlineVO;
 import com.ycl.platform.domain.vo.screen.MonitorRateVO;
 import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
 import org.apache.ibatis.annotations.Mapper;
@@ -148,4 +149,17 @@
      * @return
      */
     List<String> getGBbyGB(@Param("gbList") List<String> gbList);
+
+    /**
+     * 鏌ュ嚭璁惧ip闆嗗悎
+     *
+     * @return
+     */
+    List<String> getDistinctIP();
+
+    /**
+     * 鏍规嵁ip淇敼鐐逛綅琛ㄧ殑鏄惁鍦ㄧ嚎瀛楁
+     * @param online
+     */
+    void updateOnline(@Param("online") UpdateOnlineVO online);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
index 43f2843..1350934 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java
@@ -57,13 +57,6 @@
     private final SysDeptMapper sysDeptMapper;
     private final TMonitorMapper monitorMapper;
 
-    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
-            24,
-            5000,
-            TimeUnit.SECONDS,
-            new ArrayBlockingQueue<>(10),
-            new ThreadPoolExecutor.CallerRunsPolicy()
-    );
 
     /**
      * 娣诲姞
diff --git a/ycl-server/src/main/java/com/ycl/task/OsdTask.java b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
index 4fe81b8..57ba630 100644
--- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -73,8 +73,8 @@
         //闇�瑕佽�冩牳鐨勬暟鎹�
         List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList());
         if(!CollectionUtils.isEmpty(serialNumbers)) {
-            ExecutorService executorService = new ThreadPoolExecutor(8,
-                    24,
+            ExecutorService executorService = new ThreadPoolExecutor(16,
+                    128,
                     5000,
                     TimeUnit.SECONDS,
                     new ArrayBlockingQueue<>(1000),
diff --git a/ycl-server/src/main/java/com/ycl/task/PlatformTask.java b/ycl-server/src/main/java/com/ycl/task/PlatformTask.java
index 31643e7..76a5402 100644
--- a/ycl-server/src/main/java/com/ycl/task/PlatformTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/PlatformTask.java
@@ -44,11 +44,11 @@
 
     private static final String DICT_TYPE = "platform_online";
 
-    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
-            24,
+    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
+            128,
             5000,
             TimeUnit.SECONDS,
-            new ArrayBlockingQueue<>(10),
+            new ArrayBlockingQueue<>(1000),
             new ThreadPoolExecutor.CallerRunsPolicy()
     );
 
@@ -81,7 +81,6 @@
                     log.error("妫�鏌ュ钩鍙拌繛閫氭�ф椂鍙戠敓閿欒", e);
                 }
             });
-            executorService.shutdown();
         }
     }
 
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 e75cd04..2c3ae39 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -3,12 +3,17 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.mongodb.client.result.DeleteResult;
 import com.ycl.feign.UYClient;
+import com.ycl.platform.domain.entity.YwPoint;
 import com.ycl.platform.domain.param.UY.*;
 import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
 import com.ycl.platform.domain.result.UY.*;
+import com.ycl.platform.domain.vo.UpdateOnlineVO;
+import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.service.UYErrorTypeCheckService;
 import com.ycl.platform.service.YwPointService;
 import com.ycl.utils.DateUtils;
+import com.ycl.utils.http.HttpUtils;
+import com.ycl.utils.http.SelfHttpUtil;
 import constant.ApiConstants;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -16,14 +21,23 @@
 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.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import java.io.IOException;
+import java.net.InetAddress;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 //浼樹簯瀵规帴鏁版嵁浠诲姟
 @Slf4j
@@ -35,6 +49,8 @@
     private final UYClient uyClient;
     private final UYErrorTypeCheckService uyErrorTypeCheckService;
     private final YwPointService pointService;
+    private final TMonitorMapper monitorMapper;
+    private final SelfHttpUtil selfHttpUtil;
 
     @Value("${youYun.tenantId}")
     private String tenantId;
@@ -46,6 +62,14 @@
     private String email;
     @Value("${youYun.passwd}")
     private String passwd;
+
+    private static final ExecutorService executorService = new ThreadPoolExecutor(16,
+            128,
+            5000,
+            TimeUnit.SECONDS,
+            new ArrayBlockingQueue<>(1000),
+            new ThreadPoolExecutor.CallerRunsPolicy()
+    );
 
     // 鍥惧儚妫�娴�
     public void imageDetection() {
@@ -143,6 +167,49 @@
         log.info("缁撴潫涓�鏈轰竴妗e悎鏍肩巼鏁版嵁鍚屾");
     }
 
+    /**
+     * 鐐逛綅鍦ㄧ嚎妫�娴�
+     */
+    public void pointOnline() {
+        log.info("寮�濮嬫娴嬬偣浣嶅湪绾�");
+        // 鍏堟煡鍑鸿澶嘔P闆嗗悎
+        List<String> ipList = monitorMapper.getDistinctIP();
+        String prefix = "http://";
+        Date now = new Date();
+        for (String ip : ipList) {
+            executorService.submit(() -> {
+                // 鍏堟娴嬭兘鍚﹁闂ip鐨勭綉椤�
+                ResponseEntity<Object> res = null;
+                UpdateOnlineVO online = new UpdateOnlineVO();
+                online.setIp(ip);
+                if ("127.0.0.1".equals(ip)) {
+                    online.setOnline(Boolean.FALSE);
+                    monitorMapper.updateOnline(online);
+                    return;
+                }
+                try {
+                    res = selfHttpUtil.get(prefix + ip, null, null);
+                    online.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode());
+                } catch (Exception e) {
+                    online.setOnline(Boolean.FALSE);
+                }
+                online.setUpdateTime(now);
+
+                // 濡傛灉http寰楀埌鐨勪笉鍦ㄧ嚎锛岄偅涔堝啀ping涓�涓�
+                boolean reachable = false;
+                if (! online.getOnline()) {
+                    try {
+                        reachable = InetAddress.getByName(ip).isReachable(3000);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                    online.setOnline(reachable);
+                }
+                monitorMapper.updateOnline(online);
+            });
+        }
+    }
+
     //鐐逛綅鍦ㄧ嚎鐜�
     public void videoOnlineTask() {
         //瑙嗛鍥惧儚璐ㄩ噺
diff --git a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
index 0dffe4b..8adb134 100644
--- a/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/WorkOrderImgTask.java
@@ -40,7 +40,7 @@
     private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
 
     private static final ExecutorService executorService = new ThreadPoolExecutor(16,
-            32,
+            128,
             5000,
             TimeUnit.SECONDS,
             new ArrayBlockingQueue<>(1000),
@@ -78,7 +78,6 @@
                 }
             });
         }
-        executorService.shutdown();
     }
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/utils/http/SelfHttpUtil.java b/ycl-server/src/main/java/com/ycl/utils/http/SelfHttpUtil.java
new file mode 100644
index 0000000..c83336f
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/utils/http/SelfHttpUtil.java
@@ -0,0 +1,122 @@
+package com.ycl.utils.http;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author xp
+ * @date 2022/11/16
+ */
+@Component
+@RequiredArgsConstructor
+public class SelfHttpUtil {
+
+    private final RestTemplate httpClient;
+
+    /**
+     * post
+     *
+     * @param url    璇锋眰杩炴帴锛坧s: post璇锋眰濡傛灉瑕佷紶url鍙傛暟锛岃鍏堟嫾鎺ュソ鍐嶄紶鍏rl锛�
+     * @param data   璇锋眰浣撴暟鎹�
+     * @param header 璇锋眰澶达紙鏈塼oken灏辨斁閲岄潰锛�
+     * @return
+     */
+    public Object post(String url, @Nullable Object data, @Nullable MultiValueMap header) {
+        ResponseEntity<Object> response = httpClient.exchange(
+                url,
+                HttpMethod.POST,
+                getHttpEntity(data, header),
+                Object.class
+        );
+        return response.getBody();
+    }
+
+    /**
+     * @param url   璇锋眰杩炴帴 锛坧s: post璇锋眰濡傛灉瑕佷紶url鍙傛暟锛岃鍏堟嫾鎺ュソ鍐嶄紶鍏rl锛�
+     * @param data  璇锋眰浣撴暟鎹�
+     * @param token
+     * @return
+     */
+    public Object post(String url, String token, @Nullable Object data) {
+        ResponseEntity<Object> response = httpClient.exchange(
+                url,
+                HttpMethod.POST,
+                getHttpEntity(data, token),
+                Object.class
+        );
+        return response.getBody();
+    }
+
+    /**
+     * get
+     *
+     * @param url  RestTemplate 濡傛灉鏈塽rl鍙傛暟锛屽繀椤昏鍦╱rl涓娇鐢ㄥ崰浣嶇锛屽锛歨ttps://www.easyblog.vip?name={name} 浼犲弬锛歋tring name = xp锛屾墠鑳芥嫾涓婅繖涓弬鏁�
+     * @param token
+     * @param params
+     * @return
+     */
+//    public Object get(String url, String token, @Nullable Object... params) {
+//        ResponseEntity<Object> response = httpClient.exchange(
+//                url,
+//                HttpMethod.GET,
+//                getHttpEntity(null, token),
+//                Object.class,
+//                params
+//        );
+//        return response.getBody();
+//    }
+
+    /**
+     * get
+     *
+     * @param url    璇锋眰杩炴帴  RestTemplate 濡傛灉鏈塽rl鍙傛暟锛屽繀椤昏鍦╱rl涓娇鐢ㄥ崰浣嶇锛屽锛歨ttps://www.easyblog.vip?name={name} 浼犲弬锛歋tring name = xp锛屾墠鑳芥嫾涓婅繖涓弬鏁�
+     * @param header 璇锋眰澶达紙鏈塼oken灏辨斁閲岄潰锛�
+     * @param params
+     * @return
+     */
+    public ResponseEntity<Object> get(String url, @Nullable MultiValueMap header, @Nullable Object... params) {
+        ResponseEntity<Object> response = httpClient.exchange(
+                url,
+                HttpMethod.GET,
+                getHttpEntity(null, header),
+                Object.class,
+                params
+        );
+        return response;
+    }
+
+
+    /**
+     * 鏋勫缓甯﹁姹傚ご鍜岃姹備綋鐨刪ttpEntity
+     *
+     * @param data
+     * @param token
+     * @return
+     */
+    protected HttpEntity getHttpEntity(Object data, String token) {
+        MultiValueMap<String, String> header = new HttpHeaders();
+        header.add("Authorization", token);
+        HttpEntity httpEntity = new HttpEntity(data, header);
+        return httpEntity;
+    }
+
+    /**
+     * 鐩存帴浼犲叆header
+     *
+     * @param data
+     * @param header
+     * @return
+     */
+    protected HttpEntity getHttpEntity(Object data, MultiValueMap header) {
+        HttpEntity httpEntity = new HttpEntity(data, header);
+        return httpEntity;
+    }
+
+}
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
index 7d526d8..22d1360 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -580,6 +580,19 @@
         FROM
              t_monitor
         WHERE
-              deleted = 0 AND serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
+              serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
     </select>
+
+    <select id="getDistinctIP" resultType="string">
+        SELECT
+            DISTINCT ip
+        FROM
+            t_monitor
+    </select>
+
+    <update id="updateOnline">
+        update t_yw_ponit set online = #{online.online}, update_time = #{online.updateTime} WHERE EXISTS (
+                                                                                                          SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number
+                                                                                                      );
+    </update>
 </mapper>

--
Gitblit v1.8.0