From 6d2a6635d3688f3552a6eb68d7000fb3de9b0d2b Mon Sep 17 00:00:00 2001 From: zhuxinyu <1799009482@qq.com> Date: Thu, 6 Apr 2023 15:45:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=88=E7=AB=AF=E5=9C=A8=E7=BA=BF=E7=8E=87?= =?UTF-8?q?=EF=BC=8C=E7=BB=88=E7=AB=AF=E5=AE=8C=E6=95=B4=E6=80=A7=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/TerminalOnlineRateDataParam.java | 6 + .../device/pq/pojo/po/LineDataIntegrity.java | 6 - .../pq/pojo/po/TerminalOnlineRateData.java | 17 ++- .../device/pq/pojo/vo/AlarmStrategyVO.java | 5 + .../pq/pojo/vo/LineIntegrityDataVO.java | 9 +- .../pq/pojo/vo/TerminalOnlineRateDataVO.java | 4 +- .../pq/mapper/LineIntegrityDataMapper.java | 2 + .../mapping/LineIntegrityDataMapper.xml | 13 +++ .../mapper/mapping/RStatIntegrityDMapper.xml | 5 +- .../mapping/TerminalOnlineRateDataMapper.xml | 8 +- .../impl/LineIntegrityDataServiceImpl.java | 74 ++++++++++--- .../TerminalOnlineRateDataServiceImpl.java | 103 +++++++++++------- .../device/pq/utils/DataStatisticsUtil.java | 8 +- 13 files changed, 186 insertions(+), 74 deletions(-) diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/TerminalOnlineRateDataParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/TerminalOnlineRateDataParam.java index 538e309e4..b42061be8 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/TerminalOnlineRateDataParam.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/TerminalOnlineRateDataParam.java @@ -27,4 +27,10 @@ public class TerminalOnlineRateDataParam extends DeviceInfoParam.BusinessParam{ */ @ApiModelProperty(name = "lineGrade",value = "字段表监测点等级,0:极重要 1:重要 2:普通 3:不重要") private String lineGrade; + + /** + * 调用模块分类 + */ + @ApiModelProperty(name = "module",value = "接口调用方 deviceBoot:业务管理员-运维中心,harmonicBoot:谐波-区域") + private String module; } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDataIntegrity.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDataIntegrity.java index 1a75a8085..0ea1fe51f 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDataIntegrity.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDataIntegrity.java @@ -13,38 +13,32 @@ import java.io.Serializable; */ @Data -@Measurement(name = "pqs_integrity") public class LineDataIntegrity implements Serializable { /** * 监测点id */ - @Column(name = "line_id",tag = true) private String lineId; /** * 实际值 */ - @Column(name = "real") private Double real; /** * 期望值 */ - @Column(name = "due") private Double due; /** * 时间 */ - @Column(name = "time") private String time; /** * 监测点数据完整性 */ - @Column(name = "integrityData") private Double integrityData; } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TerminalOnlineRateData.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TerminalOnlineRateData.java index 3cd94114f..545b3f8b4 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TerminalOnlineRateData.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TerminalOnlineRateData.java @@ -7,32 +7,39 @@ import org.influxdb.annotation.Measurement; import java.io.Serializable; /** - * 接收查询influxdb数据(终端在线率业务) + * 接收查询mysql数据(终端在线率业务) * * @author yzh * @date 2022/9/22 */ @Data -@Measurement(name = "pqs_onlinerate") + public class TerminalOnlineRateData implements Serializable { /** * 时间 */ - @Column(name = "time") private String time; /** * 终端id */ - @Column(name = "dev_id",tag = true) private String devId; /** * 终端在线率 */ - @Column(name = "online_rate") private Double onlineRate = 3.14159; + /** + * 在线时间(分钟) + */ + private Integer onlineMin; + + /** + * 离线时间(分钟) + */ + private Integer offlineMin; + } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/AlarmStrategyVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/AlarmStrategyVO.java index 5c6eb006f..5f9e6bf20 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/AlarmStrategyVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/AlarmStrategyVO.java @@ -56,5 +56,10 @@ public class AlarmStrategyVO implements Serializable { @ApiModelProperty("更新用户") private String updateBy; + /** + * 字段表监测点等级 + */ + @ApiModelProperty(name = "algoDescribe",value = "字段表监测点等级,0:极重要 1:重要 2:普通 3:不重要") + private Integer algoDescribe; } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineIntegrityDataVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineIntegrityDataVO.java index f9af6ea2e..dc2a79152 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineIntegrityDataVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineIntegrityDataVO.java @@ -112,6 +112,13 @@ public class LineIntegrityDataVO implements Serializable { private String lineGradeName; + /** + * 字段表监测点等级 + */ + @ApiModelProperty(name = "algoDescribe",value = "字段表监测点等级,0:极重要 1:重要 2:普通 3:不重要") + private Integer algoDescribe; + + @ApiModelProperty(name = "loadType",value = "干扰源类型") private String loadType; @@ -127,7 +134,7 @@ public class LineIntegrityDataVO implements Serializable { * 监测点合格率 */ @ApiModelProperty(name = "LinePassRate",value = "监测点合格率 0:不合格 1:合格") - private Integer linePassRate; + private Integer valueOver; /** diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java index c51b5b953..10903f1f3 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java @@ -110,12 +110,12 @@ public class TerminalOnlineRateDataVO implements Serializable { */ @ApiModelProperty(name = "algoDescribe",value = "字段表监测点等级,0:极重要 1:重要 2:普通 3:不重要") private Integer algoDescribe; - - /** * 子节点集合 */ @ApiModelProperty(name = "children",value = "子节点集合") private List children = new ArrayList<>(); + + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineIntegrityDataMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineIntegrityDataMapper.java index c90a0fddf..d85d43ebf 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineIntegrityDataMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineIntegrityDataMapper.java @@ -2,6 +2,7 @@ package com.njcn.device.pq.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.njcn.common.pojo.dto.SimpleDTO; +import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; import com.njcn.device.pq.pojo.vo.TerminalTree; import org.apache.ibatis.annotations.Mapper; @@ -46,4 +47,5 @@ public interface LineIntegrityDataMapper extends BaseMapper @Param("lineGrade")String lineGrade); + List getAlarmAlgoDescribe(@Param("list") List alarmStrategyVos); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineIntegrityDataMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineIntegrityDataMapper.xml index 8fa2272f1..f1b931f62 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineIntegrityDataMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineIntegrityDataMapper.xml @@ -81,6 +81,7 @@ msdd.`Name` AS 'manufacturer', pldsdd.`Name` AS 'lineGradeName', pldsdd.`id` AS 'lineGrade', + pldsdd.Algo_Describe AS `algoDescribe`, pld.Load_Type AS 'loadType' FROM pq_line AS line @@ -103,5 +104,17 @@ and pld.Line_Grade = #{lineGrade} + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/RStatIntegrityDMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/RStatIntegrityDMapper.xml index a6c86d937..34eb0ff93 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/RStatIntegrityDMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/RStatIntegrityDMapper.xml @@ -3,7 +3,10 @@ - select dev_index devId,avg(online_min/(online_min+offline_min)) onlineRate + select + dev_index devId, + avg(online_min/(online_min+offline_min))*100 onlineRate, + sum(online_min) onlineMin, + sum(offline_min) offlineMin from r_stat_onlinerate_d where dev_index in diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java index 9bf8dc554..dc3d1525c 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java @@ -14,12 +14,15 @@ import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; import com.njcn.device.pq.pojo.po.LineDataIntegrity; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; +import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; import com.njcn.device.pq.service.LineIntegrityDataService; import com.njcn.device.pq.utils.DataStatisticsUtil; import com.njcn.influxdb.param.InfluxDBPublicParam; import com.njcn.influxdb.utils.InfluxDBCommUtils; import com.njcn.influxdb.utils.InfluxDbUtils; +import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.enums.StatisticsEnum; +import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.influxdb.dto.QueryResult; @@ -27,10 +30,7 @@ import org.influxdb.impl.InfluxDBResultMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -80,6 +80,9 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl alarmAlgoDescribe = lineIntegrityDataMapper.getAlarmAlgoDescribe(alarmStrategyVos); + Map mapAlarm = alarmAlgoDescribe.stream().collect(Collectors.toMap(AlarmStrategyVO::getAlgoDescribe, AlarmStrategyVO::getIntegrityValue)); + Map mapA = alarmStrategyVos.stream().collect(Collectors.toMap(AlarmStrategyVO::getId, AlarmStrategyVO::getIntegrityValue)); @@ -108,6 +111,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl proList = lineIntegrityDataMapper.getProvinceList(gdIds); + // 查询监测点数据完整性 List percentageOfCompleteDatas = rStatIntegrityDMapper.getLineIntegrityRate(generalDeviceDTO.getLineIndexes(),lineIntegrityDataParam.getSearchBeginTime(), lineIntegrityDataParam.getSearchEndTime()); @@ -123,16 +127,16 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl mapA.get(lineDataIntegrity.getLineGrade())) { - lineDataIntegrity.setLinePassRate(1); + lineDataIntegrity.setValueOver(1); } else { - lineDataIntegrity.setLinePassRate(0); + lineDataIntegrity.setValueOver(0); } } else { throw new BusinessException(DeviceResponseEnum.LINE_GRADE_LESS); } } else { //默认没有设置等级的监测点标志为1 0.不合格 1.合格 - lineDataIntegrity.setLinePassRate(1); + lineDataIntegrity.setValueOver(1); } break; } @@ -140,7 +144,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImplitem.getIntegrityData()!=3.14159).mapToDouble(LineIntegrityDataVO::getIntegrityData).average().orElse(3.14159); - + LineIntegrityDataVO temp = lineList.stream().filter(t -> t.getAlgoDescribe() != null).min(Comparator.comparing(LineIntegrityDataVO::getAlgoDescribe)).orElse(new LineIntegrityDataVO()); + lineIntegrityDataVO.setAlgoDescribe(temp.getAlgoDescribe()); lineIntegrityDataVO.setId(generalDeviceDTO.getIndex()); lineIntegrityDataVO.setName(generalDeviceDTO.getName()); lineIntegrityDataVO.setLevel(0); @@ -171,12 +174,56 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl(); } } + + public void getAreaIntegrityData(Map mapAlarm,List proList) { + for (LineIntegrityDataVO proItem : proList) { + List gds = proItem.getChildren(); + if (CollectionUtil.isNotEmpty(gds)) { + for (LineIntegrityDataVO gdItem : gds) { + List subs = gdItem.getChildren(); + if (CollectionUtil.isNotEmpty(subs)) { + for (LineIntegrityDataVO subItem : subs) { + if (Objects.nonNull(subItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(subItem.getAlgoDescribe())) { + if (subItem.getIntegrityData() != 3.14159 && subItem.getIntegrityData() < mapAlarm.get(subItem.getAlgoDescribe())) { + subItem.setValueOver(1); + } else { + subItem.setValueOver(0); + } + } + } + } + } + if (Objects.nonNull(gdItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(gdItem.getAlgoDescribe())) { + if (gdItem.getIntegrityData() != 3.14159 && gdItem.getIntegrityData() < mapAlarm.get(gdItem.getAlgoDescribe())) { + gdItem.setValueOver(1); + } else { + gdItem.setValueOver(0); + } + } + } + } + } + if (Objects.nonNull(proItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(proItem.getAlgoDescribe())) + if (proItem.getIntegrityData() != 3.14159 && proItem.getIntegrityData() < mapAlarm.get(proItem.getAlgoDescribe())){ + proItem.setValueOver(1); + } else { + proItem.setValueOver(0); + } + } + } + } + /** * 处理变电站 * @@ -204,10 +251,11 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl lineIntegrityDataVOList = groupLine.get(pid); lineAdministrationTree.setChildren(lineIntegrityDataVOList); - //父级完整性匹配 - Double temValue = lineIntegrityDataVOList.stream().filter(item->item.getIntegrityData()!=3.14159).mapToDouble(LineIntegrityDataVO::getIntegrityData).average().orElse(3.14159); + Double temValue = lineIntegrityDataVOList.stream().filter(item->item.getIntegrityData() != 3.14159).mapToDouble(LineIntegrityDataVO::getIntegrityData).average().orElse(3.14159); lineAdministrationTree.setIntegrityData(temValue); + LineIntegrityDataVO temp = lineIntegrityDataVOList.stream().filter(t -> t.getAlgoDescribe() != null).min(Comparator.comparing(LineIntegrityDataVO::getAlgoDescribe)).orElse(new LineIntegrityDataVO()); + lineAdministrationTree.setAlgoDescribe(temp.getAlgoDescribe()); } } }).collect(Collectors.toList()); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java index 2db309c33..d3f8cb404 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java @@ -111,35 +111,35 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData List devIds = deviceList.stream().map(TerminalOnlineRateDataVO::getId).collect(Collectors.toList()); - List terminalOnlineRateData = terminalOnlineRateDataMapper.getDevOnlineByDevIds(devIds,terminalOnlineRateDataParam.getSearchBeginTime(),terminalOnlineRateDataParam.getSearchEndTime()); + // 根据装置id获取装置在线率 + List terminalOnlineRateList = terminalOnlineRateDataMapper.getDevOnlineByDevIds(devIds,terminalOnlineRateDataParam.getSearchBeginTime(),terminalOnlineRateDataParam.getSearchEndTime()); // 处理终端在线率 - DataStatisticsUtil.getTerminalOnlineRateData(terminalOnlineRateData, deviceList); + DataStatisticsUtil.getTerminalOnlineRateData(terminalOnlineRateList, deviceList); - // 通过供电站索引查询供电站信息 + // 通过装置pid即供电站索引查询供电站信息 List subIds = deviceList.stream().map(TerminalOnlineRateDataVO::getPid).distinct().collect(Collectors.toList()); List subList = terminalOnlineRateDataMapper.getSubList(subIds); - // 通过供电公司索引查询供电公司信息 + // 通过供电站pid即供电公司索引查询供电公司信息 List gdIds = subList.stream().map(TerminalOnlineRateDataVO::getPid).distinct().collect(Collectors.toList()); List gdList = terminalOnlineRateDataMapper.getGdList(gdIds); // 通过供电公司索引查询省会 List proList = terminalOnlineRateDataMapper.getProvinceList(gdIds); - //处理变电站 dealChildrenData(subList, deviceList, false); //处理供电公司 dealChildrenData(gdList, subList, false); - - // 数据封装 terminalOnlineRateDataVO.setId(generalDeviceDTO.getIndex()); terminalOnlineRateDataVO.setName(generalDeviceDTO.getName()); terminalOnlineRateDataVO.setLevel(0); if (terminalOnlineRateDataParam.getStatisticalType().getCode().equalsIgnoreCase(StatisticsEnum.POWER_NETWORK.getCode())) { + TerminalOnlineRateDataVO temp = gdList.stream().filter(t -> t.getAlgoDescribe() != null).min(Comparator.comparing(TerminalOnlineRateDataVO::getAlgoDescribe)).orElseGet(TerminalOnlineRateDataVO::new); + terminalOnlineRateDataVO.setAlgoDescribe(temp.getAlgoDescribe()); terminalOnlineRateDataVO.setChildren(gdList); } else { //还需要额外处理省会 @@ -182,7 +182,10 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData Set pids = groupLine.keySet(); for (String pid : pids) { if (terminalOnlineRateDataVO.getId().equals(pid)) { - terminalOnlineRateDataVO.setChildren(groupLine.get(pid)); + List list = groupLine.get(pid); + TerminalOnlineRateDataVO temp = list.stream().filter(t -> t.getAlgoDescribe() != null).min(Comparator.comparing(TerminalOnlineRateDataVO::getAlgoDescribe)).orElse(new TerminalOnlineRateDataVO()); + terminalOnlineRateDataVO.setAlgoDescribe(temp.getAlgoDescribe()); + terminalOnlineRateDataVO.setChildren(list); } } }).collect(Collectors.toList()); @@ -201,8 +204,10 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData Map map = alarmStrategyVos.stream().collect(Collectors.toMap(AlarmStrategyVO::getId, Function.identity())); if (StrUtil.isNotBlank(lineGrade)) { + // 根据入参终端等级查字典表 DictData dictData = dicDataFeignClient.getDicDataById(lineGrade).getData(); if (map.containsKey(dictData.getId())) { + // key:监测点等级AlgoDescribe value:监测点对应在线率告警阈值 mapAlarm.put(dictData.getAlgoDescribe(), map.get(dictData.getId()).getOnlineValue()); } else { throw new BusinessException(DeviceResponseEnum.QUERY_ALARMSTRATEGY_DATA_EMPTY); @@ -218,53 +223,71 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData }); } - terminalOnlineRateData.forEach(proItem -> { - List gd = proItem.getChildren(); - if (CollectionUtil.isNotEmpty(gd)) { - gd.forEach(gdItem -> { - List sub = gdItem.getChildren(); - if (CollectionUtil.isNotEmpty(sub)) { - sub.forEach(subItem -> { - List dev = subItem.getChildren(); - if (CollectionUtil.isNotEmpty(dev)) { - dev.forEach(devItem -> { - List tem = devItem.getChildren(); - if (CollectionUtil.isNotEmpty(tem)) { - Double temAvg = tem.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); - devItem.setOnlineRate(temAvg); - - if (Objects.nonNull(devItem.getAlgoDescribe())) { - if (mapAlarm.containsKey(devItem.getAlgoDescribe())) { - if (devItem.getOnlineRate() != 3.14159 && devItem.getOnlineRate() > mapAlarm.get(devItem.getAlgoDescribe())) { - devItem.setValueOver(1); - } else { - devItem.setValueOver(0); - } + for (TerminalOnlineRateDataVO proItem : terminalOnlineRateData) { + List gds = proItem.getChildren(); + if (CollectionUtil.isNotEmpty(gds)) { + for (TerminalOnlineRateDataVO gdItem : gds) { + List subs = gdItem.getChildren(); + if (CollectionUtil.isNotEmpty(subs)) { + for (TerminalOnlineRateDataVO subItem : subs) { + // 装置集合 + List devs = subItem.getChildren(); + if (CollectionUtil.isNotEmpty(devs)) { + for (TerminalOnlineRateDataVO devItem : devs) { + if (Objects.nonNull(devItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(devItem.getAlgoDescribe())) { + if (devItem.getOnlineRate() != 3.14159 && devItem.getOnlineRate() > mapAlarm.get(devItem.getAlgoDescribe())) { + devItem.setValueOver(1); + } else { + devItem.setValueOver(0); } } - - } else { - subItem.setOnlineRate(3.14159); } - }); - Double devAvg = dev.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + } + Double devAvg = devs.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); subItem.setOnlineRate(devAvg); } else { subItem.setOnlineRate(3.14159); } - }); - Double subAvg = sub.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + if (Objects.nonNull(subItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(subItem.getAlgoDescribe())) { + if (subItem.getOnlineRate() != 3.14159 && subItem.getOnlineRate() > mapAlarm.get(subItem.getAlgoDescribe())) { + subItem.setValueOver(1); + } else { + subItem.setValueOver(0); + } + } + } + } + Double subAvg = subs.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); gdItem.setOnlineRate(subAvg); } else { gdItem.setOnlineRate(3.14159); } - }); - Double gdAvg = gd.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + if (Objects.nonNull(gdItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(gdItem.getAlgoDescribe())) { + if (gdItem.getOnlineRate() != 3.14159 && gdItem.getOnlineRate() > mapAlarm.get(gdItem.getAlgoDescribe())) { + gdItem.setValueOver(1); + } else { + gdItem.setValueOver(0); + } + } + } + } + Double gdAvg = gds.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); proItem.setOnlineRate(gdAvg); } else { proItem.setOnlineRate(3.14159); } - }); + if (Objects.nonNull(proItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(proItem.getAlgoDescribe())) + if (proItem.getOnlineRate() != 3.14159 && proItem.getOnlineRate() > mapAlarm.get(proItem.getAlgoDescribe())){ + proItem.setValueOver(1); + } else { + proItem.setValueOver(0); + } + } + } } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java index 3bf741353..44b54037a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java @@ -114,17 +114,17 @@ public class DataStatisticsUtil { /** * 获取终端在线率 * - * @param terminalOnlineRateData + * @param terminalOnlineRateList * @param deviceList */ - public static void getTerminalOnlineRateData(List terminalOnlineRateData, List deviceList) { + public static void getTerminalOnlineRateData(List terminalOnlineRateList, List deviceList) { - if (CollectionUtil.isNotEmpty(terminalOnlineRateData)) { + if (CollectionUtil.isNotEmpty(terminalOnlineRateList)) { // 根据监测点id分类 deviceList = deviceList.stream().peek(onlineRateDataVO -> { boolean flag = false; - for (TerminalOnlineRateData onlineRateData : terminalOnlineRateData) { + for (TerminalOnlineRateData onlineRateData : terminalOnlineRateList) { if (onlineRateDataVO.getId().equals(onlineRateData.getDevId())) { flag = true; onlineRateDataVO.setOnlineRate(onlineRateData.getOnlineRate());