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 filterWaveData(WaveDataDTO waveDataDTO) { List waveDataDetails = new ArrayList<>(); List waveTitle = waveDataDTO.getWaveTitle(); //通道名称,针对治理项目波形文件处理 List channelNames = waveDataDTO.getChannelNames(); boolean openTri = waveDataDTO.getPtType() == 2; /************ 一个图形的相别决定了图形个数 Modify by yexb -----start ***********/ Integer iPhase = waveDataDTO.getIPhasic(); int picCounts = (waveTitle.size() - 1) / iPhase; /**处理相别的颜色**/ List 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"); waveDataDetail.setChannelName(channelNames.get(i + 1)); 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"); waveDataDetail.setChannelName(channelNames.get(i * 2 + 1)); 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"); waveDataDetail.setChannelName(channelNames.get(i * 3 + 1)); 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> sAValue = new ArrayList<>(), sBValue = new ArrayList<>(), sCValue = new ArrayList<>(), rAValue = new ArrayList<>(), rBValue = new ArrayList<>(), rCValue = new ArrayList<>(); List> 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() {{ 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() {{ 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() {{ 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> 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() {{ 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() {{ 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() {{ 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; } }