优化终端在线率算法

This commit is contained in:
wr
2025-12-25 15:34:29 +08:00
parent e49dee8263
commit ab96d247fa
3 changed files with 78 additions and 43 deletions

View File

@@ -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;
@@ -61,7 +63,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
private CommTerminalGeneralClient commTerminalGeneralClient;
@Resource
private DeptFeignClient deptFeignClient;
@Resource
private DataIntegrityFeignClient dataIntegrityFeignClient;
@Override
@@ -73,8 +76,6 @@ 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());
@@ -84,6 +85,7 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
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());
@@ -100,7 +102,6 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
}
list.add(onlineRateDpo);
});
}
} else {
List<PqsCommunicateDto> outCommunicateData = new ArrayList<>();
for (String s : devIdList) {
@@ -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);

View File

@@ -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;

View File

@@ -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->{