@@ -1,8 +1,5 @@
package com.njcn.advance.service.carrycapacity.impl ;
import cn.afterturn.easypoi.excel.ExcelImportUtil ;
import cn.afterturn.easypoi.excel.entity.ImportParams ;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult ;
import cn.hutool.core.collection.CollectionUtil ;
import cn.hutool.core.date.LocalDateTimeUtil ;
import cn.hutool.json.JSONUtil ;
@@ -19,6 +16,7 @@ import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
import com.njcn.advance.pojo.carrycapacity.vo.* ;
import com.njcn.advance.service.carrycapacity.* ;
import com.njcn.advance.utils.CZNLPG ;
import com.njcn.advance.utils.EasyExcelUtil ;
import com.njcn.advance.utils.Utils ;
import com.njcn.common.pojo.exception.BusinessException ;
import com.njcn.common.utils.PubUtils ;
@@ -43,20 +41,22 @@ import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.DictData ;
import lombok.RequiredArgsConstructor ;
import lombok.SneakyThrows ;
import org.apache.poi.ss.usermodel.Workbook ;
import org.apache.poi.xssf.usermodel.XSSFWorkbook ;
import org.springframework.beans.BeanUtils ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.web.multipart.MultipartFile ;
import java.io.InputStream ;
import java.time.LocalDate ;
import java.time.LocalTime ;
import java.time.ZoneId ;
import java.time.format.DateTimeFormatter ;
import java.time.temporal.ChronoUnit ;
import java.util.* ;
import java.util.stream.Collectors ;
import java.util.stream.Stream ;
import static com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityStrategyVO.CarryCapacityStrategysingleVO ;
/**
* Description:
* Date: 2024/1/31 14:42【需求编号】
@@ -80,7 +80,7 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
private final RedisUtil redisUtil ;
private final CarryCapacityResultPOService carryCapacityResultPOService ;
private final CarryCapacityUserPOService carryCapacityUserPOService ;
private static final double DEFAULTVALUE = 3 . 1415 926;
private static final double DEFAULTVALUE = 31415 . 926 ;
private final FileStorageUtil fileStorageUtil ;
@@ -260,12 +260,8 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
if ( CollectionUtil . isEmpty ( dataHarmPowerPList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > listP = dataHarmPowerPList . stream ( ) . fil ter ( temp - > Utils . isTimeInRang e( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. map ( CarryCapcityData : : getValue )
. collect ( Collectors . toList ( ) ) ;
if ( listP . size ( ) < minDataNum ) {
if ( ! checkData ( dataHarmPowerPList , startDa te , endDat e, timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
@@ -280,55 +276,45 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
" ' and time >= ' " + startTime + " 'and time <= ' " + endTime + " ' " + " group by time( " + timeInterval + " m) ,* fill(3.1415926) " + InfluxDBPublicParam . TIME_ZONE ;
dataHarmPowerQList = dataHarmPowerQMapper . getSqlResult ( SqlQ1 ) ;
//数据缺失填补
//数据校验
linearInterpolation ( dataHarmPowerQList ) ;
redisUtil . saveByKey ( lineId + " # " + LocalDateTimeUtil . format ( startDate , formatter ) + " # " + LocalDateTimeUtil . format ( endDate , formatter ) + " # " + " Q " ,
dataHarmPowerQList ) ;
if ( CollectionUtil . isEmpty ( dataHarmPowerQList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
if ( ! checkData ( dataHarmPowerQList , startDate , endDate , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolation ( dataHarmPowerQList ) ;
// redisUtil.saveByKey(lineId+"#"+LocalDateTimeUtil.format(startDate, formatter)+"#"+LocalDateTimeUtil.format(endDate, formatter)+"#"+"Q",
// dataHarmPowerQList);
//电流
// StringBuilder stringBuilder1 = new StringBuilder();
// StringBuilder stringBuilder2 = new StringBuilder();
// for (int i = 2; i <=25 ; i++) {
// if (i==25){
// stringBuilder1.append("mean(i_").append(i).append(") AS i_").append(i);
// } else {
// stringBuilder1.append("mean(i_").append(i).append(") AS i_").append(i).append(",");
// }
// }
// stringBuilder2.append ("line_id='").append (lineId).append ("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' group by time(").append(timeInterval).append("m),* fill(3.1415926) ").append(InfluxDBPublicParam.TIME_ZONE);
// String sqlI1 = "select "+stringBuilder1+" from "+ InfluxDBPublicParam.DATA_I+" where value_type='CP95' and phasic_type!='T' and "+stringBuilder2;
// dataIList = dataIMapper.getSqlResult(sqlI1);
// //数据校验
// //数据缺失填补
// linearInterpolationI(dataIList);
// redisUtil.saveByKey(lineId+"#"+LocalDateTimeUtil.format(startDate, formatter)+"#"+LocalDateTimeUtil.format(endDate, formatter)+"#"+"I",
// dataIList);
//前2周的数据用于计算首端电流模型参数
String forwardStartTime = LocalDateTimeUtil . format ( queryParam . getStartTime ( )
// . plusWeeks(-1 )
. plusWeeks( - 1 )
, formatter ) + " 00:00:00 " ;
String forwardEndTime = LocalDateTimeUtil . format ( queryParam . getEndTime ( )
// . plusWeeks(-1 )
. plusWeeks( - 1 )
, formatter ) + " 23:59:00 " ;
String SqlP2 = " select mean(p)*1000 as value from data_harmpower_p where value_type='CP95' and phasic_type!='T' and line_id=' " + lineId +
" ' and time >= ' " + forwardStartTime + " 'and time <= ' " + forwardEndTime + " ' " + " group by time( " + timeInterval + " m) ,* fill(3.1415926) " + InfluxDBPublicParam . TIME_ZONE ;
dataHarmPowerP2List = dataHarmPowerPMapper . getSqlResult ( SqlP2 ) ;
//数据校验
// if( CollectionUtil. isEmpty( dataHarmPowerPList2)) {
// throw new BusinessException( AdvanceResponseEnum. DATA_NOT_FOUND) ;
// }else {
// //数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
// List<Double> listP = dataHarmPowerPList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
// .filter(temp -> temp.getValue()!=DEFAULTVALUE&&Objects.nonNull(temp.getValue()))
// .map(CarryCapcityData::getValue)
// .collect(Collectors.toList());
// if (listP.size()<minDataNum){
// throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
// }
// }
if ( CollectionUtil. isEmpty( dataHarmPowerP2 List) ) {
throw new BusinessException( AdvanceResponseEnum. DATA_NOT_FOUND) ;
} else {
if ( ! checkData ( dataHarmPowerP2 List, startDate2 , endDate2 , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
//数据缺失填补
linearInterpolation ( dataHarmPowerP2List ) ;
@@ -338,6 +324,17 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
" ' and time >= ' " + forwardStartTime + " 'and time <= ' " + forwardEndTime + " ' " + " group by time( " + timeInterval + " m) ,* fill(3.1415926) " + InfluxDBPublicParam . TIME_ZONE ;
dataHarmPowerQ2List = dataHarmPowerQMapper . getSqlResult ( SqlQ2 ) ;
//数据校验
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerQ2List ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
if ( ! checkData ( dataHarmPowerQ2List , startDate2 , endDate2 , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
//数据缺失填补
linearInterpolation ( dataHarmPowerQ2List ) ;
@@ -347,17 +344,26 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
" ' and time >= ' " + forwardStartTime + " 'and time <= ' " + forwardEndTime + " ' " + " group by time( " + timeInterval + " m) ,* fill(3.1415926) " + InfluxDBPublicParam . TIME_ZONE ;
dataHarmPowerU2List = dataVMapper . getSqlResult ( SqlU2 ) ;
//数据校验
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerU2List ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
if ( ! checkData ( dataHarmPowerU2List , startDate2 , endDate2 , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
//数据缺失填补
linearInterpolation ( dataHarmPowerU2List ) ;
redisUtil. saveByKey( lineId+ " # " + LocalDateTimeUtil. format( startDate2, formatter) + " # " + LocalDateTimeUtil. format( endDate2, formatter) + " # " + " P " ,
dataHarmPowerP2List) ;
redisUtil. saveByKey( lineId+ " # " + LocalDateTimeUtil. format( startDate2, formatter) + " # " + LocalDateTimeUtil. format( endDate2, formatter) + " # " + " Q " ,
dataHarmPowerQ2List) ;
redisUtil. saveByKey( lineId+ " # " + LocalDateTimeUtil. format( startDate2, formatter) + " # " + LocalDateTimeUtil. format( endDate2, formatter) + " # " + " U " ,
dataHarmPowerU2List) ;
redisUtil. saveByKey( lineId+ " # " + LocalDateTimeUtil. format( startDate, formatter) + " # " + LocalDateTimeUtil. format( endDate, formatter) + " # " + " I " ,
dataIList) ;
// redisUtil. saveByKey( lineId+"#"+ LocalDateTimeUtil. format( startDate2, formatter)+"#"+ LocalDateTimeUtil. format( endDate2, formatter)+"#"+"P" ,
// dataHarmPowerP2List) ;
// redisUtil. saveByKey( lineId+"#"+ LocalDateTimeUtil. format( startDate2, formatter)+"#"+ LocalDateTimeUtil. format( endDate2, formatter)+"#"+"Q" ,
// dataHarmPowerQ2List) ;
// redisUtil. saveByKey( lineId+"#"+ LocalDateTimeUtil. format( startDate2, formatter)+"#"+ LocalDateTimeUtil. format( endDate2, formatter)+"#"+"U" ,
// dataHarmPowerU2List) ;
// redisUtil. saveByKey( lineId+"#"+ LocalDateTimeUtil. format( startDate, formatter)+"#"+ LocalDateTimeUtil. format( endDate, formatter)+"#"+"I" ,
// dataIList) ;
}
@@ -406,7 +412,12 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
Integer timeInterval = data . getTimeInterval ( ) ;
// Integer timeInterval =10;
//根据时间间隔算出最低数据量 7天*6小时*60分钟*3项*90%/时间间隔
int minDataNum = 7 * 6 * 60 * 3 * 90 / ( 100 * timeInterval ) ;
DateTimeFormatter formatter = DateTimeFormatter . ofPattern ( " yyyy-MM-dd " ) ;
LocalDate startDate = queryParam . getStartTime ( ) ;
LocalDate endDate = queryParam . getEndTime ( ) ;
String startTime = LocalDateTimeUtil . format ( queryParam . getStartTime ( ) , formatter ) + " 00:00:00 " ;
String endTime = LocalDateTimeUtil . format ( queryParam . getEndTime ( ) , formatter ) + " 23:59:00 " ;
@@ -415,6 +426,15 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
String SqlQ1 = " select mean(q)*1000 as value from data_harmpower_q where value_type='CP95' and phasic_type!='T' and line_id=' " + lineId +
" ' and time >= ' " + startTime + " 'and time <= ' " + endTime + " ' " + " group by time( " + timeInterval + " m) ,* fill(3.1415926) " + InfluxDBPublicParam . TIME_ZONE ;
List < CarryCapcityData > dataHarmPowerList = dataHarmPowerQMapper . getSqlResult ( SqlQ1 ) ;
if ( CollectionUtil . isEmpty ( dataHarmPowerList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
if ( ! checkData ( dataHarmPowerList , startDate , endDate , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
//数据缺失填补
linearInterpolation ( dataHarmPowerList ) ;
carryCapacityDataQVO . setData ( dataHarmPowerList ) ;
@@ -448,6 +468,8 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
//时间间隔
Integer timeInterval = data . getTimeInterval ( ) ;
// Integer timeInterval =10;
//根据时间间隔算出最低数据量 7天*6小时*60分钟*3项*90%/时间间隔
int minDataNum = 7 * 6 * 60 * 3 * 90 / ( 100 * timeInterval ) ;
LocalDate startDate = queryParam . getStartTime ( ) ;
LocalDate endDate = queryParam . getEndTime ( ) ;
@@ -468,6 +490,20 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
stringBuilder2 . append ( " line_id=' " ) . append ( lineId ) . append ( " ' and " ) . append ( InfluxDBPublicParam . TIME + " >= ' " ) . append ( startTime ) . append ( " ' and " ) . append ( InfluxDBPublicParam . TIME ) . append ( " <= ' " ) . append ( endTime ) . append ( " ' group by time( " ) . append ( timeInterval ) . append ( " m),* fill(3.1415926) " ) . append ( InfluxDBPublicParam . TIME_ZONE ) ;
String sqlI1 = " select " + stringBuilder1 + " from " + InfluxDBPublicParam . DATA_I + " where value_type='CP95' and phasic_type!='T' and " + stringBuilder2 ;
List < DataI > dataI = dataIMapper . getSqlResult ( sqlI1 ) ;
if ( CollectionUtil . isEmpty ( dataI ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
List < CarryCapcityData > i_list = dataI . stream ( ) . map ( temp - > {
CarryCapcityData carryCapcityData = new CarryCapcityData ( ) ;
BeanUtils . copyProperties ( temp , carryCapcityData ) ;
carryCapcityData . setValue ( temp . getI2 ( ) ) ;
return carryCapcityData ;
} ) . collect ( Collectors . toList ( ) ) ;
if ( ! checkData ( i_list , startDate , endDate , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
//数据缺失填补
linearInterpolationI ( dataI ) ;
List < CarryCapcityData > i_list = dataI . stream ( ) . map ( temp - > {
@@ -604,16 +640,23 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
//1-安全, 2-III级预警, 3-II级预警, 4-I 级预警,依次执行策略看是否符合
for ( int i = 1 ; i < 5 ; i + + ) {
int finalI = i ;
boolean b = StrategyReslut ( carryCapacityStrategyVOList , i , 1 , safe _count) ;
boolean b1 = StrategyReslut ( carryCapacityStrategyVOList , i , 2 , warn_count3 ) ;
boolean b2 = StrategyReslut ( carryCapacityStrategyVOList , i , 3 , warn_count2 ) ;
boolean b3 = StrategyReslut ( carryCapacityStrategyVOList , i , 4 , warn_count1 ) ;
if ( b & & b1 & & b2 & & b3 ) {
boolean b = StrategyReslut ( carryCapacityStrategyVOList , i , safe_count , warn_count1 , warn_count2 , warn _count3 ) ;
if ( b ) {
carryCapacityDResultVO . setReslutLevel ( i ) ;
break ;
}
}
CarryCapacityResultPO carryCapacityResultPO = new CarryCapacityResultPO ( ) ;
List < CarryCapacityResultPO > list1 = carryCapacityResultPOService . lambdaQuery ( ) . eq ( CarryCapacityResultPO : : getLineId , calParam . getLineId ( ) )
. eq ( CarryCapacityResultPO : : getUserId , calParam . getUserId ( ) )
. eq ( CarryCapacityResultPO : : getStartTime , calParam . getStartTime ( ) )
. eq ( CarryCapacityResultPO : : getEndTime , calParam . getEndTime ( ) )
. eq ( CarryCapacityResultPO : : getStatus , 1 ) . list ( ) ;
if ( CollectionUtil . isNotEmpty ( list1 ) ) {
throw new BusinessException ( AdvanceResponseEnum . EXISTENCE_EVALUATION_RESULT ) ;
}
carryCapacityResultPO . setLineId ( calParam . getLineId ( ) ) ;
carryCapacityResultPO . setUserId ( calParam . getUserId ( ) ) ;
@@ -681,7 +724,7 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
//前一周的数据
ExcelDataDTO excelDataDTO = ParsingFile ( startDate , endDate , excelDataParam . getFile ( ) ) ;
ExcelDataDTO excelDataDTO = ParsingFile ( startDate , endDate , excelDataParam . getFile ( ) . getInputStream ( ) );
List < CarryCapcityData > dataHarmPowerPList = excelDataDTO . getDataHarmPowerPList ( ) ;
List < CarryCapcityData > dataHarmPowerQList = excelDataDTO . getDataHarmPowerQList ( ) ;
List < DataI > dataIList = excelDataDTO . getDataIList ( ) ;
@@ -690,74 +733,62 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
List < CarryCapcityData > dataHarmPowerQ2List = excelDataDTO . getDataHarmPowerQ2List ( ) ;
List < CarryCapcityData > dataHarmPowerUList = excelDataDTO . getDataHarmPowerU2List ( ) ;
//数据校验
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerPList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > tempList = dataHarmPowerPList . stream ( ) . fil ter ( temp - > U tils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. map ( CarryCapcityData : : getValue )
. collect ( Collectors . toList ( ) ) ;
if ( tempList . size ( ) < minDataNum ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_UNDERRUN ) ;
if ( ! checkData ( dataHarmPowerPList , startDa te , endDate , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolation ( dataHarmPowerPList ) ;
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerP2List ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > tempList = dataHarmPowerP2List . stream ( ) . fil ter ( temp - > U tils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. map ( CarryCapcityData : : getValue )
. collect ( Collectors . toList ( ) ) ;
if ( tempList . size ( ) < minDataNum ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_UNDERRUN ) ;
if ( ! checkData ( dataHarmPowerP2List , startDa te2 , endDate2 , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolation ( dataHarmPowerP2List ) ;
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerQList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > tempList = dataHarmPowerQList . stream ( ) . fil ter ( temp - > U tils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. map ( CarryCapcityData : : getValue )
. collect ( Collectors . toList ( ) ) ;
if ( tempList . size ( ) < minDataNum ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_UNDERRUN ) ;
if ( ! checkData ( dataHarmPowerQList , startDa te, endDate , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolation ( dataHarmPowerQList ) ;
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerQ2List ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > tempList = dataHarmPowerQ2List . stream ( ) . fil ter ( temp - > U tils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. map ( CarryCapcityData : : getValue )
. collect ( Collectors . toList ( ) ) ;
if ( tempList . size ( ) < minDataNum ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_UNDERRUN ) ;
if ( ! checkData ( dataHarmPowerQ2List , startDa te2 , endDate2 , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolation ( dataHarmPowerQ2List ) ;
//数据校验
if ( CollectionUtil . isEmpty ( dataHarmPowerUList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > tempList = dataHarmPowerUList . stream ( ) . fil ter ( temp - > U tils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. map ( CarryCapcityData : : getValue )
. collect ( Collectors . toList ( ) ) ;
if ( tempList . size ( ) < minDataNum ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_UNDERRUN ) ;
if ( ! checkData ( dataHarmPowerUList , startDa te2 , endDate2 , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolation ( dataHarmPowerUList ) ;
@@ -765,13 +796,15 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
if ( CollectionUtil . isEmpty ( dataIList ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
} else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List < Double > tempList = dataIList . stream ( ) . filter ( temp - > Utils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getI2 ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getI2 ( ) ) )
. map ( DataI : : getI2 )
. collect ( Collectors . toList ( ) ) ;
if ( tempList . size ( ) < minDataNum ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_UNDERRUN ) ;
List < CarryCapcityData > i_list = dataIList . stream ( ) . map ( temp - > {
CarryCapcityData carryCapcityData = new CarryCapcityData ( ) ;
BeanUtils . copyProperties ( temp , carryCapcityData ) ;
carryCapcityData . setValue ( temp . getI2 ( ) ) ;
return carryCapcityData ;
} ) . collect ( Collectors . toList ( ) ) ;
if ( ! checkData ( i_list , startDate , endDate , timeInterval ) ) {
throw new BusinessException ( AdvanceResponseEnum . DATA_NOT_FOUND ) ;
}
}
linearInterpolationI ( dataIList ) ;
@@ -895,6 +928,10 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
@Override
public CarryCapacityDResultVO carryCapacityEvaluate ( CarryCapacityEvaluateParam calParam ) {
CarryCapacityDResultVO vo = new CarryCapacityDResultVO ( ) ;
List < CarryCapacityDResultVO . CarryCapacityIResult > carryCapacityIResultList = new ArrayList < > ( ) ;
String userType = calParam . getUserList ( ) . get ( 0 ) . getUserType ( ) ;
String code = dicDataFeignClient . getDicDataById ( userType ) . getData ( ) . getCode ( ) ;
//用户协议容量
double sumCapacity = 0 . 00 ;
if ( CollectionUtil . isEmpty ( calParam . getUserList ( ) ) ) {
@@ -907,7 +944,26 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
}
double rate = sumCapacity / calParam . getShortCapacity ( ) ;
vo . setFirstResult ( rate * 100 ) ;
if ( rate > 0 . 001 ) {
CarryCapacityResultPO carryCapacityResultPO = new CarryCapacityResultPO ( ) ;
carryCapacityResultPO . setFirstResult ( rate * 100 ) ;
carryCapacityResultPO . setUserId ( String . join ( " , " , calParam . getUserList ( ) . stream ( ) . map ( CarryCapacityUserVO : : getUserId ) . collect ( Collectors . toList ( ) ) ) ) ;
carryCapacityResultPO . setEvaluateDate ( LocalDate . now ( ) ) ;
carryCapacityResultPO . setEvaluateType ( userType ) ;
carryCapacityResultPO . setStatus ( 1 ) ;
carryCapacityResultPO . setPtType ( calParam . getPtType ( ) ) ;
carryCapacityResultPO . setConnectionMode ( calParam . getConnectionMode ( ) ) ;
carryCapacityResultPO . setK ( calParam . getK ( ) ) ;
carryCapacityResultPO . setUserMode ( calParam . getUserMode ( ) ) ;
carryCapacityResultPO . setScale ( calParam . getScale ( ) ) ;
carryCapacityResultPO . setShortCapacity ( calParam . getShortCapacity ( ) ) ;
carryCapacityResultPO . setDeviceCapacity ( calParam . getDeviceCapacity ( ) ) ;
carryCapacityResultPO . setStatus ( 1 ) ;
if ( rate < 0 . 001 ) {
carryCapacityResultPO . setReslutLevel ( 6 ) ;
carryCapacityResultPOService . save ( carryCapacityResultPO ) ;
return vo ;
}
@@ -934,9 +990,7 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
Overlimit overlimit = new Overlimit ( ) ;
COverlimitUtil . iHarm ( overlimit , Float . valueOf ( sacaleValue ) , ( float ) sumCapacity , calParam . getDeviceCapacity ( ) , calParam . getShortCapacity ( ) ) ;
String userType = calParam . getUserList ( ) . get ( 0 ) . getUserType ( ) ;
String code = dicDataFeignClient . getDicDataById ( userType ) . getData ( ) . getCode ( ) ;
List < CarryCapacityDResultVO . CarryCapacityIResult > carryCapacityIResultList = new ArrayList < > ( ) ;
if ( DicDataEnum . Charging_Station_Users . getCode ( ) . equals ( code ) ) {
integerList . stream ( ) . forEach ( temp - > {
@@ -1004,22 +1058,16 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
} ) ;
}
vo . setIResultList ( carryCapacityIResultList ) ;
CarryCapacityResultPO carryCapacityResultPO = new CarryCapacityResultPO ( ) ;
carryCapacityResultPO . setFirstResult ( rate * 100 ) ;
carryCapacityResultPO . setIResultList ( JSONUtil . toJsonStr ( carryCapacityIResultList ) ) ;
carryCapacityResultPO . setEvaluateDate ( LocalDate . now ( ) ) ;
carryCapacityResultPO . setEvaluateType ( userType ) ;
List < CarryCapacityDResultVO . CarryCapacityIResult > list = JSONUtil . toList ( JSONUtil . toJsonStr ( carryCapacityIResultList ) , CarryCapacityDResultVO . CarryCapacityIResult . class ) ;
carryCapacityResultPO . setStatus ( 1 ) ;
carryCapacityResultPOService . save ( carryCapacityResultPO ) ;
return vo ;
}
public static ExcelDataDTO ParsingFile ( LocalDate startDate , LocalDate endDate , MultipartFile file ) throws Exception {
public static ExcelDataDTO ParsingFile ( LocalDate startDate , LocalDate endDate , InputStream is ) throws Exception {
DateTimeFormatter formatter = DateTimeFormatter . ofPattern ( " yyyy-MM-dd " ) ;
List < CarryCapcityData > dataHarmPowerPList = new ArrayList < > ( ) ;
List < CarryCapcityData > dataHarmPowerQList = new ArrayList < > ( ) ;
@@ -1035,76 +1083,80 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
List < CarryCapcityData > dataHarmPowerU2List = new ArrayList < > ( ) ;
try {
// 根据file得到Workbook,主要是要根据这个对象获取,传过来的excel有几个sheet页
Workbook workbook = new XSSFWorkbook ( file . getInputStream ( ) ) ;
StringBuilder sb = new StringBuilder ( ) ;
ImportParams params = new ImportParams ( ) ;
// 循环工作表Sheet
for ( int numSheet = 0 ; numSheet < workbook . getNumberOfSheets ( ) ; numSheet + + ) {
// 表头在第几行
params . setTitleRows ( 0 ) ;
// 距离表头中间有几行不要的数据
params . setStartRows ( 0 ) ;
// 第几个sheet页
params . setStartSheetIndex ( numSheet ) ;
// 验证数据
params . setNeedVerify ( true ) ;
if ( numSheet = = 0 ) {
ExcelImportResult < CarryCapcityDataIEexcel > result = ExcelImportUtil . importExcelMore ( file . getInputStream ( ) ,
CarryCapcityDataIEexcel . class , params ) ;
List < CarryCapcityDataEexcel > objects = EasyExcelUtil . syncReadModel ( is , CarryCapcityDataEexcel . class , 0 , 3 ) ;
List < CarryCapcityDataIEexcel > iEexcelList = new ArrayList < > ( ) ;
List < CarryCapcityDataVEexcel > vEexcelList = new ArrayList < > ( ) ;
List < CarryCapcityDataPEexcel > pEexcelList = new ArrayList < > ( ) ;
List < CarryCapcityDataQEexcel > qEexcelList = new ArrayList < > ( ) ;
objects . stream ( ) . forEach ( temp - > {
CarryCapcityDataIEexcel carryCapcityDataIEexcel = new CarryCapcityDataIEexcel ( ) ;
CarryCapcityDataVEexcel carryCapcityDataVEexcel = new CarryCapcityDataVEexcel ( ) ;
CarryCapcityDataPEexcel carryCapcityDataPEexcel = new CarryCapcityDataPEexcel ( ) ;
CarryCapcityDataQEexcel carryCapcityDataQEexcel = new CarryCapcityDataQEexcel ( ) ;
List < CarryCapcityDataIEexcel > successList = result . getList ( ) ;
List < DataI > collect = successList . stream ( ) . map ( C arryCapcityDataIEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toLis t ( ) ) ;
dataIList = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate , endDate )
) . collect ( Collectors . toLis t ( ) ) ;
BeanUtils . copyProperties ( temp , carryCapcityDataIEexcel ) ;
c arryCapcityDataIEexcel . setTime ( temp . getTime ( ) . atZone ( ZoneId . systemDefault ( ) ) . toInstan t ( ) ) ;
carryCapcityDataIEexcel . setValueType ( " CP95 " ) ;
carryCapcityDataVEexcel . setTime ( temp . getTime ( ) . atZone ( ZoneId . systemDefault ( ) ) . toInstan t ( ) ) ;
carryCapcityDataVEexcel . setValueType ( " CP95 " ) ;
carryCapcityDataVEexcel . setValue_a ( Double . valueOf ( temp . getU_a ( ) ) ) ;
carryCapcityDataVEexcel . setValue_b ( Double . valueOf ( temp . getU_b ( ) ) ) ;
carryCapcityDataVEexcel . setValue_c ( Double . valueOf ( temp . getU_c ( ) ) ) ;
} else if ( numSheet = = 1 ) {
ExcelImportResult < C arryCapcityDataV Eexcel > result = ExcelImportUtil . importExcelMore ( file . getInputStream ( ) ,
C arryCapcityDataV Eexcel. class , params ) ;
carryCapcityDataPEexcel . setTime ( temp . getTime ( ) . atZone ( ZoneId . systemDefault ( ) ) . toInstant ( ) ) ;
c arryCapcityDataP Eexcel . setValueType ( " CP95 " ) ;
c arryCapcityDataP Eexcel. setValue_a ( Double . valueOf ( temp . getP_a ( ) ) ) ;
carryCapcityDataPEexcel . setValue_b ( Double . valueOf ( temp . getP_b ( ) ) ) ;
carryCapcityDataPEexcel . setValue_c ( Double . valueOf ( temp . getP_c ( ) ) ) ;
// 校验合格的数据
List < C arryCapcityDataV Eexcel > successList = result . getList ( ) ;
List < CarryCapcityData > collect = successList . stream ( ) . map ( CarryCapcityDataVEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
// 业务逻辑
dataHarmPowerU2List = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate2 , endDate2 )
) . collect ( Collectors . toList ( ) ) ;
}
else if ( numSheet = = 2 ) {
ExcelImportResult < CarryCapcityDataPEexcel > result = ExcelImportUtil . importExcelMore ( file . getInputStream ( ) ,
CarryCapcityDataPEexcel . class , params ) ;
carryCapcityDataQEexcel . setTime ( temp . getTime ( ) . atZone ( ZoneId . systemDefault ( ) ) . toInstant ( ) ) ;
c arryCapcityDataQ Eexcel . setValueType ( " CP95 " ) ;
carryCapcityDataQEexcel . setValue_a ( Double . valueOf ( temp . getQ_a ( ) ) ) ;
carryCapcityDataQEexcel . setValue_b ( Double . valueOf ( temp . getQ_b ( ) ) ) ;
carryCapcityDataQEexcel . setValue_c ( Double . valueOf ( temp . getQ_c ( ) ) ) ;
iEexcelList . add ( carryCapcityDataIEexcel ) ;
vEexcelList . add ( carryCapcityDataVEexcel ) ;
pEexcelList . add ( carryCapcityDataPEexcel ) ;
qEexcelList . add ( carryCapcityDataQEexcel ) ;
// 校验合格的数据
List < CarryCapcityDataPEexcel > successList = result . getList ( ) ;
List < CarryCapcityData > collect = successList . stream ( ) . map ( CarryCapcityDataPEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerPList = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate , endDate )
) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerP2List = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate2 , endDate2 )
) . collect ( Collectors . toList ( ) ) ;
} ) ;
// 业务逻辑
}
else if ( numSheet = = 3 ) {
ExcelImportResult < CarryCapcityDataQEexcel > result = ExcelImportUtil . importExcelMore ( file . getInputStream ( ) ,
CarryCapcityDataQEexcel . class , params ) ;
// 校验合格的数据
List < CarryCapcityDataQEexcel > successList = result . getList ( ) ;
List < CarryCapcityData > collect = successList . stream ( ) . map ( CarryCapcityDataQEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerQList = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate , endDate )
) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerQ2List = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate2 , endDate2 )
) . collect ( Collectors . toList ( ) ) ;
// 业务逻辑
}
}
List < DataI > collect = iEexcelList . stream ( ) . map ( CarryCapcityDataIEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
dataIList = collect . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate , endDate )
) . collect ( Collectors . toList ( ) ) ;
// 校验合格的数据
List < CarryCapcityData > collect2 = vEexcelList . stream ( ) . map ( CarryCapcityDataVEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
// 业务逻辑
dataHarmPowerU2List = collect2 . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate2 , endDate2 )
) . collect ( Collectors . toList ( ) ) ;
// 校验合格的数据
List < CarryCapcityData > collect3 = pEexcelList . stream ( ) . map ( CarryCapcityDataPEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerPList = collect3 . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate , endDate )
) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerP2List = collect3 . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate2 , endDate2 )
) . collect ( Collectors . toList ( ) ) ;
List < CarryCapcityData > collect4 = qEexcelList . stream ( ) . map ( CarryCapcityDataQEexcel : : excelToPO ) . flatMap ( Collection : : stream ) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerQList = collect4 . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate , endDate )
) . collect ( Collectors . toList ( ) ) ;
dataHarmPowerQ2List = collect4 . stream ( ) . filter (
item - > Utils . isTimeInRange ( item . getTime ( ) , startDate2 , endDate2 )
) . collect ( Collectors . toList ( ) ) ;
} catch ( Exception e ) {
throw new BusinessException ( AdvanceResponseEnum . DOCUMENT_FORMAT_ERROR ) ;
}
@@ -1285,14 +1337,67 @@ public class CarryCapcityServiceImpl implements CarryCapcityService {
throw new IllegalArgumentException ( " 无效的操作符 " ) ;
}
}
private static boolean StrategyReslut ( List < CarryCapacityStrategyVO > carryCapacityStrategyVOList , int result_level , int index_result_level , int result _count) {
private static boolean StrategyReslut ( List < CarryCapacityStrategyVO > carryCapacityStrategyVOList , int result_level , int safe_count , int warn_count1 , int warn_count2 , int warn _count3 ) {
CarryCapacityStrategyVO carryCapacityStrategyVO = carryCapacityStrategyVOList . stream ( )
. filter ( temp - > temp . getResult ( ) = = result_level )
. filter ( temp - > temp . getIndexResult ( ) = = index_result_level )
. collect ( Collectors . toList ( ) ) . get ( 0 ) ;
boolean b1 = compareNumbers ( result_count , carryCapacityStrategyVO . getCount ( ) , carryCapacityStrategyVO . getComparisonOperators ( ) ) ;
return b1 ;
//每个策略组结果
List < Boolean > list = new ArrayList < > ( ) ;
List < CarryCapacityStrategysingleVO > capacityStrategysingleVOList = carryCapacityStrategyVO . getCapacityStrategysingleVOList ( ) ;
capacityStrategysingleVOList . forEach ( temp - > {
CarryCapacityStrategysingleVO . CarryCapacityStrategyIndexVO carryCapacityStrategyIndexVO = temp . getCarryCapacityStrategyIndexVOList ( ) . stream ( )
. filter ( temp1 - > temp1 . getIndexResult ( ) = = 1 )
. collect ( Collectors . toList ( ) ) . get ( 0 ) ;
boolean b1 = compareNumbers ( safe_count , carryCapacityStrategyIndexVO . getCount ( ) , carryCapacityStrategyIndexVO . getComparisonOperators ( ) ) ;
CarryCapacityStrategysingleVO . CarryCapacityStrategyIndexVO carryCapacityStrategyIndexVO2 = temp . getCarryCapacityStrategyIndexVOList ( ) . stream ( )
. filter ( temp1 - > temp1 . getIndexResult ( ) = = 2 )
. collect ( Collectors . toList ( ) ) . get ( 0 ) ;
boolean b2 = compareNumbers ( warn_count3 , carryCapacityStrategyIndexVO2 . getCount ( ) , carryCapacityStrategyIndexVO2 . getComparisonOperators ( ) ) ;
CarryCapacityStrategysingleVO . CarryCapacityStrategyIndexVO carryCapacityStrategyIndexVO3 = temp . getCarryCapacityStrategyIndexVOList ( ) . stream ( )
. filter ( temp1 - > temp1 . getIndexResult ( ) = = 3 )
. collect ( Collectors . toList ( ) ) . get ( 0 ) ;
boolean b3 = compareNumbers ( warn_count2 , carryCapacityStrategyIndexVO3 . getCount ( ) , carryCapacityStrategyIndexVO3 . getComparisonOperators ( ) ) ;
CarryCapacityStrategysingleVO . CarryCapacityStrategyIndexVO carryCapacityStrategyIndexVO4 = temp . getCarryCapacityStrategyIndexVOList ( ) . stream ( )
. filter ( temp1 - > temp1 . getIndexResult ( ) = = 4 )
. collect ( Collectors . toList ( ) ) . get ( 0 ) ;
boolean b4 = compareNumbers ( warn_count1 , carryCapacityStrategyIndexVO4 . getCount ( ) , carryCapacityStrategyIndexVO4 . getComparisonOperators ( ) ) ;
Boolean flag = b1 & & b2 & & b3 & & b4 ;
list . add ( flag ) ;
} ) ;
long count = list . stream ( ) . filter ( temp - > temp = = true ) . count ( ) ;
return count > 0 ;
}
private static boolean checkData ( List < CarryCapcityData > list , LocalDate startTime , LocalDate endTime , int timeInterval ) {
boolean flag = false ;
long daysBetween = ChronoUnit . DAYS . between ( startTime , endTime ) ;
//根据时间间隔算出最低数据量 1天*6小时*60分钟*90%/时间间隔算出一天一个的数据
int minDataNum = 1 * 6 * 60 * 3 * 80 / ( 100 * timeInterval ) ;
//合格天数》=3通过
int days = 0 ;
for ( long i = 0 ; i < = daysBetween ; i + + ) {
LocalDate currentDay = startTime . plusDays ( i ) ;
long count = list . stream ( )
. filter ( temp - > Utils . isTimeInRange ( temp . getTime ( ) , LocalTime . of ( 9 , 0 ) , LocalTime . of ( 15 , 0 ) ) )
. filter ( temp - > temp . getValue ( ) ! = DEFAULTVALUE & & Objects . nonNull ( temp . getValue ( ) ) )
. filter ( temp - > temp . getTime ( ) . atZone ( ZoneId . systemDefault ( ) ) . toLocalDate ( ) . equals ( currentDay ) ) . count ( ) ;
if ( count > = minDataNum ) {
days + + ;
}
}
if ( days > = 3 ) {
flag = true ;
}
return flag ;
}
}