From d8391959627eeba172c57763d1fb22f68256bbff Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 13 十一月 2024 18:53:52 +0800
Subject: [PATCH] OSD通过国标码判断通道、数据中心车辆人脸在线率离线时间点

---
 ycl-common/src/main/java/constant/ApiConstants.java                               |   15 ++++
 ycl-server/src/main/java/com/ycl/api/HK/HKApi.java                                |   42 +++++++++++++
 ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java                   |   17 +++++
 ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java                          |    4 
 ycl-server/src/main/java/com/ycl/task/OsdTask.java                                |   15 ++++
 ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java                       |    8 +-
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java |   33 +++++++++-
 7 files changed, 116 insertions(+), 18 deletions(-)

diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java
index 38baf1d..e1eb920 100644
--- a/ycl-common/src/main/java/constant/ApiConstants.java
+++ b/ycl-common/src/main/java/constant/ApiConstants.java
@@ -73,11 +73,22 @@
     //鍏畨閮ㄥ墠缂�
     public final static String Dept = "Dept_";
 
-    //娴峰悍璁块棶OSD璺緞
-    public final static String HK_OSD_PATH = "/ISAPI/System/Video/inputs/channels/1/overlays";
+    //娴峰悍璁块棶OSD璺緞 閫氶亾1
+    public final static String HK_OSD_PATH_1 = "/ISAPI/System/Video/inputs/channels/1/overlays";
+    //娴峰悍璁块棶OSD璺緞 閫氶亾2
+    public final static String HK_OSD_PATH_2 = "/ISAPI/System/Video/inputs/channels/2/overlays";
     //娴峰悍璁块棶鏃堕棿璺緞
     public final static String HK_OSD_TIME = "/ISAPI/System/time";
 
+    //鍥芥爣鐮侀�氶亾绱㈠紩
+    public final static Integer SerialNumber_Channel = 13;
+    //鍥芥爣鐮佽澶囩被鍨嬬储寮�
+    public final static Integer SerialNumber_Category = 17;
+    //鍥芥爣鍏ㄦ櫙鏍囪瘑
+    public final static char SerialNumber_All = '0';
+    //鍥芥爣缁嗚妭鏍囪瘑
+    public final static char SerialNumber_Detail = '1';
+
     //鏍囩甯搁噺
     public final static Integer TRUE = 1;
     public final static Integer FALSE = 0;
diff --git a/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java b/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
index ffcae92..63f9881 100644
--- a/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
+++ b/ycl-server/src/main/java/com/ycl/api/DH/module/LoginModule.java
@@ -11,6 +11,7 @@
 import com.ycl.api.DH.lib.structure.*;
 import com.ycl.platform.domain.result.OSDResult;
 import com.ycl.utils.StringUtils;
+import constant.ApiConstants;
 import enumeration.DeviceType;
 import lombok.extern.slf4j.Slf4j;
 
@@ -152,7 +153,7 @@
         return bRet;
     }
 
