添加暂态事件波形图后台绘图并保存文件服务器

This commit is contained in:
2023-09-22 09:00:12 +08:00
parent 4a4f1b56ba
commit fe7c16dda1
17 changed files with 2037 additions and 1 deletions

5
.gitignore vendored
View File

@@ -44,4 +44,7 @@ yarn.lock
rebel.xml rebel.xml
!DmJdbcDriver18.jar !DmJdbcDriver18.jar
!kingbase8-8.6.0.jar !kingbase8-8.6.0.jar
/.fastRequest/collections/Root/Default Group/directory.json
/.fastRequest/collections/Root/directory.json
/.fastRequest/config/fastRequestCurrentProjectConfig.json

View File

@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.4/apache-maven-3.9.4-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>pqs-common</artifactId>
<groupId>com.njcn</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-event</artifactId>
<name>common-event</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-echarts</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-oss</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,152 @@
package com.njcn.event.file.component;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.FileUtil;
import com.njcn.echarts.util.DrawPicUtil;
import com.njcn.event.file.pojo.bo.WaveDataDetail;
import com.njcn.event.file.pojo.dto.WaveDataDTO;
import com.njcn.event.file.pojo.enums.WaveFileResponseEnum;
import com.njcn.oss.constant.OssPath;
import com.njcn.oss.utils.FileStorageUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import sun.awt.image.BufferedImageGraphicsConfig;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年09月21日 09:18
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class WavePicComponent {
private final DrawPicUtil drawPicUtil;
private final FileStorageUtil fileStorageUtil;
/***
* 绘制瞬时波形图
* @author hongawen
* @date 2023/9/21 15:32
* @return String 文件地址
*/
public String generateImageShun(WaveDataDTO waveDataDTO, List<WaveDataDetail> waveDataDetails) {
String picPath = null;
String time = waveDataDTO.getTime();
String title = "监测点名称:" + waveDataDTO.getMonitorName() + " 发生时刻:" + time;
WaveDataDetail waveDataDetail = waveDataDetails.get(0);
String firstPic = drawPicUtil.drawWavePic(title, waveDataDetail.getInstantData().getAValue(),
waveDataDetail.getInstantData().getBValue(), waveDataDetail.getInstantData().getCValue(),
waveDataDetail.getUnit(), waveDataDetail.getInstantData().getMax(), waveDataDetail.getInstantData().getMin(),
waveDataDetail.getA(), waveDataDetail.getB(), waveDataDetail.getC(),
waveDataDetail.getColors(), waveDataDetail.getIsOpen()
);
String secondPic;
if (waveDataDetails.size() == 1) {
//将图片上传到minioss
InputStream instantStream = IoUtil.toStream(firstPic, CharsetUtil.UTF_8);
picPath = fileStorageUtil.uploadStream(instantStream, OssPath.EVENT_WAVE_PIC, FileUtil.generateFileName("png"));
} else if (waveDataDetails.size() == 2) {
//绘制第二个电压瞬时波形图
waveDataDetail = waveDataDetails.get(1);
secondPic = drawPicUtil.drawWavePic("", waveDataDetail.getInstantData().getAValue(),
waveDataDetail.getInstantData().getBValue(), waveDataDetail.getInstantData().getCValue(),
waveDataDetail.getUnit(), waveDataDetail.getInstantData().getMax(), waveDataDetail.getInstantData().getMin(),
waveDataDetail.getA(), waveDataDetail.getB(), waveDataDetail.getC(),
waveDataDetail.getColors(), waveDataDetail.getIsOpen()
);
picPath = composeImage(firstPic, secondPic);
}
return picPath;
}
/***
* 绘制RMS波形图
* @author hongawen
* @date 2023/9/21 15:32
* @return String 文件地址
*/
public String generateImageRms(WaveDataDTO waveDataDTO, List<WaveDataDetail> waveDataDetails) {
String picPath = null;
String time = waveDataDTO.getTime();
String title = "监测点名称:" + waveDataDTO.getMonitorName() + " 发生时刻:" + time;
WaveDataDetail waveDataDetail = waveDataDetails.get(0);
String firstPic = drawPicUtil.drawWavePic(title, waveDataDetail.getRmsData().getAValue(),
waveDataDetail.getRmsData().getBValue(), waveDataDetail.getRmsData().getCValue(),
waveDataDetail.getUnit(), waveDataDetail.getRmsData().getMax(), waveDataDetail.getRmsData().getMin(),
waveDataDetail.getA(), waveDataDetail.getB(), waveDataDetail.getC(),
waveDataDetail.getColors(), waveDataDetail.getIsOpen()
);
String secondPic;
if (waveDataDetails.size() == 1) {
//将图片上传到minioss
InputStream instantStream = IoUtil.toStream(firstPic, CharsetUtil.UTF_8);
picPath = fileStorageUtil.uploadStream(instantStream, OssPath.EVENT_WAVE_PIC, FileUtil.generateFileName("png"));
} else if (waveDataDetails.size() == 2) {
//绘制第二个电压瞬时波形图
waveDataDetail = waveDataDetails.get(1);
secondPic = drawPicUtil.drawWavePic("", waveDataDetail.getRmsData().getAValue(),
waveDataDetail.getRmsData().getBValue(), waveDataDetail.getRmsData().getCValue(),
waveDataDetail.getUnit(), waveDataDetail.getRmsData().getMax(), waveDataDetail.getRmsData().getMin(),
waveDataDetail.getA(), waveDataDetail.getB(), waveDataDetail.getC(),
waveDataDetail.getColors(), waveDataDetail.getIsOpen()
);
picPath = composeImage(firstPic, secondPic);
}
return picPath;
}
/***
* 合成图片
* @author hongawen
* @date 2023/9/21 15:33
* @param firstPic 第一张图
* @param secondPic 第二张图
* @return String
*/
private String composeImage(String firstPic, String secondPic) {
try {
//第一张图片 base64截取删除前缀data:image/png;base64,
BufferedImage imageOne = ImgUtil.toBufferedImage(ImgUtil.toImage(firstPic.substring(22)), ImgUtil.IMAGE_TYPE_PNG);
int width = imageOne.getWidth();
int height = imageOne.getHeight();
int[] imageArrayOne = new int[width * height];
imageArrayOne = imageOne.getRGB(0, 0, width, height, imageArrayOne, 0, width);
//第二张图片 base64截取删除前缀data:image/png;base64,
BufferedImage imageTwo = ImgUtil.toBufferedImage(ImgUtil.toImage(secondPic.substring(22)), ImgUtil.IMAGE_TYPE_PNG);
int width2 = imageTwo.getWidth();
int height2 = imageTwo.getHeight();
int[] ImageArrayTwo = new int[width2 * height2];
ImageArrayTwo = imageTwo.getRGB(0, 0, width, height, ImageArrayTwo, 0, width);
//新图片
BufferedImage imageNew = new BufferedImage(width, height * 2, BufferedImage.TYPE_INT_RGB);
BufferedImageGraphicsConfig config = BufferedImageGraphicsConfig.getConfig(imageNew);
imageNew = config.createCompatibleImage(width, height * 2, Transparency.TRANSLUCENT);
imageNew.setRGB(0, 0, width, height, imageArrayOne, 0, width);
imageNew.setRGB(0, height, width, height, ImageArrayTwo, 0, width);
String resultImg = ImgUtil.toBase64(imageNew, ImgUtil.IMAGE_TYPE_PNG);
byte[] bytes = Base64.getDecoder().decode(resultImg);
return fileStorageUtil.uploadStream(new ByteArrayInputStream(bytes), OssPath.EVENT_WAVE_PIC, FileUtil.generateFileName("png"));
} catch (Exception e) {
throw new BusinessException(WaveFileResponseEnum.COMPOSE_PIC_ERROR);
}
}
}

