From 3b0516a2959e25576e4f3fda697a3b025d06c8c9 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期二, 24 六月 2025 14:09:07 +0800
Subject: [PATCH] 每日录像可用指标添加日志,修改大屏为查看当前月平均

---
 ycl-server/src/main/java/com/ycl/task/OsdTask.java |  265 +++++++++++++++++++++++++---------------------------
 1 files changed, 126 insertions(+), 139 deletions(-)

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 4b0ce3c..6db0349 100644
--- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -1,21 +1,29 @@
 package com.ycl.task;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.mongodb.client.result.DeleteResult;
+import com.ycl.api.DH.lib.NetSDKLib;
+import com.ycl.api.DH.lib.structure.NET_CFG_GBMODE_INFO;
+import com.ycl.api.DH.lib.structure.NET_GBMODE_CUSTOMTITLE_INFO;
+import com.ycl.api.DH.lib.structure.NET_TITLE_OSD_INFO;
 import com.ycl.api.DH.module.LoginModule;
 import com.ycl.api.DH.utils.DHApi;
 import com.ycl.api.HK.HKApi;
+import com.ycl.api.YS.YSApi;
 import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.result.BaseResult;
 import com.ycl.platform.domain.result.OSDResult;
 import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
 import com.ycl.platform.domain.result.UY.OsdCheckResult;
+import com.ycl.platform.domain.vo.OnlineThreadVO;
 import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.service.UYErrorTypeCheckService;
+import com.ycl.platform.service.YwPointService;
+import com.ycl.thread.OSDCheckThread;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.StringUtils;
 import constant.ApiConstants;
+import constant.CheckConstants;
 import enumeration.DeviceType;
 import enumeration.general.AreaDeptEnum;
 import lombok.extern.slf4j.Slf4j;
