@@ -1,496 +1,481 @@
// 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.p o.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.BinaryOpera tor;
// 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 = dic DataFeignClient.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> get HarmonicVoltage( 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()));
// lineCountEv alu ateParam.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 : overL imitList) {
// if (Objects.equals(dayI.getLineId(),overlimit.getId())){
// double v2 = dayI.getI2()/ overlimit. getI harm2() ;
// double v3 = dayI.getI3()/ overlimit. getI harm3() ;
// double v4 = dayI.getI4()/ overlimit. getI harm4() ;
// double v5 = dayI.getI5()/ overlimit. getI harm5() ;
// double v6 = dayI.getI6()/ overlimit. getI harm6() ;
// double v7 = dayI.getI7()/ overlimit. getI harm7() ;
// double v8 = dayI.getI8()/ overlimit. getI harm8() ;
// double v9 = dayI.getI9()/ overlimit. getI harm9() ;
// double v10 = dayI.getI10()/ overlimit. getI harm10() ;
// double v11 = dayI.getI11()/ overlimit. getI harm11() ;
// double v12 = dayI.getI12()/ overlimit. getI harm12() ;
// double v13 = dayI.getI13()/ overlimit. getI harm13() ;
// double v14 = dayI.getI14()/ overlimit. getI harm14() ;
// double v15 = dayI.getI15()/ overlimit. getI harm15() ;
// double v16 = dayI.getI16()/ overlimit. getI harm16() ;
// double v17 = dayI.getI17()/ overlimit. getI harm17() ;
// double v18 = dayI.getI18()/ overlimit. getI harm18() ;
// double v19 = dayI.getI19()/ overlimit. getI harm19() ;
// 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> d ata;
// 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::get Data) ;
// 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, Day InharmVPO.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);
// }
//
//
//}
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.baomidou.mybatisplus.extension.api.R ;
import com.njcn.algorithm.pojo.bo.CalculatedParam ;
import com.njcn.algorithm.service.line.IPollutionService ;
import com.njcn.dataProcess.api.DataHarmRate VFeignClient ;
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.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.dt o.DataVDto ;
import com.njcn.dataProcess.pojo.po.RStatDataVD ;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient ;
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.RequiredArgsConstruc tor ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework .ste reotype.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 DataV FeignClient dataVFeignClient ;
private final DataHarmRateVFeignClient dataHarmRateVFeignClient ;
private final DataPltFeignClient dataPltFeignClient ;
private final DataIFeignClient dataIFeignClient ;
@Override
public void handleDay ( CalculatedParam < String > calculatedParam ) {
List < RMpPollutionDPO > pollutionList ;
List< DictData > dictDataList = dicDataFeignClient . getDicDataByTypeCode ( DicDataTypeEnum . POLLUTION_STATIS . getCode ( ) ) . getData ( ) ;
Map < String , DictData > dictData = dictDataList . stream ( ) . collect ( Collectors . toMap ( DictData : : getId , Function . identity ( ) ) ) ;
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 ( ) ) ) ;
LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam ( ) ;
lineCountEvaluateParam . setLineId ( idList ) ;
lineCountEvaluateParam . setStartTime ( beginDay ) ;
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 > inter HarmonicVoltageList = getInterharmonicVoltage ( lineCountEvaluateParam , limitMap ) ;
Map < String , RMpPollutionDPO > voltageFlickerList = getVoltageFlicker ( lineCountEvaluateParam , limitMap ) ;
pollutionList = processPollutionList ( local , idList , dictData , harmonicVoltageList , harmonicCurrentList , frequencyDeviationList , voltageDeviationList ,
threePhaseVoltageList , negativeSequenceList , interHarmonicVoltageList , voltageFlickerList ) ;
//TODO 插入数据库
}
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 ) ;
tem . setPollutionType ( dic . getId ( ) ) ;
tem . setDataDate ( local ) ;
result . add ( tem ) ;
} else {
RMpPollutionDPO tem = new RMpPollutionDPO ( ) ;
tem . setLineId ( lineId ) ;
tem . setPollutionType ( dic . getId ( ) ) ;
tem . setDataDate ( local ) ;
tem . setValue ( 0 . 0 ) ;
result . add ( tem ) ;
}
}
/**
* 参数拼装处理
*/
private List < RMpPollutionDPO > processPollutionList ( Loc alD ate 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 < > ( ) ;
DictData dicVHarmonic = dictData . get ( " V_Harmonic " ) ;
DictData dicIHarmonic = dictData . get ( " I_All " ) ;
DictData I_Neg = dictData . get ( " I_Neg " ) ;
DictData V_Inharm = dictData . get ( " V_Inharm " ) ;
DictData V_Dev = dictData . get ( " V_Dev " ) ;
DictData V_Unbalance = dictData . get ( " V_Unbalance " ) ;
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 ) ;
}
return result ;
}
/**
* 谐波电压: 取监测点最新的A、B、C三相数据, 再取电压总谐波畸变率、各次谐波电压含有率( 2~25次) 中的最大值, 作为结果
*/
private Map < String , RMpPollutionDPO > getHarmonicVoltage ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
List < RMpPollutionDPO > 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 ) ;
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 ) ) ) ) ;
return process ( outMap ) ;
}
/**
* 出参处理
*/
private Map < String , RMpPollutionDPO > process ( Map < String , Optional < RMpPollutionDPO > > outMap ) {
Map < String , RMpPollutionDPO > 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 ) {
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 < > ( ) ;
dataVMap . forEach ( ( lineId , vList ) - > {
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO ( ) ;
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 ) ;
}
} ) ;
return map ;
}
private Map < String , RMpPollutionDPO > getDistortionRateData ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > 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 < > ( ) ;
for ( DataHarmDto dayHarmrateV : vList ) {
RMpPollutionDPO tem = new RMpPollutionDPO ( ) ;
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 ( ) / overl imit. getUharm6 ( ) ;
double v7 = dayHarmrateV . getV7 ( ) / overlimit . getUharm7 ( ) ;
double v8 = dayHarmrateV . getV8 ( ) / overlimit. getU harm8 ( ) ;
double v9 = dayHarmrateV . getV9 ( ) / overlimit. getU harm9 ( ) ;
double v10 = dayHarmrateV . getV10 ( ) / overlimit. getU harm10 ( ) ;
double v11 = dayHarmrateV . getV11 ( ) / overlimit. getU harm11 ( ) ;
double v12 = dayHarmrateV . getV12 ( ) / overlimit. getU harm12 ( ) ;
double v13 = dayHarmrateV . getV13 ( ) / overlimit. getU harm13 ( ) ;
double v14 = dayHarmrateV . getV14 ( ) / overlimit. getU harm14 ( ) ;
double v15 = dayHarmrateV . getV15 ( ) / overlimit. getU harm15 ( ) ;
double v16 = dayHarmrateV . getV16 ( ) / overlimit. getU harm16 ( ) ;
double v17 = dayHarmrateV . getV17 ( ) / overlimit. getU harm17 ( ) ;
double v18 = dayHarmrateV . getV18 ( ) / overlimit. getU harm18 ( ) ;
double v19 = dayHarmrateV . getV19 ( ) / overlimit. getU harm19 ( ) ;
double v20 = dayHarmrateV . getV20 ( ) / overlimit. getU harm20 ( ) ;
double v21 = dayHarmrateV . getV21 ( ) / overlimit. getU harm21 ( ) ;
double v22 = dayHarmrateV . getV22 ( ) / overlimit. getU harm22 ( ) ;
double v23 = dayHarmrateV . getV23 ( ) / overlimit. getU harm23 ( ) ;
double v24 = dayHarmrateV . getV24 ( ) / overlimit. getU harm24 ( ) ;
double v25 = dayHarmrateV . getV25 ( ) / overlimit. getU harm25 ( ) ;
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 ( ) ;
tem . setLineId ( lineId ) ;
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 ) ;
} ) ;
return mapResult ;
}
/**
* 谐波电流: 各次谐波电流( 2~25次) , 取各监测点最新的A、B、C三相数据。
*/
private Map < String , RMpPollutionDPO > getHarmonicCurrent ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > 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 ( ) ;
Map < String , List < DataIDto > > dataMap = list . stream ( ) . collect ( Collectors . groupingBy ( DataIDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
Overlimit overlimit = limitMap . get ( lineId ) ;
List < RMpPollutionDPO > temList = new ArrayList < > ( ) ;
for ( DataIDto dayI : valList ) {
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 ( ) ;
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 ) ;
}
double val = temList . stream ( ) . mapToDouble ( RMpPollutionDPO : : getValue ) . max ( ) . getAsDouble ( ) ;
RMpPollutionDPO RMpPollutionDPO = new RMpPollutionDPO ( ) ;
RMpPollutionDPO . setLineId ( lineId ) ;
RMpPollutionDPO . setValue ( val ) ;
map . put ( lineId , RMpPollutionDPO ) ;
}
} ) ;
return map ;
}
/**
* 频率偏差: 各监测点最新的T相数据, 取频率上下偏差的绝对值中的最大值。
*/
private Map < String , RMpPollutionDPO > getFrequencyDeviation ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > lineData = new HashMap < > ( ) ;
lineCountEvaluateParam . setColumnName ( " freq_dev,line_id " ) ;
lineCountEvaluateParam . setValueType ( Stream . of ( " MAX " ) . collect ( Collectors . toList ( ) ) ) ;
lineCountEvaluateParam . setPhasicType ( Stream . of ( " A " , " B " , " C " ) . collect ( Collectors . toList ( ) ) ) ;
List < DataVDto > dataVDtoList = dataVFeignClient . getDataV ( lineCountEvaluateParam ) . getData ( ) ;
Map < String , List < DataVDto > > dataMap = dataVDtoList . stream ( ) . collect ( Collectors . groupingBy ( DataVDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
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 ) ;
}
} ) ;
return lineData ;
}
/**
* 电压偏差: 各监测点最新的A、B、C三相数据, 取电压上下偏差的绝对值中的最大值。
*/
private Map < String , RMpPollutionDPO > getVoltageDeviation ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > 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 ( ) ) ) ;
List < DataVDto > dataVDtoList = dataVFeignClient . getDataV ( lineCountEvaluateParam ) . getData ( ) ;
Map < String , List < DataVDto > > dataMap = dataVDtoList . stream ( ) . collect ( Collectors . groupingBy ( DataVDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
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 ) ;
}
} ) ;
return lineData ;
}
/**
* 三相电压不平衡度: 各监测点最新的T相数据。
*/
private Map < String , RMpPollutionDPO > getThreePhaseVoltageUnbalance ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > 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 ( ) ) ) ;
List < DataVDto > dataVDtoList = dataVFeignClient . getDataV ( lineCountEvaluateParam ) . getData ( ) ;
Map < String , List < DataVDto > > dataMap = dataVDtoList . stream ( ) . collect ( Collectors . groupingBy ( DataVDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
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 ) ;
}
} ) ;
return lineD ata ;
}
/**
* 负序电流: 各监测点最新的T相数据。
* /
private Map < String , RMpPollutionDPO > getNegativeSequenceCurrent ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > 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 ( ) ) ) ;
List < DataIDto > dataVDtoList = dataIFeignClient . getDataI ( lineCountEvaluateParam ) . getData ( ) ;
Map < String , List < DataIDto > > dataMap = dataVDtoList . stream ( ) . collect ( Collectors . groupingBy ( DataIDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
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 ) ;
}
} ) ;
return line Data ;
}
/**
* 间谐波电压含有率: 各监测点最新的A、B、C三相数据。
*/
private Map < String , RMpPollutionDPO > getInterharmonicVoltage ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > 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 ( ) ;
Map < String , List < DataHarmDto > > dataMap = dataHarmDtoList . stream ( ) . collect ( Collectors . groupingBy ( DataHarmDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
Overlimit overlimit = limitMap . get ( lineId ) ;
List < RMpPollutionDPO > temList = new ArrayList < > ( ) ;
for ( DataHarmDto dayInharmV : valList ) {
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 . get Inu harm5 ( ) ) ;
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 ( ) ) ;
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 ) ;
}
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 ) ;
}
} ) ;
return lineData ;
}
/**
* 长时电压闪变: 各监测点最新的A、B、C三相数据。
*/
private Map < String , RMpPollutionDPO > getVoltageFlicker ( LineCountEvaluateParam lineCountEvaluateParam , Map < String , Overlimit > limitMap ) {
Map < String , RMpPollutionDPO > lineData = new HashMap < > ( ) ;
lineCountEvaluateParam . setColumnName ( " plt " ) ;
lineCountEvaluateParam . setValueType ( Stream . of ( " CP95 " ) . collect ( Collectors . toList ( ) ) ) ;
lineCountEvaluateParam . setPhasicType ( Stream . of ( " A " , " B " , " C " ) . collect ( Collectors . toList ( ) ) ) ;
List< DataPltDto > dataPltDtoList = dataPltFeignClient . getDataPlt ( lineCountEvaluateParam ) . getData ( ) ;
Map < String , List < DataPltDto > > dataMap = dataPltDtoList . stream ( ) . collect ( Collectors . groupingBy ( DataPltDto : : getLineId ) ) ;
dataMap . forEach ( ( lineId , valList ) - > {
if ( limitMap . containsKey ( lineId ) ) {
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 ) ;
}
} ) ;
return lineData ;
}
}