高级算法特征值,暂降事件范围分析代码提交

This commit is contained in:
2023-08-10 16:30:01 +08:00
parent 336f3b1281
commit 855c8d98d6
73 changed files with 5766 additions and 88 deletions

View File

@@ -28,7 +28,9 @@ public enum AdvanceResponseEnum {
USER_DATA_P_NODE_PARAMETER_ERROR("A0101","无用采用户或所有用户的完整性均不满足条件"),
RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法")
RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法"),
EVENT_EMPTY("A0102","没有查询到未分析事件")
;
private final String code;

View File

@@ -0,0 +1,99 @@
package com.njcn.advance.enums;
/**
* @Author: Sunwei 【sunW2016@163.com】
* @Description: 高级分析返回结果
* @Date: Create in 9:02 2018/3/6
* @Modified By:
*/
public enum EnumEvt {
EVT_NUM("evt_num", "高级算法返回事件个数"), EVT_BUF("evt_buf", "高级算法返回数据"), QVVR_TYPE("qvvr_type", "暂降类型"), POW_A("POW_a",
"A相波形起始点"), POW_B("POW_b", "B相波形起始点"), POW_C("POW_c", "C相波形起始点"), SEG_T_IDX("SEG_T_idx",
"修正分段位置"), SEG_T_NUM("SEG_T_num", "分段数目"), SEG_RMS_T_NUM("SEG_RMS_T_num", "有效值分段数目"), SEG_RMS_T_IDX(
"SEG_RMS_T_idx", "有效值分段位置"), UA_MIN("ua_min", "A相电压特征值"), UB_MIN("ub_min",
"B相电压特征值"), UC_MIN("uc_min", "C相电压特征值"), U3_MIN("u3_min",
"三相电压特征值"), U_MIN_NUM("u_min_num", "特征值个数"), ORDER_MIN_IDX("order_min_idx",
"最小值位置"), HOLD_TIME_RMS("hold_time_rms", "有效值算法持续时间"), HOLD_TIME_DQ(
"hold_time_dq",
"dq变换算法持续时间"), VOLTAGECHANGE_VA("Voltagechange_Va",
"A相跳变段电压变化率"), VOLTAGECHANGE_VB("Voltagechange_Vb",
"B相跳变段电压变化率"), VOLTAGECHANGE_VC("Voltagechange_Vc",
"C相跳变段电压变化率"), ANGLE_DIFF_AP("angle_diff_ap",
"A相相位正跳变"), ANGLE_DIFF_BP("angle_diff_bp",
"B相相位正跳变"), ANGLE_DIFF_CP("angle_diff_cp",
"C相相位正跳变"), ANGLE_DIFF_AN("angle_diff_an",
"A相相位负跳变"), ANGLE_DIFF_BN("angle_diff_bn",
"B相相位负跳变"), ANGLE_DIFF_CN("angle_diff_cn",
"C相相位负跳变"), BPH_MAX_VALUE("bph_max_value",
"不平衡度"), QVVR_CATA_CAUSE("qvvr_cata_cause",
"暂降原因"), QVVR_PHASETYPE("qvvr_phasetype",
"暂降相别"), QVVR_CATA_TYPE("qvvr_cata_type",
"暂降类型"), POWER_QVVR_BEFORE_BUF("power_qvvr_before_buf",
"暂态前基波功率参数"),POWER_QVVR_AFTER_BUF("power_qvvr_after_buf",
"暂态前基波功率参数"),FUND_P("Fund_P",
"基波有功功率"),FUND_Q("Fund_Q",
"基波无功功率"),FUND_S("Fund_S",
"基波视在功率"),QVVR_DIRECTION_INFO("qvvr_direction_info",
"暂降源定位特征参数"),TRIG_TIME("trig_time",
"暂降触发时刻"),QVVR_BEFORE_RMS("qvvr_before_rms",
"暂降前基波有效值"),QVVR_BEFORE_ZK("qvvr_before_zk",
"暂降前基波阻抗值"),QVVR_OCCUR_RMS("qvvr_occur_rms",
"暂降发生时基波有效值"),QVVR_OCCUR_ZK("qvvr_occur_zk",
"暂降发生时基波阻抗值"),QVVR_POS_INFO("qvvr_pos_info",
"暂降源与监测位置关系"),QVVR_UTBL_INFO("qvvr_utbl_info",
"突变量参数"),ENTER("\n",
"回车换行"), QUOTATION("\"",
"双引号"), NEWLINE("\n\t",
"换行Tab"), TAB("\t",
"tab");
/**
* 字段描述
*/
private String description;
/**
* 字段值
*/
private String property;
EnumEvt(String property, String description) {
this.description = description;
this.property = property;
}
public String getDescription() {
return description;
}
public String getProperty() {
return property;
}
public static String setEvtProperty(String property) {
return QUOTATION.getProperty() + property + QUOTATION.getProperty() + ":";
}
public static String setEnter(String s, int lineNumber) {
return s += "," + ENTER.getProperty() + setTab(lineNumber);
}
public static String setClose(int lineNumber) {
String s = ENTER.getProperty();
s += setTab(lineNumber);
return s + "}";
}
public static String setTab(int count) {
String string = "";
for (int i = 0; i < count; i++) {
string += TAB.getProperty();
}
return string;
}
public static String setNewLine() {
return "{" + NEWLINE.getProperty();
}
}

View File

@@ -1,38 +0,0 @@
package com.njcn.advance.pojo.bo;
/**
* pqs
*
* @author cdf
* @date 2023/6/20
*/
public interface FinalData {
/**
* 暂降事件按开始时间归集门槛10秒
*/
int TIME_THRESHOLD = 10;
//分组的最大组数
int MAX_GROUP_NUM = 1000;
//类别数
int MAX_CATA_NUM = 7;
//最大事件个数
int MAX_EVT_NUM = 1000;
//三相故障
int QVVR_TYPE_THREE = 9;
//故障类型未知
int QVVR_TYPE_UNKNOWN = 10;
//节点不在网络拓扑中
int QVVR_TYPE_OUTOFRANGE = -1;
int DATA_INF = -1;
int EVT_TYPE_NUM = 6;//故障类型数
int MAX_PATH_NUM = 50;//最大路径数
int NODE_NUM = -1;//输入节点数
// 暂降综合评估算法
int CLUSER_NUM = 4; // 系统中各监测点分类后的代表节点
int MAX_LINE_NUM = 1000; // 监测点最多个数
int MAX_STA_NUM = 120; // 支持的子系统个数
}

View File

@@ -1,6 +1,7 @@
package com.njcn.advance.pojo.bo;
import com.njcn.advance.pojo.dto.QtIdx;
import com.njcn.advance.pojo.dto.relevent.FinalData;
import com.njcn.advance.pojo.dto.relevent.QtIdx;
import com.sun.jna.Structure;
import java.util.List;

View File

@@ -1,5 +1,6 @@
package com.njcn.advance.pojo.bo;
import com.njcn.advance.pojo.dto.relevent.FinalData;
import com.sun.jna.Structure;
import java.util.Arrays;

View File

@@ -1,5 +1,6 @@
package com.njcn.advance.pojo.bo;
import com.njcn.advance.pojo.dto.relevent.FinalData;
import com.sun.jna.Structure;
import java.util.Arrays;

View File

@@ -1,5 +1,6 @@
package com.njcn.advance.pojo.dto;
import com.njcn.advance.pojo.dto.relevent.QtIdx;
import lombok.Data;
import java.util.List;

View File

@@ -0,0 +1,43 @@
package com.njcn.advance.pojo.dto.relevent;
import lombok.Data;
/**
* pqs
*
* @author cdf
* @date 2023/7/20
*/
@Data
public class EntityGroupData {
private int idx[];
private int all_evt_num;
private int evt_in_num;
private int evt_out_num;
private int evt_res_num;
private int Matrixcata[][];
private EntityGroupEvtData in_buf[];
private EntityGroupEvtData out_buf[];
private EntityGroupEvtData res_buf[];
private EntityGroupEvtData grp_buf[][];
private int grp_num[];
private int grp_all_num;
private EntityGroupEvtData grp_cata_buf[][][];
private int grp_cata_num[][];
public EntityGroupData() {
idx = new int[FinalData.MAX_EVT_NUM];
Matrixcata = new int[FinalData.MAX_CATA_NUM][FinalData.MAX_EVT_NUM];
in_buf = new EntityGroupEvtData[FinalData.MAX_EVT_NUM];
out_buf = new EntityGroupEvtData[FinalData.MAX_EVT_NUM];
res_buf = new EntityGroupEvtData[FinalData.MAX_EVT_NUM];
grp_buf = new EntityGroupEvtData[FinalData.MAX_GROUP_NUM][FinalData.MAX_EVT_NUM];
grp_num = new int[FinalData.MAX_GROUP_NUM];
grp_cata_buf = new EntityGroupEvtData[FinalData.MAX_GROUP_NUM][FinalData.MAX_CATA_NUM
+ 2][FinalData.MAX_EVT_NUM];
grp_cata_num = new int[FinalData.MAX_GROUP_NUM][FinalData.MAX_CATA_NUM + 2];
}
}

View File

@@ -0,0 +1,53 @@
package com.njcn.advance.pojo.dto.relevent;
import com.njcn.advance.pojo.dto.SagEvent;
import lombok.Data;
@Data
public class EntityGroupEvtData implements Cloneable,Comparable<EntityGroupEvtData> {
//逻辑节点序号
private int node;
//事件开始时间时标
private int start_time;
//类别
private int cata;
//标注类别
private int cata2;
//物理节点
private String nodePhysics;
private SagEvent sagEvent;
private String sagReason;
public Object objClone() {
try {
return clone();
} catch (CloneNotSupportedException e) {
return new EntityGroupEvtData(null, -1, -1, -1,null,null);
}
}
public EntityGroupEvtData(String nodePhysics, int start_time, int cata, int cata2, SagEvent sagEvent, String sagReason) {
this.nodePhysics = nodePhysics;
this.start_time = start_time;
this.cata = cata;
this.cata2 = cata2;
this.sagEvent = sagEvent;
this.sagReason = sagReason;
}
@Override
public int compareTo(EntityGroupEvtData obj) {
if(this.getStart_time() < obj.getStart_time()){
return -1;
}else if(this.getStart_time() > obj.getStart_time()){
return 1;
}
return 0;
}
}

View File

@@ -0,0 +1,21 @@
package com.njcn.advance.pojo.dto.relevent;
import lombok.Data;
@Data
public class EntityLogic {
//物理隔绝变压器策略GUID
private String tPIndex;
//变压器逻辑上节点
private String node_h;
//变压器逻辑下节点
private String node_l;
// 变压器连接方式
private Integer type;
//变压器物理上节点
private String nodeBefore;
//变压器物理下节点
private String nodeNext;
}

View File

@@ -0,0 +1,71 @@
package com.njcn.advance.pojo.dto.relevent;
import com.njcn.advance.pojo.dto.relevent.FinalData;
import java.io.Serializable;
import java.util.Arrays;
public class EntityMtrans implements Serializable {
private static final long serialVersionUID = 1L;
private int Matrixcata0[][];
private int Matrixcata1[][];
private int Mtrans[][];
private int possiable_path[][];
private int path_num;
public EntityMtrans() {
super();
Mtrans = new int[FinalData.NODE_NUM][FinalData.NODE_NUM];
Matrixcata0 = new int[FinalData.EVT_TYPE_NUM][FinalData.NODE_NUM];
Matrixcata1 = new int[FinalData.EVT_TYPE_NUM][FinalData.NODE_NUM];
possiable_path = new int[FinalData.MAX_PATH_NUM][FinalData.NODE_NUM + 1];
path_num = 0;
}
public int[][] getMatrixcata0() {
return Matrixcata0;
}
public void setMatrixcata0(int[][] matrixcata0) {
Matrixcata0 = matrixcata0;
}
public int[][] getMatrixcata1() {
return Matrixcata1;
}
public void setMatrixcata1(int[][] matrixcata1) {
Matrixcata1 = matrixcata1;
}
public int[][] getMtrans() {
return Mtrans;
}
public void setMtrans(int[][] mtrans) {
Mtrans = mtrans;
}
public int[][] getPossiable_path() {
return possiable_path;
}
public void setPossiable_path(int[][] possiable_path) {
this.possiable_path = possiable_path;
}
public int getPath_num() {
return path_num;
}
public void setPath_num(int path_num) {
this.path_num = path_num;
}
@Override
public String toString() {
return "EntityMtrans [Matrixcata0=" + Arrays.toString(Matrixcata0) + ", Matrixcata1="
+ Arrays.toString(Matrixcata1) + ", Mtrans=" + Arrays.toString(Mtrans) + ", possiable_path="
+ Arrays.toString(possiable_path) + ", path_num=" + path_num + "]";
}
}

View File

@@ -0,0 +1,123 @@
package com.njcn.advance.pojo.dto.relevent;
import com.njcn.advance.pojo.dto.SagEvent;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/*
*一个归一化事件包含多个事件(一对多)
*indexEventAss:事件关联分析表Guid
*time:归一化中第一个时间
*describe:关联事件描述
*bRange:是否进行范围分析
*indexUser:用户表Guid
*updateTime:更新时间
*state:数据状态
*name:关联事件名称
*list:属于该归一化事件的暂降事件
*strTime:字符串时间
*/
@Data
public class EventAssObj implements Serializable {
private String indexEventAss;
private LocalDateTime time;
private String describe;
private int bRange;
private String indexUser;
private LocalDateTime updateTime = LocalDateTime.now();
private int state;
private String name;
private String strTime;
private List<SagEvent> list;
public String getStrTime() {
return strTime;
}
public void setStrTime(String strTime) {
this.strTime = strTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIndexEventAss() {
return indexEventAss;
}
public void setIndexEventAss(String indexEventAss) {
this.indexEventAss = indexEventAss;
}
public LocalDateTime getTime() {
return time;
}
public void setTime(LocalDateTime time) {
this.time = time;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
public int getbRange() {
return bRange;
}
public void setbRange(int bRange) {
this.bRange = bRange;
}
public String getIndexUser() {
return indexUser;
}
public void setIndexUser(String indexUser) {
this.indexUser = indexUser;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public List<SagEvent> getList() {
return list;
}
public void setList(List<SagEvent> list) {
this.list = list;
}
@Override
public String toString() {
return "EventAssObj [indexEventAss=" + indexEventAss + ", time=" + time + ", describe=" + describe + ", bRange="
+ bRange + ", indexUser=" + indexUser + ", updateTime=" + updateTime + ", state=" + state + ", name="
+ name + ", strTime=" + strTime + ", list=" + list + "]";
}
}

View File

@@ -0,0 +1,25 @@
package com.njcn.advance.pojo.dto.relevent;
public class FinalData {
public static final int TIME_THRESHOLD = 10;//暂降事件按开始时间归集门槛10秒
public static final int MAX_GROUP_NUM = 1000;//分组的最大组数
public static final int MAX_CATA_NUM = 7;//类别数
public static final int MAX_EVT_NUM = 1000;//最大事件个数
public static final int QVVR_TYPE_THREE = 9; //三相故障
public static final int QVVR_TYPE_UNKNOWN = 10; //故障类型未知
public static final int QVVR_TYPE_OUTOFRANGE = -1; //节点不在网络拓扑中
public static final int DATA_INF = -1;
public static final int EVT_TYPE_NUM = 6;//故障类型数
public static final int MAX_PATH_NUM = 50;//最大路径数
public static int NODE_NUM;//输入节点数
// 暂降综合评估算法
public static final int CLUSER_NUM = 4; // 系统中各监测点分类后的代表节点
public static final int MAX_LINE_NUM = 1000; // 监测点最多个数
public static final int MAX_STA_NUM = 120; // 支持的子系统个数
static {
NODE_NUM = -1;
}
}

View File

@@ -0,0 +1,32 @@
package com.njcn.advance.pojo.dto.relevent;
import lombok.Data;
import java.io.Serializable;
/**
* pqs
*终端监测点名称信息
* nameGD:供电公司名称
* nameBD:变电站名称
* nameSubV:母线名称
* namePoint:监测点名称
* indexPoint:监测点的唯一标识
*
* 新增add
* xuyang
* 2021.05.11
* 监测点电压等级:monitorVoltageLevel
* 监测点干扰源类型终:monitorLoadType
*/
@Data
public class PlantInfo implements Serializable {
private String indexPoint;
private String nameGD;
private String nameBD;
private String nameSubV;
private String namePoint;
private String monitorVoltageLevel;
private String monitorLoadType;
private String objName;
}

View File

@@ -1,4 +1,4 @@
package com.njcn.advance.pojo.dto;
package com.njcn.advance.pojo.dto.relevent;
import com.sun.jna.Structure;
import lombok.Data;

View File

@@ -0,0 +1,423 @@
package com.njcn.advance.pojo.dto;
import com.njcn.advance.pojo.dto.relevent.PlantInfo;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* pqs
*
* @author cdf
* @date 2023/7/21
*/
public class SagEvent implements Comparable<SagEvent>, Serializable {
// 事件的唯一标识
private String indexEventDetail;
private Integer waveType;
// 暂降事件发生时间
private LocalDateTime sagTime;
// 暂降事件发生时间毫秒
private Integer msec;
// 事件描述
private String events;
// 持续时间
private Float persistTime;
// 发生暂降事件的监测点层级信息
private PlantInfo plantInfo;
// 拼接sagTime和msec
private String strTime;
// 事件发生时刻的毫秒表示
private Long time;
// 监测点的唯一标识
private String indexPoint;
// 归一化事件的GUID
private String indexEventAss;
// 特征幅值
private Float eventValue;
// 暂降原因
private String sagReason;
// 暂降类型
private String sagType;
// 暂降类型描述
private String sagTypeDes;
public String getSagTypeDes() {
return sagTypeDes;
}
public void setSagTypeDes(String sagTypeDes) {
this.sagTypeDes = sagTypeDes;
}
// 暂降深度
private String strEventValue;
private String strPersist;
// 事件是否经过高级算法处理(0-未处理1-已处理默认为0)
private Integer dealFlag;
// 事件是否经过高级算法处理中文描述(已处理、未处理)
private String dealFlagDescription;
// 录波文件是否存在(0-不存在1-存在默认为0)
private Integer fileFlag;
// 录波文件是否存在中文描述(存在、不存在)
private String fileFlagDescription;
// 高级算法返回dq持续时间
private Float dqTime;
// 高级算法处理事件个数记录
private Integer number;
// 归一化处理更新时间
private LocalDateTime dealTime;
// 高级算法的对应关系
private int cata;
// 第一次事件的触发时间
private Date firstTime;
// 第一次事件的暂降类型
private String firstType;
// 第一次事件的触发时间毫秒
private Integer firstMs;
// 第一次事件触发时间date->毫秒
private Long firstTimeMills;
// 暂降严重度
private Float severity;
// 排序方式
private int sortType = 0; // 初始化默认为0-按照时间排序 新增1-按暂降严重度排序 2-暂降发生时刻排序 3-先根据电压等级排序,如果相等再按照暂降幅值排序
//电压等级
private Double voltage;
//监测点对象名称
private String objName;
public String getObjName() {
return objName;
}
public void setObjName(String objName) {
this.objName = objName;
}
public Integer getWaveType() {
return waveType;
}
public void setWaveType(Integer waveType) {
this.waveType = waveType;
}
private String strVoltage;
public Double getVoltage() {
return voltage;
}
public void setVoltage(Double voltage) {
this.voltage = voltage;
}
public String getStrVoltage() {
return strVoltage;
}
public void setStrVoltage(String strVoltage) {
//转为double
strVoltage = strVoltage.toUpperCase();
String str = strVoltage.substring(0, strVoltage.indexOf("KV"));
this.voltage = Double.parseDouble(str);
}
public int getSortType() {
return sortType;
}
public void setSortType(int sortType) {
this.sortType = sortType;
}
public Float getSeverity() {
return severity;
}
public void setSeverity(Float severity) {
this.severity = severity;
}
public Long getFirstTimeMills() {
return firstTimeMills;
}
public void setFirstTimeMills(Long firstTimeMills) {
this.firstTimeMills = firstTimeMills;
}
public Integer getFirstMs() {
return firstMs;
}
public void setFirstMs(Integer firstMs) {
this.firstMs = firstMs;
}
public Date getFirstTime() {
return firstTime;
}
public void setFirstTime(Date firstTime) {
this.firstTime = firstTime;
}
public String getFirstType() {
return firstType;
}
public void setFirstType(String firstType) {
this.firstType = firstType;
}
public Integer getFileFlag() {
return fileFlag;
}
public void setFileFlag(Integer fileFlag) {
this.fileFlag = fileFlag;
}
public String getFileFlagDescription() {
return fileFlagDescription;
}
public void setFileFlagDescription(String fileFlagDescription) {
this.fileFlagDescription = fileFlagDescription;
}
public int getCata() {
return cata;
}
public void setCata(int cata) {
this.cata = cata;
}
public LocalDateTime getDealTime() {
return dealTime;
}
public void setDealTime(LocalDateTime dealTime) {
this.dealTime = dealTime;
}
public Float getDqTime() {
return dqTime;
}
public void setDqTime(Float dqTime) {
this.dqTime = dqTime;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public void setDealFlagDescription(String dealFlagDescription) {
this.dealFlagDescription = dealFlagDescription;
}
public String getDealFlagDescription() {
return dealFlagDescription;
}
public Integer getDealFlag() {
return dealFlag;
}
public void setDealFlag(Integer dealFlag) {
this.dealFlag = dealFlag;
}
public String getIndexEventDetail() {
return indexEventDetail;
}
public void setIndexEventDetail(String indexEventDetail) {
this.indexEventDetail = indexEventDetail;
}
public LocalDateTime getSagTime() {
return sagTime;
}
public void setSagTime(LocalDateTime sagTime) {
this.sagTime = sagTime;
}
public Integer getMsec() {
return msec;
}
public void setMsec(Integer msec) {
this.msec = msec;
}
public String getEvents() {
return events;
}
public void setEvents(String events) {
this.events = events;
}
public Float getPersistTime() {
return persistTime;
}
public void setPersistTime(Float persistTime) {
if (persistTime == null) {
this.persistTime = 0f;
return;
}
float f1 = (float) (Math.round(persistTime.floatValue() * 1000)) / 1000;
this.persistTime = new Float(f1);
}
public PlantInfo getPlantInfo() {
return plantInfo;
}
public void setPlantInfo(PlantInfo plantInfo) {
this.plantInfo = plantInfo;
}
public String getStrTime() {
return strTime;
}
public void setStrTime(String strTime) {
this.strTime = strTime;
}
public Long getTime() {
return time;
}
public void setTime(Long time) {
this.time = time;
}
public String getIndexPoint() {
return indexPoint;
}
public void setIndexPoint(String indexPoint) {
this.indexPoint = indexPoint;
}
public String getIndexEventAss() {
return indexEventAss;
}
public void setIndexEventAss(String indexEventAss) {
this.indexEventAss = indexEventAss;
}
public Float getEventValue() {
return eventValue;
}
public void setEventValue(Float eventValue) {
if (eventValue == null) {
this.eventValue = 0f;
return;
}
this.eventValue = eventValue;
}
public String getSagReason() {
return sagReason;
}
public void setSagReason(String sagReason) {
this.sagReason = sagReason;
}
public String getSagType() {
return sagType;
}
public void setSagType(String sagType) {
this.sagType = sagType;
}
public String getStrEventValue() {
return strEventValue;
}
public void setStrEventValue(String strEventValue) {
this.strEventValue = strEventValue;
}
public String getStrPersist() {
return strPersist;
}
public void setStrPersist(String strPersist) {
this.strPersist = strPersist;
}
// 根据设定规则进行排序
@Override
public int compareTo(SagEvent obj) {
switch (this.getSortType()) {
case 1:
return obj.getSeverity().compareTo(this.getSeverity());
case 2:
return this.getTime().compareTo(obj.getTime());
case 3: {
if (obj.getVoltage().compareTo(this.getVoltage()) != 0) {
return obj.getVoltage().compareTo(this.getVoltage());
}
else {
return this.getEventValue().compareTo(obj.getEventValue());
}
}
default:
break;
}
return this.getFirstTimeMills().compareTo(obj.getFirstTimeMills());
}
}

View File

@@ -0,0 +1,200 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import java.util.LinkedList;
import java.util.List;
public class AnalyWaveModel {
/********************************
* 解析Comtrate文件相关实体类
* @author yexb 转ww C#代码
**********************************/
// 模拟量通道记录类
public static class tagOneChannleCfg {
// 通道序号
public int nIndex;
// 通道名称
public String szChannleName;
// 相位名称
public String szPhasicName;
// 监视的通道名称
public String szMonitoredChannleName;
// 通道的单位
public String szUnitName;
// 通道的系数
public float fCoefficent;
// 通道的便宜量
public float fOffset;
// 起始采样时间的偏移量
public float fTimeOffset;
// 采样值的最小值
public int nMin;
// 采样值的最大值
public int nMax;
// 一次变比
public float fPrimary;
// 二次变比
public float fSecondary;
// 一次值还是二次值标志
public String szValueType;
}
// 数字量通道记录类
public static class tagOneChannleCfg_digital {
// 通道序号
public int nIndex;
// 通道名称
public String szChannleName;
// 相位名称
public String szPhasicName;
// 监视的通道名称
public String szMonitoredChannleName;
// 通道的单位
public int Initial;
}
// 配置文件总类
public static class tagComtradeCfg {
public int nChannelNum;
public int nPhasic;// 模拟量通道的个数 yexibao 2020-12-15
public int nAnalogNum;// 模拟量通道的个数 WW 2013-05-15
public int nDigitalNum;// 数字量通道的个数 WW 2013-05-15
public List<tagOneChannleCfg> OneChannleCfg;
public List<tagOneChannleCfg_digital> OneChannleCfgDig;
public tagComtradeCfg() {
OneChannleCfg = new LinkedList<tagOneChannleCfg>();
OneChannleCfgDig = new LinkedList<tagOneChannleCfg_digital>();
}
}
public static class tagOneRate{
// 1秒钟内的采样点数
public long nOneSample;
// 总采样点数
public long nSampleNum;
}
// 采样总结构
public static class tagRates {
public int nRates;
public List<tagOneRate> OneRate;
public tagRates() {
OneRate = new LinkedList<tagOneRate>();
}
}
// 采样值结构
public static class tagOneValue {
// 数据点时间
public String szTime;
// 数据点序号
public int nIndex;
// int nValueNum; WW 2013-05-15
// 模拟量数据个数
public int nAnalogValueNum;
// 数字量数据个数
public int nDigitalValueNum;
// 数据区
// float fValue[8];
public List<Float> fValue;// WW 2013-05-15 原来的8通道也是仅考虑了单路的情况如果遇到多路这里会超出
public List<Byte> DigitalValue;// WW 2013-05-15
public tagOneValue() {
fValue = new LinkedList<Float>();
DigitalValue = new LinkedList<Byte>();
}
}
// 采样值总结构
public static class tagValue {
// 数据个数
public int nValueNum;
// 数据区
public List<tagOneValue> OneValueList;
public tagValue() {
OneValueList = new LinkedList<tagOneValue>();
}
}
public static class tagWave {
// 标识 1-二次值的事件波形 2-二次值的RMS 3-一次值的事件波形 4-一次值的RMS
//标识 5-二次值的事件波形 6-二次值的RMS 7-一次值的事件波形 8-一次值的RMS
private int type;
// 相别
private int phaseType;// 0:A相1B相2c相
// X坐标值
private int xvalue;
// y坐标值
private float yvalue;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getPhaseType() {
return phaseType;
}
public void setPhaseType(int phaseType) {
this.phaseType = phaseType;
}
public int getXvalue() {
return xvalue;
}
public void setXvalue(int xvalue) {
this.xvalue = xvalue;
}
public float getYvalue() {
return yvalue;
}
public void setYvalue(float yvalue) {
this.yvalue = yvalue;
}
}
//增加返回值描述
public static class tagDataValue {
//波形对应的标题
private List<String> tmpWaveTitle;
//波形对应的值
private List<List<Float>> listWaveData;
//波形对应的相别数量
private int iPhasic;
public List<String> getTmpWaveTitle() {
return tmpWaveTitle;
}
public void setTmpWaveTitle(List<String> tmpWaveTitle) {
this.tmpWaveTitle = tmpWaveTitle;
}
public List<List<Float>> getListWaveData() {
return listWaveData;
}
public void setListWaveData(List<List<Float>> listWaveData) {
this.listWaveData = listWaveData;
}
public int getiPhasic() {
return iPhasic;
}
public void setiPhasic(int iPhasic) {
this.iPhasic = iPhasic;
}
}
}

View File

@@ -0,0 +1,94 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import com.sun.jna.Structure;
import java.util.Arrays;
import java.util.List;
/**
* 输出参数
* qvvr_cata_cause 暂降原因(目前算法不支持,不填)
* qvvr_phasetype 暂降相别 1一相 2两相 3三相
* qvvr_cata_type 暂降类型
* 持续时间(单位秒)
* hold_time_rms 有效值算法持续时间
* hold_time_dq dq变换算法持续时间
* 波形起始点(单位度)
* POW_a A相波形起始点
* POW_b B相波形起始点
* POW_c C相波形起始点
* 跳变段电压变化率单位V/S
* Voltagechange_Va A相跳变段电压变化率
* Voltagechange_Vb B相跳变段电压变化率
* Voltagechange_Vc C相跳变段电压变化率
* 分段信息
* SEG_T_num 分段数目
* SEG_T0_idx 原始分段位置
* SEG_T_idx 修正分段位置
* 有效值分段信息
* SEG_RMS_T_num 分段数目
* SEG_RMS_T_idx 分段位置
* 特征幅值单位V
* u_min_num 特征值个数
* ua_min A相电压特征值
* ub_min B相电压特征值
* uc_min C相电压特征值
* u3_min 三相电压特征值
* order_min_idx 最小值位置
* 相位跳变(单位度)
* angle_diff_ap A相相位正跳变
* angle_diff_bp B相相位正跳变
* angle_diff_cp C相相位正跳变
* angle_diff_an A相相位负跳变
* angle_diff_bn B相相位负跳变
* angle_diff_cn C相相位负跳变
* bph_max_value 不平衡度(单位%
*/
public class BackData extends Structure {
public int qvvr_cata_cause[] = 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 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];
public static class ByReference extends BackData implements Structure.ByReference {
}
public static class ByValue extends BackData implements Structure.ByValue {
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "qvvr_cata_cause", "qvvr_phasetype", "qvvr_cata_type", "hold_time_rms",
"hold_time_dq", "POW_a", "POW_b", "POW_c", "Voltagechange_Va", "Voltagechange_Vb", "Voltagechange_Vc",
"SEG_T_num", "SEG_T0_idx", "SEG_T_idx","SEG_RMS_T_num","SEG_RMS_T_idx", "u_min_num", "ua_min", "ub_min", "uc_min", "u3_min",
"order_min_idx", "angle_diff_ap", "angle_diff_bp", "angle_diff_cp", "angle_diff_an", "angle_diff_bn",
"angle_diff_cn", "bph_max_value" });
}
}

View File

@@ -0,0 +1,30 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import com.sun.jna.Structure;
import java.util.Arrays;
import java.util.List;
public class CauseStruct extends Structure {
//最大能容纳的数据
public static final int MAX_SMP_DATA_LEN = 128 * 50 * 120;
public float smp_va[] = new float[MAX_SMP_DATA_LEN];
public float smp_vb[] = new float[MAX_SMP_DATA_LEN];
public float smp_vc[] = new float[MAX_SMP_DATA_LEN];
public int smp_rate;
public int smp_len;
public float threshold[] = new float[50];
public int cause = 0;
public int no_cal = 0;
public static class ByReference extends CauseStruct implements Structure.ByReference {
}
public static class ByValue extends CauseStruct implements Structure.ByValue {
}
@Override
protected List<String> getFieldOrder() { // 返回值填入的顺序
return Arrays.asList(new String[] { "cause", "no_cal" });
}
}

View File

@@ -0,0 +1,47 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
public class DirectionData{
private int trigTime[] = new int[256];
private float qvvrBeforeRms[] = new float[256];
private float qvvrBeforeZk[] = new float[256];
private float qvvrOccurRms[] = new float[256];
private float qvvrOccurZk[] = new float[256];
private String qvvrPosInfo[] = new String[256];
public int[] getTrigTime() {
return trigTime;
}
public void setTrigTime(int[] trigTime) {
this.trigTime = trigTime;
}
public float[] getQvvrBeforeRms() {
return qvvrBeforeRms;
}
public void setQvvrBeforeRms(float[] qvvrBeforeRms) {
this.qvvrBeforeRms = qvvrBeforeRms;
}
public float[] getQvvrBeforeZk() {
return qvvrBeforeZk;
}
public void setQvvrBeforeZk(float[] qvvrBeforeZk) {
this.qvvrBeforeZk = qvvrBeforeZk;
}
public float[] getQvvrOccurRms() {
return qvvrOccurRms;
}
public void setQvvrOccurRms(float[] qvvrOccurRms) {
this.qvvrOccurRms = qvvrOccurRms;
}
public float[] getQvvrOccurZk() {
return qvvrOccurZk;
}
public void setQvvrOccurZk(float[] qvvrOccurZk) {
this.qvvrOccurZk = qvvrOccurZk;
}
public String[] getQvvrPosInfo() {
return qvvrPosInfo;
}
public void setQvvrPosInfo(String[] qvvrPosInfo) {
this.qvvrPosInfo = qvvrPosInfo;
}
}

View File

@@ -0,0 +1,39 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import lombok.Data;
/**
* @author njcn
* @高级算法返回数据
* @包含RMS值
* @X轴坐标
* @处理返回的结果
*/
@Data
public class EntityAdvancedData {
public float smp_a[];
public float smp_b[];
public float smp_c[];
public float smp_x[];
public int smp_len;
public String sagReason[]; // 暂降原因描述,数据库获取
public String sagType[]; // 暂降类型描述,数据库获取
public String sagPhaseType[]; // 暂降相别 1-一相 2-两相 3-三相
public int backNumber = -1;
public BackData evt_buf[];
public PowerData power_before_buf[];
public PowerData power_after_buf[];
public DirectionData qvvr_direction_info[];
public UtblData qvvr_utbl_info[];
public EntityAdvancedData(int lengthRMS) {
super();
this.smp_a = new float[lengthRMS];
this.smp_b = new float[lengthRMS];
this.smp_c = new float[lengthRMS];
this.smp_x = new float[lengthRMS];
this.sagReason = new String[256];
this.sagType = new String[256];
this.sagPhaseType = new String[256];
}
}

View File

@@ -0,0 +1,27 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
public class PowerData{
private float fundP[] = new float[256];
private float fundQ[] = new float[256];
private float fundS[] = new float[256];
public float[] getFundP() {
return fundP;
}
public void setFundP(float[] fundP) {
this.fundP = fundP;
}
public float[] getFundQ() {
return fundQ;
}
public void setFundQ(float[] fundQ) {
this.fundQ = fundQ;
}
public float[] getFundS() {
return fundS;
}
public void setFundS(float[] fundS) {
this.fundS = fundS;
}
}

View File

@@ -0,0 +1,168 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import java.util.LinkedList;
import java.util.List;
public class PubWaveModel {
/************************
* Comtrate文件相关
*
* @author Yexb
*
**************************/
// 模拟量通道记录类
public static class tagOneChannleCfg {
// 通道序号
public int nIndex;
// 通道名称
public String szChannleName;
// 相位名称
public String szPhasicName;
// 监视的通道名称
public String szMonitoredChannleName;
// 通道的单位
public String szUnitName;
// 通道的系数
public float fCoefficent;
// 通道的便宜量
public float fOffset;
// 起始采样时间的偏移量
public float fTimeOffset;
// 采样值的最小值
public int nMin;
// 采样值的最大值
public int nMax;
// 一次变比
public float fPrimary;
// 二次变比
public float fSecondary;
// 一次值还是二次值标志
public String szValueType;
}
// 数字量通道记录类
public static class tagOneChannleCfg_digital {
// 通道序号
public int nIndex;
// 通道名称
public String szChannleName;
// 相位名称
public String szPhasicName;
// 监视的通道名称
public String szMonitoredChannleName;
// 通道的单位
public int Initial;
}
// 配置文件总类
public static class tagComtradeCfg {
public int nChannelNum;
public int nAnalogNum;// 模拟量通道的个数 WW 2013-05-15
public int nDigitalNum;// 数字量通道的个数 WW 2013-05-15
public List<tagOneChannleCfg> OneChannleCfg;
public List<tagOneChannleCfg_digital> OneChannleCfgDig;
public tagComtradeCfg() {
OneChannleCfg = new LinkedList<tagOneChannleCfg>();
OneChannleCfgDig = new LinkedList<tagOneChannleCfg_digital>();
}
}
public static class tagOneRate {
// 1秒钟内的采样点数
public long nOneSample;
// 总采样点数
public long nSampleNum;
}
// 采样总结构
public static class tagRates {
public int nRates;
public List<tagOneRate> OneRate;
public tagRates() {
OneRate = new LinkedList<tagOneRate>();
}
}
// 采样值结构
public static class tagOneValue {
// 数据点时间
public String szTime;
// 数据点序号
public int nIndex;
// int nValueNum; WW 2013-05-15
// 模拟量数据个数
public int nAnalogValueNum;
// 数字量数据个数
public int nDigitalValueNum;
// 数据区
// float fValue[8];
public List<Float> fValue;// WW 2013-05-15 原来的8通道也是仅考虑了单路的情况如果遇到多路这里会超出
public List<Byte> DigitalValue;// WW 2013-05-15
public tagOneValue() {
fValue = new LinkedList<Float>();
DigitalValue = new LinkedList<Byte>();
}
}
// 采样值总结构
public static class tagValue {
// 数据个数
public int nValueNum;
// 数据区
public List<tagOneValue> OneValueList;
public tagValue() {
OneValueList = new LinkedList<tagOneValue>();
}
}
public static class tagWave {
// 标识 1-二次值的事件波形 2-二次值的RMS 3-一次值的事件波形 4-一次值的RMS
//标识 5-二次值的事件波形 6-二次值的RMS 7-一次值的事件波形 8-一次值的RMS
private int type;
// 相别
private int phaseType;// 0:A相1B相2c相
// X坐标值
private float xvalue;
// y坐标值
private float yvalue;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getPhaseType() {
return phaseType;
}
public void setPhaseType(int phaseType) {
this.phaseType = phaseType;
}
public float getXvalue() {
return xvalue;
}
public void setXvalue(float xvalue) {
this.xvalue = xvalue;
}
public float getYvalue() {
return yvalue;
}
public void setYvalue(float yvalue) {
this.yvalue = yvalue;
}
}
}

View File

@@ -0,0 +1,42 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import com.sun.jna.Structure;
import java.util.Arrays;
import java.util.List;
/**
*
* @author njcn
* 传入参数
* smp_va A相电压波形数据
* smp_vb B相电压波形数据
* smp_vc C相电压波形数据
* smp_rate 波形采样率
* smp_len 每个通道波形数据个数
* evt_num 高级算法返回事件个数
* evt_buf 高级算法返回数据
*/
public class Rect extends Structure {
public static final int MAX_SMP_DATA_LEN = 128*50*120;
public float smp_va[] = new float[MAX_SMP_DATA_LEN];
public float smp_vb[] = new float[MAX_SMP_DATA_LEN];
public float smp_vc[] = new float[MAX_SMP_DATA_LEN];
public int smp_rate;
public int smp_len;
public int evt_num = -1;
public BackData evt_buf[] = new BackData[32];
public static class ByReference extends Rect implements Structure.ByReference {
}
public static class ByValue extends Rect implements Structure.ByValue {
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "evt_num","evt_buf" });
}
}