@@ -27,20 +35,30 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+
+import static com.ycl.api.DH.lib.enumeration.NET_EM_CFG_OPERATE_TYPE.NET_EM_CFG_GBMODE;
 
 @Slf4j
 @Component("OsdTask")
 public class OsdTask {
+    @Autowired
+    private MongoTemplate mongoTemplate;
+    @Autowired
+    private TMonitorMapper monitorMapper;
+    @Autowired
+    private UYErrorTypeCheckService uyErrorTypeCheckService;
+    @Autowired
+    private YwPointService pointService;
     @Value("${HK.userName}")
     public String HKUserName;
     @Value("${HK.password}")
@@ -49,125 +67,108 @@
     public String DHUserName;
     @Value("${DH.password}")
     public String DHPassword;
-    @Autowired
-    private MongoTemplate mongoTemplate;
-    @Autowired
-    private TMonitorMapper monitorMapper;
-    @Autowired
-    private UYErrorTypeCheckService uyErrorTypeCheckService;
-
-    private static final ExecutorService executorService = new ThreadPoolExecutor(8,
-            24,
-            5000,
-            TimeUnit.SECONDS,
-            new ArrayBlockingQueue<>(1000),
-            new ThreadPoolExecutor.CallerRunsPolicy()
-    );
+    @Value("${YS.userName}")
+    public String YSUserName;
+    @Value("${YS.password}")
+    public String YSPassword;
 
     /**
      * 閫氳繃鏌ongoDB姣忔棩涓�鏈轰竴妗f暟鎹幏鍙栬澶噄p
+     * 绛涢�夎棰戣澶�
      * 閫氳繃璁惧ip銆佸搧鐗岃皟鐢ㄤ笉鍚宎pi鑾峰彇osd淇℃伅
      * 姣斿mongoDB涓�鏈轰竴妗d俊鎭紝鏁寸悊鎴恟esult瀛樺叆mongo
      * 鍚屾鍝佺墝鍒癿ysql
      */
-    public void getOSD() {
+    public void getOSD() throws ExecutionException, InterruptedException {
         log.info("寮�濮嬭幏鍙朞SD");
-        //鎵归噺淇敼娴峰悍鍝佺墝闆嗗悎
-        List<String> hkList = new ArrayList<>();
-        //鎵归噺淇敼澶у崕鍝佺墝闆嗗悎
-        List<String> dhList = new ArrayList<>();
-        //鎵归噺淇敼瀹囪鍝佺墝闆嗗悎
-        List<String> ysList = new ArrayList<>();
-        List<OSDResult> osdResultList = new ArrayList<>();
+//        //娴峰悍璁惧娴嬭瘯
+//        //鍏ㄦ櫙
+//        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);
         //闇�瑕佽�冩牳鐨勬暟鎹�
         List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList());
-
-        List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers);
-        monitors = monitors.stream().filter(monitor -> monitor.getId()<7000).collect(Collectors.toList());
-        log.info("澶勭悊鏁版嵁澶у皬{}",monitors.size());
-        for (TMonitor monitor : monitors) {
-            executorService.submit(() -> {
-                if (DeviceType.HK.getType().equals(monitor.getDeviceType())) {
-                    //娴峰悍鍝佺墝
-                    OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
-                    if (checkSuccess(osdResultList, monitor, osd)){
-                        log.info("娴峰悍璋冪敤鎴愬姛"+osd);
-                        return;
-                    }
-                } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) {
-                    //澶у崕鍝佺墝
-                    OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
-                    if (checkSuccess(osdResultList, monitor, osd)) {
-                        log.info("澶у崕璋冪敤鎴愬姛"+osd);
-                        return;
-                    }
-                } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) {
-                    //TODO锛氬畤瑙哸pi
-                }
-                //鏈煡鍝佺墝鎴栬�卆pi璋冪敤澶辫触锛屾尐涓墽琛屾墍鏈塧pi
-                OSDResult osd = tryAllApi(monitor, hkList, dhList, ysList);
-                if (osd != null) {
-                    synchronized (osdResultList) {
-                        osdResultList.add(osd);
-                    }
-                }
-            });
-        }
-        executorService.shutdown();
-        try {
-            // 绛夊緟鎵�鏈変换鍔″畬鎴愶紝鏈�澶氱瓑寰�10绉掞紙鍙互鏍规嵁闇�瑕佽皟鏁达級
-            if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
-                // 濡傛灉瓒呮椂锛屽皾璇曞仠姝㈠綋鍓嶆鍦ㄦ墽琛岀殑浠诲姟
-                executorService.shutdownNow();
+        if (!CollectionUtils.isEmpty(serialNumbers)) {
+            ExecutorService executorService = new ThreadPoolExecutor(16,
+                    128,
+                    5000,
+                    TimeUnit.SECONDS,
+                    new ArrayBlockingQueue<>(1000),
+                    new ThreadPoolExecutor.CallerRunsPolicy()
+            );
+            List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers);
+            //杩囨护鎺夋棤鏁坕p骞剁瓫閫夊嚭瑙嗛璁惧
+            monitors = monitors.stream()
+                    .filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) &&
+                            !"127.0.0.1".equals(monitor.getIp()))
+                    .collect(Collectors.toList());
+            List<Future<OSDResult>> futureList = new ArrayList<>(48);
+            List<OSDResult> osdResultList = new ArrayList<>();
+            for (TMonitor monitor : monitors) {
+                OSDCheckThread thread = new OSDCheckThread(monitor);
+                Future<OSDResult> future = executorService.submit(thread);
+                futureList.add(future);
             }
