diff --git a/pqs-common/common-event/src/main/java/com/njcn/event/file/component/WavePicComponent.java b/pqs-common/common-event/src/main/java/com/njcn/event/file/component/WavePicComponent.java index 068c6c574..d8ac28618 100644 --- a/pqs-common/common-event/src/main/java/com/njcn/event/file/component/WavePicComponent.java +++ b/pqs-common/common-event/src/main/java/com/njcn/event/file/component/WavePicComponent.java @@ -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