优化终端在线率算法
This commit is contained in:
@@ -3,16 +3,18 @@ package com.njcn.algorithm.serviceimpl.line;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.njcn.algorithm.pojo.bo.CalculatedParam;
|
||||
import com.njcn.algorithm.service.line.IDataOnlineRateService;
|
||||
import com.njcn.dataProcess.api.DataIntegrityFeignClient;
|
||||
import com.njcn.dataProcess.api.DataOnlineRateFeignClient;
|
||||
import com.njcn.dataProcess.api.DataVFeignClient;
|
||||
import com.njcn.dataProcess.api.PqsCommunicateFeignClient;
|
||||
import com.njcn.dataProcess.param.LineCountEvaluateParam;
|
||||
import com.njcn.dataProcess.pojo.dto.DataIntegrityDto;
|
||||
import com.njcn.dataProcess.pojo.dto.DataOnlineRateDto;
|
||||
import com.njcn.dataProcess.pojo.dto.PqsCommunicateDto;
|
||||
import com.njcn.dataProcess.util.TimeUtils;
|
||||
@@ -47,7 +49,7 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(IDataOnlineRateServiceImpl.class);
|
||||
|
||||
@Value("${line.num}")
|
||||
private Integer NUM = 100;
|
||||
private Integer NUM = 100;
|
||||
|
||||
private final Integer online = 1;
|
||||
private final Integer offline = 0;
|
||||
@@ -61,7 +63,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
private CommTerminalGeneralClient commTerminalGeneralClient;
|
||||
@Resource
|
||||
private DeptFeignClient deptFeignClient;
|
||||
|
||||
@Resource
|
||||
private DataIntegrityFeignClient dataIntegrityFeignClient;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -73,35 +76,33 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
List<String> devIdList = calculatedParam.getIdList();
|
||||
|
||||
List<DataOnlineRateDto.Detail> list = new ArrayList<>();
|
||||
if(ObjectUtil.isNotNull(calculatedParam.getType())){
|
||||
if(calculatedParam.getType()==1){
|
||||
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
|
||||
Dept dept = deptFeignClient.getRootDept().getData();
|
||||
deptGetLineParam.setDeptId(dept.getId());
|
||||
List<DeptGetDeviceDTO> DeviceAndMonitorList = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData();
|
||||
DeptGetDeviceDTO dto = DeviceAndMonitorList.stream().filter(po -> Objects.equals(po.getUnitId(), dept.getId())).collect(Collectors.toList()).get(0);
|
||||
List<LineDevGetDTO> devList = dto.getDeviceList();
|
||||
Map<String, List<LineDevGetDTO>> LineDevGetMap = devList.stream()
|
||||
.filter(x -> devIdList.contains(x.getDevId()))
|
||||
.collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
|
||||
LineDevGetMap.forEach((key,value)->{
|
||||
DataOnlineRateDto.Detail onlineRateDpo = new DataOnlineRateDto.Detail();
|
||||
List<String> collect = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||
lineParam.setLineId(collect);
|
||||
Integer data = dataVFeignClient.getCountRawData(lineParam).getData();
|
||||
onlineRateDpo.setTimeId(calculatedParam.getDataDate());
|
||||
onlineRateDpo.setDevIndex(key);
|
||||
if(data>0){
|
||||
onlineRateDpo.setOnlineMin(InfluxDBPublicParam.DAY_MINUTE);
|
||||
onlineRateDpo.setOfflineMin(0);
|
||||
}else{
|
||||
onlineRateDpo.setOnlineMin(0);
|
||||
onlineRateDpo.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE);
|
||||
}
|
||||
list.add(onlineRateDpo);
|
||||
});
|
||||
}
|
||||
}else{
|
||||
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
|
||||
Dept dept = deptFeignClient.getRootDept().getData();
|
||||
deptGetLineParam.setDeptId(dept.getId());
|
||||
List<DeptGetDeviceDTO> DeviceAndMonitorList = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData();
|
||||
DeptGetDeviceDTO dto = DeviceAndMonitorList.stream().filter(po -> Objects.equals(po.getUnitId(), dept.getId())).collect(Collectors.toList()).get(0);
|
||||
List<LineDevGetDTO> devList = dto.getDeviceList();
|
||||
Map<String, List<LineDevGetDTO>> LineDevGetMap = devList.stream()
|
||||
.filter(x -> devIdList.contains(x.getDevId()))
|
||||
.collect(Collectors.groupingBy(LineDevGetDTO::getDevId));
|
||||
if (ObjectUtil.isNotNull(calculatedParam.getType())&&calculatedParam.getType() == 1) {
|
||||
LineDevGetMap.forEach((key, value) -> {
|
||||
DataOnlineRateDto.Detail onlineRateDpo = new DataOnlineRateDto.Detail();
|
||||
List<String> collect = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||
lineParam.setLineId(collect);
|
||||
Integer data = dataVFeignClient.getCountRawData(lineParam).getData();
|
||||
onlineRateDpo.setTimeId(calculatedParam.getDataDate());
|
||||
onlineRateDpo.setDevIndex(key);
|
||||
if (data > 0) {
|
||||
onlineRateDpo.setOnlineMin(InfluxDBPublicParam.DAY_MINUTE);
|
||||
onlineRateDpo.setOfflineMin(0);
|
||||
} else {
|
||||
onlineRateDpo.setOnlineMin(0);
|
||||
onlineRateDpo.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE);
|
||||
}
|
||||
list.add(onlineRateDpo);
|
||||
});
|
||||
} else {
|
||||
List<PqsCommunicateDto> outCommunicateData = new ArrayList<>();
|
||||
for (String s : devIdList) {
|
||||
lineParam.setLineId(Arrays.asList(s));
|
||||
@@ -120,6 +121,35 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
onlineRateDpo.setOfflineMin(onLineRate.getOfflineMin());
|
||||
list.add(onlineRateDpo);
|
||||
}
|
||||
LineDevGetMap.forEach((key, value) -> {
|
||||
DataOnlineRateDto.Detail onlineRateDpo = new DataOnlineRateDto.Detail();
|
||||
long count = list.stream().filter(x -> x.getDevIndex().equals(key)).count();
|
||||
if (count < 1) {
|
||||
onlineRateDpo.setTimeId(calculatedParam.getDataDate());
|
||||
onlineRateDpo.setDevIndex(key);
|
||||
List<String> lineIds = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||
lineParam.setLineId(lineIds);
|
||||
List<DataIntegrityDto> integrityDS = dataIntegrityFeignClient.getRawData(lineParam).getData();
|
||||
Double max=0.0;
|
||||
if(CollUtil.isNotEmpty(integrityDS)){
|
||||
List<Double> info=new ArrayList<>();
|
||||
for (DataIntegrityDto integrityD : integrityDS) {
|
||||
double realTime = integrityD.getRealTime();
|
||||
double dueTime = integrityD.getDueTime();
|
||||
Double decimal = 0.0;
|
||||
if (dueTime != 0) {
|
||||
decimal = NumberUtil.round(Math.min(realTime / dueTime, 1), 6).doubleValue();
|
||||
}
|
||||
info.add(decimal);
|
||||
}
|
||||
max = info.stream().max(Comparator.naturalOrder()).orElse(0.0);
|
||||
}
|
||||
int v = (int)Math.ceil(InfluxDBPublicParam.DAY_MINUTE * max);
|
||||
onlineRateDpo.setOnlineMin(v);
|
||||
onlineRateDpo.setOfflineMin(InfluxDBPublicParam.DAY_MINUTE - v);
|
||||
list.add(onlineRateDpo);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
onlineRateFeignClient.batchInsertion(list);
|
||||
@@ -128,20 +158,20 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataOnlineRateDto.Detail> dataOnlineRateMonth(CalculatedParam calculatedParam) {
|
||||
public List<DataOnlineRateDto.Detail> dataOnlineRateMonth(CalculatedParam calculatedParam) {
|
||||
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
|
||||
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
|
||||
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
|
||||
List<String> devIdList = calculatedParam.getIdList();
|
||||
|
||||
List<DataOnlineRateDto.Detail> info=new ArrayList<>();
|
||||
List<List<String>> pendingIds = ListUtils.partition(devIdList,NUM);
|
||||
List<DataOnlineRateDto.Detail> info = new ArrayList<>();
|
||||
List<List<String>> pendingIds = ListUtils.partition(devIdList, NUM);
|
||||
for (List<String> pendingId : pendingIds) {
|
||||
lineParam.setLineId(pendingId);
|
||||
List<DataOnlineRateDto.Detail> data = onlineRateFeignClient.getRawData(lineParam).getData();
|
||||
Map<String, List<DataOnlineRateDto.Detail>> collect = data.stream().collect(Collectors.groupingBy(DataOnlineRateDto.Detail::getDevIndex));
|
||||
collect.forEach((key,value)->{
|
||||
DataOnlineRateDto.Detail onlineRateDto=new DataOnlineRateDto.Detail();
|
||||
collect.forEach((key, value) -> {
|
||||
DataOnlineRateDto.Detail onlineRateDto = new DataOnlineRateDto.Detail();
|
||||
onlineRateDto.setTimeId(calculatedParam.getDataDate());
|
||||
onlineRateDto.setDevIndex(key);
|
||||
onlineRateDto.setOnlineMin(value.stream().mapToInt(DataOnlineRateDto.Detail::getOnlineMin).sum());
|
||||
@@ -149,7 +179,7 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
info.add(onlineRateDto);
|
||||
});
|
||||
}
|
||||
if(CollUtil.isNotEmpty(info)){
|
||||
if (CollUtil.isNotEmpty(info)) {
|
||||
|
||||
|
||||
}
|
||||
@@ -182,7 +212,7 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
return onLineRate;
|
||||
}
|
||||
|
||||
private Integer processData(Date newDate, Date date, Integer type,LineCountEvaluateParam lineParam) {
|
||||
private Integer processData(Date newDate, Date date, Integer type, LineCountEvaluateParam lineParam) {
|
||||
int minute = 0;
|
||||
List<PqsCommunicateDto> communicateData = communicateFeignClient.getRawData(lineParam).getData();
|
||||
/*当前统计时间内存在多条数据*/
|
||||
@@ -220,8 +250,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
|
||||
}
|
||||
} else {
|
||||
List<PqsCommunicateDto> communicateDataOld = communicateFeignClient.getRawDataEnd(lineParam).getData();
|
||||
if (communicateDataOld.size() > 0){
|
||||
if (online.equals(communicateDataOld.get(0).getType())){
|
||||
if (communicateDataOld.size() > 0) {
|
||||
if (online.equals(communicateDataOld.get(0).getType())) {
|
||||
minute = InfluxDBPublicParam.DAY_MINUTE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||
import com.njcn.dataProcess.dao.relation.mapper.RStatLimitRateDetailRelationMapper;
|
||||
import com.njcn.dataProcess.pojo.dto.*;
|
||||
import com.njcn.dataProcess.param.LineCountEvaluateParam;
|
||||
import com.njcn.dataProcess.pojo.po.RStatLimitRateD;
|
||||
import com.njcn.dataProcess.pojo.po.RStatLimitRateDetailD;
|
||||
import com.njcn.dataProcess.service.IDataLimitRateDetail;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -81,7 +82,9 @@ public class RelationDataLimitRateDetailImpl extends MppServiceImpl<RStatLimitRa
|
||||
LambdaQueryWrapper<RStatLimitRateDetailD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.in(CollUtil.isNotEmpty(lineParam.getLineId()), RStatLimitRateDetailD::getLineId, lineParam.getLineId())
|
||||
.ge(RStatLimitRateDetailD::getTime, lineParam.getStartTime())
|
||||
.le(RStatLimitRateDetailD::getTime, lineParam.getEndTime());
|
||||
.le(RStatLimitRateDetailD::getTime, lineParam.getEndTime())
|
||||
.orderByAsc(RStatLimitRateDetailD::getTime)
|
||||
;
|
||||
|
||||
List<RStatLimitRateDetailD> list = this.list(lambdaQueryWrapper);
|
||||
DataLimitRateDetailTimeDto dto;
|
||||
|
||||
@@ -49,7 +49,9 @@ public class RelationDataLimitRateImpl extends MppServiceImpl<RStatLimitRateRela
|
||||
lambdaQueryWrapper.in(CollUtil.isNotEmpty(lineParam.getLineId()),RStatLimitRateD::getLineId,lineParam.getLineId())
|
||||
.ge(RStatLimitRateD::getTime,lineParam.getStartTime())
|
||||
.le(RStatLimitRateD::getTime,lineParam.getEndTime())
|
||||
.eq(RStatLimitRateD::getPhasicType, PhaseType.PHASE_T);
|
||||
.eq(RStatLimitRateD::getPhasicType, PhaseType.PHASE_T)
|
||||
.orderByAsc(RStatLimitRateD::getTime)
|
||||
;
|
||||
List<RStatLimitRateD> list = this.list(lambdaQueryWrapper);
|
||||
|
||||
list.forEach(item->{
|
||||
|
||||
Reference in New Issue
Block a user