From 64efb660b2c119c00432434c0f651f8996483f18 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 21 二月 2025 15:51:13 +0800 Subject: [PATCH] OSD大华数据格式+数据中心重点标签统计数 --- ycl-server/src/main/java/com/ycl/api/HK/HKApi.java | 168 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 136 insertions(+), 32 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/api/HK/HKApi.java b/ycl-server/src/main/java/com/ycl/api/HK/HKApi.java index 1b4e116..b6c5c17 100644 --- a/ycl-server/src/main/java/com/ycl/api/HK/HKApi.java +++ b/ycl-server/src/main/java/com/ycl/api/HK/HKApi.java @@ -1,65 +1,169 @@ package com.ycl.api.HK; +import com.ycl.platform.domain.result.OSDResult; +import com.ycl.utils.StringUtils; +import constant.ApiConstants; +import enumeration.DeviceType; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; -import org.apache.http.auth.Credentials; import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; +import org.w3c.dom.*; import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; import java.io.StringReader; import java.net.URI; +import java.net.URISyntaxException; +import java.time.OffsetDateTime; +import java.util.Date; @Slf4j public class HKApi { - public static void getOsdByIP(String ip) { - DefaultHttpClient httpclient = new DefaultHttpClient(); + public static OSDResult getOsdByIP(String serialNumber, String ip, String userName, String password) { + OSDResult osdResult = new OSDResult(); String hostUrl = "http://" + ip; - // 鑾峰彇鐒﹁窛 - String url = hostUrl + "/ISAPI/System/Video/inputs/channels/1/overlays"; - URI serverURI = null; try { - serverURI = new URI(url); - HttpGet httpGet = new HttpGet(url); - String username = "admin"; - String password = "zg@2024dx"; - Credentials creds = new UsernamePasswordCredentials(username, - password); - httpclient.getCredentialsProvider(). + //鑾峰彇OSD + /** + * 閫氳繃鍥芥爣鍊掓暟绗竷浣嶅垽鏂�氶亾 0/鍏ㄦ櫙 1/缁嗚妭 + * 瀵逛簬娴峰悍鏉ヨ锛� 鍥芥爣鍊�7 0/鍏ㄦ櫙/閫氶亾2 1/缁嗚妭/閫氶亾1 + * 瀵逛簬澶у崕鏉ヨ锛� 鍥芥爣鍊�7 0/鍏ㄦ櫙/閫氶亾1 1/缁嗚妭/閫氶亾2 + * 瀹囪鍗曢�氶亾涓嶈�冭檻 + */ + String OSDString = null; + if(StringUtils.isEmpty(serialNumber)) return null; + if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_All ) { + OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_2, userName, password); + }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_Detail){ + OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_1, userName, password); + } + //閫氳繃璁惧绫诲瀷鍒ゆ柇锛堝純鐢級 +// if(serialNumber.charAt(ApiConstants.SerialNumber_Category) == 1 ){ +// //鏋満 +// if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == 1){ +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_1, userName, password); +// }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == 0){ +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_2, userName, password); +// } +// }else if(serialNumber.charAt(ApiConstants.SerialNumber_Category) == 2){ +// //鐞冩満 +// if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == 0){ +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_1, userName, password); +// }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == 1){ +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_2, userName, password); +// } +// }else if(serialNumber.charAt(ApiConstants.SerialNumber_Category) == 3){ +// //鍗″彛 鍗曢�氶亾 +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_1, userName, password); +// }else if(serialNumber.charAt(ApiConstants.SerialNumber_Category) == 4){ +// //楂樼┖ +// if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == 0){ +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_1, userName, password); +// }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == 1){ +// OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH_2, userName, password); +// } +// } + if (OSDString == null) return null; - setCredentials( - new AuthScope(serverURI.getHost(), serverURI. - - getPort()), (Credentials) creds); - - HttpResponse response = httpclient.execute(httpGet); - - String resultString = EntityUtils.toString(response.getEntity(), "utf-8"); - log.info(resultString); //瑙f瀽xml + parseXMl(OSDString, "TextOverlay", "displayText", osdResult, null, ip); + //鑾峰彇Time + String timeString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_TIME, userName, password); + if (timeString == null) return null; + + Date date = new Date(); + //瑙f瀽xml + parseXMl(timeString, "Time", "localTime", osdResult, date, ip); + osdResult.setDeviceBrand(DeviceType.HK.getType()); + } catch (Exception e) { + return null; + } + return osdResult; + } + + private static void parseXMl(String OSDString, String tagName1, String tagName2, OSDResult osdResult, Date date, String ip) throws ParserConfigurationException, SAXException, IOException { + + try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); - Document document = builder.parse(new InputSource(new StringReader(resultString))); + Document document = builder.parse(new InputSource(new StringReader(OSDString))); document.getDocumentElement().normalize(); - NodeList nodeList = document.getElementsByTagName("TextOverlay"); + NodeList nodeList = document.getElementsByTagName(tagName1); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { + if (node.getNodeType() == Node.ELEMENT_NODE && "TextOverlay".equals(tagName1)) { Element element = (Element) node; - log.info("TEXT : " + element.getElementsByTagName("displayText").item(0).getTextContent()); + String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); + // log.info("TEXT : " + textContent); + if (i == 0) { + osdResult.setOSD1(textContent); + } else if (i == 1) { + osdResult.setOSD2(textContent); + } else if (i == 2) { + osdResult.setOSD3(textContent); + } else if (i == 3) { + osdResult.setName(textContent); + } else if (i == 4) { + osdResult.setOSD4(textContent); + } + } else if (node.getNodeType() == Node.ELEMENT_NODE && "Time".equals(tagName1)) { + Element element = (Element) node; + String textContent = element.getElementsByTagName(tagName2).item(0).getTextContent(); + // log.info("TEXT : " + textContent); + osdResult.setCheckTime(date); + OffsetDateTime dateTime = OffsetDateTime.parse(textContent); + // 灏哋ffsetDateTime杞崲涓篋ate瀵硅薄 + osdResult.setOsdTime(Date.from(dateTime.toInstant())); } } } catch (Exception e) { - e.printStackTrace(); + log.error("ip:{}鍑虹幇寮傚父,{}", ip, e.getMessage()); + throw new RuntimeException(e.getMessage()); } } + + private static String getHttpResponse(String url, String userName, String password) throws URISyntaxException, IOException { + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials( + new AuthScope(new URI(url).getHost(), new URI(url).getPort()), + new UsernamePasswordCredentials(userName, password)); + // 缁戝畾鍑瘉鎻愪緵鑰呭埌HttpClient + CloseableHttpClient httpClient = HttpClientBuilder.create() + .setDefaultCredentialsProvider(credsProvider) + .build(); + + HttpGet httpGet = new HttpGet(url); + + // 璁剧疆璇锋眰閰嶇疆 + RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(3000) + .setSocketTimeout(3000) + .build(); + httpGet.setConfig(requestConfig); + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode == 200) { + return EntityUtils.toString(response.getEntity(), "utf-8"); + } else { + return null; + } + } catch (Exception e) { + throw new RuntimeException("娴峰悍OSD鎵ц澶辫触", e); + } + + } } -- Gitblit v1.8.0