diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/cause/jna/QvvrCauseDLL.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/cause/jna/QvvrCauseDLL.java index 7e560a4ff..63b04c99a 100644 --- a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/cause/jna/QvvrCauseDLL.java +++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/cause/jna/QvvrCauseDLL.java @@ -67,7 +67,9 @@ public interface QvvrCauseDLL extends Library { // 创建临时文件 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)) { diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/service/impl/EventAdvanceServiceImpl.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/service/impl/EventAdvanceServiceImpl.java index d2f1d3909..e62537c92 100644 --- a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/service/impl/EventAdvanceServiceImpl.java +++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/service/impl/EventAdvanceServiceImpl.java @@ -1,14 +1,11 @@ package com.njcn.advance.event.service.impl; 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.model.AnalysisResult; 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.event.service.IEventAdvanceService; -import com.njcn.advance.event.type.jna.QvvrDLL; import com.njcn.common.config.GeneralInfo; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.event.file.component.WaveFileComponent; @@ -89,8 +86,55 @@ public class EventAdvanceServiceImpl implements IEventAdvanceService { } } List> 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的方式 - 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_len = listWaveData.size(); // 获取ABC三相的瞬时数据 @@ -112,45 +156,6 @@ public class EventAdvanceServiceImpl implements IEventAdvanceService { } System.out.println("暂降原因分析完毕==============="); 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; } - - } diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/type/jna/QvvrDLL.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/type/jna/QvvrDLL.java index 9127e012e..0f9957edb 100644 --- a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/type/jna/QvvrDLL.java +++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/event/type/jna/QvvrDLL.java @@ -52,7 +52,7 @@ public interface QvvrDLL extends Library { ); } } - + /** * 从jar中提取库文件到临时目录 */ @@ -62,11 +62,13 @@ public interface QvvrDLL extends Library { if (libStream == null) { throw new FileNotFoundException("在jar中找不到库文件: " + resourcePath); } - + // 创建临时文件 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)) { byte[] buffer = new byte[8192]; @@ -77,45 +79,47 @@ public interface QvvrDLL extends Library { } finally { libStream.close(); } - + // 设置为可执行 tempLibFile.setExecutable(true); tempLibFile.setReadable(true); - + // JVM退出时删除临时文件 tempLibFile.deleteOnExit(); - + System.out.println("已提取库文件到: " + tempLibFile.getAbsolutePath()); return tempLibFile; } - + /** * 直接调用C DLL的qvvr_fun函数 * void __stdcall qvvr_fun(void *data) */ void qvvr_fun(QvvrDataStruct data); - + + void ping(); + /** * 对应C语言的qvvr_data_struct结构体 */ public static class QvvrDataStruct extends Structure { - + // 输入数据 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 int smp_rate; // 采样频率 public int smp_len; // 数据长度 - + // 输出结果 public int evt_num; // 事件数量 public EventBuffer[] evt_buf = new EventBuffer[32]; // 事件缓冲区 - + @Override protected List getFieldOrder() { return Arrays.asList("smp_va", "smp_vb", "smp_vc", "smp_rate", "smp_len", "evt_num", "evt_buf"); } - + public QvvrDataStruct() { super(); // 初始化事件缓冲区 @@ -124,49 +128,49 @@ public interface QvvrDLL extends Library { } } } - + /** * 事件缓冲区结构 */ public static class EventBuffer extends Structure { 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 float hold_time_rms; public float hold_time_dq; - + public float POW_a; public float POW_b; public float POW_c; - + public float Voltagechange_Va; public float Voltagechange_Vb; public float Voltagechange_Vc; - + public int SEG_T_num; public int[] SEG_T0_idx = new int[256]; public int[] SEG_T_idx = new int[256]; - + public int SEG_RMS_T_num; public int[] SEG_RMS_T_idx = new int[256]; - + public int u_min_num; 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[] u3_min = new float[256]; public int[] order_min_idx = new int[256]; - + public float[] angle_diff_ap = new float[256]; public float[] angle_diff_bp = new float[256]; public float[] angle_diff_cp = new float[256]; public float[] angle_diff_an = new float[256]; public float[] angle_diff_bn = new float[256]; public float[] angle_diff_cn = new float[256]; - + public float[] bph_max_value = new float[256]; - + @Override protected List getFieldOrder() { return Arrays.asList( diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java index 25519edd9..59daf3707 100644 --- a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java +++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/service/impl/EventRelevantAnalysisServiceImpl.java @@ -854,6 +854,21 @@ public class EventRelevantAnalysisServiceImpl extends ServiceImpl> getNodeBefore(){ + Map entityMtranMap = new HashMap<>(32); + + HandleEvent handleEvent = new HandleEvent(); + List list = relevantLogMapper.getLogic(); + Map> setNodeSort = new HashMap<>(); + if (CollectionUtil.isNotEmpty(list)) { + Map> map = getLogicInfo(list); + setNodeSort = nodeSort(map); + } + + return setNodeSort; + } + + public Map getNodeInfo( ) { Map entityMtranMap = new HashMap<>(32); diff --git a/pqs-advance/advance-boot/src/main/resources/libqvvr_cause_dll.so b/pqs-advance/advance-boot/src/main/resources/libqvvr_cause_dll.so index 50773d483..a41046387 100644 Binary files a/pqs-advance/advance-boot/src/main/resources/libqvvr_cause_dll.so and b/pqs-advance/advance-boot/src/main/resources/libqvvr_cause_dll.so differ diff --git a/pqs-advance/advance-boot/src/main/resources/libqvvr_dll.so b/pqs-advance/advance-boot/src/main/resources/libqvvr_dll.so index b411af51e..2d7dc0365 100644 Binary files a/pqs-advance/advance-boot/src/main/resources/libqvvr_dll.so and b/pqs-advance/advance-boot/src/main/resources/libqvvr_dll.so differ diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java index 41e52f8dc..825e46d8f 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java @@ -147,6 +147,8 @@ public enum DicDataTypeEnum { Major_Nonlinear_Device("主要非线性设备类型","Major_Nonlinear_Device"), EVALUATION_DEPT("主要非线性设备类型","evaluation_dept"), EVALUATION_TYPE("评估类型","Evaluation_Type"), + + DATA_DAY("日表表名","Data_Day") ;