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

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

@@ -535,6 +535,7 @@ public class AnalyzeServiceImpl implements IAnalyzeService {
Set<String> flickerMonitorList = new HashSet<>();
Set<String> harmonicVoltageMonitorList = new HashSet<>();
Set<String> harmonicCurrentMonitorList = new HashSet<>();
Set<String> harmonicInHarmonciVMonitorList = new HashSet<>();
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<>();
@@ -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;

View File

@@ -133,9 +133,9 @@ public class AreaHarmonicServiceImpl implements AreaHarmonicService {
tableList.add(new ArrayList<>());
// 1. 台账表格
List<String[]> ledgerTable = buildLedgerTable(param.getDeptId(),param.getScale());
List<String[]> 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<OverAreaLimitVO> qualityData = getPowerQualityData(param);
if (CollUtil.isNotEmpty(qualityData)) {
// 构建监控点名称映射
Map<String, String> monitorNameMap = buildMonitorNameMap(param.getDeptId(),param.getScale());
Map<String, String> monitorNameMap = buildMonitorNameMap(param.getDeptId(),param.getVoltageIds());
// 过滤有效数据(在线监控数>0
List<OverAreaLimitVO> 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<String[]> buildLedgerTable(String deptId, String scale) {
List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId,scale);
private List<String[]> buildLedgerTable(String deptId, List<String> voltageIds) {
List<MonitorCommLedgerInfoDTO> 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<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.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<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("$v_all_Mark$").toString());
indicatorScores.put("谐波电流", reportData.get("$i_all_Mark$").toString());
indicatorScores.put("间谐波电压含有率", reportData.get("$iharmVMark$").toString());
// 按等级分类指标
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();
param.setDeptId(deptId);
List<MonitorCommLedgerInfoDTO> 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<String, String> buildMonitorNameMap(String deptId, String scale) {
List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId, scale);
private Map<String, String> buildMonitorNameMap(String deptId, List<String> voltageIds) {
List<MonitorCommLedgerInfoDTO> ledgerList = getLedgerInfo(deptId, voltageIds);
return ledgerList.stream()
.collect(Collectors.toMap(
MonitorCommLedgerInfoDTO::getMonitorId,