14 Commits

Author SHA1 Message Date
贾同学
770fb09223 refactor(harmonic): 优化数据源配置并移除冗余依赖
- 为 RStatLimitRateDetailDServiceImpl 和 RStatLimitRateDServiceImpl 添加 @DS 注解以支持多数据源切换
- 在 harmonic-common 模块中引入 dynamic-datasource-spring-boot-starter 依赖
- 移除 harmonic-boot 模块中对 harmonic-common 的冗余依赖声明
- 调整 AlarmClientFallbackFactory 组件名称以避免命名冲突
2025-12-02 08:44:01 +08:00
wr
eb334cc7c7 Merge remote-tracking branch 'origin/main' 2025-11-28 10:58:11 +08:00
wr
404d11526a 冀北终端评价列表信息增加 2025-11-28 10:47:50 +08:00
xy
7bac805988 微调 2025-11-27 15:27:31 +08:00
wr
e4e04fc5db 冀北终端评价列表 2025-11-27 14:27:45 +08:00
f588a0ffc8 1.暂降高级类型原因调用dll报错问题 2025-11-26 15:13:34 +08:00
xy
f8ffe767dc 冀北完整性功能重新开发 2025-11-26 11:09:11 +08:00
wr
68cbad2fdb 冀北终端在线率代码提交 2025-11-27 11:03:59 +08:00
wr
9b9d75e463 冀北终端在线率代码提交 2025-11-27 11:01:24 +08:00
wr
62c3c09a6b 1.冀北终端在线率代码提交 2025-11-26 16:08:20 +08:00
wr
b523a24e5b Merge remote-tracking branch 'origin/main' 2025-11-26 16:04:33 +08:00
wr
075dfc19d6 1.异常数据统计增加暂态信息 2025-11-26 09:58:49 +08:00
wr
279c5c7642 1.增加稳态告警统计限值 2025-11-25 17:00:22 +08:00
wr
b0ef851479 1.解决解决全景和台账管理,终端数量不一致问题 2025-11-19 14:58:37 +08:00
51 changed files with 1176 additions and 170 deletions

View File

@@ -67,7 +67,9 @@ public interface QvvrCauseDLL extends Library {
// 创建临时文件 // 创建临时文件
String tempDir = System.getProperty("java.io.tmpdir"); String tempDir = System.getProperty("java.io.tmpdir");
File tempLibFile = new File(tempDir, "qvvr_" + System.currentTimeMillis() + "_" + libFileName); File tempLibFile = new File(tempDir, libFileName);
//File tempLibFile = new File(tempDir, "qvvr_" + System.currentTimeMillis() + "_" + libFileName);
// 提取库文件到临时目录 // 提取库文件到临时目录
try (FileOutputStream out = new FileOutputStream(tempLibFile)) { try (FileOutputStream out = new FileOutputStream(tempLibFile)) {

View File

@@ -1,14 +1,11 @@
package com.njcn.advance.event.service.impl; package com.njcn.advance.event.service.impl;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.njcn.advance.event.cause.core.VoltageSagAnalyzer;
import com.njcn.advance.event.cause.jna.QvvrCauseDLL; import com.njcn.advance.event.cause.jna.QvvrCauseDLL;
import com.njcn.advance.event.cause.model.AnalysisResult;
import com.njcn.advance.event.cause.model.DataFeature; import com.njcn.advance.event.cause.model.DataFeature;
import com.njcn.advance.event.cause.model.QvvrDataStruct; import com.njcn.advance.event.type.jna.*;
import com.njcn.advance.pojo.dto.EventAnalysisDTO; import com.njcn.advance.pojo.dto.EventAnalysisDTO;
import com.njcn.advance.event.service.IEventAdvanceService; import com.njcn.advance.event.service.IEventAdvanceService;
import com.njcn.advance.event.type.jna.QvvrDLL;
import com.njcn.common.config.GeneralInfo; import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.event.file.component.WaveFileComponent; import com.njcn.event.file.component.WaveFileComponent;
@@ -89,8 +86,55 @@ public class EventAdvanceServiceImpl implements IEventAdvanceService {
} }
} }
List<List<Float>> listWaveData = waveDataDTO.getListWaveData(); List<List<Float>> listWaveData = waveDataDTO.getListWaveData();
// 暂降类型
// 创建数据结构
QvvrDLL.QvvrDataStruct typeDataStruct = new QvvrDLL.QvvrDataStruct();
System.out.println("初始化qvvrdll成功-----------");
typeDataStruct.smp_rate = waveDataDTO.getComtradeCfgDTO().getFinalSampleRate();
System.out.println("采样率-----------" + typeDataStruct.smp_rate);
typeDataStruct.smp_len = listWaveData.size();
System.out.println("波形长度-----------" + listWaveData.size());
// 获取ABC三相的瞬时数据
for (int i = 0; i < listWaveData.size(); i++) {
typeDataStruct.smp_va[i] = listWaveData.get(i).get(1);
typeDataStruct.smp_vb[i] = listWaveData.get(i).get(2);
typeDataStruct.smp_vc[i] = listWaveData.get(i).get(3);
}
// 执行算法分析 - 直接调用C DLL
try {
QvvrDLL.INSTANCE.qvvr_fun(typeDataStruct);
System.out.println("调用qvvrdll成功-----------");
if (typeDataStruct.evt_num > 0) {
// 全局比较找出最小三相电压特征值
float globalMinVoltage = Float.MAX_VALUE;
int globalFaultType = 10;
for (int i = 0; i < typeDataStruct.evt_num; i++) {
QvvrDLL.EventBuffer evt = typeDataStruct.evt_buf[i];
for (int j = 0; j < evt.u_min_num; j++) {
float u3min = evt.u3_min[j];
if (u3min < globalMinVoltage) {
globalMinVoltage = u3min;
globalFaultType = evt.qvvr_cata_type[j];
}
}
}
eventAnalysis.setType(globalFaultType);
} else {
eventAnalysis.setType(DataFeature.TYPE10);
}
System.out.println("结束qvvrdll方法调用-----------");
} catch (Exception e) {
eventAnalysis.setType(DataFeature.TYPE10);
eventAnalysis.setTypeFlag(0);
}
// 暂降原因JNA的方式 // 暂降原因JNA的方式
com.njcn.advance.event.cause.jna.QvvrCauseDLL.QvvrDataStruct causeDataStruct = new com.njcn.advance.event.cause.jna.QvvrCauseDLL.QvvrDataStruct(); QvvrCauseDLL.QvvrDataStruct causeDataStruct = new QvvrCauseDLL.QvvrDataStruct();
causeDataStruct.smp_rate = waveDataDTO.getComtradeCfgDTO().getFinalSampleRate(); causeDataStruct.smp_rate = waveDataDTO.getComtradeCfgDTO().getFinalSampleRate();
causeDataStruct.smp_len = listWaveData.size(); causeDataStruct.smp_len = listWaveData.size();
// 获取ABC三相的瞬时数据 // 获取ABC三相的瞬时数据
@@ -112,45 +156,6 @@ public class EventAdvanceServiceImpl implements IEventAdvanceService {
} }
System.out.println("暂降原因分析完毕==============="); System.out.println("暂降原因分析完毕===============");
System.out.println("cause:" + eventAnalysis); System.out.println("cause:" + eventAnalysis);
// 暂降类型
// 创建数据结构
// com.njcn.advance.event.type.jna.QvvrDLL.QvvrDataStruct typeDataStruct = new com.njcn.advance.event.type.jna.QvvrDLL.QvvrDataStruct();
// typeDataStruct.smp_rate = waveDataDTO.getComtradeCfgDTO().getFinalSampleRate();
// typeDataStruct.smp_len = listWaveData.size();
// // 获取ABC三相的瞬时数据
// for (int i = 0; i < listWaveData.size(); i++) {
// typeDataStruct.smp_va[i] = listWaveData.get(i).get(1);
// typeDataStruct.smp_vb[i] = listWaveData.get(i).get(2);
// typeDataStruct.smp_vc[i] = listWaveData.get(i).get(3);
// }
// // 执行算法分析 - 直接调用C DLL
// try {
// QvvrDLL.INSTANCE.qvvr_fun(typeDataStruct);
// if (typeDataStruct.evt_num > 0) {
// // 全局比较找出最小三相电压特征值
// float globalMinVoltage = Float.MAX_VALUE;
// int globalFaultType = 10;
// for (int i = 0; i < typeDataStruct.evt_num; i++) {
// QvvrDLL.EventBuffer evt = typeDataStruct.evt_buf[i];
// for (int j = 0; j < evt.u_min_num; j++) {
// float u3min = evt.u3_min[j];
// if (u3min < globalMinVoltage) {
// globalMinVoltage = u3min;
// globalFaultType = evt.qvvr_cata_type[j];
// }
// }
// }
// eventAnalysis.setType(globalFaultType);
// } else {
// eventAnalysis.setType(DataFeature.TYPE10);
// }
// } catch (Exception e) {
// eventAnalysis.setType(DataFeature.TYPE10);
// eventAnalysis.setTypeFlag(0);
// }
return eventAnalysis; return eventAnalysis;
} }
} }

View File

