fuliqi
2024-09-10 7d5ea3631d163343b652bd6bd40b94b34c4194eb
ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -4,6 +4,7 @@
import com.mongodb.client.result.DeleteResult;
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.OSDResult;
import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
@@ -63,15 +64,9 @@
     * 比对mongoDB一机一档信息,整理成result存入mongo
     * 同步品牌到mysql
     */
    //TODO:大华动态库linux换位置
    public void getOSD() {
        log.info("开始获取OSD");
//        YSApi.getOsd("51.95.66.42",YSUserName,YSPassword);
        //批量修改海康品牌集合
        List<String> hkList = new ArrayList<>();
        //批量修改大华品牌集合
        List<String> dhList = new ArrayList<>();
        //批量修改宇视品牌集合
        List<String> ysList = new ArrayList<>();
        List<OSDResult> osdResultList = new ArrayList<>();
        //查一机一档monitor
        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
@@ -79,8 +74,8 @@
        //需要考核的数据
        List<String> serialNumbers = oneMachineFileResults.stream().map(result -> result.getSerialNumber().getValue()).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(serialNumbers)) {
            ExecutorService executorService = new ThreadPoolExecutor(8,
                    24,
            ExecutorService executorService = new ThreadPoolExecutor(16,
                    128,
                    5000,
                    TimeUnit.SECONDS,
                    new ArrayBlockingQueue<>(1000),
@@ -88,28 +83,33 @@
            );
            List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers);
            monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList());
            log.info("处理数据大小{}", monitors.size());
//            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:宇视api
                        //宇视
                        OSDResult osd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
                        if (checkSuccess(osdResultList, monitor, osd)) {
                            log.info("宇视调用成功" + osd);
                            return;
                        }
                    }
                    //未知品牌或者api调用失败,挨个执行所有api
                    OSDResult osd = tryAllApi(monitor, hkList, dhList, ysList);
                    OSDResult osd = tryAllApi(monitor);
                    if (osd != null) {
                        synchronized (osdResultList) {
                            osdResultList.add(osd);
@@ -137,6 +137,7 @@
                //封装OsdCheckResult
                OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor);
                checkCorrect(osdResult, monitor, osdCheckResult);
                log.info("校验结果:{}",osdCheckResult);
                checkResults.add(osdCheckResult);
            }
            log.info("结果数据大小:{}", checkResults.size());
@@ -152,16 +153,6 @@
                // 工单生成
                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");
    }
@@ -178,6 +169,7 @@
        osdCheckResult.setOsdPart(osdResult.getOSD3());
        osdCheckResult.setOsdLB(osdResult.getOSD4());
        osdCheckResult.setOsdName(osdResult.getName());
        osdCheckResult.setDeviceBrand(osdResult.getDeviceBrand());
        return osdCheckResult;
    }
@@ -187,16 +179,18 @@
            long checkTime = osdResult.getCheckTime().getTime();
            long osdTime = osdResult.getOsdTime().getTime();
            long timeDiff = (checkTime - osdTime) / 1000;
            if (timeDiff <=60) {
            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())) {
            if (monitor.getName().equals(osdResult.getName()) || monitor.getName().replace("全景", "细节").equals(osdResult.getName()) || monitor.getName().replace("细节", "全景").equals(osdResult.getName())) {
                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Correct);
                osdCheckResult.setOsdName(osdResult.getName());
            } else {
                osdCheckResult.setOsdNameCorrect(ApiConstants.OSD_Error);
            }
@@ -240,28 +234,28 @@
        }
    }
    private OSDResult tryAllApi(TMonitor monitor, List<String> hkList, List<String> dhList, List<String> ysList) {
    private OSDResult tryAllApi(TMonitor monitor) {
        //尝试海康的api
        OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
        if (hkosd != null) {
            hkosd.setSerialNumber(monitor.getSerialNumber());
            log.info("海康调用成功"+hkosd);
            synchronized (hkList) {
                hkList.add(monitor.getSerialNumber());
            }
            log.info("海康调用成功" + hkosd);
            return hkosd;
        }
        //尝试大华的api
        OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
        if (dhosd != null) {
            dhosd.setSerialNumber(monitor.getSerialNumber());
            log.info("大华调用成功"+dhosd);
            synchronized (dhList) {
                dhList.add(monitor.getSerialNumber());
            }
            log.info("大华调用成功" + dhosd);
            return dhosd;
        }
        //TODO:宇视api
        //宇视api
        OSDResult ysosd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
        if (ysosd != null) {
            ysosd.setSerialNumber(monitor.getSerialNumber());
            log.info("宇视调用成功" + ysosd);
            return ysosd;
        }
        return null;
    }
}