完成综合评估算法

This commit is contained in:
wr
2025-03-19 16:31:03 +08:00
parent a72c956921
commit 0f54dc5199
74 changed files with 3580 additions and 249 deletions

View File

@@ -33,6 +33,10 @@ public class MeasurementExecutor extends BaseExecutor {
private IDataIntegrityService dataIntegrityService;
@Resource
private IEventDetailService eventDetailService;
@Resource
private IDataComAssService dataComAssService;
@Resource
private IPollutionService pollutionService;
/**
* 数据清洗 电压表
@@ -389,6 +393,36 @@ public class MeasurementExecutor extends BaseExecutor {
dataCrossingService.limitQualifiedDayHandler(bindCmp.getRequestData());
}
/**
* 综合评估
* @param bindCmp
* @return
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataComAss", nodeType = NodeTypeEnum.COMMON)
public boolean dataComAssAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataComAss", nodeType = NodeTypeEnum.COMMON)
public void dataComAssProcess(NodeComponent bindCmp) {
dataComAssService.dataComAssHandler(bindCmp.getRequestData());
}
/**
* 监测点污区图
* @param bindCmp
* @return
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataPollution", nodeType = NodeTypeEnum.COMMON)
public boolean dataPollutionAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataPollution", nodeType = NodeTypeEnum.COMMON)
public void dataPollutionProcess(NodeComponent bindCmp) {
pollutionService.handleDay(bindCmp.getRequestData());
}
/**
* 监测点数据完整性

View File

@@ -0,0 +1,25 @@
package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
/**
* @Description:
* @Author: wr
* @Date: 2025/3/6 10:22
*/
public interface IDataComAssService {
/**
* 电能质量综合评估-日表
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/18 13:48
*/
void dataComAssHandler(CalculatedParam calculatedParam);
}

View File

@@ -1,11 +1,81 @@
package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
/**
* 测点污区数据
*/
public interface IPollutionService {
/**
* 监测点误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleDay(CalculatedParam<String> calculatedParam);
/**
* 单位(天)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleOrgDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
/**
* 单位(月)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleOrgMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
/**
* 单位(季)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleOrgQtr(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
/**
* 单位(年)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleOrgYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
/**
* 变电站(天)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleSubstationDay(CalculatedParam<String> calculatedParam);
/**
* 变电站(月)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleSubstationMonth(CalculatedParam<String> calculatedParam);
/**
* 变电站(季)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleSubstationQtr(CalculatedParam<String> calculatedParam);
/**
* 变电站(年)误区图计算
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/19 14:03
*/
void handleSubstationYear(CalculatedParam<String> calculatedParam);
}

View File

@@ -0,0 +1,267 @@
package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataComAssService;
import com.njcn.dataProcess.api.DataComAssFeignClient;
import com.njcn.dataProcess.api.DataFlickerFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.DataComassesDPO;
import com.njcn.dataProcess.util.TimeUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
/**
* @Description:
* @Author: wr
* @Date: 2025/3/18 13:47
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class DataComAssServiceImpl implements IDataComAssService {
private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class);
@Value("${line.num}")
private Integer NUM = 100;
@Resource
private DataVFeignClient dataVFeignClient;
@Resource
private DataFlickerFeignClient dataFlickerFeignClient;
@Resource
private DataComAssFeignClient dataComAssFeignClient;
@Override
public void dataComAssHandler(CalculatedParam calculatedParam) {
List<DataComassesDPO> list = new ArrayList<>();
logger.info("{},r_stat_comasses_d算法开始=====》", LocalDateTime.now());
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
for (String lineId : lineIdList) {
DataComassesDPO rStatComassesDpo = new DataComassesDPO();
rStatComassesDpo.setTime(calculatedParam.getDataDate());
rStatComassesDpo.setLineId(lineId);
lineParam.setLineId(Arrays.asList(lineId));
Map<String, Object> fields = getGeneralData(lineParam);
if (CollUtil.isNotEmpty(fields)) {
rStatComassesDpo.setFreqDev1(Objects.isNull(fields.get("freq_dev1")) ? 0.0 : Double.parseDouble(fields.get("freq_dev1").toString()));
rStatComassesDpo.setFreqDev2(Objects.isNull(fields.get("freq_dev2")) ? 0.0 : Double.parseDouble(fields.get("freq_dev2").toString()));
rStatComassesDpo.setFreqDev3(Objects.isNull(fields.get("freq_dev3")) ? 0.0 : Double.parseDouble(fields.get("freq_dev3").toString()));
rStatComassesDpo.setFreqDev4(Objects.isNull(fields.get("freq_dev4")) ? 0.0 : Double.parseDouble(fields.get("freq_dev4").toString()));
rStatComassesDpo.setFreqDev5(Objects.isNull(fields.get("freq_dev5")) ? 0.0 : Double.parseDouble(fields.get("freq_dev5").toString()));
rStatComassesDpo.setVuDev1(Objects.isNull(fields.get("vu_dev1")) ? 0.0 : Double.parseDouble(fields.get("vu_dev1").toString()));
rStatComassesDpo.setVuDev2(Objects.isNull(fields.get("vu_dev2")) ? 0.0 : Double.parseDouble(fields.get("vu_dev2").toString()));
rStatComassesDpo.setVuDev3(Objects.isNull(fields.get("vu_dev3")) ? 0.0 : Double.parseDouble(fields.get("vu_dev3").toString()));
rStatComassesDpo.setVuDev4(Objects.isNull(fields.get("vu_dev4")) ? 0.0 : Double.parseDouble(fields.get("vu_dev4").toString()));
rStatComassesDpo.setVuDev5(Objects.isNull(fields.get("vu_dev5")) ? 0.0 : Double.parseDouble(fields.get("vu_dev5").toString()));
rStatComassesDpo.setDataPst1(Objects.isNull(fields.get("data_pst1")) ? 0.0 : Double.parseDouble(fields.get("data_pst1").toString()));
rStatComassesDpo.setDataPst2(Objects.isNull(fields.get("data_pst2")) ? 0.0 : Double.parseDouble(fields.get("data_pst2").toString()));
rStatComassesDpo.setDataPst3(Objects.isNull(fields.get("data_pst3")) ? 0.0 : Double.parseDouble(fields.get("data_pst3").toString()));
rStatComassesDpo.setDataPst4(Objects.isNull(fields.get("data_pst4")) ? 0.0 : Double.parseDouble(fields.get("data_pst4").toString()));
rStatComassesDpo.setDataPst5(Objects.isNull(fields.get("data_pst5")) ? 0.0 : Double.parseDouble(fields.get("data_pst5").toString()));
rStatComassesDpo.setVUnbalance1(Objects.isNull(fields.get("v_unbalance1")) ? 0.0 : Double.parseDouble(fields.get("v_unbalance1").toString()));
rStatComassesDpo.setVUnbalance2(Objects.isNull(fields.get("v_unbalance2")) ? 0.0 : Double.parseDouble(fields.get("v_unbalance2").toString()));
rStatComassesDpo.setVUnbalance3(Objects.isNull(fields.get("v_unbalance3")) ? 0.0 : Double.parseDouble(fields.get("v_unbalance3").toString()));
rStatComassesDpo.setVUnbalance4(Objects.isNull(fields.get("v_unbalance4")) ? 0.0 : Double.parseDouble(fields.get("v_unbalance4").toString()));
rStatComassesDpo.setVUnbalance5(Objects.isNull(fields.get("v_unbalance5")) ? 0.0 : Double.parseDouble(fields.get("v_unbalance5").toString()));
rStatComassesDpo.setVThd1(Objects.isNull(fields.get("v_thd1")) ? 0.0 : Double.parseDouble(fields.get("v_thd1").toString()));
rStatComassesDpo.setVThd2(Objects.isNull(fields.get("v_thd2")) ? 0.0 : Double.parseDouble(fields.get("v_thd2").toString()));
rStatComassesDpo.setVThd3(Objects.isNull(fields.get("v_thd3")) ? 0.0 : Double.parseDouble(fields.get("v_thd3").toString()));
rStatComassesDpo.setVThd4(Objects.isNull(fields.get("v_thd4")) ? 0.0 : Double.parseDouble(fields.get("v_thd4").toString()));
rStatComassesDpo.setVThd5(Objects.isNull(fields.get("v_thd5")) ? 0.0 : Double.parseDouble(fields.get("v_thd5").toString()));
rStatComassesDpo.setEvent1(Objects.isNull(fields.get("event1")) ? 0.0 : Double.parseDouble(fields.get("event1").toString()));
rStatComassesDpo.setEvent2(Objects.isNull(fields.get("event2")) ? 0.0 : Double.parseDouble(fields.get("event2").toString()));
rStatComassesDpo.setEvent3(Objects.isNull(fields.get("event3")) ? 0.0 : Double.parseDouble(fields.get("event3").toString()));
rStatComassesDpo.setEvent4(Objects.isNull(fields.get("event4")) ? 0.0 : Double.parseDouble(fields.get("event4").toString()));
rStatComassesDpo.setEvent5(Objects.isNull(fields.get("event5")) ? 0.0 : Double.parseDouble(fields.get("event5").toString()));
list.add(rStatComassesDpo);
}
}
if (CollUtil.isNotEmpty(list)) {
dataComAssFeignClient.batchInsertion(list);
}
}
private Map<String, Object> getGeneralData(LineCountEvaluateParam lineParam) {
Map<String, Object> outMap = new HashMap<>(30);
BigDecimal hundred = BigDecimal.valueOf(100);
//************************************电压偏差********************************************
lineParam.setPhasicType(Arrays.asList("A","B","C"));
lineParam.setValueType(Arrays.asList("AVG"));
lineParam.setColumnName("vu_dev");
lineParam.setGe("10");
Integer vuDev1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("7");
lineParam.setLt("10");
Integer vuDev2 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("4");
lineParam.setLt("7");
Integer vuDev3 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("2");
lineParam.setLt("4");
Integer vuDev4 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0");
lineParam.setLt("2");
Integer vuDev5 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
BigDecimal vuDevAll = BigDecimal.valueOf(vuDev1 + vuDev2 + vuDev3 + vuDev4 + vuDev5);
if (vuDevAll.compareTo(BigDecimal.ZERO) != 0) {
outMap.put("vu_dev1", BigDecimal.valueOf(vuDev1).multiply(hundred).divide(vuDevAll, 3, RoundingMode.HALF_UP));
outMap.put("vu_dev2", BigDecimal.valueOf(vuDev2).multiply(hundred).divide(vuDevAll, 3, RoundingMode.HALF_UP));
outMap.put("vu_dev3", BigDecimal.valueOf(vuDev3).multiply(hundred).divide(vuDevAll, 3, RoundingMode.HALF_UP));
outMap.put("vu_dev4", BigDecimal.valueOf(vuDev4).multiply(hundred).divide(vuDevAll, 3, RoundingMode.HALF_UP));
outMap.put("vu_dev5", BigDecimal.valueOf(vuDev5).multiply(hundred).divide(vuDevAll, 3, RoundingMode.HALF_UP));
}
//************************************频率偏差********************************************
lineParam.setColumnName("freq_dev");
lineParam.setGe("0.3");
Integer freqDev1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.2");
lineParam.setLt("0.3");
Integer freqDev2 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.1");
lineParam.setLt("0.2");
Integer freqDev3 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.05");
lineParam.setLt("0.1");
Integer freqDev4 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0");
lineParam.setLt("0.05");
Integer freqDev5 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
BigDecimal freqDevAll = BigDecimal.valueOf(freqDev1 + freqDev2 + freqDev3 + freqDev4 + freqDev5);
if (freqDevAll.compareTo(BigDecimal.ZERO) != 0) {
outMap.put("freq_dev1", BigDecimal.valueOf(freqDev1).multiply(hundred).divide(freqDevAll, 3, RoundingMode.HALF_UP));
outMap.put("freq_dev2", BigDecimal.valueOf(freqDev2).multiply(hundred).divide(freqDevAll, 3, RoundingMode.HALF_UP));
outMap.put("freq_dev3", BigDecimal.valueOf(freqDev3).multiply(hundred).divide(freqDevAll, 3, RoundingMode.HALF_UP));
outMap.put("freq_dev4", BigDecimal.valueOf(freqDev4).multiply(hundred).divide(freqDevAll, 3, RoundingMode.HALF_UP));
outMap.put("freq_dev5", BigDecimal.valueOf(freqDev5).multiply(hundred).divide(freqDevAll, 3, RoundingMode.HALF_UP));
}
//************************************谐波畸变率********************************************
lineParam.setColumnName("v_thd");
lineParam.setValueType(Arrays.asList("CP95"));
lineParam.setGe("6");
Integer vThd1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("4");
lineParam.setLt("6");
Integer vThd2 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("2");
lineParam.setLt("4");
Integer vThd3 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("1");
lineParam.setLt("2");
Integer vThd4 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0");
lineParam.setLt("1");
Integer vThd5 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
BigDecimal vThdAll = BigDecimal.valueOf(vThd1 + vThd2 + vThd3 + vThd4 + vThd5);
if (vThdAll.compareTo(BigDecimal.ZERO) != 0) {
outMap.put("v_thd1", BigDecimal.valueOf(vThd1).multiply(hundred).divide(vThdAll, 3, RoundingMode.HALF_UP));
outMap.put("v_thd2", BigDecimal.valueOf(vThd2).multiply(hundred).divide(vThdAll, 3, RoundingMode.HALF_UP));
outMap.put("v_thd3", BigDecimal.valueOf(vThd3).multiply(hundred).divide(vThdAll, 3, RoundingMode.HALF_UP));
outMap.put("v_thd4", BigDecimal.valueOf(vThd4).multiply(hundred).divide(vThdAll, 3, RoundingMode.HALF_UP));
outMap.put("v_thd5", BigDecimal.valueOf(vThd5).multiply(hundred).divide(vThdAll, 3, RoundingMode.HALF_UP));
}
//************************************三相电压不平衡度********************************************
lineParam.setColumnName("v_unbalance");
lineParam.setGe("4");
Integer vUnbalance1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("2");
lineParam.setLt("4");
Integer vUnbalance2 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("1");
lineParam.setLt("2");
Integer vUnbalance3 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.5");
lineParam.setLt("1");
Integer vUnbalance4 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0");
lineParam.setLt("0.5");
Integer vUnbalance5 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
BigDecimal vUnbalanceAll = BigDecimal.valueOf(vUnbalance1 + vUnbalance2 + vUnbalance3 + vUnbalance4 + vUnbalance5);
if (vUnbalanceAll.compareTo(BigDecimal.ZERO) != 0) {
outMap.put("v_unbalance1", BigDecimal.valueOf(vUnbalance1).multiply(hundred).divide(vUnbalanceAll, 3, RoundingMode.HALF_UP));
outMap.put("v_unbalance2", BigDecimal.valueOf(vUnbalance2).multiply(hundred).divide(vUnbalanceAll, 3, RoundingMode.HALF_UP));
outMap.put("v_unbalance3", BigDecimal.valueOf(vUnbalance3).multiply(hundred).divide(vUnbalanceAll, 3, RoundingMode.HALF_UP));
outMap.put("v_unbalance4", BigDecimal.valueOf(vUnbalance4).multiply(hundred).divide(vUnbalanceAll, 3, RoundingMode.HALF_UP));
outMap.put("v_unbalance5", BigDecimal.valueOf(vUnbalance5).multiply(hundred).divide(vUnbalanceAll, 3, RoundingMode.HALF_UP));
}
//************************************电压波动(短时闪变)********************************************
lineParam.setColumnName("pst");
lineParam.setValueType(null);
lineParam.setGe("0.8");
Integer plt1 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.6");
lineParam.setLt("0.8");
Integer plt2 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.4");
lineParam.setLt("0.6");
Integer plt3 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.2");
lineParam.setLt("0.4");
Integer plt4 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0");
lineParam.setLt("0.2");
Integer plt5 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
BigDecimal pltAll = BigDecimal.valueOf(plt1 + plt2 + plt3 + plt4 + plt5);
if (pltAll.compareTo(BigDecimal.ZERO) != 0) {
outMap.put("data_plt1", BigDecimal.valueOf(plt1).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt2", BigDecimal.valueOf(plt2).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt3", BigDecimal.valueOf(plt3).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt4", BigDecimal.valueOf(plt4).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt5", BigDecimal.valueOf(plt5).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
}
if (!CollUtil.isEmpty(outMap)) {
outMap.put("event1", 100.0);
outMap.put("event2", 0.0);
outMap.put("event3", 0.0);
outMap.put("event4", 0.0);
outMap.put("event5", 0.0);
}
return outMap;
}
}

View File

@@ -34,6 +34,8 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
@@ -281,18 +283,18 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
qualified.setTime(calculatedParam.getDataDate());
int all = value.stream().mapToInt(DataLimitRateDto::getAllTime).sum();
if (all > 0) {
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getFreqDevOvertime).sum() * 100.0, all)));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getVoltageDevOvertime).sum() * 100.0, all)));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getUbalanceOvertime).sum() * 100.0, all)));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getUaberranceOvertime).sum() * 100.0, all)));
qualified.setINegOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getINegOvertime).sum() * 100.0, all)));
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getFreqDevOvertime).sum(), all)));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getVoltageDevOvertime).sum(), all)));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getUbalanceOvertime).sum(), all)));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getUaberranceOvertime).sum(), all)));
qualified.setINegOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getINegOvertime).sum(), all)));
setOverTime(2, 25, "uharm", value, qualified, all);
setOverTime(2, 25, "iharm", value, qualified, all);
setOverTime(1, 16, "inuharm", value, qualified, all);
}
int flickerAll = value.stream().mapToInt(DataLimitRateDto::getFlickerAllTime).sum();
if (flickerAll > 0) {
qualified.setFlickerOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getFlickerOvertime).sum() * 100.0, flickerAll)));
qualified.setFlickerOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getFlickerOvertime).sum(), flickerAll)));
}
info.add(qualified);
@@ -344,39 +346,56 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
DataQualifiedDetail qualified = new DataQualifiedDetail();
qualified.setLineId(key);
qualified.setTime(lineParam.getStartTime());
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getFreqDevOvertime).average().getAsDouble()));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getVoltageDevOvertime).average().getAsDouble()));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getUbalanceOvertime).average().getAsDouble()));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getUaberranceOvertime).average().getAsDouble()));
qualified.setINegOvertime(PubUtils.doubleRound(2, value.stream().mapToDouble(DataQualifiedDetail::getINegOvertime).average().getAsDouble()));
qualified.setFreqDevOvertime(getaDouble(value.stream().filter(x -> ObjectUtil.isNotNull(x.getFreqDevOvertime())).map(DataQualifiedDetail::getFreqDevOvertime).collect(Collectors.toList())));
qualified.setVoltageDevOvertime(getaDouble(value.stream().filter(x -> ObjectUtil.isNotNull(x.getVoltageDevOvertime())).map(DataQualifiedDetail::getVoltageDevOvertime).collect(Collectors.toList())));
qualified.setUbalanceOvertime(getaDouble(value.stream().filter(x -> ObjectUtil.isNotNull(x.getUbalanceOvertime())).map(DataQualifiedDetail::getUbalanceOvertime).collect(Collectors.toList())));
qualified.setUaberranceOvertime(getaDouble(value.stream().filter(x -> ObjectUtil.isNotNull(x.getUaberranceOvertime())).map(DataQualifiedDetail::getUaberranceOvertime).collect(Collectors.toList())));
qualified.setINegOvertime(getaDouble(value.stream().filter(x -> ObjectUtil.isNotNull(x.getINegOvertime())).map(DataQualifiedDetail::getINegOvertime).collect(Collectors.toList())));
qualified.setFlickerOvertime(getaDouble(value.stream().filter(x -> ObjectUtil.isNotNull(x.getFlickerOvertime())).map(DataQualifiedDetail::getFlickerOvertime).collect(Collectors.toList())));
setOverTime(2, 25, "uharm", value, qualified);
setOverTime(2, 25, "iharm", value, qualified);
setOverTime(1, 16, "inuharm", value, qualified);
info.add(qualified);
}
}
return info;
}
private double getaDouble(double value, int all) {
return value * 100.0 / all;
private Double getaDouble(List<Double> doubles) {
List<Double> numList = doubles.stream().filter(x -> ObjectUtil.isNotNull(x)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(numList)){
double asDouble = numList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
return PubUtils.doubleRound(2, asDouble);
}
return null;
}
private double getaDouble(double value, int all) {
double v = BigDecimal.valueOf(value * 100.0).divide(BigDecimal.valueOf(all), 4, RoundingMode.HALF_UP).doubleValue();
return v > 100 ? 100 : v;
}
private void setOverTime(Integer start, Integer end, String targetName, List<DataQualifiedDetail> value, DataQualifiedDetail qualified) {
for (int i = start; i <= end; i++) {
// 构造方法名
String methodName = targetName + i + "Overtime";
try {
Field finalField = DataLimitRateDto.class.getDeclaredField(methodName);
Field finalField = DataQualifiedDetail.class.getDeclaredField(methodName);
finalField.setAccessible(true);
double v = PubUtils.doubleRound(2, value.stream().mapToDouble(temp -> {
Double o;
List<Double> collect = value.stream().map(temp -> {
Object o;
try {
o = (Double) finalField.get(temp);
o = finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.doubleValue();
}).average().getAsDouble());
if(ObjectUtil.isNotNull(o)){
return (Double)o;
}
return null;
}).collect(Collectors.toList());
Double v = getaDouble(collect);
Field declared = DataQualifiedDetail.class.getDeclaredField(methodName);
declared.setAccessible(true);
declared.set(qualified, v);
@@ -385,6 +404,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
}
}
}
private void setOverTime(Integer start, Integer end, String targetName, List<DataLimitRateDto> value, DataQualifiedDetail qualified, int all) {
for (int i = start; i <= end; i++) {
// 构造方法名
@@ -400,7 +420,7 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
throw new RuntimeException(e);
}
return o.intValue();
}).sum() * 100.0, all));
}).sum(), all));
Field declared = DataQualifiedDetail.class.getDeclaredField(methodName);
declared.setAccessible(true);
declared.set(qualified, v);

View File

@@ -1,38 +1,27 @@
package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.R;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IPollutionService;
import com.njcn.dataProcess.api.DataHarmRateVFeignClient;
import com.njcn.dataProcess.api.DataIFeignClient;
import com.njcn.dataProcess.api.DataPltFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.dto.DataVDTO;
import com.njcn.dataProcess.dto.PollutionDTO;
import com.njcn.dataProcess.api.*;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.po.relation.RMpPollutionDPO;
import com.njcn.dataProcess.pojo.dto.DataHarmDto;
import com.njcn.dataProcess.pojo.dto.DataIDto;
import com.njcn.dataProcess.pojo.dto.DataPltDto;
import com.njcn.dataProcess.pojo.dto.DataVDto;
import com.njcn.dataProcess.pojo.po.RStatDataVD;
import com.njcn.dataProcess.pojo.dto.*;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*;
import java.util.function.BinaryOperator;
@@ -51,20 +40,16 @@ import java.util.stream.Stream;
public class PollutionServiceImpl implements IPollutionService {
private final DicDataFeignClient dicDataFeignClient;
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DataVFeignClient dataVFeignClient;
private final DataHarmRateVFeignClient dataHarmRateVFeignClient;
private final DataPltFeignClient dataPltFeignClient;
private final DataIFeignClient dataIFeignClient;
private final DataPollutionFeignClient dataPollutionFeignClient;
@Override
public void handleDay(CalculatedParam<String> calculatedParam) {
List<RMpPollutionDPO> pollutionList;
List<DataPollutionD> pollutionList;
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.POLLUTION_STATIS.getCode()).getData();
Map<String, DictData> dictData = dictDataList.stream().collect(Collectors.toMap(DictData::getId, Function.identity()));
@@ -82,49 +67,99 @@ public class PollutionServiceImpl implements IPollutionService {
lineCountEvaluateParam.setEndTime(endDay);
//指标数据获取
Map<String, RMpPollutionDPO> harmonicVoltageList = getHarmonicVoltage(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> harmonicCurrentList = getHarmonicCurrent(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> frequencyDeviationList = getFrequencyDeviation(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> voltageDeviationList = getVoltageDeviation(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> threePhaseVoltageList = getThreePhaseVoltageUnbalance(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> negativeSequenceList = getNegativeSequenceCurrent(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> interHarmonicVoltageList = getInterharmonicVoltage(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> voltageFlickerList = getVoltageFlicker(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> harmonicVoltageList = getHarmonicVoltage(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> harmonicCurrentList = getHarmonicCurrent(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> frequencyDeviationList = getFrequencyDeviation(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> voltageDeviationList = getVoltageDeviation(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> threePhaseVoltageList = getThreePhaseVoltageUnbalance(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> negativeSequenceList = getNegativeSequenceCurrent(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> interHarmonicVoltageList = getInterharmonicVoltage(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> voltageFlickerList = getVoltageFlicker(lineCountEvaluateParam, limitMap);
pollutionList = processPollutionList(local,idList,dictData, harmonicVoltageList, harmonicCurrentList, frequencyDeviationList, voltageDeviationList,
pollutionList = processPollutionList(local, idList, dictData, harmonicVoltageList, harmonicCurrentList, frequencyDeviationList, voltageDeviationList,
threePhaseVoltageList, negativeSequenceList, interHarmonicVoltageList, voltageFlickerList);
//TODO 插入数据库
if (CollUtil.isNotEmpty(pollutionList)) {
dataPollutionFeignClient.batchInsertion(pollutionList);
}
}
@Override
public void handleOrgDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
LocalDate local = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate());
QueryWrapper<DataPollutionD> queryWrapper = new QueryWrapper<>();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
Collection<LineDevGetDTO> union = CollectionUtils.union(Optional.ofNullable(deptGetChildrenMoreDTO.getLineBaseList()).orElse(new ArrayList<>()),
Optional.ofNullable(deptGetChildrenMoreDTO.getPwMonitorIds()).orElse(new ArrayList<>()));
List<String> lineIds = union.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
}
}
@Override
public void handleOrgMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
}
@Override
public void handleOrgQtr(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
}
@Override
public void handleOrgYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
}
@Override
public void handleSubstationDay(CalculatedParam<String> calculatedParam) {
}
@Override
public void handleSubstationMonth(CalculatedParam<String> calculatedParam) {
}
@Override
public void handleSubstationQtr(CalculatedParam<String> calculatedParam) {
}
@Override
public void handleSubstationYear(CalculatedParam<String> calculatedParam) {
}
private void assPollution(String lineId, LocalDate local, DictData dic, Map<String, RMpPollutionDPO> map,List<RMpPollutionDPO> result) {
if(map.containsKey(lineId)){
RMpPollutionDPO tem = map.get(lineId);
private void assPollution(String lineId, LocalDate local, DictData dic, Map<String, DataPollutionD> map, List<DataPollutionD> result) {
DataPollutionD tem;
if (map.containsKey(lineId)) {
tem = map.get(lineId);
tem.setPollutionType(dic.getId());
tem.setDataDate(local);
result.add(tem);
}else{
RMpPollutionDPO tem = new RMpPollutionDPO();
} else {
tem = new DataPollutionD();
tem.setLineId(lineId);
tem.setPollutionType(dic.getId());
tem.setDataDate(local);
tem.setValue(0.0);
result.add(tem);
}
result.add(tem);
}
/**
* 参数拼装处理
*/
private List<RMpPollutionDPO> processPollutionList(LocalDate local, List<String> lineIds, Map<String, DictData> dictData,
Map<String, RMpPollutionDPO> harmonicVoltageMap, Map<String, RMpPollutionDPO> harmonicCurrentMap,
Map<String, RMpPollutionDPO> frequencyDeviationMap, Map<String, RMpPollutionDPO> voltageDeviationMap,
Map<String, RMpPollutionDPO> threePhaseVoltageMap, Map<String, RMpPollutionDPO> negativeSequenceMap,
Map<String, RMpPollutionDPO> interharmonicVoltageMap, Map<String,RMpPollutionDPO> voltageFlickerMap) {
List<RMpPollutionDPO> result = new ArrayList<>();
private List<DataPollutionD> processPollutionList(LocalDate local, List<String> lineIds, Map<String, DictData> dictData,
Map<String, DataPollutionD> harmonicVoltageMap, Map<String, DataPollutionD> harmonicCurrentMap,
Map<String, DataPollutionD> frequencyDeviationMap, Map<String, DataPollutionD> voltageDeviationMap,
Map<String, DataPollutionD> threePhaseVoltageMap, Map<String, DataPollutionD> negativeSequenceMap,
Map<String, DataPollutionD> interharmonicVoltageMap, Map<String, DataPollutionD> voltageFlickerMap) {
List<DataPollutionD> result = new ArrayList<>();
DictData dicVHarmonic = dictData.get("V_Harmonic");
DictData dicIHarmonic = dictData.get("I_All");
DictData I_Neg = dictData.get("I_Neg");
@@ -134,14 +169,14 @@ public class PollutionServiceImpl implements IPollutionService {
DictData Plt = dictData.get("Plt");
DictData Freq_Dev = dictData.get("Freq_Dev");
for (String lineId : lineIds) {
assPollution(lineId,local,dicVHarmonic,harmonicVoltageMap,result);
assPollution(lineId,local,dicIHarmonic,harmonicCurrentMap,result);
assPollution(lineId,local,I_Neg,negativeSequenceMap,result);
assPollution(lineId,local,Plt,voltageFlickerMap,result);
assPollution(lineId,local,V_Dev,voltageDeviationMap,result);
assPollution(lineId,local,V_Unbalance,threePhaseVoltageMap,result);
assPollution(lineId,local,Freq_Dev,frequencyDeviationMap,result);
assPollution(lineId,local,V_Inharm,interharmonicVoltageMap,result);
assPollution(lineId, local, dicVHarmonic, harmonicVoltageMap, result);
assPollution(lineId, local, dicIHarmonic, harmonicCurrentMap, result);
assPollution(lineId, local, I_Neg, negativeSequenceMap, result);
assPollution(lineId, local, Plt, voltageFlickerMap, result);
assPollution(lineId, local, V_Dev, voltageDeviationMap, result);
assPollution(lineId, local, V_Unbalance, threePhaseVoltageMap, result);
assPollution(lineId, local, Freq_Dev, frequencyDeviationMap, result);
assPollution(lineId, local, V_Inharm, interharmonicVoltageMap, result);
}
return result;
}
@@ -150,64 +185,64 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 谐波电压取监测点最新的A、B、C三相数据再取电压总谐波畸变率、各次谐波电压含有率2~25次中的最大值作为结果
*/
private Map<String, RMpPollutionDPO> getHarmonicVoltage(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
List<RMpPollutionDPO> list = new ArrayList<>();
private Map<String, DataPollutionD> getHarmonicVoltage(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
List<DataPollutionD> list = new ArrayList<>();
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("A", "B", "C").collect(Collectors.toList()));
Map<String, RMpPollutionDPO> threePhase = getThreePhaseData(lineCountEvaluateParam, limitMap);
Map<String, RMpPollutionDPO> distortionRate = getDistortionRateData(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> threePhase = getThreePhaseData(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> distortionRate = getDistortionRateData(lineCountEvaluateParam, limitMap);
for (String key : threePhase.keySet()) {
list.add(threePhase.get(key));
}
for (String key : distortionRate.keySet()) {
list.add(distortionRate.get(key));
}
Comparator<RMpPollutionDPO> comparator = Comparator.comparing(RMpPollutionDPO::getValue);
Map<String, Optional<RMpPollutionDPO>> outMap = list.stream().collect(Collectors.groupingBy(RMpPollutionDPO::getLineId, Collectors.reducing(BinaryOperator.maxBy(comparator))));
Comparator<DataPollutionD> comparator = Comparator.comparing(DataPollutionD::getValue);
Map<String, Optional<DataPollutionD>> outMap = list.stream().collect(Collectors.groupingBy(DataPollutionD::getLineId, Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 出参处理
*/
private Map<String, RMpPollutionDPO> process(Map<String, Optional<RMpPollutionDPO>> outMap) {
Map<String, RMpPollutionDPO> map = new HashMap<>();
private Map<String, DataPollutionD> process(Map<String, Optional<DataPollutionD>> outMap) {
Map<String, DataPollutionD> map = new HashMap<>();
for (String key : outMap.keySet()) {
map.put(key, outMap.get(key).get());
}
return map;
}
private Map<String, RMpPollutionDPO> getThreePhaseData(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
private Map<String, DataPollutionD> getThreePhaseData(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
List<DataVDto> threePhaseList = dataVFeignClient.getDataV(lineCountEvaluateParam).getData();
Map<String, List<DataVDto>> dataVMap = threePhaseList.stream().collect(Collectors.groupingBy(DataVDto::getLineId));
Map<String, RMpPollutionDPO> map = new HashMap<>();
Map<String, DataPollutionD> map = new HashMap<>();
dataVMap.forEach((lineId, vList) -> {
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
DataPollutionD dataPollutionD = new DataPollutionD();
if (limitMap.containsKey(lineId)) {
Overlimit overlimit = limitMap.get(lineId);
double val = vList.stream().mapToDouble(DataVDto::getVThd).max().getAsDouble();
double vUnbalance = val / overlimit.getUaberrance();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(vUnbalance);
map.put(lineId, RMpPollutionDPO);
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(vUnbalance);
map.put(lineId, dataPollutionD);
}
});
return map;
}
private Map<String, RMpPollutionDPO> getDistortionRateData(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> mapResult = new HashMap<>();
private Map<String, DataPollutionD> getDistortionRateData(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> mapResult = new HashMap<>();
List<DataHarmDto> distortionRateList = dataHarmRateVFeignClient.getHarmRateVData(lineCountEvaluateParam).getData();
Map<String, List<DataHarmDto>> harmDataMap = distortionRateList.stream().collect(Collectors.groupingBy(DataHarmDto::getLineId));
harmDataMap.forEach((lineId, vList) -> {
Overlimit overlimit = limitMap.get(lineId);
List<RMpPollutionDPO> temList = new ArrayList<>();
List<DataPollutionD> temList = new ArrayList<>();
for (DataHarmDto dayHarmrateV : vList) {
RMpPollutionDPO tem = new RMpPollutionDPO();
DataPollutionD tem = new DataPollutionD();
double v2 = dayHarmrateV.getV2() / overlimit.getUharm2();
double v3 = dayHarmrateV.getV3() / overlimit.getUharm3();
double v4 = dayHarmrateV.getV4() / overlimit.getUharm4();
@@ -238,10 +273,10 @@ public class PollutionServiceImpl implements IPollutionService {
tem.setValue(result);
temList.add(tem);
}
RMpPollutionDPO rMpPollutionDPO = new RMpPollutionDPO();
rMpPollutionDPO.setLineId(lineId);
rMpPollutionDPO.setValue(temList.stream().mapToDouble(RMpPollutionDPO::getValue).max().getAsDouble());
mapResult.put(lineId, rMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(temList.stream().mapToDouble(DataPollutionD::getValue).max().getAsDouble());
mapResult.put(lineId, dataPollutionD);
});
return mapResult;
@@ -250,8 +285,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 谐波电流各次谐波电流2~25次取各监测点最新的A、B、C三相数据。
*/
private Map<String, RMpPollutionDPO> getHarmonicCurrent(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> map = new HashMap();
private Map<String, DataPollutionD> getHarmonicCurrent(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> map = new HashMap();
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("A", "B", "C").collect(Collectors.toList()));
List<DataIDto> list = dataIFeignClient.getDataI(lineCountEvaluateParam).getData();
@@ -259,7 +294,7 @@ public class PollutionServiceImpl implements IPollutionService {
dataMap.forEach((lineId, valList) -> {
if (limitMap.containsKey(lineId)) {
Overlimit overlimit = limitMap.get(lineId);
List<RMpPollutionDPO> temList = new ArrayList<>();
List<DataPollutionD> temList = new ArrayList<>();
for (DataIDto dayI : valList) {
double v2 = dayI.getI2() / overlimit.getIharm2();
double v3 = dayI.getI3() / overlimit.getIharm3();
@@ -287,16 +322,16 @@ public class PollutionServiceImpl implements IPollutionService {
double v25 = dayI.getI25() / overlimit.getIharm25();
List<Double> data = Stream.of(v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(dayI.getLineId());
RMpPollutionDPO.setValue(result);
temList.add(RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(dayI.getLineId());
dataPollutionD.setValue(result);
temList.add(dataPollutionD);
}
double val = temList.stream().mapToDouble(RMpPollutionDPO::getValue).max().getAsDouble();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(val);
map.put(lineId, RMpPollutionDPO);
double val = temList.stream().mapToDouble(DataPollutionD::getValue).max().getAsDouble();
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(val);
map.put(lineId, dataPollutionD);
}
});
return map;
@@ -305,8 +340,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 频率偏差各监测点最新的T相数据取频率上下偏差的绝对值中的最大值。
*/
private Map<String, RMpPollutionDPO> getFrequencyDeviation(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> lineData = new HashMap<>();
private Map<String, DataPollutionD> getFrequencyDeviation(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> lineData = new HashMap<>();
lineCountEvaluateParam.setColumnName("freq_dev,line_id");
lineCountEvaluateParam.setValueType(Stream.of("MAX").collect(Collectors.toList()));
@@ -319,10 +354,10 @@ public class PollutionServiceImpl implements IPollutionService {
Overlimit overlimit = limitMap.get(lineId);
double dayV = valList.stream().map(it -> Math.abs(it.getFreqDev())).max(Comparator.comparing(Double::doubleValue)).get();
double freqDev = dayV / overlimit.getFreqDev();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(freqDev);
lineData.put(lineId, RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(freqDev);
lineData.put(lineId, dataPollutionD);
}
});
return lineData;
@@ -331,8 +366,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 电压偏差各监测点最新的A、B、C三相数据取电压上下偏差的绝对值中的最大值。
*/
private Map<String, RMpPollutionDPO> getVoltageDeviation(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> lineData = new HashMap<>();
private Map<String, DataPollutionD> getVoltageDeviation(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> lineData = new HashMap<>();
lineCountEvaluateParam.setColumnName("vu_dev,line_id");
lineCountEvaluateParam.setValueType(Stream.of("MAX").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("A", "B", "C").collect(Collectors.toList()));
@@ -344,10 +379,10 @@ public class PollutionServiceImpl implements IPollutionService {
Overlimit overlimit = limitMap.get(lineId);
double dayV = valList.stream().map(it -> Math.abs(it.getVuDev())).max(Comparator.comparing(Double::doubleValue)).get();
double vDev = dayV / overlimit.getUvoltageDev();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(vDev);
lineData.put(lineId, RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(vDev);
lineData.put(lineId, dataPollutionD);
}
});
return lineData;
@@ -356,8 +391,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 三相电压不平衡度各监测点最新的T相数据。
*/
private Map<String, RMpPollutionDPO> getThreePhaseVoltageUnbalance(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> lineData = new HashMap<>();
private Map<String, DataPollutionD> getThreePhaseVoltageUnbalance(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> lineData = new HashMap<>();
lineCountEvaluateParam.setColumnName("v_unbalance,line_id");
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("T").collect(Collectors.toList()));
@@ -369,10 +404,10 @@ public class PollutionServiceImpl implements IPollutionService {
Overlimit overlimit = limitMap.get(lineId);
double dayV = valList.stream().mapToDouble(DataVDto::getVUnbalance).max().getAsDouble();
double vUb = dayV / overlimit.getUbalance();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(vUb);
lineData.put(lineId, RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(vUb);
lineData.put(lineId, dataPollutionD);
}
});
return lineData;
@@ -381,8 +416,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 负序电流各监测点最新的T相数据。
*/
private Map<String, RMpPollutionDPO> getNegativeSequenceCurrent(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> lineData = new HashMap<>();
private Map<String, DataPollutionD> getNegativeSequenceCurrent(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> lineData = new HashMap<>();
lineCountEvaluateParam.setColumnName("i_neg,line_id");
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("T").collect(Collectors.toList()));
@@ -393,10 +428,10 @@ public class PollutionServiceImpl implements IPollutionService {
Overlimit overlimit = limitMap.get(lineId);
double dayI = valList.stream().mapToDouble(DataIDto::getINeg).max().getAsDouble();
double iNeg = dayI / overlimit.getINeg();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(iNeg);
lineData.put(lineId, RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(iNeg);
lineData.put(lineId, dataPollutionD);
}
});
return lineData;
@@ -405,8 +440,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 间谐波电压含有率各监测点最新的A、B、C三相数据。
*/
private Map<String, RMpPollutionDPO> getInterharmonicVoltage(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> lineData = new HashMap<>();
private Map<String, DataPollutionD> getInterharmonicVoltage(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> lineData = new HashMap<>();
lineCountEvaluateParam.setPhasicType(Stream.of("A", "B", "C").collect(Collectors.toList()));
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
List<DataHarmDto> dataHarmDtoList = dataHarmRateVFeignClient.getHarmRateVData(lineCountEvaluateParam).getData();
@@ -415,7 +450,7 @@ public class PollutionServiceImpl implements IPollutionService {
dataMap.forEach((lineId, valList) -> {
if (limitMap.containsKey(lineId)) {
Overlimit overlimit = limitMap.get(lineId);
List<RMpPollutionDPO> temList = new ArrayList<>();
List<DataPollutionD> temList = new ArrayList<>();
for (DataHarmDto dayInharmV : valList) {
double v1 = Math.abs(dayInharmV.getV1() / overlimit.getInuharm1());
double v2 = Math.abs(dayInharmV.getV2() / overlimit.getInuharm2());
@@ -434,17 +469,17 @@ public class PollutionServiceImpl implements IPollutionService {
double v15 = Math.abs(dayInharmV.getV15() / overlimit.getInuharm15());
double v16 = Math.abs(dayInharmV.getV16() / overlimit.getInuharm16());
double data = Stream.of(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16).max(Comparator.comparing(Double::doubleValue)).get();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(data);
temList.add(RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(data);
temList.add(dataPollutionD);
}
double val = temList.stream().map(RMpPollutionDPO::getValue).max(Comparator.comparing(Double::doubleValue)).get();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(val);
lineData.put(lineId, RMpPollutionDPO);
double val = temList.stream().map(DataPollutionD::getValue).max(Comparator.comparing(Double::doubleValue)).get();
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(val);
lineData.put(lineId, dataPollutionD);
}
});
return lineData;
@@ -453,8 +488,8 @@ public class PollutionServiceImpl implements IPollutionService {
/**
* 长时电压闪变各监测点最新的A、B、C三相数据。
*/
private Map<String, RMpPollutionDPO> getVoltageFlicker(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, RMpPollutionDPO> lineData = new HashMap<>();
private Map<String, DataPollutionD> getVoltageFlicker(LineCountEvaluateParam lineCountEvaluateParam, Map<String, Overlimit> limitMap) {
Map<String, DataPollutionD> lineData = new HashMap<>();
lineCountEvaluateParam.setColumnName("plt");
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
@@ -467,10 +502,10 @@ public class PollutionServiceImpl implements IPollutionService {
Overlimit overlimit = limitMap.get(lineId);
double dayPlt = valList.stream().mapToDouble(DataPltDto::getPlt).max().getAsDouble();
double plt = dayPlt / overlimit.getFlicker();
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO();
RMpPollutionDPO.setLineId(lineId);
RMpPollutionDPO.setValue(plt);
lineData.put(lineId, RMpPollutionDPO);
DataPollutionD dataPollutionD = new DataPollutionD();
dataPollutionD.setLineId(lineId);
dataPollutionD.setValue(plt);
lineData.put(lineId, dataPollutionD);
}
});
return lineData;