代码提交

This commit is contained in:
huangzj
2023-09-18 09:13:46 +08:00
parent a2cc83e6f5
commit 38018153b5
4 changed files with 625 additions and 1 deletions

View File

@@ -0,0 +1,74 @@
package com.njcn.prepare.harmonic.controller.newalgorithm;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.prepare.harmonic.pojo.param.OrgParam;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatLoadTypeService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2022/12/28 13:47【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Api(tags = "单位监测点稳态指标统计")
@RestController
@RequestMapping("/rstatLoad")
@RequiredArgsConstructor
public class RStatLoadTypeController extends BaseController {
private final RStatLoadTypeService service;
private final DeptFeignClient deptFeignClient;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/Handler")
@ApiOperation("单位监测点稳态指标统计")
@ApiImplicitParam(name = "orgParam", value = "参数", required = true)
public HttpResult<String> handler(@RequestBody @Validated OrgParam orgParam ){
log.info(LocalDateTime.now()+"dayHandler始执行");
String methodDescribe = getMethodDescribe("dayHandler");
/**
* 支持补录
*/
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
List<Dept> deptList = new ArrayList<>();
if(StringUtils.isEmpty(orgParam.getOrgId())){
Dept data = deptFeignClient.getRootDept().getData();
deptList= deptFeignClient.getDirectSonSelf(data.getId()).getData();
}else {
deptList = deptFeignClient.getDirectSonSelf(orgParam.getOrgId()).getData();
}
service.handler (deptList,orgParam.getDataDate(),orgParam.getType());
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -187,8 +187,78 @@ public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageServ
List<LineDevGetDTO> pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds(); List<LineDevGetDTO> pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
Map<Integer, List<LineDevGetDTO>> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType)); Map<Integer, List<LineDevGetDTO>> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
collect.forEach((k, v) -> { collect.forEach((k, v) -> {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); {
List<String> collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
Map<String, List<LineDevGetDTO>> collect2 = v.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel));
collect2.forEach((k1, v1) -> {
queryWrapper.clear();
queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
in("measurement_point_id", collect1).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RMpPartHarmonicDetailM> rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
rMpSurplusHarmonicDetailMQueryWrapper.clear();
rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
in("measurement_point_id", collect1).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RMpSurplusHarmonicDetailM> rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
rStatOrgMPOQueryWrapper.clear();
rStatOrgMPOQueryWrapper.select("effective_measurement_accrued").
eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", k).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper);
steadyStatis.forEach(dictData -> {
if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
return;
}
RStatHarmonicVoltageMPO rStatHarmonicVoltageMPO = new RStatHarmonicVoltageMPO();
rStatHarmonicVoltageMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
rStatHarmonicVoltageMPO.setDataDate(date);
rStatHarmonicVoltageMPO.setHarmonicType(dictData.getId());
rStatHarmonicVoltageMPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
rStatHarmonicVoltageMPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
rStatHarmonicVoltageMPO.setVoltageType(k1);
/**4、累计超标监测点数*/
rStatHarmonicVoltageMPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
/*3、日均超标监测点数,6、日均超标监测点数占比*/
harmonicVoltageDPOQueryWrapper.clear();
harmonicVoltageDPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
eq("measurement_type_class", k).
eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq("harmonic_type", dictData.getId()).
eq("voltageType",k1).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RStatHarmonicVoltageDPO> list = rStatHarmonicVoltageDPOService.list(harmonicVoltageDPOQueryWrapper);
double asDouble = list.stream().mapToDouble(RStatHarmonicVoltageDPO::getOverLimitMeasurementAverage).average().getAsDouble();
asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
rStatHarmonicVoltageMPO.setOverLimitMeasurementAverage(asDouble);
double asDouble1 = list.stream().mapToDouble(RStatHarmonicVoltageDPO::getOverLimitMeasurementRatioAverage).average().getAsDouble();
asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(asDouble);
int sum = list.stream().mapToInt(RStatHarmonicVoltageDPO::getOverLimitMeasurementAverage).sum();
rStatHarmonicVoltageMPO.setOverDay(sum);
if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) {
//todo为0时如何设值
rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(0.00);
} else {
String value = df.format((float) rStatHarmonicVoltageMPO.getOverLimitMeasurementAccrued() / rStatOrgMPO.getEffectiveMeasurementAccrued());
rStatHarmonicVoltageMPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
}
rStatHarmonicVoltageMPOList.add(rStatHarmonicVoltageMPO);
});
});
}
}); });