@@ -52,7 +52,7 @@ public interface QvvrDLL extends Library {
); );
} }
} }
/** /**
* 从jar中提取库文件到临时目录 * 从jar中提取库文件到临时目录
*/ */
@@ -62,11 +62,13 @@ public interface QvvrDLL extends Library {
if (libStream == null) { if (libStream == null) {
throw new FileNotFoundException("在jar中找不到库文件: " + resourcePath); throw new FileNotFoundException("在jar中找不到库文件: " + resourcePath);
} }
// 创建临时文件 // 创建临时文件
String tempDir = System.getProperty("java.io.tmpdir"); String tempDir = System.getProperty("java.io.tmpdir");
File tempLibFile = new File(tempDir, "qvvr_" + System.currentTimeMillis() + "_" + libFileName); File tempLibFile = new File(tempDir, libFileName);
// File tempLibFile = new File(tempDir, "qvvr_" + System.currentTimeMillis() + "_" + libFileName);
// 提取库文件到临时目录 // 提取库文件到临时目录
try (FileOutputStream out = new FileOutputStream(tempLibFile)) { try (FileOutputStream out = new FileOutputStream(tempLibFile)) {
byte[] buffer = new byte[8192]; byte[] buffer = new byte[8192];
@@ -77,45 +79,47 @@ public interface QvvrDLL extends Library {
} finally { } finally {
libStream.close(); libStream.close();
} }
// 设置为可执行 // 设置为可执行
tempLibFile.setExecutable(true); tempLibFile.setExecutable(true);
tempLibFile.setReadable(true); tempLibFile.setReadable(true);
// JVM退出时删除临时文件 // JVM退出时删除临时文件
tempLibFile.deleteOnExit(); tempLibFile.deleteOnExit();
System.out.println("已提取库文件到: " + tempLibFile.getAbsolutePath()); System.out.println("已提取库文件到: " + tempLibFile.getAbsolutePath());
return tempLibFile; return tempLibFile;
} }
/** /**
* 直接调用C DLL的qvvr_fun函数 * 直接调用C DLL的qvvr_fun函数
* void __stdcall qvvr_fun(void *data) * void __stdcall qvvr_fun(void *data)
*/ */
void qvvr_fun(QvvrDataStruct data); void qvvr_fun(QvvrDataStruct data);
void ping();
/** /**
* 对应C语言的qvvr_data_struct结构体 * 对应C语言的qvvr_data_struct结构体
*/ */
public static class QvvrDataStruct extends Structure { public static class QvvrDataStruct extends Structure {
// 输入数据 // 输入数据
public float[] smp_va = new float[128 * 50 * 120]; // A相电压 public float[] smp_va = new float[128 * 50 * 120]; // A相电压
public float[] smp_vb = new float[128 * 50 * 120]; // B相电压 public float[] smp_vb = new float[128 * 50 * 120]; // B相电压
public float[] smp_vc = new float[128 * 50 * 120]; // C相电压 public float[] smp_vc = new float[128 * 50 * 120]; // C相电压
public int smp_rate; // 采样频率 public int smp_rate; // 采样频率
public int smp_len; // 数据长度 public int smp_len; // 数据长度
// 输出结果 // 输出结果
public int evt_num; // 事件数量 public int evt_num; // 事件数量
public EventBuffer[] evt_buf = new EventBuffer[32]; // 事件缓冲区 public EventBuffer[] evt_buf = new EventBuffer[32]; // 事件缓冲区
@Override @Override
protected List<String> getFieldOrder() { protected List<String> getFieldOrder() {
return Arrays.asList("smp_va", "smp_vb", "smp_vc", "smp_rate", "smp_len", "evt_num", "evt_buf"); return Arrays.asList("smp_va", "smp_vb", "smp_vc", "smp_rate", "smp_len", "evt_num", "evt_buf");
} }
public QvvrDataStruct() { public QvvrDataStruct() {
super(); super();
// 初始化事件缓冲区 // 初始化事件缓冲区
@@ -124,49 +128,49 @@ public interface QvvrDLL extends Library {
} }
} }
} }
/** /**
* 事件缓冲区结构 * 事件缓冲区结构
*/ */
public static class EventBuffer extends Structure { public static class EventBuffer extends Structure {
public int[] qvvr_cata_cause = new int[256]; public int[] qvvr_cata_cause = new int[256];
public int[] qvvr_phasetype = new int[256]; public int[] qvvr_phasetype = new int[256];
public int[] qvvr_cata_type = new int[256]; public int[] qvvr_cata_type = new int[256];
public float hold_time_rms; public float hold_time_rms;
public float hold_time_dq; public float hold_time_dq;
public float POW_a; public float POW_a;
public float POW_b; public float POW_b;
public float POW_c; public float POW_c;
public float Voltagechange_Va; public float Voltagechange_Va;
public float Voltagechange_Vb; public float Voltagechange_Vb;
public float Voltagechange_Vc; public float Voltagechange_Vc;
public int SEG_T_num; public int SEG_T_num;
public int[] SEG_T0_idx = new int[256]; public int[] SEG_T0_idx = new int[256];
public int[] SEG_T_idx = new int[256]; public int[] SEG_T_idx = new int[256];
public int SEG_RMS_T_num; public int SEG_RMS_T_num;
public int[] SEG_RMS_T_idx = new int[256]; public int[] SEG_RMS_T_idx = new int[256];
public int u_min_num; public int u_min_num;
public float[] ua_min = new float[256]; public float[] ua_min = new float[256];
public float[] ub_min = new float[256]; public float[] ub_min = new float[256];
public float[] uc_min = new float[256]; public float[] uc_min = new float[256];
public float[] u3_min = new float[256]; public float[] u3_min = new float[256];
public int[] order_min_idx = new int[256]; public int[] order_min_idx = new int[256];
public float[] angle_diff_ap = new float[256]; public float[] angle_diff_ap = new float[256];
public float[] angle_diff_bp = new float[256]; public float[] angle_diff_bp = new float[256];
public float[] angle_diff_cp = new float[256]; public float[] angle_diff_cp = new float[256];
public float[] angle_diff_an = new float[256]; public float[] angle_diff_an = new float[256];
public float[] angle_diff_bn = new float[256]; public float[] angle_diff_bn = new float[256];
public float[] angle_diff_cn = new float[256]; public float[] angle_diff_cn = new float[256];
public float[] bph_max_value = new float[256]; public float[] bph_max_value = new float[256];
@Override @Override
protected List<String> getFieldOrder() { protected List<String> getFieldOrder() {
return Arrays.asList( return Arrays.asList(

View File

@@ -854,6 +854,21 @@ public class EventRelevantAnalysisServiceImpl extends ServiceImpl<RmpEventAdvanc
/************************************************************************************* /*************************************************************************************
* 获取变压器信息并生成矩阵 * 获取变压器信息并生成矩阵
*************************************************************************************/ *************************************************************************************/
public Map<String, Map<String, Integer>> getNodeBefore(){
Map<String, EntityMtrans> entityMtranMap = new HashMap<>(32);
HandleEvent handleEvent = new HandleEvent();
List<EntityLogic> list = relevantLogMapper.getLogic();
Map<String, Map<String, Integer>> setNodeSort = new HashMap<>();
if (CollectionUtil.isNotEmpty(list)) {
Map<String, List<String>> map = getLogicInfo(list);
setNodeSort = nodeSort(map);
}
return setNodeSort;
}
public Map<String, EntityMtrans> getNodeInfo( ) { public Map<String, EntityMtrans> getNodeInfo( ) {
Map<String, EntityMtrans> entityMtranMap = new HashMap<>(32); Map<String, EntityMtrans> entityMtranMap = new HashMap<>(32);

View File

@@ -82,7 +82,8 @@ public class Knife4jSwaggerConfig {
"com.njcn.algorithm", "com.njcn.algorithm",
"com.njcn.dataProcess", "com.njcn.dataProcess",
"com.njcn.migration", "com.njcn.migration",
"com.njcn.harmonic.rstatlimitrate.controller" "com.njcn.harmonic.rstatlimitrate.controller",
"com.njcn.device.device.controller"
) )
.collect(Collectors.toList()); .collect(Collectors.toList());
List<GrantType> grantTypes = new ArrayList<>(); List<GrantType> grantTypes = new ArrayList<>();

View File

@@ -3,9 +3,9 @@ package com.njcn.device.pq.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.biz.utils.DeviceEnumUtil;
import com.njcn.device.pq.api.AlarmClient; import com.njcn.device.pq.api.AlarmClient;
import com.njcn.device.pq.pojo.vo.AlarmStrategyVO; import com.njcn.device.pq.pojo.vo.AlarmStrategyVO;
import com.njcn.device.biz.utils.DeviceEnumUtil;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -14,11 +14,12 @@ import java.util.List;
/** /**
* 告警管理熔断降级 * 告警管理熔断降级
*
* @author yzh * @author yzh
* @date 2022/9/19 * @date 2022/9/19
*/ */
@Slf4j @Slf4j
@Component @Component("deviceAlarmClientFallbackFactory")
public class AlarmClientFallbackFactory implements FallbackFactory<AlarmClient> { public class AlarmClientFallbackFactory implements FallbackFactory<AlarmClient> {
@Override @Override
public AlarmClient create(Throwable throwable) { public AlarmClient create(Throwable throwable) {

View File

@@ -55,7 +55,11 @@ public interface Param {
//长时间闪变值 //长时间闪变值
String pst = "DataFlicker-pst"; String pst = "DataFlicker-pst";
//电压暂降
String Voltage_Dip = "r_mp_event_detail-Voltage_Dip";
//电压暂升
String Voltage_Rise = "r_mp_event_detail-Voltage_Rise"; String Voltage_Rise = "r_mp_event_detail-Voltage_Rise";
String pf = "DataHarmPowerP-pf"; String pf = "DataHarmPowerP-pf";

View File

@@ -0,0 +1,41 @@
package com.njcn.device.pq.enums;
import lombok.Getter;
import java.util.Arrays;
/**
* pqs
*
* @author cdf
* @date 2022/1/4
*/
@Getter
public enum JbPowerFlagEnum {
/**
* 系统拓扑各层级描述
*/
GRID_SIDE(0, "电网侧"),
NO_GRID_SIDE(1, "非电网侧"),
SEND_NETWORK(2, "上送国网"),
NOT_NETWORK(3, "非上送国网"),
unknown(4, "未知"),
;
private final Integer code;
private final String message;
JbPowerFlagEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public static JbPowerFlagEnum getPowerFlagEnumByCode(Integer code) {
return Arrays.stream(JbPowerFlagEnum.values())
.filter(x -> x.getCode().equals(code))
.findAny()
.orElse(unknown);
}
}

View File

@@ -137,6 +137,16 @@ public class PqDataVerifyBak {
*/ */
private Integer pst; private Integer pst;
/**
* 电压暂降(0:正常 1:异常)
*/
private Integer dip;
/**
* 电压暂升(0:正常 1:异常)
*/
private Integer rise;
/** /**
* 判断所有指标 0:无异常 1:有异常 * 判断所有指标 0:无异常 1:有异常
*/ */

View File

@@ -27,6 +27,9 @@ public class DevDetail {
@ApiModelProperty("供电公司") @ApiModelProperty("供电公司")
private String gdName; private String gdName;
@ApiModelProperty("所属部门")
private String deptName;
@ApiModelProperty("变电站名称") @ApiModelProperty("变电站名称")
private String bdzName; private String bdzName;
@@ -37,9 +40,15 @@ public class DevDetail {
@ApiModelProperty("终端等级") @ApiModelProperty("终端等级")
private String lineGrade; private String lineGrade;
@ApiModelProperty("终端厂商")
private String manufacturer;
@ApiModelProperty("通讯状态0中断1正常") @ApiModelProperty("通讯状态0中断1正常")
private Integer comFlag; private Integer comFlag;
@ApiModelProperty("运行状态0运行1检修2停运3调试4退运")
private Integer runFlag;
@ApiModelProperty("定检时间") @ApiModelProperty("定检时间")
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate nextTimeCheck; private LocalDate nextTimeCheck;

View File

@@ -11,6 +11,15 @@ import lombok.Data;
@Data @Data
public class DevDetailVO { public class DevDetailVO {
@ApiModelProperty("地市")
private String cit;
@ApiModelProperty("供电公司")
private String company;
@ApiModelProperty("终端厂家")
private String manufacturer;
@ApiModelProperty(name = "lineId",value = "监测点索引") @ApiModelProperty(name = "lineId",value = "监测点索引")
private String lineId; private String lineId;
@@ -32,4 +41,6 @@ public class DevDetailVO {
@ApiModelProperty(name = "subName",value = "对象id(新能源用户)") @ApiModelProperty(name = "subName",value = "对象id(新能源用户)")
private String ObjId; private String ObjId;
@ApiModelProperty("终端运行状态0运行1检修2停运3调试4退运")
private Integer runFlag;
} }

View File

@@ -14,6 +14,9 @@ import java.util.List;
@Data @Data
public class DeviceRunEvaluateVO { public class DeviceRunEvaluateVO {
@ApiModelProperty("终端id")
private String id;
@ApiModelProperty("名称") @ApiModelProperty("名称")
private String name; private String name;
@@ -26,6 +29,18 @@ public class DeviceRunEvaluateVO {
@ApiModelProperty("评价") @ApiModelProperty("评价")
private BigDecimal evaluate; private BigDecimal evaluate;
@ApiModelProperty("地市")
private String cit;
@ApiModelProperty("供电公司")
private String company;
@ApiModelProperty("终端厂家")
private String manufacturer;
@ApiModelProperty("终端运行状态0运行1检修2停运3调试4退运")
private String runFlag;
@ApiModelProperty("完整率") @ApiModelProperty("完整率")
private BigDecimal integrityRate; private BigDecimal integrityRate;
@@ -40,4 +55,29 @@ public class DeviceRunEvaluateVO {
@ApiModelProperty("终端id集合") @ApiModelProperty("终端id集合")
private List<String> devIds; private List<String> devIds;
} }
@Data
public static class Detail {
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("评价")
private BigDecimal score;
@ApiModelProperty("终端数量")
private Integer count;
@ApiModelProperty("在线率")
private BigDecimal online;
@ApiModelProperty("数据完整性")
private BigDecimal integrity;
@ApiModelProperty("异常率")
private BigDecimal qualified;
@ApiModelProperty("终端信息")
List<DeviceRunEvaluateVO> list;
}
} }

View File

@@ -15,6 +15,9 @@ import java.time.LocalDateTime;
@Data @Data
public class LineDetailVO implements Serializable { public class LineDetailVO implements Serializable {
@ApiModelProperty("部门名称")
private String deptName;
@ApiModelProperty("供电公司名称") @ApiModelProperty("供电公司名称")
private String gdName; private String gdName;
@@ -92,6 +95,16 @@ public class LineDetailVO implements Serializable {
@ApiModelProperty("已用流量占比") @ApiModelProperty("已用流量占比")
private Float flowProportion; private Float flowProportion;
@ApiModelProperty("电网标志 0-电网侧1-非电网侧")
private Integer powerFlag;
@ApiModelProperty(name = "监测点运行状态")
private String lineRunType;
@ApiModelProperty(name = "终端厂家")
private String manufacturer;
} }
@Data @Data

View File

@@ -1,6 +1,5 @@
package com.njcn.device.pq.pojo.vo; package com.njcn.device.pq.pojo.vo;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@@ -0,0 +1,129 @@
package com.njcn.device.pq.pojo.vo.common;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author wr
* @description
* @date 2025/11/26 11:00
*/
@Data
public class DeviceOnlineRate {
@ApiModelProperty("总终端数量")
private Integer totalNum;
@ApiModelProperty("低于90终端数据")
private Integer belowNum;
@ApiModelProperty("总终端在线率")
private String totalOnlineRate;
@ApiModelProperty("统计信息")
List<CitDetail> citDetailList;
@Data
public static class CitDetail {
@ApiModelProperty("地市")
private String citName;
@ApiModelProperty("总终端数量")
private Integer citTotalNum;
@ApiModelProperty("低于90终端数据")
private Integer citBelowNum;
@ApiModelProperty("总终端在线率")
private String citTotalOnlineRate;
@ApiModelProperty("统计信息")
List<?> detailList;
}
@Data
public static class Detail {
@ApiModelProperty("地市")
private String cit;
@ApiModelProperty("供电公司")
private String company;
@ApiModelProperty("变电站")
private String subStation;
@ApiModelProperty("终端ID")
private String deviceId;
@ApiModelProperty("终端名称")
private String deviceName;
@ApiModelProperty("终端厂家")
private String manufacturer;
@ApiModelProperty("终端IP")
private String ip;
@ApiModelProperty("终端运行状态0运行1检修2停运3调试4退运")
private String runFlag;
@ApiModelProperty("终端通讯状态0中断1正常")
private String comFlag;
@ApiModelProperty("最新数据时间")
private LocalDateTime timeID;
@ApiModelProperty("在线率")
private String onlineRate;
}
@Data
public static class LineDetail {
@ApiModelProperty("地市")
private String cit;
@ApiModelProperty("供电公司")
private String company;
@ApiModelProperty("变电站")
private String subStation;
@ApiModelProperty("终端ID")
private String deviceId;
@ApiModelProperty("终端名称")
private String deviceName;
@ApiModelProperty("终端厂家")
private String manufacturer;
@ApiModelProperty("终端IP")
private String ip;
@ApiModelProperty("监测点id")
private String lineId;
@ApiModelProperty("监测点名称")
private String lineName;
@ApiModelProperty("监测点运行状态")
private String runFlag;
@ApiModelProperty("最新数据时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime latestTime;
@ApiModelProperty("数据完整性")
private Double integrity;
}
}

View File

@@ -50,6 +50,8 @@ public class DetailAbnormalVO {
private String avg; private String avg;
//CP95 //CP95
private String cp95; private String cp95;
//幅值
private String featureAmplitude;
} }
@@ -73,6 +75,7 @@ public class DetailAbnormalVO {
//最大 //最大
private String val; private String val;
//限值
private float overLimitValue;
} }
} }

View File

@@ -9,14 +9,29 @@ import lombok.Data;
*/ */
@Data @Data
public class JsonBaseVO { public class JsonBaseVO {
/**
* 超标时间
*/
private String time; private String time;
/**
* 异常值
*/
private String value; private String value;
/**
* 相别
*/
private String phasic; private String phasic;
/**
* 数据类型(最大值max、最小值min、平均值avg、95值cp95)
*/
private String valueType; private String valueType;
/**
* 限值
*/
private float overLimitValue;
} }

View File

@@ -76,4 +76,14 @@ public class DeviceRunEvaluateController extends BaseController {
} }
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
@PostMapping("/getRunEvaluateInfo")
@ApiOperation("终端评价列表(冀北)")
public HttpResult<List<DeviceRunEvaluateVO.Detail>> getRunEvaluateInfo(@RequestBody DeviceInfoParam.BusinessParam businessParam) {
String methodDescribe = getMethodDescribe("getRunEvaluateInfo");
List<DeviceRunEvaluateVO.Detail> runEvaluate = deviceRunEvaluateService.getRunEvaluate(businessParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, runEvaluate, methodDescribe);
}
} }

View File

@@ -2,7 +2,6 @@ package com.njcn.device.pq.controller;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
@@ -17,6 +16,7 @@ import com.njcn.device.pq.pojo.param.LineDataQualityParam;
import com.njcn.device.pq.pojo.param.LineIntegrityDataParam; import com.njcn.device.pq.pojo.param.LineIntegrityDataParam;
import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO; import com.njcn.device.pq.pojo.vo.LineIntegrityDataVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import com.njcn.device.pq.service.IRStatIntegrityDService; import com.njcn.device.pq.service.IRStatIntegrityDService;
import com.njcn.device.pq.service.LineIntegrityDataService; import com.njcn.device.pq.service.LineIntegrityDataService;
import com.njcn.harmonic.pojo.vo.IntegrityIconVO; import com.njcn.harmonic.pojo.vo.IntegrityIconVO;
@@ -148,4 +148,14 @@ public class LineIntegrityDataController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,flag,methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,flag,methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/data")
@ApiOperation("监测点数据完整性(冀北)")
@ApiImplicitParam(name = "param", value = "参数实体", required = true)
public HttpResult<DeviceOnlineRate> getData(@RequestBody DeviceInfoParam.BusinessParam param) {
String methodDescribe = getMethodDescribe("getData");
DeviceOnlineRate rate = irStatIntegrityDService.getData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe);
}
} }

View File

@@ -34,4 +34,13 @@ public interface DeviceRunEvaluateService {
TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrend(DeviceInfoParam.BusinessParam businessParam); TerminalEvaluateAreaVO.lastWeekTrendVO lastWeekTrend(DeviceInfoParam.BusinessParam businessParam);
/**
* @Description: 获取终端列表
* @param param
* @return: java.util.List<com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO.Detail>
* @Author: wr
* @Date: 2025/11/27 10:24
*/
List<DeviceRunEvaluateVO.Detail> getRunEvaluate(DeviceInfoParam.BusinessParam param);
} }

View File

@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.github.jeffreyning.mybatisplus.service.IMppService; import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.dto.LineDataQualityDTO;
import com.njcn.device.pq.pojo.dto.MonitorIntegrityDTO; import com.njcn.device.pq.pojo.dto.MonitorIntegrityDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.LineBaseQueryParam; import com.njcn.device.pq.pojo.param.LineBaseQueryParam;
import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.param.LineDataQualityParam;
import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import java.util.List; import java.util.List;
@@ -33,4 +35,6 @@ public interface IRStatIntegrityDService extends IMppService<RStatIntegrityD> {
List<LineDataQualityDTO> getLineDataQuality(LineDataQualityParam lineDataQualityParam); List<LineDataQualityDTO> getLineDataQuality(LineDataQualityParam lineDataQualityParam);
Boolean saveOrUpdateData(List<MonitorIntegrityDTO> monitorIntegrityDTOList); Boolean saveOrUpdateData(List<MonitorIntegrityDTO> monitorIntegrityDTOList);
DeviceOnlineRate getData(DeviceInfoParam.BusinessParam param);
} }

View File

@@ -509,6 +509,7 @@ public class DataVerifyServiceImpl extends ServiceImpl<DataVerifyMapper, DataVer
vo.setVal(valArr[i]); vo.setVal(valArr[i]);
vo.setPhaseType(phasic); vo.setPhaseType(phasic);
vo.setTargetName(StrUtil.isNotBlank(count) ? count + "" + targetName : targetName); vo.setTargetName(StrUtil.isNotBlank(count) ? count + "" + targetName : targetName);
vo.setOverLimitValue(it.getOverLimitValue());
result.add(vo); result.add(vo);
} }
}); });

