数据完整性部分代码提交

This commit is contained in:
2025-03-13 10:16:37 +08:00
parent 7d503a42b1
commit dc178ff920
28 changed files with 919 additions and 33 deletions

View File

@@ -0,0 +1,11 @@
package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
/**
* 测点污区数据
*/
public interface IPollutionService {
void handleDay(CalculatedParam<String> calculatedParam);
}

View File

@@ -1,12 +1,16 @@
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.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataIntegrityService;
import com.njcn.dataProcess.api.DataIntegrityFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.dto.MeasurementCountDTO;
import com.njcn.dataProcess.pojo.po.RStatIntegrityD;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.influx.constant.InfluxDbSqlConstant;
import com.njcn.influx.pojo.bo.MeasurementCount;
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
@@ -33,6 +37,10 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
@Resource
private CommTerminalGeneralClient commTerminalGeneralClient;
private final DataVFeignClient dataVFeignClient;
private final DataIntegrityFeignClient dataIntegrityFeignClient;
@Override
public void dataIntegrity(CalculatedParam<String> calculatedParam) {
@@ -50,7 +58,7 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
List<List<String>> pendingIds = ListUtils.partition(lineIds,5);
for (List<String> pendingId : pendingIds) {
List<LineDevGetDTO> lineDevGetDTOList = commTerminalGeneralClient.getMonitorDetailList(pendingId).getData();
List<MeasurementCount> countList = this.getMeasurementCount(pendingId,beginDay,endDay);
List<MeasurementCountDTO> countList = dataVFeignClient.getMeasurementCount(pendingId,beginDay,endDay).getData();
poList.addAll(
lineDevGetDTOList.stream()
.map(item -> {
@@ -68,27 +76,12 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
.collect(Collectors.toList())
);
}
if(CollUtil.isNotEmpty(poList)){
dataIntegrityFeignClient.batchInsertion(poList);
}
}
/**
* 获取data_v中各个监测点的数据总数
* @param lineIndex 监测点索引
* @param startTime 起始时间
* @param endTime 结束时间
*/
public List<MeasurementCount> getMeasurementCount(List<String> lineIndex, String startTime, String endTime) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class,MeasurementCount.class);
influxQueryWrapper.regular(DataV::getLineId, lineIndex)
.eq(DataV::getValueType, InfluxDbSqlConstant.MAX)
.eq(DataV::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_A)
.count(DataV::getFreq)
.groupBy(DataV::getLineId)
.between(DataV::getTime, startTime, endTime);
//return dataVMapper.getMeasurementCount(influxQueryWrapper);
//TODO 调用插入数据库
return null;
}
}

View File

