feat(file): 添加四通道波形图生成功能
- 增加 Objects 工具类导入用于对象比较 - 实现四通道波形图的处理逻辑,支持 4 个数据详情的绘制 - 添加 getTitle2 方法用于生成电压电流标题 - 实现 composeImage 方法用于合成四张图片为一张 - 扩展波形图生成逻辑以支持瞬时数据和有效值数据的四通道显示
This commit is contained in:
@@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author hongawen
|
||||
@@ -206,6 +207,37 @@ public class WavePicComponent {
|
||||
waveDataDetail.getColors(), waveDataDetail.getIsOpen()
|
||||
);
|
||||
picPath = composeImage(firstPic, secondPic);
|
||||
} else if (waveDataDetails.size() == 4) {
|
||||
WaveDataDetail waveDataDetail1 = waveDataDetails.get(0);
|
||||
String pic1 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail1.getChannelName(),time), waveDataDetail1.getInstantData().getAValue(),
|
||||
waveDataDetail1.getInstantData().getBValue(), waveDataDetail1.getInstantData().getCValue(),
|
||||
waveDataDetail1.getUnit(), waveDataDetail1.getInstantData().getMax(), waveDataDetail1.getInstantData().getMin(),
|
||||
waveDataDetail1.getA(), waveDataDetail1.getB(), waveDataDetail1.getC(),
|
||||
waveDataDetail1.getColors(), waveDataDetail1.getIsOpen()
|
||||
);
|
||||
|
||||
WaveDataDetail waveDataDetail2 = waveDataDetails.get(1);
|
||||
String pic2 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail2.getChannelName(),time), waveDataDetail2.getInstantData().getAValue(),
|
||||
waveDataDetail2.getInstantData().getBValue(), waveDataDetail2.getInstantData().getCValue(),
|
||||
waveDataDetail2.getUnit(), waveDataDetail2.getInstantData().getMax(), waveDataDetail2.getInstantData().getMin(),
|
||||
waveDataDetail2.getA(), waveDataDetail2.getB(), waveDataDetail2.getC(),
|
||||
waveDataDetail2.getColors(), waveDataDetail2.getIsOpen());
|
||||
|
||||
WaveDataDetail waveDataDetail3 = waveDataDetails.get(2);
|
||||
String pic3 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail3.getChannelName(),time), waveDataDetail3.getInstantData().getAValue(),
|
||||
waveDataDetail3.getInstantData().getBValue(), waveDataDetail3.getInstantData().getCValue(),
|
||||
waveDataDetail3.getUnit(), waveDataDetail3.getInstantData().getMax(), waveDataDetail3.getInstantData().getMin(),
|
||||
waveDataDetail3.getA(), waveDataDetail3.getB(), waveDataDetail3.getC(),
|
||||
waveDataDetail3.getColors(), waveDataDetail3.getIsOpen());
|
||||
|
||||
WaveDataDetail waveDataDetail4 = waveDataDetails.get(3);
|
||||
String pic4 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail4.getChannelName(),time), waveDataDetail4.getInstantData().getAValue(),
|
||||
waveDataDetail4.getInstantData().getBValue(), waveDataDetail4.getInstantData().getCValue(),
|
||||
waveDataDetail4.getUnit(), waveDataDetail4.getInstantData().getMax(), waveDataDetail4.getInstantData().getMin(),
|
||||
waveDataDetail4.getA(), waveDataDetail4.getB(), waveDataDetail4.getC(),
|
||||
waveDataDetail4.getColors(), waveDataDetail4.getIsOpen()
|
||||
);
|
||||
picPath = composeImageZl(pic1, pic2, pic3, pic4);
|
||||
}
|
||||
return picPath;
|
||||
}
|
||||
@@ -286,10 +318,55 @@ public class WavePicComponent {
|
||||
waveDataDetail.getColors(), waveDataDetail.getIsOpen()
|
||||
);
|
||||
picPath = composeImage(firstPic, secondPic);
|
||||
} else if (waveDataDetails.size() == 4) {
|
||||
WaveDataDetail waveDataDetail1 = waveDataDetails.get(0);
|
||||
String pic1 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail1.getChannelName(),time), waveDataDetail1.getRmsData().getAValue(),
|
||||
waveDataDetail1.getRmsData().getBValue(), waveDataDetail1.getRmsData().getCValue(),
|
||||
waveDataDetail1.getUnit(), waveDataDetail1.getRmsData().getMax(), waveDataDetail1.getRmsData().getMin(),
|
||||
waveDataDetail1.getA(), waveDataDetail1.getB(), waveDataDetail1.getC(),
|
||||
waveDataDetail1.getColors(), waveDataDetail1.getIsOpen()
|
||||
);
|
||||
|
||||
WaveDataDetail waveDataDetail2 = waveDataDetails.get(1);
|
||||
String pic2 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail2.getChannelName(),time), waveDataDetail2.getRmsData().getAValue(),
|
||||
waveDataDetail2.getRmsData().getBValue(), waveDataDetail2.getRmsData().getCValue(),
|
||||
waveDataDetail2.getUnit(), waveDataDetail2.getRmsData().getMax(), waveDataDetail2.getRmsData().getMin(),
|
||||
waveDataDetail2.getA(), waveDataDetail2.getB(), waveDataDetail2.getC(),
|
||||
waveDataDetail2.getColors(), waveDataDetail2.getIsOpen());
|
||||
|
||||
WaveDataDetail waveDataDetail3 = waveDataDetails.get(2);
|
||||
String pic3 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail3.getChannelName(),time), waveDataDetail3.getRmsData().getAValue(),
|
||||
waveDataDetail3.getRmsData().getBValue(), waveDataDetail3.getRmsData().getCValue(),
|
||||
waveDataDetail3.getUnit(), waveDataDetail3.getRmsData().getMax(), waveDataDetail3.getRmsData().getMin(),
|
||||
waveDataDetail3.getA(), waveDataDetail3.getB(), waveDataDetail3.getC(),
|
||||
waveDataDetail3.getColors(), waveDataDetail3.getIsOpen());
|
||||
|
||||
WaveDataDetail waveDataDetail4 = waveDataDetails.get(3);
|
||||
String pic4 = drawPicUtil.drawWavePic(getTitle2(waveDataDetail4.getChannelName(),time), waveDataDetail4.getRmsData().getAValue(),
|
||||
waveDataDetail4.getRmsData().getBValue(), waveDataDetail4.getRmsData().getCValue(),
|
||||
waveDataDetail4.getUnit(), waveDataDetail4.getRmsData().getMax(), waveDataDetail4.getRmsData().getMin(),
|
||||
waveDataDetail4.getA(), waveDataDetail4.getB(), waveDataDetail4.getC(),
|
||||
waveDataDetail4.getColors(), waveDataDetail4.getIsOpen()
|
||||
);
|
||||
picPath = composeImageZl(pic1, pic2, pic3, pic4);
|
||||
}
|
||||
return picPath;
|
||||
}
|
||||
|
||||
public String getTitle2(String channelName, String time) {
|
||||
String title;
|
||||
if (channelName.toUpperCase().startsWith("SU")) {
|
||||
title ="电压-电网侧" + " 发生时刻:" + time;
|
||||
} else if (channelName.toUpperCase().startsWith("SI")) {
|
||||
title ="电流-电网侧" + " 发生时刻:" + time;
|
||||
} else if (channelName.toUpperCase().startsWith("LU")) {
|
||||
title ="电压-负载侧" + " 发生时刻:" + time;
|
||||
} else {
|
||||
title ="电流-负载侧" + " 发生时刻:" + time;
|
||||
}
|
||||
return title;
|
||||
}
|
||||
|
||||
/***
|
||||
* 绘制RMS波形图 App端用来绘制图片,会去掉部分数据,只保留开始数据 结束数据
|
||||
* @author xy
|
||||
@@ -364,6 +441,59 @@ public class WavePicComponent {
|
||||
}
|
||||
}
|
||||
|
||||
private String composeImage(String firstPic, String secondPic, String thirdPic, String forthPic) {
|
||||
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);
|
||||
|
||||
int[] ImageArrayThree = null;
|
||||
if (Objects.equals(thirdPic, "")) {
|
||||
BufferedImage imageThree = ImgUtil.toBufferedImage(ImgUtil.toImage(thirdPic.substring(22)), ImgUtil.IMAGE_TYPE_PNG);
|
||||
int width3 = imageThree.getWidth();
|
||||
int height3 = imageThree.getHeight();
|
||||
ImageArrayThree = new int[width3 * height3];
|
||||
ImageArrayThree = imageThree.getRGB(0, 0, width, height, ImageArrayThree, 0, width);
|
||||
}
|
||||
|
||||
int[] ImageArrayForth = null;
|
||||
if (Objects.equals(forthPic, "")) {
|
||||
BufferedImage imageForth = ImgUtil.toBufferedImage(ImgUtil.toImage(forthPic.substring(22)), ImgUtil.IMAGE_TYPE_PNG);
|
||||
int width4 = imageForth.getWidth();
|
||||
int height4 = imageForth.getHeight();
|
||||
ImageArrayForth = new int[width4 * height4];
|
||||
ImageArrayForth = imageForth.getRGB(0, 0, width, height, ImageArrayForth, 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);
|
||||
if (!Objects.isNull(ImageArrayThree)) {
|
||||
imageNew.setRGB(0, height, width, height, ImageArrayThree, 0, width);
|
||||
}
|
||||
if (!Objects.isNull(ImageArrayForth)) {
|
||||
imageNew.setRGB(0, height, width, height, ImageArrayForth, 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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* app越限指标图
|
||||
* @param title
|
||||
|
||||
Reference in New Issue
Block a user