View File

@@ -6,27 +6,29 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.common.mapper.onlinerate.OnLineRateMapper;
import com.njcn.device.common.service.GeneralDeviceService; import com.njcn.device.common.service.GeneralDeviceService;
import com.njcn.device.line.mapper.LineMapper; import com.njcn.device.line.mapper.LineMapper;
import com.njcn.device.line.service.DeptLineService; import com.njcn.device.line.service.DeptLineService;
import com.njcn.device.line.service.LineService;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; import com.njcn.device.pq.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO; import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DevRunEvaluateParam; import com.njcn.device.pq.pojo.param.DevRunEvaluateParam;
import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.Line; import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD; import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.DevDetailVO; import com.njcn.device.pq.pojo.vo.*;
import com.njcn.device.pq.pojo.vo.DeviceRunEvaluateVO;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.njcn.device.pq.enums.LineBaseEnum; import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.enums.PowerFlagEnum; import com.njcn.device.pq.enums.PowerFlagEnum;
import com.njcn.device.pq.enums.RunFlagEnum; import com.njcn.device.pq.enums.RunFlagEnum;
import com.njcn.device.pq.pojo.dto.MonitorInfoDTO; import com.njcn.device.pq.pojo.dto.MonitorInfoDTO;
import com.njcn.device.pq.pojo.vo.TerminalEvaluateAreaVO;
import com.njcn.device.pq.service.DeviceRunEvaluateService; import com.njcn.device.pq.service.DeviceRunEvaluateService;
import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper; import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper;
import com.njcn.harmonic.api.RStatLimitRateDClient; import com.njcn.harmonic.api.RStatLimitRateDClient;
@@ -34,6 +36,11 @@ import com.njcn.harmonic.pojo.param.RStatLimitQueryParam;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.supervision.api.UserLedgerFeignClient; import com.njcn.supervision.api.UserLedgerFeignClient;
import com.njcn.supervision.pojo.vo.user.NewUserReportVO; import com.njcn.supervision.pojo.vo.user.NewUserReportVO;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -62,7 +69,10 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
private final LineMapper lineMapper; private final LineMapper lineMapper;
private final UserLedgerFeignClient userLedgerFeignClient; private final UserLedgerFeignClient userLedgerFeignClient;
private final DeptLineService deptLineService; private final DeptLineService deptLineService;
private final GeneralDeviceService deviceService;
private final OnLineRateMapper onLineRateMapper;
private final DicDataFeignClient dicDataFeignClient;
private final DeptFeignClient deptFeignClient;
/** /**
* 数据完整性:50% * 数据完整性:50%
*/ */
@@ -107,7 +117,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
} }
return info.stream().sorted(Comparator.comparing(DeviceRunEvaluateVO.Info::getEvaluate,Comparator.reverseOrder())).collect(Collectors.toList()); return info.stream().sorted(Comparator.comparing(DeviceRunEvaluateVO.Info::getEvaluate, Comparator.reverseOrder())).collect(Collectors.toList());
} }
private void setEvaluate(List<String> devIds, List<String> lineIds, List<RStatIntegrityD> onIntegrityList, DeviceRunEvaluateVO evaluateVO, List<RStatOnlinerateD> onlineRateList, List<RStatLimitRateDPO> limitRateList) { private void setEvaluate(List<String> devIds, List<String> lineIds, List<RStatIntegrityD> onIntegrityList, DeviceRunEvaluateVO evaluateVO, List<RStatOnlinerateD> onlineRateList, List<RStatLimitRateDPO> limitRateList) {
@@ -116,7 +126,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
if (CollUtil.isNotEmpty(integrityDS)) { if (CollUtil.isNotEmpty(integrityDS)) {
double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum(); double realTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getRealTime).sum();
double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum(); double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityD::getDueTime).sum();
evaluateVO.setIntegrityRate(NumberUtil.round(Math.min(realTime * 100 / dueTime,100), 2)); evaluateVO.setIntegrityRate(NumberUtil.round(Math.min(realTime * 100 / dueTime, 100), 2));
} else { } else {
evaluateVO.setIntegrityRate(new BigDecimal(0)); evaluateVO.setIntegrityRate(new BigDecimal(0));
} }
@@ -125,7 +135,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
if (CollUtil.isNotEmpty(onlineRateDS)) { if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum(); double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum(); double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateD::getOfflineMin).sum();
evaluateVO.setOnLineRate(NumberUtil.round(Math.min(onlineTime * 100.0 / (onlineTime + offlineTime),100), 2)); evaluateVO.setOnLineRate(NumberUtil.round(Math.min(onlineTime * 100.0 / (onlineTime + offlineTime), 100), 2));
} else { } else {
evaluateVO.setOnLineRate(new BigDecimal(0)); evaluateVO.setOnLineRate(new BigDecimal(0));
} }
@@ -143,7 +153,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
if (allTime == 0) { if (allTime == 0) {
evaluateVO.setPassRate(new BigDecimal(0)); evaluateVO.setPassRate(new BigDecimal(0));
} else { } else {
evaluateVO.setPassRate(NumberUtil.round(Math.min((1 - (overTime * 1.0 / allTime)) * 100,100), 2)); evaluateVO.setPassRate(NumberUtil.round(Math.min((1 - (overTime * 1.0 / allTime)) * 100, 100), 2));
} }
} else { } else {
evaluateVO.setPassRate(new BigDecimal(0)); evaluateVO.setPassRate(new BigDecimal(0));
@@ -213,7 +223,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(businessParam, Stream.of(RunFlagEnum.RUNNING.getStatus()).collect(Collectors.toList()), Stream.of(PowerFlagEnum.REAL_DEVICE.getCode()).collect(Collectors.toList())); List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(businessParam, Stream.of(RunFlagEnum.RUNNING.getStatus()).collect(Collectors.toList()), Stream.of(PowerFlagEnum.REAL_DEVICE.getCode()).collect(Collectors.toList()));
if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) { if (CollectionUtil.isNotEmpty(generalDeviceDTOList)) {
if (generalDeviceDTOList.size() == 1 && generalDeviceDTOList.get(0).getIndex().equals(businessParam.getDeptIndex())) { if (generalDeviceDTOList.size() == 1 && generalDeviceDTOList.get(0).getIndex().equals(businessParam.getDeptIndex())) {
if(CollUtil.isNotEmpty(generalDeviceDTOList.get(0).getLineIndexes())) { if (CollUtil.isNotEmpty(generalDeviceDTOList.get(0).getLineIndexes())) {
//已经最底层,展示电站和用户场站 //已经最底层,展示电站和用户场站
List<MonitorInfoDTO> lineDetailList = lineMapper.getLineListByIds(generalDeviceDTOList.get(0).getLineIndexes()); List<MonitorInfoDTO> lineDetailList = lineMapper.getLineListByIds(generalDeviceDTOList.get(0).getLineIndexes());
List<String> ids = lineDetailList.stream().map(MonitorInfoDTO::getId).distinct().collect(Collectors.toList()); List<String> ids = lineDetailList.stream().map(MonitorInfoDTO::getId).distinct().collect(Collectors.toList());
@@ -246,7 +256,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
} }
} else { } else {
for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) { for (GeneralDeviceDTO generalDeviceDTO : generalDeviceDTOList) {
if(CollUtil.isEmpty(generalDeviceDTO.getDeviceIndexes())){ if (CollUtil.isEmpty(generalDeviceDTO.getDeviceIndexes())) {
continue; continue;
} }
List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>(); List<RStatIntegrityD> rStatIntegrityDList = new ArrayList<>();
@@ -334,6 +344,139 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
return lastWeekTrendVO; return lastWeekTrendVO;
} }
@Override
public List<DeviceRunEvaluateVO.Detail> getRunEvaluate(DeviceInfoParam.BusinessParam param) {
List<DictData> manufacturerList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_MANUFACTURER.getCode()).getData();
Map<String, String> manufacturerMap = manufacturerList.stream().collect(Collectors.toMap(DictData::getId, DictData::getName));
List<Dept> deptList = deptFeignClient.getAllDept().getData();
Map<String, String> deptMap = deptList.stream().collect(Collectors.toMap(Dept::getId, Dept::getName));
List<DeviceRunEvaluateVO.Detail> info = new ArrayList<>();
//获取终端台账类信息
List<GeneralDeviceDTO> deviceInfo = deviceService.getDeviceInfo(param, ObjectUtil.isNull(param.getLineRunFlag()) ? null : Arrays.asList(param.getLineRunFlag()), Arrays.asList(1));
if (CollUtil.isNotEmpty(deviceInfo)) {
List<String> deviceIds = deviceInfo.stream()
.flatMap(x -> x.getDeviceIndexes().stream()).collect(Collectors.toList())
.stream()
.distinct()
.collect(Collectors.toList());
List<String> lineIds = deviceInfo.stream()
.flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList())
.stream()
.distinct()
.collect(Collectors.toList());
//获取所有监测点信息信息
List<DevDetailVO> lineDeviceByDevIds = lineMapper.getLineDeviceByDevIds(param.getPowerFlag(), lineIds, deviceIds);
RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam();
rStatLimitQueryParam.setIds(lineIds);
rStatLimitQueryParam.setDate(param.getSearchBeginTime());
rStatLimitQueryParam.setEndDate(param.getSearchEndTime());
OnlineRateParam onlineRateParam = new OnlineRateParam();
onlineRateParam.setIds(deviceIds);
onlineRateParam.setStartTime(param.getSearchBeginTime());
onlineRateParam.setEndTime(param.getSearchEndTime());
DeviceRunEvaluateVO.Detail detail;
//完整率
List<RStatIntegrityVO> integrityList = integrityDMapper.getLineIntegrityRateInfo(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
//超标率
List<RStatLimitRateDPO> limitRatePOList = rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData();
//获取所有终端在线率
List<RStatOnlinerateVO> onlineRateByDev = onLineRateMapper.getOnlineRateByDevIds(onlineRateParam);
for (GeneralDeviceDTO dto : deviceInfo) {
detail = new DeviceRunEvaluateVO.Detail();
detail.setName(dto.getName());
detail.setCount(dto.getDeviceIndexes().size());
detail.setOnline(onLineRate(onlineRateByDev, dto.getDeviceIndexes()));
detail.setIntegrity(integrity(integrityList, dto.getLineIndexes()));
detail.setQualified(limitRate(limitRatePOList, dto.getLineIndexes()));
detail.setScore(ONINTEGRITY.multiply(detail.getIntegrity())
.add(ONLINERATE.multiply(detail.getOnline())
.add(LIMITRATE.multiply(detail.getQualified()))).stripTrailingZeros());
Map<String, List<DevDetailVO>> dev = lineDeviceByDevIds
.stream()
.filter(x -> dto.getDeviceIndexes().contains(x.getDevId()))
.collect(Collectors.groupingBy(DevDetailVO::getDevId));
List<DeviceRunEvaluateVO> deviceDetail = new ArrayList<>();
if (CollUtil.isNotEmpty(dev)) {
dev.forEach((key, value) -> {
List<String> ids = value.stream().map(DevDetailVO::getLineId).distinct().collect(Collectors.toList());
DeviceRunEvaluateVO evaluateVO = new DeviceRunEvaluateVO();
evaluateVO.setId(value.get(0).getDevId());
evaluateVO.setName(value.get(0).getDevName());
evaluateVO.setSubName(value.get(0).getSubName());
evaluateVO.setIp(value.get(0).getIp());
//部门
if (deptMap.containsKey(value.get(0).getCit())) {
evaluateVO.setCit(deptMap.get(value.get(0).getCit()));
}
//终端厂商
if (manufacturerMap.containsKey(value.get(0).getManufacturer())) {
evaluateVO.setManufacturer(manufacturerMap.get(value.get(0).getManufacturer()));
}
evaluateVO.setOnLineRate(onLineRate(onlineRateByDev, Arrays.asList(key)));
evaluateVO.setIntegrityRate(integrity(integrityList, ids));
evaluateVO.setPassRate(limitRate(limitRatePOList, ids));
evaluateVO.setEvaluate(ONINTEGRITY.multiply(evaluateVO.getIntegrityRate())
.add(ONLINERATE.multiply(evaluateVO.getOnLineRate())
.add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros());
deviceDetail.add(evaluateVO);
});
}
detail.setList(deviceDetail);
info.add(detail);
}
}
return info;
}
private BigDecimal integrity(List<RStatIntegrityVO> integrityList, List<String> lineIds) {
//监测完整率
List<RStatIntegrityVO> integrityDS = integrityList.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(integrityDS)) {
double realTime = integrityDS.stream().mapToDouble(RStatIntegrityVO::getRealTime).sum();
double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityVO::getDueTime).sum();
return NumberUtil.round(Math.min(realTime * 100 / dueTime, 100), 2);
} else {
return new BigDecimal(0);
}
}
private BigDecimal onLineRate(List<RStatOnlinerateVO> onlineRateByDev, List<String> devIds) {
//终端在线率
List<RStatOnlinerateVO> onlineRateDS = onlineRateByDev.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOfflineMin).sum();
return NumberUtil.round(Math.min(onlineTime * 100.0 / (onlineTime + offlineTime), 100), 2);
} else {
return new BigDecimal(0);
}
}
private BigDecimal limitRate(List<RStatLimitRateDPO> limitRatePOList, List<String> lineIds) {
//超标信息
List<RStatLimitRateDPO> limitRateDPOS = limitRatePOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(limitRateDPOS)) {
double overTime = limitRateDPOS.stream().mapToDouble(x -> (x.getUaberranceOvertime() +
x.getUharm2Overtime() + x.getUharm3Overtime() + x.getUharm4Overtime() + x.getUharm5Overtime() +
x.getUharm6Overtime() + x.getUharm7Overtime() + x.getUharm8Overtime() + x.getUharm9Overtime() +
x.getUharm10Overtime() + x.getUharm11Overtime() + x.getUharm12Overtime() + x.getUharm13Overtime() + x.getUharm14Overtime() +
x.getUharm15Overtime() + x.getUharm16Overtime() + x.getUharm17Overtime() + x.getUharm18Overtime() + x.getUharm19Overtime() +
x.getUharm20Overtime() + x.getUharm21Overtime() + x.getUharm22Overtime() + x.getUharm23Overtime() + x.getUharm24Overtime() +
x.getUharm25Overtime())).sum();
double allTime = limitRateDPOS.stream().mapToDouble(x -> x.getAllTime() * 25.0).sum();
if (allTime == 0) {
return new BigDecimal(0);
} else {
return NumberUtil.round(Math.min((1 - (overTime * 1.0 / allTime)) * 100, 100), 2);
}
} else {
return new BigDecimal(0);
}
}
private Map<String, NewUserReportVO> getUserLedgerByObjIds(List<String> objIds) { private Map<String, NewUserReportVO> getUserLedgerByObjIds(List<String> objIds) {
List<NewUserReportVO> userReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData(); List<NewUserReportVO> userReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData();
return userReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity())); return userReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity()));

