| | |
| | | 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; |
| | |
| | | * 比对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()))); |
| | |
| | | //需要考核的数据 |
| | | 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), |
| | |
| | | ); |
| | | 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); |
| | |
| | | //封装OsdCheckResult |
| | | OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); |
| | | checkCorrect(osdResult, monitor, osdCheckResult); |
| | | log.info("校验结果:{}",osdCheckResult); |
| | | checkResults.add(osdCheckResult); |
| | | } |
| | | log.info("结果数据大小:{}", checkResults.size()); |
| | |
| | | // 工单生成 |
| | | 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"); |
| | | } |
| | |
| | | osdCheckResult.setOsdPart(osdResult.getOSD3()); |
| | | osdCheckResult.setOsdLB(osdResult.getOSD4()); |
| | | osdCheckResult.setOsdName(osdResult.getName()); |
| | | osdCheckResult.setDeviceBrand(osdResult.getDeviceBrand()); |
| | | return osdCheckResult; |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | } |