diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java index f8d7e27ce..c0505764a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineIntegrityDataController.java @@ -87,4 +87,18 @@ public class LineIntegrityDataController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rStatIntegrityDList, methodDescribe); } + + /** + * 监测点数据完整性 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getEnterpriseIntegrityData") + @ApiOperation("企业级监测点数据完整性图") + @ApiImplicitParam(name = "lineIntegrityDataParam", value = "参数实体", required = true) + public HttpResult> getEnterpriseIntegrityData(@RequestBody LineIntegrityDataParam lineIntegrityDataParam) { + String methodDescribe = getMethodDescribe("getEnterpriseIntegrityData"); + List integrityDataOfLine = lineIntegrityDataService.getEnterpriseIntegrityData(lineIntegrityDataParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,integrityDataOfLine,methodDescribe); + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java index 48dc1525b..c058097aa 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineIntegrityDataService.java @@ -22,4 +22,6 @@ public interface LineIntegrityDataService { List getIntegrityDataOfLine(LineIntegrityDataParam lineIntegrityDataParam); List getIntegrityIcon(DeviceInfoParam.CompareBusinessParam integrityIconParam); + + List getEnterpriseIntegrityData(LineIntegrityDataParam lineIntegrityDataParam); } 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 ee2e3ffdb..6b01e31ab 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 @@ -119,7 +119,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl proList = lineIntegrityDataMapper.getProvinceList(gdIds); // 查询监测点数据完整性 - List percentageOfCompleteDatas = rStatIntegrityDMapper.getLineIntegrityRate(generalDeviceDTO.getLineIndexes(),lineIntegrityDataParam.getSearchBeginTime(), lineIntegrityDataParam.getSearchEndTime()); + List percentageOfCompleteDatas = rStatIntegrityDMapper.getLineIntegrityRate(generalDeviceDTO.getLineIndexes(), lineIntegrityDataParam.getSearchBeginTime(), lineIntegrityDataParam.getSearchEndTime()); for (LineIntegrityDataVO lineDataIntegrity : lineList) { boolean flag = false; @@ -169,7 +169,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImplitem.getIntegrityData()!=3.14159).mapToDouble(LineIntegrityDataVO::getIntegrityData).average().orElse(3.14159); + Double temValue = lineList.stream().filter(item -> item.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()); @@ -180,7 +180,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl(); @@ -199,14 +199,14 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl integrityData = getCondition(lineIndexes, integrityIconParam.getSearchBeginTime(), integrityIconParam.getSearchEndTime()); - outParam.setSingle(NumberUtil.round(integrityData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159),2).doubleValue()); + outParam.setSingle(NumberUtil.round(integrityData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159), 2).doubleValue()); //如果存在需要比较的时间,再获取对应数据 if (StrUtil.isNotBlank(integrityIconParam.getPeriodBeginTime()) && StrUtil.isNotBlank(integrityIconParam.getPeriodEndTime())) { List compareData = getCondition(lineIndexes, integrityIconParam.getPeriodBeginTime(), integrityIconParam.getPeriodEndTime()); - outParam.setRatio(NumberUtil.round(compareData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159),2).doubleValue()); + outParam.setRatio(NumberUtil.round(compareData.stream().mapToDouble(PublicDTO::getData).average().orElse(3.14159), 2).doubleValue()); } out.add(outParam); } @@ -221,6 +221,144 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl getEnterpriseIntegrityData(LineIntegrityDataParam lineIntegrityDataParam) { + + // 获取所有数据 + List generalDeviceDTOList = generalDeviceService.getDeviceInfo(lineIntegrityDataParam, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); + + // 判断所有数据集合状态 + if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) { + + // 创建集合返回数据 + List pro = new ArrayList<>(); + + // 获取告警策略列表 + List alarmStrategyVos = alarmClient.getAlarmStrategyData().getData(); + // 判断告警策略数据状态 + if (CollectionUtil.isEmpty(alarmStrategyVos)) { + throw new BusinessException(DeviceResponseEnum.QUERY_ALARMSTRATEGY_DATA_EMPTY); + } + List 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)); + + + // 遍历集合 + for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) { + + // 判断监测点索引集合状态 + if (CollectionUtils.isEmpty(generalDeviceDTO.getLineIndexes())) { + continue; + } + + // 创建实体类 + LineIntegrityDataVO lineIntegrityDataVO = new LineIntegrityDataVO(); + + // 通过监测点索引查询监测点信息 + List lineList = lineIntegrityDataMapper.getDetailedParametersForLine(generalDeviceDTO.getLineIndexes(), lineIntegrityDataParam.getLineGrade()); + List lineIds = lineList.stream().map(LineIntegrityDataVO::getId).distinct().collect(Collectors.toList()); + + // 通过供电站索引查询供电站信息 + List subList = lineIntegrityDataMapper.getSubList(lineIds); + + + // 查询监测点数据完整性 + List percentageOfCompleteDatas = rStatIntegrityDMapper.getLineIntegrityRate(generalDeviceDTO.getLineIndexes(), lineIntegrityDataParam.getSearchBeginTime(), lineIntegrityDataParam.getSearchEndTime()); + + for (LineIntegrityDataVO lineDataIntegrity : lineList) { + boolean flag = false; + for (LineDataIntegrity lineData : percentageOfCompleteDatas) { + if (lineDataIntegrity.getId().equals(lineData.getLineId())) { + flag = true; + Double temValue = lineData.getIntegrityData(); + lineDataIntegrity.setIntegrityData(DataStatisticsUtil.dataLimits(temValue)); + //根据等级判断是否越限 + if (StrUtil.isNotBlank(lineDataIntegrity.getLineGrade())) { + if (mapA.containsKey(lineDataIntegrity.getLineGrade())) { + if (temValue > mapA.get(lineDataIntegrity.getLineGrade())) { + lineDataIntegrity.setValueOver(1); + } else { + lineDataIntegrity.setValueOver(0); + } + } else { + throw new BusinessException(DeviceResponseEnum.LINE_GRADE_LESS); + } + } else { + //默认没有设置等级的监测点标志为1 0.不合格 1.合格 + lineDataIntegrity.setValueOver(1); + } + break; + } + } + if (!flag) { + //表示未匹配到数据完整性 + lineDataIntegrity.setIntegrityData(3.14159); + lineDataIntegrity.setValueOver(0); + } + } + + //处理变电站 + dealEnterpriseChildrenData(subList, lineList, true); + lineIntegrityDataVO.setChildren(subList); + + // 数据封装 + Double temValue = lineList.stream().filter(item -> item.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); + lineIntegrityDataVO.setIntegrityData(DataStatisticsUtil.dataLimits(temValue)); + pro.add(lineIntegrityDataVO); + + } + + getAreaIntegrityData(mapAlarm, pro); + return pro; + } else { + return new ArrayList<>(); + } + } + + + /** + * 处理变电站 + * + * @param targetData 父集合 + * @param childrenData 子集合 + * @param isLine 处理策略 + */ + private void dealEnterpriseChildrenData(List targetData, List childrenData, boolean isLine) { + // 创建一个map集合,用于封装对象 + Map> groupLine; + if (isLine) { + // 通过stream流分组 + groupLine = childrenData.stream().collect(Collectors.groupingBy(lineAdministrationTree -> { + // 获取父id字符串,通过 逗号 分割 成一个数组 + String[] pid = lineAdministrationTree.getPids().split(","); + // 判断集合索引为3的元素 + return pid[LineBaseEnum.SUB_LEVEL.getCode()]; + })); + } else { + groupLine = childrenData.stream().collect(Collectors.groupingBy(LineIntegrityDataVO::getPid)); + } + targetData = targetData.stream().peek(lineAdministrationTree -> { + Set pids = groupLine.keySet(); + for (String pid : pids) { + if (lineAdministrationTree.getId().equals(pid)) { + List lineIntegrityDataVOList = groupLine.get(pid); + //父级完整性匹配 + Double temValue = lineIntegrityDataVOList.stream().filter(item -> item.getIntegrityData() != 3.14159).mapToDouble(LineIntegrityDataVO::getIntegrityData).average().orElse(3.14159); + lineAdministrationTree.setIntegrityData(DataStatisticsUtil.dataLimits(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()); + } + private List getCondition(List lineList, String startTime, String endTime) { List integrityList = new ArrayList<>(); @@ -242,7 +380,7 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl mapAlarm,List proList) { + public void getAreaIntegrityData(Map mapAlarm, List proList) { for (LineIntegrityDataVO proItem : proList) { List gds = proItem.getChildren(); if (CollectionUtil.isNotEmpty(gds)) { @@ -273,12 +411,13 @@ 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(DataStatisticsUtil.dataLimits(temValue)); LineIntegrityDataVO temp = lineIntegrityDataVOList.stream().filter(t -> t.getAlgoDescribe() != null).min(Comparator.comparing(LineIntegrityDataVO::getAlgoDescribe)).orElse(new LineIntegrityDataVO()); lineAdministrationTree.setAlgoDescribe(temp.getAlgoDescribe()); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyQualifyController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyQualifyController.java index 753a9be1f..0faaa2fd5 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyQualifyController.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/SteadyQualifyController.java @@ -59,4 +59,14 @@ public class SteadyQualifyController extends BaseController { } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getEnterpriseSteadyQualify") + @ApiOperation("企业级稳态合格率图表") + @ApiImplicitParam(name = "steadyParam", value = "稳态列表参数", required = true) + public HttpResult> getEnterpriseSteadyQualify(@RequestBody @Validated DeviceInfoParam.BusinessParam steadyParam){ + String methodDescribe = getMethodDescribe("getEnterpriseSteadyQualify"); + List list = steadyQualifyService.getEnterpriseSteadyQualify(steadyParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyQualifyService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyQualifyService.java index 8007ab198..c1ed7f433 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyQualifyService.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/SteadyQualifyService.java @@ -28,4 +28,12 @@ public interface SteadyQualifyService { * @return */ SteadyQualifyCensusVO getSteadyQualifyCensus(DeviceInfoParam.BusinessParam steadyCensusParam); + + /** + * 功能描述: 获取稳态合格率信息 + * @param steadyParam + * @author cc + * @date 2022/03/20 20:34 + */ + List getEnterpriseSteadyQualify(DeviceInfoParam.BusinessParam steadyParam); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java index bce223849..8b8222f9f 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyQualifyServiceImpl.java @@ -142,6 +142,65 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService { return steadyQualifyCensusVO; } + @Override + public List getEnterpriseSteadyQualify(DeviceInfoParam.BusinessParam steadyParam) { + List steadyQualifyList = new ArrayList<>(); + + //按照条件获取实际运行终端综合信息 + List deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(steadyParam).getData(); + //组装监测点Top层集合 + for (GeneralDeviceDTO generalDeviceDTO : deviceDataList) { + List lineIndexes = generalDeviceDTO.getLineIndexes(); + if (CollectionUtils.isEmpty(lineIndexes)) { + continue; + } + SteadyQualifyVO steadyQualifyVO = new SteadyQualifyVO(); + steadyQualifyVO.setId(generalDeviceDTO.getIndex()); + steadyQualifyVO.setName(generalDeviceDTO.getName()); + List qualifiesRate = getQualifiesRate(lineIndexes, steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime()); + //组装子集级数据树 + List treeList = getCompanyTreeData(qualifiesRate, lineIndexes); + if (CollectionUtil.isNotEmpty(treeList)) { + List flicker = treeList.stream().filter(s -> s.getFlicker() != 3.14159).collect(Collectors.toList()); + List freqOffset = treeList.stream().filter(s -> s.getFreqOffset() != 3.14159).collect(Collectors.toList()); + List voltageOffset = treeList.stream().filter(s -> s.getVoltageOffset() != 3.14159).collect(Collectors.toList()); + List voltageUnbalance = treeList.stream().filter(s -> s.getVoltageUnbalance() != 3.14159).collect(Collectors.toList()); + List negativeCurrent = treeList.stream().filter(s -> s.getNegativeCurrent() != 3.14159).collect(Collectors.toList()); + List harmonicVoltage = treeList.stream().filter(s -> s.getHarmonicVoltage() != 3.14159).collect(Collectors.toList()); + List harmonicCurrent = treeList.stream().filter(s -> s.getHarmonicCurrent() != 3.14159).collect(Collectors.toList()); + List interHarmonic = treeList.stream().filter(s -> s.getInterHarmonic() != 3.14159).collect(Collectors.toList()); + //求各项平均值 + if (!CollectionUtils.isEmpty(flicker)) { + steadyQualifyVO.setFlicker(PubUtils.dataLimits(NumberUtil.round(flicker.stream().mapToDouble(SteadyQualifyVO::getFlicker).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(freqOffset)) { + steadyQualifyVO.setFreqOffset(PubUtils.dataLimits(NumberUtil.round(freqOffset.stream().mapToDouble(SteadyQualifyVO::getFreqOffset).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(voltageOffset)) { + steadyQualifyVO.setVoltageOffset(PubUtils.dataLimits(NumberUtil.round(voltageOffset.stream().mapToDouble(SteadyQualifyVO::getVoltageOffset).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(voltageUnbalance)) { + steadyQualifyVO.setVoltageUnbalance(PubUtils.dataLimits(NumberUtil.round(voltageUnbalance.stream().mapToDouble(SteadyQualifyVO::getVoltageUnbalance).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(negativeCurrent)) { + steadyQualifyVO.setNegativeCurrent(PubUtils.dataLimits(NumberUtil.round(negativeCurrent.stream().mapToDouble(SteadyQualifyVO::getNegativeCurrent).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(harmonicVoltage)) { + steadyQualifyVO.setHarmonicVoltage(PubUtils.dataLimits(NumberUtil.round(harmonicVoltage.stream().mapToDouble(SteadyQualifyVO::getHarmonicVoltage).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(harmonicCurrent)) { + steadyQualifyVO.setHarmonicCurrent(PubUtils.dataLimits(NumberUtil.round(harmonicCurrent.stream().mapToDouble(SteadyQualifyVO::getHarmonicCurrent).average().orElse(100), 2).doubleValue())); + } + if (!CollectionUtils.isEmpty(interHarmonic)) { + steadyQualifyVO.setInterHarmonic(PubUtils.dataLimits(NumberUtil.round(interHarmonic.stream().mapToDouble(SteadyQualifyVO::getInterHarmonic).average().orElse(100), 2).doubleValue())); + } + } + steadyQualifyVO.setChildren(treeList); + steadyQualifyList.add(steadyQualifyVO); + } + return steadyQualifyList; + } + /** * 获取父级每层数据 */ @@ -582,4 +641,39 @@ public class SteadyQualifyServiceImpl implements SteadyQualifyService { } } + + /** + * 获取父级每层数据 + */ + private List getCompanyTreeData(List qualifiesRate, List lineIndexes) { + //监测点集合 + List monitorList = steadyQualifyMapper.getSteadyQualifyData(lineIndexes); + //母线集合 + List busBarList = steadyQualifyMapper.getLineInfoByList(monitorList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList())); + //终端集合 + List deviceList = steadyQualifyMapper.getLineInfoByList(busBarList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList())); + //变电站集合 + List substationList = steadyQualifyMapper.getLineInfoByList(deviceList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList())); + //供电公司集合 + List powerCompanyList = steadyQualifyMapper.getLineInfoByList(substationList.stream().map(SteadyQualifyVO::getPid).distinct().collect(Collectors.toList())); + +// List qualifiesRate = getQualifiesRate(lineIndexes, steadyParam.getSearchBeginTime(), steadyParam.getSearchEndTime()); + monitorList.forEach(steadyQualifyVO -> { + SteadyQualifyVO dataSingleMonitorMoreDay = getDataSingleMonitorMoreDay(qualifiesRate, steadyQualifyVO.getId()); + steadyQualifyVO.setFlicker(PubUtils.dataLimits(dataSingleMonitorMoreDay.getFlicker())); + steadyQualifyVO.setFreqOffset(PubUtils.dataLimits(dataSingleMonitorMoreDay.getFreqOffset())); + steadyQualifyVO.setVoltageOffset(PubUtils.dataLimits(dataSingleMonitorMoreDay.getVoltageOffset())); + steadyQualifyVO.setVoltageUnbalance(PubUtils.dataLimits(dataSingleMonitorMoreDay.getVoltageUnbalance())); + steadyQualifyVO.setNegativeCurrent(PubUtils.dataLimits(dataSingleMonitorMoreDay.getNegativeCurrent())); + steadyQualifyVO.setHarmonicVoltage(PubUtils.dataLimits(dataSingleMonitorMoreDay.getHarmonicVoltage())); + steadyQualifyVO.setHarmonicCurrent(PubUtils.dataLimits(dataSingleMonitorMoreDay.getHarmonicCurrent())); + steadyQualifyVO.setInterHarmonic(PubUtils.dataLimits(dataSingleMonitorMoreDay.getInterHarmonic())); + }); + setChildesList(substationList, monitorList); + setFatherDistortion(substationList); + + + return substationList; + } + }