View File

@@ -244,7 +244,6 @@ public class GridDiagramServiceImpl implements GridDiagramService {
public GridDiagramVO getGridDiagramDev(GridDiagramParam param) { public GridDiagramVO getGridDiagramDev(GridDiagramParam param) {
//获取电压等级 //获取电压等级
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData(); List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData();
List<DictData> v = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.PANORAMIC_VOLTAGE.getCode()).getData(); List<DictData> v = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.PANORAMIC_VOLTAGE.getCode()).getData();
List<String> voltageIds; List<String> voltageIds;
//获取电压等级550 220 110 35 //获取电压等级550 220 110 35
@@ -264,7 +263,6 @@ public class GridDiagramServiceImpl implements GridDiagramService {
List<Dept> data = deptFeignClient.getDirectSonSelf(param.getOrgId()).getData(); List<Dept> data = deptFeignClient.getDirectSonSelf(param.getOrgId()).getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getOrgId()); deptGetLineParam.setDeptId(param.getOrgId());
deptGetLineParam.setLineRunFlag(0);
List<DeptGetChildrenMoreDTO> deptGetChildrenMoreDTOS = commTerminalService.deptGetLine(deptGetLineParam); List<DeptGetChildrenMoreDTO> deptGetChildrenMoreDTOS = commTerminalService.deptGetLine(deptGetLineParam);

View File

@@ -475,7 +475,7 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
vo.setTargetKey(targetKey); vo.setTargetKey(targetKey);
vo.setPhaseType(phaseKey); vo.setPhaseType(phaseKey);
if ((pqReasonableRangeDto.getInfluxdbTableName() + SEPARATOR + pqReasonableRangeDto.getIndexCode()).equals(targetKey)) { if ((DataCleanEnum.DataI.getCode() + SEPARATOR + DataCleanEnum.RmsI.getCode() ).equals(targetKey)) {
vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + "*CT1" + unit); vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + "*CT1" + unit);
} else { } else {
vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + unit); vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + unit);
@@ -493,6 +493,8 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
break; break;
case "CP95": case "CP95":
vo.setCp95(ites.getVal()); vo.setCp95(ites.getVal());
case "Feature_Amplitude":
vo.setFeatureAmplitude(ites.getVal());
break; break;
} }
}); });
@@ -518,7 +520,7 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
queryWrapper.select("line_id as lineId,sum(freq) as freq,sum(freq_Dev) as freqDev,sum(v_Rms) as vRms,sum(v_Pos) as vPos,sum(v_Neg) as vNeg," + queryWrapper.select("line_id as lineId,sum(freq) as freq,sum(freq_Dev) as freqDev,sum(v_Rms) as vRms,sum(v_Pos) as vPos,sum(v_Neg) as vNeg," +
"sum(v_Zero) as vZero,sum(v_Unbalance) as vUnbalance,sum(rms_Lvr) as rmsLvr,sum(vu_Dev) as vuDev,sum(vl_Dev) as vlDev," + "sum(v_Zero) as vZero,sum(v_Unbalance) as vUnbalance,sum(rms_Lvr) as rmsLvr,sum(vu_Dev) as vuDev,sum(vl_Dev) as vlDev," +
"sum(v_Thd) as vThd,sum(v) as v,sum(i_Rms) as iRms,sum(plt) as plt,sum(v_Inharm) as vInharm,sum(v_Harm) as vHarm,sum(pf) as pf," + "sum(v_Thd) as vThd,sum(v) as v,sum(i_Rms) as iRms,sum(plt) as plt,sum(v_Inharm) as vInharm,sum(v_Harm) as vHarm,sum(pf) as pf," +
"sum(v_Phasic) as vPhasic,sum(v1_Phasic) as v1Phasic,sum(fluc) as fluc,sum(pst) as pst,sum(state) as state") "sum(v_Phasic) as vPhasic,sum(v1_Phasic) as v1Phasic,sum(fluc) as fluc,sum(pst) as pst,sum(dip) as dip,sum(rise) as rise,sum(state) as state")
.lambda().between(PqDataVerifyBak::getTimeId, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime()))) .lambda().between(PqDataVerifyBak::getTimeId, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime())))
.in(PqDataVerifyBak::getLineId, monitorIds) .in(PqDataVerifyBak::getLineId, monitorIds)
.eq(PqDataVerifyBak::getState, 1) .eq(PqDataVerifyBak::getState, 1)
@@ -652,6 +654,14 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
ids = dataVerifyList.stream().filter(it -> it.getPf() > 0).map(PqDataVerifyBak::getLineId).collect(Collectors.toSet()); ids = dataVerifyList.stream().filter(it -> it.getPf() > 0).map(PqDataVerifyBak::getLineId).collect(Collectors.toSet());
assembleEntity(ids, dto, result); assembleEntity(ids, dto, result);
break; break;
case Param.Voltage_Dip:
ids = dataVerifyList.stream().filter(it -> it.getDip() > 0).map(PqDataVerifyBak::getLineId).collect(Collectors.toSet());
assembleEntity(ids, dto, result);
break;
case Param.Voltage_Rise:
ids = dataVerifyList.stream().filter(it -> it.getRise() > 0).map(PqDataVerifyBak::getLineId).collect(Collectors.toSet());
assembleEntity(ids, dto, result);
break;
default: default:
log.error("未匹配到异常数据指标"); log.error("未匹配到异常数据指标");
break; break;

