fuliqi
2024-08-29 4163c93761115c7524ef74a557a1f5e01eafb429
ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -60,7 +60,7 @@
            24,
            5000,
            TimeUnit.SECONDS,
            new ArrayBlockingQueue<>(10),
            new ArrayBlockingQueue<>(1000),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
@@ -71,6 +71,7 @@
     * 同步品牌到mysql
     */
    public void getOSD() {
        log.info("开始获取OSD");
        //批量修改海康品牌集合
        List<String> hkList = new ArrayList<>();
        //批量修改大华品牌集合
@@ -85,16 +86,24 @@
        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)) return;
                    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)) return;
                    if (checkSuccess(osdResultList, monitor, osd)) {
                        log.info("大华调用成功"+osd);
                        return;
                    }
                } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) {
                    //TODO:宇视api
                }
@@ -108,6 +117,18 @@
            });
        }
        executorService.shutdown();
        try {
            // 等待所有任务完成,最多等待10秒(可以根据需要调整)
            if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
                // 如果超时,尝试停止当前正在执行的任务
                executorService.shutdownNow();
            }
        } catch (InterruptedException e) {
            // 当前线程在等待过程中被中断
            executorService.shutdownNow();
            // 处理中断,例如重新抛出异常或记录日志
            Thread.currentThread().interrupt(); // 保持中断状态
        }
        //结束api执行,开始校验
        List<OsdCheckResult> checkResults = new ArrayList<>();
        Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
@@ -118,8 +139,10 @@
            checkCorrect(osdResult, monitor, osdCheckResult);
            checkResults.add(osdCheckResult);
        }
        log.info("结果数据大小:{}",checkResults.size());
        //结果存入mongo
        if(CollectionUtils.isEmpty(checkResults)){
        if(!CollectionUtils.isEmpty(checkResults)){
            log.info("存入mongo");
            //如果今天存在之前的数据先删除
            Query pyQuery = new Query(Criteria
                    .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
@@ -131,9 +154,11 @@
        }
        //修改数据库品牌
        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:宇视