From 45ff312c380fcd777763319c2ba17bea8a901708 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Thu, 19 Oct 2023 20:30:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Spc=E7=9B=B8=E5=85=B3=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=B1=BB=E5=86=85=E5=AE=B9=E4=BF=AE=E6=94=B9=20=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E5=AE=9E=E4=BD=93=E7=B1=BBGermaniumCalib=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0WriteSpc=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/common/util/FileFtransitUtil.java | 770 ++++++++++---- .../modules/entity/vo/GermaniumCalib.java | 88 ++ .../org/jeecg/modules/entity/vo/SpcHead1.java | 82 +- .../org/jeecg/modules/entity/vo/SpcHead2.java | 21 +- .../org/jeecg/modules/controller/Demo.java | 952 +++++++++--------- 5 files changed, 1218 insertions(+), 695 deletions(-) create mode 100644 jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/GermaniumCalib.java diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java index f698ee9f..f1e4d91a 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/FileFtransitUtil.java @@ -1,14 +1,14 @@ package org.jeecg.common.util; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.DateConstant; import org.jeecg.common.enums.FtransitEnum; -import org.jeecg.modules.entity.vo.FileData; -import org.jeecg.modules.entity.vo.SpcHead1; -import org.jeecg.modules.entity.vo.SpcHead2; +import org.jeecg.modules.entity.vo.*; +import org.jeecg.modules.native_jni.CalValuesHandler; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.springframework.stereotype.Component; @@ -166,7 +166,7 @@ public class FileFtransitUtil { i1 = 0; i2 = num - 1; } - datas.setEner_slope((float) ((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))); + datas.setEner_slope(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))))); } // Read Resolution Calibration @@ -319,8 +319,8 @@ public class FileFtransitUtil { i1 = 0; i2 = num - 1; } - datas.setEner_slope((float) ((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))); - datas.setEner_intercept((float) ((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))); + datas.setEner_slope(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))))); + datas.setEner_intercept(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))))); } out.append(String.format("%-10s %-13s %-13s %-13s %-13s", FtransitEnum.IecLineNo.getCode(), String.format("%.6f", datas.getEner_intercept()), String.format("%.6f", datas.getEner_slope()), "0", "0")); //换行 @@ -546,8 +546,8 @@ public class FileFtransitUtil { i1 = 0; i2 = num - 1; } - datas.setEner_slope((float) ((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))); - datas.setEner_intercept((float) ((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))); + datas.setEner_slope( Float.valueOf(String.valueOf((datas.getVvEner().get(0).get(i2) - datas.getVvEner().get(0).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))) ); + datas.setEner_intercept(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))))); } if (CollectionUtils.isNotEmpty(struct.g_r_energy)) { @@ -714,53 +714,53 @@ public class FileFtransitUtil { byte[] headByte1 = new byte[80]; SpcFile.read(headByte1); //读取后赋值 - head1.setInftyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short"))); - head1.setFiltyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short"))); - head1.setReserved1(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short"))); - head1.setReserved2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short")) ); - head1.setAcqInfRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short")) ); - head1.setSamDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short")) ); - head1.setDetDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short")) ); - head1.setEbrDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short")) ); - head1.setAnaRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short")) ); - head1.setAnaRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short")) ); - head1.setAnaRP3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short")) ); - head1.setAnaRP4( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short")) ); - head1.setSrpDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short")) ); - head1.setIeqDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short")) ); - head1.setGeoDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short")) ); - head1.setMpcDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short")) ); - head1.setCalDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short")) ); - head1.setCalRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short")) ); - head1.setCalRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short")) ); - head1.setEffRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short")) ); - head1.setROI1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short")) ); - head1.setEngPrRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short")) ); - head1.setEngPrNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short")) ); - head1.setReserved3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short")) ); - head1.setDDP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short")) ); - head1.setActUnit( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short")) ); - head1.setLabPerRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short")) ); - head1.setMaxNumE( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short")) ); - head1.setMaxNumU( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short")) ); - head1.setEffNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short")) ); - head1.setSpcFirstRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short")) ); - head1.setSpcRecNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short")) ); - head1.setSpcChnNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short")) ); - head1.setAbstch( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short")) ); - head1.setAcqTime( Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float"))); - head1.setAcqTime8( Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double"))); + head1.Inftyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short")); + head1.Filtyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short")); + head1.Reserved1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short")); + head1.Reserved2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short")); + head1.AcqInfRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short")); + head1.SamDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short")); + head1.DetDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short")); + head1.EbrDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short")); + head1.AnaRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short")); + head1.AnaRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short")); + head1.AnaRP3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short")); + head1.AnaRP4 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short")); + head1.SrpDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short")); + head1.IeqDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short")); + head1.GeoDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short")); + head1.MpcDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short")); + head1.CalDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short")); + head1.CalRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short")); + head1.CalRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short")); + head1.EffRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short")); + head1.ROI1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short")); + head1.EngPrRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short")); + head1.EngPrNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short")); + head1.Reserved3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short")); + head1.DDP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short")); + head1.ActUnit = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short")); + head1.LabPerRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short")); + head1.MaxNumE = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short")); + head1.MaxNumU = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short")); + head1.EffNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short")); + head1.SpcFirstRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short")); + head1.SpcRecNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short")); + head1.SpcChnNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short")); + head1.Abstch = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short")); + head1.AcqTime = Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float")); + head1.AcqTime8 = Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double")); SpcFile.seek(78); byte[] headByte2 = new byte[20]; SpcFile.read(headByte2); - head2.setAddRAM( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short")) ); - head2.setSeqnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short")) ); - head2.setMcanu( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short")) ); - head2.setSegnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short")) ); - head2.setMcadvt( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short")) ); - head2.setChnsrt( Short.valueOf( convert(Arrays.copyOfRange(headByte2, 10, 12), "short")) ); - head2.setRealTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float") ) ); - head2.setLiveTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float")) ); + head2.AddRAM = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short")); + head2.Seqnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short")); + head2.Mcanu = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short")); + head2.Segnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short")); + head2.Mcadvt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short")); + head2.Chnsrt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 10, 12), "short")); + head2.RealTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float")); + head2.LiveTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float")); // Acquisition //从intspc能谱中读取能谱开测时间 @@ -1016,7 +1016,7 @@ public class FileFtransitUtil { i2 = EngNum - 1; } datas.setEner_slope(Float.valueOf(Eng[i2]-Eng[i1])/(Cer[i2]-Cer[i1])); - datas.setEner_intercept((float) ((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))); + datas.setEner_intercept(Float.valueOf(String.valueOf(((datas.getVvEner().get(0).get(i1) * datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(0).get(i2) * datas.getVvEner().get(1).get(i1)) / (datas.getVvEner().get(1).get(i2) - datas.getVvEner().get(1).get(i1)))))); } for(int i=0; i 10 ? 10 : temp.length(); -// for(int i=0; i 10 ? 10 : temp.length(); -// for(int i=0; i 10 ? 10 : temp.length(); + for(int i=0; i 10 ? 10 : temp.length(); + for(int i=0; i values = new LinkedList<>(); @@ -1291,4 +1399,276 @@ public class FileFtransitUtil { return ""; } + public static byte[] AnalyseSPC(SpcHead1 m_head1, SpcHead2 m_head2, GermaniumCalib m_calibParam) { + String standard_spc = "D:\\ARMD\\材料\\spc-ims\\standard.SPC"; + File standardSpc = new File(standard_spc); + if(!standardSpc.exists()) { + String Warning = standard_spc + " isn't exist."; + return new byte[0]; + } + RandomAccessFile SpcFile = null; + try { + SpcFile = new RandomAccessFile(standard_spc, "r"); + short Inftyp = 0; + short Filtyp = 0; + //读取第一个数据 + byte[] first = new byte[2]; + SpcFile.read(first); + Inftyp = Short.valueOf(convert(first, "short")); + //读取第二个数据 + byte[] second = new byte[2]; + SpcFile.read(second); + Filtyp = Short.valueOf(convert(second, "short")); + if(Inftyp != 1 || Filtyp != 1) { + String Warning = "The Format of "+standardSpc+" is Error!"; + return new byte[0]; + } + + int length = (int) SpcFile.length(); + byte[] m_totalContents = new byte[length]; + SpcFile.seek(0); + SpcFile.read(m_totalContents); + + // 读入整形spc文件的头记录(第一个记录)-128字节 + SpcFile.seek(0); + //头部信息需要读取的字节数 + byte[] headByte1 = new byte[80]; + SpcFile.read(headByte1); + //读取后赋值 + m_head1.Inftyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short")); + m_head1.Filtyp = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short")); + m_head1.Reserved1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short")); + m_head1.Reserved2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short")); + m_head1.AcqInfRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short")); + m_head1.SamDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short")); + m_head1.DetDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short")); + m_head1.EbrDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short")); + m_head1.AnaRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short")); + m_head1.AnaRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short")); + m_head1.AnaRP3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short")); + m_head1.AnaRP4 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short")); + m_head1.SrpDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short")); + m_head1.IeqDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short")); + m_head1.GeoDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short")); + m_head1.MpcDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short")); + m_head1.CalDesRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short")); + m_head1.CalRP1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short")); + m_head1.CalRP2 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short")); + m_head1.EffRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short")); + m_head1.ROI1 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short")); + m_head1.EngPrRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short")); + m_head1.EngPrNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short")); + m_head1.Reserved3 = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short")); + m_head1.DDP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short")); + m_head1.ActUnit = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short")); + m_head1.LabPerRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short")); + m_head1.MaxNumE = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short")); + m_head1.MaxNumU = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short")); + m_head1.EffNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short")); + m_head1.SpcFirstRP = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short")); + m_head1.SpcRecNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short")); + m_head1.SpcChnNum = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short")); + m_head1.Abstch = Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short")); + m_head1.AcqTime = Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float")); + m_head1.AcqTime8 = Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double")); + SpcFile.seek(78); + byte[] headByte2 = new byte[20]; + SpcFile.read(headByte2); + m_head2.AddRAM = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short")); + m_head2.Seqnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short")); + m_head2.Mcanu = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short")); + m_head2.Segnum = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short")); + m_head2.Mcadvt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short")); + m_head2.Chnsrt = Short.valueOf(convert(Arrays.copyOfRange(headByte2, 10, 12), "short")); + m_head2.RealTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float")); + m_head2.LiveTime = Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float")); + + // Germanium Calibration + SpcFile.seek((m_head1.CalRP1-1)*128); + byte[] charByte = new byte[128]; + SpcFile.read(charByte); + + m_calibParam.Afit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 0, 2) , "short")); + m_calibParam.Bfit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 2, 4), "short")); + m_calibParam.EffPairs = Short.valueOf(convert(Arrays.copyOfRange(charByte, 4, 6), "short")); + m_calibParam.NumOfChan = Short.valueOf(convert(Arrays.copyOfRange(charByte, 6, 8), "short")); + m_calibParam.Knee = Float.valueOf(convert(Arrays.copyOfRange(charByte, 8, 12), "float")); + m_calibParam.Asig = Float.valueOf(convert(Arrays.copyOfRange(charByte, 12, 16), "float")); + m_calibParam.Bsig = Float.valueOf(convert(Arrays.copyOfRange(charByte, 16, 20), "float")); + m_calibParam.EnerCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 20, 24), "float")); + m_calibParam.EnerCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 24, 28), "float")); + m_calibParam.EnerCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 28, 32), "float")); + m_calibParam.FwhmCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 32, 36), "float")); + m_calibParam.FwhmCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 36, 40), "float")); + m_calibParam.FwhmCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 40, 44), "float")); + m_calibParam.AboveEffiCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 44, 48), "float")); + m_calibParam.AboveEffiCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 48, 52), "float")); + m_calibParam.AboveEffiCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 52, 56), "float")); + m_calibParam.BelowEffiCoefA = Float.valueOf(convert(Arrays.copyOfRange(charByte, 56, 60), "float")); + m_calibParam.BelowEffiCoefB = Float.valueOf(convert(Arrays.copyOfRange(charByte, 60, 64), "float")); + m_calibParam.BelowEffiCoefC = Float.valueOf(convert(Arrays.copyOfRange(charByte, 64, 68), "float")); + m_calibParam.FwhmTyp = Short.valueOf(convert(Arrays.copyOfRange(charByte, 68, 70), "short")); + m_calibParam.PeType = Short.valueOf(convert(Arrays.copyOfRange(charByte, 70, 72), "short")); + m_calibParam.MaestroPSS = Short.valueOf(convert(Arrays.copyOfRange(charByte, 72, 74), "short")); + m_calibParam.EngPairs = Short.valueOf(convert(Arrays.copyOfRange(charByte, 74, 76), "short")); + m_calibParam.DetectorNum = Short.valueOf(convert(Arrays.copyOfRange(charByte, 76, 78), "short")); + m_calibParam.NumBelowKnee = Short.valueOf(convert(Arrays.copyOfRange(charByte, 78, 80), "short")); + m_calibParam.ENA2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 80, 84), "float")); + m_calibParam.ENB2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 84, 88), "float")); + m_calibParam.ENC2 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 88, 92), "float")); + m_calibParam.CalUncert = Float.valueOf(convert(Arrays.copyOfRange(charByte, 92, 96), "float")); + m_calibParam.CalDif = Float.valueOf(convert(Arrays.copyOfRange(charByte, 96, 100), "float")); + m_calibParam.PolyCoef7 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 100, 104), "float")); + m_calibParam.PolyCoef8 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 104, 108), "float")); + m_calibParam.PolyCoef9 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 108, 112), "float")); + m_calibParam.PolyCoef10 = Float.valueOf(convert(Arrays.copyOfRange(charByte, 112, 116), "float")); + m_calibParam.LowChanFwhmErr = Float.valueOf(convert(Arrays.copyOfRange(charByte, 116, 120), "float")); + m_calibParam.HighChanFwhmErr = Float.valueOf(convert(Arrays.copyOfRange(charByte, 120, 124), "float")); + m_calibParam.CalibLimit = Short.valueOf(convert(Arrays.copyOfRange(charByte, 124, 126), "short")); + m_calibParam.STypeFlag = Short.valueOf(convert(Arrays.copyOfRange(charByte, 126, 128), "short")); + + SpcFile.close(); + return m_totalContents; + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static void MakeSpcHead(FileData datas, SpcHead1 m_head1, SpcHead2 m_head2) { + m_head1.Inftyp = 1; + m_head1.Filtyp = 1; + if(datas.getVvEner().size() > 0 && datas.getVvReso().size() > 0) { + int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size()); + if(size > 32*1) { + size = 32*1; + } + m_head1.EngPrNum = (short) size; + } + if(datas.getVvEffi().size() > 0) { + m_head1.EffNum = (short) datas.getVvEffi().get(0).size(); + } + m_head1.SpcRecNum = (short) (datas.getNum_count()/32); + m_head1.SpcChnNum = (short) datas.getNum_count(); + m_head1.AcqTime = 12631.7f; + m_head1.AcqTime8 = 12631.7; + + m_head2.Chnsrt = (short) datas.getStart_chan(); + m_head2.RealTime = datas.getAcq_real(); + m_head2.LiveTime = datas.getAcq_live(); + } + + public static void MakeCalibParam(FileData datas, GermaniumCalib m_calibParam) { + if(datas.getVvEffi().size() < 3 || datas.getVvEner().size() < 3 || datas.getVvReso().size() < 3) { + return; + } + + m_calibParam.NumOfChan = (short) datas.getNum_count(); + if(datas.getVvEner().size() > 0 && datas.getVvReso().size() > 0) { + int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size()); + if(size > 32*1) { + size = 32*1; + } + m_calibParam.EngPairs = (short) size; + } + if(datas.getVvEffi().size() > 0) { + m_calibParam.EffPairs = (short) datas.getVvEffi().get(0).size(); + } + ParameterInfo ener_para = new ParameterInfo(); + ener_para.setP(CalValuesHandler.calFitPara("Cal_Energy", 2, datas.getVvEner().get(1), datas.getVvEner().get(0), datas.getVvEner().get(2))); + ParameterInfo reso_para = new ParameterInfo(); + reso_para.setP(CalValuesHandler.calFitPara("Cal_Resolution", 2, datas.getVvReso().get(0), datas.getVvReso().get(1), datas.getVvReso().get(2))); + if(ener_para.getP().size() < 3) { + return; + } else if(ener_para.getP().size() == 3) { + ener_para.getP().add(0.0); + } + if(reso_para.getP().size() < 3) { + return; + } else if(reso_para.getP().size() == 3) { + reso_para.getP().add(0.0); + } + m_calibParam.EnerCoefA = Float.valueOf(String.valueOf(ener_para.getP().get(1))); + m_calibParam.EnerCoefB = Float.valueOf(String.valueOf(ener_para.getP().get(2))); + m_calibParam.EnerCoefC = Float.valueOf(String.valueOf(ener_para.getP().get(3))); + m_calibParam.FwhmCoefA = Float.valueOf(String.valueOf(reso_para.getP().get(1))); + m_calibParam.FwhmCoefB = Float.valueOf(String.valueOf(reso_para.getP().get(2))); + m_calibParam.FwhmCoefC = Float.valueOf(String.valueOf(reso_para.getP().get(3))); + } + + public static String GetDate(String str) { + str = str.substring(0, 10); // YYYY/MM/DD + String temp = str.substring(str.length()-2)+ StringPool.DASH; // DD- + int month = Integer.valueOf(str.substring(5, 7)); + switch(month) { // DD-MMM + case 1: temp+="Jan"; break; + case 2: temp+="Feb"; break; + case 3: temp+="Mar"; break; + case 4: temp+="Apr"; break; + case 5: temp+="May"; break; + case 6: temp+="Jun"; break; + case 7: temp+="Jul"; break; + case 8: temp+="Aug"; break; + case 9: temp+="Sep"; break; + case 10: temp+="Oct"; break; + case 11: temp+="Nov"; break; + case 12: temp+="Dec"; break; + default: temp+="Jan"; break; + } + temp+=String.format("-%s", str.substring(2, 4)); // DD-MMM-YY + if(str.substring(0, 2) == "20") { // DD-MMM-YY* + temp+="1"; + } else { + temp+="0"; + } + return temp; + } + + public static byte[] writeShort(int v) { + byte[] byteArr = new byte[2]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + return byteArr; + } + + public static byte[] writeChar(int v) { + byte[] byteArr = new byte[2]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + return byteArr; + } + + public static byte[] writeInt(int v) { + byte[] byteArr = new byte[4]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + byteArr[2] = (byte) ((v >>> 16) & 0xFF); + byteArr[3] = (byte) ((v >>> 24) & 0xFF); + return byteArr; + } + + public static byte[] writeLong(long v) { + byte[] byteArr = new byte[8]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + byteArr[2] = (byte) ((v >>> 16) & 0xFF); + byteArr[3] = (byte) ((v >>> 24) & 0xFF); + byteArr[4] = (byte) ((v >>> 32) & 0xFF); + byteArr[5] = (byte) ((v >>> 40) & 0xFF); + byteArr[6] = (byte) ((v >>> 48) & 0xFF); + byteArr[7] = (byte) ((v >>> 56) & 0xFF); + return byteArr; + } + + public static byte[] writeFloat(float v) { + byte[] byteArr = writeInt(Float.floatToIntBits(v)); + return byteArr; + } + + public static byte[] writeDouble(double v) { + byte[] byteArr = writeLong(Double.doubleToLongBits(v)); + return byteArr; + } + } diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/GermaniumCalib.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/GermaniumCalib.java new file mode 100644 index 00000000..9b3e5d84 --- /dev/null +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/GermaniumCalib.java @@ -0,0 +1,88 @@ +package org.jeecg.modules.entity.vo; + +import java.io.Serializable; + +public class GermaniumCalib implements Serializable { + + public short Afit; + public short Bfit; + public short EffPairs; + public short NumOfChan; + public float Knee; + public float Asig; + public float Bsig; + public float EnerCoefA; + public float EnerCoefB; + public float EnerCoefC; + public float FwhmCoefA; + public float FwhmCoefB; + public float FwhmCoefC; + public float AboveEffiCoefA; + public float AboveEffiCoefB; + public float AboveEffiCoefC; + public float BelowEffiCoefA; + public float BelowEffiCoefB; + public float BelowEffiCoefC; + public short FwhmTyp; + public short PeType; + public short MaestroPSS; + public short EngPairs; + public short DetectorNum; + public short NumBelowKnee; + public float ENA2; + public float ENB2; + public float ENC2; + public float CalUncert; + public float CalDif; + public float PolyCoef7; + public float PolyCoef8; + public float PolyCoef9; + public float PolyCoef10; + public float LowChanFwhmErr; + public float HighChanFwhmErr; + public short CalibLimit; + public short STypeFlag; + + public GermaniumCalib() { + Afit = 0; + Bfit = 0; + EffPairs = 0; // Number of efficiency pairs + NumOfChan = 0; // Number of channels in spectrum + Knee = 0.0f; + Asig = 0.0f; + Bsig = 0.0f; + EnerCoefA = 0.0f; + EnerCoefB = 0.0f; + EnerCoefC = 0.0f; + FwhmCoefA = 0.0f; + FwhmCoefB = 0.0f; + FwhmCoefC = 0.0f; + AboveEffiCoefA = 0.0f; + AboveEffiCoefB = 0.0f; + AboveEffiCoefC = 0.0f; + BelowEffiCoefA = 0.0f; + BelowEffiCoefB = 0.0f; + BelowEffiCoefC = 0.0f; + FwhmTyp = 0; + PeType = 0; + MaestroPSS = 0; + EngPairs = 0; // Number of energy pairs + DetectorNum = 0; + NumBelowKnee = 0; + ENA2 = 0.0f; + ENB2 = 0.0f; + ENC2 = 0.0f; + CalUncert = 0.0f; + CalDif = 0.0f; + PolyCoef7 = 0.0f; + PolyCoef8 = 0.0f; + PolyCoef9 = 0.0f; + PolyCoef10 = 0.0f; + LowChanFwhmErr = 0.0f; + HighChanFwhmErr = 0.0f; + CalibLimit = 0; + STypeFlag = 1; + } + + +} diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java index ece000aa..6a5ee0b1 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead1.java @@ -5,6 +5,47 @@ import lombok.Data; @Data public class SpcHead1 { + public short Inftyp; //1:整形SPC文件的标志 必须为“1” + public short Filtyp; //2:整形SPC文件的标志 必须为“1” + public short Reserved1; //3:Reserved + public short Reserved2; //4:Reserved + public short AcqInfRP; //5:Acquisition Information Record pointer + public short SamDesRP; //6:Sample Description Record pointer + public short DetDesRP; //7:Detector Description Record pointer + public short EbrDesRP; //8:EBAR Description Record + + public short AnaRP1; //9:First Analysis Parameters Record pointer + public short AnaRP2; //10:Second Analysis Parameters Record pointer + public short AnaRP3; //11:Third Analysis Parameters Record pointer + public short AnaRP4; //12:Fourth Analysis Parameters Record pointer + public short SrpDesRP; //13:Absorption Correction Description Record pointer + public short IeqDesRP; //14:IEQ Description Record pointer + public short GeoDesRP; //15:Geometry Correction Description Record pointer + public short MpcDesRP; //16:MPC Description Record pointer + + public short CalDesRP; //17:Calibration Description Record pointer + public short CalRP1; //18:First Calibration Data Record pointer + public short CalRP2; //19:Second Calibration Data Record pointer + public short EffRP; //20:Efficiency Pairs Record pointer(first record) + public short ROI1; //21:Record Number of the first of the two ROI records + public short EngPrRP; //22:Energe pairs record pointer + public short EngPrNum; //23:Number of energy pair records + public short Reserved3; //24:Reserved + + public short DDP; //25:Disable deconvolution of unknown peaks + public short ActUnit; //26:True=microCuries,false=becquerels + public short LabPerRP; //27:Laboratory and operator name record pointer + public short MaxNumE; //28:Maximum Record Number Ever Used + public short MaxNumU; //29:Maximum Record Number In Use + public short EffNum; //30:Number of Efficiency Pairs Records(See public short 20) + public short SpcFirstRP; //31:Spectrum Record pointer (pointer to first record) + public short SpcRecNum; //32:Number of records in the spectrum + + public short SpcChnNum; //33:Number of channels in spectrum + public short Abstch; //34:Physical start channel for data + public float AcqTime; //35,36:Date and Time of acquisition start in DECDAY format + public double AcqTime8; //37,40:Date and Time as double precision DECDAY + public SpcHead1() { // 需根据谱改变 EngPrNum = 3; @@ -48,45 +89,4 @@ public class SpcHead1 { AcqTime8 = 12631.7; } - public short Inftyp; //1:整形SPC文件的标志 必须为“1” - public short Filtyp; //2:整形SPC文件的标志 必须为“1” - public short Reserved1; //3:Reserved - public short Reserved2; //4:Reserved - public short AcqInfRP; //5:Acquisition Information Record pointer - public short SamDesRP; //6:Sample Description Record pointer - public short DetDesRP; //7:Detector Description Record pointer - public short EbrDesRP; //8:EBAR Description Record - - public short AnaRP1; //9:First Analysis Parameters Record pointer - public short AnaRP2; //10:Second Analysis Parameters Record pointer - public short AnaRP3; //11:Third Analysis Parameters Record pointer - public short AnaRP4; //12:Fourth Analysis Parameters Record pointer - public short SrpDesRP; //13:Absorption Correction Description Record pointer - public short IeqDesRP; //14:IEQ Description Record pointer - public short GeoDesRP; //15:Geometry Correction Description Record pointer - public short MpcDesRP; //16:MPC Description Record pointer - - public short CalDesRP; //17:Calibration Description Record pointer - public short CalRP1; //18:First Calibration Data Record pointer - public short CalRP2; //19:Second Calibration Data Record pointer - public short EffRP; //20:Efficiency Pairs Record pointer(first record) - public short ROI1; //21:Record Number of the first of the two ROI records - public short EngPrRP; //22:Energe pairs record pointer - public short EngPrNum; //23:Number of energy pair records - public short Reserved3; //24:Reserved - - public short DDP; //25:Disable deconvolution of unknown peaks - public short ActUnit; //26:True=microCuries,false=becquerels - public short LabPerRP; //27:Laboratory and operator name record pointer - public short MaxNumE; //28:Maximum Record Number Ever Used - public short MaxNumU; //29:Maximum Record Number In Use - public short EffNum; //30:Number of Efficiency Pairs Records(See public short 20) - public short SpcFirstRP; //31:Spectrum Record pointer (pointer to first record) - public short SpcRecNum; //32:Number of records in the spectrum - - public short SpcChnNum; //33:Number of channels in spectrum - public short Abstch; //34:Physical start channel for data - public float AcqTime; //35,36:Date and Time of acquisition start in DECDAY format - public double AcqTime8; //37,40:Date and Time as double precision DECDAY - } diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java index 747cf6e9..0a9ddf25 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/entity/vo/SpcHead2.java @@ -5,6 +5,17 @@ import lombok.Data; @Data public class SpcHead2 { + public short AddRAM; //40:用于补足内存 + public short Seqnum; //41:Sequence number + public short Mcanu; //42:MCA number as two ASCII characters(old) or Detector + // number as integer for systems with Connections + public short Segnum; //43:Segment number as two ASCII characters(old) + // or as integer value 1 for systems with Connections + public short Mcadvt; //44:MCA device type + public short Chnsrt; //45:Start channel number + public float RealTime; //46,47:Real Time in seconds + public float LiveTime; //48,49:Live time in seconds + public SpcHead2() { // 需根据谱改变 Chnsrt = 0; @@ -17,14 +28,4 @@ public class SpcHead2 { Mcadvt = 0; } - public short AddRAM; //40:用于补足内存 - public short Seqnum; //41:Sequence number - public short Mcanu; //42:MCA number as two ASCII characters(old) or Detector - // number as integer for systems with Connections - public short Segnum; //43:Segment number as two ASCII characters(old) - // or as integer value 1 for systems with Connections - public short Mcadvt; //44:MCA device type - public short Chnsrt; //45:Start channel number - public float RealTime; //46,47:Real Time in seconds - public float LiveTime; //48,49:Live time in seconds } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java index 12a28114..4f129a3b 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/Demo.java @@ -1,10 +1,11 @@ package org.jeecg.modules.controller; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.fasterxml.jackson.databind.ObjectMapper; import org.jeecg.common.constant.DateConstant; -import org.jeecg.modules.entity.vo.SpcHead1; -import org.jeecg.modules.entity.vo.SpcHead2; -import org.jeecg.modules.entity.vo.FileData; +import org.jeecg.common.util.FileFtransitUtil; +import org.jeecg.modules.entity.vo.*; +import org.jeecg.modules.native_jni.CalValuesHandler; import java.io.*; import java.lang.reflect.Array; @@ -17,422 +18,478 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; +import java.util.*; + public class Demo { public static void main(String[] args) throws IOException { - FileData fileData = new FileData(); - String filePath = "D:\\ARMD\\材料\\201809160001P.SPC"; + System.loadLibrary("ReadPHDFile"); + System.loadLibrary("GammaAnaly"); + FileData datas = new FileData(); + File imsFile = new File("D:\\ARMD\\材料\\spc-ims\\201809160001P.Ims"); + FileFtransitUtil.ReadIMS(imsFile, datas); + File spcFile = new File("D:\\ARMD\\材料\\spc-ims\\test.SPC"); // r:只读 rw:读写 - RandomAccessFile SpcFile = new RandomAccessFile(filePath, "r"); - //读取第一个数据 - byte[] first = new byte[2]; - SpcFile.read(first); - short Inftyp = Short.valueOf(convert(first, "short")); - //读取第二个数据 - byte[] second = new byte[2]; - SpcFile.read(second); - short Filtyp = Short.valueOf(convert(second, "short")); - if (Inftyp != 1 || Filtyp != 1) { + RandomAccessFile SpcFile = new RandomAccessFile(spcFile.getAbsolutePath(), "rw"); + //分析SPC文件并创建所需要的spc文件的基础内容 + SpcHead1 m_head1 = new SpcHead1(); + SpcHead2 m_head2 = new SpcHead2(); + GermaniumCalib m_calibParam = new GermaniumCalib(); + byte[] m_totalContents = AnalyseSPC(m_head1, m_head2, m_calibParam); + if(m_totalContents.length<=0) { + String Warning = "The file standard.spc isn't exist or it's format is invalid."; + } + //SpcFile写入内容 + SpcFile.write(m_totalContents); + + // 写第1个128字节————头部指针信息 + { + MakeSpcHead(datas, m_head1, m_head2); + SpcFile.seek(0); + byte[] head1 = new byte[80]; + //使用系统的赋值数组 来源数组 开始下标 目标数组 开始下标 长度 + System.arraycopy(writeShort(m_head1.Inftyp), 0, head1, 0, 2); + System.arraycopy(writeShort(m_head1.Filtyp), 0, head1, 2, 2); + System.arraycopy(writeShort(m_head1.Reserved1), 0, head1, 4, 2); + System.arraycopy(writeShort(m_head1.Reserved2), 0, head1, 6, 2); + System.arraycopy(writeShort(m_head1.AcqInfRP), 0, head1, 8, 2); + System.arraycopy(writeShort(m_head1.SamDesRP), 0, head1, 10, 2); + System.arraycopy(writeShort(m_head1.DetDesRP), 0, head1, 12, 2); + System.arraycopy(writeShort(m_head1.EbrDesRP), 0, head1, 14, 2); + System.arraycopy(writeShort(m_head1.AnaRP1), 0, head1, 16, 2); + System.arraycopy(writeShort(m_head1.AnaRP2), 0, head1, 18, 2); + System.arraycopy(writeShort(m_head1.AnaRP3), 0, head1, 20, 2); + System.arraycopy(writeShort(m_head1.AnaRP4), 0, head1, 22, 2); + System.arraycopy(writeShort(m_head1.SrpDesRP), 0, head1, 24, 2); + System.arraycopy(writeShort(m_head1.IeqDesRP), 0, head1, 26, 2); + System.arraycopy(writeShort(m_head1.GeoDesRP), 0, head1, 28, 2); + System.arraycopy(writeShort(m_head1.MpcDesRP), 0, head1, 30, 2); + System.arraycopy(writeShort(m_head1.CalDesRP), 0, head1, 32, 2); + System.arraycopy(writeShort(m_head1.CalRP1), 0, head1, 34, 2); + System.arraycopy(writeShort(m_head1.CalRP2), 0, head1, 36, 2); + System.arraycopy(writeShort(m_head1.EffRP), 0, head1, 38, 2); + System.arraycopy(writeShort(m_head1.ROI1), 0, head1, 40, 2); + System.arraycopy(writeShort(m_head1.EngPrRP), 0, head1, 42, 2); + System.arraycopy(writeShort(m_head1.EngPrNum), 0, head1, 44, 2); + System.arraycopy(writeShort(m_head1.Reserved3), 0, head1, 46, 2); + System.arraycopy(writeShort(m_head1.DDP), 0, head1, 48, 2); + System.arraycopy(writeShort(m_head1.ActUnit), 0, head1, 50, 2); + System.arraycopy(writeShort(m_head1.LabPerRP), 0, head1, 52, 2); + System.arraycopy(writeShort(m_head1.MaxNumE), 0, head1, 54, 2); + System.arraycopy(writeShort(m_head1.MaxNumU), 0, head1, 56, 2); + System.arraycopy(writeShort(m_head1.EffNum), 0, head1, 58, 2); + System.arraycopy(writeShort(m_head1.SpcFirstRP), 0, head1, 60, 2); + System.arraycopy(writeShort(m_head1.SpcRecNum), 0, head1, 62, 2); + System.arraycopy(writeShort(m_head1.SpcChnNum), 0, head1, 64, 2); + System.arraycopy(writeShort(m_head1.Abstch), 0, head1, 66, 2); + System.arraycopy(writeFloat(m_head1.AcqTime), 0, head1, 68, 4); + System.arraycopy(writeDouble(m_head1.AcqTime8), 0, head1, 72, 8); + SpcFile.write(head1); + SpcFile.seek(78); + byte[] head2 = new byte[20]; + System.arraycopy(writeShort(m_head2.AddRAM), 0, head2, 0, 2); + System.arraycopy(writeShort(m_head2.Seqnum), 0, head2, 2, 2); + System.arraycopy(writeShort(m_head2.Mcanu), 0, head2, 4, 2); + System.arraycopy(writeShort(m_head2.Segnum), 0, head2, 6, 2); + System.arraycopy(writeShort(m_head2.Mcadvt), 0, head2, 8, 2); + System.arraycopy(writeShort(m_head2.Chnsrt), 0, head2, 10, 2); + System.arraycopy(writeFloat(m_head2.RealTime), 0, head2, 12, 4); + System.arraycopy(writeFloat(m_head2.LiveTime), 0, head2, 16, 4); + SpcFile.write(head2); + } + + // 写第2个128字节————Acquisition信息 + { + char[] acq_info = new char[128]; + acq_info[0] = ' '; + int offset = 16; // 16 Bytes Spectrum file name + String temp = GetDate(datas.getAcq_date()); + for(int i=0; i 10 ? 10 : temp.length(); + for(int i=0; i 10 ? 10 : temp.length(); + for(int i=0; i 0 && datas.getVvReso().size() > 0) { + int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size()); + if(size > 32*1) { + size = 32*1; + } + m_head1.EngPrNum = (short) size; + } + if(datas.getVvEffi().size() > 0) { + m_head1.EffNum = (short) datas.getVvEffi().get(0).size(); + } + m_head1.SpcRecNum = (short) (datas.getNum_count()/32); + m_head1.SpcChnNum = (short) datas.getNum_count(); + m_head1.AcqTime = 12631.7f; + m_head1.AcqTime8 = 12631.7; + + m_head2.Chnsrt = (short) datas.getStart_chan(); + m_head2.RealTime = datas.getAcq_real(); + m_head2.LiveTime = datas.getAcq_live(); + } + + public static void MakeCalibParam(FileData datas, GermaniumCalib m_calibParam) { + if(datas.getVvEffi().size() < 3 || datas.getVvEner().size() < 3 || datas.getVvReso().size() < 3) { return; } - // 读入整形spc文件的头记录(第一个记录)-128字节 - SpcHead1 head1 = new SpcHead1(); - SpcHead2 head2 = new SpcHead2(); - SpcFile.seek(0); - //头部信息需要读取的字节数 - byte[] headByte1 = new byte[80]; - SpcFile.read(headByte1); - //读取后赋值 - head1.setInftyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 0, 2), "short"))); - head1.setFiltyp(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 2, 4), "short"))); - head1.setReserved1(Short.valueOf(convert(Arrays.copyOfRange(headByte1, 4, 6), "short"))); - head1.setReserved2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 6, 8), "short")) ); - head1.setAcqInfRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 8, 10), "short")) ); - head1.setSamDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 10, 12), "short")) ); - head1.setDetDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 12, 14), "short")) ); - head1.setEbrDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 14, 16), "short")) ); - head1.setAnaRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 16, 18), "short")) ); - head1.setAnaRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 18, 20), "short")) ); - head1.setAnaRP3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 20, 22), "short")) ); - head1.setAnaRP4( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 22, 24), "short")) ); - head1.setSrpDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 24, 26), "short")) ); - head1.setIeqDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 26, 28), "short")) ); - head1.setGeoDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 28, 30), "short")) ); - head1.setMpcDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 30, 32), "short")) ); - head1.setCalDesRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 32, 34), "short")) ); - head1.setCalRP1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 34, 36), "short")) ); - head1.setCalRP2( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 36, 38), "short")) ); - head1.setEffRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 38, 40), "short")) ); - head1.setROI1( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 40, 42), "short")) ); - head1.setEngPrRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 42, 44), "short")) ); - head1.setEngPrNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 44, 46), "short")) ); - head1.setReserved3( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 46, 48), "short")) ); - head1.setDDP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 48, 50), "short")) ); - head1.setActUnit( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 50, 52), "short")) ); - head1.setLabPerRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 52, 54), "short")) ); - head1.setMaxNumE( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 54, 56), "short")) ); - head1.setMaxNumU( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 56, 58), "short")) ); - head1.setEffNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 58, 60), "short")) ); - head1.setSpcFirstRP( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 60, 62), "short")) ); - head1.setSpcRecNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 62, 64), "short")) ); - head1.setSpcChnNum( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 64, 66), "short")) ); - head1.setAbstch( Short.valueOf(convert(Arrays.copyOfRange(headByte1, 66, 68), "short")) ); - head1.setAcqTime( Float.valueOf(convert(Arrays.copyOfRange(headByte1, 68, 72), "float"))); - head1.setAcqTime8( Double.valueOf(convert(Arrays.copyOfRange(headByte1, 72, 80), "double"))); - SpcFile.seek(78); - byte[] headByte2 = new byte[20]; - SpcFile.read(headByte2); - head2.setAddRAM( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 0, 2), "short")) ); - head2.setSeqnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 2, 4), "short")) ); - head2.setMcanu( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 4, 6), "short")) ); - head2.setSegnum( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 6, 8), "short")) ); - head2.setMcadvt( Short.valueOf(convert(Arrays.copyOfRange(headByte2, 8, 10), "short")) ); - head2.setChnsrt( Short.valueOf( convert(Arrays.copyOfRange(headByte2, 10, 12), "short")) ); - head2.setRealTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 12, 16), "float") ) ); - head2.setLiveTime( Float.valueOf(convert(Arrays.copyOfRange(headByte2, 16, 20), "float")) ); - // Acquisition - //从intspc能谱中读取能谱开测时间 - int AcqY,AcqM,AcqD,AcqH,AcqMin; - float AcqS,AcqRT,AcqLT; - char[] temchar = new char[200]; - int lOffset; - - lOffset=(head1.AcqInfRP-1)*128; - SpcFile.seek(lOffset+16); - byte[] charByte1 = new byte[12]; - SpcFile.read(charByte1); - for (int i=0; i 0 && datas.getVvReso().size() > 0) { + int size = Math.min(datas.getVvEner().get(0).size(), datas.getVvReso().get(0).size()); + if(size > 32*1) { + size = 32*1; + } + m_calibParam.EngPairs = (short) size; } - char char1,char2; - char1=temchar[7]; - char2=temchar[8]; - if('0'==temchar[9]) { - temchar[7]='1'; //19xx�� - temchar[8]='9'; + if(datas.getVvEffi().size() > 0) { + m_calibParam.EffPairs = (short) datas.getVvEffi().get(0).size(); + } + ParameterInfo ener_para = new ParameterInfo(); + ener_para.setP(CalValuesHandler.calFitPara("Cal_Energy", 2, datas.getVvEner().get(1), datas.getVvEner().get(0), datas.getVvEner().get(2))); + ParameterInfo reso_para = new ParameterInfo(); + reso_para.setP(CalValuesHandler.calFitPara("Cal_Resolution", 2, datas.getVvReso().get(0), datas.getVvReso().get(1), datas.getVvReso().get(2))); + if(ener_para.getP().size() < 3) { + return; + } else if(ener_para.getP().size() == 3) { + ener_para.getP().add(0.0); + } + if(reso_para.getP().size() < 3) { + return; + } else if(reso_para.getP().size() == 3) { + reso_para.getP().add(0.0); + } + m_calibParam.EnerCoefA = Float.valueOf(String.valueOf(ener_para.getP().get(1))); + m_calibParam.EnerCoefB = Float.valueOf(String.valueOf(ener_para.getP().get(2))); + m_calibParam.EnerCoefC = Float.valueOf(String.valueOf(ener_para.getP().get(3))); + m_calibParam.FwhmCoefA = Float.valueOf(String.valueOf(reso_para.getP().get(1))); + m_calibParam.FwhmCoefB = Float.valueOf(String.valueOf(reso_para.getP().get(2))); + m_calibParam.FwhmCoefC = Float.valueOf(String.valueOf(reso_para.getP().get(3))); + } + + public static String GetDate(String str) { + str = str.substring(0, 10); // YYYY/MM/DD + String temp = str.substring(str.length()-2)+ StringPool.DASH; // DD- + int month = Integer.valueOf(str.substring(5, 7)); + switch(month) { // DD-MMM + case 1: temp+="Jan"; break; + case 2: temp+="Feb"; break; + case 3: temp+="Mar"; break; + case 4: temp+="Apr"; break; + case 5: temp+="May"; break; + case 6: temp+="Jun"; break; + case 7: temp+="Jul"; break; + case 8: temp+="Aug"; break; + case 9: temp+="Sep"; break; + case 10: temp+="Oct"; break; + case 11: temp+="Nov"; break; + case 12: temp+="Dec"; break; + default: temp+="Jan"; break; + } + temp+=String.format("-%s", str.substring(2, 4)); // DD-MMM-YY + if(str.substring(0, 2) == "20") { // DD-MMM-YY* + temp+="1"; } else { - temchar[7]='2'; //20xx�� - temchar[8]='0'; + temp+="0"; } - temchar[9]=char1; - temchar[10]=char2; - temchar[11]='\0'; - - AcqY=0; - for(int i=7;i<11;i++) { - temchar[i]= (char) (temchar[i]-48); - AcqY= (int) (AcqY+temchar[i]*Math.pow(10,10-i)); - } - - AcqM = 0; - if (temchar[3] == 'J' && temchar[4] == 'a' && temchar[5] == 'n') AcqM = 1; - if (temchar[3] == 'F' && temchar[4] == 'e' && temchar[5] == 'b') AcqM = 2; - if (temchar[3] == 'M' && temchar[4] == 'a' && temchar[5] == 'r') AcqM = 3; - if (temchar[3] == 'A' && temchar[4] == 'p' && temchar[5] == 'r') AcqM = 4; - if (temchar[3] == 'M' && temchar[4] == 'a' && temchar[5] == 'y') AcqM = 5; - if (temchar[3] == 'J' && temchar[4] == 'u' && temchar[5] == 'n') AcqM = 6; - if (temchar[3] == 'J' && temchar[4] == 'u' && temchar[5] == 'l') AcqM = 7; - if (temchar[3] == 'A' && temchar[4] == 'u' && temchar[5] == 'g') AcqM = 8; - if (temchar[3] == 'S' && temchar[4] == 'e' && temchar[5] == 'p') AcqM = 9; - if (temchar[3] == 'O' && temchar[4] == 'c' && temchar[5] == 't') AcqM = 10; - if (temchar[3] == 'N' && temchar[4] == 'o' && temchar[5] == 'v') AcqM = 11; - if (temchar[3] == 'D' && temchar[4] == 'e' && temchar[5] == 'c') AcqM = 12; - - AcqD = 0; - for (int i = 0; i < 2; i++) { - temchar[i] = (char) (temchar[i] - 48); - AcqD = (int) (AcqD + temchar[i] * Math.pow(10, 1 - i)); - } - - byte[] charByte2 = new byte[10]; - SpcFile.read(charByte2); - for (int i=0; i 0) { // 存在能量刻度 - //从intspc能谱中读取能谱刻度信息 - float[] Eng = new float[32]; - float[] Cer = new float[32]; - float[] FWHM = new float[32]; - - lOffset=(head1.EngPrRP-1)*128; - SpcFile.seek(lOffset); - byte[] cerByte = new byte[128]; - byte[] engByte = new byte[128]; - byte[] fwhmByte = new byte[128]; - SpcFile.read(cerByte); - int j = 0; - for (int i=0; i 1) { - int i1 = 1; - int i2 = EngNum - 2; - if(EngNum < 4) { - i1 = 0; - i2 = EngNum - 1; - } - fileData.setEner_slope(Float.valueOf(Eng[i2]-Eng[i1])/(Cer[i2]-Cer[i1])); - fileData.setEner_intercept((float) ((fileData.getVvEner().get(0).get(i1) * fileData.getVvEner().get(1).get(i2) - fileData.getVvEner().get(0).get(i2) * fileData.getVvEner().get(1).get(i1)) / (fileData.getVvEner().get(1).get(i2) - fileData.getVvEner().get(1).get(i1)))); - } - - for(int i=0; i0) { //存在效率刻度 - short EffNum = 0; - lOffset=(head1.CalRP1-1)*128; - SpcFile.seek( lOffset+4 ); - byte[] effByte = new byte[2]; - SpcFile.read(effByte); - EffNum = Short.valueOf(convert(effByte, "short")); - - float[] Eff = new float[32];//0,2,4等偶数存放能量,1,3,5等奇数存放效率 - float EffUnc=0.5f; - - lOffset=(head1.EffRP-1)*128; - SpcFile.seek( lOffset ); - byte[] effByte2 = new byte[128]; - SpcFile.read(effByte2); - int j=0; - for (int i=0; i>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + return byteArr; } - public static float[] byteToFloats(byte[] data) { - // 每个浮点数占用4个字节 - int floatCount = data.length / 4; - float[] floatArray = new float[floatCount]; - - ByteBuffer buffer = ByteBuffer.wrap(data); - for (int i = 0; i < floatCount; i++) { - floatArray[i] = buffer.getFloat(); - } - - return floatArray; + public static byte[] writeChar(int v) { + byte[] byteArr = new byte[2]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + return byteArr; } - public static float byteToFloat(byte[] data) { - ByteBuffer buffer = ByteBuffer.wrap(data); - // 设置字节顺序为小端序 - buffer.order(ByteOrder.LITTLE_ENDIAN); - FloatBuffer floatBuffer = buffer.asFloatBuffer(); - return floatBuffer.get(); + public static byte[] writeInt(int v) { + byte[] byteArr = new byte[4]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + byteArr[2] = (byte) ((v >>> 16) & 0xFF); + byteArr[3] = (byte) ((v >>> 24) & 0xFF); + return byteArr; } - public static int[] byteToInts(byte[] data) { - ByteBuffer buffer = ByteBuffer.wrap(data); - // 设置字节顺序为小端序 - buffer.order(ByteOrder.LITTLE_ENDIAN); - IntBuffer intBuffer = buffer.asIntBuffer(); - int[] intArray = new int[intBuffer.remaining()]; - intBuffer.get(intArray); - return intArray; + public static byte[] writeLong(long v) { + byte[] byteArr = new byte[8]; + byteArr[0] = (byte) ((v >>> 0) & 0xFF); + byteArr[1] = (byte) ((v >>> 8) & 0xFF); + byteArr[2] = (byte) ((v >>> 16) & 0xFF); + byteArr[3] = (byte) ((v >>> 24) & 0xFF); + byteArr[4] = (byte) ((v >>> 32) & 0xFF); + byteArr[5] = (byte) ((v >>> 40) & 0xFF); + byteArr[6] = (byte) ((v >>> 48) & 0xFF); + byteArr[7] = (byte) ((v >>> 56) & 0xFF); + return byteArr; } - public static short byteToShort(byte[] data) { - ByteBuffer buffer = ByteBuffer.wrap(data); - // 设置字节顺序为小端序 - buffer.order(ByteOrder.LITTLE_ENDIAN); - return buffer.getShort(); + public static byte[] writeFloat(float v) { + byte[] byteArr = writeInt(Float.floatToIntBits(v)); + return byteArr; } + public static byte[] writeDouble(double v) { + byte[] byteArr = writeLong(Double.doubleToLongBits(v)); + return byteArr; + } + + + } From 7beaa9a06a71e89913347f80f549cb9d7cefc7ad Mon Sep 17 00:00:00 2001 From: nieziyan Date: Thu, 19 Oct 2023 20:32:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat=EF=BC=9Adel=20PHDFile=20Cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/jeecg/common/cache/LocalCache.java | 4 ++++ .../org/jeecg/modules/controller/GammaController.java | 10 ++++++++++ .../java/org/jeecg/modules/service/IGammaService.java | 2 ++ .../jeecg/modules/service/impl/GammaServiceImpl.java | 9 +++++++++ 4 files changed, 25 insertions(+) diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/cache/LocalCache.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/cache/LocalCache.java index 9c23f8e3..98bbd56a 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/cache/LocalCache.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/cache/LocalCache.java @@ -5,6 +5,7 @@ import com.google.common.cache.CacheBuilder; import org.jeecg.modules.entity.vo.PHDFile; import org.springframework.stereotype.Component; +import java.util.Map; import java.util.concurrent.TimeUnit; @Component @@ -30,4 +31,7 @@ public class LocalCache { this.phdCache = phdCache; } + public void deletePHDCache(String key){ + this.phdCache.invalidate(key); + } } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java index 097ab0fd..2326c3af 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java @@ -1,8 +1,10 @@ package org.jeecg.modules.controller; +import com.google.common.cache.Cache; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.cache.LocalCache; import org.jeecg.modules.base.bizVo.GammaRLR; import org.jeecg.modules.entity.vo.*; import org.jeecg.modules.feignclient.SystemClient; @@ -15,6 +17,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.concurrent.ConcurrentMap; @RestController @RequestMapping("gamma") @@ -52,6 +55,13 @@ public class GammaController { public Result gammaByFile(String fileName, HttpServletRequest request) { return gammaService.gammaByFile(fileName, request); } + + @DeleteMapping("delPHDCache") + @ApiOperation(value = "删除PHD文件缓存", notes = "删除PHD文件缓存") + public void delPHDCache(@RequestParam String fileName) { + gammaService.delPHDCache(fileName); + } + @GetMapping("Compare") public Result Compare(String fileName, String compareFileName, HttpServletRequest request) { return gammaService.Compare(fileName, compareFileName, request); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java index 6d1387c0..fac3a44d 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java @@ -20,6 +20,8 @@ public interface IGammaService{ Result gammaByFile(String fileName, HttpServletRequest request); + void delPHDCache(String fileName); + Result Compare(String fileName, String compareFileName, HttpServletRequest request); Result Strip(String fileName, String stripFileName, Double ratioRate, HttpServletRequest request); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java index 0b621631..8c61626c 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java @@ -807,6 +807,15 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi return result; } + @Override + public void delPHDCache(String fileName) { + LoginUser loginUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String username = loginUser.getUsername(); + String key = fileName + StrUtil.DASHED + username; + // 删除指定key的Cache + localCache.deletePHDCache(key); + } + @Override public Result Compare(String fileName, String compareFileName, HttpServletRequest request) { Result result = new Result();