海南初始版本提交
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package com.njcn.advance.service.carrycapacity;
|
||||
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityDataPO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/3/6 14:45【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface CarryCapacityDataPOService extends IService<CarryCapacityDataPO>{
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.njcn.advance.service.carrycapacity;
|
||||
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityResultPO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/3/1 15:38【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface CarryCapacityResultPOService extends IService<CarryCapacityResultPO>{
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.njcn.advance.service.carrycapacity;
|
||||
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityStrategyParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityStrategyPO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityStrategyVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/3/5 10:33【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface CarryCapacityStrategyPOService extends IService<CarryCapacityStrategyPO>{
|
||||
|
||||
|
||||
Boolean add(CarryCapacityStrategyParam carryCapacityStrategyParam);
|
||||
|
||||
List<CarryCapacityStrategyVO> queyDetail();
|
||||
|
||||
Boolean restore();
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.njcn.advance.service.carrycapacity;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityUserParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/2/20 11:15【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface CarryCapacityUserPOService extends IService<CarryCapacityUserPO>{
|
||||
|
||||
|
||||
Boolean add(CarryCapacityUserParam carryCapacityUserParam);
|
||||
|
||||
Boolean updateUser(CarryCapacityUserParam.CarryCapacityUserUpdateParam userUpdateParam);
|
||||
|
||||
IPage<CarryCapacityUserPO> queyDetailUser(CarryCapacityUserParam.CarryCapacityUserPageParam pageParm);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.njcn.advance.service.carrycapacity;
|
||||
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityCalParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityQueryDataParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDResultVO;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataIVO;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataQVO;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataVO;
|
||||
import com.njcn.device.pq.pojo.vo.TerminalTree;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Description:
|
||||
* Date: 2024/1/31 14:40【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface CarryCapcityService {
|
||||
|
||||
|
||||
CarryCapacityDataVO queryCarryCapacityData(CarryCapacityQueryDataParam queryParam);
|
||||
|
||||
CarryCapacityDataQVO queryCarryCapacityQData(CarryCapacityQueryDataParam queryParam);
|
||||
|
||||
CarryCapacityDataIVO queryCarryCapacityIData(CarryCapacityQueryDataParam queryParam);
|
||||
|
||||
CarryCapacityDResultVO carryCapacityCal(CarryCapacityCalParam calParam);
|
||||
|
||||
List<TerminalTree> carryCapacityTree();
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.njcn.advance.service.carrycapacity.impl;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityDataPO;
|
||||
import com.njcn.advance.mapper.carrycapacity.CarryCapacityDataPOMapper;
|
||||
import com.njcn.advance.service.carrycapacity.CarryCapacityDataPOService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/3/6 14:45【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class CarryCapacityDataPOServiceImpl extends ServiceImpl<CarryCapacityDataPOMapper, CarryCapacityDataPO> implements CarryCapacityDataPOService{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.njcn.advance.service.carrycapacity.impl;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.advance.mapper.carrycapacity.CarryCapacityResultPOMapper;
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityResultPO;
|
||||
import com.njcn.advance.service.carrycapacity.CarryCapacityResultPOService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/3/1 15:38【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class CarryCapacityResultPOServiceImpl extends ServiceImpl<CarryCapacityResultPOMapper, CarryCapacityResultPO> implements CarryCapacityResultPOService{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.njcn.advance.service.carrycapacity.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.advance.mapper.carrycapacity.CarryCapacityStrategyPOMapper;
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityStrategyParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityStrategyPO;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityStrategyVO;
|
||||
import com.njcn.advance.service.carrycapacity.CarryCapacityStrategyPOService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/3/5 10:33【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class CarryCapacityStrategyPOServiceImpl extends ServiceImpl<CarryCapacityStrategyPOMapper, CarryCapacityStrategyPO> implements CarryCapacityStrategyPOService{
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
public Boolean add(CarryCapacityStrategyParam carryCapacityStrategyParam) {
|
||||
CarryCapacityStrategyPO carryCapacityStrategyPO = new CarryCapacityStrategyPO();
|
||||
BeanUtils.copyProperties(carryCapacityStrategyParam, carryCapacityStrategyPO);
|
||||
//将原始策略处理为不启用
|
||||
this.lambdaUpdate().eq(CarryCapacityStrategyPO::getResult, carryCapacityStrategyParam.getResult())
|
||||
.eq(CarryCapacityStrategyPO::getIndexResult, carryCapacityStrategyParam.getIndexResult())
|
||||
.eq(CarryCapacityStrategyPO::getProtoFlag, 1)
|
||||
.set(CarryCapacityStrategyPO::getUserFlag,2)
|
||||
.update();
|
||||
QueryWrapper<CarryCapacityStrategyPO> lambdaQuery = new QueryWrapper<>();
|
||||
lambdaQuery.lambda()
|
||||
.eq(CarryCapacityStrategyPO::getResult, carryCapacityStrategyParam.getResult())
|
||||
.eq(CarryCapacityStrategyPO::getIndexResult, carryCapacityStrategyParam.getIndexResult())
|
||||
.eq(CarryCapacityStrategyPO::getProtoFlag, 2);
|
||||
//将客户对应策略删除
|
||||
this.remove(lambdaQuery);
|
||||
//新增客户策略;
|
||||
carryCapacityStrategyPO.setProtoFlag(2);
|
||||
carryCapacityStrategyPO.setUserFlag(1);
|
||||
boolean save = this.save(carryCapacityStrategyPO);
|
||||
return save;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CarryCapacityStrategyVO> queyDetail() {
|
||||
List<CarryCapacityStrategyPO> list = this.lambdaQuery().eq(CarryCapacityStrategyPO::getUserFlag, 1).list();
|
||||
List<CarryCapacityStrategyVO> collect = list.stream().map(temp -> {
|
||||
CarryCapacityStrategyVO vo = new CarryCapacityStrategyVO();
|
||||
BeanUtils.copyProperties(temp, vo);
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
return collect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean restore() {
|
||||
//将客户对应策略删除
|
||||
QueryWrapper<CarryCapacityStrategyPO> lambdaQuery = new QueryWrapper<>();
|
||||
lambdaQuery.lambda()
|
||||
.eq(CarryCapacityStrategyPO::getProtoFlag, 2);
|
||||
this.remove(lambdaQuery
|
||||
);
|
||||
//将原始策略处理为启用
|
||||
boolean update = this.lambdaUpdate().eq(CarryCapacityStrategyPO::getProtoFlag, 1)
|
||||
.set(CarryCapacityStrategyPO::getUserFlag, 1)
|
||||
.update();
|
||||
return update;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.njcn.advance.service.carrycapacity.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.advance.enums.AdvanceResponseEnum;
|
||||
import com.njcn.advance.mapper.carrycapacity.CarryCapacityUserPOMapper;
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityUserParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
|
||||
import com.njcn.advance.service.carrycapacity.CarryCapacityUserPOService;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/2/20 11:15【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class CarryCapacityUserPOServiceImpl extends ServiceImpl<CarryCapacityUserPOMapper, CarryCapacityUserPO> implements CarryCapacityUserPOService{
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean add(CarryCapacityUserParam carryCapacityUserParam) {
|
||||
CarryCapacityUserPO carryCapacityUserPO = new CarryCapacityUserPO();
|
||||
BeanUtils.copyProperties(carryCapacityUserParam, carryCapacityUserPO);
|
||||
CarryCapacityUserPO one = this.lambdaQuery().eq(CarryCapacityUserPO::getUserName, carryCapacityUserParam.getUserName()).one();
|
||||
if(Objects.nonNull(one)){
|
||||
throw new BusinessException(AdvanceResponseEnum.USER_NAME_EXIST);
|
||||
}
|
||||
boolean save = this.save(carryCapacityUserPO);
|
||||
return save;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean updateUser(CarryCapacityUserParam.CarryCapacityUserUpdateParam userUpdateParam) {
|
||||
CarryCapacityUserPO carryCapacityUserPO = new CarryCapacityUserPO();
|
||||
BeanUtils.copyProperties(userUpdateParam, carryCapacityUserPO);
|
||||
CarryCapacityUserPO one = this.lambdaQuery().eq(CarryCapacityUserPO::getUserName, userUpdateParam.getUserName()).ne(CarryCapacityUserPO::getUserId,userUpdateParam.getUserId()).one();
|
||||
if(Objects.nonNull(one)){
|
||||
throw new BusinessException(AdvanceResponseEnum.USER_NAME_EXIST);
|
||||
}
|
||||
|
||||
boolean save = this.updateById(carryCapacityUserPO);
|
||||
return save;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<CarryCapacityUserPO> queyDetailUser(CarryCapacityUserParam.CarryCapacityUserPageParam pageParm) {
|
||||
Page<CarryCapacityUserPO> returnpage = new Page<> (pageParm.getPageNum ( ), pageParm.getPageSize ( ));
|
||||
QueryWrapper<CarryCapacityUserPO> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda().eq(StringUtils.isNotBlank(pageParm.getUserId()) ,CarryCapacityUserPO::getUserId,pageParm.getUserId())
|
||||
.eq(StringUtils.isNotBlank(pageParm.getUserType()) ,CarryCapacityUserPO::getUserType,pageParm.getUserType())
|
||||
.between(StringUtils.isNotBlank(pageParm.getStartTime()) && StringUtils.isNotBlank(pageParm.getEndTime()) ,CarryCapacityUserPO::getCreateTime,pageParm.getStartTime(),pageParm.getEndTime());
|
||||
|
||||
IPage<CarryCapacityUserPO> page = this.page (returnpage, queryWrapper);
|
||||
return page;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,699 @@
|
||||
package com.njcn.advance.service.carrycapacity.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import com.njcn.advance.enums.AdvanceResponseEnum;
|
||||
import com.njcn.advance.enums.CarryingCapacityEnum;
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityCalParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityQueryDataParam;
|
||||
import com.njcn.advance.pojo.carrycapacity.vo.*;
|
||||
import com.njcn.advance.service.carrycapacity.CarryCapacityStrategyPOService;
|
||||
import com.njcn.advance.service.carrycapacity.CarryCapcityService;
|
||||
import com.njcn.advance.utils.CZNLPG;
|
||||
import com.njcn.advance.utils.Utils;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.common.utils.PubUtils;
|
||||
import com.njcn.device.biz.pojo.po.Overlimit;
|
||||
import com.njcn.device.pq.api.DeviceTreeClient;
|
||||
import com.njcn.device.pq.api.LineFeignClient;
|
||||
import com.njcn.device.pq.pojo.vo.TerminalTree;
|
||||
import com.njcn.influx.deprecated.InfluxDBPublicParam;
|
||||
import com.njcn.influx.imapper.DataHarmPowerPMapper;
|
||||
import com.njcn.influx.imapper.DataHarmPowerQMapper;
|
||||
import com.njcn.influx.imapper.DataVMapper;
|
||||
import com.njcn.influx.imapper.IDataIMapper;
|
||||
import com.njcn.influx.pojo.bo.CarryCapcityData;
|
||||
import com.njcn.influx.pojo.po.DataHarmPowerP;
|
||||
import com.njcn.influx.pojo.po.DataHarmPowerQ;
|
||||
import com.njcn.influx.pojo.po.DataI;
|
||||
import com.njcn.influx.pojo.po.DataV;
|
||||
import com.njcn.redis.utils.RedisUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Description:
|
||||
* Date: 2024/1/31 14:42【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class CarryCapcityServiceImpl implements CarryCapcityService {
|
||||
|
||||
private final LineFeignClient lineFeignClient;
|
||||
private final DeviceTreeClient deviceTreeClient;
|
||||
private final DataHarmPowerQMapper dataHarmPowerQMapper;
|
||||
private final DataHarmPowerPMapper dataHarmPowerPMapper;
|
||||
private final DataVMapper dataVMapper;
|
||||
private final IDataIMapper dataIMapper;
|
||||
|
||||
private final CarryCapacityStrategyPOService carryCapacityStrategyPOService;
|
||||
|
||||
private final RedisUtil redisUtil;
|
||||
|
||||
private static final double DEFAULTVALUE=3.1415926;
|
||||
//光伏评估
|
||||
void photovoltaicEvaluate(double S_T, double S_pv) {
|
||||
//电压等级
|
||||
|
||||
List<DataHarmPowerP> dataHarmPowerPList = null;
|
||||
List<DataHarmPowerQ> dataHarmPowerQList = null;
|
||||
|
||||
Integer voltage = null;
|
||||
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
|
||||
List<Double> listP = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.map(DataHarmPowerP::getP)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> listQ = dataHarmPowerQList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.map(DataHarmPowerQ::getQ)
|
||||
.collect(Collectors.toList());
|
||||
//todo 检查数据是否缺失校验数据完整性
|
||||
double P_βmin = CZNLPG.calculatePercentile(listP, 1);
|
||||
double Q_βmin = CZNLPG.calculatePercentile(listQ, 1);
|
||||
|
||||
|
||||
double P_pv = S_pv * Integer.valueOf(CarryingCapacityEnum.K.getValue());
|
||||
double Bt = CZNLPG.calculateB(P_βmin, Q_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), S_T, S_pv, P_pv);
|
||||
|
||||
CZNLPG.calculatePF_T(P_βmin, Q_βmin,Double.valueOf(CarryingCapacityEnum.K.getValue()),S_pv);
|
||||
//前2周的数据
|
||||
List<DataHarmPowerP> dataHarmPowerPList2 = null;
|
||||
List<DataHarmPowerQ> dataHarmPowerQList2 = null;
|
||||
List<DataV> DataVList2 = null;
|
||||
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
|
||||
//存储UA, UB,UC;
|
||||
List<Double> uList = new ArrayList<>();
|
||||
|
||||
phaseType.stream().forEach(phase -> {
|
||||
List<Double> listP2 = dataHarmPowerPList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(DataHarmPowerP::getP)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> listQ2 = dataHarmPowerQList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(DataHarmPowerQ::getQ)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> listV2 = DataVList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhasicType().equals(phase))
|
||||
.map(DataV::getRms)
|
||||
.collect(Collectors.toList());
|
||||
//todo 抽取5000条数据(抽取方式待确定)
|
||||
Double[] res = new Double[3];
|
||||
CZNLPG.cznlpgDataTrain(listV2, listP2, listQ2, listV2.size(), res);
|
||||
//前一周数据计算p_min,q_min
|
||||
List<Double> listPPhase = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(DataHarmPowerP::getP)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> listQPhase = dataHarmPowerQList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(DataHarmPowerQ::getQ)
|
||||
.collect(Collectors.toList());
|
||||
//todo 检查数据是否缺失校验数据完整性
|
||||
double p_min = CZNLPG.calculatePercentile(listPPhase, 1);
|
||||
double q_min = CZNLPG.calculatePercentile(listQPhase, 1);
|
||||
|
||||
double U = CZNLPG.calculateU(res[0], res[1], res[2], p_min, Double.valueOf(CarryingCapacityEnum.K.getValue()), q_min, S_pv, voltage);
|
||||
uList.add(U);
|
||||
});
|
||||
//取uList最大值
|
||||
double U_T = uList.stream().mapToDouble(Double::doubleValue)
|
||||
.max()
|
||||
.getAsDouble();
|
||||
|
||||
|
||||
List<Double> i_Th_List = new ArrayList<>();
|
||||
|
||||
List<DataI> dataIList = null;
|
||||
List<Integer> integerList = Stream.of(2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25).collect(Collectors.toList());
|
||||
|
||||
integerList.stream().forEach(temp->{
|
||||
List<Double> iList = new ArrayList<>();
|
||||
phaseType.stream().forEach(phase -> {
|
||||
|
||||
List<DataI> tempDataIList = dataIList.stream().filter(temp1 -> Utils.isTimeInRange(temp1.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp1 -> temp1.getPhaseType().equals(phase))
|
||||
.collect(Collectors.toList());
|
||||
//todo 检查数据是否缺失校验数据完整性
|
||||
|
||||
List<Double> attributeValueByPropertyName = Utils.getAttributeValueByPropertyName(tempDataIList, "i" + temp);
|
||||
double I_cp95 = CZNLPG.calculatePercentile(attributeValueByPropertyName, 0);
|
||||
double I_phase = CZNLPG.calculateITm(I_cp95, Double.valueOf(CarryingCapacityEnum.K.getValue()),
|
||||
voltage, S_pv, Double.valueOf(CarryingCapacityEnum.getValueByCode("K_H_" + temp)),
|
||||
Double.valueOf(CarryingCapacityEnum.getValueByCode("I_INV_" + temp)));
|
||||
iList.add(I_phase);
|
||||
});
|
||||
double I_th = iList.stream().mapToDouble(Double::doubleValue)
|
||||
.max()
|
||||
.getAsDouble();
|
||||
i_Th_List.add(I_th);
|
||||
|
||||
});
|
||||
//todo 根据监测点查找限值
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarryCapacityDataVO queryCarryCapacityData(CarryCapacityQueryDataParam queryParam) {
|
||||
CarryCapacityDataVO carryCapacityDataVO = new CarryCapacityDataVO();
|
||||
String lineId = queryParam.getLineId();
|
||||
// LineDetailDataVO data = lineFeignClient.getLineDetailData(lineId).getData();
|
||||
// //时间间隔
|
||||
// Integer timeInterval = data.getTimeInterval();
|
||||
Integer timeInterval =1;
|
||||
//根据时间间隔算出最低数据量 7天*6小时*60分钟*3项*90%/时间间隔
|
||||
int minDataNum = 7*6*60*3*90/(100*timeInterval);
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
String startTime = LocalDateTimeUtil.format(queryParam.getStartTime(), formatter) + " 00:00:00";
|
||||
String endTime = LocalDateTimeUtil.format(queryParam.getEndTime(), formatter) + " 23:59:00";
|
||||
/* 近一周的数据包括电流,电压,有功功率,无功功率,数据完整性校验就取有功功率一组数据校验,因为,要有都有要没有都没有,数据查询按时间间隔和tag分组,
|
||||
缺失布置3.1415926,后边更具3.1415926个数来判断数据完整性,及进行数据补充*/
|
||||
//有功功率
|
||||
String SqlP1 = "select mean(p) as value from data_harmpower_p 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> dataHarmPowerPList = dataHarmPowerPMapper.getSqlResult(SqlP1);
|
||||
|
||||
|
||||
//数据校验
|
||||
if(CollectionUtil.isEmpty(dataHarmPowerPList)){
|
||||
throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
|
||||
}else {
|
||||
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
|
||||
List<Double> listP = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getValue()!=DEFAULTVALUE)
|
||||
.map(CarryCapcityData::getValue)
|
||||
.collect(Collectors.toList());
|
||||
if (listP.size()<minDataNum){
|
||||
|
||||
throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
|
||||
}
|
||||
}
|
||||
//数据缺失填补
|
||||
linearInterpolation(dataHarmPowerPList);
|
||||
carryCapacityDataVO.setData(dataHarmPowerPList);
|
||||
|
||||
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
|
||||
|
||||
Map<String,Double> results = new HashMap<>(4);
|
||||
//计算最小Cp95值用于评估
|
||||
phaseType.stream().forEach(phase -> {
|
||||
List<Double> listP = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getValue()!=DEFAULTVALUE)
|
||||
.filter(temp -> Objects.equals(temp.getPhaseType(),phase))
|
||||
.map(CarryCapcityData::getValue)
|
||||
.collect(Collectors.toList());
|
||||
double P_βmin = CZNLPG.calculatePercentile(listP, 1);
|
||||
results.put(phase, P_βmin);
|
||||
});
|
||||
|
||||
carryCapacityDataVO.setP_βminMap(results);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//前2周的数据用于计算首端电流模型参数
|
||||
String forwardStartTime = LocalDateTimeUtil.format(queryParam.getStartTime()
|
||||
// .plusWeeks(-1)
|
||||
, formatter) + " 00:00:00";
|
||||
String forwardEndTime = LocalDateTimeUtil.format(queryParam.getEndTime()
|
||||
// .plusWeeks(-1)
|
||||
, formatter) + " 23:59:00";
|
||||
|
||||
String SqlP2 = "select mean(p) 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;
|
||||
List<CarryCapcityData> dataHarmPowerPList2 = 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)
|
||||
// .map(CarryCapcityData::getValue)
|
||||
// .collect(Collectors.toList());
|
||||
// if (listP.size()<minDataNum){
|
||||
// throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
|
||||
// }
|
||||
// }
|
||||
//数据缺失填补
|
||||
linearInterpolation(dataHarmPowerPList2);
|
||||
|
||||
//有功功率
|
||||
String SqlQ2 = "select mean(q) as value from data_harmpower_q 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;
|
||||
List<CarryCapcityData> dataHarmPowerQList2 = dataHarmPowerQMapper.getSqlResult(SqlQ2);
|
||||
//数据缺失填补
|
||||
linearInterpolation(dataHarmPowerQList2);
|
||||
|
||||
|
||||
|
||||
//电压
|
||||
String SqlU2 = "select mean(rms) as value from data_v 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;
|
||||
List<CarryCapcityData> dataVList2 = dataVMapper.getSqlResult(SqlU2);
|
||||
//数据缺失填补
|
||||
linearInterpolation(dataVList2);
|
||||
|
||||
//用前2周的数据计算C,a,b
|
||||
Map<String, Double[]> stringMap = calUParam(dataHarmPowerPList2, dataHarmPowerQList2, dataVList2);
|
||||
carryCapacityDataVO.setStringMap(stringMap);
|
||||
|
||||
return carryCapacityDataVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarryCapacityDataQVO queryCarryCapacityQData(CarryCapacityQueryDataParam queryParam) {
|
||||
|
||||
CarryCapacityDataQVO carryCapacityDataQVO = new CarryCapacityDataQVO();
|
||||
String lineId = queryParam.getLineId();
|
||||
// LineDetailDataVO data = lineFeignClient.getLineDetailData(lineId).getData();
|
||||
// //时间间隔
|
||||
// Integer timeInterval = data.getTimeInterval();
|
||||
Integer timeInterval =1;
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
String startTime = LocalDateTimeUtil.format(queryParam.getStartTime(), formatter) + " 00:00:00";
|
||||
String endTime = LocalDateTimeUtil.format(queryParam.getEndTime(), formatter) + " 23:59:00";
|
||||
//无功功率
|
||||
String SqlQ1 = "select mean(q) 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);
|
||||
//数据缺失填补
|
||||
linearInterpolation(dataHarmPowerList);
|
||||
carryCapacityDataQVO.setData(dataHarmPowerList);
|
||||
|
||||
|
||||
|
||||
|
||||
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
|
||||
|
||||
Map<String,Double> results = new HashMap<>(4);
|
||||
//计算最小Cp95值用于评估
|
||||
phaseType.stream().forEach(phase -> {
|
||||
List<Double> listQ = dataHarmPowerList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getValue()!=DEFAULTVALUE)
|
||||
.filter(temp -> Objects.equals(temp.getPhaseType(),phase))
|
||||
.map(CarryCapcityData::getValue)
|
||||
.collect(Collectors.toList());
|
||||
double Q_βmin = CZNLPG.calculatePercentile(listQ, 1);
|
||||
results.put(phase, Q_βmin);
|
||||
});
|
||||
|
||||
carryCapacityDataQVO.setQ_βminMap(results);
|
||||
return carryCapacityDataQVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarryCapacityDataIVO queryCarryCapacityIData(CarryCapacityQueryDataParam queryParam) {
|
||||
CarryCapacityDataIVO carryCapacityDataIVO = new CarryCapacityDataIVO();
|
||||
String lineId = queryParam.getLineId();
|
||||
// LineDetailDataVO data = lineFeignClient.getLineDetailData(lineId).getData();
|
||||
// //时间间隔
|
||||
// Integer timeInterval = data.getTimeInterval();
|
||||
Integer timeInterval =1;
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
String startTime = LocalDateTimeUtil.format(queryParam.getStartTime(), formatter) + " 00:00:00";
|
||||
String endTime = LocalDateTimeUtil.format(queryParam.getEndTime(), formatter) + " 23:59:00";
|
||||
|
||||
//电流
|
||||
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;
|
||||
List<DataI> dataI = dataIMapper.getSqlResult(sqlI1);
|
||||
//数据缺失填补
|
||||
linearInterpolationI(dataI);
|
||||
List<CarryCapcityData> i_list = dataI.stream().map(temp -> {
|
||||
CarryCapcityData carryCapcityData = new CarryCapcityData();
|
||||
BeanUtils.copyProperties(temp, carryCapcityData);
|
||||
carryCapcityData.setValue(Utils.getAttributeValueByPropertyName(temp, "i" + queryParam.getTime()));
|
||||
return carryCapcityData;
|
||||
}).collect(Collectors.toList());
|
||||
carryCapacityDataIVO.setData(i_list);
|
||||
|
||||
List<Double> I_βmax =new ArrayList<>();
|
||||
List<Integer> integerList = Stream.of(2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25).collect(Collectors.toList());
|
||||
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
|
||||
integerList.stream().forEach(temp->{
|
||||
List<Double> iList = new ArrayList<>();
|
||||
phaseType.stream().forEach(phase -> {
|
||||
|
||||
List<DataI> tempDataIList = dataI.stream().filter(temp1 -> Utils.isTimeInRange(temp1.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp1 -> temp1.getPhaseType().equals(phase))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> attributeValueByPropertyName = Utils.getAttributeValueByPropertyName(tempDataIList, "i" + temp);
|
||||
double I_cp95 = CZNLPG.calculatePercentile(attributeValueByPropertyName, 0);
|
||||
iList.add(I_cp95);
|
||||
});
|
||||
//取uList最大值
|
||||
double i_Max = iList.stream().mapToDouble(Double::doubleValue)
|
||||
.max()
|
||||
.getAsDouble();
|
||||
I_βmax.add(i_Max);
|
||||
});
|
||||
carryCapacityDataIVO.setI_βmax(I_βmax);
|
||||
|
||||
return carryCapacityDataIVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarryCapacityDResultVO carryCapacityCal(CarryCapacityCalParam calParam) {
|
||||
CarryCapacityDResultVO carryCapacityDResultVO = new CarryCapacityDResultVO();
|
||||
Double S_T = calParam.getS_T();
|
||||
Double S_pv = calParam.getS_pv();
|
||||
Double P_pv = calParam.getS_pv()*Double.valueOf(CarryingCapacityEnum.K.getValue());
|
||||
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
|
||||
List<Double> uList = new ArrayList<>();
|
||||
List<Double> BtList = new ArrayList<>();
|
||||
List<Double> PF_TList = new ArrayList<>();
|
||||
for (String phase : phaseType) {
|
||||
Double P_βmin = calParam.getP_βminMap().get(phase);
|
||||
Double Q_βmin = calParam.getQ_βminMap().get(phase);
|
||||
Double[] res = calParam.getStringMap().get(phase);
|
||||
double Bt = CZNLPG.calculateB(P_βmin, Q_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), S_T, S_pv, P_pv);
|
||||
BtList.add(Bt);
|
||||
double PF_T = CZNLPG.calculatePF_T(P_βmin, Q_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), S_pv);
|
||||
PF_TList.add(PF_T);
|
||||
double U = CZNLPG.calculateU(res[0], res[1], res[2], P_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), Q_βmin, S_pv, Double.valueOf(calParam.getScale()));
|
||||
uList.add(U);
|
||||
}
|
||||
//取uList最大值
|
||||
double U_T_Max = uList.stream().mapToDouble(Double::doubleValue)
|
||||
.max()
|
||||
.getAsDouble();
|
||||
double Bt_Max = BtList.stream().mapToDouble(Double::doubleValue)
|
||||
.max()
|
||||
.getAsDouble();
|
||||
double PF_T_Max = PF_TList.stream().mapToDouble(Double::doubleValue)
|
||||
.max()
|
||||
.getAsDouble();
|
||||
Integer uTLevel = CZNLPG.evaluateVoltageLevel(U_T_Max);
|
||||
carryCapacityDResultVO.setUTLevel(uTLevel);
|
||||
|
||||
Integer pfTLevel = CZNLPG.evaluatePowerFactorLevel(PF_T_Max);
|
||||
carryCapacityDResultVO.setPfTLevel(pfTLevel);
|
||||
|
||||
Integer bTLevel = CZNLPG.evaluateEquivalentLoadRateLevel(PF_T_Max);
|
||||
carryCapacityDResultVO.setPfTLevel(bTLevel);
|
||||
//谐波电流幅值判断
|
||||
//获取限值
|
||||
Overlimit overlimit = lineFeignClient.getOverLimitData(calParam.getLineId()).getData();
|
||||
|
||||
//各次谐波电流 均小于国标限值 返回1 存在某次谐波电流幅值 超出限值,但在1.25倍限值内 返回2 存在某次谐波电流幅值超出限值1.25倍以上 返回3 存在多次谐波电流幅值均超出限值1.25倍以上 返回4
|
||||
//i_count1小于国标限值的个数,i_count2>=国标限值<=1.25倍的国标限值,i_count3>1.25倍的国标限值
|
||||
int i_count1=0,i_count2=0,i_count3=0;
|
||||
for (int i = 0; i < calParam.getI_βmax().size(); i++) {
|
||||
double I_TM = CZNLPG.calculateITm(calParam.getI_βmax().get(i), Double.valueOf(CarryingCapacityEnum.K.getValue()),
|
||||
Double.valueOf(calParam.getScale()), S_pv, Double.valueOf(CarryingCapacityEnum.getValueByCode("K_H_" + (i + 2))),
|
||||
Double.valueOf(CarryingCapacityEnum.getValueByCode("I_INV_" + (i + 2))));
|
||||
double getUharm = PubUtils.getValueByMethod(overlimit, "getIharm", i + 2);
|
||||
if (I_TM<getUharm) {
|
||||
i_count1++;
|
||||
} else if (I_TM >= getUharm && I_TM <= 1.25 * getUharm) {
|
||||
i_count2++;
|
||||
} else if (I_TM > 1.25 * getUharm) {
|
||||
i_count3++;
|
||||
}
|
||||
|
||||
}
|
||||
Integer iLevel = 1;
|
||||
if (i_count3>1) {
|
||||
iLevel=4;
|
||||
} else if (i_count3==1) {
|
||||
iLevel=3;
|
||||
} else if (i_count2==1) {
|
||||
iLevel=2;
|
||||
}else {
|
||||
iLevel=1;
|
||||
}
|
||||
carryCapacityDResultVO.setILevel(iLevel);
|
||||
//统计安全,3级预警,2级预警1级预警个数
|
||||
List<Integer> list = Stream.of(uTLevel, pfTLevel, bTLevel, iLevel).collect(Collectors.toList());
|
||||
int safe_count=0,warn_count3=0,warn_count2=0,warn_count1=0;
|
||||
safe_count =(int) list.stream()
|
||||
.filter(temp ->temp==1)
|
||||
.count();
|
||||
warn_count3 =(int) list.stream()
|
||||
.filter(temp ->temp==2)
|
||||
.count();
|
||||
warn_count2 =(int) list.stream()
|
||||
.filter(temp ->temp==3)
|
||||
.count();
|
||||
warn_count1 =(int) list.stream()
|
||||
.filter(temp ->temp==1)
|
||||
.count();
|
||||
|
||||
|
||||
|
||||
List<CarryCapacityStrategyVO> carryCapacityStrategyVOList = carryCapacityStrategyPOService.queyDetail();
|
||||
//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){
|
||||
carryCapacityDResultVO.setReslutLevel(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return carryCapacityDResultVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TerminalTree> carryCapacityTree() {
|
||||
List<TerminalTree> data = deviceTreeClient.getTerminalTree().getData();
|
||||
data.forEach(temp->{
|
||||
temp.getChildren().forEach(temp1->{
|
||||
temp1.getChildren().forEach(temp2->{
|
||||
temp2.getChildren().forEach(temp3->{
|
||||
temp3.getChildren().forEach(temp4->{
|
||||
List<TerminalTree> collect = temp4.getChildren().stream()
|
||||
.map(TerminalTree::getChildren).flatMap(Collection::stream)
|
||||
.map(TerminalTree::getChildren).flatMap(Collection::stream)
|
||||
.collect(Collectors.toList());
|
||||
temp4.setChildren(collect);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 首先,找到缺失值的前一个和后一个非缺失值。
|
||||
* 计算两个非缺失值之间的差值。
|
||||
* 将差值除以两个非缺失值之间的距离,得到斜率。
|
||||
* 使用斜率和前一个非缺失值计算缺失值的近似值。
|
||||
* @Param:
|
||||
* @Author: clam
|
||||
* @Date: 2024/2/28
|
||||
*/
|
||||
public static void linearInterpolation(List<CarryCapcityData> data) {
|
||||
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
if (data.get(i).getValue() == DEFAULTVALUE ) {
|
||||
int prevIndex = i - 1;
|
||||
int nextIndex = i + 1;
|
||||
while (prevIndex >= 0 && data.get(prevIndex).getValue() == DEFAULTVALUE) {
|
||||
prevIndex--;
|
||||
}
|
||||
while (nextIndex < data.size() && data.get(nextIndex).getValue() == DEFAULTVALUE) {
|
||||
nextIndex++;
|
||||
}
|
||||
if (prevIndex >= 0 && nextIndex < data.size()) {
|
||||
double slope = (data.get(nextIndex).getValue() - data.get(prevIndex).getValue()) / (nextIndex - prevIndex);
|
||||
data.get(i).setValue(data.get(prevIndex).getValue() + slope * (i - prevIndex));
|
||||
} else {
|
||||
data.get(i).setValue(DEFAULTVALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* @Description: linearInterpolationI 电流数据缺失填补
|
||||
* @Param:
|
||||
* @return: void
|
||||
* @Author: clam
|
||||
* @Date: 2024/2/28
|
||||
*/
|
||||
public static void linearInterpolationI(List<DataI> data) {
|
||||
for (int k= 2; k <=25 ; k++) {
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
if (data.get(i).getI2() == DEFAULTVALUE) {
|
||||
int prevIndex = i - 1;
|
||||
int nextIndex = i + 1;
|
||||
while (prevIndex >= 0 && data.get(prevIndex).getI2() == DEFAULTVALUE) {
|
||||
prevIndex--;
|
||||
}
|
||||
while (nextIndex < data.size() && data.get(nextIndex).getI2() == DEFAULTVALUE) {
|
||||
nextIndex++;
|
||||
}
|
||||
if (prevIndex >= 0 && nextIndex < data.size()) {
|
||||
double slope = (data.get(nextIndex).getI2() - data.get(prevIndex).getI2()) / (nextIndex - prevIndex);
|
||||
data.get(i).setI2(data.get(prevIndex).getI2() + slope * (i - prevIndex));
|
||||
data.get(i).setI3(data.get(prevIndex).getI3() + slope * (i - prevIndex));
|
||||
data.get(i).setI4(data.get(prevIndex).getI4() + slope * (i - prevIndex));
|
||||
data.get(i).setI5(data.get(prevIndex).getI5() + slope * (i - prevIndex));
|
||||
data.get(i).setI6(data.get(prevIndex).getI6() + slope * (i - prevIndex));
|
||||
data.get(i).setI7(data.get(prevIndex).getI7() + slope * (i - prevIndex));
|
||||
data.get(i).setI8(data.get(prevIndex).getI8() + slope * (i - prevIndex));
|
||||
data.get(i).setI9(data.get(prevIndex).getI9() + slope * (i - prevIndex));
|
||||
data.get(i).setI10(data.get(prevIndex).getI10() + slope * (i - prevIndex));
|
||||
data.get(i).setI11(data.get(prevIndex).getI11() + slope * (i - prevIndex));
|
||||
data.get(i).setI12(data.get(prevIndex).getI12() + slope * (i - prevIndex));
|
||||
data.get(i).setI13(data.get(prevIndex).getI13() + slope * (i - prevIndex));
|
||||
data.get(i).setI14(data.get(prevIndex).getI14() + slope * (i - prevIndex));
|
||||
data.get(i).setI15(data.get(prevIndex).getI15() + slope * (i - prevIndex));
|
||||
data.get(i).setI16(data.get(prevIndex).getI16() + slope * (i - prevIndex));
|
||||
data.get(i).setI17(data.get(prevIndex).getI17() + slope * (i - prevIndex));
|
||||
data.get(i).setI18(data.get(prevIndex).getI18() + slope * (i - prevIndex));
|
||||
data.get(i).setI19(data.get(prevIndex).getI19() + slope * (i - prevIndex));
|
||||
data.get(i).setI20(data.get(prevIndex).getI20() + slope * (i - prevIndex));
|
||||
data.get(i).setI21(data.get(prevIndex).getI21() + slope * (i - prevIndex));
|
||||
data.get(i).setI22(data.get(prevIndex).getI22() + slope * (i - prevIndex));
|
||||
data.get(i).setI23(data.get(prevIndex).getI23() + slope * (i - prevIndex));
|
||||
data.get(i).setI24(data.get(prevIndex).getI24() + slope * (i - prevIndex));
|
||||
data.get(i).setI25(data.get(prevIndex).getI25() + slope * (i - prevIndex));
|
||||
|
||||
} else {
|
||||
data.get(i).setI2(DEFAULTVALUE);
|
||||
data.get(i).setI3(DEFAULTVALUE);
|
||||
data.get(i).setI4(DEFAULTVALUE);
|
||||
data.get(i).setI5(DEFAULTVALUE);
|
||||
data.get(i).setI6(DEFAULTVALUE);
|
||||
data.get(i).setI7(DEFAULTVALUE);
|
||||
data.get(i).setI8(DEFAULTVALUE);
|
||||
data.get(i).setI9(DEFAULTVALUE);
|
||||
data.get(i).setI10(DEFAULTVALUE);
|
||||
data.get(i).setI11(DEFAULTVALUE);
|
||||
data.get(i).setI12(DEFAULTVALUE);
|
||||
data.get(i).setI13(DEFAULTVALUE);
|
||||
data.get(i).setI14(DEFAULTVALUE);
|
||||
data.get(i).setI15(DEFAULTVALUE);
|
||||
data.get(i).setI16(DEFAULTVALUE);
|
||||
data.get(i).setI17(DEFAULTVALUE);
|
||||
data.get(i).setI18(DEFAULTVALUE);
|
||||
data.get(i).setI19(DEFAULTVALUE);
|
||||
data.get(i).setI20(DEFAULTVALUE);
|
||||
data.get(i).setI21(DEFAULTVALUE);
|
||||
data.get(i).setI22(DEFAULTVALUE);
|
||||
data.get(i).setI23(DEFAULTVALUE);
|
||||
data.get(i).setI24(DEFAULTVALUE);
|
||||
data.get(i).setI25(DEFAULTVALUE);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @Description: calUParam 首端电压模型训练获取A,B,C三项C,a,b参数
|
||||
* @Param:
|
||||
* @return: java.util.Map<java.lang.String,java.lang.Double[]>
|
||||
* @Author: clam
|
||||
* @Date: 2024/2/29
|
||||
*/
|
||||
public static Map<String,Double[]> calUParam(List<CarryCapcityData> dataHarmPowerPList2,List<CarryCapcityData> dataHarmPowerQList2,List<CarryCapcityData> DataVList2){
|
||||
Map<String,Double[]> results = new HashMap<>(4);
|
||||
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
|
||||
//存储UA, UB,UC;
|
||||
List<Double> uList = new ArrayList<>();
|
||||
|
||||
phaseType.stream().forEach(phase -> {
|
||||
List<Double> listP2 = dataHarmPowerPList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(CarryCapcityData::getValue)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> listQ2 = dataHarmPowerQList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(CarryCapcityData::getValue)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<Double> listV2 = DataVList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
|
||||
.filter(temp -> temp.getPhaseType().equals(phase))
|
||||
.map(CarryCapcityData::getValue)
|
||||
.collect(Collectors.toList());
|
||||
//todo 抽取5000条数据(抽取方式待确定)
|
||||
Double[] res = new Double[3];
|
||||
CZNLPG.cznlpgDataTrain(listV2, listP2, listQ2, listV2.size(), res);
|
||||
results.put(phase, res);
|
||||
|
||||
});
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
private static boolean compareNumbers(int num1, int num2, String operator) {
|
||||
if (operator.equals("/")) {
|
||||
return true;
|
||||
}
|
||||
else if (operator.equals("<") ) {
|
||||
return num1 < num2;
|
||||
} else if (operator.equals(">")) {
|
||||
return num1 > num2;
|
||||
} else if (operator.equals("<=")) {
|
||||
return num1 <= num2;
|
||||
} else if (operator.equals(">=")) {
|
||||
return num1 >= num2;
|
||||
} else if (operator.equals("==")) {
|
||||
return num1 == num2;
|
||||
} else if (operator.equals("!=")) {
|
||||
return num1 != num2;
|
||||
} else {
|
||||
throw new IllegalArgumentException("无效的操作符");
|
||||
}
|
||||
}
|
||||
private static boolean StrategyReslut(List<CarryCapacityStrategyVO> carryCapacityStrategyVOList, int result_level, int index_result_level,int result_count) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user