View File

@@ -0,0 +1,13 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
public class UtblData{
private long trigTime[] = new long[1];
public long[] getTrigTime() {
return trigTime;
}
public void setTrigTime(long[] trigTime) {
this.trigTime = trigTime;
}
}

View File

@@ -0,0 +1,296 @@
package com.njcn.advance.pojo.dto.waveAnalysis;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author hongawen
* @Date: 2018/12/4 10:03
*/
public class WaveData implements Serializable {
//标题数据
private List<String> tmpWaveTitle = new ArrayList<>();
//瞬时波形的数据
List<List<Float>> sunData = new ArrayList<>();
//RMS波形的数据
List<List<Float>> rmsData = new ArrayList<>();
//相别个数
private int iPhasic = 0;
//PT变比
Float pt = 0.0f;
//CT变比
Float ct = 0.0f;
private String a="A相";
private String b="B相";
private String c="C相";
//波形采样率
private long nOneWaveNum = 32;
private Date firstTime;//暂降触发第一次
private Integer firstMs;
//发生时刻
String time;
//暂降类型
String waveType;
//严重度
float yzd;
//监测点名称
String lineName;
//暂降幅值
Float eventValue;
//持续时间
Float persistTime;
//暂降触发时间
private Date trigeTime;
private boolean openTri=false;
//最大最小值集合
private List<PubWaveModel.tagWave> readComtrade = new ArrayList<>();
//变电站名称
private String subName;
public WaveData() {
iPhasic = 0;
}
public AnalyWaveModel.tagRates getRatesCfg() {
return RatesCfg;
}
public void setRatesCfg(AnalyWaveModel.tagRates ratesCfg) {
RatesCfg = ratesCfg;
}
private AnalyWaveModel.tagRates RatesCfg;//cfg_采样率实体类
public List<PubWaveModel.tagWave> getReadComtrade() {
return readComtrade;
}
public void setReadComtrade(List<PubWaveModel.tagWave> readComtrade) {
this.readComtrade = readComtrade;
}
public List<List<Float>> getSunData() {
return sunData;
}
public void setSunData(List<List<Float>> sunData) {
this.sunData = sunData;
}
public List<List<Float>> getRmsData() {
return rmsData;
}
public void setRmsData(List<List<Float>> rmsData) {
this.rmsData = rmsData;
}
public Float getPt() {
return pt;
}
public void setPt(Float pt) {
this.pt = pt;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getWaveType() {
return waveType;
}
public void setWaveType(String waveType) {
this.waveType = waveType;
}
public float getYzd() {
return yzd;
}
public void setYzd(float yzd) {
this.yzd = yzd;
}
public Float getCt() {
return ct;
}
public void setCt(Float ct) {
this.ct = ct;
}
public long getnOneWaveNum() {
return nOneWaveNum;
}
public void setnOneWaveNum(long nOneWaveNum) {
this.nOneWaveNum = nOneWaveNum;
}
public Date getFirstTime() {
return firstTime;
}
public void setFirstTime(Date firstTime) {
this.firstTime = firstTime;
}
public Integer getFirstMs() {
return firstMs;
}
public void setFirstMs(Integer firstMs) {
this.firstMs = firstMs;
}
public String getLineName() {
return lineName;
}
public void setLineName(String lineName) {
this.lineName = lineName;
}
public Float getEventValue() {
return eventValue;
}
public void setEventValue(Float eventValue) {
this.eventValue = eventValue;
}
public Float getPersistTime() {
return persistTime;
}
public void setPersistTime(Float persistTime) {
this.persistTime = persistTime;
}
public Date getTrigeTime() {
return trigeTime;
}
public void setTrigeTime(Date trigeTime) {
this.trigeTime = trigeTime;
}
public boolean getOpenTri() {
return openTri;
}
public void setOpen(boolean open) {
this.openTri = open;
}
public List<String> getTmpWaveTitle() {
return tmpWaveTitle;
}
public void setTmpWaveTitle(List<String> tmpWaveTitle) {
this.tmpWaveTitle = tmpWaveTitle;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
public String getSubName() {
return subName;
}
public void setSubName(String subName) {
this.subName = subName;
}
public int getiPhasic() {
return iPhasic;
}
public void setiPhasic(int iPhasic) {
this.iPhasic = iPhasic;
}
@Override
public String toString() {
return "WaveData{" +
"tmpWaveTitle=" + tmpWaveTitle +
", sunData=" + sunData +
", rmsData=" + rmsData +
", iPhasic=" + iPhasic +
", pt=" + pt +
", ct=" + ct +
", a='" + a + '\'' +
", b='" + b + '\'' +
", c='" + c + '\'' +
", nOneWaveNum=" + nOneWaveNum +
", firstTime=" + firstTime +
", firstMs=" + firstMs +
", RatesCfg=" + RatesCfg +
", time='" + time + '\'' +
", waveType='" + waveType + '\'' +
", yzd=" + yzd +
", lineName='" + lineName + '\'' +
", eventValue=" + eventValue +
", persistTime=" + persistTime +
", trigeTime=" + trigeTime +
", openTri=" + openTri +
", readComtrade=" + readComtrade +
", subName='" + subName + '\'' +
'}';
}
}

View File

@@ -0,0 +1,33 @@
package com.njcn.advance.pojo.po;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("pqs_relevancy_log")
public class PqsRelevanceLog extends BaseEntity {
/**
* 归一化算法时间
*/
@TableId("Time_Id")
private LocalDateTime timeId;
/**
* 归一化算法描述
*/
private String contentDes;
private Integer state;
}

View File

@@ -0,0 +1,49 @@
package com.njcn.advance.utils;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;
import com.njcn.event.api.RmpEventDetailFeignClient;
import com.njcn.oss.utils.FileStorageUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
/**
* pqs
* 波形操作工具类
* @author cdf
* @date 2023/8/1
*/
@Component
@RequiredArgsConstructor
@Slf4j
public class WaveUtils {
private final FileStorageUtil fileStorageUtil;
/**
* 读取文件服务器波形数据
* @author cdf
* @date 2023/8/1
*/
public String getFile(String filePath){
String temJson = null;
try(InputStream inputStream = fileStorageUtil.getFileStream(filePath)){
temJson = IoUtil.read(inputStream, CharsetUtil.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
return temJson;
}
public static void main(String[] args) {
}
}