-    public static OSDResult getOsd(LLong loginId) {
+    public static OSDResult getOsd(String serialNumber,LLong loginId) {
         OSDResult osdResult = new OSDResult();
         NetSDKLib.NET_TIME deviceTime = new NetSDKLib.NET_TIME();
         if (!netsdk.CLIENT_QueryDeviceTime(loginId, deviceTime, 3000)) {
@@ -174,7 +175,19 @@
 
         NET_CFG_GBMODE_INFO osdInfo = new NET_CFG_GBMODE_INFO();
         osdInfo.write();
-        boolean b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 0, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer());
+        boolean b = false;
+        /**
+         * 閫氳繃鍥芥爣鍊掓暟绗竷浣嶅垽鏂�氶亾 0/鍏ㄦ櫙 1/缁嗚妭
+         * 瀵逛簬娴峰悍鏉ヨ锛� 鍥芥爣鍊�7: 0/鍏ㄦ櫙/閫氶亾2 1/缁嗚妭/閫氶亾1
+         * 瀵逛簬澶у崕鏉ヨ锛� 鍥芥爣鍊�7: 0/鍏ㄦ櫙/閫氶亾1 1/缁嗚妭/閫氶亾2
+         * 瀹囪鍗曢�氶亾涓嶈�冭檻
+         */
+        if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_All ) {
+            b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 0, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer());
+        }else if(serialNumber.charAt(ApiConstants.SerialNumber_Channel) == ApiConstants.SerialNumber_Detail){
+            b = netsdk.CLIENT_GetConfig(loginId, NET_EM_CFG_GBMODE, 1, osdInfo.getPointer(), osdInfo.size(), 3000, reserve.getPointer());
+        }
+
         if (!b) {
 //            log.error("CLIENT_GetConfig Failed!" + ToolKits.getErrorCodePrint());
             return null;
diff --git a/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java b/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java
index 4ed1e3a..b53a7eb 100644
--- a/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java
+++ b/ycl-server/src/main/java/com/ycl/api/DH/utils/DHApi.java
@@ -9,12 +9,12 @@
 @Slf4j
 public class DHApi {
 
-    public static OSDResult getOsd(String ip, String userName, String password){
+    public static OSDResult getOsd(String serialNumber,String ip, String userName, String password){
         NetSDKLib.LLong loginId = LoginModule.login(ip, 80, userName, password);
         if(loginId.longValue() ==0){
             return null;
         }
-        OSDResult osd = LoginModule.getOsd(loginId);
+        OSDResult osd = LoginModule.getOsd(serialNumber,loginId);
         LoginModule.logout(loginId);
         return osd;
     }
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 a9711cd..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
@@ -33,12 +33,50 @@
 
 @Slf4j
 public class HKApi {
-    public static OSDResult getOsdByIP(String ip, String userName, String password) {
+    public static OSDResult getOsdByIP(String serialNumber, String ip, String userName, String password) {
         OSDResult osdResult = new OSDResult();
         String hostUrl = "http://" + ip;
         try {
             //鑾峰彇OSD
-            String OSDString = getHttpResponse(hostUrl + ApiConstants.HK_OSD_PATH, userName, password);
+            /**
+             * 閫氳繃鍥芥爣鍊掓暟绗竷浣嶅垽鏂�氶亾 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;
 
             //瑙f瀽xml
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
index 3813971..781bf2b 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -87,7 +87,8 @@
             query.addCriteria(Criteria.where("online").is(params.getOption()));
         }
         Sort sort = Sort.by(
-                Sort.Order.asc("pingOnline") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.asc("pingOnline"), // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.desc("offLineCount") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
         );
         // 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
         query.with(sort);
@@ -1397,8 +1398,12 @@
         if (params.getOption() != null) {
             query.addCriteria(Criteria.where("online").is(params.getOption()));
         }
+        Sort sort = Sort.by(
+                Sort.Order.asc("pingOnline"), // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.desc("offLineCount") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+        );
         // 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
-        query.with(Sort.by(Sort.Order.asc("pingOnline")));
+        query.with(sort);
         //鍒嗛〉鏁伴噺
         long total = mongoTemplate.count(query, TMonitorResult.class);
         MongoUtil.setPage(query, params, TIME_FIELD);
@@ -1420,6 +1425,14 @@
                 item.setOnlineStr("绂荤嚎");
             } else {
                 item.setOnlineStr("鏈煡");
+            }
+            List<String> offLineTime = item.getOffLineTimeStr();
+            if(!CollectionUtils.isEmpty(offLineTime)) {
+                //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟)
+                if (offLineTime.size() > 1) {
+                    offLineTime = offLineTime.subList(0, 2);
+                }
+                item.setOffLineTimeStr(offLineTime);
             }
         });
 
@@ -2205,8 +2218,12 @@
         if (params.getOption() != null) {
             query.addCriteria(Criteria.where("online").is(params.getOption()));
         }
+        Sort sort = Sort.by(
+                Sort.Order.asc("pingOnline"), // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+                Sort.Order.desc("offLineCount") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+        );
         // 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
-        query.with(Sort.by(Sort.Order.asc("pingOnline")));
+        query.with(sort);
         //鍒嗛〉鏁伴噺
         long total = mongoTemplate.count(query, TMonitorResult.class);
         MongoUtil.setPage(query, params, TIME_FIELD);
@@ -2226,11 +2243,19 @@
             } else {
                 item.setOnlineStr("鏈煡");
             }
+            List<String> offLineTime = item.getOffLineTimeStr();
+            if(!CollectionUtils.isEmpty(offLineTime)) {
+                //鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟)
+                if (offLineTime.size() > 1) {
+                    offLineTime = offLineTime.subList(0, 2);
+                }
+                item.setOffLineTimeStr(offLineTime);
+            }
         });
         params.setDeptTag(-1);
         params.setDeviceType(3);
 
-// 缁熻璁惧鏁伴噺
+        // 缁熻璁惧鏁伴噺
         //鍗$墖缁熻
         int totalCount = 0;
         int onlineCount = 0;
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 eed5164..1eca90f 100644
--- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -67,6 +67,18 @@
      */
     public void getOSD() throws ExecutionException, InterruptedException {
         log.info("寮�濮嬭幏鍙朞SD");
+//        //娴峰悍璁惧娴嬭瘯
+//        //鍏ㄦ櫙
+//        OSDResult osd1 = HKApi.getOsdByIP("51031140001320359101","51.95.99.112", HKUserName, HKPassword);
+//        log.info("娴峰悍鍏ㄦ櫙:{}",osd1);
+//        //缁嗚妭
+//        OSDResult osd2 = HKApi.getOsdByIP("51031140001321359101","51.95.99.112", HKUserName, HKPassword);
+//        log.info("娴峰悍缁嗚妭:{}",osd2);
+//        //澶у崕璁惧娴嬭瘯
+//        OSDResult osd3 = DHApi.getOsd("51030244001320120201","51.95.4.3", DHUserName, DHPassword);
+//        log.info("澶у崕鍏ㄦ櫙:{}",osd3);
+//        OSDResult osd4 = DHApi.getOsd("51030244001321120201","51.95.4.3", DHUserName, DHPassword);
+//        log.info("澶у崕缁嗚妭:{}",osd4);
         //鏌ヤ竴鏈轰竴妗onitor
         Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
         List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class);
@@ -157,9 +169,8 @@
             osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ラ�氶亾鍚嶆槸鍚︽纭�
-        //鏍¢獙瑙勫垯锛岃繖閲屾殏鏃朵笉姣旇緝鍏ㄦ櫙鍜岀粏鑺備袱瀛椼��
         if (!StringUtils.isEmpty(osdResult.getName()) && !StringUtils.isEmpty(monitor.getName())) {
-            if (monitor.getName().equals(osdResult.getName()) || monitor.getName().replace("鍏ㄦ櫙", "缁嗚妭").equals(osdResult.getName()) || monitor.getName().replace("缁嗚妭", "鍏ㄦ櫙").equals(osdResult.getName())) {
+            if (monitor.getName().equals(osdResult.getName())) {
                 osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct);
                 osdCheckResult.setOsdName(osdResult.getName());
             } else {
diff --git a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
index fa9788b..083a301 100644
--- a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
+++ b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
@@ -90,7 +90,7 @@
     public OSDResult call() throws Exception {
         if (DeviceType.HK.getType().equals(monitor.getDeviceType())) {
             //娴峰悍
-            OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
+            OSDResult osd = HKApi.getOsdByIP(monitor.getSerialNumber(),monitor.getIp(), HKUserName, HKPassword);
             OSDResult osdResult = checkSuccess(monitor, osd);
             if (osdResult!=null) {
                 return osd;
@@ -99,7 +99,7 @@
             }
         } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) {
             //澶у崕
-            OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
+            OSDResult osd = DHApi.getOsd(monitor.getSerialNumber(),monitor.getIp(), DHUserName, DHPassword);
             OSDResult osdResult = checkSuccess(monitor, osd);
             if (osdResult!=null) {
                 return osd;
@@ -123,13 +123,13 @@
 
     private OSDResult tryAllApi(TMonitor monitor) {
         //灏濊瘯娴峰悍鐨刟pi
-        OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
+        OSDResult hkosd = HKApi.getOsdByIP(monitor.getSerialNumber(),monitor.getIp(), HKUserName, HKPassword);
         if (hkosd != null) {
             hkosd.setSerialNumber(monitor.getSerialNumber());
             return hkosd;
         }
         //灏濊瘯澶у崕鐨刟pi
-        OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
+        OSDResult dhosd = DHApi.getOsd(monitor.getSerialNumber(),monitor.getIp(), DHUserName, DHPassword);
         if (dhosd != null) {
             dhosd.setSerialNumber(monitor.getSerialNumber());
             return dhosd;

--
Gitblit v1.8.0