河北超高压算法-基准水平添加均值和标准差数据

This commit is contained in:
2024-02-28 09:43:34 +08:00
parent 76d4f61670
commit a739eed039
2 changed files with 125 additions and 18 deletions

View File

@@ -26,7 +26,7 @@
select select
`time`, `time`,
line_id, line_id,
max(rms) rms max(rms_lvr) rms
from from
r_stat_data_v_d r_stat_data_v_d
where where

View File

@@ -9,10 +9,13 @@ import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetBase; import com.njcn.device.biz.pojo.dto.DeptGetBase;
import com.njcn.device.biz.pojo.dto.DeptGetBusBarDTO; import com.njcn.device.biz.pojo.dto.DeptGetBusBarDTO;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.pojo.po.GeneratrixWire; import com.njcn.device.pms.pojo.po.GeneratrixWire;
import com.njcn.device.pms.pojo.po.Monitor; import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.po.PmsMidLedger; import com.njcn.device.pms.pojo.po.PmsMidLedger;
import com.njcn.harmonic.pojo.dto.LineDataDto;
import com.njcn.harmonic.pojo.po.dim.RDimVoltageD;
import com.njcn.harmonic.pojo.po.upload.RUploadEvaluationDataD; import com.njcn.harmonic.pojo.po.upload.RUploadEvaluationDataD;
import com.njcn.prepare.harmonic.enums.UploadEnum; import com.njcn.prepare.harmonic.enums.UploadEnum;
import com.njcn.prepare.harmonic.mapper.mysql.dim.GeneratrixWireMapper; import com.njcn.prepare.harmonic.mapper.mysql.dim.GeneratrixWireMapper;
@@ -101,46 +104,60 @@ public class RUploadEvaluationDataDServiceImpl extends MppServiceImpl<RUploadEva
this.judgeLevel(item.getDeptLevel(),rUploadEvaluationDataD,item.getUnitId(),item.getUnitName(),deptList,deptMap); this.judgeLevel(item.getDeptLevel(),rUploadEvaluationDataD,item.getUnitId(),item.getUnitName(),deptList,deptMap);
BusBarDto busBarDto = allDept.stream().filter(o->Objects.equals(o.getOrgId(),item.getUnitId())).findFirst().orElse(null); BusBarDto busBarDto = allDept.stream().filter(o->Objects.equals(o.getOrgId(),item.getUnitId())).findFirst().orElse(null);
//fixme 这边均值和标准差算法较为复杂,同时国网不要求上送,暂不计算
/*** 计算无电压等级的数据*/ /*** 计算无电压等级的数据*/
RUploadEvaluationDataD dto = this.getLineNum(busBarDto,"0"); RUploadEvaluationDataD dto = this.getLineNum(busBarDto,"0");
//电压 //电压
RUploadEvaluationDataD dto1 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_01.getCode(),0,"0",dto); RUploadEvaluationDataD dto1 = this.channelData(rUploadEvaluationDataD,defaultValue,defaultValue,UploadEnum.INDEX_TYPE_01.getCode(),0,"0",dto);
result.add(dto1); result.add(dto1);
//长时间闪变 //长时间闪变
RUploadEvaluationDataD dto2 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_02.getCode(),0,"0",dto); RUploadEvaluationDataD dto2 = this.channelData(rUploadEvaluationDataD,defaultValue,defaultValue,UploadEnum.INDEX_TYPE_02.getCode(),0,"0",dto);
result.add(dto2); result.add(dto2);
//三相电压不平衡 //三相电压不平衡
RUploadEvaluationDataD dto3 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_03.getCode(),0,"0",dto); RUploadEvaluationDataD dto3 = this.channelData(rUploadEvaluationDataD,defaultValue,defaultValue,UploadEnum.INDEX_TYPE_03.getCode(),0,"0",dto);
result.add(dto3); result.add(dto3);
//电压总谐波畸变率 //电压总谐波畸变率
RUploadEvaluationDataD dto4 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_04.getCode(),0,"0",dto); RUploadEvaluationDataD dto4 = this.channelData(rUploadEvaluationDataD,defaultValue,defaultValue,UploadEnum.INDEX_TYPE_04.getCode(),0,"0",dto);
result.add(dto4); result.add(dto4);
//各次谐波电压 //各次谐波电压
this.channelHarmonicData(rUploadEvaluationDataD,result,null,UploadEnum.INDEX_TYPE_05.getCode(),"0",dto); this.channelHarmonicData(rUploadEvaluationDataD,result,null,UploadEnum.INDEX_TYPE_05.getCode(),"0",dto,null);
//负序电流 //负序电流
RUploadEvaluationDataD dto6 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_06.getCode(),0,"0",dto); RUploadEvaluationDataD dto6 = this.channelData(rUploadEvaluationDataD,defaultValue,defaultValue,UploadEnum.INDEX_TYPE_06.getCode(),0,"0",dto);
result.add(dto6); result.add(dto6);
/*** 计算分电压等级的数据*/ /*** 计算分电压等级的数据*/
if (CollUtil.isNotEmpty(busBarDto.getVoltageChild())){ if (CollUtil.isNotEmpty(busBarDto.getVoltageChild())){
busBarDto.getVoltageChild().forEach(item2->{ busBarDto.getVoltageChild().forEach(item2->{
RDimVoltageD rDimVoltageD = this.getDimVoltageData(item.getUnitId(),calculatedParam.getDataDate(),item2.getVoltageLevel());
RUploadEvaluationDataD dto0 = this.getLineNum(busBarDto,item2.getVoltageLevel()); RUploadEvaluationDataD dto0 = this.getLineNum(busBarDto,item2.getVoltageLevel());
//电压 //电压
RUploadEvaluationDataD dto11 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_01.getCode(),0,item2.getVoltageLevel(),dto0); double sd1 = this.getDimVoltageDataSd(item2.getVoltageLevel(),Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getV(),calculatedParam.getDataDate(),item.getLineBaseList(),UploadEnum.INDEX_TYPE_01.getCode(),null);
RUploadEvaluationDataD dto11 = this.channelData(rUploadEvaluationDataD,Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getV(),sd1,UploadEnum.INDEX_TYPE_01.getCode(),0,item2.getVoltageLevel(),dto0);
result.add(dto11); result.add(dto11);
//长时间闪变 //长时间闪变
RUploadEvaluationDataD dto22 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_02.getCode(),0,item2.getVoltageLevel(),dto0); double sd2 = this.getDimVoltageDataSd(item2.getVoltageLevel(),Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getPst(),calculatedParam.getDataDate(),item.getLineBaseList(),UploadEnum.INDEX_TYPE_02.getCode(),null);
RUploadEvaluationDataD dto22 = this.channelData(rUploadEvaluationDataD,Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getPst(),sd2,UploadEnum.INDEX_TYPE_02.getCode(),0,item2.getVoltageLevel(),dto0);
result.add(dto22); result.add(dto22);
//三相电压不平衡 //三相电压不平衡
RUploadEvaluationDataD dto33 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_03.getCode(),0,item2.getVoltageLevel(),dto0); double sd3 = this.getDimVoltageDataSd(item2.getVoltageLevel(),Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getVUnbalance(),calculatedParam.getDataDate(),item.getLineBaseList(),UploadEnum.INDEX_TYPE_03.getCode(),null);
RUploadEvaluationDataD dto33 = this.channelData(rUploadEvaluationDataD,Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getVUnbalance(),sd3,UploadEnum.INDEX_TYPE_03.getCode(),0,item2.getVoltageLevel(),dto0);
result.add(dto33); result.add(dto33);
//电压总谐波畸变率 //电压总谐波畸变率
RUploadEvaluationDataD dto44 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_04.getCode(),0,item2.getVoltageLevel(),dto0); double sd4 = this.getDimVoltageDataSd(item2.getVoltageLevel(),Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getVThd(),calculatedParam.getDataDate(),item.getLineBaseList(),UploadEnum.INDEX_TYPE_04.getCode(),null);
RUploadEvaluationDataD dto44 = this.channelData(rUploadEvaluationDataD,Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getVThd(),sd4,UploadEnum.INDEX_TYPE_04.getCode(),0,item2.getVoltageLevel(),dto0);
result.add(dto44); result.add(dto44);
//各次谐波电压 //各次谐波电压
this.channelHarmonicData(rUploadEvaluationDataD,result,null,UploadEnum.INDEX_TYPE_05.getCode(),item2.getVoltageLevel(),dto0); List<Double> valueList = new ArrayList<>();
if (!Objects.isNull(rDimVoltageD)){
valueList = Arrays.asList(rDimVoltageD.getV2(),rDimVoltageD.getV3(),rDimVoltageD.getV4(),rDimVoltageD.getV5(),rDimVoltageD.getV6(),rDimVoltageD.getV7(),rDimVoltageD.getV8(),rDimVoltageD.getV9(),rDimVoltageD.getV10()
,rDimVoltageD.getV11(),rDimVoltageD.getV12(),rDimVoltageD.getV13(),rDimVoltageD.getV14(),rDimVoltageD.getV15(),rDimVoltageD.getV16(),rDimVoltageD.getV17(),rDimVoltageD.getV18(),rDimVoltageD.getV19(),rDimVoltageD.getV20()
,rDimVoltageD.getV21(),rDimVoltageD.getV22(),rDimVoltageD.getV23(),rDimVoltageD.getV24(),rDimVoltageD.getV25(),rDimVoltageD.getV26(),rDimVoltageD.getV27(),rDimVoltageD.getV28(),rDimVoltageD.getV29(),rDimVoltageD.getV30()
,rDimVoltageD.getV31(),rDimVoltageD.getV32(),rDimVoltageD.getV33(),rDimVoltageD.getV34(),rDimVoltageD.getV35(),rDimVoltageD.getV36(),rDimVoltageD.getV37(),rDimVoltageD.getV38(),rDimVoltageD.getV39(),rDimVoltageD.getV40()
,rDimVoltageD.getV41(),rDimVoltageD.getV42(),rDimVoltageD.getV43(),rDimVoltageD.getV44(),rDimVoltageD.getV45(),rDimVoltageD.getV46(),rDimVoltageD.getV47(),rDimVoltageD.getV48(),rDimVoltageD.getV49(),rDimVoltageD.getV50());
}
this.channelHarmonicData(rUploadEvaluationDataD,result,valueList,UploadEnum.INDEX_TYPE_05.getCode(),item2.getVoltageLevel(),dto0,item.getLineBaseList());
//负序电流 //负序电流
RUploadEvaluationDataD dto66 = this.channelData(rUploadEvaluationDataD,defaultValue,UploadEnum.INDEX_TYPE_06.getCode(),0,item2.getVoltageLevel(),dto0); double sd6 = this.getDimVoltageDataSd(item2.getVoltageLevel(),Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getINeg(),calculatedParam.getDataDate(),item.getLineBaseList(),UploadEnum.INDEX_TYPE_06.getCode(),null);
RUploadEvaluationDataD dto66 = this.channelData(rUploadEvaluationDataD,Objects.isNull(rDimVoltageD)?defaultValue:rDimVoltageD.getINeg(),sd6,UploadEnum.INDEX_TYPE_06.getCode(),0,item2.getVoltageLevel(),dto0);
result.add(dto66); result.add(dto66);
}); });
} }
@@ -334,14 +351,14 @@ public class RUploadEvaluationDataDServiceImpl extends MppServiceImpl<RUploadEva
/** /**
* 单个指标数据处理 * 单个指标数据处理
*/ */
public RUploadEvaluationDataD channelData(RUploadEvaluationDataD rUploadEvaluationDataD,Double value, String indexType, Integer harmonicNum, String voltage,RUploadEvaluationDataD rUploadEvaluationDataD2) { public RUploadEvaluationDataD channelData(RUploadEvaluationDataD rUploadEvaluationDataD,Double value, Double sd, String indexType, Integer harmonicNum, String voltage,RUploadEvaluationDataD rUploadEvaluationDataD2) {
RUploadEvaluationDataD dto = new RUploadEvaluationDataD(); RUploadEvaluationDataD dto = new RUploadEvaluationDataD();
BeanUtils.copyProperties(rUploadEvaluationDataD,dto); BeanUtils.copyProperties(rUploadEvaluationDataD,dto);
dto.setId(IdUtil.simpleUUID()); dto.setId(IdUtil.simpleUUID());
dto.setAvgValue(value); dto.setAvgValue(value);
dto.setIndexType(indexType); dto.setIndexType(indexType);
dto.setHarmonicNum(harmonicNum); dto.setHarmonicNum(harmonicNum);
dto.setStandardDeviation(value==3.1415926?3.1415926:0d); dto.setStandardDeviation(sd);
dto.setVoltageLevel(voltage); dto.setVoltageLevel(voltage);
dto.setMonitorBusNum(rUploadEvaluationDataD2.getMonitorBusNum()); dto.setMonitorBusNum(rUploadEvaluationDataD2.getMonitorBusNum());
dto.setOnlineBusNum(rUploadEvaluationDataD2.getOnlineBusNum()); dto.setOnlineBusNum(rUploadEvaluationDataD2.getOnlineBusNum());
@@ -352,7 +369,7 @@ public class RUploadEvaluationDataDServiceImpl extends MppServiceImpl<RUploadEva
/** /**
* 各次谐波电压数据处理 * 各次谐波电压数据处理
*/ */
public void channelHarmonicData(RUploadEvaluationDataD rUploadEvaluationDataD,List<RUploadEvaluationDataD> result,List<Double> valueList, String indexType, String voltage,RUploadEvaluationDataD rUploadEvaluationDataD2) { public void channelHarmonicData(RUploadEvaluationDataD rUploadEvaluationDataD,List<RUploadEvaluationDataD> result,List<Double> valueList, String indexType, String voltage,RUploadEvaluationDataD rUploadEvaluationDataD2,List<LineDevGetDTO> line) {
final Double defaultValue = 3.1415926; final Double defaultValue = 3.1415926;
int length; int length;
if (!Objects.isNull(valueList)){ if (!Objects.isNull(valueList)){
@@ -367,7 +384,12 @@ public class RUploadEvaluationDataDServiceImpl extends MppServiceImpl<RUploadEva
dto.setAvgValue(CollUtil.isNotEmpty(valueList)?valueList.get(i):defaultValue); dto.setAvgValue(CollUtil.isNotEmpty(valueList)?valueList.get(i):defaultValue);
dto.setIndexType(indexType); dto.setIndexType(indexType);
dto.setHarmonicNum(i+2); dto.setHarmonicNum(i+2);
dto.setStandardDeviation(CollUtil.isNotEmpty(valueList)?Objects.equals(valueList.get(i),defaultValue)?defaultValue:0d:defaultValue); if (Objects.equals(voltage, "0")){
dto.setStandardDeviation(defaultValue);
} else {
double sd = this.getDimVoltageDataSd(voltage,dto.getAvgValue(),dto.getStatisticalDate(),line,indexType,dto.getHarmonicNum());
dto.setStandardDeviation(sd);
}
dto.setVoltageLevel(voltage); dto.setVoltageLevel(voltage);
dto.setMonitorBusNum(rUploadEvaluationDataD2.getMonitorBusNum()); dto.setMonitorBusNum(rUploadEvaluationDataD2.getMonitorBusNum());
dto.setOnlineBusNum(rUploadEvaluationDataD2.getOnlineBusNum()); dto.setOnlineBusNum(rUploadEvaluationDataD2.getOnlineBusNum());
@@ -375,4 +397,89 @@ public class RUploadEvaluationDataDServiceImpl extends MppServiceImpl<RUploadEva
result.add(dto); result.add(dto);
} }
} }
/**
* 获取单位母线的均值数据
*/
public RDimVoltageD getDimVoltageData(String orgId, String time, String voltage) {
LambdaQueryWrapper<RDimVoltageD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(RDimVoltageD::getOrgId, orgId)
.eq(RDimVoltageD::getStatisDate,time)
.eq(RDimVoltageD::getVoltageType,voltage);
return rDimVoltageDMapper.selectOne(lambdaQueryWrapper);
}
/**
* 获取不同电压等级母线下的监测点数据,用于计算标准差
*/
public Double getDimVoltageDataSd(String voltage, Double avg, String time, List<LineDevGetDTO> line, String type, Integer times) {
double standardDeviation = 3.1415926;
if (Objects.equals(avg,standardDeviation)){
return standardDeviation;
}
//获取监测点数据
if (CollUtil.isNotEmpty(line)){
Map<String,List<LineDevGetDTO>> map = line.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel));
if (!Objects.isNull(map.get(voltage))){
Set<String> lineSet = map.get(voltage).stream().map(LineDevGetDTO::getPointId).collect(Collectors.toSet());
List<LineDataDto> dataList = rDimVoltageDMapper.getLineData(time,time,lineSet);
//根据平均值计算每个指标的标准差
if (CollUtil.isNotEmpty(dataList)){
double total = this.getDataByType(type,avg,dataList,times);
//计算标准差
standardDeviation = Math.sqrt(total/dataList.size());
}
}
}
return standardDeviation;
}
/**
* 不同指标标准差算法
*/
public Double getDataByType(String type, Double avg, List<LineDataDto> dataList, Integer times) {
double total = 0.0;
switch (type) {
case "01":
for (LineDataDto lineDataDto : dataList) {
total += (lineDataDto.getRms() - avg) * (lineDataDto.getRms() - avg);
}
return total;
case "02":
for (LineDataDto lineDataDto : dataList) {
total += (lineDataDto.getPst() - avg) * (lineDataDto.getPst() - avg);
}
return total;
case "03":
for (LineDataDto lineDataDto : dataList) {
total += (lineDataDto.getVUnbalance() - avg) * (lineDataDto.getVUnbalance() - avg);
}
return total;
case "04":
for (LineDataDto lineDataDto : dataList) {
total += (lineDataDto.getVThd() - avg) * (lineDataDto.getVThd() - avg);
}
return total;
case "05":
for (LineDataDto lineDataDto : dataList) {
try {
double value = (double) lineDataDto.getClass().getMethod("getV" + times).invoke(lineDataDto);
total += (value - avg) * (value - avg);
} catch (Exception e) {
log.error(e.getMessage());
}
}
return total;
case "06":
for (LineDataDto lineDataDto : dataList) {
total += (lineDataDto.getINeg() - avg) * (lineDataDto.getINeg() - avg);
}
return total;
default:
return 3.1415926;
}
}
} }