From ab96d247fa6861bea3b1f147fd8ba847a7992645 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Thu, 25 Dec 2025 15:34:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=88=E7=AB=AF=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=8E=87=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../line/IDataOnlineRateServiceImpl.java | 112 +++++++++++------- .../RelationDataLimitRateDetailImpl.java | 5 +- .../relation/RelationDataLimitRateImpl.java | 4 +- 3 files changed, 78 insertions(+), 43 deletions(-) diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java index c3aa107..f9ad603 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/IDataOnlineRateServiceImpl.java @@ -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 devIdList = calculatedParam.getIdList(); List 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 DeviceAndMonitorList = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData(); - DeptGetDeviceDTO dto = DeviceAndMonitorList.stream().filter(po -> Objects.equals(po.getUnitId(), dept.getId())).collect(Collectors.toList()).get(0); - List devList = dto.getDeviceList(); - Map> 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 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 DeviceAndMonitorList = commTerminalGeneralClient.deptGetDeviceAndMonitor(deptGetLineParam).getData(); + DeptGetDeviceDTO dto = DeviceAndMonitorList.stream().filter(po -> Objects.equals(po.getUnitId(), dept.getId())).collect(Collectors.toList()).get(0); + List devList = dto.getDeviceList(); + Map> 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 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 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 lineIds = value.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + lineParam.setLineId(lineIds); + List integrityDS = dataIntegrityFeignClient.getRawData(lineParam).getData(); + Double max=0.0; + if(CollUtil.isNotEmpty(integrityDS)){ + List 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 dataOnlineRateMonth(CalculatedParam calculatedParam) { + public List dataOnlineRateMonth(CalculatedParam calculatedParam) { LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate())); lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate())); List devIdList = calculatedParam.getIdList(); - List info=new ArrayList<>(); - List> pendingIds = ListUtils.partition(devIdList,NUM); + List info = new ArrayList<>(); + List> pendingIds = ListUtils.partition(devIdList, NUM); for (List pendingId : pendingIds) { lineParam.setLineId(pendingId); List data = onlineRateFeignClient.getRawData(lineParam).getData(); Map> 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 communicateData = communicateFeignClient.getRawData(lineParam).getData(); /*当前统计时间内存在多条数据*/ @@ -220,8 +250,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService { } } else { List 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; } } diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java index 690d574..fbf651b 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateDetailImpl.java @@ -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 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 list = this.list(lambdaQueryWrapper); DataLimitRateDetailTimeDto dto; diff --git a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateImpl.java b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateImpl.java index 28565c0..2c237bd 100644 --- a/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateImpl.java +++ b/data-processing/data-processing-boot/src/main/java/com/njcn/dataProcess/service/impl/relation/RelationDataLimitRateImpl.java @@ -49,7 +49,9 @@ public class RelationDataLimitRateImpl extends MppServiceImpl list = this.list(lambdaQueryWrapper); list.forEach(item->{