-        } catch (InterruptedException e) {
-            // 褰撳墠绾跨▼鍦ㄧ瓑寰呰繃绋嬩腑琚腑鏂�
-            executorService.shutdownNow();
-            // 澶勭悊涓柇锛屼緥濡傞噸鏂版姏鍑哄紓甯告垨璁板綍鏃ュ織
-            Thread.currentThread().interrupt(); // 淇濇寔涓柇鐘舵��
+            for (Future<OSDResult> future : futureList) {
+                osdResultList.add(future.get());
+            }
+            executorService.shutdown();
+
+            //缁撴潫api鎵ц锛屽紑濮嬫牎楠�
+            List<OsdCheckResult> checkResults = new ArrayList<>();
+            Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
+            for (OSDResult osdResult : osdResultList) {
+                if (osdResult != null) {
+                    TMonitor monitor = monitorMap.get(osdResult.getSerialNumber());
+                    //灏佽OsdCheckResult
+                    OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor);
+                    checkCorrect(osdResult, monitor, osdCheckResult);
+                    checkResults.add(osdCheckResult);
+                }
+            }
+            log.info("缁撴灉鏁版嵁澶у皬:{}", checkResults.size());
+            //缁撴灉瀛樺叆mongo
+            if (!CollectionUtils.isEmpty(checkResults)) {
+                log.info("瀛樺叆mongo");
+                //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+                Query pyQuery = new Query(Criteria
+                        .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
+                List<OsdCheckResult> osdCheckResults = mongoTemplate.find(pyQuery, OsdCheckResult.class);
+                pointService.setDeviceTagByGB(checkResults, CheckConstants.Rule_Category_Video);
+                //娣诲姞鏃ф暟鎹繘鍘�
+                List<String> resultNos = checkResults.stream().map(BaseResult::getNo).collect(Collectors.toList());
+                if (!CollectionUtils.isEmpty(osdCheckResults)) {
+                    for (OsdCheckResult mongoResult : osdCheckResults) {
+                        //濡傛灉鏂扮殑缁撴灉涓病鏈夋棫鏁版嵁閭d箞鍔犺繘鍘�
+                        if (!resultNos.contains(mongoResult.getNo())) {
+                            checkResults.add(mongoResult);
+                        }
+                    }
+                }
+                DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class);
+                //瀛樻斁鍦╩ongo涓�
+                mongoTemplate.insertAll(checkResults);
+                // 宸ュ崟鐢熸垚
+                uyErrorTypeCheckService.osdCheck(checkResults);
+            }
         }
-        //缁撴潫api鎵ц锛屽紑濮嬫牎楠�
-        List<OsdCheckResult> checkResults = new ArrayList<>();
-        Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
-        for (OSDResult osdResult : osdResultList) {
-            TMonitor monitor = monitorMap.get(osdResult.getSerialNumber());
-            //灏佽OsdCheckResult
-            OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor);
-            checkCorrect(osdResult, monitor, osdCheckResult);
-            checkResults.add(osdCheckResult);
-        }
-        log.info("缁撴灉鏁版嵁澶у皬:{}",checkResults.size());
-        //缁撴灉瀛樺叆mongo
-        if(!CollectionUtils.isEmpty(checkResults)){
-            log.info("瀛樺叆mongo");
-            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
-            Query pyQuery = new Query(Criteria
-                    .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
-            DeleteResult result = mongoTemplate.remove(pyQuery, OsdCheckResult.class);
-            //瀛樻斁鍦╩ongo涓�
-            mongoTemplate.insertAll(checkResults);
-            // 宸ュ崟鐢熸垚
-            uyErrorTypeCheckService.osdCheck(checkResults);
-        }
-        //淇敼鏁版嵁搴撳搧鐗�
-        if(!CollectionUtils.isEmpty(hkList)){
-            log.info("淇敼鍝佺墝");
-            monitorMapper.batchUpdateDeviceType(hkList,DeviceType.HK.getType());
-        }
-        if(!CollectionUtils.isEmpty(dhList)){
-            log.info("淇敼鍝佺墝");
-            monitorMapper.batchUpdateDeviceType(dhList,DeviceType.DH.getType());
-        }
-        //TODO:瀹囪
         log.info("缁撴潫鑾峰彇OSD");
     }
 
     private OsdCheckResult getOsdCheckResult(OSDResult osdResult, TMonitor monitor) {
         OsdCheckResult osdCheckResult = new OsdCheckResult();
         osdCheckResult.setDeviceNo(osdResult.getSerialNumber());
+        osdCheckResult.setNo(osdResult.getSerialNumber());
         osdCheckResult.setIp(monitor.getIp());
         osdCheckResult.setDeviceType(monitor.getCameraFunType());
         osdCheckResult.setCheckTime(osdResult.getCheckTime());
@@ -177,6 +178,7 @@
         osdCheckResult.setOsdPart(osdResult.getOSD3());
         osdCheckResult.setOsdLB(osdResult.getOSD4());
         osdCheckResult.setOsdName(osdResult.getName());
+        osdCheckResult.setDeviceBrand(osdResult.getDeviceBrand());
         return osdCheckResult;
     }
 
