区域报告修改,添加间谐波电压含有率
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,6 +191,11 @@ public class OverAreaLimitVO {
|
|||||||
private Double negativeOverDayBiLi = -1.0;
|
private Double negativeOverDayBiLi = -1.0;
|
||||||
|
|
||||||
//间谐波电压超标情况
|
//间谐波电压超标情况
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 超标监测点集合,区域报告使用
|
||||||
|
*/
|
||||||
|
private List<String> inHarmonicVMonitorList = new ArrayList<>();;
|
||||||
/**
|
/**
|
||||||
* 个数
|
* 个数
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -581,7 +581,7 @@ 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());
|
||||||
@@ -592,6 +592,9 @@ public class CustomReportTableServiceImpl implements CustomReportTableService {
|
|||||||
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();
|
||||||
|
|||||||
Reference in New Issue
Block a user