|
|
|
|
@@ -4,27 +4,42 @@ package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
|
|
|
|
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
|
|
|
|
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
|
|
|
|
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
|
|
|
|
|
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
|
|
|
|
|
import com.njcn.device.pms.pojo.po.Monitor;
|
|
|
|
|
import com.njcn.device.pms.pojo.po.GeneratrixWire;
|
|
|
|
|
import com.njcn.device.pms.pojo.po.PmsCountLedger;
|
|
|
|
|
import com.njcn.device.pms.pojo.po.PmsMidLedger;
|
|
|
|
|
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
|
|
|
|
|
import com.njcn.device.pms.pojo.po.Monitor;
|
|
|
|
|
import com.njcn.harmonic.pojo.po.RMpEventDetailDPO;
|
|
|
|
|
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
|
|
|
|
|
import com.njcn.harmonic.pojo.po.dim.RDimBusGlobalD;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.area.PmsMonitorPOMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatIntegrityDMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitTargetDMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.GeneratrixWireMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.PmsCountLedgerMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimBusGlobalDMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper;
|
|
|
|
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
|
|
|
|
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimBusGlobalDService;
|
|
|
|
|
import com.njcn.user.api.DeptFeignClient;
|
|
|
|
|
import com.njcn.user.pojo.po.Dept;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -37,7 +52,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
*/
|
|
|
|
|
@Service
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class RDimBusGlobalDServiceImpl extends ServiceImpl<RDimBusGlobalDMapper, RDimBusGlobalD> implements IRDimBusGlobalDService {
|
|
|
|
|
public class RDimBusGlobalDServiceImpl extends MppServiceImpl<RDimBusGlobalDMapper, RDimBusGlobalD> implements IRDimBusGlobalDService {
|
|
|
|
|
|
|
|
|
|
private final DeptFeignClient deptFeignClient;
|
|
|
|
|
|
|
|
|
|
@@ -49,19 +64,26 @@ public class RDimBusGlobalDServiceImpl extends ServiceImpl<RDimBusGlobalDMapper,
|
|
|
|
|
|
|
|
|
|
private final PmsMonitorPOMapper pmsMonitorPOMapper;
|
|
|
|
|
|
|
|
|
|
private final RStatLimitTargetDMapper rStatLimitTargetDMapper;
|
|
|
|
|
|
|
|
|
|
private final RMpEventDetailDMapper rMpEventDetailDMapper;
|
|
|
|
|
|
|
|
|
|
private final PmsCountLedgerMapper pmsCountLedgerMapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 本算法只有pms使用到,只针对pms主网测点
|
|
|
|
|
*
|
|
|
|
|
* @author cdf
|
|
|
|
|
* @date 2023/11/15
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void globalCalBusBar(CalculatedParam calculatedParam) {
|
|
|
|
|
public void globalCalBusBarDay(CalculatedParam calculatedParam) {
|
|
|
|
|
List<RDimBusGlobalD> poList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
LocalDate date = LocalDate.parse(calculatedParam.getDataDate());
|
|
|
|
|
|
|
|
|
|
List<PmsCountLedger> pmsMidLedgerList = pmsCountLedgerMapper.newDateData();
|
|
|
|
|
Map<String,PmsCountLedger> map = pmsMidLedgerList.stream().collect(Collectors.toMap(PmsCountLedger::getSection, Function.identity()));
|
|
|
|
|
|
|
|
|
|
Dept dept = deptFeignClient.getRootDept().getData();
|
|
|
|
|
|
|
|
|
|
@@ -70,21 +92,34 @@ public class RDimBusGlobalDServiceImpl extends ServiceImpl<RDimBusGlobalDMapper,
|
|
|
|
|
deptGetLineParam.setDeptId(dept.getId());
|
|
|
|
|
deptGetLineParam.setSystemType(0);
|
|
|
|
|
List<DeptGetChildrenDTO> deptList = commTerminalGeneralClient.deptGetLineList(deptGetLineParam).getData();
|
|
|
|
|
for(DeptGetChildrenDTO dto : deptList){
|
|
|
|
|
for (DeptGetChildrenDTO dto : deptList) {
|
|
|
|
|
|
|
|
|
|
Integer stationNum;
|
|
|
|
|
Integer busBarNum;
|
|
|
|
|
|
|
|
|
|
if(map.containsKey(dto.getDeptId())){
|
|
|
|
|
PmsCountLedger pmsCountLedger = map.get(dto.getDeptId());
|
|
|
|
|
stationNum = pmsCountLedger.getSubCount();
|
|
|
|
|
busBarNum = pmsCountLedger.getSubvCount();
|
|
|
|
|
}else {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RDimBusGlobalD rDimBusGlobalD = new RDimBusGlobalD();
|
|
|
|
|
rDimBusGlobalD.setOrgId(dto.getDeptId());
|
|
|
|
|
rDimBusGlobalD.setStatisDate(date);
|
|
|
|
|
|
|
|
|
|
List<String> monitorIds = dto.getLineIds();
|
|
|
|
|
if(CollectionUtil.isNotEmpty(monitorIds)){
|
|
|
|
|
if (CollectionUtil.isNotEmpty(monitorIds)) {
|
|
|
|
|
//先初步筛选出完整性大于95%的
|
|
|
|
|
LambdaQueryWrapper<RStatIntegrityD> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
lambdaQueryWrapper.in(RStatIntegrityD::getLineIndex,monitorIds).eq(RStatIntegrityD::getTimeId,date);
|
|
|
|
|
lambdaQueryWrapper.in(RStatIntegrityD::getLineIndex, monitorIds).eq(RStatIntegrityD::getTimeId, date);
|
|
|
|
|
List<RStatIntegrityD> integrityDList = rStatIntegrityDMapper.selectList(lambdaQueryWrapper);
|
|
|
|
|
|
|
|
|
|
if(CollectionUtil.isEmpty(integrityDList)){
|
|
|
|
|
if (CollectionUtil.isEmpty(integrityDList)) {
|
|
|
|
|
rDimBusGlobalD.setMonitorRate(0f);
|
|
|
|
|
rDimBusGlobalD.setLimitRate(3.14159f);
|
|
|
|
|
rDimBusGlobalD.setMonitorRate(3.14159f);
|
|
|
|
|
rDimBusGlobalD.setLimitAvgRate(3.14159f);
|
|
|
|
|
poList.add(rDimBusGlobalD);
|
|
|
|
|
break;
|
|
|
|
|
@@ -92,31 +127,77 @@ public class RDimBusGlobalDServiceImpl extends ServiceImpl<RDimBusGlobalDMapper,
|
|
|
|
|
|
|
|
|
|
//不为空还要判断完整性是否大于95%
|
|
|
|
|
integrityDList = integrityDList.stream()
|
|
|
|
|
.filter(it -> it.getRealTime() / it.getDueTime() > 0.95f)
|
|
|
|
|
.filter(it -> it.getRealTime() / it.getDueTime() >= 0.95f)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
if(CollectionUtil.isEmpty(integrityDList)){
|
|
|
|
|
if (CollectionUtil.isEmpty(integrityDList)) {
|
|
|
|
|
rDimBusGlobalD.setMonitorRate(0f);
|
|
|
|
|
rDimBusGlobalD.setLimitRate(3.14159f);
|
|
|
|
|
rDimBusGlobalD.setMonitorRate(3.14159f);
|
|
|
|
|
rDimBusGlobalD.setLimitAvgRate(3.14159f);
|
|
|
|
|
poList.add(rDimBusGlobalD);
|
|
|
|
|
break;
|
|
|
|
|
}else {
|
|
|
|
|
List<String> goodMonitorIds = integrityDList.stream().map(RStatIntegrityD::getLineIndex).distinct().collect(Collectors.toList());
|
|
|
|
|
} else {
|
|
|
|
|
//有效接入监测点(分母)
|
|
|
|
|
List<String> goodMonitorIds = integrityDList.stream().map(RStatIntegrityD::getLineIndex).distinct().collect(Collectors.toList());
|
|
|
|
|
LambdaQueryWrapper<Monitor> monitorLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
monitorLambdaQueryWrapper.select(Monitor::getId,Monitor::getLineId).in(Monitor::getId,goodMonitorIds).eq(Monitor::getStatus,DataStateEnum.ENABLE.getCode());
|
|
|
|
|
monitorLambdaQueryWrapper.select(Monitor::getId, Monitor::getLineId,Monitor::getPowerrId).in(Monitor::getId, goodMonitorIds).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode());
|
|
|
|
|
List<Monitor> monitorList = pmsMonitorPOMapper.selectList(monitorLambdaQueryWrapper);
|
|
|
|
|
List<String> busBarIds = monitorList.stream().map(Monitor::getLineId).collect(Collectors.toList());
|
|
|
|
|
List<String> goodLineIds = monitorList.stream().map(Monitor::getLineId).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
List<String> goodStationIds = monitorList.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
rDimBusGlobalD.setMonitorRate((float) goodLineIds.size() / busBarNum * 100);
|
|
|
|
|
rDimBusGlobalD.setStationLimitRate((float) goodStationIds.size() / stationNum * 100);
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<RStatLimitTargetDPO> limitWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
limitWrapper.in(RStatLimitTargetDPO::getLineId, goodMonitorIds).eq(RStatLimitTargetDPO::getTime, date);
|
|
|
|
|
List<RStatLimitTargetDPO> rStatLimitRateDPOList = rStatLimitTargetDMapper.selectList(limitWrapper);
|
|
|
|
|
|
|
|
|
|
LambdaQueryWrapper<RMpEventDetailDPO> eventLambda = new LambdaQueryWrapper<>();
|
|
|
|
|
eventLambda.select(RMpEventDetailDPO::getMeasurementPointId).in(RMpEventDetailDPO::getMeasurementPointId, goodMonitorIds)
|
|
|
|
|
.eq(RMpEventDetailDPO::getDataDate, date);
|
|
|
|
|
|
|
|
|
|
List<RMpEventDetailDPO> eventList = rMpEventDetailDMapper.selectList(eventLambda);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (CollectionUtil.isEmpty(rStatLimitRateDPOList) && CollectionUtil.isEmpty(eventList)) {
|
|
|
|
|
rDimBusGlobalD.setMonitorRate(3.14159f);
|
|
|
|
|
rDimBusGlobalD.setLimitAvgRate(3.14159f);
|
|
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
rStatLimitRateDPOList = rStatLimitRateDPOList.stream().filter(item -> item.getAllTime() == 1).collect(Collectors.toList());
|
|
|
|
|
List<String> dianOneIds = rStatLimitRateDPOList.stream().map(RStatLimitTargetDPO::getLineId).collect(Collectors.toList());
|
|
|
|
|
eventList = eventList.stream().filter(it -> it.getSagTimes() > 0 || it.getInterruptTimes() > 0 || it.getSwellTimes() > 0).collect(Collectors.toList());
|
|
|
|
|
List<String> dianTwoIds = eventList.stream().map(RMpEventDetailDPO::getMeasurementPointId).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
Collection<String> union = CollectionUtils.union(dianOneIds, dianTwoIds);
|
|
|
|
|
List<String> collect = union.stream().distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
if (CollectionUtil.isEmpty(collect)) {
|
|
|
|
|
rDimBusGlobalD.setLimitRate(0f);
|
|
|
|
|
rDimBusGlobalD.setLimitAvgRate(0f);
|
|
|
|
|
} else {
|
|
|
|
|
//反推到母线
|
|
|
|
|
monitorLambdaQueryWrapper.clear();
|
|
|
|
|
monitorLambdaQueryWrapper.select(Monitor::getId, Monitor::getLineId,Monitor::getPowerrId).in(Monitor::getId, collect).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode());
|
|
|
|
|
List<Monitor> temMonitorList = pmsMonitorPOMapper.selectList(monitorLambdaQueryWrapper);
|
|
|
|
|
List<String> targetLineIds = temMonitorList.stream().map(Monitor::getLineId).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
float re = (float) targetLineIds.size() / goodLineIds.size();
|
|
|
|
|
rDimBusGlobalD.setLimitRate(re);
|
|
|
|
|
rDimBusGlobalD.setLimitAvgRate(re);
|
|
|
|
|
|
|
|
|
|
//反推电站
|
|
|
|
|
List<String> targetSubIds = temMonitorList.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList());
|
|
|
|
|
float reStation = (float) targetSubIds.size() / goodStationIds.size();
|
|
|
|
|
rDimBusGlobalD.setStationLimitRate(reStation);
|
|
|
|
|
rDimBusGlobalD.setStationLimitAvgRate(reStation);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
poList.add(rDimBusGlobalD);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.saveOrUpdateBatchByMultiId(poList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|