View File

@@ -1,30 +1,41 @@
package com.njcn.device.pq.service.impl; package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.device.common.service.GeneralDeviceService;
import com.njcn.device.line.mapper.LineDetailMapper; import com.njcn.device.line.mapper.LineDetailMapper;
import com.njcn.device.line.mapper.LineMapper; import com.njcn.device.line.mapper.LineMapper;
import com.njcn.device.line.service.LineService;
import com.njcn.device.pq.enums.RunFlagEnum;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper; import com.njcn.device.pq.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.dto.LineDataQualityDTO; import com.njcn.device.pq.pojo.dto.LineDataQualityDTO;
import com.njcn.device.pq.pojo.dto.MonitorIntegrityDTO; import com.njcn.device.pq.pojo.dto.MonitorIntegrityDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.LineBaseQueryParam; import com.njcn.device.pq.pojo.param.LineBaseQueryParam;
import com.njcn.device.pq.pojo.param.LineDataQualityParam; import com.njcn.device.pq.pojo.param.LineDataQualityParam;
import com.njcn.device.pq.pojo.po.Line; import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.RStatIntegrityD; import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD; import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.LineDetailDataVO; import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
import com.njcn.device.pq.pojo.vo.LineDetailVO;
import com.njcn.device.pq.pojo.vo.RStatIntegrityVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import com.njcn.device.pq.service.IRStatIntegrityDService; import com.njcn.device.pq.service.IRStatIntegrityDService;
import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper; import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
@@ -43,11 +54,11 @@ import java.util.stream.Collectors;
public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMapper, RStatIntegrityD> implements IRStatIntegrityDService { public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMapper, RStatIntegrityD> implements IRStatIntegrityDService {
private final RStatOnlinerateDMapper onlineRateMapper; private final RStatOnlinerateDMapper onlineRateMapper;
private final RStatIntegrityDMapper rStatIntegrityDMapper; private final RStatIntegrityDMapper rStatIntegrityDMapper;
private final LineMapper lineMapper; private final LineMapper lineMapper;
private final LineDetailMapper lineDetailMapper; private final LineDetailMapper lineDetailMapper;
private final GeneralDeviceService deviceService;
private final LineService lineService;
@Override @Override
public Float getTotalIntegrityByLineIds(LineBaseQueryParam param) { public Float getTotalIntegrityByLineIds(LineBaseQueryParam param) {
@@ -124,4 +135,79 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
this.saveOrUpdateBatchByMultiId(collect1,200); this.saveOrUpdateBatchByMultiId(collect1,200);
return true; return true;
} }
@Override
public DeviceOnlineRate getData(DeviceInfoParam.BusinessParam param) {
DeviceOnlineRate rate = new DeviceOnlineRate();
//获取终端台账类信息
List<GeneralDeviceDTO> deviceInfo = deviceService.getDeviceInfo(param, null, Collections.singletonList(1));
if (CollUtil.isNotEmpty(deviceInfo)) {
List<String> lineIds = deviceInfo.stream()
.flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList())
.stream()
.distinct()
.collect(Collectors.toList());
rate.setTotalNum(lineIds.size());
//获取所有监测点的数据完整性
List<RStatIntegrityVO> lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds,param.getSearchBeginTime(),param.getSearchEndTime());
//获取所有监测点信息信息
List<LineDetailVO.Detail> LineInfoByIds = lineService.getLineDetailByIds(lineIds);
rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo)?calculateIntegrityRate(lineIntegrityRateInfo,90):lineIds.size());
rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,lineIds).toString());
List<DeviceOnlineRate.CitDetail> citDetailList=new ArrayList<>();
DeviceOnlineRate.CitDetail citDetail;
DeviceOnlineRate.LineDetail detail;
for (GeneralDeviceDTO dto : deviceInfo) {
//获取部门终端集合
List<RStatIntegrityVO> citDevOnRate = lineIntegrityRateInfo.stream().filter(x -> dto.getLineIndexes().contains(x.getLineIndex())).collect(Collectors.toList());
Map<String, Double> onlineRateByDevMap = citDevOnRate.stream()
.collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate));
citDetail=new DeviceOnlineRate.CitDetail();
citDetail.setCitName(dto.getName());
citDetail.setCitTotalNum(dto.getLineIndexes().size());
citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate)?calculateIntegrityRate(lineIntegrityRateInfo,90):dto.getLineIndexes().size());
citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,dto.getLineIndexes()).toString());
List<DeviceOnlineRate.LineDetail> detailList = new ArrayList<>();
List<LineDetailVO.Detail> lineDetail = LineInfoByIds.stream().filter(x -> dto.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList());
for (LineDetailVO.Detail line : lineDetail) {
detail = new DeviceOnlineRate.LineDetail();
detail.setCit(line.getDeptName());
detail.setCompany(line.getGdName());
detail.setSubStation(line.getSubName());
detail.setDeviceId(line.getDevId());
detail.setDeviceName(line.getDevName());
detail.setManufacturer(line.getManufacturer());
detail.setIp(line.getIp());
detail.setRunFlag(RunFlagEnum.getRunFlagRemarkByStatus(Integer.valueOf(line.getLineRunType())));
detail.setLineId(line.getLineId());
detail.setLineName(line.getLineName());
detail.setLatestTime(line.getTimeID());
detail.setIntegrity(onlineRateByDevMap.getOrDefault(line.getLineId(), 0.0));
detailList.add(detail);
}
citDetail.setDetailList(detailList);
citDetailList.add(citDetail);
}
rate.setCitDetailList(citDetailList);
}
return rate;
}
private Double calculateIntegrityRate(List<RStatIntegrityVO> lineIntegrityRateInfo ,List<String> deviceIds){
List<RStatIntegrityVO> list = lineIntegrityRateInfo.stream().filter(x -> deviceIds.contains(x.getLineIndex())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(list)){
BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getDueTime).sum());
BigDecimal offlineMin =BigDecimal.valueOf( list.stream().mapToLong(RStatIntegrityVO::getRealTime).sum());
BigDecimal sumMin= onlineMin.add(offlineMin);
return sumMin.doubleValue();
}
return 0.0;
}
private Integer calculateIntegrityRate(List<RStatIntegrityVO> onlineRateByDev,Integer limit){
return (int) onlineRateByDev.stream().filter(x -> x.getIntegrityRate() < limit).count();
}
} }

View File

