zbj//1.单位指标告警统计_月统计 算法

This commit is contained in:
zhangbaojian
2023-06-14 15:12:19 +08:00
parent b9e161ec01
commit 94cca2e250
6 changed files with 867 additions and 69 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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> {
}

View File

@@ -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> {
}

View File

@@ -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.getCode(), DicDataEnum.SHORT_INTERRUPTIONS.getCode())) {
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.setInterruptAlarmAvgCount(f.intValue());
}
//获取暂态各个类型发生的监测点数量
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);
}
}
}
}

View File

@@ -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 {
}