View File

@@ -0,0 +1,25 @@
package com.njcn.event.file.pojo.bo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年09月20日 16:11
*/
@Data
public class InstantData {
private Float max;
private Float min;
List<List<Float>> aValue =new ArrayList<>();
List<List<Float>> bValue =new ArrayList<>();
List<List<Float>> cValue =new ArrayList<>();
}

View File

@@ -0,0 +1,25 @@
package com.njcn.event.file.pojo.bo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年09月20日 16:12
*/
@Data
public class RmsData {
private Float max;
private Float min;
List<List<Float>> aValue =new ArrayList<>();
List<List<Float>> bValue =new ArrayList<>();
List<List<Float>> cValue =new ArrayList<>();
}

View File

@@ -0,0 +1,33 @@
package com.njcn.event.file.pojo.bo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年09月20日 16:13
*/
@Data
public class WaveDataDetail {
private InstantData instantData;
private RmsData rmsData;
private String a ="A相";
private String b ="B相";
private String c ="C相";
private String unit;
private Boolean isOpen = false;
private String title;
private List<String> colors= new ArrayList<>();
}

View File

@@ -0,0 +1,46 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* 模拟量通道记录类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AnalogDTO implements Serializable {
// 通道序号
private Integer nIndex;
// 通道名称
private String szChannleName;
// 相位名称
private String szPhasicName;
// 监视的通道名称
private String szMonitoredChannleName;
// 通道的单位
private String szUnitName;
// 通道的系数
private Float fCoefficent;
// 通道的便宜量
private Float fOffset;
// 起始采样时间的偏移量
private Float fTimeOffset;
// 采样值的最小值
private Integer nMin;
// 采样值的最大值
private Integer nMax;
// 一次变比
private Float fPrimary;
// 二次变比
private Float fSecondary;
// 一次值还是二次值标志
private String szValueType;
}