@@ -0,0 +1,496 @@
package com.njcn.algorithm.serviceimpl.line;
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.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IPollutionService;
import com.njcn.dataProcess.api.DataHarmRateVFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.dto.DataVDTO;
import com.njcn.dataProcess.dto.PollutionDTO;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.DataHarmDto;
import com.njcn.dataProcess.pojo.dto.DataVDto;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.pq.pojo.dto.PublicDTO;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Author: cdf
* @CreateTime: 2025-03-12
* @Description: 测点污区数据
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class PollutionServiceImpl implements IPollutionService {
private final DicDataFeignClient dicDataFeignClient;
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DataVFeignClient dataVFeignClient;
private final DataHarmRateVFeignClient dataHarmRateVFeignClient;
@Override
public void handleDay(CalculatedParam<String> calculatedParam) {
List<PollutionDTO> pollutionList ;
List<DictData> dictData = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.POLLUTION_STATIS.getCode()).getData();
LocalDate local = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate());
String beginDay =LocalDateTimeUtil.format(LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
String endDay = LocalDateTimeUtil.format(LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
List<String> idList = calculatedParam.getIdList();
List<Overlimit> overlimitList = commTerminalGeneralClient.getOverLimitDataByIds(idList).getData();
Map<String,Overlimit> limitMap = overlimitList.stream().collect(Collectors.toMap(Overlimit::getId,Function.identity()));
//指标数据获取
List<PublicDTO> harmonicVoltageList = getHarmonicVoltage(idList,limitMap,beginDay,endDay);
List<PublicDTO> harmonicCurrentList = getHarmonicCurrent(idList,limitMap,beginDay,endDay);
List<PublicDTO> frequencyDeviationList = getFrequencyDeviation(idList,limitMap,beginDay,endDay);
List<PublicDTO> voltageDeviationList = getVoltageDeviation(idList,limitMap,beginDay,endDay);
List<PublicDTO> threePhaseVoltageList = getThreePhaseVoltageUnbalance(idList,limitMap,beginDay,endDay);
List<PublicDTO> negativeSequenceList = getNegativeSequenceCurrent(idList,limitMap,beginDay,endDay);
List<PublicDTO> interHarmonicVoltageList = getInterharmonicVoltage(idList,limitMap,beginDay,endDay);
List<PublicDTO> voltageFlickerList = getVoltageFlicker(idList,limitMap,beginDay,endDay);
List<PollutionDTO> lineIdList = new ArrayList<>();
idList.forEach(item->{
PollutionDTO pollutionDTO = new PollutionDTO();
pollutionDTO.setLineId(item);
lineIdList.add(pollutionDTO);
});
pollutionList = processPollutionList(lineIdList,harmonicVoltageList,harmonicCurrentList,frequencyDeviationList,voltageDeviationList,threePhaseVoltageList,negativeSequenceList,interHarmonicVoltageList,voltageFlickerList);
insertPollutionDayMySql(pollutionList, dictData, local);
}
/**
* 谐波电压取监测点最新的A、B、C三相数据再取电压总谐波畸变率、各次谐波电压含有率2~25次中的最大值作为结果
*/
private List<PublicDTO> getHarmonicVoltage(List<String> ids,Map<String,Overlimit> limitMap,String beginTime,String endTime){
List<PublicDTO> list = new ArrayList<>();
Map<String,PublicDTO> threePhase = getThreePhaseData(ids,limitMap,beginTime,endTime);
Map<String,PublicDTO> distortionRate = getDistortionRateData(ids,limitMap,beginTime,endTime);
for (String key : threePhase.keySet()) {
list.add(threePhase.get(key));
}
for (String key : distortionRate.keySet()) {
list.add(distortionRate.get(key));
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = list.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 出参处理
*/
private List<PublicDTO> process(Map<String, Optional<PublicDTO>> outMap){
List<PublicDTO> outList = new ArrayList<>();
for (String key : outMap.keySet()) {
outList.add(outMap.get(key).get());
}
return outList;
}
private Map<String, PublicDTO> getThreePhaseData(List<String> ids,Map<String,Overlimit> limitMap,String beginTime,String endTime){
LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam();
lineCountEvaluateParam.setLineId(ids);
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("A","B","C").collect(Collectors.toList()));
lineCountEvaluateParam.setStartTime(beginTime);
lineCountEvaluateParam.setEndTime(endTime);
List<DataVDto> threePhaseList = dataVFeignClient.getDataV(lineCountEvaluateParam).getData();
Map<String,List<DataVDto>> dataVMap = threePhaseList.stream().collect(Collectors.groupingBy(DataVDto::getLineId));
Map<String,PublicDTO> map = new HashMap<>();
dataVMap.forEach((lineId,vList)->{
PublicDTO publicDTO = new PublicDTO();
if(limitMap.containsKey(lineId)){
Overlimit overlimit = limitMap.get(lineId);
double val = vList.stream().mapToDouble(DataVDto::getVThd).max().getAsDouble();
double vUnbalance = val/overlimit.getUaberrance();
publicDTO.setId(lineId);
publicDTO.setData(vUnbalance);
map.put(lineId,publicDTO);
}
});
return map;
}
private Map<String,PublicDTO> getDistortionRateData(List<String> ids,Map<String,Overlimit> limitMap,String beginTime,String endTime){
Map<String,PublicDTO> mapResult = new HashMap<>();
LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam();
lineCountEvaluateParam.setLineId(ids);
lineCountEvaluateParam.setValueType(Stream.of("CP95").collect(Collectors.toList()));
lineCountEvaluateParam.setPhasicType(Stream.of("A","B","C").collect(Collectors.toList()));
lineCountEvaluateParam.setStartTime(beginTime);
lineCountEvaluateParam.setEndTime(endTime);
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<PublicDTO> temList = new ArrayList<>();
for(DataHarmDto dayHarmrateV : vList){
PublicDTO publicDTO = new PublicDTO();
double v2 = dayHarmrateV.getV2()/overlimit.getUharm2();
double v3 = dayHarmrateV.getV3()/overlimit.getUharm3();
double v4 = dayHarmrateV.getV4()/overlimit.getUharm4();
double v5 = dayHarmrateV.getV5()/overlimit.getUharm5();
double v6 = dayHarmrateV.getV6()/overlimit.getUharm6();
double v7 = dayHarmrateV.getV7()/overlimit.getUharm7();
double v8 = dayHarmrateV.getV8()/overlimit.getUharm8();
double v9 = dayHarmrateV.getV9()/overlimit.getUharm9();
double v10 = dayHarmrateV.getV10()/overlimit.getUharm10();
double v11 = dayHarmrateV.getV11()/overlimit.getUharm11();
double v12 = dayHarmrateV.getV12()/overlimit.getUharm12();
double v13 = dayHarmrateV.getV13()/overlimit.getUharm13();
double v14 = dayHarmrateV.getV14()/overlimit.getUharm14();
double v15 = dayHarmrateV.getV15()/overlimit.getUharm15();
double v16 = dayHarmrateV.getV16()/overlimit.getUharm16();
double v17 = dayHarmrateV.getV17()/overlimit.getUharm17();
double v18 = dayHarmrateV.getV18()/overlimit.getUharm18();
double v19 = dayHarmrateV.getV19()/overlimit.getUharm19();
double v20 = dayHarmrateV.getV20()/overlimit.getUharm20();
double v21 = dayHarmrateV.getV21()/overlimit.getUharm21();
double v22 = dayHarmrateV.getV22()/overlimit.getUharm22();
double v23 = dayHarmrateV.getV23()/overlimit.getUharm23();
double v24 = dayHarmrateV.getV24()/overlimit.getUharm24();
double v25 = dayHarmrateV.getV25()/overlimit.getUharm25();
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();
publicDTO.setId(lineId);
publicDTO.setData(result);
temList.add(publicDTO);
}
PublicDTO publicDTO = new PublicDTO();
publicDTO.setId(lineId);
publicDTO.setData(temList.stream().mapToDouble(PublicDTO::getData).max().getAsDouble());
mapResult.put(lineId,publicDTO);
});
return mapResult;
}
/**
* 谐波电流各次谐波电流2~25次取各监测点最新的A、B、C三相数据。
*/
private List<PublicDTO> getHarmonicCurrent(List<String> ids,Map<String,Overlimit> limitMap,String beginTime,String endTime){
List<RStatDataIDPO> list = dataIDService.list(new LambdaQueryWrapper<RStatDataIDPO>()
.eq(RStatDataIDPO::getValueType, "CP95")
.in(RStatDataIDPO::getPhaseType, Arrays.asList("A", "B", "C"))
.ge(RStatDataIDPO::getTime, beginTime)
.le(RStatDataIDPO::getTime, endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
for (RStatDataIDPO dayI : list) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayI.getLineId(),overlimit.getId())){
double v2 = dayI.getI2()/overlimit.getIharm2();
double v3 = dayI.getI3()/overlimit.getIharm3();
double v4 = dayI.getI4()/overlimit.getIharm4();
double v5 = dayI.getI5()/overlimit.getIharm5();
double v6 = dayI.getI6()/overlimit.getIharm6();
double v7 = dayI.getI7()/overlimit.getIharm7();
double v8 = dayI.getI8()/overlimit.getIharm8();
double v9 = dayI.getI9()/overlimit.getIharm9();
double v10 = dayI.getI10()/overlimit.getIharm10();
double v11 = dayI.getI11()/overlimit.getIharm11();
double v12 = dayI.getI12()/overlimit.getIharm12();
double v13 = dayI.getI13()/overlimit.getIharm13();
double v14 = dayI.getI14()/overlimit.getIharm14();
double v15 = dayI.getI15()/overlimit.getIharm15();
double v16 = dayI.getI16()/overlimit.getIharm16();
double v17 = dayI.getI17()/overlimit.getIharm17();
double v18 = dayI.getI18()/overlimit.getIharm18();
double v19 = dayI.getI19()/overlimit.getIharm19();
double v20 = dayI.getI20()/overlimit.getIharm20();
double v21 = dayI.getI21()/overlimit.getIharm21();
double v22 = dayI.getI22()/overlimit.getIharm22();
double v23 = dayI.getI23()/overlimit.getIharm23();
double v24 = dayI.getI24()/overlimit.getIharm24();
double v25 = dayI.getI25()/overlimit.getIharm25();
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();
publicDTO = new PublicDTO();
publicDTO.setId(dayI.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 频率偏差各监测点最新的T相数据取频率上下偏差的绝对值中的最大值。
*/
private List<PublicDTO> getFrequencyDeviation(List<Overlimit> overLimitList,String beginTime,String endTime){
List<RStatDataVDPO> threePhaseList = dataVDService.list(new QueryWrapper<RStatDataVDPO>()
.select("line_id","abs(freq_dev) as freq_dev ")
.in("value_type", Arrays.asList("MIN","MAX"))
.in("phasic_type", Arrays.asList("T"))
.ge("time", beginTime)
.le("time",endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
// String sql = "SELECT line_id,abs(freq_dev) AS freq_dev FROM day_v where phasic_type = 'T' and (value_type = 'MIN' or value_type = 'MAX') "+ processDate(dataDate,Integer.valueOf(BizParamConstant.STAT_BIZ_DAY)) +"group by line_id order by time desc limit 2 tz('Asia/Shanghai')";
// InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
//
// QueryResult sqlResult = influxDbUtils.query(sql);
// List<DayVPO> list = resultMapper.toPOJO(sqlResult, DayVPO.class);
for (RStatDataVDPO dayV : threePhaseList) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayV.getLineId(),overlimit.getId())){
double freqDev = dayV.getFreqDev()/overlimit.getFreqDev();
data = Stream.of(freqDev).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
publicDTO = new PublicDTO();
publicDTO.setId(dayV.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 电压偏差各监测点最新的A、B、C三相数据取电压上下偏差的绝对值中的最大值。
*/
private List<PublicDTO> getVoltageDeviation(List<Overlimit> overLimitList,String beginTime,String endTime){
List<RStatDataVDPO> list = dataVDService.list(new QueryWrapper<RStatDataVDPO>()
.select("line_id","vu_dev","vl_dev","value_type")
.in("value_type", Arrays.asList("MIN","MAX"))
.in("phasic_type", Arrays.asList("A","B","C"))
.ge("time", beginTime)
.le("time", endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
// String sql = "SELECT line_id,vu_dev,vl_dev,value_type FROM day_v where (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and (value_type = 'MIN' or value_type = 'MAX') "+ processDate(dataDate,Integer.valueOf(BizParamConstant.STAT_BIZ_DAY)) +" group by line_id order by time desc limit 6 tz('Asia/Shanghai')";
// QueryResult sqlResult = influxDbUtils.query(sql);
// InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
//
// List<DayVPO> list = resultMapper.toPOJO(sqlResult, DayVPO.class);
for (RStatDataVDPO dayV : list) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayV.getLineId(),overlimit.getId())){
double vlDev = Math.abs(dayV.getVlDev()/overlimit.getUvoltageDev());
double vuDev = Math.abs(dayV.getVuDev()/overlimit.getVoltageDev());
data = Stream.of(vuDev,vlDev).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
publicDTO = new PublicDTO();
publicDTO.setId(dayV.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 三相电压不平衡度各监测点最新的T相数据。
*/
private List<PublicDTO> getThreePhaseVoltageUnbalance(List<Overlimit> overLimitList,String beginTime,String endTime){
List<RStatDataVDPO> list = dataVDService.list(new QueryWrapper<RStatDataVDPO>()
.select("line_id","v_unbalance","value_type")
.in("value_type", Arrays.asList("CP95","MAX"))
.in("phasic_type", Arrays.asList("T"))
.ge("time", beginTime)
.le("time", endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
// String sql = "SELECT line_id,v_unbalance,value_type FROM day_v where phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') "+ processDate(dataDate,Integer.valueOf(BizParamConstant.STAT_BIZ_DAY)) +" group by line_id order by time desc limit 2 tz('Asia/Shanghai')";
// InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
//
// QueryResult sqlResult = influxDbUtils.query(sql);
// List<DayVPO> list = resultMapper.toPOJO(sqlResult, DayVPO.class);
for (RStatDataVDPO dayV : list) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayV.getLineId(),overlimit.getId())){
double vUnbalance = Math.abs(dayV.getVUnbalance()/overlimit.getUbalance());
data = Stream.of(vUnbalance).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
publicDTO = new PublicDTO();
publicDTO.setId(dayV.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 负序电流各监测点最新的T相数据。
*/
private List<PublicDTO> getNegativeSequenceCurrent(List<Overlimit> overLimitList,String beginTime,String endTime){
List<RStatDataIDPO> list = dataIDService.list(new QueryWrapper<RStatDataIDPO>()
.select("line_id","i_neg","value_type")
.in("value_type", Arrays.asList("CP95","MAX"))
.in("phasic_type", Arrays.asList("T"))
.ge("time", beginTime)
.le("time", endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
// String sql = "SELECT line_id,i_neg,value_type FROM day_i where phasic_type = 'T' and (value_type = 'CP95' or value_type = 'MAX') "+ processDate(dataDate,Integer.valueOf(BizParamConstant.STAT_BIZ_DAY)) +" group by line_id order by time desc limit 2 tz('Asia/Shanghai')";
// InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
//
// QueryResult sqlResult = influxDbUtils.query(sql);
// List<DayIPO> list = resultMapper.toPOJO(sqlResult, DayIPO.class);
for (RStatDataIDPO dayI : list) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayI.getLineId(),overlimit.getId()) && overlimit.getINeg() != 0){
BigDecimal dayiNeg = BigDecimal.valueOf(dayI.getINeg());
BigDecimal overNeg = BigDecimal.valueOf(overlimit.getINeg());
double outNeg = dayiNeg.divide(overNeg,9, RoundingMode.HALF_UP).doubleValue();
double iNeg = Math.abs(outNeg);
data = Stream.of(iNeg).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
publicDTO = new PublicDTO();
publicDTO.setId(dayI.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 间谐波电压含有率各监测点最新的A、B、C三相数据。
*/
private List<PublicDTO> getInterharmonicVoltage(List<Overlimit> overLimitList,String beginTime,String endTime){
List<RStatDataInharmVDPO> list = inharmVDService.list(new QueryWrapper<RStatDataInharmVDPO>()
.in("value_type", Arrays.asList("CP95"))
.in("phasic_type", Arrays.asList("A","B","C"))
.ge("time", beginTime)
.le("time", endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
// String sql = "SELECT * FROM day_inharm_v where (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' "+ processDate(dataDate,Integer.valueOf(BizParamConstant.STAT_BIZ_DAY)) +" group by line_id order by time desc limit 3 tz('Asia/Shanghai')";
// InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
//
// QueryResult sqlResult = influxDbUtils.query(sql);
// List<DayInharmVPO> list = resultMapper.toPOJO(sqlResult, DayInharmVPO.class);
for (RStatDataInharmVDPO dayInharmV : list) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayInharmV.getLineId(),overlimit.getId())){
double v1 = Math.abs(dayInharmV.getV1()/overlimit.getInuharm1());
double v2 = Math.abs(dayInharmV.getV2()/overlimit.getInuharm2());
double v3 = Math.abs(dayInharmV.getV3()/overlimit.getInuharm3());
double v4 = Math.abs(dayInharmV.getV4()/overlimit.getInuharm4());
double v5 = Math.abs(dayInharmV.getV5()/overlimit.getInuharm5());
double v6 = Math.abs(dayInharmV.getV6()/overlimit.getInuharm6());
double v7 = Math.abs(dayInharmV.getV7()/overlimit.getInuharm7());
double v8 = Math.abs(dayInharmV.getV8()/overlimit.getInuharm8());
double v9 = Math.abs(dayInharmV.getV9()/overlimit.getInuharm9());
double v10 = Math.abs(dayInharmV.getV10()/overlimit.getInuharm10());
double v11 = Math.abs(dayInharmV.getV11()/overlimit.getInuharm11());
double v12 = Math.abs(dayInharmV.getV12()/overlimit.getInuharm12());
double v13 = Math.abs(dayInharmV.getV13()/overlimit.getInuharm13());
double v14 = Math.abs(dayInharmV.getV14()/overlimit.getInuharm14());
double v15 = Math.abs(dayInharmV.getV15()/overlimit.getInuharm15());
double v16 = Math.abs(dayInharmV.getV16()/overlimit.getInuharm16());
data = Stream.of(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
publicDTO = new PublicDTO();
publicDTO.setId(dayInharmV.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
/**
* 长时电压闪变各监测点最新的A、B、C三相数据。
*/
private List<PublicDTO> getVoltageFlicker(List<Overlimit> overLimitList,String beginTime,String endTime){
List<RStatDataPltDPO> list = pltDService.list(new QueryWrapper<RStatDataPltDPO>()
.in("value_type", Arrays.asList("CP95"))
.in("phasic_type", Arrays.asList("A","B","C"))
.ge("time", beginTime)
.le("time", endTime)
);
List<Double> data;
PublicDTO publicDTO;
List<PublicDTO> lineData = new ArrayList<>();
// String sql = "SELECT * FROM day_plt where (phasic_type = 'A' or phasic_type = 'B' or phasic_type = 'C') and value_type = 'CP95' "+ processDate(dataDate,Integer.valueOf(BizParamConstant.STAT_BIZ_DAY)) +" group by line_id order by time desc limit 3 tz('Asia/Shanghai')";
// InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
//
// QueryResult sqlResult = influxDbUtils.query(sql);
// List<DayPltPO> list = resultMapper.toPOJO(sqlResult, DayPltPO.class);
for (RStatDataPltDPO dayPlt : list) {
for (Overlimit overlimit : overLimitList) {
if (Objects.equals(dayPlt.getLineId(),overlimit.getId())){
double plt = Math.abs(dayPlt.getPlt()/overlimit.getFlicker());
data = Stream.of(plt).collect(Collectors.toList());
double result = data.stream().max(Comparator.comparing(Double::doubleValue)).get();
publicDTO = new PublicDTO();
publicDTO.setId(dayPlt.getLineId());
publicDTO.setData(result);
lineData.add(publicDTO);
}
}
}
Comparator<PublicDTO> comparator = Comparator.comparing(PublicDTO::getData);
Map<String, Optional<PublicDTO>> outMap = lineData.stream().collect(Collectors.groupingBy(PublicDTO::getId,Collectors.reducing(BinaryOperator.maxBy(comparator))));
return process(outMap);
}
}