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