From f0aa0f9ea4bc9a924a4078fea175c41bc124151d Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 29 八月 2024 16:25:52 +0800
Subject: [PATCH] OSD定时任务

---
 ycl-server/src/main/java/com/ycl/task/OsdTask.java |  229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 225 insertions(+), 4 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 0e75f94..511633b 100644
--- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -1,18 +1,239 @@
 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.module.LoginModule;
+import com.ycl.api.DH.utils.DHApi;
 import com.ycl.api.HK.HKApi;
+import com.ycl.platform.domain.entity.TMonitor;
+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.mapper.TMonitorMapper;
+import com.ycl.platform.service.UYErrorTypeCheckService;
+import com.ycl.utils.DateUtils;
+import com.ycl.utils.StringUtils;
+import constant.ApiConstants;
+import enumeration.DeviceType;
+import enumeration.general.AreaDeptEnum;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+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.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Component("OsdTask")
 public class OsdTask {
+    @Value("${HK.userName}")
+    public String HKUserName;
+    @Value("${HK.password}")
+    public String HKPassword;
+    @Value("${DH.userName}")
+    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<>(10),
+            new ThreadPoolExecutor.CallerRunsPolicy()
+    );
+
+    /**
+     * 閫氳繃鏌ongoDB姣忔棩涓�鏈轰竴妗f暟鎹幏鍙栬澶噄p
+     * 閫氳繃璁惧ip銆佸搧鐗岃皟鐢ㄤ笉鍚宎pi鑾峰彇osd淇℃伅
+     * 姣斿mongoDB涓�鏈轰竴妗d俊鎭紝鏁寸悊鎴恟esult瀛樺叆mongo
+     * 鍚屾鍝佺墝鍒癿ysql
+     */
     public void getOSD() {
-        HKApi.getOsdByIP("51.95.68.80");
-        long loginId = LoginModule.login("51.95.67.189", 80, "admin", "zg@2024dx");
-        String osdTime = LoginModule.getOsdTime();
-        LoginModule.logout();
+        //鎵归噺淇敼娴峰悍鍝佺墝闆嗗悎
+        List<String> hkList = new ArrayList<>();
+        //鎵归噺淇敼澶у崕鍝佺墝闆嗗悎
+        List<String> dhList = new ArrayList<>();
+        //鎵归噺淇敼瀹囪鍝佺墝闆嗗悎
+        List<String> ysList = new ArrayList<>();
+        List<OSDResult> osdResultList = new ArrayList<>();
+        //鏌ヤ竴鏈轰竴妗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);
+        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)) return;
+                } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) {
+                    //澶у崕鍝佺墝
+                    OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
+                    if (checkSuccess(osdResultList, monitor, 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();
+        //缁撴潫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);
+        }
+        //缁撴灉瀛樺叆mongo
+        if(CollectionUtils.isEmpty(checkResults)){
+            //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎
+            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)){
+            monitorMapper.batchUpdateDeviceType(hkList,DeviceType.HK.getType());
+        }
+        if(!CollectionUtils.isEmpty(dhList)){
+            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.setIp(monitor.getIp());
+        osdCheckResult.setDeviceType(monitor.getCameraFunType());
+        osdCheckResult.setCheckTime(osdResult.getCheckTime());
+        osdCheckResult.setSetTime(osdResult.getOsdTime());
+        osdCheckResult.setOsdProvince(osdResult.getOSD1());
+        osdCheckResult.setOsdCity(osdResult.getOSD2());
+        osdCheckResult.setOsdPart(osdResult.getOSD3());
+        osdCheckResult.setOsdLB(osdResult.getOSD4());
+        osdCheckResult.setOsdName(osdResult.getName());
+        return osdCheckResult;
+    }
+
+    private void checkCorrect(OSDResult osdResult, TMonitor monitor, OsdCheckResult osdCheckResult) {
+        //妫�鏌ユ椂闂存槸鍚︽纭�
+        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) {
+                osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Correct);
+            } else {
+                osdCheckResult.setOsdTimeCorrect(ApiConstants.OSD_Error);
+            }
+        }
+        //妫�鏌ラ�氶亾鍚嶆槸鍚︽纭�
+        if (!StringUtils.isEmpty(osdResult.getName()) && !StringUtils.isEmpty(monitor.getName())) {
+            if (monitor.getName().equals(osdResult.getName())) {
+                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct);
+            } else {
+                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error);
+            }
+        }
+        //妫�鏌ョ渷鏄惁姝g‘
+        if (!StringUtils.isEmpty(osdResult.getOSD1())) {
+            if ("鍥涘窛".equals(osdResult.getOSD1())) {
+                osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Correct);
+            } else {
+                osdCheckResult.setOsdProvinceCorrect(ApiConstants.OSD_Error);
+            }
+        }
+        //妫�鏌ュ競鏄惁姝g‘
+        if (!StringUtils.isEmpty(osdResult.getOSD2())) {
+            if ("鑷础".equals(osdResult.getOSD2())) {
+                osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Correct);
+            } else {
+                osdCheckResult.setOsdCityCorrect(ApiConstants.OSD_Error);
+            }
+        }
+        //妫�鏌ュ尯鍘挎槸鍚︽纭�
+        if (!StringUtils.isEmpty(osdResult.getOSD3())) {
+            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(monitor.getSerialNumber().substring(0, 6));
+            if (areaDeptEnum != null && osdResult.getOSD3().equals(areaDeptEnum.getName())) {
+                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;
+        }
+    }
+
+    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;
     }
 }

--
Gitblit v1.8.0