zbj//1.单位指标告警统计_月统计 算法
This commit is contained in:
@@ -0,0 +1,132 @@
|
|||||||
|
package com.njcn.prepare.harmonic.pojo.po;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 区域告警统计(月)
|
||||||
|
* @TableName r_stat_area_alarm_count_m
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("r_stat_area_alarm_count_m")
|
||||||
|
public class RStatAreaAlarmCountM {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位ID
|
||||||
|
*/
|
||||||
|
@MppMultiId(value = "org_no")
|
||||||
|
private String orgNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成数据的时间,每月统计一次
|
||||||
|
*/
|
||||||
|
@MppMultiId(value = "data_date")
|
||||||
|
private Date dataDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据类型(0:主网 1:配网)
|
||||||
|
*/
|
||||||
|
@MppMultiId(value = "data_type")
|
||||||
|
private String dataType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压偏差告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "vdev_alarm_info")
|
||||||
|
private Integer vdevAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压偏差告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "vdev_alarm_ratio")
|
||||||
|
private Float vdevAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 频率偏差告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "freq_alarm_info")
|
||||||
|
private Integer freqAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 频率偏差告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "freq_alarm_ratio")
|
||||||
|
private Float freqAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 三相电压不平衡度告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "unbalance_alarm_info")
|
||||||
|
private Integer unbalanceAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 三相电压不平衡度告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "unbalance_alarm_ratio")
|
||||||
|
private Float unbalanceAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 谐波电压告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "v_alarm_info")
|
||||||
|
private Integer vAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 谐波电压告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "v_alarm_ratio")
|
||||||
|
private Float vAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 闪变告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "flicker_alarm_info")
|
||||||
|
private Integer flickerAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 闪变告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "flicker_alarm_ratio")
|
||||||
|
private Float flickerAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压暂降告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "sag_alarm_info")
|
||||||
|
private Integer sagAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压暂降告警平均发生次数
|
||||||
|
*/
|
||||||
|
@TableField(value = "sag_alarm_avg_count")
|
||||||
|
private Integer sagAlarmAvgCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短时中断告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "interrupt_alarm_info")
|
||||||
|
private Integer interruptAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短时中断告警平均发生次数
|
||||||
|
*/
|
||||||
|
@TableField(value = "interrupt_alarm_avg_count")
|
||||||
|
private Integer interruptAlarmAvgCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 稳态指标评级结果(0 较差 1中等 2较好)
|
||||||
|
*/
|
||||||
|
@TableField(value = "harmonic_type_grade")
|
||||||
|
private Integer harmonicTypeGrade;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 暂态指标评级结果(0 较差 1中等 2较好)
|
||||||
|
*/
|
||||||
|
@TableField(value = "event_type_grade")
|
||||||
|
private Integer eventTypeGrade;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
package com.njcn.prepare.harmonic.pojo.po;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 区域告警统计(月)
|
||||||
|
* @TableName r_stat_area_alarm_count_m
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("r_stat_area_alarm_count_m")
|
||||||
|
public class RStatAreaAlarmCountMPO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位ID
|
||||||
|
*/
|
||||||
|
@MppMultiId(value = "org_no")
|
||||||
|
private String orgNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成数据的时间,每月统计一次
|
||||||
|
*/
|
||||||
|
@MppMultiId(value = "data_date")
|
||||||
|
private Date dataDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据类型(0:主网 1:配网)
|
||||||
|
*/
|
||||||
|
@MppMultiId(value = "data_type")
|
||||||
|
private String dataType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压偏差告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "vdev_alarm_info")
|
||||||
|
private Integer vdevAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压偏差告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "vdev_alarm_ratio")
|
||||||
|
private Float vdevAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 频率偏差告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "freq_alarm_info")
|
||||||
|
private Integer freqAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 频率偏差告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "freq_alarm_ratio")
|
||||||
|
private Float freqAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 三相电压不平衡度告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "unbalance_alarm_info")
|
||||||
|
private Integer unbalanceAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 三相电压不平衡度告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "unbalance_alarm_ratio")
|
||||||
|
private Float unbalanceAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 谐波电压告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "v_alarm_info")
|
||||||
|
private Integer vAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 谐波电压告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "v_alarm_ratio")
|
||||||
|
private Float vAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 闪变告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "flicker_alarm_info")
|
||||||
|
private Integer flickerAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 闪变告警超标占比
|
||||||
|
*/
|
||||||
|
@TableField(value = "flicker_alarm_ratio")
|
||||||
|
private Float flickerAlarmRatio;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压暂降告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "sag_alarm_info")
|
||||||
|
private Integer sagAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压暂降告警平均发生次数
|
||||||
|
*/
|
||||||
|
@TableField(value = "sag_alarm_avg_count")
|
||||||
|
private Integer sagAlarmAvgCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短时中断告警情况(0:否 1:是)
|
||||||
|
*/
|
||||||
|
@TableField(value = "interrupt_alarm_info")
|
||||||
|
private Integer interruptAlarmInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短时中断告警平均发生次数
|
||||||
|
*/
|
||||||
|
@TableField(value = "interrupt_alarm_avg_count")
|
||||||
|
private Integer interruptAlarmAvgCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 稳态指标评级结果(0 较差 1中等 2较好)
|
||||||
|
*/
|
||||||
|
@TableField(value = "harmonic_type_grade")
|
||||||
|
private Integer harmonicTypeGrade;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 暂态指标评级结果(0 较差 1中等 2较好)
|
||||||
|
*/
|
||||||
|
@TableField(value = "event_type_grade")
|
||||||
|
private Integer eventTypeGrade;
|
||||||
|
|
||||||
|
private Float wtCount;
|
||||||
|
|
||||||
|
private Float ztCount;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
|
||||||
|
|
||||||
|
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.po.RStatAreaAlarmCountM;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* 接口文档访问地址:http://serverIP:port/swagger-ui.html
|
||||||
|
* Date: 2022/12/13 15:39【需求编号】
|
||||||
|
*
|
||||||
|
* @author clam
|
||||||
|
* @version V1.0.0
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface RStatAreaAlarmCountMPOMapper extends MppBaseMapper<RStatAreaAlarmCountM> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
|
||||||
|
|
||||||
|
|
||||||
|
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.po.RStatAreaAlarmCountM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zbj
|
||||||
|
* @since 2023-06-14
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface RStatAreaAlarmCountMPOService extends IMppService<RStatAreaAlarmCountM> {
|
||||||
|
}
|
||||||
@@ -4,26 +4,29 @@ import cn.hutool.core.date.DateUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
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.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.mapper.mysql.area.RMpTargetWarnDMapper;
|
||||||
import com.njcn.prepare.harmonic.pojo.po.RMpEventDetailDNewPO;
|
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper;
|
||||||
import com.njcn.prepare.harmonic.pojo.po.RStatPwAlarmCountWPO;
|
import com.njcn.prepare.harmonic.pojo.po.*;
|
||||||
import com.njcn.prepare.harmonic.pojo.po.RStatZwAlarmCountWPO;
|
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RAlarmCountService;
|
import com.njcn.system.api.DicDataFeignClient;
|
||||||
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.system.enums.DicDataEnum;
|
import com.njcn.system.enums.DicDataEnum;
|
||||||
|
import com.njcn.system.enums.DicDataTypeEnum;
|
||||||
import com.njcn.system.pojo.po.DictData;
|
import com.njcn.system.pojo.po.DictData;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.time.DayOfWeek;
|
import java.time.DayOfWeek;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -39,10 +42,18 @@ public class RAlarmCountServiceImpl implements RAlarmCountService {
|
|||||||
|
|
||||||
private final RMpTargetWarnDMapper rMpTargetWarnDMapper;
|
private final RMpTargetWarnDMapper rMpTargetWarnDMapper;
|
||||||
|
|
||||||
|
private final RMpMonitorAlarmCountMMapper rMpMonitorAlarmCountMMapper;
|
||||||
|
|
||||||
private final RStatZwAlarmCountWPOService rStatZwAlarmCountWPOService;
|
private final RStatZwAlarmCountWPOService rStatZwAlarmCountWPOService;
|
||||||
|
|
||||||
private final RStatPwAlarmCountWPOService rStatPwAlarmCountWPOService;
|
private final RStatPwAlarmCountWPOService rStatPwAlarmCountWPOService;
|
||||||
|
|
||||||
|
private final RStatAreaAlarmCountMPOService rStatAreaAlarmCountMPOService;
|
||||||
|
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
|
||||||
|
private final RStatOrgMMapper rStatOrgMMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
|
public void handler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@@ -134,9 +145,9 @@ public class RAlarmCountServiceImpl implements RAlarmCountService {
|
|||||||
|
|
||||||
List<RMpTargetWarnDPO> rMpTargetWarnDPOList = rMpTargetWarnDMapper.selectList(rMpTargetWarnDPOQueryWrapper);
|
List<RMpTargetWarnDPO> rMpTargetWarnDPOList = rMpTargetWarnDMapper.selectList(rMpTargetWarnDPOQueryWrapper);
|
||||||
|
|
||||||
|
//获取告警监测点数
|
||||||
long count = rMpTargetWarnDPOList.stream().filter(alarm -> alarm.getIsWarn() == 1).count();
|
long count = rMpTargetWarnDPOList.stream().filter(alarm -> alarm.getIsWarn() == 1).count();
|
||||||
|
|
||||||
|
|
||||||
RStatPwAlarmCountWPO rStatPwAlarmCountWPO = new RStatPwAlarmCountWPO();
|
RStatPwAlarmCountWPO rStatPwAlarmCountWPO = new RStatPwAlarmCountWPO();
|
||||||
rStatPwAlarmCountWPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
|
rStatPwAlarmCountWPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
|
||||||
rStatPwAlarmCountWPO.setDataDate(localDate);
|
rStatPwAlarmCountWPO.setDataDate(localDate);
|
||||||
@@ -157,66 +168,529 @@ public class RAlarmCountServiceImpl implements RAlarmCountService {
|
|||||||
|
|
||||||
//月表
|
//月表
|
||||||
public void rAlarmCountMHandler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
|
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) {
|
long sagCount = rMpTargetWarnDPOList.stream().filter(alarm -> alarm.getIsSagWarn() == 1).count();
|
||||||
String value = "";
|
//获取电压暂降监测点数(id去重)
|
||||||
switch (k) {
|
long sagMCount = rMpTargetWarnDPOList.stream().filter(obj -> obj.getIsSagWarn() == 1).map(obj -> obj.getMeasurementPointId()).distinct().count();
|
||||||
case 1:
|
|
||||||
value = lineSortMap.get(DicDataEnum.ONE_LINE.getCode()).getId();
|
//获取短时中断告警次数
|
||||||
break;
|
long iaaCount = rMpTargetWarnDPOList.stream().filter(alarm -> alarm.getIsInterruptWarn() == 1).count();
|
||||||
case 2:
|
//获取短时中断监测点数(id去重)
|
||||||
value = lineSortMap.get(DicDataEnum.TWO_LINE.getCode()).getId();
|
long iaaMCount = rMpTargetWarnDPOList.stream().filter(obj -> obj.getIsInterruptWarn() == 1).map(obj -> obj.getMeasurementPointId()).distinct().count();
|
||||||
break;
|
|
||||||
case 3:
|
//获取在线监测点数
|
||||||
value = lineSortMap.get(DicDataEnum.THREE_LINE.getCode()).getId();
|
int size = rMpTargetWarnDPOList.size();
|
||||||
break;
|
//获取稳态告警监测点数
|
||||||
default:
|
long wtCount = rMpMonitorAlarmCountMPOS.stream()
|
||||||
break;
|
.filter(obj -> obj.getVdevAlarmInfo() == 1 || obj.getFreqAlarmInfo() == 1 || obj.getUnbalanceAlarmInfo() == 1
|
||||||
}
|
|| obj.getVAlarmInfo() == 1 || obj.getFlickerAlarmInfo() == 1).count();
|
||||||
return value;
|
//获取暂态告警监测点数
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取暂态各个类型发生的监测点数量及发生次数
|
if (sagMCount == 0) {
|
||||||
private List<Integer> getTransientStatisData(DictData dictData, List<RMpEventDetailDNewPO> list) {
|
rStatAreaAlarmCountMPO.setSagAlarmAvgCount(0);
|
||||||
List<Integer> result = new ArrayList<>(2);
|
} else {
|
||||||
Integer value = 0;
|
Float f = sagCount / Float.parseFloat(sagMCount + "");
|
||||||
Integer count = 0;
|
rStatAreaAlarmCountMPO.setSagAlarmAvgCount(f.intValue());
|
||||||
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 (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_RISE.getCode())) {
|
if (iaaMCount == 0) {
|
||||||
value = Integer.valueOf(list.stream().filter(temp -> temp.getSwellTimes() > 0).count() + "");
|
rStatAreaAlarmCountMPO.setInterruptAlarmAvgCount(0);
|
||||||
count = Integer.valueOf(list.stream().mapToInt(RMpEventDetailDNewPO::getSwellTimes).sum() + "");
|
} else {
|
||||||
}
|
Float f = iaaCount / Float.parseFloat(iaaMCount + "");
|
||||||
if (Objects.equals(dictData.getCode(), DicDataEnum.SHORT_INTERRUPTIONS.getCode())) {
|
rStatAreaAlarmCountMPO.setInterruptAlarmAvgCount(f.intValue());
|
||||||
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 (Objects.isNull(rStatOrgMPO)) {
|
||||||
private Integer getStatisData(DictData dictData, String voltage, List<RMpEventDetailMNewPO> list) {
|
rStatAreaAlarmCountMPO.setVdevAlarmRatio(1.00f);
|
||||||
Integer value = 0;
|
rStatAreaAlarmCountMPO.setFreqAlarmRatio(1.00f);
|
||||||
if (Objects.equals(dictData.getCode(), DicDataEnum.VOLTAGE_DIP.getCode())) {
|
rStatAreaAlarmCountMPO.setUnbalanceAlarmRatio(1.00f);
|
||||||
value = Integer.valueOf(list.stream().filter(temp -> temp.getSagTimes() > 0 && Objects.equals(temp.getVoltage(), voltage)).count() + "");
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
|
||||||
|
|
||||||
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatAreaAlarmCountMPOMapper;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatZwAlarmCountWPOMapper;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.po.RStatAreaAlarmCountM;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.po.RStatAreaAlarmCountMPO;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.po.RStatZwAlarmCountWPO;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatAreaAlarmCountMPOService;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatZwAlarmCountWPOService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 终端检测监督
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author zbj
|
||||||
|
* @since 2023-06-14
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class RStatAreaAlarmCountMPOServiceImpl extends MppServiceImpl<RStatAreaAlarmCountMPOMapper, RStatAreaAlarmCountM> implements RStatAreaAlarmCountMPOService {
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user