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