@@ -185,20 +187,25 @@
         if (osdResult.getCheckTime() != null && osdResult.getOsdTime() != null) {
             long checkTime = osdResult.getCheckTime().getTime();
             long osdTime = osdResult.getOsdTime().getTime();
-            long timeDiff = (checkTime - osdTime) / 1000;
-            if (timeDiff <=60) {
+            long timeDiff = Math.abs((checkTime - osdTime) / 1000);
+            if (timeDiff <= 60) {
                 osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct);
             } else {
                 osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Error);
             }
+        } else {
+            osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ラ�氶亾鍚嶆槸鍚︽纭�
         if (!StringUtils.isEmpty(osdResult.getName()) && !StringUtils.isEmpty(monitor.getName())) {
             if (monitor.getName().equals(osdResult.getName())) {
                 osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct);
+                osdCheckResult.setOsdName(osdResult.getName());
             } else {
                 osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error);
             }
+        } else {
+            osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ョ渷鏄惁姝g‘
         if (!StringUtils.isEmpty(osdResult.getOSD1())) {
@@ -207,6 +214,8 @@
             } else {
                 osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Error);
             }
+        } else {
+            osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ュ競鏄惁姝g‘
         if (!StringUtils.isEmpty(osdResult.getOSD2())) {
@@ -215,50 +224,28 @@
             } else {
                 osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Error);
             }
+        } else {
+            osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Unknown);
         }
         //妫�鏌ュ尯鍘挎槸鍚︽纭�
         if (!StringUtils.isEmpty(osdResult.getOSD3())) {
             AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(monitor.getSerialNumber().substring(0, 6));
-            if (areaDeptEnum != null && osdResult.getOSD3().equals(areaDeptEnum.getName())) {
+            if (areaDeptEnum != null && osdResult.getOSD3().equals(areaDeptEnum.getOsdName())) {
                 osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Correct);
             } else {
                 osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Error);
             }
-        }
-    }
-
-    private boolean checkSuccess(List<OSDResult> osdResultList, TMonitor monitor, OSDResult osd) {
-        if (osd != null) {
-            osd.setSerialNumber(monitor.getSerialNumber());
-            synchronized (osdResultList) {
-                osdResultList.add(osd);
-            }
-            return true;
         } else {
-            return false;
+            osdCheckResult.setOsdPartCorrect(ApiConstants.OSD_Unknown);
         }
     }
 
-    private OSDResult tryAllApi(TMonitor monitor, List<String> hkList, List<String> dhList, List<String> ysList) {
-        //灏濊瘯娴峰悍鐨刟pi
-        OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
-        if (hkosd != null) {
-            hkosd.setSerialNumber(monitor.getSerialNumber());
-            synchronized (hkList) {
-                hkList.add(monitor.getSerialNumber());
-            }
-            return hkosd;
-        }
-        //灏濊瘯澶у崕鐨刟pi
-        OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
-        if (dhosd != null) {
-            dhosd.setSerialNumber(monitor.getSerialNumber());
-            synchronized (dhList) {
-                dhList.add(monitor.getSerialNumber());
-            }
-            return dhosd;
-        }
-        //TODO锛氬畤瑙哸pi
-        return null;
+
+    public void test() throws ExecutionException, InterruptedException {
+        log.info("娴嬭瘯鑾峰彇OSD");
+        OSDResult osd3 = DHApi.getOsdOld("","51030340001320207201", "51.95.34.20", DHUserName, DHPassword);
+        log.info("osd3:{}", osd3);
+        OSDResult osd4 = DHApi.getOsdOld("","51030342001320173201", "51.95.33.174", DHUserName, DHPassword);
+        log.info("osd4:{}", osd4);
     }
 }

--
Gitblit v1.8.0