diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java index 8fcb1d262..577b9b43f 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java @@ -4,6 +4,7 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -34,6 +35,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -69,9 +71,9 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl getLineDataQuality(LineDataQualityParam lineDataQualityParam) { List lineIds = lineDataQualityParam.getLineIds(); - List lineList = lineMapper.selectList(new LambdaQueryWrapper().in(Line::getId,lineIds)); + List lineList = lineMapper.selectList(new LambdaQueryWrapper().in(Line::getId, lineIds)); - lineList = lineList.stream().peek(item->{ + lineList = lineList.stream().peek(item -> { String devId = item.getPids().split(StrUtil.COMMA)[4]; item.setPid(devId); }).collect(Collectors.toList()); @@ -81,35 +83,35 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl onlineQuery = new QueryWrapper<>(); onlineQuery.select("dev_index,avg(online_min/offline_min+online_min) as onlineRate") .lambda() - .in(RStatOnlinerateD::getDevIndex,devIds) - .between(RStatOnlinerateD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN),DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN)) + .in(RStatOnlinerateD::getDevIndex, devIds) + .between(RStatOnlinerateD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN), DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN)) .groupBy(RStatOnlinerateD::getDevIndex); List rStatOnlinerateDList = onlineRateMapper.selectList(onlineQuery); - Map onlineMap = rStatOnlinerateDList.stream().collect(Collectors.toMap(RStatOnlinerateD::getDevIndex, Function.identity())); + Map onlineMap = rStatOnlinerateDList.stream().collect(Collectors.toMap(RStatOnlinerateD::getDevIndex, Function.identity())); QueryWrapper integrityQuery = new QueryWrapper<>(); integrityQuery.select("line_index,avg(real_time/due_time) as integrityData") .lambda() - .in(RStatIntegrityD::getLineIndex,lineIds) - .between(RStatIntegrityD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN),DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN)) + .in(RStatIntegrityD::getLineIndex, lineIds) + .between(RStatIntegrityD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN), DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN)) .groupBy(RStatIntegrityD::getLineIndex); List rStatIntegrityDList = rStatIntegrityDMapper.selectList(integrityQuery); - Map integrityMap = rStatIntegrityDList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex,Function.identity())); + Map integrityMap = rStatIntegrityDList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex, Function.identity())); List result = new ArrayList<>(); - for(Line item : lineList){ + for (Line item : lineList) { LineDataQualityDTO lineDataQualityDTO = new LineDataQualityDTO(); lineDataQualityDTO.setLineId(item.getId()); lineDataQualityDTO.setLineName(item.getName()); - if(onlineMap.containsKey(item.getPid())){ + if (onlineMap.containsKey(item.getPid())) { lineDataQualityDTO.setOnlineRate(Double.valueOf(onlineMap.get(item.getPid()).getOnlineRate())); - }else { + } else { lineDataQualityDTO.setOnlineRate(0.00); } - if(integrityMap.containsKey(item.getId())){ + if (integrityMap.containsKey(item.getId())) { lineDataQualityDTO.setIntegrityRate(Double.valueOf(integrityMap.get(item.getId()).getIntegrityData())); - }else { + } else { lineDataQualityDTO.setIntegrityRate(0.00); } result.add(lineDataQualityDTO); @@ -132,7 +134,7 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds,param.getSearchBeginTime(),param.getSearchEndTime()); + List lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds, param.getSearchBeginTime(), param.getSearchEndTime()); //获取所有监测点信息信息 List LineInfoByIds = lineService.getLineDetailByIds(lineIds); - rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo)?calculateIntegrityRate(lineIntegrityRateInfo,90):lineIds.size()); - rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,lineIds).toString()); - List citDetailList=new ArrayList<>(); + rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo) ? calculateIntegrityRate(lineIntegrityRateInfo, 90, lineIds.size()) : lineIds.size()); + rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, lineIds).toString()); + List citDetailList = new ArrayList<>(); DeviceOnlineRate.CitDetail citDetail; DeviceOnlineRate.LineDetail detail; for (GeneralDeviceDTO dto : deviceInfo) { @@ -163,11 +165,11 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl citDevOnRate = lineIntegrityRateInfo.stream().filter(x -> dto.getLineIndexes().contains(x.getLineIndex())).collect(Collectors.toList()); Map onlineRateByDevMap = citDevOnRate.stream() .collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate)); - citDetail=new DeviceOnlineRate.CitDetail(); + citDetail = new DeviceOnlineRate.CitDetail(); citDetail.setCitName(dto.getName()); citDetail.setCitTotalNum(dto.getLineIndexes().size()); - citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate)?calculateIntegrityRate(lineIntegrityRateInfo,90):dto.getLineIndexes().size()); - citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,dto.getLineIndexes()).toString()); + citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate) ? calculateIntegrityRate(citDevOnRate, 90, dto.getLineIndexes().size()) : dto.getLineIndexes().size()); + citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, dto.getLineIndexes()).toString()); List detailList = new ArrayList<>(); List lineDetail = LineInfoByIds.stream().filter(x -> dto.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList()); for (LineDetailVO.Detail line : lineDetail) { @@ -194,19 +196,19 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl lineIntegrityRateInfo ,List deviceIds){ + private Double calculateIntegrityRate(List lineIntegrityRateInfo, List deviceIds) { List list = lineIntegrityRateInfo.stream().filter(x -> deviceIds.contains(x.getLineIndex())).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(list)){ + if (CollUtil.isNotEmpty(list)) { BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getDueTime).sum()); - BigDecimal offlineMin =BigDecimal.valueOf( list.stream().mapToLong(RStatIntegrityVO::getRealTime).sum()); - BigDecimal sumMin= onlineMin.add(offlineMin); - return sumMin.doubleValue(); + BigDecimal offlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getRealTime).sum()); + BigDecimal sumMin = onlineMin.add(offlineMin); + return onlineMin.multiply(BigDecimal.valueOf(100.0)).divide(sumMin, 2, RoundingMode.HALF_UP).doubleValue(); } return 0.0; } - private Integer calculateIntegrityRate(List onlineRateByDev,Integer limit){ - return (int) onlineRateByDev.stream().filter(x -> x.getIntegrityRate() < limit).count(); + private Integer calculateIntegrityRate(List onlineRateByDev, Integer limit, Integer count) { + return count - onlineRateByDev.stream().filter(x -> x.getIntegrityRate() >= limit).collect(Collectors.toList()).size(); } diff --git a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/OnLineRateServiceImpl.java b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/OnLineRateServiceImpl.java index 27d838c9b..1c99a5859 100644 --- a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/OnLineRateServiceImpl.java +++ b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/device/service/impl/OnLineRateServiceImpl.java @@ -18,6 +18,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -53,7 +54,7 @@ public class OnLineRateServiceImpl extends ServiceImpl devInfoByIds = deviceService.getDevInfoByIds(deviceIds); - rate.setBelowNum(CollUtil.isNotEmpty(onlineRateByDev) ? calculateOnLineRate(onlineRateByDev, 90) : deviceIds.size()); + rate.setBelowNum(CollUtil.isNotEmpty(onlineRateByDev) ? calculateOnLineRate(onlineRateByDev, 90, deviceIds.size()) : deviceIds.size()); rate.setTotalOnlineRate(calculateOnLineRate(onlineRateByDev, deviceIds)); List citDetailList = new ArrayList<>(); DeviceOnlineRate.CitDetail citDetail; @@ -66,7 +67,7 @@ public class OnLineRateServiceImpl extends ServiceImpl detailList = new ArrayList<>(); List details = devInfoByIds.stream().filter(x -> dto.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList()); @@ -104,13 +105,13 @@ public class OnLineRateServiceImpl extends ServiceImpl onlineRateByDev, Integer limit) { - return onlineRateByDev.stream().filter(x -> x.getOnlineRate() < limit).collect(Collectors.toList()).size(); + private Integer calculateOnLineRate(List onlineRateByDev, Integer limit, Integer count) { + return count - onlineRateByDev.stream().filter(x -> x.getOnlineRate() >= limit).collect(Collectors.toList()).size(); }