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