@@ -133,11 +133,6 @@ public class RunManageServiceImpl implements RunManageService {
DeviceInfoParam deviceInfoParam = new DeviceInfoParam(); DeviceInfoParam deviceInfoParam = new DeviceInfoParam();
BeanUtil.copyProperties(runManageParam, deviceInfoParam); BeanUtil.copyProperties(runManageParam, deviceInfoParam);
deviceInfoParam.setServerName("pqs-common"); deviceInfoParam.setServerName("pqs-common");
if(CollUtil.isNotEmpty(runManageParam.getRunFlag())){
if(runManageParam.getRunFlag().get(0)==0){
deviceInfoParam.setLineRunFlag(0);
}
}
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(deviceInfoParam, runManageParam.getRunFlag(), Stream.of(1).collect(Collectors.toList())); List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(deviceInfoParam, runManageParam.getRunFlag(), Stream.of(1).collect(Collectors.toList()));
if (CollectionUtils.isEmpty(generalDeviceDTOList)) { if (CollectionUtils.isEmpty(generalDeviceDTOList)) {
throw new BusinessException("当前部门没有装置台账"); throw new BusinessException("当前部门没有装置台账");

View File

@@ -0,0 +1,31 @@
package com.njcn.device.common.mapper.onlinerate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 在线率日表 Mapper 接口
* </p>
*
* @author hongawen
* @since 2023-03-28
*/
public interface OnLineRateMapper extends BaseMapper<RStatOnlinerateD> {
/***
* 获取设备在线率
* @author wr
* @date 2023-04-03 10:10
* @param param
* @return List<OnlineRate>
*/
List<RStatOnlinerateVO> getOnlineRateByDevIds(@Param("param") OnlineRateParam param);
}

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.device.common.mapper.onlinerate.OnLineRateMapper">
<select id="getOnlineRateByDevIds" resultType="com.njcn.device.pq.pojo.vo.RStatOnlinerateVO">
select
dev_index,
sum(online_min) as onlineMin,
sum(offline_min) as offlineMin,
ROUND( sum(online_min)*1.0/(sum(online_min) + sum(offline_min))*100,2) as onlineRate
from r_stat_onlinerate_d
<where>
<if test="param!=null and param.ids != null and param.ids.size > 0">
AND dev_index IN
<foreach collection='param.ids' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
<if test=" param.startTime != null and param.startTime !=''">
AND time_id >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
AND time_id &lt;= #{param.endTime}
</if>
</where>
group by dev_index ;
</select>
<select id="getTotalOnlineRates" resultType="java.lang.Float">
select
if( sum( online_min )/( sum( online_min ) + sum( offline_min ))* 100 > 100,
100,
IFNULL( ROUND( sum( online_min )/( sum( online_min ) + sum( offline_min ))* 100, 2 ), 0 ))
as online_rate
from r_stat_onlinerate_d
<where>
<if test="param!=null and param.ids != null and param.ids.size > 0">
AND dev_index IN
<foreach collection='param.ids' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
<if test=" param.startTime != null and param.startTime !=''">
AND time_id >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
AND time_id &lt;= #{param.endTime}
</if>
</where>
</select>
</mapper>

View File

@@ -13,6 +13,7 @@ import com.njcn.device.common.mapper.TopMsgMapper;
import com.njcn.device.device.mapper.DeviceMapper; import com.njcn.device.device.mapper.DeviceMapper;
import com.njcn.device.line.mapper.LineMapper; import com.njcn.device.line.mapper.LineMapper;
import com.njcn.device.line.service.DeptLineService; import com.njcn.device.line.service.DeptLineService;
import com.njcn.device.pq.enums.JbPowerFlagEnum;
import com.njcn.device.pq.enums.LineBaseEnum; import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.enums.PowerFlagEnum; import com.njcn.device.pq.enums.PowerFlagEnum;
import com.njcn.device.pq.pojo.bo.DeviceType; import com.njcn.device.pq.pojo.bo.DeviceType;
@@ -34,6 +35,7 @@ import com.njcn.system.pojo.enums.StatisticsEnum;
import com.njcn.system.pojo.po.DictData; import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.DeptFeignClient; import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.dto.DeptDTO; import com.njcn.user.pojo.dto.DeptDTO;
import com.njcn.user.pojo.po.Dept;
import com.njcn.web.utils.WebUtil; import com.njcn.web.utils.WebUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -319,7 +321,7 @@ public class GeneralDeviceService {
} else { } else {
deviceType.setRunFlag(runFlag); deviceType.setRunFlag(runFlag);
} }
if(ObjectUtil.isNotNull(deviceInfoParam.getComFlagStatus())){ if (ObjectUtil.isNotNull(deviceInfoParam.getComFlagStatus())) {
deviceType.setComFlag(Arrays.asList(deviceInfoParam.getComFlagStatus())); deviceType.setComFlag(Arrays.asList(deviceInfoParam.getComFlagStatus()));
} }
filterDataType(deviceType, deviceInfoParam.getServerName()); filterDataType(deviceType, deviceInfoParam.getServerName());
@@ -374,6 +376,8 @@ public class GeneralDeviceService {
return filterDataByManufacturer(deviceInfos, deviceInfoParam.getManufacturer()); return filterDataByManufacturer(deviceInfos, deviceInfoParam.getManufacturer());
case POWER_FLAG: case POWER_FLAG:
return filterDataByPowerFlag(deviceInfos, deviceInfoParam.getManufacturer()); return filterDataByPowerFlag(deviceInfos, deviceInfoParam.getManufacturer());
case JB_POWER_FLAG:
return filterDataByJbPowerFlag(deviceInfos, deviceInfoParam.getManufacturer());
default: default:
return deviceInfos; return deviceInfos;
} }
@@ -408,7 +412,7 @@ public class GeneralDeviceService {
return generalDeviceDTO; return generalDeviceDTO;
} }
// 提取该部门及其子部门所有监测点id // 提取该部门及其子部门所有监测点id
List<String> lineIds = deptLines.stream().map(DeptLine::getLineId).collect(Collectors.toList()); List<String> lineIds = deptLines.stream().map(DeptLine::getLineId).distinct().collect(Collectors.toList());
// 获取line详细数据 根据监测点id获取所有监测点 联查 pq_line、pq_line_detail // 获取line详细数据 根据监测点id获取所有监测点 联查 pq_line、pq_line_detail
List<Line> lines = terminalBaseService.getLineByCondition(lineIds, deviceInfoParam); List<Line> lines = terminalBaseService.getLineByCondition(lineIds, deviceInfoParam);
// 返回空数据 // 返回空数据
@@ -417,17 +421,17 @@ public class GeneralDeviceService {
} }
//1.筛选出母线id理论上监测点的pids中第六个id为母线id 联查: pq_line t1 ,pq_voltage t2 //1.筛选出母线id理论上监测点的pids中第六个id为母线id 联查: pq_line t1 ,pq_voltage t2
List<String> voltageIds=lines.stream().map(Line::getPid).collect(Collectors.toList()); List<String> voltageIds = lines.stream().map(Line::getPid).distinct().collect(Collectors.toList());
//再根据电压等级筛选合法母线信息 //再根据电压等级筛选合法母线信息
List<Line> voltages = terminalBaseService.getVoltageByCondition(voltageIds, deviceInfoParam.getScale()); List<Line> voltages = terminalBaseService.getVoltageByCondition(voltageIds, deviceInfoParam.getScale());
//2.筛选出终端id理论上监测点的pids中第五个id为终端id //2.筛选出终端id理论上监测点的pids中第五个id为终端id
List<String> devIds=voltages.stream().map(Line::getPid).collect(Collectors.toList()); List<String> devIds = voltages.stream().map(Line::getPid).distinct().collect(Collectors.toList());
// 再根据终端条件筛选合法终端信息 联查pq_line t1,pq_device t2 // 再根据终端条件筛选合法终端信息 联查pq_line t1,pq_device t2
List<Line> devices = terminalBaseService.getDeviceByCondition(devIds, deviceType, deviceInfoParam.getManufacturer()); List<Line> devices = terminalBaseService.getDeviceByCondition(devIds, deviceType, deviceInfoParam.getManufacturer());
//3.筛选出变电站id理论上监测点的pids中第四个id为变电站id 联查: pq_line t1 ,pq_substation t2 //3.筛选出变电站id理论上监测点的pids中第四个id为变电站id 联查: pq_line t1 ,pq_substation t2
List<String> subIds=devices.stream().map(Line::getPid).collect(Collectors.toList()); List<String> subIds = devices.stream().map(Line::getPid).distinct().collect(Collectors.toList());
List<Line> sub = terminalBaseService.getSubByCondition(subIds, new ArrayList<>()); List<Line> sub = terminalBaseService.getSubByCondition(subIds, new ArrayList<>());
//筛选最终的数据 //筛选最终的数据
@@ -452,7 +456,7 @@ public class GeneralDeviceService {
String[] idsArray = line.getPids().split(","); String[] idsArray = line.getPids().split(",");
//监测点同时满足条件筛选后的终端、母线信息,才是最终的结果 //监测点同时满足条件筛选后的终端、母线信息,才是最终的结果
if (devIds.contains(idsArray[LineBaseEnum.DEVICE_LEVEL.getCode()]) && if (devIds.contains(idsArray[LineBaseEnum.DEVICE_LEVEL.getCode()]) &&
volIds.contains(idsArray[LineBaseEnum.SUB_V_LEVEL.getCode()])&& volIds.contains(idsArray[LineBaseEnum.SUB_V_LEVEL.getCode()]) &&
subIds.contains(idsArray[LineBaseEnum.SUB_LEVEL.getCode()]) subIds.contains(idsArray[LineBaseEnum.SUB_LEVEL.getCode()])
) { ) {
gdIndexes.add(idsArray[LineBaseEnum.GD_LEVEL.getCode()]); gdIndexes.add(idsArray[LineBaseEnum.GD_LEVEL.getCode()]);
@@ -556,8 +560,8 @@ public class GeneralDeviceService {
private List<GeneralDeviceDTO> filterDataByPowerFlag(List<GeneralDeviceDTO> deviceInfos, List<SimpleDTO> manufacturer) { private List<GeneralDeviceDTO> filterDataByPowerFlag(List<GeneralDeviceDTO> deviceInfos, List<SimpleDTO> manufacturer) {
List<GeneralDeviceDTO> generalDeviceDTOS = new ArrayList<>(); List<GeneralDeviceDTO> generalDeviceDTOS = new ArrayList<>();
List<String> deviceIds = deviceInfos.stream().flatMap(x->x.getLineIndexes().stream()).collect(Collectors.toList()); List<String> deviceIds = deviceInfos.stream().flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList());
List<String> lineIds = deviceInfos.stream().flatMap(x->x.getLineIndexes().stream()).collect(Collectors.toList()); List<String> lineIds = deviceInfos.stream().flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList());
//监测点为空,则返回空的分类数据 //监测点为空,则返回空的分类数据
if (CollectionUtil.isEmpty(lineIds)) { if (CollectionUtil.isEmpty(lineIds)) {
return assembleCommonData(manufacturer); return assembleCommonData(manufacturer);
@@ -566,15 +570,36 @@ public class GeneralDeviceService {
List<Line> lines = terminalBaseService.getLineById(lineIds); List<Line> lines = terminalBaseService.getLineById(lineIds);
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
List<String> powerFlagIds = terminalBaseService.getDeviceIdByPowerFlag(deviceIds, i); List<String> powerFlagIds = terminalBaseService.getDeviceIdByPowerFlag(deviceIds, i);
dto=new SimpleDTO(); dto = new SimpleDTO();
PowerFlagEnum enumByCode = PowerFlagEnum.getPowerFlagEnumByCode(i); PowerFlagEnum enumByCode = PowerFlagEnum.getPowerFlagEnumByCode(i);
dto.setId(enumByCode.getCode().toString()); dto.setId(enumByCode.getCode().toString());
dto.setName(enumByCode.getMessage()); dto.setName(enumByCode.getMessage());
generalDeviceDTOS.add(assembleDataByLine(dto, lines, powerFlagIds, LineBaseEnum.LINE_LEVEL.getCode())); generalDeviceDTOS.add(assembleDataByLine(dto, lines, powerFlagIds, LineBaseEnum.LINE_LEVEL.getCode()));
} }
return generalDeviceDTOS; return generalDeviceDTOS;
} }
private List<GeneralDeviceDTO> filterDataByJbPowerFlag(List<GeneralDeviceDTO> deviceInfos, List<SimpleDTO> manufacturer) {
List<GeneralDeviceDTO> generalDeviceDTOS = new ArrayList<>();
List<String> deviceIds = deviceInfos.stream().flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList());
List<String> lineIds = deviceInfos.stream().flatMap(x -> x.getLineIndexes().stream()).collect(Collectors.toList());
//监测点为空,则返回空的分类数据
if (CollectionUtil.isEmpty(lineIds)) {
return assembleCommonData(manufacturer);
}
SimpleDTO dto;
List<Line> lines = terminalBaseService.getLineById(lineIds);
for (int i = 0; i < 4; i++) {
List<String> powerFlagIds = terminalBaseService.getDeviceIdByJbPowerFlag(deviceIds, i);
dto = new SimpleDTO();
JbPowerFlagEnum enumByCode = JbPowerFlagEnum.getPowerFlagEnumByCode(i);
dto.setId(enumByCode.getCode().toString());
dto.setName(enumByCode.getMessage());
generalDeviceDTOS.add(assembleDataByLine(dto, lines, powerFlagIds, LineBaseEnum.LINE_LEVEL.getCode()));
}
return generalDeviceDTOS;
}
/** /**
* 当该部门不存在监测点时,返回空的分类数据 * 当该部门不存在监测点时,返回空的分类数据
* *
@@ -724,7 +749,7 @@ public class GeneralDeviceService {
/*实际运行*/ /*实际运行*/
QueryWrapper<Device> query = new QueryWrapper<>(); QueryWrapper<Device> query = new QueryWrapper<>();
query.in("Id", DeviceIds). query.in("Id", DeviceIds).
eq("Run_Flag", 0).eq("Com_Flag",1); eq("Run_Flag", 0).eq("Com_Flag", 1);
Integer runDeviceCount = deviceMapper.selectCount(query); Integer runDeviceCount = deviceMapper.selectCount(query);
BigDecimal rate = BigDecimal.valueOf(runDeviceCount).divide(BigDecimal.valueOf(deviceCount), 4, BigDecimal.ROUND_HALF_UP); BigDecimal rate = BigDecimal.valueOf(runDeviceCount).divide(BigDecimal.valueOf(deviceCount), 4, BigDecimal.ROUND_HALF_UP);
deptDeviceDetailVO.setDeviceCount(deviceCount); deptDeviceDetailVO.setDeviceCount(deviceCount);
@@ -756,17 +781,17 @@ public class GeneralDeviceService {
/** /**
* @param deptId 部门id * @param deptId 部门id
* @param runFlag 设备运行状态 0投运 1.热备用 2.停运 * @param runFlag 设备运行状态 0投运 1.热备用 2.停运
* @param dataType 系统 0暂态系统1稳态系统2两个系统 * @param dataType 系统 0暂态系统1稳态系统2两个系统
* @author cdf * @author cdf
* @date 2023/7/20 * @date 2023/7/20
*/ */
public List<String> deptGetRunLine(String deptId,List<Integer> runFlag,List<Integer> dataType) { public List<String> deptGetRunLine(String deptId, List<Integer> runFlag, List<Integer> dataType) {
List<DeptDTO> deptDTOList = deptFeignClient.getDeptDescendantIndexes(deptId, Stream.of(0, 1).collect(Collectors.toList())).getData(); List<DeptDTO> deptDTOList = deptFeignClient.getDeptDescendantIndexes(deptId, Stream.of(0, 1).collect(Collectors.toList())).getData();
if (CollUtil.isNotEmpty(deptDTOList)) { if (CollUtil.isNotEmpty(deptDTOList)) {
List<String> deptIds = deptDTOList.stream().map(DeptDTO::getId).distinct().collect(Collectors.toList()); List<String> deptIds = deptDTOList.stream().map(DeptDTO::getId).distinct().collect(Collectors.toList());
return deptLineService.getLineByDeptIds(deptIds,null,runFlag,dataType,null); return deptLineService.getLineByDeptIds(deptIds, null, runFlag, dataType, null);
} }
return new ArrayList<>(); return new ArrayList<>();
} }
@@ -778,12 +803,12 @@ public class GeneralDeviceService {
* @date 2023/7/20 * @date 2023/7/20
*/ */
public List<String> deptGetRunDev(String deptId) { public List<String> deptGetRunDev(String deptId) {
List<String> runLineIds = this.deptGetRunLine(deptId,Stream.of(0).collect(Collectors.toList()),Stream.of(0,2).collect(Collectors.toList())); List<String> runLineIds = this.deptGetRunLine(deptId, Stream.of(0).collect(Collectors.toList()), Stream.of(0, 2).collect(Collectors.toList()));
List<Line> lines = lineMapper.selectList(new LambdaQueryWrapper<Line>() List<Line> lines = lineMapper.selectList(new LambdaQueryWrapper<Line>()
.select(Line::getPids) .select(Line::getPids)
.in(Line::getId,runLineIds) .in(Line::getId, runLineIds)
); );
if(CollUtil.isNotEmpty(lines)){ if (CollUtil.isNotEmpty(lines)) {
return lines.stream().map(line -> { return lines.stream().map(line -> {
String[] idsArray = line.getPids().split(","); String[] idsArray = line.getPids().split(",");
return idsArray[4]; return idsArray[4];
@@ -796,12 +821,25 @@ public class GeneralDeviceService {
List<DictData> gradeType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_GRADE.getCode()).getData(); List<DictData> gradeType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_GRADE.getCode()).getData();
Map<String, Integer> gradeMap = gradeType.stream().collect(Collectors.toMap(DictData::getId, DictData::getAlgoDescribe)); Map<String, Integer> gradeMap = gradeType.stream().collect(Collectors.toMap(DictData::getId, DictData::getAlgoDescribe));
List<DictData> manufacturerList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_MANUFACTURER.getCode()).getData();
Map<String, String> manufacturerMap = manufacturerList.stream().collect(Collectors.toMap(DictData::getId, DictData::getName));
List<Dept> deptList = deptFeignClient.getAllDept().getData();
Map<String, String> deptMap = deptList.stream().collect(Collectors.toMap(Dept::getId, Dept::getName));
List<DevDetail> devDetails = deviceMapper.selectDevByIds(devIds); List<DevDetail> devDetails = deviceMapper.selectDevByIds(devIds);
for (DevDetail devDetail : devDetails) { for (DevDetail devDetail : devDetails) {
//终端等级 //终端等级
if(gradeMap.containsKey(devDetail.getLineGrade())){ if (gradeMap.containsKey(devDetail.getLineGrade())) {
devDetail.setLineGrade(String.valueOf(gradeMap.get(devDetail.getLineGrade()))); devDetail.setLineGrade(String.valueOf(gradeMap.get(devDetail.getLineGrade())));
} }
//部门
if (deptMap.containsKey(devDetail.getDeptName())) {
devDetail.setDeptName(deptMap.get(devDetail.getDeptName()));
}
//终端厂商
if (manufacturerMap.containsKey(devDetail.getManufacturer())) {
devDetail.setManufacturer(manufacturerMap.get(devDetail.getManufacturer()));
}
} }
return devDetails; return devDetails;
} }

View File

@@ -188,6 +188,8 @@ public interface TerminalBaseService {
*/ */
List<String> getDeviceIdByPowerFlag(List<String> lineIds, Integer manufacturer); List<String> getDeviceIdByPowerFlag(List<String> lineIds, Integer manufacturer);
List<String> getDeviceIdByJbPowerFlag(List<String> lineIds, Integer powerFlag);
/** /**
* 根据监测点集合查询基础信息 * 根据监测点集合查询基础信息

View File

@@ -1666,6 +1666,11 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
return this.baseMapper.getDeviceIdByPowerFlag(lineIds, manufacturer); return this.baseMapper.getDeviceIdByPowerFlag(lineIds, manufacturer);
} }
@Override
public List<String> getDeviceIdByJbPowerFlag(List<String> lineIds, Integer powerFlag) {
return this.baseMapper.getDeviceIdByJbPowerFlag(lineIds, powerFlag);
}
@Override @Override
public List<BaseLineInfo> getBaseLineInfo(List<String> lineIndex) { public List<BaseLineInfo> getBaseLineInfo(List<String> lineIndex) {
return this.baseMapper.getBaseLineInfo(lineIndex); return this.baseMapper.getBaseLineInfo(lineIndex);

View File

@@ -0,0 +1,58 @@
package com.njcn.device.device.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.device.service.OnLineRateService;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Description: 终端在线率
* @Author: wr
* @Date: 2025/11/26 10:28
*/
@Slf4j
@Api(tags = "终端在线率")
@RestController
@RequestMapping("/onLineRate")
@RequiredArgsConstructor
public class OnLineRateController extends BaseController {
private final OnLineRateService onLineRateService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/deviceOnlineRateInfo")
@ApiOperation("终端在线率列表(冀北)")
public HttpResult<DeviceOnlineRate> deviceOnlineRateInfo(@RequestBody DeviceInfoParam.BusinessParam deviceInfoParam) {
String methodDescribe = getMethodDescribe("deviceOnlineRateInfo");
DeviceOnlineRate rate = onLineRateService.deviceOnlineRateInfo(deviceInfoParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getOnlineRateByDevIds")
@ApiOperation("通用终端在线率(冀北)")
public HttpResult<List<RStatOnlinerateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam deviceInfoParam) {
String methodDescribe = getMethodDescribe("deviceOnlineRateInfo");
List<RStatOnlinerateVO> rate = onLineRateService.getOnlineRateByDevIds(deviceInfoParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe);
}
}

View File

@@ -229,6 +229,7 @@
<select id="selectDevByIds" resultType="com.njcn.device.pq.pojo.vo.DevDetail"> <select id="selectDevByIds" resultType="com.njcn.device.pq.pojo.vo.DevDetail">
SELECT DISTINCT SELECT DISTINCT
device.id as devIndex, device.id as devIndex,
pd.Id as deptName,
gd.NAME as gdName, gd.NAME as gdName,
substation.NAME as bdzName, substation.NAME as bdzName,
device.NAME as devName, device.NAME as devName,
@@ -236,9 +237,12 @@
deviceDetail.Update_Time AS timeID, deviceDetail.Update_Time AS timeID,
deviceDetail.ip as ip, deviceDetail.ip as ip,
deviceDetail.Com_Flag as comFlag, deviceDetail.Com_Flag as comFlag,
deviceDetail.run_Flag as runFlag,
deviceDetail.Manufacturer as manufacturer,
deviceDetail.Next_Time_Check as nextTimeCheck deviceDetail.Next_Time_Check as nextTimeCheck
FROM FROM
pq_line line, pq_line line,
pq_dept_line pd,
pq_line voltage, pq_line voltage,
pq_line device, pq_line device,
pq_line substation, pq_line substation,
@@ -253,6 +257,7 @@
</foreach> </foreach>
</if> </if>
AND line.pid = voltage.id AND line.pid = voltage.id
AND line.id = pd.Line_Id
AND voltage.pid = device.id AND voltage.pid = device.id
AND device.pid = substation.id AND device.pid = substation.id
AND substation.pid = gd.id AND substation.pid = gd.id

View File

@@ -0,0 +1,35 @@
package com.njcn.device.device.service;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import java.util.List;
/**
* @Description: 终端在线率
* @Author: wr
* @Date: 2025/11/26 10:27
*/
public interface OnLineRateService {
/**
* 终端详情列表
*
* @param deviceInfoParam
* @return
*/
DeviceOnlineRate deviceOnlineRateInfo(DeviceInfoParam.BusinessParam deviceInfoParam);
/**
* 终端详情列表
*
* @param
* @return
*/
List<RStatOnlinerateVO> getOnlineRateByDevIds(OnlineRateParam onlineRateParam);
}

View File

@@ -0,0 +1,117 @@
package com.njcn.device.device.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.common.service.GeneralDeviceService;
import com.njcn.device.device.service.OnLineRateService;
import com.njcn.device.common.mapper.onlinerate.OnLineRateMapper;
import com.njcn.device.pq.enums.RunFlagEnum;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.DevDetail;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wr
* @description
* @date 2025/11/26 10:26
*/
@Service
@RequiredArgsConstructor
public class OnLineRateServiceImpl extends ServiceImpl<OnLineRateMapper, RStatOnlinerateD> implements OnLineRateService {
private final GeneralDeviceService deviceService;
@Override
public DeviceOnlineRate deviceOnlineRateInfo(DeviceInfoParam.BusinessParam param) {
DeviceOnlineRate rate = new DeviceOnlineRate();
//获取终端台账类信息
List<GeneralDeviceDTO> deviceInfo = deviceService.getDeviceInfo(param, ObjectUtil.isNull(param.getLineRunFlag()) ? null : Arrays.asList(param.getLineRunFlag()), Arrays.asList(1));
if (CollUtil.isNotEmpty(deviceInfo)) {
List<String> deviceIds = deviceInfo.stream()
.flatMap(x -> x.getDeviceIndexes().stream()).collect(Collectors.toList())
.stream()
.distinct()
.collect(Collectors.toList());
rate.setTotalNum(deviceIds.size());
OnlineRateParam onlineRateParam = new OnlineRateParam();
onlineRateParam.setIds(deviceIds);
onlineRateParam.setStartTime(param.getSearchBeginTime());
onlineRateParam.setEndTime(param.getSearchEndTime());
//获取所有终端在线率
List<RStatOnlinerateVO> onlineRateByDev = this.baseMapper.getOnlineRateByDevIds(onlineRateParam);
//获取所有终端信息
List<DevDetail> devInfoByIds = deviceService.getDevInfoByIds(deviceIds);
rate.setBelowNum(CollUtil.isNotEmpty(onlineRateByDev) ? calculateOnLineRate(onlineRateByDev, 90) : deviceIds.size());
rate.setTotalOnlineRate(calculateOnLineRate(onlineRateByDev, deviceIds));
List<DeviceOnlineRate.CitDetail> citDetailList = new ArrayList<>();
DeviceOnlineRate.CitDetail citDetail;
DeviceOnlineRate.Detail detail;
for (GeneralDeviceDTO dto : deviceInfo) {
//获取部门终端集合
List<RStatOnlinerateVO> citDevOnRate = onlineRateByDev.stream().filter(x -> dto.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList());
Map<String, Float> onlineRateByDevMap = citDevOnRate.stream()
.collect(Collectors.toMap(RStatOnlinerateVO::getDevIndex, RStatOnlinerateVO::getOnlineRate));
citDetail = new DeviceOnlineRate.CitDetail();
citDetail.setCitName(dto.getName());
citDetail.setCitTotalNum(dto.getDeviceIndexes().size());
citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate) ? calculateOnLineRate(onlineRateByDev, 90) : dto.getDeviceIndexes().size());
citDetail.setCitTotalOnlineRate(calculateOnLineRate(onlineRateByDev, dto.getDeviceIndexes()));
List<DeviceOnlineRate.Detail> detailList = new ArrayList<>();
List<DevDetail> details = devInfoByIds.stream().filter(x -> dto.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList());
for (DevDetail dev : details) {
detail = new DeviceOnlineRate.Detail();
detail.setCit(dev.getDeptName());
detail.setCompany(dev.getGdName());
detail.setSubStation(dev.getBdzName());
detail.setDeviceId(dev.getDevIndex());
detail.setDeviceName(dev.getDevName());
detail.setManufacturer(dev.getManufacturer());
detail.setIp(dev.getIp());
detail.setRunFlag(RunFlagEnum.getRunFlagRemarkByStatus(dev.getRunFlag()));
detail.setComFlag(dev.getComFlag() == 0 ? "中断" : "正常");
detail.setTimeID(dev.getTimeID());
detail.setOnlineRate(onlineRateByDevMap.containsKey(dev.getDevIndex()) ? onlineRateByDevMap.get(dev.getDevIndex()).toString() : "0");
detailList.add(detail);
}
citDetail.setDetailList(detailList);
citDetailList.add(citDetail);
}
rate.setCitDetailList(citDetailList);
}
return rate;
}
@Override
public List<RStatOnlinerateVO> getOnlineRateByDevIds(OnlineRateParam onlineRateParam) {
return this.baseMapper.getOnlineRateByDevIds(onlineRateParam);
}
private String calculateOnLineRate(List<RStatOnlinerateVO> onlineRateByDev, List<String> deviceIds) {
List<RStatOnlinerateVO> list = onlineRateByDev.stream().filter(x -> deviceIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(list)) {
BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatOnlinerateVO::getOnlineMin).sum());
BigDecimal offlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatOnlinerateVO::getOfflineMin).sum());
BigDecimal sumMin = onlineMin.add(offlineMin);
return onlineMin.divide(sumMin, 2).toString();
}
return "0";
}
private Integer calculateOnLineRate(List<RStatOnlinerateVO> onlineRateByDev, Integer limit) {
return onlineRateByDev.stream().filter(x -> x.getOnlineRate() < limit).collect(Collectors.toList()).size();
}
}

View File

@@ -548,6 +548,8 @@ public interface LineMapper extends BaseMapper<Line> {
List<String> getDeviceIdByPowerFlag(@Param("lineIds")List<String> lineIds, @Param("powerFlag")Integer manufacturer); List<String> getDeviceIdByPowerFlag(@Param("lineIds")List<String> lineIds, @Param("powerFlag")Integer manufacturer);
List<String> getDeviceIdByJbPowerFlag(@Param("lineIds")List<String> lineIds, @Param("powerFlag")Integer manufacturer);
DeviceVO getDeviceDetailData(@Param("id")String id); DeviceVO getDeviceDetailData(@Param("id")String id);
List<LineDetailVO.Detail> getDeptDeviceDetailData(@Param("ids")List<String> ids, List<LineDetailVO.Detail> getDeptDeviceDetailData(@Param("ids")List<String> ids,

View File

@@ -1535,11 +1535,13 @@
<select id="selectByIds" resultType="com.njcn.device.pq.pojo.vo.LineDetailVO$Detail"> <select id="selectByIds" resultType="com.njcn.device.pq.pojo.vo.LineDetailVO$Detail">
SELECT DISTINCT SELECT DISTINCT
line.id as lineId, line.id as lineId,
dept.`Name` deptName,
area.name as areaId, area.name as areaId,
gd.NAME gdName, gd.NAME gdName,
substation.NAME subName, substation.NAME subName,
device.id devId, device.id devId,
device.NAME devName, device.NAME devName,
deviceDetail.Manufacturer manufacturer,
line.NAME lineName, line.NAME lineName,
lineDetail.Time_Interval as timeInterval, lineDetail.Time_Interval as timeInterval,
lineDetail.PT_Type as ptType, lineDetail.PT_Type as ptType,
@@ -1552,7 +1554,9 @@
deviceDetail.ip ip, deviceDetail.ip ip,
deviceDetail.Com_Flag as comFlag, deviceDetail.Com_Flag as comFlag,
vg.Scale as voltageLevel, vg.Scale as voltageLevel,
voltage.name as volName voltage.name as volName,
lineDetail.Power_Flag powerFlag,
lineDetail.Run_Flag lineRunType
FROM FROM
pq_line line, pq_line line,
pq_line voltage, pq_line voltage,
@@ -1562,9 +1566,13 @@
pq_line area, pq_line area,
pq_device deviceDetail, pq_device deviceDetail,
pq_line_detail lineDetail, pq_line_detail lineDetail,
pq_voltage vg pq_voltage vg,
pq_dept_line deptLine,
sys_dept dept
<where> <where>
line.pid = voltage.id line.id = deptLine.Line_Id
AND deptLine.Id = dept.Id
AND line.pid = voltage.id
AND voltage.pid = device.id AND voltage.pid = device.id
AND device.pid = substation.id AND device.pid = substation.id
AND substation.pid = gd.id AND substation.pid = gd.id
@@ -1843,46 +1851,82 @@
where t1.state = 1 where t1.state = 1
</select> </select>
<select id="getLineDeviceByDevIds" resultType="com.njcn.device.pq.pojo.vo.DevDetailVO"> <select id="getLineDeviceByDevIds" resultType="com.njcn.device.pq.pojo.vo.DevDetailVO">
SELECT distinct SELECT DISTINCT
t.id lineId, line.id as lineId,
t.NAME lineName, line.name as lineName,
dev.id devId, device.id as devId,
dev.NAME devName, pd.Id as cit,
sub.NAME subName, gd.NAME as company,
td.Obj_Id objId, substation.NAME as subName,
device.ip device.NAME as devName,
lineDetail.Line_Grade AS lineGrade,
deviceDetail.Update_Time AS timeID,
deviceDetail.ip as ip,
deviceDetail.Com_Flag as comFlag,
deviceDetail.run_Flag as runFlag,
deviceDetail.Manufacturer as manufacturer,
deviceDetail.Next_Time_Check as nextTimeCheck,
lineDetail.Obj_Id objId
FROM FROM
pq_line t, pq_line line,
pq_line_detail td, pq_dept_line pd,
pq_line subv, pq_line voltage,
pq_line dev, pq_line device,
pq_device device, pq_line substation,
pq_line sub pq_line gd,
WHERE pq_device deviceDetail,
t.id = td.id pq_line_detail lineDetail
AND subv.id = t.pid <where>
AND dev.id = subv.pid line.pid = voltage.id
AND dev.id = device.id AND line.id = pd.Line_Id
AND sub.id = dev.pid AND voltage.pid = device.id
<if test="powerFlag!=null and powerFlag!=2"> AND device.pid = substation.id
AND td.Power_Flag =#{powerFlag} AND substation.pid = gd.id
</if> AND device.id = deviceDetail.id
<if test="lineIds!=null and lineIds.size()!=0"> AND line.id = lineDetail.id
AND t.id in <if test="powerFlag!=null and powerFlag!=2">
<foreach item="item" collection="lineIds" separator="," open="(" close=")"> AND lineDetail.Power_Flag =#{powerFlag}
#{item} </if>
</foreach> <if test="lineIds!=null and lineIds.size()!=0">
</if> AND line.id in
<if test="devIds!=null and devIds.size()!=0"> <foreach item="item" collection="lineIds" separator="," open="(" close=")">
AND dev.id in #{item}
<foreach item="item" collection="devIds" separator="," open="(" close=")"> </foreach>
#{item} </if>
</foreach> <if test="devIds!=null and devIds.size()!=0">
</if> AND device.id in
<foreach item="item" collection="devIds" separator="," open="(" close=")">
#{item}
</foreach>
</if>
</where>
</select> </select>
<select id="getSubIdByPid" resultType="String"> <select id="getSubIdByPid" resultType="String">
SELECT id from pq_line where pid = #{pid} SELECT id from pq_line where pid = #{pid}
</select> </select>
<select id="getDeviceIdByJbPowerFlag" resultType="java.lang.String">
select
t1.id
from
pq_line t1 ,
pq_line_detail t2
where
t1.id = t2.id
and
t1.id in
<foreach collection="lineIds" separator="," open="(" close=")" item="item">
#{item}
</foreach>
<if test=" powerFlag ==0 || powerFlag ==1">
AND t2.Power_Flag = #{powerFlag}
</if>
<if test="powerFlag ==2 ">
AND t2.Monitor_Flag = 1
</if>
<if test="powerFlag ==3">
AND t2.Monitor_Flag = 0
</if>
</select>
</mapper> </mapper>

View File

@@ -528,6 +528,9 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
//获取终端等级 //获取终端等级
List<DictData> gradeType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_GRADE.getCode()).getData(); List<DictData> gradeType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_GRADE.getCode()).getData();
Map<String, Integer> gradeMap = gradeType.stream().collect(Collectors.toMap(DictData::getId, DictData::getAlgoDescribe)); Map<String, Integer> gradeMap = gradeType.stream().collect(Collectors.toMap(DictData::getId, DictData::getAlgoDescribe));
//获取厂家
List<DictData> manufacturerType = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_MANUFACTURER.getCode()).getData();
Map<String, String> manufacturerMap = manufacturerType.stream().collect(Collectors.toMap(DictData::getId, DictData::getName));
for (LineDetailVO.Detail detail : details) { for (LineDetailVO.Detail detail : details) {
//获取行政区域名称 //获取行政区域名称
@@ -549,6 +552,10 @@ public class LineServiceImpl extends ServiceImpl<LineMapper, Line> implements Li
detail.setStatisValue(flowVo.getStatisValue()); detail.setStatisValue(flowVo.getStatisValue());
detail.setFlowProportion(flowVo.getFlowProportion() * 100); detail.setFlowProportion(flowVo.getFlowProportion() * 100);
} }
//厂家
if (manufacturerMap.containsKey(detail.getManufacturer())) {
detail.setManufacturer(manufacturerMap.get(detail.getManufacturer()));
}
} }
} }
return details; return details;

