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