View File

@@ -0,0 +1,16 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.njcn.user.pojo.po.Dept;
import java.util.List;
/**
* Description:
* Date: 2023/8/14 10:13【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatLoadTypeService {
void handler(List<Dept> deptList, String dataDate, Integer type);
}

View File

@@ -0,0 +1,464 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.pms.pojo.po.RStatOrgPO;
import com.njcn.harmonic.pojo.po.RStatOrgMPO;
import com.njcn.prepare.harmonic.mapper.mysql.area.*;
import com.njcn.prepare.harmonic.pojo.mysql.po.*;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicDPOService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicMPOService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicQPOService;
import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicYPOService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
import com.njcn.prepare.harmonic.utils.PublicUtil;
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 com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* Description:
* Date: 2023/8/14 10:14【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class RStatLoadTypeServiceImpl implements RStatLoadTypeService {
private final RStatLoadTypeDPOService rStatLoadTypeDPOService;
private final RStatLoadTypeMPOService rStatLoadTypeMPOService;
private final RStatLoadTypeQPOService rStatLoadTypeQPOService;
private final RStatLoadTypeYPOService rStatLoadTypeYPOService;
private final
DicDataFeignClient dicDataFeignClient;
private final RStatHarmonicDPOService rStatHarmonicDPOService;
private final RStatHarmonicMPOMapper rStatHarmonicMPOMapper;
private final RStatHarmonicQPOMapper rStatHarmonicQPOMapper;
private final RStatHarmonicYPOMapper rStatHarmonicYPOMapper;
private final RStatOrgMMapper rStatOrgMMapper;
private final RStatOrgQMapper rStatOrgQMapper;
private final RStatOrgYMapper rStatOrgYMapper;
@Override
public void handler(List<Dept> deptList, String dataDate, Integer type) {
switch (type) {
case 1:
this.hanlderYear (deptList, dataDate, type);
break;
case 2:
this.hanlderQtr (deptList, dataDate, type);
break;
case 3:
this.hanlderMonth (deptList, dataDate, type);
break;
case 5:
this.hanlderDay ( deptList, dataDate, type);
break;
default:
break;
}
}
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@SneakyThrows
private void hanlderYear(List<Dept> deptList, String dataDate, Integer type) {
Date date = DateUtil.parse(dataDate);
List<RStatLoadTypeYPO> result = new ArrayList<>();
QueryWrapper<RStatHarmonicYPO> queryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgYPO> rStatOrgYPOQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatLoadTypeMPO> rStatLoadTypeMPOQueryWrapper = new QueryWrapper<>();
List<DictData> dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷)
Map<String, DictData> collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData));
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
Map<String, DictData> steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
deptList.forEach(dept -> {
collect.forEach((m,n)->{
rStatOrgYPOQueryWrapper.clear();
rStatOrgYPOQueryWrapper.eq("measurement_type_class",m).
eq("org_no",dept.getId()).
eq("YEAR( data_date)", dataDate.substring(0,4));
List<RStatOrgYPO> rStatOrgYPOS = rStatOrgYMapper.selectList(rStatOrgYPOQueryWrapper);
queryWrapper.clear();
queryWrapper.eq("org_no",dept.getId()).
eq("YEAR( data_date)", dataDate.substring(0,4));
List<RStatHarmonicYPO> rStatHarmonicYPOS = rStatHarmonicYPOMapper.selectList(queryWrapper);
rStatLoadTypeMPOQueryWrapper.clear();
rStatLoadTypeMPOQueryWrapper.eq("org_no",dept.getId()).
eq("load_type",m).
eq("YEAR( data_date)", dataDate.substring(0,4));
List<RStatLoadTypeMPO> rStatLoadTypeMPOS = rStatLoadTypeMPOService.getBaseMapper().selectList(rStatLoadTypeMPOQueryWrapper);
RStatLoadTypeYPO rStatLoadTypeYPO = new RStatLoadTypeYPO();
rStatLoadTypeYPO.setDataDate(date);
rStatLoadTypeYPO.setOrgNo(dept.getId());
rStatLoadTypeYPO.setLoadType(m);
/*2、有效接入监测点数*/
if(CollectionUtils.isEmpty(rStatOrgYPOS)){
rStatLoadTypeYPO.setEffectiveMeasurement(0);
}else {
rStatLoadTypeYPO.setEffectiveMeasurement(rStatOrgYPOS.get(0).getEffectiveMeasurementAccrued());
}
/*4、谐波电压超标点数6、谐波电流超标点数*/
if(CollectionUtils.isEmpty(rStatHarmonicYPOS)){
rStatLoadTypeYPO.setVCount(0);
rStatLoadTypeYPO.setICount(0);
rStatLoadTypeYPO.setINegCount(0);
rStatLoadTypeYPO.setUnbalanceCount(0);
rStatLoadTypeYPO.setFlickerCount(0);
}else {
Optional<RStatHarmonicYPO> vfirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId())).findFirst();
rStatLoadTypeYPO.setVCount(vfirst.isPresent() ? vfirst.get().getOverLimitMeasurementAccrued(): 0);
Optional<RStatHarmonicYPO> ifirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId())).findFirst();
rStatLoadTypeYPO.setVCount(ifirst.isPresent() ? ifirst.get().getOverLimitMeasurementAccrued(): 0);
Optional<RStatHarmonicYPO> pfirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId())).findFirst();
Optional<RStatHarmonicYPO> nfirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId())).findFirst();
Optional<RStatHarmonicYPO> ffirst = rStatHarmonicYPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.FLICKER).getId())).findFirst();
rStatLoadTypeYPO.setINegCount(nfirst.isPresent() ? nfirst.get().getOverLimitMeasurementAccrued(): 0);
rStatLoadTypeYPO.setUnbalanceCount(pfirst.isPresent() ? pfirst.get().getOverLimitMeasurementAccrued(): 0);
rStatLoadTypeYPO.setFlickerCount(ffirst.isPresent() ? ffirst.get().getOverLimitMeasurementAccrued(): 0);
}
/*3、日均谐波电压超标点占比5、日均谐波电流超标点占比,7、日均三相电压不平衡度超标点占比9、日均负序电流超标点占比11、日均闪变超标点占比*/
if(CollectionUtils.isEmpty(rStatLoadTypeMPOS)){
rStatLoadTypeYPO.setVAverage(0.00);
rStatLoadTypeYPO.setIAverage(0.00);
rStatLoadTypeYPO.setUnbalanceAverage(0.00);
rStatLoadTypeYPO.setFlickerAverage(0.00);
rStatLoadTypeYPO.setINegAverage(0.00);
}else {
double vavg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getVAverage).average().getAsDouble();
rStatLoadTypeYPO.setVAverage(vavg);
double iavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getIAverage).average().getAsDouble();
rStatLoadTypeYPO.setIAverage(iavge);
double uavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getUnbalanceAverage).average().getAsDouble();
rStatLoadTypeYPO.setUnbalanceAverage(uavge);
double inavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getINegAverage).average().getAsDouble();
double favg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getFlickerAverage).average().getAsDouble();
rStatLoadTypeYPO.setFlickerAverage(favg);
rStatLoadTypeYPO.setINegAverage(inavge);
}
result.add(rStatLoadTypeYPO);
});
});
if(CollectionUtil.isNotEmpty(result)){
rStatLoadTypeYPOService.saveOrUpdateBatchByMultiId(result,500);
}
}
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@SneakyThrows
private void hanlderQtr(List<Dept> deptList, String dataDate, Integer type) {
Date date = DateUtil.parse(dataDate);
List<RStatLoadTypeQPO> result = new ArrayList<>();
QueryWrapper<RStatHarmonicQPO> queryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgQPO> rStatOrgQPOQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatLoadTypeMPO> rStatLoadTypeMPOQueryWrapper = new QueryWrapper<>();
List<DictData> dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷)
Map<String, DictData> collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData));
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
Map<String, DictData> steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
deptList.forEach(dept -> {
collect.forEach((m,n)->{
rStatOrgQPOQueryWrapper.clear();
rStatOrgQPOQueryWrapper.eq("measurement_type_class",m).
eq("org_no",dept.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatOrgQPO> rStatOrgQPOS = rStatOrgQMapper.selectList(rStatOrgQPOQueryWrapper);
queryWrapper.clear();
queryWrapper.eq("org_no",dept.getId()).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatHarmonicQPO> rStatHarmonicQPOS = rStatHarmonicQPOMapper.selectList(queryWrapper);
rStatLoadTypeMPOQueryWrapper.clear();
rStatLoadTypeMPOQueryWrapper.eq("org_no",dept.getId()).
eq("load_type",m).
eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
List<RStatLoadTypeMPO> rStatLoadTypeMPOS = rStatLoadTypeMPOService.getBaseMapper().selectList(rStatLoadTypeMPOQueryWrapper);
RStatLoadTypeQPO rStatLoadTypeQPO = new RStatLoadTypeQPO();
rStatLoadTypeQPO.setDataDate(date);
rStatLoadTypeQPO.setOrgNo(dept.getId());
rStatLoadTypeQPO.setLoadType(m);
/*2、有效接入监测点数*/
if(CollectionUtils.isEmpty(rStatOrgQPOS)){
rStatLoadTypeQPO.setEffectiveMeasurement(0);
}else {
rStatLoadTypeQPO.setEffectiveMeasurement(rStatOrgQPOS.get(0).getEffectiveMeasurementAccrued());
}
/*4、谐波电压超标点数6、谐波电流超标点数*/
if(CollectionUtils.isEmpty(rStatHarmonicQPOS)){
rStatLoadTypeQPO.setVCount(0);
rStatLoadTypeQPO.setICount(0);
rStatLoadTypeQPO.setINegCount(0);
rStatLoadTypeQPO.setUnbalanceCount(0);
rStatLoadTypeQPO.setFlickerCount(0);
}else {
Optional<RStatHarmonicQPO> vfirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId())).findFirst();
rStatLoadTypeQPO.setVCount(vfirst.isPresent() ? vfirst.get().getOverLimitMeasurementAccrued(): 0);
Optional<RStatHarmonicQPO> ifirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId())).findFirst();
rStatLoadTypeQPO.setVCount(ifirst.isPresent() ? ifirst.get().getOverLimitMeasurementAccrued(): 0);
Optional<RStatHarmonicQPO> pfirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId())).findFirst();
Optional<RStatHarmonicQPO> nfirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId())).findFirst();
Optional<RStatHarmonicQPO> ffirst = rStatHarmonicQPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.FLICKER).getId())).findFirst();
rStatLoadTypeQPO.setINegCount(nfirst.isPresent() ? nfirst.get().getOverLimitMeasurementAccrued(): 0);
rStatLoadTypeQPO.setUnbalanceCount(pfirst.isPresent() ? pfirst.get().getOverLimitMeasurementAccrued(): 0);
rStatLoadTypeQPO.setFlickerCount(ffirst.isPresent() ? ffirst.get().getOverLimitMeasurementAccrued(): 0);
}
/*3、日均谐波电压超标点占比5、日均谐波电流超标点占比,7、日均三相电压不平衡度超标点占比9、日均负序电流超标点占比11、日均闪变超标点占比*/
if(CollectionUtils.isEmpty(rStatLoadTypeMPOS)){
rStatLoadTypeQPO.setVAverage(0.00);
rStatLoadTypeQPO.setIAverage(0.00);
rStatLoadTypeQPO.setUnbalanceAverage(0.00);
rStatLoadTypeQPO.setFlickerAverage(0.00);
rStatLoadTypeQPO.setINegAverage(0.00);
}else {
double vavg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getVAverage).average().getAsDouble();
rStatLoadTypeQPO.setVAverage(vavg);
double iavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getIAverage).average().getAsDouble();
rStatLoadTypeQPO.setIAverage(iavge);
double uavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getUnbalanceAverage).average().getAsDouble();
rStatLoadTypeQPO.setUnbalanceAverage(uavge);
double inavge = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getINegAverage).average().getAsDouble();
double favg = rStatLoadTypeMPOS.stream().mapToDouble(RStatLoadTypeMPO::getFlickerAverage).average().getAsDouble();
rStatLoadTypeQPO.setFlickerAverage(favg);
rStatLoadTypeQPO.setINegAverage(inavge);
}
result.add(rStatLoadTypeQPO);
});
});
if(CollectionUtil.isNotEmpty(result)){
rStatLoadTypeQPOService.saveOrUpdateBatchByMultiId(result,500);
}
}
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@SneakyThrows
private void hanlderMonth(List<Dept> deptList, String dataDate, Integer type) {
Date date = DateUtil.parse(dataDate);
List<RStatLoadTypeMPO> result = new ArrayList<>();
QueryWrapper<RStatHarmonicMPO> queryWrapper = new QueryWrapper<>();
QueryWrapper<RStatOrgMPO> rStatOrgMPOQueryWrapper = new QueryWrapper<>();
QueryWrapper<RStatLoadTypeDPO> rStatLoadTypeDPOQueryWrapper = new QueryWrapper<>();
List<DictData> dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷)
Map<String, DictData> collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData));
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
Map<String, DictData> steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
deptList.forEach(dept -> {
collect.forEach((m,n)->{
rStatOrgMPOQueryWrapper.clear();
rStatOrgMPOQueryWrapper.eq("measurement_type_class",m).
eq("org_no",dept.getId()).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RStatOrgMPO> rStatOrgMPOS = rStatOrgMMapper.selectList(rStatOrgMPOQueryWrapper);
queryWrapper.clear();
queryWrapper.eq("org_no",dept.getId()).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RStatHarmonicMPO> rStatHarmonicMPOS = rStatHarmonicMPOMapper.selectList(queryWrapper);
rStatLoadTypeDPOQueryWrapper.clear();
rStatLoadTypeDPOQueryWrapper.eq("org_no",dept.getId()).
eq("load_type",m).
eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
List<RStatLoadTypeDPO> rStatLoadTypeDPOS = rStatLoadTypeDPOService.getBaseMapper().selectList(rStatLoadTypeDPOQueryWrapper);
RStatLoadTypeMPO rStatLoadTypeMPO = new RStatLoadTypeMPO();
rStatLoadTypeMPO.setDataDate(date);
rStatLoadTypeMPO.setOrgNo(dept.getId());
rStatLoadTypeMPO.setLoadType(m);
/*2、有效接入监测点数*/
if(CollectionUtils.isEmpty(rStatOrgMPOS)){
rStatLoadTypeMPO.setEffectiveMeasurement(0);
}else {
rStatLoadTypeMPO.setEffectiveMeasurement(rStatOrgMPOS.get(0).getEffectiveMeasurementAccrued());
}
/*4、谐波电压超标点数6、谐波电流超标点数*/
if(CollectionUtils.isEmpty(rStatHarmonicMPOS)){
rStatLoadTypeMPO.setVCount(0);
rStatLoadTypeMPO.setICount(0);
rStatLoadTypeMPO.setINegCount(0);
rStatLoadTypeMPO.setUnbalanceCount(0);
rStatLoadTypeMPO.setFlickerCount(0);
}else {
Optional<RStatHarmonicMPO> vfirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId())).findFirst();
rStatLoadTypeMPO.setVCount(vfirst.isPresent() ? vfirst.get().getOverLimitMeasurementAccrued(): 0);
Optional<RStatHarmonicMPO> ifirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId())).findFirst();
rStatLoadTypeMPO.setVCount(ifirst.isPresent() ? ifirst.get().getOverLimitMeasurementAccrued(): 0);
Optional<RStatHarmonicMPO> pfirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId())).findFirst();
Optional<RStatHarmonicMPO> nfirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId())).findFirst();
Optional<RStatHarmonicMPO> ffirst = rStatHarmonicMPOS.stream().filter(temp -> Objects.equals(temp.getHarmonicType(), steadyStatisMap.get(DicDataEnum.FLICKER).getId())).findFirst();
rStatLoadTypeMPO.setINegCount(nfirst.isPresent() ? nfirst.get().getOverLimitMeasurementAccrued(): 0);
rStatLoadTypeMPO.setUnbalanceCount(pfirst.isPresent() ? pfirst.get().getOverLimitMeasurementAccrued(): 0);
rStatLoadTypeMPO.setFlickerCount(ffirst.isPresent() ? ffirst.get().getOverLimitMeasurementAccrued(): 0);
}
/*3、日均谐波电压超标点占比5、日均谐波电流超标点占比,7、日均三相电压不平衡度超标点占比9、日均负序电流超标点占比11、日均闪变超标点占比*/
if(CollectionUtils.isEmpty(rStatLoadTypeDPOS)){
rStatLoadTypeMPO.setVAverage(0.00);
rStatLoadTypeMPO.setIAverage(0.00);
rStatLoadTypeMPO.setUnbalanceAverage(0.00);
rStatLoadTypeMPO.setFlickerAverage(0.00);
rStatLoadTypeMPO.setINegAverage(0.00);
}else {
double vavg = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getVRatio).average().getAsDouble();
rStatLoadTypeMPO.setVAverage(vavg);
double iavge = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getIRatio).average().getAsDouble();
rStatLoadTypeMPO.setIAverage(iavge);
double uavge = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getUnbalanceRatio).average().getAsDouble();
rStatLoadTypeMPO.setUnbalanceAverage(uavge);
double inavge = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getINegRatio).average().getAsDouble();
double favg = rStatLoadTypeDPOS.stream().mapToDouble(RStatLoadTypeDPO::getFlickerRatio).average().getAsDouble();
rStatLoadTypeMPO.setFlickerAverage(favg);
rStatLoadTypeMPO.setINegAverage(inavge);
}
result.add(rStatLoadTypeMPO);
});
});
if(CollectionUtil.isNotEmpty(result)){
rStatLoadTypeMPOService.saveOrUpdateBatchByMultiId(result,500);
}
}
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@SneakyThrows
private void hanlderDay(List<Dept> deptList, String dataDate, Integer type) {
Date date = DateUtil.parse(dataDate);
List<RStatLoadTypeDPO> result = new ArrayList<>();
List<DictData> dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
//过滤监测对象类型(陆上风电、分布式光伏、电气化铁路、其他非线性负荷)
Map<String, DictData> collect = dataList.stream().filter(temp -> Objects.equals(temp.getLevel(), 1)).collect(Collectors.toMap(DictData::getId, dictData -> dictData));
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
;
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
Map<String, DictData> steadyStatisMap = steadyStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
deptList.forEach(dept -> {
collect.forEach((m,n)->{
RStatLoadTypeDPO rStatLoadTypeDPO = new RStatLoadTypeDPO();
rStatLoadTypeDPO.setDataDate(date);
rStatLoadTypeDPO.setOrgNo(dept.getId());
rStatLoadTypeDPO.setLoadType(m);
/*只计算谐波电压、谐波电流、三相电压不平衡度、负序电流/闪变*/
RStatHarmonicDPO one = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()).
eq(RStatHarmonicDPO::getDataDate, date).
eq(RStatHarmonicDPO::getMeasurementTypeClass, m).
eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.HARMONIC_VOLTAGE).getId()).one();
if(Objects.nonNull(one)){
rStatLoadTypeDPO.setVRatio(one.getOverLimitMeasurementRatio());
}else {
rStatLoadTypeDPO.setVRatio(0.00);
}
RStatHarmonicDPO two = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()).
eq(RStatHarmonicDPO::getDataDate, date).
eq(RStatHarmonicDPO::getMeasurementTypeClass, m).
eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.HARMONIC_CURRENT).getId()).one();
if(Objects.nonNull(two)){
rStatLoadTypeDPO.setIRatio(two.getOverLimitMeasurementRatio());
}else {
rStatLoadTypeDPO.setIRatio(0.00);
}
RStatHarmonicDPO three = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()).
eq(RStatHarmonicDPO::getDataDate, date).
eq(RStatHarmonicDPO::getMeasurementTypeClass, m).
eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.PHASE_VOLTAGE).getId()).one();
if(Objects.nonNull(three)){
rStatLoadTypeDPO.setUnbalanceRatio(three.getOverLimitMeasurementRatio());
}else {
rStatLoadTypeDPO.setUnbalanceRatio(0.00);
}
RStatHarmonicDPO four = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()).
eq(RStatHarmonicDPO::getDataDate, date).
eq(RStatHarmonicDPO::getMeasurementTypeClass, m).
eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.NEG_CURRENT).getId()).one();
if(Objects.nonNull(four)){
rStatLoadTypeDPO.setINegRatio(four.getOverLimitMeasurementRatio());
}else {
rStatLoadTypeDPO.setINegRatio(0.00);
}
RStatHarmonicDPO five = rStatHarmonicDPOService.lambdaQuery().eq(RStatHarmonicDPO::getOrgNo, dept.getId()).
eq(RStatHarmonicDPO::getDataDate, date).
eq(RStatHarmonicDPO::getMeasurementTypeClass, m).
eq(RStatHarmonicDPO::getDataType, dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
eq(RStatHarmonicDPO::getHarmonicType, steadyStatisMap.get(DicDataEnum.FLICKER).getId()).one();
if(Objects.nonNull(five)){
rStatLoadTypeDPO.setFlickerRatio(five.getOverLimitMeasurementRatio());
}else {
rStatLoadTypeDPO.setFlickerRatio(0.00);
}
result.add(rStatLoadTypeDPO);
});
});
if(CollectionUtil.isNotEmpty(result)){
rStatLoadTypeDPOService.saveOrUpdateBatchByMultiId(result,500);
}
}
}