View File

@@ -48,4 +48,12 @@ public interface RStatIntegrityDMapper extends MppBaseMapper<RStatIntegrityD> {
* @Date: 2024/1/8 14:01 * @Date: 2024/1/8 14:01
*/ */
Float selectTotalIntegrityByLineIds(@Param("param") LineBaseQueryParam param); Float selectTotalIntegrityByLineIds(@Param("param") LineBaseQueryParam param);
/**
* 获取监测点数据完整性
* @author xy
* @date 2025/11/25
*/
List<RStatIntegrityVO> getLineIntegrityRateInfo(@Param("lineIds")List<String> lineIds,@Param("startTime")String startTime,@Param("endTime")String endTime);
} }

View File

@@ -86,4 +86,28 @@
</if> </if>
</where> </where>
</select> </select>
<select id="getLineIntegrityRateInfo" resultType="RStatIntegrityVO">
select line_index lineIndex,
ROUND(sum( real_time )*1.0 / sum( due_time ) * 100,2) AS integrityRate,
sum(real_time) realTime,
sum(due_time) dueTime
from r_stat_integrity_d
<where>
<if test="lineIds!=null and lineIds.size > 0">
line_index in
<foreach collection="lineIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test=" startTime != null and startTime !=''">
AND time_id >= #{startTime}
</if>
<if test="endTime != null and endTime != ''">
AND time_id &lt;= #{endTime}
</if>
</where>
group by line_index
</select>
</mapper> </mapper>

