From 27e913d6d28a9cfa0785d15453a4de10fd36ce6d Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 10 二月 2025 11:17:59 +0800 Subject: [PATCH] 首页录像统计加上间歇 --- ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java | 210 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 188 insertions(+), 22 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 e74f2c9..8857297 100644 --- a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java +++ b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java @@ -1,7 +1,16 @@ package com.ycl.utils; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.ycl.platform.domain.entity.DeviceInfo; +import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.result.SYS.TMonitorResult; +import com.ycl.platform.domain.vo.CheckResult; +import com.ycl.platform.domain.vo.CheckUtil; +import com.ycl.platform.mapper.DeviceInfoMapper; +import com.ycl.platform.mapper.TMonitorMapper; +import com.ycl.platform.service.WorkOrderService; import com.ycl.utils.http.SelfHttpUtil; +import com.ycl.utils.uuid.IdUtils; import constant.RedisConstant; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -15,9 +24,9 @@ import java.io.IOException; import java.net.InetAddress; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.net.UnknownHostException; +import java.text.SimpleDateFormat; +import java.util.*; /** * @author xp @@ -29,56 +38,213 @@ public class CheckPointUtil { private final RedisTemplate redisTemplate; - private final SelfHttpUtil selfHttpUtil; + private final DeviceInfoMapper deviceInfoMapper; + private final WorkOrderService workOrderService; + private final TMonitorMapper monitorMapper; /** * 鐩戞祴鐐逛綅鍦ㄧ嚎宸ュ叿绫� + * * @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); + log.error("web妫�娴嬬绾�"+monitor.getIp()); + 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); + if(!reachable) log.error("ping妫�娴嬬绾�"+monitor.getIp()); + 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.getMessage()); + } + return reachable; + } + + + /** + * 鐩戞祴鐐逛綅鍦ㄧ嚎 + * + * @return + */ + public CheckResult webCheck(CheckUtil checkUtil) { + CheckResult result = new CheckResult(); + List<TMonitor> ips = new LambdaQueryChainWrapper<>(monitorMapper) + .eq(TMonitor::getSerialNumber, checkUtil.getSerialNumber()) + .list(); + if (ips.size() < 1) { + result.setStatus("鍥芥爣鐮佹湭鏌ユ壘鍒癐P"); + return result; + } + checkUtil.setIp(ips.get(0).getIp()); + + log.info("鐩戞祴IP锛�" + checkUtil.getIp()); + String prefix = "http://"; + if ("127.0.0.1".equals(checkUtil.getIp())) { + result.setStatus("ip寮傚父"); + return result; + } + boolean webReachable = false; + try { + 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 + boolean pingReachable = false; + try { + InetAddress inet = InetAddress.getByName(checkUtil.getIp()); + pingReachable = inet.isReachable(5000); // 5000姣瓒呮椂鏃堕棿 + } catch (UnknownHostException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + String imgUrl = ""; + 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) { + status += "璁惧web璁块棶澶辫触锛�"; + } else if (webReachable) { + status += "璁惧web璁块棶姝e父锛�"; + } + + if (!pingReachable) { + status += "璁惧ip鏈猵ing閫氾紱"; + } else if (pingReachable) { + status += "璁惧ipPing姝e父锛�"; + } + + if (StringUtils.isEmpty(imgUrl)) { + status += "鏈幏鍙栧埌鍥剧墖"; + } else { + status += "鑾峰彇鍥剧墖姝e父"; + } + result.setStatus(status); + return result; + } + + /** + * ping + * + * @return + */ + public CheckResult ping(CheckUtil checkUtil) { + CheckResult result = new CheckResult(); + + log.info("鐩戞祴IP锛�" + checkUtil.getIp()); + String prefix = "http://"; + if ("127.0.0.1".equals(checkUtil.getIp())) { + result.setStatus("ip寮傚父"); + return result; + } + // ping + boolean pingReachable = false; + try { + InetAddress inet = InetAddress.getByName(checkUtil.getIp()); + pingReachable = inet.isReachable(5000); // 5000姣瓒呮椂鏃堕棿 + } catch (UnknownHostException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + String status = ""; + if (!pingReachable) { + status += "ip鏈猵ing閫氾紱"; + } else { + status += "鎴愬姛"; + } + result.setStatus(status); + return result; + } } -- Gitblit v1.8.0