diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/report/AreaHarmReportParam.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/report/AreaHarmReportParam.java index b0642426e..fe9c1aba5 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/report/AreaHarmReportParam.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/report/AreaHarmReportParam.java @@ -3,6 +3,8 @@ package com.njcn.harmonic.pojo.param.report; import com.njcn.harmonic.pojo.dto.report.CommReportLedgerDto; import lombok.Data; +import java.util.List; + /** * @Author: cdf * @CreateTime: 2026-01-06 @@ -17,6 +19,6 @@ public class AreaHarmReportParam { private String deptId; - private String scale; + private List voltageIds; } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OverAreaLimitVO.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OverAreaLimitVO.java index 32392b2b9..e6dca3eb7 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OverAreaLimitVO.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/OverAreaLimitVO.java @@ -191,6 +191,11 @@ public class OverAreaLimitVO { private Double negativeOverDayBiLi = -1.0; //间谐波电压超标情况 + + /** + * 超标监测点集合,区域报告使用 + */ + private List inHarmonicVMonitorList = new ArrayList<>();; /** * 个数 */ diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java index f03d0dcf2..4efd1230a 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java @@ -535,6 +535,7 @@ public class AnalyzeServiceImpl implements IAnalyzeService { Set flickerMonitorList = new HashSet<>(); Set harmonicVoltageMonitorList = new HashSet<>(); Set harmonicCurrentMonitorList = new HashSet<>(); + Set harmonicInHarmonciVMonitorList = new HashSet<>(); int threeV = 0, fiveV = 0, sevenV = 0, elevenV = 0, otherV = 0; Set threeVList = new HashSet<>(), fiveVList = new HashSet<>(), sevenVList = new HashSet<>(), elevenVList = new HashSet<>(), otherVList = new HashSet<>(); @@ -579,6 +580,8 @@ public class AnalyzeServiceImpl implements IAnalyzeService { inuharmCount++; } + + //区域报告 if (Objects.nonNull(param.getAreaReportFlag()) && param.getAreaReportFlag() == 1) { if (item.getFreqDevOvertime() > 0) { @@ -602,7 +605,9 @@ public class AnalyzeServiceImpl implements IAnalyzeService { } - + if (inHarmFlag(item)) { + harmonicInHarmonciVMonitorList.add(item.getLineId()); + } if (item.getUharm3Overtime() > 0) { threeV++; @@ -646,6 +651,7 @@ public class AnalyzeServiceImpl implements IAnalyzeService { otherI++; otherIList.add(item.getLineId()); } + } } @@ -686,6 +692,8 @@ public class AnalyzeServiceImpl implements IAnalyzeService { //间谐波电压 overAreaLimitVO.setInterHarmonicMonitorNumber(inuharmCount); overAreaLimitVO.setInterHarmonicBiLi(BigDecimal.valueOf(inuharmCount * 1.0 / data.size() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); + overAreaLimitVO.setInHarmonicVMonitorList(new ArrayList<>(harmonicInHarmonciVMonitorList)); + } @@ -938,6 +946,16 @@ public class AnalyzeServiceImpl implements IAnalyzeService { return count > 0; } + private boolean inHarmVFlag(RStatLimitTargetDPO rStatLimitRateDPO) { + int count = rStatLimitRateDPO.getInuharm1Overtime() + rStatLimitRateDPO.getInuharm2Overtime() + rStatLimitRateDPO.getInuharm3Overtime() + + rStatLimitRateDPO.getInuharm4Overtime() + rStatLimitRateDPO.getInuharm5Overtime() + rStatLimitRateDPO.getInuharm6Overtime() + + rStatLimitRateDPO.getInuharm7Overtime() + rStatLimitRateDPO.getInuharm8Overtime() + + rStatLimitRateDPO.getInuharm9Overtime() + rStatLimitRateDPO.getInuharm10Overtime() + rStatLimitRateDPO.getInuharm11Overtime()+ + rStatLimitRateDPO.getInuharm12Overtime() + rStatLimitRateDPO.getInuharm13Overtime() + rStatLimitRateDPO.getInuharm14Overtime()+ + rStatLimitRateDPO.getInuharm15Overtime() + rStatLimitRateDPO.getInuharm16Overtime(); + return count > 0; + } + private boolean inHarmFlag(RStatLimitTargetDPO t) { int count = t.getInuharm1Overtime() + t.getInuharm2Overtime() + t.getInuharm3Overtime() + t.getInuharm4Overtime() + t.getInuharm5Overtime() + t.getInuharm6Overtime() + t.getInuharm7Overtime() + t.getInuharm8Overtime() + t.getInuharm9Overtime() + t.getInuharm10Overtime() + t.getInuharm11Overtime() + t.getInuharm12Overtime() + t.getInuharm13Overtime() + t.getInuharm14Overtime() + t.getInuharm15Overtime() + t.getInuharm16Overtime(); return count > 0; diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/report/impl/AreaHarmonicServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/report/impl/AreaHarmonicServiceImpl.java index 0db7712fd..7ad0dc12b 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/report/impl/AreaHarmonicServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/report/impl/AreaHarmonicServiceImpl.java @@ -133,9 +133,9 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { tableList.add(new ArrayList<>()); // 1. 台账表格 - List ledgerTable = buildLedgerTable(param.getDeptId(),param.getScale()); + List ledgerTable = buildLedgerTable(param.getDeptId(),param.getVoltageIds()); if(CollUtil.isEmpty(ledgerTable)){ - throw new BusinessException(CommonResponseEnum.FAIL,"当前部门不存在在运监测点"); + throw new BusinessException(CommonResponseEnum.FAIL,"未查询到在运监测点"); } tableList.add(ledgerTable); @@ -146,7 +146,7 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { List qualityData = getPowerQualityData(param); if (CollUtil.isNotEmpty(qualityData)) { // 构建监控点名称映射 - Map monitorNameMap = buildMonitorNameMap(param.getDeptId(),param.getScale()); + Map monitorNameMap = buildMonitorNameMap(param.getDeptId(),param.getVoltageIds()); // 过滤有效数据(在线监控数>0) List validData = qualityData.stream() @@ -160,6 +160,7 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { tableList.add(buildFlickerTable(validData)); tableList.add(buildVoltageHarmonicTable(validData)); tableList.add(buildCurrentHarmonicTable(validData)); + tableList.add(buildIHarmonicVTable(validData)); // 计算并设置指标数据到临时存储,稍后合并 calculateAndStoreIndicatorData(reportData, validData, monitorNameMap); @@ -177,8 +178,8 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { /** * 构建台账表格 */ - private List buildLedgerTable(String deptId, String scale) { - List ledgerList = getLedgerInfo(deptId,scale); + private List buildLedgerTable(String deptId, List voltageIds) { + List ledgerList = getLedgerInfo(deptId,voltageIds); if (CollUtil.isEmpty(ledgerList)) { return new ArrayList<>(); } @@ -271,6 +272,23 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { .collect(Collectors.toList()); } + /** + * 构建间谐波表格 + */ + private List buildIHarmonicVTable(List dataList) { + return dataList.stream() + .filter(vo -> vo.getOnlineMonitorNumber() != null && vo.getOnlineMonitorNumber() > 0) + .map(vo -> new String[]{ + vo.getName(), + vo.getOnlineMonitorNumber().toString(), + vo.getInterHarmonicMonitorNumber().toString(), + vo.getInterHarmonicBiLi().toString(), + vo.getInterHarmonicDayAvgBiLi().toString(), + vo.getInterHarmonicOverDayBiLi().toString() + }) + .collect(Collectors.toList()); + } + /** * 构建谐波电压表格 */ @@ -330,7 +348,7 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { vo.getOnlineMonitorNumber().toString(), vo.getHarmonicCurrentMonitorNumber().toString(), vo.getHarmonicCurrentBiLi().toString(), - vo.getHarmonicVoltageDayAvgBiLi().toString(), // 注意:这里保持原逻辑,使用谐波电压日均值 + vo.getHarmonicCurrentDayAvgBiLi().toString(), // 注意:这里保持原逻辑,使用谐波电压日均值 vo.getHarmonicCurrentOverDayBiLi().toString() }); @@ -377,6 +395,8 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { // 谐波电流 processCurrentHarmonic(reportData, validData, monitorNameMap); + //间谐波电压含有率 + processIHarmonicV(reportData, validData, monitorNameMap); // 生成结论 generateConclusion(reportData); } @@ -441,6 +461,22 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { reportData.put("$flickerLine$", formatMonitorList(monitorList)); } + /** + * 处理间谐波电压含有率 + */ + private void processIHarmonicV(Map reportData, + List dataList, + Map monitorNameMap) { + double avgRate = calculateAverage(dataList, OverAreaLimitVO::getInterHarmonicBiLi); + List monitorList = extractMonitorNames(dataList, + vo -> vo.getInHarmonicVMonitorList(), monitorNameMap); + + reportData.put("$iharmVRate$", formatPercentage(avgRate)); + reportData.put("$iharmVMark$", getGrade(avgRate)); + reportData.put("$iharmVLine$", formatMonitorList(monitorList)); + } + + /** * 处理谐波电压 */ @@ -512,7 +548,7 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { indicatorScores.put("闪变", reportData.get("$flickerMark$").toString()); indicatorScores.put("谐波电压", reportData.get("$v_all_Mark$").toString()); indicatorScores.put("谐波电流", reportData.get("$i_all_Mark$").toString()); - + indicatorScores.put("间谐波电压含有率", reportData.get("$iharmVMark$").toString()); // 按等级分类指标 Map> categorizedIndicators = categorizeIndicators(indicatorScores); @@ -751,12 +787,12 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { /** * 获取台账信息 */ - private List getLedgerInfo(String deptId, String scale) { + private List getLedgerInfo(String deptId, List voltageIds) { DeptGetLineParam param = new DeptGetLineParam(); param.setDeptId(deptId); List data = commTerminalGeneralClient.deptGetLineInfo(param).getData(); - if(StringUtils.hasText(scale)){ - data=data.stream().filter(temp->Objects.equals(scale,temp.getVoltageLevel())).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(voltageIds)){ + data=data.stream().filter(temp->voltageIds.contains(temp.getVoltageLevel())).collect(Collectors.toList()); } return data; } @@ -775,8 +811,8 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService { /** * 构建监控点名称映射 */ - private Map buildMonitorNameMap(String deptId, String scale) { - List ledgerList = getLedgerInfo(deptId, scale); + private Map buildMonitorNameMap(String deptId, List voltageIds) { + List ledgerList = getLedgerInfo(deptId, voltageIds); return ledgerList.stream() .collect(Collectors.toMap( MonitorCommLedgerInfoDTO::getMonitorId, diff --git a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java index 682006ae0..3e5828f59 100644 --- a/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java +++ b/pqs-harmonic/harmonic-common/src/main/java/com/njcn/harmonic/common/service/impl/CustomReportTableServiceImpl.java @@ -581,16 +581,19 @@ public class CustomReportTableServiceImpl implements CustomReportTableService { } catch (Exception e) { // 自定义报表防止没有默认模板,从resource目录加载默认模板 String defaultTemplatePath = "file/default_excel_report.json"; - InputStream defaultStream = getClass().getClassLoader().getResourceAsStream(defaultTemplatePath); - if (defaultStream == null) { - if (e instanceof BusinessException) { - throw new BusinessException(e.getMessage()); + try (InputStream defaultStream = getClass().getClassLoader().getResourceAsStream(defaultTemplatePath)) { + if (defaultStream == null) { + if (e instanceof BusinessException) { + throw new BusinessException(e.getMessage()); + } else { + throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); + } } else { - throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); + jsonArray = new JSONArray(new JSONTokener(defaultStream, new JSONConfig())); + parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList); } - }else { - jsonArray = new JSONArray(new JSONTokener(defaultStream, new JSONConfig())); - parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList); + }catch (Exception e1){ + throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); } } //查询不分相别的指标