View File

@@ -131,12 +131,6 @@
<version>1.0.0</version> <version>1.0.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>harmonic-common</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -890,6 +890,10 @@ public class GridServiceImpl implements IGridService {
int allTime = list33.stream() int allTime = list33.stream()
.mapToInt(RStatLimitRateDPO::getAllTime) .mapToInt(RStatLimitRateDPO::getAllTime)
.sum(); .sum();
//总闪变次数
int allFlickerTime = list33.stream()
.mapToInt(RStatLimitRateDPO::getFlickerAllTime)
.sum();
//电压偏差 //电压偏差
int devTime = list33.stream() int devTime = list33.stream()
.mapToInt(RStatLimitRateDPO::getVoltageDevOvertime) .mapToInt(RStatLimitRateDPO::getVoltageDevOvertime)
@@ -910,11 +914,14 @@ public class GridServiceImpl implements IGridService {
int ubalanceTime = list33.stream() int ubalanceTime = list33.stream()
.mapToInt(RStatLimitRateDPO::getUbalanceOvertime) .mapToInt(RStatLimitRateDPO::getUbalanceOvertime)
.sum(); .sum();
comAssess.setQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - (devTime + freqTime + thdTime + pltTime + ubalanceTime) * 100.0 / (allTime * 5))); //计算总稳态合格率
double all1 = 100 - (devTime + freqTime + thdTime + ubalanceTime) * 100.0 / (allTime * 4);
double all2 = 100 - pltTime * 100.0 / allFlickerTime;
comAssess.setQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, (all1 + all2) / 2.0));
comAssess.setVDevQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - devTime * 100.0 / allTime)); comAssess.setVDevQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - devTime * 100.0 / allTime));
comAssess.setFreqQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - freqTime * 100.0 / allTime)); comAssess.setFreqQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - freqTime * 100.0 / allTime));
comAssess.setHarmQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - thdTime * 100.0 / allTime)); comAssess.setHarmQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - thdTime * 100.0 / allTime));
comAssess.setFlickerQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - pltTime * 100.0 / allTime)); comAssess.setFlickerQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - pltTime * 100.0 / allFlickerTime));
comAssess.setUnbalanceQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - ubalanceTime * 100.0 / allTime)); comAssess.setUnbalanceQualifyData(allTime <= 0 ? 3.14159 : PubUtils.doubleRound(2, 100 - ubalanceTime * 100.0 / allTime));
} }
} }

View File

@@ -30,8 +30,11 @@
<version>1.0.0</version> <version>1.0.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -57,7 +57,7 @@ public interface RStatLimitRateDMapper extends BaseMapper<RStatLimitRateDPO> {
* @param list * @param list
* @param startTime * @param startTime
* @param endTime * @param endTime
* @return * @return111
*/ */
List<RStatLimitRateDPO> getAssessTargetRate( @Param("ids") List<String> list, List<RStatLimitRateDPO> getAssessTargetRate( @Param("ids") List<String> list,
@Param("statTime") String startTime, @Param("statTime") String startTime,

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -42,6 +43,7 @@ import java.util.stream.Collectors;
* @author wr * @author wr
* @since 2023-04-03 * @since 2023-04-03
*/ */
@DS("sjzx")
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMapper, RStatLimitRateDPO> implements IRStatLimitRateDService { public class RStatLimitRateDServiceImpl extends ServiceImpl<RStatLimitRateDMapper, RStatLimitRateDPO> implements IRStatLimitRateDService {

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -36,7 +37,7 @@ import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@DS("sjzx")
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRateDetailDMapper, RStatLimitRateDetailDPO> implements IRStatLimitRateDetailDService { public class RStatLimitRateDetailDServiceImpl extends ServiceImpl<RStatLimitRateDetailDMapper, RStatLimitRateDetailDPO> implements IRStatLimitRateDetailDService {

View File

@@ -147,6 +147,8 @@ public enum DicDataTypeEnum {
Major_Nonlinear_Device("主要非线性设备类型","Major_Nonlinear_Device"), Major_Nonlinear_Device("主要非线性设备类型","Major_Nonlinear_Device"),
EVALUATION_DEPT("主要非线性设备类型","evaluation_dept"), EVALUATION_DEPT("主要非线性设备类型","evaluation_dept"),
EVALUATION_TYPE("评估类型","Evaluation_Type"), EVALUATION_TYPE("评估类型","Evaluation_Type"),
DATA_DAY("日表表名","Data_Day")
; ;

View File

@@ -21,7 +21,10 @@ public enum StatisticsEnum {
LOAD_TYPE("干扰源类型", "Load_Type"), LOAD_TYPE("干扰源类型", "Load_Type"),
MANUFACTURER("终端厂家", "Manufacturer"), MANUFACTURER("终端厂家", "Manufacturer"),
POWER_FLAG("监测点性质", "Power_Flag"), POWER_FLAG("监测点性质", "Power_Flag"),
REPORT_TYPE("上报类型", "Report_Type"); REPORT_TYPE("上报类型", "Report_Type"),
JB_POWER_FLAG("电网性质", "Jb_Power_Flag"),
;
private final String name; private final String name;