@@ -4,26 +4,29 @@ import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper ;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO ;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO ;
import com.njcn.device.pms.pojo.po.RMpMonitorAlarmCountM ;
import com.njcn.harmonic.pojo.po.* ;
import com.njcn.prepare.harmonic.mapper.mysql.area.RMpMonitorAlarmCountMMapper ;
import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper ;
import com.njcn.prepare.harmonic.pojo.po.RMpEventDetailDNewPO ;
import com.njcn.prepare.harmonic.pojo.po.RStatPwAlarmCountWPO ;
import com.njcn.prepare.harmonic.pojo.po.RStatZwAlarmCountWPO ;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RAlarmCountService ;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventVoltageService ;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatPwAlarmCountWPOService ;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatZwAlarmCountWPOService ;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper ;
import com.njcn.prepare.harmonic.pojo.po.* ;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.* ;
import com.njcn.system.api.DicDataFeignClient ;
import com.njcn.system.enums.DicDataEnum ;
import com.njcn.system.enums.DicDataTypeEnum ;
import com.njcn.system.pojo.po.DictData ;
import lombok.RequiredArgsConstructor ;
import org.springframework.beans.BeanUtils ;
import org.springframework.stereotype.Service ;
import org.springframework.util.CollectionUtils ;
import java.text.DecimalFormat ;
import java.time.DayOfWeek ;
import java.time.LocalDate ;
import java.time.format.DateTimeFormatter ;
import java.util.* ;
import java.util.stream.Collectors ;
import java.util.stream.Stream ;
/**
* <p>
@@ -39,10 +42,18 @@ public class RAlarmCountServiceImpl implements RAlarmCountService {
private final RMpTargetWarnDMapper rMpTargetWarnDMapper ;
private final RMpMonitorAlarmCountMMapper rMpMonitorAlarmCountMMapper ;
private final RStatZwAlarmCountWPOService rStatZwAlarmCountWPOService ;
private final RStatPwAlarmCountWPOService rStatPwAlarmCountWPOService ;
private final RStatAreaAlarmCountMPOService rStatAreaAlarmCountMPOService ;
private final DicDataFeignClient dicDataFeignClient ;
private final RStatOrgMMapper rStatOrgMMapper ;
@Override
public void handler ( List < DeptGetChildrenMoreDTO > data , String dataDate , Integer type ) {
switch ( type ) {
@@ -134,9 +145,9 @@ public class RAlarmCountServiceImpl implements RAlarmCountService {
List < RMpTargetWarnDPO > rMpTargetWarnDPOList = rMpTargetWarnDMapper . selectList ( rMpTargetWarnDPOQueryWrapper ) ;
//获取告警监测点数
long count = rMpTargetWarnDPOList . stream ( ) . filter ( alarm - > alarm . getIsWarn ( ) = = 1 ) . count ( ) ;
RStatPwAlarmCountWPO rStatPwAlarmCountWPO = new RStatPwAlarmCountWPO ( ) ;
rStatPwAlarmCountWPO . setOrgNo ( deptGetChildrenMoreDTO . getUnitId ( ) ) ;
rStatPwAlarmCountWPO . setDataDate ( localDate ) ;
@@ -157,66 +168,529 @@ public class RAlarmCountServiceImpl implements RAlarmCountService {
//月表
public void rAlarmCountMHandler ( List < DeptGetChildrenMoreDTO > data , String dataDate , Integer type ) {
List < RStatAreaAlarmCountMPO > rStatAreaAlarmCountMPOS = new ArrayList < > ( ) ;
List < RStatAreaAlarmCountM > result = new ArrayList < > ( ) ;
DecimalFormat df = new DecimalFormat ( " 0.00 " ) ;
//获取日期
Date localDate = DateUtil . parse ( dataDate ) ;
/*获取数据类型*/
List < DictData > dataTypeList = dicDataFeignClient . getDicDataByTypeCode ( DicDataTypeEnum . DATA_TYPE . getCode ( ) ) . getData ( ) ;
Map < String , DictData > dataTypeMap = dataTypeList . stream ( ) . collect ( Collectors . toMap ( DictData : : getCode , dictData - > dictData ) ) ;
QueryWrapper < RMpMonitorAlarmCountMPO > rMpMonitorAlarmCountMQueryWrapper = new QueryWrapper < > ( ) ;
//org表
QueryWrapper < RStatOrgMPO > rStatOrgMPOQueryWrapper = new QueryWrapper < > ( ) ;
data . forEach ( deptGetChildrenMoreDTO - > {
/*主网*/
if ( ! CollectionUtils . isEmpty ( deptGetChildrenMoreDTO . getLineBaseList ( ) ) ) {
List < LineDevGetDTO > lineBaseList = deptGetChildrenMoreDTO . getLineBaseList ( ) ;
List < String > collect1 = lineBaseList . stream ( ) . map ( LineDevGetDTO : : getPointId ) . collect ( Collectors . toList ( ) ) ;
//日表
QueryWrapper < RMpTargetWarnDPO > rMpTargetWarnDPOQueryWrapper = new QueryWrapper < > ( ) ;
rMpTargetWarnDPOQueryWrapper . clear ( ) ;
rMpTargetWarnDPOQueryWrapper .
in ( " measurement_point_id " , collect1 ) .
eq ( " DATE_FORMAT( data_date ,'%Y-%m') " , dataDate . substring ( 0 , 7 ) ) ;
List < RMpTargetWarnDPO > rMpTargetWarnDPOList = rMpTargetWarnDMapper . selectList ( rMpTargetWarnDPOQueryWrapper ) ;
//月表
rMpMonitorAlarmCountMQueryWrapper . clear ( ) ;
rMpMonitorAlarmCountMQueryWrapper .
in ( " measurement_point_id " , collect1 ) .
eq ( " DATE_FORMAT( data_date ,'%Y-%m') " , dataDate . substring ( 0 , 7 ) ) .
eq ( " data_type " , dataTypeMap . get ( DicDataEnum . MAINNET_POINT . getCode ( ) ) . getId ( ) ) ;
List < RMpMonitorAlarmCountMPO > rMpMonitorAlarmCountMPOS = rMpMonitorAlarmCountMMapper . selectList ( rMpMonitorAlarmCountMQueryWrapper ) ;
//org表
rStatOrgMPOQueryWrapper . clear ( ) ;
rStatOrgMPOQueryWrapper . select ( " effective_measurement_accrued " ) .
eq ( " org_no " , deptGetChildrenMoreDTO . getUnitId ( ) ) .
eq ( " DATE_FORMAT( data_date ,'%Y-%m') " , dataDate . substring ( 0 , 7 ) ) .
eq ( " data_type " , dataTypeMap . get ( DicDataEnum . MAINNET_POINT . getCode ( ) ) . getId ( ) ) ;
RStatOrgMPO rStatOrgMPO = rStatOrgMMapper . selectOne ( rStatOrgMPOQueryWrapper ) ;
//所有告警次数集合
Map < String , Long > resultCount = new HashMap < > ( ) ;
long vdevAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getVdevAlarmInfo ( ) = = 1 ) . count ( ) ;
long freqAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getFreqAlarmInfo ( ) = = 1 ) . count ( ) ;
long unbalanceAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getUnbalanceAlarmInfo ( ) = = 1 ) . count ( ) ;
long vAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getVAlarmInfo ( ) = = 1 ) . count ( ) ;
long flickerAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getFlickerAlarmInfo ( ) = = 1 ) . count ( ) ;
long sagAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getSagAlarmInfo ( ) = = 1 ) . count ( ) ;
long interruptAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getInterruptAlarmInfo ( ) = = 1 ) . count ( ) ;
if ( vdevAlarmInfoCount ! = 0 ) {
resultCount . put ( " vdevAlarmInfo " , vdevAlarmInfoCount ) ;
}
if ( freqAlarmInfoCount ! = 0 ) {
resultCount . put ( " freqAlarmInfo " , freqAlarmInfoCount ) ;
}
if ( unbalanceAlarmInfoCount ! = 0 ) {
resultCount . put ( " unbalanceAlarmInfo " , unbalanceAlarmInfoCount ) ;
}
if ( vAlarmInfoCount ! = 0 ) {
resultCount . put ( " vAlarmInfo " , vAlarmInfoCount ) ;
}
if ( flickerAlarmInfoCount ! = 0 ) {
resultCount . put ( " flickerAlarmInfo " , flickerAlarmInfoCount ) ;
}
if ( sagAlarmInfoCount ! = 0 ) {
resultCount . put ( " sagAlarmInfo " , sagAlarmInfoCount ) ;
}
if ( interruptAlarmInfoCount ! = 0 ) {
resultCount . put ( " interruptAlarmInfo " , interruptAlarmInfoCount ) ;
}
//获取监测点类型 1/2/3类字典id
private String getmeasurementType ( Integer k , Map < String , DictData > lineSortMap ) {
String value = " " ;
switch ( k ) {
case 1 :
value = lineSortMap . get ( DicDataEnum . ONE_LINE . getCode ( ) ) . getId ( ) ;
break ;
case 2 :
value = lineSortMap . get ( DicDataEnum . TWO_LINE . getCode ( ) ) . getId ( ) ;
break ;
case 3 :
value = lineSortMap . get ( DicDataEnum . THREE_LINE . getCode ( ) ) . getId ( ) ;
break ;
default :
break ;
}
return value ;
//获取电压暂降告警次数
long sagCount = rMpTargetWarnDPOList . stream ( ) . filter ( alarm - > alarm . getIsSagWarn ( ) = = 1 ) . count ( ) ;
//获取电压暂降监测点数(id去重)
long sagMCount = rMpTargetWarnDPOList . stream ( ) . filter ( obj - > obj . getIsSagWarn ( ) = = 1 ) . map ( obj - > obj . getMeasurementPointId ( ) ) . distinct ( ) . count ( ) ;
//获取短时中断告警次数
long iaaCount = rMpTargetWarnDPOList . stream ( ) . filter ( alarm - > alarm . getIsInterruptWarn ( ) = = 1 ) . count ( ) ;
//获取短时中断监测点数(id去重)
long iaaMCount = rMpTargetWarnDPOList . stream ( ) . filter ( obj - > obj . getIsInterruptWarn ( ) = = 1 ) . map ( obj - > obj . getMeasurementPointId ( ) ) . distinct ( ) . count ( ) ;
//获取在线监测点数
int size = rMpTargetWarnDPOList . size ( ) ;
//获取稳态告警监测点数
long wtCount = rMpMonitorAlarmCountMPOS . stream ( )
. filter ( obj - > obj . getVdevAlarmInfo ( ) = = 1 | | obj . getFreqAlarmInfo ( ) = = 1 | | obj . getUnbalanceAlarmInfo ( ) = = 1
| | obj . getVAlarmInfo ( ) = = 1 | | obj . getFlickerAlarmInfo ( ) = = 1 ) . count ( ) ;
//获取暂态告警监测点数
long ztCount = rMpMonitorAlarmCountMPOS . stream ( )
. filter ( obj - > obj . getSagAlarmInfo ( ) = = 1 | | obj . getInterruptAlarmInfo ( ) = = 1 ) . count ( ) ;
RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO = new RStatAreaAlarmCountMPO ( ) ;
rStatAreaAlarmCountMPO . setOrgNo ( deptGetChildrenMoreDTO . getUnitId ( ) ) ;
rStatAreaAlarmCountMPO . setDataDate ( localDate ) ;
rStatAreaAlarmCountMPO . setDataType ( dataTypeMap . get ( DicDataEnum . MAINNET_POINT . getCode ( ) ) . getId ( ) ) ;
rStatAreaAlarmCountMPO . setVdevAlarmInfo ( resultCount . containsKey ( " vdevAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setFreqAlarmInfo ( resultCount . containsKey ( " freqAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmInfo ( resultCount . containsKey ( " unbalanceAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setVAlarmInfo ( resultCount . containsKey ( " vAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmInfo ( resultCount . containsKey ( " flickerAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setSagAlarmInfo ( resultCount . containsKey ( " sagAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setInterruptAlarmInfo ( resultCount . containsKey ( " interruptAlarmInfo " ) ? 1 : 0 ) ;
//稳态指标评级结果( 0 较差 1中等 2较好) / 暂态指标评级结果( 0 较差 1中等 2较好)
if ( size = = 0 ) {
rStatAreaAlarmCountMPO . setWtCount ( 0 . 00f ) ;
rStatAreaAlarmCountMPO . setZtCount ( 0 . 00f ) ;
} else {
Float wtf = wtCount / Float . parseFloat ( size + " " ) ;
rStatAreaAlarmCountMPO . setWtCount ( wtf ) ;
Float ztf = ztCount / Float . parseFloat ( size + " " ) ;
rStatAreaAlarmCountMPO . setZtCount ( ztf ) ;
}
//获取暂态各个类型发生的监测点数量及发生次数
private List < Integer > getTransientStatisData ( DictData dictData , List < RMpEventDetailDNewPO > list ) {
List < Integer > result = new ArrayList < > ( 2 ) ;
Integer value = 0 ;
Integer count = 0 ;
if ( Objects . equals ( dictData . getCode ( ) , DicDataEnum . VOLTAGE_DIP . getCode ( ) ) ) {
value = Integer . valueOf ( list . stream ( ) . filter ( temp - > temp . getSagTimes ( ) > 0 ) . count ( ) + " " ) ;
count = Integer . valueOf ( list . stream ( ) . mapToInt ( RMpEventDetailDNewPO : : getSagTimes ) . sum ( ) + " " ) ;
if ( sagMCount = = 0 ) {
rStatAreaAlarmCountMPO . setSagAlarmAvgCount ( 0 ) ;
} else {
Float f = sagCount / Float . parseFloat ( sagMCount + " " ) ;
rStatAreaAlarmCountMPO . setSagAlarmAvgCount ( f . intValue ( ) ) ;
}
if ( Objects . equals ( dictData . getCode ( ) , DicDataEnum . VOLTAGE_RISE . getCode ( ) ) ) {
value = Integer . valueOf ( list . stream ( ) . filter ( temp - > temp . getSwellTimes ( ) > 0 ) . count ( ) + " " ) ;
count = Integer . valueOf ( list . stream ( ) . mapToInt ( RMpEventDetailDNewPO : : getSwellTimes ) . sum ( ) + " " ) ;
}
if ( Objects . equals ( dictData . g etCode ( ) , DicDataEnum . SHORT_INTERRUPTIONS . getCod e( ) ) ) {
value = Integer . valueOf ( list . stream ( ) . filter ( temp - > temp . getInterruptTimes ( ) > 0 ) . count ( ) + " " ) ;
count = Integer . valueOf ( list . stream ( ) . mapToInt ( RMpEventDetailDNewPO : : getInterruptTimes ) . sum ( ) + " " ) ;
}
result . add ( value ) ;
result . add ( count ) ;
return result ;
if ( iaaMCount = = 0 ) {
rStatAreaAlarmCountMPO . setInterruptAlarmAvgCount ( 0 ) ;
} else {
Float f = iaaCount / Float . parseFloat ( iaaMCount + " " ) ;
rStatAreaAlarmCountMPO . s etInterruptAlarmAvgCount ( f . intValu e( ) ) ;
}
//获取暂态各个类型发生的监测点数量
private Integer getStatisData ( DictData dictData , String voltage , List < RMpEventDetailMNewPO > list ) {
Integer value = 0 ;
if ( Objects . equals ( dictData . getCode ( ) , DicDataEnum . VOLTAGE_DIP . getCode ( ) ) ) {
value = Integer . valueOf ( list . stream ( ) . filter ( temp - > temp . getSagTimes ( ) > 0 & & Objects . equals ( temp . getVoltage ( ) , voltage ) ) . count ( ) + " " ) ;
if ( Objects . isNull ( rStatOrgMPO ) ) {
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setVAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( 1 . 00f ) ;
} else {
if ( rStatOrgMPO . getEffectiveMeasurementAccrued ( ) = = 0 ) {
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setVAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( 1 . 00f ) ;
} else {
//电压偏差告警占比
if ( resultCount . containsKey ( " vdevAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " vdevAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( 1 . 00f ) ;
}
if ( Objects . equals ( dictData . getCode ( ) , DicDataEnum . VOLTAGE_RISE . getCode ( ) ) ) {
value = Integer . valueOf ( list . stream ( ) . filter ( temp - > temp . getSwellTimes ( ) > 0 & & Objects . equals ( temp . getVoltage ( ) , voltage ) ) . count ( ) + " " ) ;
//频率偏差告警占比
if ( resultCount . containsKey ( " freqAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " freqAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( 1 . 00f ) ;
}
if ( Objects . equals ( dictData . getCode ( ) , DicDataEnum . SHORT_INTERRUPTIONS . getCode ( ) ) ) {
value = Integer . valueOf ( list . stream ( ) . filter ( temp - > temp . getInterruptTimes ( ) > 0 & & Objects . equals ( temp . getVoltage ( ) , voltage ) ) . count ( ) + " " ) ;
//三项电压不平衡度告警占比
if ( resultCount . containsKey ( " unbalanceAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " unbalanceAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( 1 . 00f ) ;
}
//谐波电压告警占比
if ( resultCount . containsKey ( " vAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " vAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setVAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setVAlarmRatio ( 1 . 00f ) ;
}
//闪変告警占比
if ( resultCount . containsKey ( " flickerAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " flickerAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( 1 . 00f ) ;
}
}
}
rStatAreaAlarmCountMPOS . add ( rStatAreaAlarmCountMPO ) ;
}
return value ;
/*配网*/
if ( ! CollectionUtils . isEmpty ( deptGetChildrenMoreDTO . getPwMonitorIds ( ) ) ) {
List < LineDevGetDTO > pwMonitorIds = deptGetChildrenMoreDTO . getPwMonitorIds ( ) ;
List < String > collect1 = pwMonitorIds . stream ( ) . map ( LineDevGetDTO : : getPointId ) . collect ( Collectors . toList ( ) ) ;
//日表
QueryWrapper < RMpTargetWarnDPO > rMpTargetWarnDPOQueryWrapper = new QueryWrapper < > ( ) ;
rMpTargetWarnDPOQueryWrapper . clear ( ) ;
rMpTargetWarnDPOQueryWrapper .
in ( " measurement_point_id " , collect1 ) .
eq ( " DATE_FORMAT( data_date ,'%Y-%m') " , dataDate . substring ( 0 , 7 ) ) ;
List < RMpTargetWarnDPO > rMpTargetWarnDPOList = rMpTargetWarnDMapper . selectList ( rMpTargetWarnDPOQueryWrapper ) ;
//月表
rMpMonitorAlarmCountMQueryWrapper . clear ( ) ;
rMpMonitorAlarmCountMQueryWrapper .
in ( " measurement_point_id " , collect1 ) .
eq ( " DATE_FORMAT( data_date ,'%Y-%m') " , dataDate . substring ( 0 , 7 ) ) .
eq ( " data_type " , dataTypeMap . get ( DicDataEnum . DISTRIBUTION_POINT . getCode ( ) ) . getId ( ) ) ;
List < RMpMonitorAlarmCountMPO > rMpMonitorAlarmCountMPOS = rMpMonitorAlarmCountMMapper . selectList ( rMpMonitorAlarmCountMQueryWrapper ) ;
//org表
rStatOrgMPOQueryWrapper . clear ( ) ;
rStatOrgMPOQueryWrapper . select ( " effective_measurement_accrued " ) .
eq ( " org_no " , deptGetChildrenMoreDTO . getUnitId ( ) ) .
eq ( " DATE_FORMAT( data_date ,'%Y-%m') " , dataDate . substring ( 0 , 7 ) ) .
eq ( " data_type " , dataTypeMap . get ( DicDataEnum . DISTRIBUTION_POINT . getCode ( ) ) . getId ( ) ) ;
RStatOrgMPO rStatOrgMPO = rStatOrgMMapper . selectOne ( rStatOrgMPOQueryWrapper ) ;
//所有告警次数集合
Map < String , Long > resultCount = new HashMap < > ( ) ;
long vdevAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getVdevAlarmInfo ( ) = = 1 ) . count ( ) ;
long freqAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getFreqAlarmInfo ( ) = = 1 ) . count ( ) ;
long unbalanceAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getUnbalanceAlarmInfo ( ) = = 1 ) . count ( ) ;
long vAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getVAlarmInfo ( ) = = 1 ) . count ( ) ;
long flickerAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getFlickerAlarmInfo ( ) = = 1 ) . count ( ) ;
long sagAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getSagAlarmInfo ( ) = = 1 ) . count ( ) ;
long interruptAlarmInfoCount = rMpMonitorAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getInterruptAlarmInfo ( ) = = 1 ) . count ( ) ;
if ( vdevAlarmInfoCount ! = 0 ) {
resultCount . put ( " vdevAlarmInfo " , vdevAlarmInfoCount ) ;
}
if ( freqAlarmInfoCount ! = 0 ) {
resultCount . put ( " freqAlarmInfo " , freqAlarmInfoCount ) ;
}
if ( unbalanceAlarmInfoCount ! = 0 ) {
resultCount . put ( " unbalanceAlarmInfo " , unbalanceAlarmInfoCount ) ;
}
if ( vAlarmInfoCount ! = 0 ) {
resultCount . put ( " vAlarmInfo " , vAlarmInfoCount ) ;
}
if ( flickerAlarmInfoCount ! = 0 ) {
resultCount . put ( " flickerAlarmInfo " , flickerAlarmInfoCount ) ;
}
if ( sagAlarmInfoCount ! = 0 ) {
resultCount . put ( " sagAlarmInfo " , sagAlarmInfoCount ) ;
}
if ( interruptAlarmInfoCount ! = 0 ) {
resultCount . put ( " interruptAlarmInfo " , interruptAlarmInfoCount ) ;
}
//获取电压暂降告警次数
long sagCount = rMpTargetWarnDPOList . stream ( ) . filter ( alarm - > alarm . getIsSagWarn ( ) = = 1 ) . count ( ) ;
//获取电压暂降监测点数(id去重)
long sagMCount = rMpTargetWarnDPOList . stream ( ) . filter ( obj - > obj . getIsSagWarn ( ) = = 1 ) . map ( obj - > obj . getMeasurementPointId ( ) ) . distinct ( ) . count ( ) ;
//获取短时中断告警次数
long iaaCount = rMpTargetWarnDPOList . stream ( ) . filter ( alarm - > alarm . getIsInterruptWarn ( ) = = 1 ) . count ( ) ;
//获取短时中断监测点数(id去重)
long iaaMCount = rMpTargetWarnDPOList . stream ( ) . filter ( obj - > obj . getIsInterruptWarn ( ) = = 1 ) . map ( obj - > obj . getMeasurementPointId ( ) ) . distinct ( ) . count ( ) ;
//获取在线监测点数
int size = rMpTargetWarnDPOList . size ( ) ;
//获取稳态告警监测点数
long wtCount = rMpMonitorAlarmCountMPOS . stream ( )
. filter ( obj - > obj . getVdevAlarmInfo ( ) = = 1 | | obj . getFreqAlarmInfo ( ) = = 1 | | obj . getUnbalanceAlarmInfo ( ) = = 1
| | obj . getVAlarmInfo ( ) = = 1 | | obj . getFlickerAlarmInfo ( ) = = 1 ) . count ( ) ;
//获取暂态告警监测点数
long ztCount = rMpMonitorAlarmCountMPOS . stream ( )
. filter ( obj - > obj . getSagAlarmInfo ( ) = = 1 | | obj . getInterruptAlarmInfo ( ) = = 1 ) . count ( ) ;
RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO = new RStatAreaAlarmCountMPO ( ) ;
rStatAreaAlarmCountMPO . setOrgNo ( deptGetChildrenMoreDTO . getUnitId ( ) ) ;
rStatAreaAlarmCountMPO . setDataDate ( localDate ) ;
rStatAreaAlarmCountMPO . setDataType ( dataTypeMap . get ( DicDataEnum . DISTRIBUTION_POINT . getCode ( ) ) . getId ( ) ) ;
rStatAreaAlarmCountMPO . setVdevAlarmInfo ( resultCount . containsKey ( " vdevAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setFreqAlarmInfo ( resultCount . containsKey ( " freqAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmInfo ( resultCount . containsKey ( " unbalanceAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setVAlarmInfo ( resultCount . containsKey ( " vAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmInfo ( resultCount . containsKey ( " flickerAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setSagAlarmInfo ( resultCount . containsKey ( " sagAlarmInfo " ) ? 1 : 0 ) ;
rStatAreaAlarmCountMPO . setInterruptAlarmInfo ( resultCount . containsKey ( " interruptAlarmInfo " ) ? 1 : 0 ) ;
//稳态指标评级结果( 0 较差 1中等 2较好) / 暂态指标评级结果( 0 较差 1中等 2较好)
if ( size = = 0 ) {
rStatAreaAlarmCountMPO . setWtCount ( 0 . 00f ) ;
rStatAreaAlarmCountMPO . setZtCount ( 0 . 00f ) ;
} else {
Float wtf = wtCount / Float . parseFloat ( size + " " ) ;
rStatAreaAlarmCountMPO . setWtCount ( wtf ) ;
Float ztf = ztCount / Float . parseFloat ( size + " " ) ;
rStatAreaAlarmCountMPO . setZtCount ( ztf ) ;
}
if ( sagMCount = = 0 ) {
rStatAreaAlarmCountMPO . setSagAlarmAvgCount ( 0 ) ;
} else {
Float f = sagCount / Float . parseFloat ( sagMCount + " " ) ;
rStatAreaAlarmCountMPO . setSagAlarmAvgCount ( f . intValue ( ) ) ;
}
if ( iaaMCount = = 0 ) {
rStatAreaAlarmCountMPO . setInterruptAlarmAvgCount ( 0 ) ;
} else {
Float f = iaaCount / Float . parseFloat ( iaaMCount + " " ) ;
rStatAreaAlarmCountMPO . setInterruptAlarmAvgCount ( f . intValue ( ) ) ;
}
if ( Objects . isNull ( rStatOrgMPO ) ) {
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setVAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( 1 . 00f ) ;
} else {
if ( rStatOrgMPO . getEffectiveMeasurementAccrued ( ) = = 0 ) {
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setVAlarmRatio ( 1 . 00f ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( 1 . 00f ) ;
} else {
//电压偏差告警占比
if ( resultCount . containsKey ( " vdevAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " vdevAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setVdevAlarmRatio ( 1 . 00f ) ;
}
//频率偏差告警占比
if ( resultCount . containsKey ( " freqAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " freqAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setFreqAlarmRatio ( 1 . 00f ) ;
}
//三项电压不平衡度告警占比
if ( resultCount . containsKey ( " unbalanceAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " unbalanceAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setUnbalanceAlarmRatio ( 1 . 00f ) ;
}
//谐波电压告警占比
if ( resultCount . containsKey ( " vAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " vAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setVAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setVAlarmRatio ( 1 . 00f ) ;
}
//闪変告警占比
if ( resultCount . containsKey ( " flickerAlarmInfo " ) ) {
String value = df . format ( resultCount . get ( " flickerAlarmInfo " ) / rStatOrgMPO . getEffectiveMeasurementAccrued ( ) ) ;
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( Float . parseFloat ( value ) ) ;
} else {
rStatAreaAlarmCountMPO . setFlickerAlarmRatio ( 1 . 00f ) ;
}
}
}
rStatAreaAlarmCountMPOS . add ( rStatAreaAlarmCountMPO ) ;
}
} ) ;
if ( ! CollectionUtils . isEmpty ( rStatAreaAlarmCountMPOS ) ) {
//主网集合
//稳态数据排序(大->小)
List < RStatAreaAlarmCountMPO > zwwtResult = rStatAreaAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getDataType ( ) . equals ( dataTypeMap . get ( DicDataEnum . MAINNET_POINT . getCode ( ) ) . getId ( ) ) ) . sorted ( Comparator . comparing ( RStatAreaAlarmCountMPO : : getWtCount ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
List < RStatAreaAlarmCountMPO > zwztResult = rStatAreaAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getDataType ( ) . equals ( dataTypeMap . get ( DicDataEnum . MAINNET_POINT . getCode ( ) ) . getId ( ) ) ) . sorted ( Comparator . comparing ( RStatAreaAlarmCountMPO : : getZtCount ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
List < RStatAreaAlarmCountMPO > zwResult = new ArrayList < > ( ) ;
//配网集合
List < RStatAreaAlarmCountMPO > pwwtResult = rStatAreaAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getDataType ( ) . equals ( dataTypeMap . get ( DicDataEnum . DISTRIBUTION_POINT . getCode ( ) ) . getId ( ) ) ) . sorted ( Comparator . comparing ( RStatAreaAlarmCountMPO : : getWtCount ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
List < RStatAreaAlarmCountMPO > pwztResult = rStatAreaAlarmCountMPOS . stream ( ) . filter ( obj - > obj . getDataType ( ) . equals ( dataTypeMap . get ( DicDataEnum . DISTRIBUTION_POINT . getCode ( ) ) . getId ( ) ) ) . sorted ( Comparator . comparing ( RStatAreaAlarmCountMPO : : getZtCount ) . reversed ( ) ) . collect ( Collectors . toList ( ) ) ;
List < RStatAreaAlarmCountMPO > pwResult = new ArrayList < > ( ) ;
int i = 0 ;
//主网稳态
if ( ! CollectionUtils . isEmpty ( zwwtResult ) ) {
if ( zwwtResult . size ( ) = = 1 ) {
zwwtResult . get ( 0 ) . setHarmonicTypeGrade ( 0 ) ;
} else if ( zwwtResult . size ( ) = = 2 ) {
zwwtResult . get ( 0 ) . setHarmonicTypeGrade ( 0 ) ;
zwwtResult . get ( 1 ) . setHarmonicTypeGrade ( 1 ) ;
} else {
i = ( int ) ( zwwtResult . size ( ) * 0 . 3 ) ;
if ( i < 1 ) {
i = 1 ;
}
//循环较差的
for ( int i1 = 0 ; i1 < i ; i1 + + ) {
zwwtResult . get ( i1 ) . setHarmonicTypeGrade ( 0 ) ;
}
//循环较好的
List < RStatAreaAlarmCountMPO > list = zwwtResult . subList ( zwwtResult . size ( ) - i , zwwtResult . size ( ) ) ;
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : list ) {
rStatAreaAlarmCountMPO . setHarmonicTypeGrade ( 2 ) ;
}
//循环中等的
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : zwwtResult ) {
if ( Objects . isNull ( rStatAreaAlarmCountMPO . getHarmonicTypeGrade ( ) ) ) {
rStatAreaAlarmCountMPO . setHarmonicTypeGrade ( 1 ) ;
}
}
}
zwResult . addAll ( zwwtResult ) ;
}
//主网暂态
if ( ! CollectionUtils . isEmpty ( zwztResult ) ) {
if ( zwztResult . size ( ) = = 1 ) {
zwztResult . get ( 0 ) . setEventTypeGrade ( 0 ) ;
} else if ( zwztResult . size ( ) = = 2 ) {
zwztResult . get ( 0 ) . setEventTypeGrade ( 0 ) ;
zwztResult . get ( 1 ) . setEventTypeGrade ( 1 ) ;
} else {
i = ( int ) ( zwztResult . size ( ) * 0 . 3 ) ;
if ( i < 1 ) {
i = 1 ;
}
//循环较差的
for ( int i1 = 0 ; i1 < i ; i1 + + ) {
zwztResult . get ( i1 ) . setEventTypeGrade ( 0 ) ;
}
//循环较好的
List < RStatAreaAlarmCountMPO > list = zwztResult . subList ( zwztResult . size ( ) - i , zwztResult . size ( ) ) ;
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : list ) {
rStatAreaAlarmCountMPO . setEventTypeGrade ( 2 ) ;
}
//循环中等的
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : zwztResult ) {
if ( Objects . isNull ( rStatAreaAlarmCountMPO . getEventTypeGrade ( ) ) ) {
rStatAreaAlarmCountMPO . setEventTypeGrade ( 1 ) ;
}
}
}
for ( RStatAreaAlarmCountMPO po : zwResult ) {
for ( RStatAreaAlarmCountMPO po1 : zwztResult ) {
if ( Objects . equals ( po . getOrgNo ( ) , po1 . getOrgNo ( ) ) ) {
po . setEventTypeGrade ( po1 . getEventTypeGrade ( ) ) ;
}
}
}
}
//配网稳态
if ( ! CollectionUtils . isEmpty ( pwwtResult ) ) {
if ( pwwtResult . size ( ) = = 1 ) {
pwwtResult . get ( 0 ) . setHarmonicTypeGrade ( 0 ) ;
} else if ( pwwtResult . size ( ) = = 2 ) {
pwwtResult . get ( 0 ) . setHarmonicTypeGrade ( 0 ) ;
pwwtResult . get ( 1 ) . setHarmonicTypeGrade ( 1 ) ;
} else {
i = ( int ) ( pwwtResult . size ( ) * 0 . 3 ) ;
if ( i < 1 ) {
i = 1 ;
}
//循环较差的
for ( int i1 = 0 ; i1 < i ; i1 + + ) {
pwwtResult . get ( i1 ) . setHarmonicTypeGrade ( 0 ) ;
}
//循环较好的
List < RStatAreaAlarmCountMPO > list = pwwtResult . subList ( pwwtResult . size ( ) - i , pwwtResult . size ( ) ) ;
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : list ) {
rStatAreaAlarmCountMPO . setHarmonicTypeGrade ( 2 ) ;
}
//循环中等的
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : pwwtResult ) {
if ( Objects . isNull ( rStatAreaAlarmCountMPO . getHarmonicTypeGrade ( ) ) ) {
rStatAreaAlarmCountMPO . setHarmonicTypeGrade ( 1 ) ;
}
}
}
pwResult . addAll ( pwwtResult ) ;
}
//配网暂态
if ( ! CollectionUtils . isEmpty ( pwztResult ) ) {
if ( pwztResult . size ( ) = = 1 ) {
pwztResult . get ( 0 ) . setEventTypeGrade ( 0 ) ;
} else if ( pwztResult . size ( ) = = 2 ) {
pwztResult . get ( 0 ) . setEventTypeGrade ( 0 ) ;
pwztResult . get ( 1 ) . setEventTypeGrade ( 1 ) ;
} else {
i = ( int ) ( pwztResult . size ( ) * 0 . 3 ) ;
if ( i < 1 ) {
i = 1 ;
}
//循环较差的
for ( int i1 = 0 ; i1 < i ; i1 + + ) {
pwztResult . get ( i1 ) . setEventTypeGrade ( 0 ) ;
}
//循环较好的
List < RStatAreaAlarmCountMPO > list = pwztResult . subList ( pwztResult . size ( ) - i , pwztResult . size ( ) ) ;
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : list ) {
rStatAreaAlarmCountMPO . setEventTypeGrade ( 2 ) ;
}
//循环中等的
for ( RStatAreaAlarmCountMPO rStatAreaAlarmCountMPO : pwztResult ) {
if ( Objects . isNull ( rStatAreaAlarmCountMPO . getHarmonicTypeGrade ( ) ) ) {
rStatAreaAlarmCountMPO . setEventTypeGrade ( 1 ) ;
}
}
}
for ( RStatAreaAlarmCountMPO po : pwResult ) {
for ( RStatAreaAlarmCountMPO po1 : pwztResult ) {
if ( Objects . equals ( po . getOrgNo ( ) , po1 . getOrgNo ( ) ) ) {
po . setEventTypeGrade ( po1 . getEventTypeGrade ( ) ) ;
}
}
}
}
zwResult . addAll ( pwResult ) ;
//拷贝
for ( RStatAreaAlarmCountMPO po : zwResult ) {
RStatAreaAlarmCountM m = new RStatAreaAlarmCountM ( ) ;
BeanUtils . copyProperties ( po , m ) ;
result . add ( m ) ;
}
if ( ! CollectionUtils . isEmpty ( result ) ) {
rStatAreaAlarmCountMPOService . saveOrUpdateBatchByMultiId ( result , 500 ) ;
}
}
}
}