View File

@@ -0,0 +1,50 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* CFG配置文件总类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ComtradeCfgDTO implements Serializable {
private Integer nChannelNum;
private Integer nPhasic;// 模拟量通道的个数 yxb 2020-12-15
private Integer nAnalogNum;// 模拟量通道的个数 WW 2013-05-15
private Integer nDigitalNum;// 数字量通道的个数 WW 2013-05-15
private Date timeStart;// 暂态记录时间 yxb 2022-06-06
private Date timeTrige;// 暂态触发时间 yxb 2022-06-06
private List<AnalogDTO> lstAnalogDTO;//模拟量通道记录
private List<DigitalDTO> lstDigitalDTO;//数字量通道记录
public Integer nRates;//对应采样次数
public List<RateDTO> lstRate;//采样率合集
// add by sw 暂降触发时间
private Date firstTime; // 暂降触发第一次
private Integer firstMs; // 暂降触发第一次毫秒
// 波形前推周波束
private Integer nPush = 0;
// 最终采样率,计算的时候只用一个采样率
private Long finalSampleRate;
// 整个波形大小
private Long nAllWaveNum = 0L;
/***
* 赋值编码格式(二进制)
*/
private String strBinType;
}

View File

@@ -0,0 +1,30 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* 数字量通道记录类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DigitalDTO implements Serializable {
// 通道序号
private Integer nIndex;
// 通道名称
private String szChannleName;
// 相位名称
private String szPhasicName;
// 监视的通道名称
private String szMonitoredChannleName;
// 通道的单位
private Integer Initial;
}

View File

@@ -0,0 +1,28 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* 特征值计算类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EigenvalueDTO implements Serializable {
//是特征幅值(残余电压百分比)
private float amplitude;
//是特征幅值(残余电压)
private float residualVoltage;
//额定定压(动态电压)
private float ratedVoltage;
//持续时间
private float durationTime;
}

View File

@@ -0,0 +1,27 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* 突变量计算类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MutationDTO implements Serializable {
private List<List<Float>> listRms_Offline = new ArrayList<>();//离线数据RMS有效值数据
private List<List<Float>> listTBL_Offline = new ArrayList<>();//离线数据突变量数据
private double fMinMagA = 99999d;
private double fMinMagB = 99999d;
private double fMinMagC = 99999d;
}

View File

@@ -0,0 +1,24 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* 采样率类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RateDTO implements Serializable {
// 1秒钟内的采样点数
private Long nOneSample;
// 总采样点数
private Long nSampleNum;
}

View File

@@ -0,0 +1,44 @@
package com.njcn.event.file.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @author yxb
* @version 1.0.0
* @date 2022年06月02日 20:03
* 返回波形数据类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WaveDataDTO implements Serializable {
//CFG实体类
private ComtradeCfgDTO comtradeCfgDTO;
//波形对应的标题
private List<String> waveTitle;
//波形对应的值
private List<List<Float>> listWaveData;
//波形RMS值
private List<List<Float>> listRmsData;
//RMS最小值
private List<List<Float>> listRmsMinData;
//波形对应的相别数量
private Integer iPhasic;
//接线方式(0.星型接法;1.三角型接法;2.开口三角型接法)
private Integer ptType;
//PT变比
private Double pt;
//CT变比"
private Double ct;
//暂降发生时刻
private String time;
//测点名称
private String monitorName;
}

