From 47b08d4797dc3461ede09a601adcf6df8f2e9525 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Mon, 15 Dec 2025 13:32:38 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E5=85=A8=E6=99=AF=E7=A8=B3?= =?UTF-8?q?=E6=80=81=E7=BB=9F=E8=AE=A1=E8=B6=85=E6=A0=87=E7=9B=91=E6=B5=8B?= =?UTF-8?q?=E7=82=B9=E5=8D=A0=E6=AF=94=202.=E4=BC=98=E5=8C=96=E7=A8=B3?= =?UTF-8?q?=E6=80=81word=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pq/pojo/po/jb/DistributionArea.java | 2 +- .../device/pq/pojo/po/jb/GenerationUser.java | 2 +- .../pojo/vo/hebeinorth/EvaluationVo.java | 3 + .../service/impl/GridServiceImpl.java | 21 ++-- .../service/impl/ReportServiceImpl.java | 96 ++++++++++++++++++- 5 files changed, 114 insertions(+), 10 deletions(-) diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/DistributionArea.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/DistributionArea.java index e7efd2327..2731b8380 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/DistributionArea.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/DistributionArea.java @@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName("distribution_area") +@TableName("fbs_distribution_area") public class DistributionArea extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/GenerationUser.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/GenerationUser.java index 65b6ba1fb..3bd78d5a9 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/GenerationUser.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/jb/GenerationUser.java @@ -17,7 +17,7 @@ import java.time.LocalDate; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName("power_generation_user") +@TableName("fbs_power_generation_user") public class GenerationUser extends BaseEntity { private static final long serialVersionUID = 1L; diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationVo.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationVo.java index 2f9c4a364..ed6d38de5 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationVo.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationVo.java @@ -32,6 +32,9 @@ public class EvaluationVo { @ApiModelProperty("越限占比") private Double ratio = 3.14159; + + @ApiModelProperty("超标监测点数量") + private Integer size=0; } } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java index 1879f5bb4..6dbd2cb2d 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java @@ -2,6 +2,7 @@ package com.njcn.harmonic.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import com.njcn.common.utils.PubUtils; import com.njcn.device.biz.commApi.CommTerminalGeneralClient; import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; @@ -305,13 +306,9 @@ public class GridServiceImpl implements IGridService { }); result.setChildrenList(childrenList); if (CollUtil.isNotEmpty(childrenList)) { - OptionalDouble optionalAvg = childrenList.stream() - .filter(child -> child.getRatio() != null && !child.getRatio().equals(3.14159)) - .mapToDouble(EvaluationVo.Children::getRatio) - .average(); - if (optionalAvg.isPresent()) { - double avg = optionalAvg.getAsDouble(); - result.setLineRatio(PubUtils.doubleRound(2, avg)); + int sum = childrenList.stream().mapToInt(EvaluationVo.Children::getSize).sum(); + if (lineList.size()!=0) { + result.setLineRatio(NumberUtil.round(sum/lineList.size(),2).doubleValue()); } } } @@ -821,6 +818,7 @@ public class GridServiceImpl implements IGridService { List filteredList0 = limitRateList.stream() .filter(data -> data.getFreqDevOvertime() + data.getVoltageDevOvertime() + data.getFlickerOvertime() + data.getUaberranceOvertime() + data.getUbalanceOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList0.size()); children.setRatio(PubUtils.doubleRound(2, filteredList0.size() * 100.0 / limitRateList.size())); break; //电压偏差 @@ -828,6 +826,7 @@ public class GridServiceImpl implements IGridService { List filteredList1 = limitRateList.stream() .filter(data -> data.getVoltageDevOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList1.size()); children.setRatio(PubUtils.doubleRound(2, filteredList1.size() * 100.0 / limitRateList.size())); break; //频率偏差 @@ -835,6 +834,7 @@ public class GridServiceImpl implements IGridService { List filteredList2 = limitRateList.stream() .filter(data -> data.getFreqDevOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList2.size()); children.setRatio(PubUtils.doubleRound(2, filteredList2.size() * 100.0 / limitRateList.size())); break; //电压总谐波畸变率 @@ -842,6 +842,7 @@ public class GridServiceImpl implements IGridService { List filteredList3 = limitRateList.stream() .filter(data -> data.getUaberranceOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList3.size()); children.setRatio(PubUtils.doubleRound(2, filteredList3.size() * 100.0 / limitRateList.size())); break; //电压闪变 @@ -849,6 +850,7 @@ public class GridServiceImpl implements IGridService { List filteredList4 = limitRateList.stream() .filter(data -> data.getFlickerOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList4.size()); children.setRatio(PubUtils.doubleRound(2, filteredList4.size() * 100.0 / limitRateList.size())); break; //三相电压不平衡度 @@ -856,6 +858,7 @@ public class GridServiceImpl implements IGridService { List filteredList5 = limitRateList.stream() .filter(data -> data.getUbalanceOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList5.size()); children.setRatio(PubUtils.doubleRound(2, filteredList5.size() * 100.0 / limitRateList.size())); break; // 谐波电压 @@ -864,6 +867,7 @@ public class GridServiceImpl implements IGridService { List filteredList6 = limitRateList.stream() .filter(x -> getLimitRateStats(x, 2, 26, "uharm", "Overtime") || x.getUaberranceOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList6.size()); children.setRatio(PubUtils.doubleRound(2, filteredList6.size() * 100.0 / limitRateList.size())); break; //谐波电流 @@ -871,6 +875,7 @@ public class GridServiceImpl implements IGridService { List filteredList7 = limitRateList.stream() .filter(x -> getLimitRateStats(x, 2, 26, "iharm", "Overtime")) .collect(Collectors.toList()); + children.setSize(filteredList7.size()); children.setRatio(PubUtils.doubleRound(2, filteredList7.size() * 100.0 / limitRateList.size())); break; //间谐波电压 @@ -878,6 +883,7 @@ public class GridServiceImpl implements IGridService { List filteredList8 = limitRateList.stream() .filter(x -> getLimitRateStats(x, 1, 16, "inuharm", "Overtime")) .collect(Collectors.toList()); + children.setSize(filteredList8.size()); children.setRatio(PubUtils.doubleRound(2, filteredList8.size() * 100.0 / limitRateList.size())); break; //负序电流 @@ -885,6 +891,7 @@ public class GridServiceImpl implements IGridService { List filteredList9 = limitRateList.stream() .filter(data -> data.getINegOvertime() > 0) .collect(Collectors.toList()); + children.setSize(filteredList9.size()); children.setRatio(PubUtils.doubleRound(2, filteredList9.size() * 100.0 / limitRateList.size())); break; default: diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/ReportServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/ReportServiceImpl.java index 400101210..6a36315f5 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/ReportServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/ReportServiceImpl.java @@ -4,10 +4,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.njcn.harmonic.mapper.RStatDataHarmRateVDMapper; import com.njcn.harmonic.mapper.RStatDataIDMapper; import com.njcn.harmonic.mapper.RStatDataInharmVDMapper; import com.njcn.harmonic.mapper.ReportMapper; import com.njcn.harmonic.pojo.po.RStatDataVD; +import com.njcn.harmonic.pojo.po.day.RStatDataHarmrateVDPO; import com.njcn.harmonic.pojo.po.day.RStatDataIDPO; import com.njcn.harmonic.pojo.param.ReportQueryParam; import com.njcn.harmonic.pojo.po.day.RStatDataInharmVDPO; @@ -32,6 +34,7 @@ public class ReportServiceImpl implements ReportService { private final ReportMapper reportMapper; private final IRStatDataVDService statDataVDService; + private final RStatDataHarmRateVDMapper rStatDataHarmRateVDMapper; private final RStatDataIDMapper rStatDataIDMapper; private final RStatDataInharmVDMapper rStatDataInharmVDMapper; @@ -220,7 +223,7 @@ public class ReportServiceImpl implements ReportService { } //获取电压含有率,不包含基波 - List listRate = dataV(param, Arrays.asList("A", "B", "C"), 2, 51, false, 1); + List listRate = dataHarmV(param, Arrays.asList("A", "B", "C"), 2, 51, false, 1); if (CollUtil.isEmpty(listRate)) { for (int i = 0; i < 49; i++) { @@ -382,6 +385,76 @@ public class ReportServiceImpl implements ReportService { return a; } + /** + * 电压信息 + * + * @param param 查询条件 + * @param valueTypes 区分类别 例如"A","B","C" + * @param num 循环开始 + * @param size 循环结束 + * @param fly 否是启用获取属性电压 + * @param index 获取属性位置名称 + * @return + */ + private List dataHarmV(ReportQueryParam param, List valueTypes, Integer num, Integer size, Boolean fly, Integer index) { + List harmRateVDPOS = rStatDataHarmRateVDMapper.selectList(new LambdaQueryWrapper() + .eq(RStatDataHarmrateVDPO::getLineId, param.getLineId()) + .in(CollUtil.isNotEmpty(valueTypes), RStatDataHarmrateVDPO::getPhaseType, valueTypes) + .ge(StrUtil.isNotBlank(param.getStartTime()), RStatDataHarmrateVDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime()))) + .le(StrUtil.isNotBlank(param.getEndTime()), RStatDataHarmrateVDPO::getTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))) + ); + String max = "MAX"; + String avg = "AVG"; + String min = "MIN"; + String cp95 = "CP95"; + List a = new ArrayList<>(); + Map> collect = harmRateVDPOS.stream().collect(Collectors.groupingBy(RStatDataHarmrateVDPO::getPhaseType)); + collect.forEach((key, value) -> { + Map> valueTypeMap = value.stream().collect(Collectors.groupingBy(RStatDataHarmrateVDPO::getValueType)); + + for (int i = num; i < size; i++) { + ReportValue reportValue = new ReportValue(); + String attribute = ""; + if (fly) { + if (index == 0) { + attribute = attributeV(i); + } else { + attribute = attributeV(index); + } + } else { + attribute = "v" + i; + } + + if (valueTypeMap.containsKey(max)) { + List aa = reflectDataHarmV(valueTypeMap.get(max), max, attribute); + reportValue.setPhaseType(key); + Float maxNum = aa.stream().distinct().max(Float::compareTo).get(); + reportValue.setFmaxValue(maxNum); + } + if (valueTypeMap.containsKey(avg)) { + List aa = reflectDataHarmV(valueTypeMap.get(avg), avg, attribute); + reportValue.setPhaseType(key); + Double avgNum = aa.stream().distinct().collect(Collectors.averagingDouble(Float::doubleValue)); + reportValue.setMeanValue(avgNum.floatValue()); + } + if (valueTypeMap.containsKey(min)) { + List aa = reflectDataHarmV(valueTypeMap.get(min), min, attribute); + reportValue.setPhaseType(key); + double minNum = aa.stream().distinct().min(Float::compareTo).get(); + reportValue.setMinValue((float) minNum); + } + if (valueTypeMap.containsKey(cp95)) { + List aa = reflectDataHarmV(valueTypeMap.get(cp95), cp95, attribute); + reportValue.setPhaseType(key); + List cp95Num = aa.stream().distinct().sorted(Comparator.comparing(Float::doubleValue).reversed()).collect(Collectors.toList()); + reportValue.setCp95Value(cp95Num.get(0).floatValue()); + } + a.add(reportValue); + } + }); + return a; + } + /** * 电压反射取属性值 * @@ -411,6 +484,27 @@ public class ReportServiceImpl implements ReportService { }).collect(Collectors.toList()); } + private List reflectDataHarmV(List value, String name, String attribute) { + Field field = null; + try { + field = RStatDataHarmrateVDPO.class.getDeclaredField(attribute); + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } + field.setAccessible(true); + + Field finalField = field; + return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> { + BigDecimal o = null; + try { + o = (BigDecimal) finalField.get(temp); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + return o.floatValue(); + }).collect(Collectors.toList()); + } + /** * 电压反射取属性值 *