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