View File

@@ -0,0 +1,33 @@
package com.njcn.event.file.pojo.enums;
import lombok.Getter;
/**
* @author hongawen
* @version 1.0.0
* @date 2021年12月20日 09:56
*/
@Getter
public enum WaveFileResponseEnum {
/**
* 暂降模块异常响应码的范围:
* A00650 ~ A00749
*/
EVENT_NOT_FOUND("A00651","暂降事件或监测点不存在"),
ANALYSE_WAVE_NOT_FOUND("A00652","波形文件找不到"),
WAVE_DATA_INVALID("A00654","波形文件数据缺失"),
DAT_DATA_ERROR("A00653","dat文件数据读取失败"),
RMS_DATA_ERROR("A00653","rms数据读取失败"),
COMPOSE_PIC_ERROR("A00653","合成波形图失败"),
;
private final String code;
private final String message;
WaveFileResponseEnum(String code, String message) {
this.code = code;
this.message = message;
}
}

View File

@@ -0,0 +1,189 @@
package com.njcn.event.file.utils;
import com.njcn.event.file.pojo.bo.InstantData;
import com.njcn.event.file.pojo.bo.RmsData;
import com.njcn.event.file.pojo.bo.WaveDataDetail;
import com.njcn.event.file.pojo.dto.WaveDataDTO;
import java.util.ArrayList;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年09月20日 16:14
*/
public class WaveUtil {
/**
* 筛选后台绘图所需的瞬时、RMS等一次值数据
*/
public static List<WaveDataDetail> filterWaveData(WaveDataDTO waveDataDTO) {
List<WaveDataDetail> waveDataDetails = new ArrayList<>();
List<String> waveTitle = waveDataDTO.getWaveTitle();
boolean openTri = waveDataDTO.getPtType() == 2;
/************ 一个图形的相别决定了图形个数 Modify by yexb -----start ***********/
Integer iPhase = waveDataDTO.getIPhasic();
int picCounts = (waveTitle.size() - 1) / iPhase;
/**处理相别的颜色**/
List<String> colors = new ArrayList<>();
//遍历图形个数
for (int i = 0; i < picCounts; i++) {
WaveDataDetail waveDataDetail = new WaveDataDetail();
switch (iPhase) {
case 1:
waveDataDetail.setA(waveTitle.get(i + 1).substring(1));
waveDataDetail.setB("");
waveDataDetail.setC("");
colors.add("#DAA520");
colors.add("#fff");
colors.add("#fff");
break;
case 2:
waveDataDetail.setA(waveTitle.get(i * 2 + 1).substring(1));
waveDataDetail.setB(waveTitle.get(i * 2 + 2).substring(1));
waveDataDetail.setC("");
colors.add("#DAA520");
colors.add("#2E8B57");
colors.add("#fff");
break;
case 3:
waveDataDetail.setA(waveTitle.get(i * 3 + 1).substring(1));
waveDataDetail.setB(waveTitle.get(i * 3 + 2).substring(1));
waveDataDetail.setC(waveTitle.get(i * 3 + 3).substring(1));
colors.add("#DAA520");
colors.add("#2E8B57");
colors.add("#A52a2a");
break;
}
waveDataDetail.setColors(colors);
float xishu = waveDataDTO.getPt().floatValue();
if (waveTitle.get(iPhase * i + 1).substring(0, 1).equalsIgnoreCase("U")) {
waveDataDetail.setUnit("kV");
xishu = xishu / 1000;
} else {
waveDataDetail.setUnit("A");
xishu = waveDataDTO.getCt().floatValue();
}
Float sfMax = 0f, sfMin = 0f, rfMax = 0f, rfMin = 0f;
List<List<Float>> sAValue = new ArrayList<>(), sBValue = new ArrayList<>(), sCValue = new ArrayList<>(), rAValue = new ArrayList<>(), rBValue = new ArrayList<>(), rCValue = new ArrayList<>();
List<List<Float>> sunData = waveDataDTO.getListWaveData();
for (int j = 0; j < sunData.size(); j++) {
float x = sunData.get(j).get(0);
float shunFirstA = 0f, shunFirstB = 0f, shunFirstC = 0f;
//根据相别来确认标题的名称
for (int m = 0; m < iPhase; m++) {
if (waveTitle.get(iPhase * i + m + 1).substring(1).contains("A")) {
float tmpShunFirstA = sunData.get(j).get(iPhase * i + m + 1) * xishu;
shunFirstA = tmpShunFirstA;
sAValue.add(new ArrayList<Float>() {{
add(x);
add(tmpShunFirstA);
}});
}
if (waveTitle.get(iPhase * i + m + 1).substring(1).contains("B")) {
float tmpShunFirstB = sunData.get(j).get(iPhase * i + m + 1) * xishu;
shunFirstB = tmpShunFirstB;
sBValue.add(new ArrayList<Float>() {{
add(x);
add(tmpShunFirstB);
}});
}
if (waveTitle.get(iPhase * i + m + 1).substring(1).contains("C")) {
float tmpShunFirstC = sunData.get(j).get(iPhase * i + m + 1) * xishu;
shunFirstC = tmpShunFirstC;
sCValue.add(new ArrayList<Float>() {{
add(x);
add(tmpShunFirstC);
}});
}
}
sfMax = getMax(sfMax, shunFirstA, shunFirstB, shunFirstC);
if (openTri) {
sfMin = getMinOpen(sfMin, shunFirstA, shunFirstC);
} else {
sfMin = getMin(sfMin, shunFirstA, shunFirstB, shunFirstC);
}
}
InstantData instantData = new InstantData();
instantData.setAValue(sAValue);
instantData.setBValue(sBValue);
instantData.setCValue(sCValue);
instantData.setMax(sfMax);
instantData.setMin(sfMin);
List<List<Float>> rmsData = waveDataDTO.getListRmsData();
for (int k = 0; k < rmsData.size(); k++) {
float x = rmsData.get(k).get(0);
float rmsFirstA = 0f, rmsFirstB = 0f, rmsFirstC = 0f;
//根据相别来确认标题的名称
for (int m = 0; m < iPhase; m++) {
if (waveTitle.get(iPhase * i + m + 1).substring(1).contains("A")) {
float tmpRmsFirstA = rmsData.get(k).get(iPhase * i + m + 1) * xishu;
rmsFirstA = tmpRmsFirstA;
rAValue.add(new ArrayList<Float>() {{
add(x);
add(tmpRmsFirstA);
}});
}
if (waveTitle.get(iPhase * i + m + 1).substring(1).contains("B")) {
float tmpRmsFirstB = rmsData.get(k).get(iPhase * i + m + 1) * xishu;
rmsFirstB = tmpRmsFirstB;
rBValue.add(new ArrayList<Float>() {{
add(x);
add(tmpRmsFirstB);
}});
}
if (waveTitle.get(iPhase * i + m + 1).substring(1).contains("C")) {
float tmpRmsFirstC = rmsData.get(k).get(iPhase * i + m + 1) * xishu;
rmsFirstC = tmpRmsFirstC;
rCValue.add(new ArrayList<Float>() {{
add(x);
add(tmpRmsFirstC);
}});
}
}
rfMax = getMax(sfMax, rmsFirstA, rmsFirstB, rmsFirstC);
if (openTri) {
rfMin = getMinOpen(sfMin, rmsFirstA, rmsFirstC);
} else {
rfMin = getMin(sfMin, rmsFirstA, rmsFirstB, rmsFirstC);
}
}
RmsData rmsData1 = new RmsData();
rmsData1.setAValue(rAValue);
rmsData1.setBValue(rBValue);
rmsData1.setCValue(rCValue);
rmsData1.setMax(rfMax);
rmsData1.setMin(rfMin);
waveDataDetail.setInstantData(instantData);
waveDataDetail.setRmsData(rmsData1);
waveDataDetail.setIsOpen(openTri);
waveDataDetails.add(waveDataDetail);
}
/************ Modify by yexb -----end ***********/
return waveDataDetails;
}
private static Float getMinOpen(Float temp, float tempA, float tempB) {
temp = temp < tempA ? temp : tempA;
temp = temp < tempB ? temp : tempB;
return temp;
}
private static float getMin(float temp, float tempA, float tempB, float tempC) {
temp = Math.min(temp, tempA);
temp = Math.min(temp, tempB);
temp = Math.min(temp, tempC);
return temp;
}
private static float getMax(float temp, float tempA, float tempB, float tempC) {
temp = Math.max(temp, tempA);
temp = Math.max(temp, tempB);
temp = Math.max(temp, tempC);
return temp;
}
}