diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java index f7320b714..ed08f0506 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DeviceRunEvaluateServiceImpl.java @@ -3,7 +3,6 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.njcn.device.pq.mapper.RStatIntegrityDMapper; @@ -91,64 +90,73 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService { DeviceRunEvaluateVO evaluateVO; for (GeneralDeviceDTO deptDeviceInfo : deptDeviceInfos) { - evaluateVO = new DeviceRunEvaluateVO(); - evaluateVO.setName(deptDeviceInfo.getName()); - - //监测完整率 - List integrityDS = onIntegrityList.stream().filter(x -> deptDeviceInfo.getLineIndexes().contains(x.getLineIndex())).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(integrityDS)) { - double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum(); - double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum(); - evaluateVO.setIntegrityRate(NumberUtil.round(realTime * 100 / dueTime, 2)); - } - //终端在线率 - List onlineRateDS = onlineRateList.stream().filter(x -> deptDeviceInfo.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(onlineRateDS)) { - double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum(); - double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum(); - evaluateVO.setOnLineRate(NumberUtil.round(onlineTime * 100.0 / (onlineTime + offlineTime), 2)); - } - //终端在线率 - List limitRateDPOS = limitRateList.stream().filter(x -> deptDeviceInfo.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(limitRateDPOS)) { - double overTime = limitRateDPOS.stream().mapToDouble(x -> (x.getUaberranceOvertime() + - x.getUharm2Overtime() + - x.getUharm3Overtime() + - x.getUharm4Overtime() + - x.getUharm5Overtime() + - x.getUharm6Overtime() + - x.getUharm7Overtime() + - x.getUharm8Overtime() + - x.getUharm9Overtime() + - x.getUharm10Overtime() + - x.getUharm11Overtime() + - x.getUharm12Overtime() + - x.getUharm13Overtime() + - x.getUharm14Overtime() + - x.getUharm15Overtime() + - x.getUharm16Overtime() + - x.getUharm17Overtime() + - x.getUharm18Overtime() + - x.getUharm19Overtime() + - x.getUharm20Overtime() + - x.getUharm21Overtime() + - x.getUharm22Overtime() + - x.getUharm23Overtime() + - x.getUharm24Overtime() + - x.getUharm25Overtime())).sum(); - double allTime = limitRateDPOS.stream().mapToDouble(x -> x.getAllTime() * 25.0).sum(); - if (ObjUtil.equals(allTime, 0)) { - evaluateVO.setPassRate(new BigDecimal(0)); + List lineIndexes = deptDeviceInfo.getLineIndexes(); + if (CollUtil.isNotEmpty(lineIndexes)) { + evaluateVO = new DeviceRunEvaluateVO(); + evaluateVO.setName(deptDeviceInfo.getName()); + //监测完整率 + List integrityDS = onIntegrityList.stream().filter(x -> lineIndexes.contains(x.getLineIndex())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(integrityDS)) { + double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum(); + double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum(); + evaluateVO.setIntegrityRate(NumberUtil.round(realTime * 100 / dueTime, 2)); } else { - evaluateVO.setPassRate(NumberUtil.round(overTime * 100.0 / allTime, 2)); + evaluateVO.setIntegrityRate(new BigDecimal(0)); } + //终端在线率 + List onlineRateDS = onlineRateList.stream().filter(x -> deptDeviceInfo.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(onlineRateDS)) { + double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum(); + double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum(); + evaluateVO.setOnLineRate(NumberUtil.round(onlineTime * 100.0 / (onlineTime + offlineTime), 2)); + } else { + evaluateVO.setOnLineRate(new BigDecimal(0)); + } + //终端在线率 + List limitRateDPOS = limitRateList.stream().filter(x -> lineIndexes.contains(x.getLineId())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(limitRateDPOS)) { + double overTime = limitRateDPOS.stream().mapToDouble(x -> (x.getUaberranceOvertime() + + x.getUharm2Overtime() + + x.getUharm3Overtime() + + x.getUharm4Overtime() + + x.getUharm5Overtime() + + x.getUharm6Overtime() + + x.getUharm7Overtime() + + x.getUharm8Overtime() + + x.getUharm9Overtime() + + x.getUharm10Overtime() + + x.getUharm11Overtime() + + x.getUharm12Overtime() + + x.getUharm13Overtime() + + x.getUharm14Overtime() + + x.getUharm15Overtime() + + x.getUharm16Overtime() + + x.getUharm17Overtime() + + x.getUharm18Overtime() + + x.getUharm19Overtime() + + x.getUharm20Overtime() + + x.getUharm21Overtime() + + x.getUharm22Overtime() + + x.getUharm23Overtime() + + x.getUharm24Overtime() + + x.getUharm25Overtime())).sum(); + double allTime = limitRateDPOS.stream().mapToDouble(x -> x.getAllTime() * 25.0).sum(); + if (allTime == 0) { + evaluateVO.setPassRate(new BigDecimal(0)); + } else { + evaluateVO.setPassRate(NumberUtil.round(overTime * 100.0 / allTime, 2)); + } + } else { + evaluateVO.setPassRate(new BigDecimal(0)); + } + evaluateVO.setEvaluate( + ONINTEGRITY.multiply(evaluateVO.getIntegrityRate()) + .add(ONLINERATE.multiply(evaluateVO.getOnLineRate()) + .add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros() + ); + info.add(evaluateVO); } - evaluateVO.setEvaluate( - ONINTEGRITY.multiply(evaluateVO.getIntegrityRate()) - .add(ONLINERATE.multiply(evaluateVO.getOnLineRate()) - .add(LIMITRATE.multiply(evaluateVO.getPassRate()))) - ); - info.add(evaluateVO); + } return info;