区域报告修改,添加间谐波电压含有率

This commit is contained in:
cdf
2026-06-07 15:55:50 +08:00
parent 748fd62afb
commit 50181459bf
5 changed files with 86 additions and 22 deletions

View File

@@ -3,6 +3,8 @@ package com.njcn.harmonic.pojo.param.report;
import com.njcn.harmonic.pojo.dto.report.CommReportLedgerDto; import com.njcn.harmonic.pojo.dto.report.CommReportLedgerDto;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* @Author: cdf * @Author: cdf
* @CreateTime: 2026-01-06 * @CreateTime: 2026-01-06
@@ -17,6 +19,6 @@ public class AreaHarmReportParam {
private String deptId; private String deptId;
private String scale; private List<String> voltageIds;
} }

View File

@@ -191,6 +191,11 @@ public class OverAreaLimitVO {
private Double negativeOverDayBiLi = -1.0; private Double negativeOverDayBiLi = -1.0;
//间谐波电压超标情况 //间谐波电压超标情况
/**
* 超标监测点集合,区域报告使用
*/
private List<String> inHarmonicVMonitorList = new ArrayList<>();;
/** /**
* 个数 * 个数
*/ */

View File

@@ -535,6 +535,7 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
Set<String> flickerMonitorList = new HashSet<>(); Set<String> flickerMonitorList = new HashSet<>();
Set<String> harmonicVoltageMonitorList = new HashSet<>(); Set<String> harmonicVoltageMonitorList = new HashSet<>();
Set<String> harmonicCurrentMonitorList = new HashSet<>(); Set<String> harmonicCurrentMonitorList = new HashSet<>();
Set<String> harmonicInHarmonciVMonitorList = new HashSet<>();
int threeV = 0, fiveV = 0, sevenV = 0, elevenV = 0, otherV = 0; int threeV = 0, fiveV = 0, sevenV = 0, elevenV = 0, otherV = 0;
Set<String> threeVList = new HashSet<>(), fiveVList = new HashSet<>(), sevenVList = new HashSet<>(), elevenVList = new HashSet<>(), otherVList = new HashSet<>(); Set<String> 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++; inuharmCount++;
} }
//区域报告 //区域报告
if (Objects.nonNull(param.getAreaReportFlag()) && param.getAreaReportFlag() == 1) { if (Objects.nonNull(param.getAreaReportFlag()) && param.getAreaReportFlag() == 1) {
if (item.getFreqDevOvertime() > 0) { if (item.getFreqDevOvertime() > 0) {
@@ -602,7 +605,9 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
} }
if (inHarmFlag(item)) {
harmonicInHarmonciVMonitorList.add(item.getLineId());
}
if (item.getUharm3Overtime() > 0) { if (item.getUharm3Overtime() > 0) {
threeV++; threeV++;
@@ -646,6 +651,7 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
otherI++; otherI++;
otherIList.add(item.getLineId()); otherIList.add(item.getLineId());
} }
} }
} }
@@ -686,6 +692,8 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
//间谐波电压 //间谐波电压
overAreaLimitVO.setInterHarmonicMonitorNumber(inuharmCount); overAreaLimitVO.setInterHarmonicMonitorNumber(inuharmCount);
overAreaLimitVO.setInterHarmonicBiLi(BigDecimal.valueOf(inuharmCount * 1.0 / data.size() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); 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; 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) { 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(); 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; return count > 0;

View File

@@ -133,9 +133,9 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
tableList.add(new ArrayList<>()); tableList.add(new ArrayList<>());
// 1. 台账表格 // 1. 台账表格
List<String[]> ledgerTable = buildLedgerTable(param.getDeptId(),param.getScale()); List<String[]> ledgerTable = buildLedgerTable(param.getDeptId(),param.getVoltageIds());
if(CollUtil.isEmpty(ledgerTable)){ if(CollUtil.isEmpty(ledgerTable)){
throw new BusinessException(CommonResponseEnum.FAIL,"当前部门不存在在运监测点"); throw new BusinessException(CommonResponseEnum.FAIL,"未查询到在运监测点");
} }
tableList.add(ledgerTable); tableList.add(ledgerTable);
@@ -146,7 +146,7 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
List<OverAreaLimitVO> qualityData = getPowerQualityData(param); List<OverAreaLimitVO> qualityData = getPowerQualityData(param);
if (CollUtil.isNotEmpty(qualityData)) { if (CollUtil.isNotEmpty(qualityData)) {
// 构建监控点名称映射 // 构建监控点名称映射
Map<String, String> monitorNameMap = buildMonitorNameMap(param.getDeptId(),param.getScale()); Map<String, String> monitorNameMap = buildMonitorNameMap(param.getDeptId(),param.getVoltageIds());
// 过滤有效数据(在线监控数>0 // 过滤有效数据(在线监控数>0
List<OverAreaLimitVO> validData = qualityData.stream() List<OverAreaLimitVO> validData = qualityData.stream()
@@ -160,6 +160,7 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
tableList.add(buildFlickerTable(validData)); tableList.add(buildFlickerTable(validData));
tableList.add(buildVoltageHarmonicTable(validData)); tableList.add(buildVoltageHarmonicTable(validData));
tableList.add(buildCurrentHarmonicTable(validData)); tableList.add(buildCurrentHarmonicTable(validData));
tableList.add(buildIHarmonicVTable(validData));
// 计算并设置指标数据到临时存储,稍后合并 // 计算并设置指标数据到临时存储,稍后合并
calculateAndStoreIndicatorData(reportData, validData, monitorNameMap); calculateAndStoreIndicatorData(reportData, validData, monitorNameMap);
@@ -177,8 +178,8 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
/** /**
* 构建台账表格 * 构建台账表格
*/ */
private List<String[]> buildLedgerTable(String deptId, String scale) { private List<String[]> buildLedgerTable(String deptId, List<String> voltageIds) {
List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId,scale); List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId,voltageIds);
if (CollUtil.isEmpty(ledgerList)) { if (CollUtil.isEmpty(ledgerList)) {
return new ArrayList<>(); return new ArrayList<>();
} }
@@ -271,6 +272,23 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
/**
* 构建间谐波表格
*/
private List<String[]> buildIHarmonicVTable(List<OverAreaLimitVO> 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.getOnlineMonitorNumber().toString(),
vo.getHarmonicCurrentMonitorNumber().toString(), vo.getHarmonicCurrentMonitorNumber().toString(),
vo.getHarmonicCurrentBiLi().toString(), vo.getHarmonicCurrentBiLi().toString(),
vo.getHarmonicVoltageDayAvgBiLi().toString(), // 注意:这里保持原逻辑,使用谐波电压日均值 vo.getHarmonicCurrentDayAvgBiLi().toString(), // 注意:这里保持原逻辑,使用谐波电压日均值
vo.getHarmonicCurrentOverDayBiLi().toString() vo.getHarmonicCurrentOverDayBiLi().toString()
}); });
@@ -377,6 +395,8 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
// 谐波电流 // 谐波电流
processCurrentHarmonic(reportData, validData, monitorNameMap); processCurrentHarmonic(reportData, validData, monitorNameMap);
//间谐波电压含有率
processIHarmonicV(reportData, validData, monitorNameMap);
// 生成结论 // 生成结论
generateConclusion(reportData); generateConclusion(reportData);
} }
@@ -441,6 +461,22 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
reportData.put("$flickerLine$", formatMonitorList(monitorList)); reportData.put("$flickerLine$", formatMonitorList(monitorList));
} }
/**
* 处理间谐波电压含有率
*/
private void processIHarmonicV(Map<String, Object> reportData,
List<OverAreaLimitVO> dataList,
Map<String, String> monitorNameMap) {
double avgRate = calculateAverage(dataList, OverAreaLimitVO::getInterHarmonicBiLi);
List<String> 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("$flickerMark$").toString());
indicatorScores.put("谐波电压", reportData.get("$v_all_Mark$").toString()); indicatorScores.put("谐波电压", reportData.get("$v_all_Mark$").toString());
indicatorScores.put("谐波电流", reportData.get("$i_all_Mark$").toString()); indicatorScores.put("谐波电流", reportData.get("$i_all_Mark$").toString());
indicatorScores.put("间谐波电压含有率", reportData.get("$iharmVMark$").toString());
// 按等级分类指标 // 按等级分类指标
Map<String, List<String>> categorizedIndicators = categorizeIndicators(indicatorScores); Map<String, List<String>> categorizedIndicators = categorizeIndicators(indicatorScores);
@@ -751,12 +787,12 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
/** /**
* 获取台账信息 * 获取台账信息
*/ */
private List<MonitorCommLedgerInfoDTO> getLedgerInfo(String deptId, String scale) { private List<MonitorCommLedgerInfoDTO> getLedgerInfo(String deptId, List<String> voltageIds) {
DeptGetLineParam param = new DeptGetLineParam(); DeptGetLineParam param = new DeptGetLineParam();
param.setDeptId(deptId); param.setDeptId(deptId);
List<MonitorCommLedgerInfoDTO> data = commTerminalGeneralClient.deptGetLineInfo(param).getData(); List<MonitorCommLedgerInfoDTO> data = commTerminalGeneralClient.deptGetLineInfo(param).getData();
if(StringUtils.hasText(scale)){ if(CollUtil.isNotEmpty(voltageIds)){
data=data.stream().filter(temp->Objects.equals(scale,temp.getVoltageLevel())).collect(Collectors.toList()); data=data.stream().filter(temp->voltageIds.contains(temp.getVoltageLevel())).collect(Collectors.toList());
} }
return data; return data;
} }
@@ -775,8 +811,8 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
/** /**
* 构建监控点名称映射 * 构建监控点名称映射
*/ */
private Map<String, String> buildMonitorNameMap(String deptId, String scale) { private Map<String, String> buildMonitorNameMap(String deptId, List<String> voltageIds) {
List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId, scale); List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId, voltageIds);
return ledgerList.stream() return ledgerList.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(
MonitorCommLedgerInfoDTO::getMonitorId, MonitorCommLedgerInfoDTO::getMonitorId,

View File

@@ -581,17 +581,20 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
} catch (Exception e) { } catch (Exception e) {
// 自定义报表防止没有默认模板从resource目录加载默认模板 // 自定义报表防止没有默认模板从resource目录加载默认模板
String defaultTemplatePath = "file/default_excel_report.json"; String defaultTemplatePath = "file/default_excel_report.json";
InputStream defaultStream = getClass().getClassLoader().getResourceAsStream(defaultTemplatePath); try (InputStream defaultStream = getClass().getClassLoader().getResourceAsStream(defaultTemplatePath)) {
if (defaultStream == null) { if (defaultStream == null) {
if (e instanceof BusinessException) { if (e instanceof BusinessException) {
throw new BusinessException(e.getMessage()); throw new BusinessException(e.getMessage());
} else { } else {
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON); throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
} }
}else { } else {
jsonArray = new JSONArray(new JSONTokener(defaultStream, new JSONConfig())); jsonArray = new JSONArray(new JSONTokener(defaultStream, new JSONConfig()));
parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList); parseTemplate(jsonArray, reportTemplateDTOList, reportLimitList, terminalList);
} }
}catch (Exception e1){
throw new BusinessException(HarmonicResponseEnum.CUSTOM_REPORT_JSON);
}
} }
//查询不分相别的指标 //查询不分相别的指标
DictData dictData = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.EPD.getCode(), DicDataTypeEnum.CS_DATA_TYPE.getCode()).getData(); DictData dictData = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.EPD.getCode(), DicDataTypeEnum.CS_DATA_TYPE.getCode()).getData();