diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsNuclearfacility.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsNuclearfacility.java
index 5d92eac0..927e4c1e 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsNuclearfacility.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsNuclearfacility.java
@@ -82,7 +82,7 @@ public class GardsNuclearfacility implements Serializable {
*/
@TableField(value = "RETIREDATE")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date retireDate;
/**
@@ -90,7 +90,7 @@ public class GardsNuclearfacility implements Serializable {
*/
@TableField(value = "GRIDCONEETIONDATE")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gridconeetionDate;
/**
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/GardsSampleData.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/GardsSampleData.java
index bd12aeb5..fa457cb5 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/GardsSampleData.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/GardsSampleData.java
@@ -159,7 +159,7 @@ public class GardsSampleData implements Serializable {
*/
@TableField(value = "MODDATE")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date moddate;
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsAnalyses.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsAnalyses.java
index 8bd06629..095d61c6 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsAnalyses.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsAnalyses.java
@@ -31,12 +31,16 @@ public class GardsAnalyses implements Serializable {
* 分析开始时间
*/
@TableField(value = "ANALYSISBEGIN")
- private Data analysisBegin;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date analysisBegin;
/**
* 分析结束时间
*/
@TableField(value = "ANALYSISEND")
- private Data analysisEnd;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date analysisEnd;
/**
* Reviewed:交互,auto:自动
*/
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibration.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibration.java
index daed7654..b2b47ec8 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibration.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibration.java
@@ -111,4 +111,5 @@ public class GardsCalibration implements Serializable {
@TableField(value = "COEFF_STRING")
private String coeffString;
+
}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibrationPairs.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibrationPairs.java
index a5192320..2559f1f9 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibrationPairs.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsCalibrationPairs.java
@@ -67,4 +67,5 @@ public class GardsCalibrationPairs implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date moddate;
+
}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclIded.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclIded.java
index d2d46f9e..7d16ff1b 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclIded.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclIded.java
@@ -114,4 +114,5 @@ public class GardsNuclIded implements Serializable {
@TableField(value = "KEY_YIELD")
private String keyYield;
+
}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclLinesIded.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclLinesIded.java
index 1a5d15d5..eb5e0b30 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclLinesIded.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsNuclLinesIded.java
@@ -16,6 +16,12 @@ import java.util.Date;
@TableName("RNAUTO.GARDS_NUCL_LINES_IDED")
public class GardsNuclLinesIded implements Serializable {
+ /**
+ * 分析ID号
+ */
+ @TableField(value = "IDANALYSIS")
+ private Integer idAnalysis;
+
/**
* 样品id
*/
@@ -26,16 +32,11 @@ public class GardsNuclLinesIded implements Serializable {
*/
@TableField(value = "IDPEAK")
private Integer idPeak;
- /**
- * 分析ID号
- */
- @TableField(value = "IDANALYSIS")
- private Integer idAnalysis;
/**
* 核素名称
*/
- @TableField(value = "NUCLIDE_NAME")
+ @TableField(value = "NUCLIDENAME")
private String nuclideName;
@TableField(value = "MODDATE")
@@ -108,4 +109,14 @@ public class GardsNuclLinesIded implements Serializable {
*/
@TableField(value = "CSC_MOD_FLAG")
private Double cscModFlag;
+
+ @TableField(value = "NUCLIDEFULLNAME")
+ private String nuclidefullname;
+
+ @TableField(value = "MDC")
+ private String mdc;
+
+ @TableField(value = "CONCENTRATION")
+ private String concentration;
+
}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsPeaks.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsPeaks.java
index eb99d293..ee7b00bc 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsPeaks.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsPeaks.java
@@ -159,4 +159,5 @@ public class GardsPeaks implements Serializable {
@TableField(value = "PEAKCOMMENTS")
private String peakcomments;
+
}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsQcCheck.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsQcCheck.java
new file mode 100644
index 00000000..6f4a52f6
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsQcCheck.java
@@ -0,0 +1,40 @@
+package org.jeecg.modules.base.entity.rnauto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import sun.security.krb5.internal.PAData;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName(value = "RNAUTO.GARDS_QC_CHECK")
+public class GardsQcCheck implements Serializable {
+
+ @TableField(value = "SAMPLE_ID")
+ private Integer sampleId;
+
+ @TableField(value = "IDANALYSIS")
+ private Integer idanalysis;
+
+ @TableField(value = "QC_NAME")
+ private String qcName;
+
+ @TableField(value = "QC_VALUE")
+ private Double qcValue;
+
+ @TableField(value = "QC_STANDARD")
+ private String qcStandard;
+
+ @TableField(value = "QC_RESULT")
+ private Integer qcResult;
+
+ @TableField(value = "MODDATE")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date moddate;
+
+}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalySetting.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalySetting.java
new file mode 100644
index 00000000..596ff6ef
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalySetting.java
@@ -0,0 +1,76 @@
+package org.jeecg.modules.base.entity.rnman;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName(value = "RNMAN.GARDS_ANALY_SETTING")
+public class GardsAnalySetting implements Serializable {
+
+ @TableField(value = "IDANALYSIS")
+ private Integer idanalysis;
+
+ @TableField(value = "SAMPLE_ID")
+ private Integer sampleId;
+
+ @TableField(value = "MODDATE")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date moddate;
+
+ @TableField(value = "ECUTANALYSIS_LOW")
+ private Double ecutanalysisLow;
+
+ @TableField(value = "ECUTANALYSIS_HIGH")
+ private Double ecutanalysisHigh;
+
+ @TableField(value = "ENERGYTOLERANCE")
+ private Double energytolerance;
+
+ @TableField(value = "CALIBRATIONPSS_HIGH")
+ private Double calibrationpssHigh;
+
+ @TableField(value = "CALIBRATIONPSS_LOW")
+ private Double calibrationpssLow;
+
+ @TableField(value = "BASEIMPROVEPSS")
+ private Double baseimprovepss;
+
+ @TableField(value = "PSS_LOW")
+ private Double pssLow;
+
+ @TableField(value = "K_BACK")
+ private Double KBack;
+
+ @TableField(value = "K_ALPHA")
+ private Double KAlpha;
+
+ @TableField(value = "K_BETA")
+ private Double KBeta;
+
+ @TableField(value = "RISKLEVELK")
+ private Double risklevelk;
+
+ @TableField(value = "BUPDATECAL")
+ private Integer bupdatecal;
+
+ @TableField(value = "KEEPCALPEAKSERCHPEAKS")
+ private Integer keepcalpeakserchpeaks;
+
+ @TableField(value = "REFTIME_ACT")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date reftimeAct;
+
+ @TableField(value = "REFTIME_CONC")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date reftimeConc;
+
+}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalyses.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalyses.java
index ca19a171..3bd28574 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalyses.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsAnalyses.java
@@ -31,12 +31,16 @@ public class GardsAnalyses implements Serializable {
* 分析开始时间
*/
@TableField(value = "ANALYSISBEGIN")
- private Data analysisBegin;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date analysisBegin;
/**
* 分析结束时间
*/
@TableField(value = "ANALYSISEND")
- private Data analysisEnd;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date analysisEnd;
/**
* Reviewed:交互,auto:自动
*/
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsNuclLinesIded.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsNuclLinesIded.java
index 833d2291..d497525e 100644
--- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsNuclLinesIded.java
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsNuclLinesIded.java
@@ -108,4 +108,14 @@ public class GardsNuclLinesIded implements Serializable {
*/
@TableField(value = "CSC_MOD_FLAG")
private Double cscModFlag;
+
+ @TableField(value = "NUCLIDEFULLNAME")
+ private String nuclidefullname;
+
+ @TableField(value = "MDC")
+ private String mdc;
+
+ @TableField(value = "CONCENTRATION")
+ private String concentration;
+
}
diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsQcCheck.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsQcCheck.java
new file mode 100644
index 00000000..9c79feb7
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnman/GardsQcCheck.java
@@ -0,0 +1,39 @@
+package org.jeecg.modules.base.entity.rnman;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName(value = "RNMAN.GARDS_QC_CHECK")
+public class GardsQcCheck implements Serializable {
+
+ @TableField(value = "SAMPLE_ID")
+ private Integer sampleId;
+
+ @TableField(value = "IDANALYSIS")
+ private Integer idanalysis;
+
+ @TableField(value = "QC_NAME")
+ private String qcName;
+
+ @TableField(value = "QC_VALUE")
+ private Double qcValue;
+
+ @TableField(value = "QC_STANDARD")
+ private String qcStandard;
+
+ @TableField(value = "QC_RESULT")
+ private Integer qcResult;
+
+ @TableField(value = "MODDATE")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date moddate;
+
+}
diff --git a/jeecg-module-spectrum-analysis/pom.xml b/jeecg-module-spectrum-analysis/pom.xml
index 9078fa1b..2803eafa 100644
--- a/jeecg-module-spectrum-analysis/pom.xml
+++ b/jeecg-module-spectrum-analysis/pom.xml
@@ -22,6 +22,13 @@
org.jeecgframework.boot
jeecg-boot-base-core
+
+
+
+ org.ejml
+ ejml-simple
+ 0.39
+
\ No newline at end of file
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java
new file mode 100644
index 00000000..a9f8454f
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/GammaFileUtil.java
@@ -0,0 +1,1637 @@
+package org.jeecg.common.util;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+import org.ejml.simple.SimpleMatrix;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.properties.SpectrumPathProperties;
+import org.jeecg.modules.base.entity.rnman.GardsAnalySetting;
+import org.jeecg.modules.entity.*;
+import org.jeecg.modules.entity.vo.*;
+import org.jeecg.modules.mapper.SpectrumAnalysisMapper;
+import org.jeecg.modules.native_jni.CalValuesHandler;
+import org.jeecg.modules.native_jni.EnergySpectrumHandler;
+import org.jeecg.modules.native_jni.struct.CalValuesOut;
+import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.w3c.dom.*;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Component
+public class GammaFileUtil {
+
+ @Value("${parameter.filePath}")
+ private String parameterFilePath;
+ @Autowired
+ private FTPUtil ftpUtil;
+ @Autowired
+ private SpectrumPathProperties spectrumPathProperties;
+ @Autowired
+ private SpectrumAnalysisMapper spectrumAnalysisMapper;
+ @Autowired
+ private RedisUtil redisUtil;
+
+ public void loadFile(Integer sampleId, PHDFile phd, Result result){
+ //根据sampleId获取sample文件路径
+ String sampleFilePath = spectrumAnalysisMapper.getSampleFilePath(sampleId);
+ if (StringUtils.isBlank(sampleFilePath)){
+ result.error500("样品文件不存在!");
+ }
+ String pathName = sampleFilePath.substring(0, sampleFilePath.lastIndexOf(StringPool.SLASH));
+ String fileName = sampleFilePath.substring(sampleFilePath.lastIndexOf(StringPool.SLASH)+1);
+ //连接ftp
+ FTPClient ftpClient = ftpUtil.LoginFTP();
+ if (Objects.isNull(ftpClient)){
+ result.error500("ftp连接失败");
+ }
+ //加载dll工具库
+ System.loadLibrary("ReadPHDFile");
+ try {
+ //切换被动模式
+ ftpClient.enterLocalPassiveMode();
+ ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
+ // 设置编码,当文件中存在中文且上传后文件乱码时可使用此配置项
+ ftpClient.setControlEncoding("UTF-8");
+ ftpClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
+ pathName = StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + pathName;
+ ftpClient.changeWorkingDirectory(pathName);
+ List ftpFiles = Arrays.asList(ftpClient.listFiles());
+ ftpFiles = ftpFiles.stream().filter(item-> item.getName().equals(fileName)).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(ftpFiles)){
+ result.error500("ftp获取文件数据失败");
+ }
+ FTPFile ftpFile = ftpFiles.get(0);
+ if (Objects.nonNull(ftpFile)){
+ InputStream inputStream = ftpClient.retrieveFileStream(ftpFile.getName());
+ //声明一个临时文件
+ File file = File.createTempFile("tmp", null);
+ //将ftp文件的输入流复制给临时文件
+ FileUtils.copyInputStreamToFile(inputStream, file);
+ //读取文件信息
+ EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath());
+ //MsgInfo
+ phd.getMsgInfo().setMsg_id(struct.msg_id);
+ phd.getMsgInfo().setMsg_type(struct.msg_type);
+ phd.getMsgInfo().setData_type(struct.data_type);
+ //Header
+ phd.getHeader().setDesignator(struct.designator);
+ phd.getHeader().setSite_code(struct.site_code);
+ phd.getHeader().setDetector_code(struct.detector_code);
+ phd.getHeader().setSystem_type(struct.system_type);
+ phd.getHeader().setSample_geometry(struct.sample_geometry);
+ phd.getHeader().setSpectrum_quantity(struct.spectrum_quantity);
+ phd.getHeader().setSample_ref_id(struct.sample_ref_id);
+ phd.getHeader().setMeasurement_id(struct.measurement_id);
+ phd.getHeader().setDetector_bk_measurement_id(struct.detector_bk_measurement_id);
+ phd.getHeader().setGas_bk_measurement_id(struct.gas_bk_measurement_id);
+ phd.getHeader().setTransmit_date(struct.transmit_date);
+ phd.getHeader().setTransmit_time(struct.transmit_time);
+ //Comment
+ phd.setOriTotalCmt(struct.comment);
+ //Collection
+ if (StringUtils.isNotBlank(struct.collection_start_date) || StringUtils.isNotBlank(struct.collection_start_time) || StringUtils.isNotBlank(struct.collection_stop_date) || StringUtils.isNotBlank(struct.collection_stop_time) || Objects.nonNull(struct.air_volume)){
+ phd.getCollect().setCollection_start_date(struct.collection_start_date);
+ phd.getCollect().setCollection_start_time(struct.collection_start_time);
+ phd.getCollect().setCollection_stop_date(struct.collection_stop_date);
+ phd.getCollect().setCollection_stop_time(struct.collection_stop_time);
+ phd.getCollect().setAir_volume(struct.air_volume);
+ if(phd.getCollect().getCollection_start_time().indexOf('.')<0) {
+ phd.getCollect().setCollection_start_time(phd.getCollect().getCollection_start_time()+".0");
+ }
+ if(phd.getCollect().getCollection_stop_time().indexOf('.')<0) {
+ phd.getCollect().setCollection_stop_time(phd.getCollect().getCollection_stop_time()+".0");
+ }
+ }else {
+ phd.getCollect().setAir_volume(0.0);
+ }
+ //Acquisition
+ if (StringUtils.isNotBlank(struct.acquisition_start_date) || StringUtils.isNotBlank(struct.acquisition_start_time) || Objects.nonNull(struct.acquisition_real_time) || Objects.nonNull(struct.acquisition_live_time)){
+ phd.getAcq().setAcquisition_start_date(struct.acquisition_start_date);
+ phd.getAcq().setAcquisition_start_time(struct.acquisition_start_time);
+ phd.getAcq().setAcquisition_real_time(struct.acquisition_real_time);
+ phd.getAcq().setAcquisition_live_time(struct.acquisition_live_time);
+ if(phd.getAcq().getAcquisition_start_time().indexOf('.')<0) {
+ phd.getAcq().setAcquisition_start_time(phd.getAcq().getAcquisition_start_time()+".0");
+ }
+ }else {
+ phd.getAcq().setAcquisition_live_time(0.0);
+ phd.getAcq().setAcquisition_real_time(0.0);
+ }
+ //Processing
+ if (Objects.nonNull(struct.sample_volume_of_Xe) || Objects.nonNull(struct.uncertainty_1) || Objects.nonNull(struct.Xe_collection_yield) || Objects.nonNull(struct.uncertainty_2) || StringUtils.isNotBlank(struct.archive_bottle_id) ){
+ phd.getProcess().setSample_volume_of_Xe(struct.sample_volume_of_Xe);
+ phd.getProcess().setUncertainty_1(struct.uncertainty_1);
+ phd.getProcess().setXe_collection_yield(struct.Xe_collection_yield);
+ phd.getProcess().setUncertainty_2(struct.uncertainty_2);
+ phd.getProcess().setArchive_bottle_id(struct.archive_bottle_id);
+ }else {
+ phd.getProcess().setSample_volume_of_Xe(0.0);
+ phd.getProcess().setXe_collection_yield(0.0);
+ phd.getProcess().setUncertainty_1(0.0);
+ phd.getProcess().setUncertainty_2(0.0);
+ }
+ //Sample
+ if (Objects.nonNull(struct.dimension_1) || Objects.nonNull(struct.dimension_2)){
+ phd.getSampleBlock().setDimension_1(struct.dimension_1);
+ phd.getSampleBlock().setDimension_2(struct.dimension_2);
+ }else {
+ phd.getSampleBlock().setDimension_1(0.0);
+ phd.getSampleBlock().setDimension_2(0.0);
+ }
+ //Calibration
+ if (StringUtils.isNotBlank(struct.date_calibration) || StringUtils.isNotBlank(struct.time_calibration)){
+ phd.getCalibration().setDate_calibration(struct.date_calibration);
+ phd.getCalibration().setTime_calibration(struct.time_calibration);
+ }
+ //Certificate
+ if (Objects.nonNull(struct.total_source_activity) || StringUtils.isNotBlank(struct.assay_date) || StringUtils.isNotBlank(struct.assay_time) || StringUtils.isNotBlank(struct.units_activity) || CollectionUtils.isNotEmpty(struct.nuclide_name)
+ || CollectionUtils.isNotEmpty(struct.half_life_time) || CollectionUtils.isNotEmpty(struct.time_unit) || CollectionUtils.isNotEmpty(struct.activity_nuclide_time_assay) || CollectionUtils.isNotEmpty(struct.uncertainty)
+ || CollectionUtils.isNotEmpty(struct.cer_g_energy) || CollectionUtils.isNotEmpty(struct.g_intensity) || CollectionUtils.isNotEmpty(struct.electron_decay_mode) || CollectionUtils.isNotEmpty(struct.maximum_energy) || CollectionUtils.isNotEmpty(struct.intensity_b_particle) || Objects.nonNull(struct.record_count)){
+ phd.getCertificate().setTotal_source_activity(struct.total_source_activity);
+ phd.getCertificate().setAssay_date(struct.assay_date);
+ phd.getCertificate().setAssay_time(struct.assay_time);
+ phd.getCertificate().setUnits_activity(struct.units_activity);
+ phd.getCertificate().setNuclide_name(struct.nuclide_name);
+ phd.getCertificate().setHalf_life_time(struct.half_life_time);
+ phd.getCertificate().setTime_unit(struct.time_unit);
+ phd.getCertificate().setActivity_nuclide_time_assay(struct.activity_nuclide_time_assay);
+ phd.getCertificate().setUncertainty(struct.uncertainty);
+ phd.getCertificate().setG_energy(struct.cer_g_energy);
+ phd.getCertificate().setG_intensity(struct.g_intensity);
+ phd.getCertificate().setElectron_decay_mode(struct.electron_decay_mode);
+ phd.getCertificate().setMaximum_energy(struct.maximum_energy);
+ phd.getCertificate().setIntensity_b_particle(struct.intensity_b_particle);
+ phd.getCertificate().setRecord_count(struct.record_count);
+ }
+ //g_Spectrum
+ if (Objects.nonNull(struct.num_g_channel) || Objects.nonNull(struct.g_energy_span) || Objects.nonNull(struct.g_begin_channel) || CollectionUtils.isNotEmpty(struct.g_counts)){
+ phd.getSpec().setNum_g_channel(struct.num_g_channel);
+ phd.getSpec().setG_energy_span(struct.g_energy_span);
+ phd.getSpec().setBegin_channel(struct.g_begin_channel);
+ phd.getSpec().setCounts(struct.g_counts);
+ int i=0;
+ for (;i 0){
+ break;
+ }
+ }
+ if(i == phd.getSpec().getNum_g_channel()){
+ phd.setValid(false);
+ }
+ }
+ //g_Energy
+ if (CollectionUtils.isNotEmpty(struct.g_energy) || CollectionUtils.isNotEmpty(struct.g_centroid_channel) || CollectionUtils.isNotEmpty(struct.g_uncertainty) || Objects.nonNull(struct.g_record_count)){
+ GEnergyBlock gEnergyBlock = new GEnergyBlock();
+ gEnergyBlock.setG_energy(struct.g_energy);
+ gEnergyBlock.setCentroid_channel(struct.g_centroid_channel);
+ gEnergyBlock.setUncertainty(struct.g_uncertainty);
+ gEnergyBlock.setRecord_count(struct.g_record_count);
+ phd.getMapEnerKD().put("PHD", gEnergyBlock);
+ }
+ //g_Resolution
+ if (CollectionUtils.isNotEmpty(struct.g_r_energy) || CollectionUtils.isNotEmpty(struct.g_r_FWHM) || CollectionUtils.isNotEmpty(struct.g_r_uncertainty) || Objects.nonNull(struct.g_r_record_count)){
+ GResolutionBlock gResolutionBlock = new GResolutionBlock();
+ gResolutionBlock.setG_energy(struct.g_r_energy);
+ gResolutionBlock.setFWHM(struct.g_r_FWHM);
+ gResolutionBlock.setUncertainty(struct.g_r_uncertainty);
+ gResolutionBlock.setRecord_count(struct.g_r_record_count);
+ phd.getMapResoKD().put("PHD", gResolutionBlock);
+ }
+ //g_Efficiency
+ if (CollectionUtils.isNotEmpty(struct.g_e_energy) || CollectionUtils.isNotEmpty(struct.g_e_efficiency) || CollectionUtils.isNotEmpty(struct.g_e_uncertainty) || Objects.nonNull(struct.g_e_record_count)){
+ GEfficiencyBlock gEfficiencyBlock = new GEfficiencyBlock();
+ gEfficiencyBlock.setG_energy(struct.g_e_energy);
+ gEfficiencyBlock.setEfficiency(struct.g_e_efficiency);
+ gEfficiencyBlock.setUncertainty(struct.g_e_uncertainty);
+ gEfficiencyBlock.setRecord_count(struct.g_e_record_count);
+ phd.getMapEffiKD().put("PHD", gEfficiencyBlock);
+ }
+ //TotalEff
+ if (CollectionUtils.isNotEmpty(struct.t_g_energy) || CollectionUtils.isNotEmpty(struct.total_efficiency) || CollectionUtils.isNotEmpty(struct.t_uncertainty) || Objects.nonNull(struct.t_record_count)){
+ TotaleffBlock totaleffBlock = new TotaleffBlock();
+ totaleffBlock.setG_energy(struct.t_g_energy);
+ totaleffBlock.setTotal_efficiency(struct.total_efficiency);
+ totaleffBlock.setUncertainty(struct.t_uncertainty);
+ totaleffBlock.setRecord_count(struct.t_record_count);
+ phd.getMapTotEKD().put("PHD", totaleffBlock);
+ }
+
+ // 初始化默认分析设置
+ if(phd.getHeader().getSystem_type().equals("P")) {
+ phd.getSetting().setECutAnalysis_Low(35.0);
+ phd.getSetting().setBUpdateCal(true);
+ }
+ phd.getSetting().setRefTime_conc(DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0, phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss"));
+ phd.getSetting().setRefTime_act(DateUtils.parseDate(phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0, phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss"));
+ phd.setUsedSetting(phd.getSetting());
+
+ phd.setBAnalyed(false);
+ phd.setAnaly_start_time(DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"));
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ } finally {
+ try {
+ if (Objects.nonNull(ftpClient)){
+ ftpClient.disconnect();
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ public boolean getResultFromDB(String dbName, Integer sampleId, PHDFile phd, Result result){
+ //判断连接的数据库
+ String T_analy, T_calib, T_peaks, T_param, T_nuc_line, T_nuc_act, T_qc, T_setting;
+ if (dbName.equals("auto")){
+ T_analy = "RNAUTO.GARDS_ANALYSES";
+ T_calib = "RNAUTO.GARDS_CALIBRATION_PAIRS";
+ T_peaks = "RNAUTO.GARDS_PEAKS";
+ T_param = "RNAUTO.GARDS_CALIBRATION";
+ T_nuc_line = "RNAUTO.GARDS_NUCL_LINES_IDED";
+ T_nuc_act = "RNAUTO.GARDS_NUCL_IDED";
+ T_qc = "RNAUTO.GARDS_QC_CHECK";
+ }else {
+ T_analy = "RNMAN.GARDS_ANALYSES";
+ T_calib = "RNMAN.GARDS_CALIBRATION_PAIRS";
+ T_peaks = "RNMAN.GARDS_PEAKS";
+ T_param = "RNMAN.GARDS_CALIBRATION";
+ T_nuc_line = "RNMAN.GARDS_NUCL_LINES_IDED";
+ T_nuc_act = "RNMAN.GARDS_NUCL_IDED";
+ T_qc = "RNMAN.GARDS_QC_CHECK";
+ T_setting = "RNMAN.GARDS_ANALY_SETTING";
+ }
+
+ String status = spectrumAnalysisMapper.getStatus(sampleId);
+ if (StringUtils.isNotBlank(status)){
+ phd.setStatus(status);
+ if (!phd.getStatus().equals("P") && !phd.getStatus().equals("R")){
+ return false;
+ }
+ }else {
+ return false;
+ }
+
+ // 获取 ananlysis_id、BaseLine、Lc、Scac、峰数量、Category、谱注释等信息
+ GardsAnalysesSpectrum analysis = spectrumAnalysisMapper.getAnalysis(T_analy, sampleId);
+ int peakNum = 0;
+ if (Objects.nonNull(analysis)){
+ phd.setId_analysis(analysis.getIdAnalysis().toString());
+ phd.setBaseline_path(StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + analysis.getBaselinePath());
+ phd.setLc_path(StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + analysis.getLcPath());
+ phd.setScac_path(StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + analysis.getScacPath());
+ peakNum = analysis.getNumberOfPeaks();
+ phd.setTotalCmt(analysis.getComments());
+ phd.getBaseCtrls().setRg_low(analysis.getSearchStartChannel());
+ phd.getBaseCtrls().setRg_high(analysis.getSearchEndChannel());
+ phd.getUsedSetting().setEnergyTolerance(analysis.getSearchThreshold());
+ }else {
+ result.error500("There are 0 records when sample_id is "+sampleId+"!");
+ }
+
+ if (peakNum>0){
+ // 获取峰信息列表
+ List peaks = spectrumAnalysisMapper.getPeaks(T_peaks, analysis.getIdAnalysis());
+ if (CollectionUtils.isNotEmpty(peaks)){
+ for (GardsPeaksSpectrum peaksSpectrum:peaks) {
+ PeakInfo peakInfo = new PeakInfo();
+ peakInfo.index = peaksSpectrum.getIdPeak()==null?0:peaksSpectrum.getIdPeak();
+ peakInfo.multiIndex = peaksSpectrum.getMulitiIndex()==null?0:peaksSpectrum.getMulitiIndex().intValue();
+ peakInfo.left = peaksSpectrum.getRoiStart()==null?0:peaksSpectrum.getRoiStart().intValue();
+ peakInfo.right = peaksSpectrum.getRoiEnd()==null?0:peaksSpectrum.getRoiEnd().intValue();
+ peakInfo.peakCentroid = peaksSpectrum.getCentroidChannel()==null?0:peaksSpectrum.getCentroidChannel();
+ peakInfo.energy = peaksSpectrum.getEnergy()==null?0:peaksSpectrum.getEnergy();
+ peakInfo.fwhmc = peaksSpectrum.getFwtm()==null?0:peaksSpectrum.getFwtm();
+ peakInfo.fwhm = peaksSpectrum.getFwhm()==null?0:peaksSpectrum.getFwhm();
+ peakInfo.area = peaksSpectrum.getArea()==null?0:peaksSpectrum.getArea();
+ peakInfo.areaErr = peaksSpectrum.getUncArea()==null?0:peaksSpectrum.getUncArea();
+ peakInfo.efficiency = peaksSpectrum.getEfficiency()==null?0:peaksSpectrum.getEfficiency();
+ peakInfo.lc = peaksSpectrum.getLc()==null?0:peaksSpectrum.getLc();
+ peakInfo.ld = peaksSpectrum.getLd()==null?0:peaksSpectrum.getLd();
+ peakInfo.meanBackCount = peaksSpectrum.getMeanbackcount()==null?0:peaksSpectrum.getMeanbackcount();
+ peakInfo.backgroundArea = peaksSpectrum.getBackgroundarea()==null?0:peaksSpectrum.getBackgroundarea();
+ peakInfo.significance = peaksSpectrum.getSignificance()==null?0:peaksSpectrum.getSignificance();
+ peakInfo.sensitivity = peaksSpectrum.getSensitivity()==null?0:peaksSpectrum.getSensitivity();
+ peakInfo.stepRatio = peaksSpectrum.getStepraio()==null?0:peaksSpectrum.getStepraio();
+ peakInfo.tail = peaksSpectrum.getTail()==null?0:peaksSpectrum.getTail();
+ peakInfo.tailAlpha = peaksSpectrum.getTailAlpha()==null?0:peaksSpectrum.getTailAlpha();
+ peakInfo.upperTail = peaksSpectrum.getUpperTail()==null?0:peaksSpectrum.getUpperTail();
+ peakInfo.upperTailAlpha = peaksSpectrum.getUpperTailAlpha()==null?0:peaksSpectrum.getUpperTailAlpha();
+ peakInfo.BWWidthChan = peaksSpectrum.getBwwidthchan()==null?0:peaksSpectrum.getBwwidthchan();
+ peakInfo.recoilDeltaChan = peaksSpectrum.getRecoildeltachan()==null?0:peaksSpectrum.getRecoildeltachan();
+ peakInfo.comments = peaksSpectrum.getPeakcomments();
+ phd.getVPeak().add(peakInfo);
+ }
+ }
+ if (phd.getVPeak().size()!=peakNum){
+ result.error500("The peaks' number in "+T_peaks+" and "+T_analy+" isn't equal.");
+ }
+ }
+ // 获取刻度点数据
+ List calibrationPairs = spectrumAnalysisMapper.getCalibrationPairs(T_calib, analysis.getIdAnalysis());
+ if (CollectionUtils.isNotEmpty(calibrationPairs)){
+ GEnergyBlock gEnergyBlock = new GEnergyBlock();
+ GResolutionBlock gResolutionBlock = new GResolutionBlock();
+ GEfficiencyBlock gEfficiencyBlock = new GEfficiencyBlock();
+ TotaleffBlock totaleffBlock = new TotaleffBlock();
+ for (GardsCalibrationPairsSpectrum pairsSpectrum:calibrationPairs) {
+ String calType = pairsSpectrum.getCaltype().trim();
+ if(calType.equals("energy")) {
+ phd.setUsedEner(pairsSpectrum.getInput());
+ gEnergyBlock.getCentroid_channel().add(pairsSpectrum.getXValue());
+ gEnergyBlock.getG_energy().add(pairsSpectrum.getYValue());
+ gEnergyBlock.getUncertainty().add(pairsSpectrum.getUncYValue().isEmpty()? null:Double.valueOf(pairsSpectrum.getUncYValue()));
+ } else if(calType.equals("Resolution")) {
+ phd.setUsedReso(pairsSpectrum.getInput());
+ gResolutionBlock.getG_energy().add(pairsSpectrum.getXValue());
+ gResolutionBlock.getFWHM().add(pairsSpectrum.getYValue());
+ gResolutionBlock.getUncertainty().add(pairsSpectrum.getUncYValue().isEmpty()? null: Double.valueOf(pairsSpectrum.getUncYValue()));
+ } else if(calType.equals("efficiency")) {
+ phd.setUsedEffi(pairsSpectrum.getInput());
+ gEfficiencyBlock.getG_energy().add(pairsSpectrum.getXValue());
+ gEfficiencyBlock.getEfficiency().add(pairsSpectrum.getYValue());
+ gEfficiencyBlock.getUncertainty().add(pairsSpectrum.getUncYValue().isEmpty()? null: Double.valueOf(pairsSpectrum.getUncYValue()));
+ } else if(calType.equals("TotalEfficiency")) {
+ phd.setUsedTotE(pairsSpectrum.getInput());
+ totaleffBlock.getG_energy().add(pairsSpectrum.getXValue());
+ totaleffBlock.getTotal_efficiency().add(pairsSpectrum.getYValue());
+ totaleffBlock.getUncertainty().add(pairsSpectrum.getUncYValue().isEmpty()? null: Double.valueOf(pairsSpectrum.getUncYValue()));
+ }
+ }
+ if (phd.getUsedEner().isEmpty()){
+ phd.setUsedEner("PHD");
+ }
+ if (phd.getUsedReso().isEmpty()){
+ phd.setUsedReso("PHD");
+ }
+ if (phd.getUsedEffi().isEmpty()){
+ phd.setUsedEffi("PHD");
+ }
+ if (phd.getUsedTotE().isEmpty()){
+ phd.setUsedTotE("PHD");
+ }
+ gEnergyBlock.setRecord_count(gEnergyBlock.getG_energy().size());
+ gResolutionBlock.setRecord_count(gResolutionBlock.getG_energy().size());
+ gEfficiencyBlock.setRecord_count(gEfficiencyBlock.getG_energy().size());
+ totaleffBlock.setRecord_count(totaleffBlock.getG_energy().size());
+ if(gEnergyBlock.getRecord_count() > 0) {
+ phd.setUsedEnerKD(gEnergyBlock);
+ phd.getMapEnerKD().put(phd.getUsedEner(), gEnergyBlock);
+ } else {
+ result.error500("There are 0 records of Energy Calibration!");
+ }
+
+ if(gResolutionBlock.getRecord_count() > 0) {
+ phd.setUsedResoKD(gResolutionBlock);
+ phd.getMapResoKD().put(phd.getUsedReso(), gResolutionBlock);
+ } else {
+ result.error500("There are 0 records of Resolution Calibration!");
+ }
+
+ if(gEfficiencyBlock.getRecord_count() > 0) {
+ phd.setUsedEffiKD(gEfficiencyBlock);
+ phd.getMapEffiKD().put(phd.getUsedEffi(), gEfficiencyBlock);
+ } else {
+ result.error500("There are 0 records of Efficiency Calibration!");
+ }
+
+ if(totaleffBlock.getRecord_count() > 0) {
+ phd.setUsedTotEKD(totaleffBlock);
+ phd.getMapTotEKD().put(phd.getUsedTotE(), totaleffBlock);
+ } else {
+ result.error500("There are 0 records of Total_efficiency Calibration!");
+ }
+ }
+ // 获取刻度拟合系数
+ List paras = spectrumAnalysisMapper.getPara(T_param, analysis.getIdAnalysis());
+ if (CollectionUtils.isNotEmpty(paras)){
+ for (GardsCalibrationSpectrum calibrationSpectrum:paras) {
+ ParameterInfo para = new ParameterInfo();
+ String calType = calibrationSpectrum.getCalType().trim();
+ para.getP().add(calibrationSpectrum.getFunction().doubleValue());
+ String[] list_coeff = calibrationSpectrum.getCoeffString().split(StringPool.COMMA);
+ for (String str:list_coeff) {
+ para.getP().add(Double.valueOf(str));
+ para.getPerr().add(null);
+ }
+ if(calType.equals("energy")) {
+ phd.setUsedEnerPara(para);
+ phd.getMapEnerPara().put(phd.getUsedEner(), para);
+ phd.setNewEner(phd.getUsedEner());
+ } else if(calType.equals("Resolution")) {
+ phd.setUsedResoPara(para);
+ phd.getMapResoPara().put(phd.getUsedReso(), para);
+ phd.setNewReso(phd.getUsedReso());
+ } else if(calType.equals("efficiency")) {
+ phd.setUsedEffiPara(para);
+ phd.getMapEffiPara().put(phd.getUsedEffi(), para);
+ phd.setNewEffi(phd.getUsedEffi());
+ } else if(calType.equals("TotalEfficiency")) {
+ phd.setUsedTotEPara(para);
+ phd.getMapTotEPara().put(phd.getUsedTotE(), para);
+ phd.setNewTotE(phd.getUsedTotE());
+ }
+ }
+ }
+ // 获取被识别核素射线信息
+ List nuclLinesIdeds = spectrumAnalysisMapper.getNuclLinesIded(T_nuc_line, analysis.getIdAnalysis());
+ if (CollectionUtils.isNotEmpty(nuclLinesIdeds)){
+ for (GardsNuclLinesIdedSpectrum nuclLinesIdedSpectrum:nuclLinesIdeds) {
+ String str_key = nuclLinesIdedSpectrum.getNuclideName();
+ phd.getMapNucActMda().put(str_key, new NuclideActMda());
+ if(Objects.nonNull(phd.getMapNucActMda().get(str_key))) {
+ phd.getMapNucActMda().get(str_key).setActivity(Double.valueOf(nuclLinesIdedSpectrum.getActivity()));
+ phd.getMapNucActMda().get(str_key).setAct_err(nuclLinesIdedSpectrum.getUncActivity());
+ phd.getMapNucActMda().get(str_key).setEfficiency(nuclLinesIdedSpectrum.getEffic());
+ phd.getMapNucActMda().get(str_key).setEffi_err(nuclLinesIdedSpectrum.getUncEffic());
+ phd.getMapNucActMda().get(str_key).setMda(nuclLinesIdedSpectrum.getMda());
+ phd.getMapNucActMda().get(str_key).setMdc(Double.valueOf(nuclLinesIdedSpectrum.getMdc()));
+ phd.getMapNucActMda().get(str_key).setConcentration(Double.valueOf(nuclLinesIdedSpectrum.getConcentration()));
+ if(phd.getMapNucActMda().get(str_key).getActivity() > 0){
+ phd.getMapNucActMda().get(str_key).setBCalculateMDA(true);
+ }
+ }
+ if(nuclLinesIdedSpectrum.getKeyFlag().toString().equals("1")){
+ phd.getMapNucActMda().get(str_key).setKey_flag(phd.getMapNucActMda().get(str_key).getVYield().size());
+ }
+ phd.getMapNucActMda().get(str_key).getFullNames().add(nuclLinesIdedSpectrum.getNuclidefullname());
+ phd.getMapNucActMda().get(str_key).getVEnergy().add(nuclLinesIdedSpectrum.getEnergy());
+ phd.getMapNucActMda().get(str_key).getVUncertE().add(nuclLinesIdedSpectrum.getUncEnergy());
+ phd.getMapNucActMda().get(str_key).getVYield().add(nuclLinesIdedSpectrum.getAbundance());
+ phd.getMapNucActMda().get(str_key).getVUncertY().add(nuclLinesIdedSpectrum.getUncAbundance());
+
+ int idx = nuclLinesIdedSpectrum.getIdPeak() - 1;
+ if(idx >= 0 && idx < peakNum) {
+ phd.getMapNucActMda().get(str_key).getVPeakIdx().add(idx+1);
+ if(!phd.getVPeak().get(idx).nuclides.contains(str_key)){
+ phd.getVPeak().get(idx).nuclides.add(str_key);
+ }
+ }
+ }
+ }
+ // 获取被识别核素的活度浓度
+ List nuclIdeds = spectrumAnalysisMapper.getNuclIded(T_nuc_act, analysis.getIdAnalysis());
+ if (CollectionUtils.isNotEmpty(nuclIdeds)){
+ for (GardsNuclIdedSpectrum nuclIdedSpectrum:nuclIdeds) {
+ String str_key = nuclIdedSpectrum.getNuclideName();
+ if(Objects.isNull(phd.getMapNucActMda().get(str_key))) {
+ phd.getMapNucActMda().get(str_key).setHalflife(Double.valueOf(nuclIdedSpectrum.getHalflife()));
+ List vEner = phd.getMapNucActMda().get(str_key).getVEnergy();
+ Double key_ener = Double.valueOf(nuclIdedSpectrum.getKeyEnergy());
+ for(int i=0; i qcChecks = spectrumAnalysisMapper.getQcCheck(T_qc, analysis.getIdAnalysis());
+ if (CollectionUtils.isNotEmpty(qcChecks)){
+ for (GardsQcCheckSpectrum qcCheckSpectrum:qcChecks) {
+ String str_key = qcCheckSpectrum.getQcName();
+ QcCheckItem qcCheckItem = new QcCheckItem();
+ qcCheckItem.setValue(qcCheckSpectrum.getQcValue());
+ qcCheckItem.setBPass(qcCheckSpectrum.getQcResult() == 1);
+ qcCheckItem.setStandard(qcCheckSpectrum.getQcStandard());
+ phd.getQcItems().put(str_key, qcCheckItem);
+ }
+ }
+ // 从 RNMAN.GARDS_ANALY_SETTING 表读分析设置
+ if (dbName.equals("auto")){
+ GardsAnalySetting analySetting = spectrumAnalysisMapper.getAnalySetting(analysis.getIdAnalysis());
+ if (Objects.nonNull(analySetting)){
+ phd.getUsedSetting().setECutAnalysis_Low(analySetting.getEcutanalysisLow());
+ double t_d = analySetting.getEcutanalysisHigh();
+ phd.getUsedSetting().setECutAnalysis_High((t_d <= phd.getUsedSetting().getECutAnalysis_Low() ? null : t_d));
+ phd.getUsedSetting().setEnergyTolerance(analySetting.getEnergytolerance());
+ phd.getUsedSetting().setCalibrationPSS_high(analySetting.getCalibrationpssHigh());
+ phd.getUsedSetting().setCalibrationPSS_low(analySetting.getCalibrationpssLow());
+ phd.getUsedSetting().setBaseImprovePSS(analySetting.getBaseimprovepss());
+ phd.getUsedSetting().setPSS_low(analySetting.getPssLow());
+ phd.getUsedSetting().setK_back(analySetting.getKBack());
+ phd.getUsedSetting().setK_alpha(analySetting.getKAlpha());
+ phd.getUsedSetting().setK_beta(analySetting.getKBeta());
+ phd.getUsedSetting().setRiskLevelK(analySetting.getRisklevelk());
+ phd.getUsedSetting().setBUpdateCal(analySetting.getBupdatecal() == 1);
+ phd.getUsedSetting().setKeepCalPeakSearchPeaks(analySetting.getKeepcalpeakserchpeaks() == 1);
+ Date reftimeAct = analySetting.getReftimeAct();
+ if(Objects.nonNull(reftimeAct)){
+ phd.getUsedSetting().setRefTime_act(reftimeAct);
+ }
+ Date reftimeConc = analySetting.getReftimeConc();
+ if(Objects.nonNull(reftimeConc)){
+ phd.getUsedSetting().setRefTime_conc(reftimeConc);
+ }
+ }
+ }
+
+ if(!phd.getUsedEnerPara().getP().isEmpty()) {
+ List vChan = new LinkedList<>();
+ double c = 1;
+ while(c <= phd.getSpec().getNum_g_channel()) {
+ vChan.add(c);
+ c += 1;
+ }
+ System.loadLibrary("GammaAnaly");
+ CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(vChan, phd.getUsedEnerPara().getP());
+ phd.setVEnergy(calValuesOut.counts);
+ phd.setBAnalyed(true);
+ }
+ return true;
+ }
+
+ public List Qcstate(PHDFile phd){
+ // Collection Time、 Acq Time、 Decay Time、 SampVol、 Be7-FWHM、 Ba140-MDC、 Xe133-MDC
+ List qcState = new LinkedList<>();
+ for (int i=0;i<7; i++){
+ qcState.add("GRAY");
+ }
+ if(phd.getQcItems().size() <= 5) {
+ this.RunQC(phd);
+ }
+ qcState.set(0, phd.getQcItems().get("col_time").isBPass()?"BLUE":"RED");
+ qcState.set(1, phd.getQcItems().get("acq_time").isBPass()?"BLUE":"RED");
+ qcState.set(2, phd.getQcItems().get("decay_time").isBPass()?"BLUE":"RED");
+ qcState.set(3, phd.getQcItems().get("samp_vol").isBPass()?"BLUE":"RED");
+
+ if(phd.getHeader().getSystem_type().equals("P")) {
+ if(Objects.isNull(phd.getQcItems().get("Be7-FWHM"))) {
+ qcState.set(4, phd.getQcItems().get("Be7-FWHM").isBPass()?"BLUE":"RED");
+ qcState.set(5, phd.getQcItems().get("Ba140-MDC").isBPass()?"BLUE":"RED");
+ }
+ } else if(phd.getHeader().getSystem_type().equals("G")) {
+ if(Objects.isNull(phd.getQcItems().get("Xe133-MDC"))) {
+ qcState.set(6, phd.getQcItems().get("Xe133-MDC").isBPass()?"BLUE":"RED");
+ }
+ }
+ return qcState;
+ }
+
+ public void RunQC(PHDFile phd){
+ try {
+ System.loadLibrary("GammaAnaly");
+ Date start = DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0, phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss");
+ Date end = DateUtils.parseDate(phd.getCollect().getCollection_stop_date() + " " + phd.getCollect().getCollection_stop_time().substring(0, phd.getCollect().getCollection_stop_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss");
+ Date acq = DateUtils.parseDate(phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0, phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss");
+
+ double collect_hour = (start.getTime()/1000 - end.getTime()/1000) / 3600.0;
+ double acq_hour = phd.getAcq().getAcquisition_real_time() / 3600.0;
+ double Decay_hour = (end.getTime()/1000 - acq.getTime()/1000) / 3600.0;
+
+ Double ener_Be7 = 0.0;
+ List vMdcInfo = new LinkedList<>();
+ Map qcItems = new LinkedHashMap<>();
+ if(!this.ReadQCLimit(qcItems, vMdcInfo, ener_Be7, phd.getHeader().getSystem_type())) {
+ String WARNING = "Read QC Flags from SystemManager.xml Failed!";
+ }
+ QcCheckItem colTime = qcItems.get("col_time");
+ colTime.setValue(collect_hour);
+ qcItems.put("col_time", colTime);
+
+ QcCheckItem acqTime = qcItems.get("acq_time");
+ acqTime.setValue(acq_hour);
+ qcItems.put("acq_time", acqTime);
+
+ QcCheckItem decayTime = qcItems.get("decay_time");
+ decayTime.setValue(Decay_hour);
+ qcItems.put("decay_time", decayTime);
+
+ QcCheckItem sampVol = qcItems.get("samp_vol");
+ sampVol.setValue(phd.getCollect().getAir_volume());
+ qcItems.put("samp_vol", sampVol);
+
+ QcCheckItem airFlow = qcItems.get("airFlow");
+ airFlow.setValue(phd.getCollect().getAir_volume() / collect_hour);
+ qcItems.put("airFlow", airFlow);
+
+ if(phd.isValid() && phd.getVBase().size() == phd.getSpec().getNum_g_channel()) {
+ if(phd.getHeader().getSystem_type().equals("P")) {
+ List energy = new LinkedList<>();
+ energy.add(ener_Be7);
+ System.loadLibrary("GammaAnaly");
+ CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(energy, phd.getUsedResoPara().getP());
+ List fwhm = calValuesOut.counts;
+ QcCheckItem be7 = qcItems.get("Be7-FWHM");
+ be7.setValue(fwhm.get(0));
+ qcItems.put("Be7-FWHM", be7);
+ QcCheckItem Ba140 = qcItems.get("Ba140-MDC");
+ Ba140.setValue(CalculateMDC(phd, vMdcInfo, 1.0));
+ qcItems.put("Ba140-MDC", Ba140);
+ } else {
+ QcCheckItem Xe133 = qcItems.get("Xe133-MDC");
+ Xe133.setValue(CalculateMDC(phd, vMdcInfo, 1.0));
+ qcItems.put("Xe133-MDC", Xe133);
+ }
+ }
+
+ for(Map.Entry iter:qcItems.entrySet()){
+ if(iter.getValue().getStandard().isEmpty()){
+ continue;
+ }
+ String[] lists = iter.getValue().getStandard().split(StringPool.COMMA);
+ boolean bSatisfy = true;
+ for(String str : lists) {
+ if(str.contains(StringPool.DASH)){
+ continue;
+ } else if(str.contains(StringPool.LEFT_BRACKET)) {
+ if(iter.getValue().getValue() <= Double.valueOf(str.replace(StringPool.LEFT_BRACKET,""))) {
+ bSatisfy = false;
+ break;
+ }
+ } else if(str.contains(StringPool.RIGHT_BRACKET)) {
+ if(iter.getValue().getValue() >= Double.valueOf(str.replace(StringPool.RIGHT_BRACKET,""))) {
+ bSatisfy = false;
+ break;
+ }
+ } else if(str.contains(StringPool.LEFT_SQ_BRACKET)) {
+ if(iter.getValue().getValue() < Double.valueOf(str.replace(StringPool.LEFT_SQ_BRACKET,""))) {
+ bSatisfy = false;
+ break;
+ }
+ } else if(str.contains(StringPool.RIGHT_SQ_BRACKET)) {
+ if(iter.getValue().getValue() > Double.valueOf(str.replace(StringPool.RIGHT_SQ_BRACKET,""))) {
+ bSatisfy = false;
+ break;
+ }
+ }
+ }
+ iter.getValue().setBPass(bSatisfy);
+ }
+ phd.setQcItems(qcItems);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public Double CalculateMDC(PHDFile phd, List vMdcInfo, Double CCF){
+ try {
+ System.loadLibrary("GammaAnaly");
+ if(vMdcInfo.size() < 3 || vMdcInfo.get(2) == 0) {
+ return 0.0;
+ }
+ Date collectStart = DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0,phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ Date collectStop = DateUtils.parseDate(phd.getCollect().getCollection_stop_date() + " " + phd.getCollect().getCollection_stop_time().substring(0,phd.getCollect().getCollection_stop_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ Date acqStart = DateUtils.parseDate(phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0,phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ double Ts = (collectStart.getTime()/1000 - collectStop.getTime()/1000); // 采样时间
+ double Td = (collectStop.getTime()/1000 - acqStart.getTime()/1000); // 衰变时间
+ double Ta = phd.getAcq().getAcquisition_real_time(); // 能谱获取实时间
+ double Tl = phd.getAcq().getAcquisition_live_time(); // 能谱获取活时间
+ double Svol = phd.getCollect().getAir_volume(); // 样品采样体积
+ double DCF1, DCF2, DCF3;
+
+ double lambda = Math.log(2.0) / (vMdcInfo.get(2) * 86400);
+ if ( Ts == 0 ) DCF1 = 1;
+ else DCF1 = lambda * Ts / (1-Math.exp(-lambda*Ts));
+ if ( Td == 0 ) DCF2 = 1;
+ else DCF2 = Math.exp(lambda*Td);
+ if ( Ta == 0 ) DCF3 = 1;
+ else DCF3 = lambda * Ta / (1-Math.exp(-lambda*Ta));
+
+ double DCF_conc = Math.exp(lambda * (phd.getUsedSetting().getRefTime_conc().getTime()/1000 - collectStart.getTime()/1000));
+
+ List energy = new LinkedList<>();
+ energy.add(vMdcInfo.get(0));
+ //使用energyToChannel方法计算
+ CalValuesOut energyToChannel = CalValuesHandler.energyToChannel(energy, phd.getUsedEnerPara().getP());
+ List channel = energyToChannel.counts;
+ //使用calDerivEval方法计算dE矩阵
+ CalValuesOut calDerivEval = CalValuesHandler.calDerivEval(channel, phd.getUsedEnerPara().getP());
+ List dE = calDerivEval.counts;
+ double[] array = dE.stream().mapToDouble(Double::doubleValue).toArray();
+ SimpleMatrix dEMatrix = new SimpleMatrix(calDerivEval.rowNum, calDerivEval.colNum, true, array);
+ //calFcnEval计算得到矩阵数据
+ CalValuesOut calFcnEval = CalValuesHandler.calFcnEval(energy, phd.getUsedEnerPara().getP());
+ List counts = calFcnEval.counts;
+ //计算后的矩阵的集合转换成数组
+ double[] array2 = counts.stream().mapToDouble(Double::doubleValue).toArray();
+ //按照行数 列数 实际数据 生成矩阵
+ SimpleMatrix calMatrix = new SimpleMatrix(calFcnEval.rowNum, calFcnEval.colNum, true, array2);
+ //计算后的矩阵 / dE矩阵 得到除后的矩阵
+ SimpleMatrix matrixC = calMatrix.elementDiv(dEMatrix);
+ //声明一个集合接收除后的矩阵数据
+ List values = new LinkedList<>();
+ //遍历相除后的矩阵 行数
+ for (int i=0; i= vMdcInfo.get(0)) {
+ index = i;
+ if(phd.getVEnergy().get(i) - vMdcInfo.get(0) > vMdcInfo.get(0) - phd.getVEnergy().get(i-1)){
+ index = i-1;
+ }
+ break;
+ }
+ }
+ double lcc = phd.getVLc().get(index);
+ double baseline = phd.getVBase().get(index);
+ double mdc = (2 * fwhmc * (lcc - baseline) / 0.8591 ) * CCF*DCF1*DCF2*DCF3*DCF_conc / ( vMdcInfo.get(1) * effi * Tl ) *1e6 / Svol;
+ return mdc;
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public boolean ReadQCLimit(Map qcItems, List vMdcInfo,Double ener_Be7, String systemType){
+ try {
+ String filePath = parameterFilePath+ File.separator +"SystemManager.xml";
+ //创建一个文档解析器工厂
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ //创建文档解析器
+ DocumentBuilder documentBuilder = factory.newDocumentBuilder();
+ //读取xml文件生成一个文档
+ Document document = documentBuilder.parse(filePath);
+ if (Objects.isNull(document)){
+ return false;
+ }
+ //获取文档的根元素
+ Element element = document.getDocumentElement();
+ //获取根元素的子节点
+ NodeList docChildNodes = element.getChildNodes();
+ if (Objects.nonNull(docChildNodes) && docChildNodes.getLength()>0){
+ //遍历子节点信息
+ for(int i = 0; i < docChildNodes.getLength(); i++) {
+ //根据下标获取对应的节点信息
+ Node n = docChildNodes.item(i);
+ //判断节点名称是否是 QCFlags-P 并且当前解析文件的系统类型是否是 P
+ if(n.getNodeName().equals("QCFlags-P") && systemType.equalsIgnoreCase("P")) {
+ // 获取节点的第一个子节点
+ Node childNode = n.getFirstChild();
+ //如果节点信息不为空
+ while(Objects.nonNull(childNode)) {
+ String nodeName = childNode.getNodeName();
+ //判断节点名称是否是 item
+ if(nodeName.equals("col_time") || nodeName.equals("acq_time") || nodeName.equals("decay_time") || nodeName.equals("samp_vol")
+ || nodeName.equals("airFlow") || nodeName.equals("Be7-FWHM") || nodeName.equals("Ba140-MDC")) {
+ QcCheckItem qcCheckItem = new QcCheckItem();
+ // 获取节点的属性信息
+ NamedNodeMap attributes = childNode.getAttributes();
+ // 如果属性信息不为空
+ if (Objects.nonNull(attributes)){
+ // 遍历获取属性值
+ for (int j=0; j< attributes.getLength(); j++){
+ // 获取属性
+ Node item = attributes.item(j);
+ //判断属性名称是否是 number
+ if(item.getNodeName().equals("green")) {
+ qcCheckItem.setStandard(item.getNodeValue());
+ qcItems.put(nodeName, qcCheckItem);
+ }
+ }
+ }
+ }else if(nodeName.equals("Be7")) {
+ // 获取节点的属性信息
+ NamedNodeMap attributes = childNode.getAttributes();
+ // 如果属性信息不为空
+ if (Objects.nonNull(attributes)){
+ // 遍历获取属性值
+ for (int j=0; j< attributes.getLength(); j++){
+ // 获取属性
+ Node item = attributes.item(j);
+ //判断属性名称是否是 number
+ if(item.getNodeName().equals("energy")) {
+ ener_Be7 = Double.valueOf(item.getNodeValue());
+ }
+ }
+ }
+ } else if(nodeName.equals("Ba140")) {
+ // 获取节点的属性信息
+ NamedNodeMap attributes = childNode.getAttributes();
+ // 如果属性信息不为空
+ if (Objects.nonNull(attributes)){
+ // 遍历获取属性值
+ for (int j=0; j< attributes.getLength(); j++){
+ // 获取属性
+ Node item = attributes.item(j);
+ //判断属性名称是否是 number
+ if(item.getNodeName().equals("energy")) {
+ vMdcInfo.set(0,Double.valueOf(item.getNodeValue()));
+ }else if (item.getNodeName().equals("yield")){
+ vMdcInfo.set(1,Double.valueOf(item.getNodeValue()));
+ }else if (item.getNodeName().equals("halflife")){
+ vMdcInfo.set(2,Double.valueOf(item.getNodeValue()));
+ }
+ }
+ }
+ }
+ // 获取下一个节点
+ childNode = childNode.getNextSibling();
+ }
+ }else if(n.getNodeName().equals("QCFlags-G") && systemType.equalsIgnoreCase("G")) {
+ // 获取节点的第一个子节点
+ Node childNode = n.getFirstChild();
+ //如果节点信息不为空
+ while(Objects.nonNull(childNode)) {
+ String nodeName = childNode.getNodeName();
+ //判断节点名称是否是 item
+ if(nodeName.equals("col_time") || nodeName.equals("acq_time") || nodeName.equals("decay_time") || nodeName.equals("samp_vol")
+ || nodeName.equals("airFlow") || nodeName.equals("Xe133-MDC")) {
+ QcCheckItem qcCheckItem = new QcCheckItem();
+ // 获取节点的属性信息
+ NamedNodeMap attributes = childNode.getAttributes();
+ // 如果属性信息不为空
+ if (Objects.nonNull(attributes)){
+ // 遍历获取属性值
+ for (int j=0; j< attributes.getLength(); j++){
+ // 获取属性
+ Node item = attributes.item(j);
+ //判断属性名称是否是 number
+ if(item.getNodeName().equals("green")) {
+ qcCheckItem.setStandard(item.getNodeValue());
+ qcItems.put(nodeName, qcCheckItem);
+ }
+ }
+ }
+ }else if(nodeName.equals("Xe133")) {
+ // 获取节点的属性信息
+ NamedNodeMap attributes = childNode.getAttributes();
+ // 如果属性信息不为空
+ if (Objects.nonNull(attributes)){
+ // 遍历获取属性值
+ for (int j=0; j< attributes.getLength(); j++){
+ // 获取属性
+ Node item = attributes.item(j);
+ //判断属性名称是否是 number
+ if(item.getNodeName().equals("energy")) {
+ vMdcInfo.set(0,Double.valueOf(item.getNodeValue()));
+ }else if (item.getNodeName().equals("yield")){
+ vMdcInfo.set(1,Double.valueOf(item.getNodeValue()));
+ }else if (item.getNodeName().equals("halflife")){
+ vMdcInfo.set(2,Double.valueOf(item.getNodeValue()));
+ }
+ }
+ }
+ }
+ // 获取下一个节点
+ childNode = childNode.getNextSibling();
+ }
+ }
+ }
+ }
+ } catch (ParserConfigurationException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (SAXException e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
+
+ public List DetailedInfo(PHDFile phd) {
+ try {
+ // Sample_Id, Station_Code, Detector_Code, System_Type, Data_Type, Spectral_Qualifier,
+ // SRID, Sample_Status, Collect_Start, Sampling_Time, Quantity, Flow_Rate,
+ // Acq_Start, Acq_Real, Acq_Live, Decay_Time, Auto_Cat, Category
+ List detailInfo = new LinkedList<>();
+ for (int i=0; i<18; i++){
+ detailInfo.add("");
+ }
+ detailInfo.set(0, phd.getId_sample()); // Sample_Id
+ detailInfo.set(1, phd.getHeader().getSite_code()); // Station_Code
+ detailInfo.set(2, phd.getHeader().getDetector_code()); // Detector_Code
+ detailInfo.set(3, phd.getHeader().getSystem_type()); // System_Type
+ detailInfo.set(4, phd.getMsgInfo().getData_type()); // Data_Type
+ detailInfo.set(5, phd.getHeader().getSpectrum_quantity()); // Spectral_Qualifier
+ detailInfo.set(6, phd.getHeader().getSample_ref_id()); // SRID
+ detailInfo.set(7, phd.getStatus()); // Sample_Status
+ String collect_stop = phd.getCollect().getCollection_stop_date() + " " + phd.getCollect().getCollection_stop_time().substring(0,phd.getCollect().getCollection_stop_time().indexOf(StringPool.DOT));
+ Date collect_stop_dt = DateUtils.parseDate(collect_stop,"yyyy/MM/dd HH:mm:ss");
+ detailInfo.set(8, phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time());
+ Date date = DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0,phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)),"yyyy/MM/dd HH:mm:ss");
+ double timeSpan = (date.getTime()/1000 - collect_stop_dt.getTime()/1000) / 3600.0;
+ detailInfo.set(9, String.format("%.2f", timeSpan));// Sampling_Time
+ detailInfo.set(10, String.format("%.2f", phd.getCollect().getAir_volume()));
+ if(timeSpan != 0){
+ detailInfo.set(11, String.format("%.2f", phd.getCollect().getAir_volume()/timeSpan));
+ }
+ detailInfo.set(12, phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time());
+ String start_time = phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0, phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT));
+ Date start_date = DateUtils.parseDate(start_time, "yyyy/MM/dd HH:mm:ss");
+ detailInfo.set(13, String.format("%.2f", phd.getAcq().getAcquisition_real_time()));
+ detailInfo.set(14, String.format("%.2f", phd.getAcq().getAcquisition_live_time()));
+ double timespan = (collect_stop_dt.getTime()/1000 - start_date.getTime()/1000);
+ detailInfo.set(15, String.format("%.2f", timespan / 3600.0));
+ detailInfo.set(17, phd.getCategory());
+ return detailInfo;
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void UpdateChart(PHDFile phd, Map map){
+ List m_vCount = new LinkedList<>();
+ long m_nCount = phd.getSpec().getNum_g_channel();
+ long m_nSChan = phd.getSpec().getBegin_channel();
+
+ // 确保绘制曲线时所有谱都是从1道开始
+ int i = 0;
+ if(m_nSChan == 0){
+ i = 1;
+ }
+ for(; i allData = AllData(false, phd, m_vCount, m_nCount);
+ map.put("allData", allData);
+ List shapeEnergyData = Energy_BaseCP(phd);
+ map.put("shapeEnergyData", shapeEnergyData);
+ List shapeChannelData = Channel_BaseCP(phd);
+ map.put("shapeChannelData", shapeChannelData);
+ }
+
+ public ChartData Energy_Count(PHDFile phd, List m_vCount, long m_nCount){
+ int start = 0;
+ long end = 0;
+ //Energy
+ ChartData data1 = new ChartData();
+ if(m_nCount > 1 && phd.getVEnergy().size() == m_nCount) {
+ if(start < 1) {
+ start = 1;
+ }
+ if(end < 1 || end > m_nCount){
+ end = m_nCount;
+ }
+ for(int i=start-1; i m_vCount, long m_nCount){
+ int start = 0;
+ long end = 0;
+ ChartData data1 = new ChartData();
+ if(m_nCount > 1) {
+ if(start < 1){
+ start = 1;
+ }
+ if(end < 1 || end > m_nCount){
+ end = m_nCount;
+ }
+ for(int i=start-1; i Lc_Scac_base(boolean showLc, PHDFile phd, long m_nCount){
+ List datalist = new LinkedList<>();
+ int start = 0;
+ long end = 0;
+ if(m_nCount > 1 && phd.getVEnergy().size() == m_nCount && phd.getVLc().size() == m_nCount
+ && phd.getVScac().size() == m_nCount && phd.getVBase().size() == m_nCount) {
+ if(start < 1) {
+ start = 1;
+ }
+ if(end < 1 || end > m_nCount) {
+ end = m_nCount;
+ }
+
+ ChartData data2 = new ChartData();
+ ChartData data3 = new ChartData();
+ ChartData data4 = new ChartData();
+ ChartData data6 = new ChartData();
+ ChartData data7 = new ChartData();
+ ChartData data8 = new ChartData();
+ for(int i=start-1; iSpectrum.counts[i] == 0) continue;
+ SeriseData data2Point = new SeriseData();
+ data2Point.setX(i+1);
+ data2Point.setY(phd.getVLc().get(i));
+ data2.getPointlist().add(data2Point);
+
+ SeriseData data3Point = new SeriseData();
+ data3Point.setX(i+1);
+ data3Point.setY(phd.getVScac().get(i));
+ data3.getPointlist().add(data3Point);
+
+ SeriseData data4Point = new SeriseData();
+ data4Point.setX(i+1);
+ data4Point.setY(phd.getVBase().get(i));
+ data4.getPointlist().add(data4Point);
+
+ SeriseData data6Point = new SeriseData();
+ data6Point.setX(phd.getVEnergy().get(i));
+ data6Point.setY(phd.getVLc().get(i));
+ data6.getPointlist().add(data6Point);
+
+ SeriseData data7Point = new SeriseData();
+ data7Point.setX(phd.getVEnergy().get(i));
+ data7Point.setY(phd.getVScac().get(i));
+ data7.getPointlist().add(data7Point);
+
+ SeriseData data8Point = new SeriseData();
+ data8Point.setX(phd.getVEnergy().get(i));
+ data8Point.setY(phd.getVBase().get(i));
+ data8.getPointlist().add(data8Point);
+ }
+ // 颜色:原谱:0;峰:1;Lc:2;BaseLine:3;Scac:4;比较谱:5;
+ data2.setGroup("channel");
+ data2.setName("Lc");
+ data2.setColor("255,0,0");
+ data2.setShow(showLc);
+ data3.setGroup("channel");
+ data3.setName("Scac");
+ data3.setColor("244,112,247");
+ data3.setShow(showLc);
+ data4.setGroup("channel");
+ data4.setName("BaseLine");
+ data4.setColor("0,246,255");
+ data6.setGroup("energy");
+ data6.setName("Lc");
+ data6.setColor("255,0,0");
+ data6.setShow(showLc);
+ data7.setGroup("energy");
+ data7.setName("Scac");
+ data7.setColor("244,112,247");
+ data7.setShow(showLc);
+ data8.setGroup("energy");
+ data8.setName("BaseLine");
+ data8.setColor("0,246,255");
+ data2.setType("Line");
+ data3.setType("Line");
+ data4.setType("Line");
+ data6.setType("Line");
+ data7.setType("Line");
+ data8.setType("Line");
+ datalist.add(data2);
+ datalist.add(data3);
+ datalist.add(data4);
+ datalist.add(data6);
+ datalist.add(data7);
+ datalist.add(data8);
+ }
+ return datalist;
+ }
+
+ public List Channel_Peak(PHDFile phd, long m_nCount){
+ return PeakSet(phd.getVPeak(), phd.getVBase(), m_nCount, null, false);
+ }
+
+ public List Energy_Peak(PHDFile phd, long m_nCount){
+ return PeakSet(phd.getVPeak(), phd.getVBase(), m_nCount, phd.getUsedEnerPara().getP(), true);
+ }
+
+ public List PeakSet(List vPeak, List vBase, long m_nCount, List p, boolean bEnergy){
+ System.loadLibrary("GammaAnaly");
+ List datalist = new LinkedList<>();
+ int peakNum = vPeak.size();
+ if(peakNum < 1 || vBase.size() != m_nCount){
+ return datalist;
+ }
+ int start = 0;
+ long end = 0;
+ if(start < 1){
+ start = 1;
+ }
+ if(end > m_nCount || end < 1){
+ end = m_nCount;
+ }
+
+ // 找出在所给范围的第一道拟合峰和最后一道拟合峰的索引下标
+ int index = 0, startPeak = -1, endPeak = peakNum-1;
+ while(index < peakNum && start > vPeak.get(index).right){
+ ++index;
+ }
+ if(index < peakNum) {
+ startPeak = index;
+ while(index < peakNum && vPeak.get(index).left < end){
+ ++index;
+ }
+ endPeak = index-1;
+ }
+ if(startPeak < 0 || startPeak > endPeak){
+ return datalist;
+ }
+
+ for(int i=startPeak; i<=endPeak; ++i) {
+ PeakInfo peak = vPeak.get(i);
+
+ ChartData cData = new ChartData();
+ cData.setColor("255,127,39");
+ cData.setName("Peak");
+
+ List regChan = new LinkedList<>();
+ double d = peak.left;
+ while(d <= peak.right) {
+ regChan.add(d);
+ d += 0.25;
+ }
+ List t_base = new LinkedList<>(vBase.subList(peak.left-1, peak.right));
+ List regPeak = CalValuesHandler.interp1(peak, t_base, regChan);
+
+ if(bEnergy) {
+ cData.setGroup("energy");
+ CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(regChan, p);
+ List regEnergy = calValuesOut.counts;
+ for(int ii=0; ii end){
+ continue;
+ }
+ SeriseData seriseData = new SeriseData();
+ seriseData.setX(regEnergy.get(ii));
+ seriseData.setY(regPeak.get(ii));
+ cData.getPointlist().add(seriseData);
+ }
+ } else {
+ cData.setGroup("channel");
+ for(int ii=0; ii end){
+ continue;
+ }
+ SeriseData seriseData = new SeriseData();
+ seriseData.setX(regChan.get(ii));
+ seriseData.setY(regPeak.get(ii));
+ cData.getPointlist().add(seriseData);
+ }
+ }
+ datalist.add(cData);
+ }
+ return datalist;
+ }
+
+ public List Energy_BaseCP(PHDFile phd){
+ System.loadLibrary("GammaAnaly");
+ List shapes = new LinkedList<>();
+ CalValuesOut calValuesOut = CalValuesHandler.calFcnEval(phd.getBaseCtrls().getXCtrl(), phd.getUsedEnerPara().getP());
+ List vEner = calValuesOut.counts;
+ if(phd.getBaseCtrls().getXCtrl().size() == phd.getBaseCtrls().getYCtrl().size()) {
+ for(int i=0; i Channel_BaseCP(PHDFile phd){
+ List shapes = new LinkedList<>();
+ int num = phd.getBaseCtrls().getXCtrl().size();
+ if(num == phd.getBaseCtrls().getYCtrl().size()) {
+ for(int i=0; i AllData(boolean showLc, PHDFile phd, List m_vCount, long m_nCount){
+ List datalist = new LinkedList<>();
+ datalist.add(Channel_Count(phd, m_vCount, m_nCount));
+ datalist.add(Energy_Count(phd, m_vCount, m_nCount));
+ datalist.addAll(Lc_Scac_base(showLc, phd, m_nCount));
+ datalist.addAll(Channel_Peak(phd, m_nCount));
+ datalist.addAll(Energy_Peak(phd, m_nCount));
+ return datalist;
+ }
+
+ public boolean AnalyseData(PHDFile phd, boolean bSingle, String userName){
+ int change = SettingChanged(phd);
+ if(change == 0 && phd.getVPeak().size() > 0){
+ return false;
+ } else if(change == -1) {
+ phd.setUsedEffi(phd.getNewEffi());
+ phd.setUsedEffiKD(phd.getMapEffiKD().get(phd.getNewEffi()));
+ phd.setUsedEffiPara(phd.getMapEffiPara().get(phd.getNewEffi()));
+ UpdateEfficiency(phd);
+ Map map = new HashMap<>();
+ if (phd.getHeader().getSystem_type().equals("P")){
+ map = (Map)redisUtil.get("Gamma:GammaPInit" + userName);
+ } else if (phd.getHeader().getSystem_type().equals("G")) {
+ map = (Map)redisUtil.get("Gamma:GammaGInit"+userName);
+ }
+ NuclidesIdent(phd, map);
+ RunQC(phd);
+ String Warning = "Finish three tasks:\n"+
+ "\t1.Update efficiencies of all peaks;\n"+
+ "\t2.Identify nuclides again;\n"+
+ "\t3.Test QC again.";
+ } else {
+// if(bSingle)
+// {
+// AnalyseFlowChart flow_dlg(this);
+// flow_dlg.exec();
+// } else {
+// Map t_map = (phd->header.system_type == "P" ? m_mapNucLineP : m_mapNucLineG);
+// GammaAnalyALG alg;
+// alg.AnalyseSpectrum(phd, t_map);
+// }
+ }
+ return true;
+ }
+
+ public int SettingChanged(PHDFile phd) {
+ SpecSetup newSets = phd.getSetting();
+ SpecSetup oldSets = phd.getUsedSetting();
+
+ if(newSets.getECutAnalysis_Low() != oldSets.getECutAnalysis_Low()
+ || newSets.getECutAnalysis_High() != oldSets.getECutAnalysis_High()
+ || newSets.getEnergyTolerance() != oldSets.getEnergyTolerance()
+ || newSets.getPSS_low() != oldSets.getPSS_low()
+ || newSets.getBaseImprovePSS() != oldSets.getBaseImprovePSS()
+ || newSets.getK_back() != oldSets.getK_back()
+ || newSets.getK_alpha() != oldSets.getK_alpha()
+ || newSets.getK_beta() != oldSets.getK_beta()
+ || newSets.getRiskLevelK() != oldSets.getRiskLevelK()
+ || newSets.getRefTime_act() != oldSets.getRefTime_act()
+ || newSets.getRefTime_conc() != oldSets.getRefTime_conc())
+ {
+ return 1;
+ }
+
+ List old_ener = phd.getUsedEnerPara().getP();
+ List new_ener = phd.getMapEnerPara().get(phd.getNewEner()).getP();
+ if(old_ener.size() != new_ener.size()){
+ return 1;
+ }
+ for(int i=0; i 1E-6){
+ return 1;
+ }
+ }
+
+ List old_reso = phd.getUsedResoPara().getP();
+ List new_reso = phd.getMapResoPara().get(phd.getNewReso()).getP();
+ if(old_reso.size() != new_reso.size()){
+ return 1;
+ }
+ for(int i=0; i 1E-6){
+ return 1;
+ }
+ }
+
+ List old_effi = phd.getUsedEffiPara().getP();
+ List new_effi = phd.getMapEffiPara().get(phd.getNewEffi()).getP();
+ if(old_effi.size() != new_effi.size()){
+ return -1;
+ }
+ for(int i=0; i 1E-6){
+ return -1;
+ }
+ }
+
+ return 0;
+ }
+
+ public void UpdateEfficiency(PHDFile phd) {
+ int peakNum = phd.getVPeak().size();
+ List vEner = new LinkedList<>();
+ for (int i=0; i vEffi = calValuesOut.counts;
+ for (int i=0; i map){
+ // 当重新分析时先清除上一次的分析结果
+ phd.getMapNucActMda().clear();
+ for(int i=0; i mapHalflife = new HashMap<>(); // 用其他核素半衰期计算活度/浓度的核素
+ List vNuclides = new LinkedList<>(); // 只识别不计算活度/浓度的核素
+ ReadSpecialNuclides(mapHalflife, vNuclides);
+
+ double energyWidth = phd.getUsedSetting().getEnergyTolerance();
+ int peakNum = phd.getVPeak().size();
+ for (Map.Entry iter: map.entrySet()){
+ if(iter.getValue().halflife <= 0){
+ continue;
+ }
+ FilterNuclideLine(iter.getValue(), phd.getUsedSetting().getECutAnalysis_Low()); // 过滤核素能量小于ECutAnalysis_Low的射线
+
+ List vEnergy = iter.getValue().vEnergy; // 该核素的所有γ射线能量
+ List vYield = iter.getValue().vYield;
+ List vEffi = CalValuesHandler.calFcnEval(vEnergy, phd.getUsedEffiPara().getP()).counts; // 该核素所有γ射线能量处的探测效率
+ List vFit = new LinkedList<>(); // γ射线能量与峰中心道能量匹配标识
+ for (int i=0; i= 510 && phd.getVPeak().get(j).energy <= 512) {
+ continue; // 峰中心道能量为511的峰不进行核素识别
+ }
+ if(vEnergy.get(i) < phd.getVPeak().get(j).energy - energyWidth){
+ break;
+ } else if(vEnergy.get(i) <= phd.getVPeak().get(j).energy + energyWidth) {
+ sum_found += vEffi.get(i) * vYield.get(i);
+ vFit.set(i, j);
+ if(iter.getValue().maxYeildIdx == i){
+ mainPeakIdx = j;
+ }
+ break;
+ }
+ }
+ sum_total += vEffi.get(i) * vYield.get(i);
+ }
+
+ // 核素匹配到峰
+ if(sum_total > 0) {
+ // 如果该核素属特殊核素,则用“特殊核素配置文件”中指明的其他核素的半衰期
+ double halflife = (Objects.nonNull(mapHalflife.get(iter.getKey()))? iter.getValue().halflife : mapHalflife.get(iter.getKey()));
+ double lambda = Math.log(2.0) / halflife;
+ double rate = sum_found / sum_total;
+ if(rate > 0.5) {
+ // 获取用于计算Activity、MDC的主γ峰和最大分支比
+ double maxFoundYield = vYield.get(iter.getValue().maxYeildIdx);
+ if(mainPeakIdx < 0)
+ {
+ maxFoundYield = 0;
+ for(int ii=0; ii= 0 && vYield.get(ii) > maxFoundYield) {
+ mainPeakIdx = vFit.get(ii);
+ maxFoundYield = vYield.get(ii);
+ }
+ }
+ if(mainPeakIdx < 0) continue;
+ }
+
+ NuclideActMda ActMda = phd.getMapNucActMda().get(iter.getKey());
+ boolean bActBigger = CalculateMDCs(phd, ActMda, mainPeakIdx, lambda, maxFoundYield, 1);
+
+ if(rate > 0.8 || bActBigger) {
+ ActMda.setHalflife(halflife);
+ ActMda.setKey_flag(-1);
+ if(!vNuclides.contains(iter.getKey())) // 需要计算活度浓度的核素
+ {
+ ActMda.setBCalculateMDA(true);
+ } else {
+ ActMda.setActivity(0);
+ ActMda.setAct_err(0);
+ ActMda.setEfficiency(0);
+ ActMda.setEffi_err(0);
+ ActMda.setMda(0);
+ ActMda.setMdc(0);
+ ActMda.setConcentration(0);
+ }
+
+ int fitLineNum = 0, peakIdx = -1;
+ for(int ii=0; ii= 0) {
+ // 向峰信息表中添加识别到的核素
+ if(vFit.get(ii) != peakIdx) {
+ phd.getVPeak().get(vFit.get(ii)).nuclides.add(iter.getKey());
+ peakIdx = vFit.get(ii);
+ }
+ // 添加匹配的γ射线的信息
+ if(vFit.get(ii) == mainPeakIdx){
+ ActMda.setCalculateIdx(fitLineNum);
+ }
+ if(iter.getValue().maxYeildIdx == ii && iter.getValue().key_flag >= 0){
+ ActMda.setKey_flag(fitLineNum);
+ }
+ ActMda.getVPeakIdx().add(peakIdx+1);
+ ActMda.getFullNames().add(iter.getValue().fullNames.get(ii));
+ ActMda.getVEnergy().add(vEnergy.get(ii));
+ ActMda.getVUncertE().add(iter.getValue().vUncertE.get(ii));
+ ActMda.getVYield().add(vYield.get(ii));
+ ActMda.getVUncertY().add(iter.getValue().vUncertY.get(ii));
+ ++fitLineNum;
+ }
+ }
+ phd.getMapNucActMda().put(iter.getKey(), ActMda);
+ }
+ }
+ }
+ }
+ }
+
+ private void ReadSpecialNuclides(Map mapHalflife, List vNuclides) {
+ try {
+ String fileName = parameterFilePath+"/setup/nuclide_ActMdc.txt";
+ File t_file = new File(fileName);
+ List readLines = FileUtils.readLines(t_file, "UTF-8");
+ for (int i=0;i< readLines.size();i++){
+ String line = readLines.get(i);
+ if(line.contains("#MDA")) {
+ for (int j=i+1; j strList = Arrays.asList(line.split("\\s"));
+ if(strList.size() == 3) {
+ mapHalflife.put(strList.get(0), Double.valueOf(strList.get(2)) * 86400);
+ }
+ }else {
+ i=j;
+ break;
+ }
+ }
+ break;
+ }
+ if(line.contains("#Identify")) {
+ for (int j=i+1; j strList = Arrays.asList(line.split("\\s"));
+ vNuclides.addAll(strList);
+ }
+ }
+ }
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private void FilterNuclideLine(NuclideLines lines, double lowE) {
+ List vE = lines.vEnergy;
+ for(int i=0, j=0; i 0) {
+ List vY = lines.vYield;
+ lines.maxYeildIdx = 0;
+ double maxYield = vY.get(0);
+ for(int ii=1; ii maxYield) {
+ maxYield = vY.get(ii);
+ lines.maxYeildIdx = ii;
+ }
+ }
+ } else{
+ lines.maxYeildIdx = lines.key_flag;
+ }
+ }
+
+ private boolean CalculateMDCs(PHDFile phd, NuclideActMda nucActMda, int mainPeakIdx, double lambda, double keyLineYield, double CCF){
+ // 计算衰变校正因子——DCF
+ try {
+ Date collectStart = DateUtils.parseDate(phd.getCollect().getCollection_start_date() + " " + phd.getCollect().getCollection_start_time().substring(0, phd.getCollect().getCollection_start_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ Date collectStop = DateUtils.parseDate(phd.getCollect().getCollection_stop_date() + " " + phd.getCollect().getCollection_stop_time().substring(0, phd.getCollect().getCollection_stop_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ Date acqStart = DateUtils.parseDate(phd.getAcq().getAcquisition_start_date() + " " + phd.getAcq().getAcquisition_start_time().substring(0, phd.getAcq().getAcquisition_start_time().indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ double Ts = collectStart.getTime()/1000 - collectStop.getTime()/1000; // 采样时间
+ double Td = collectStop.getTime()/1000 - acqStart.getTime()/1000; // 衰变时间
+ double Ta = phd.getAcq().getAcquisition_real_time(); // 能谱获取实时间
+ double Tl = phd.getAcq().getAcquisition_live_time(); // 能谱获取活时间
+ double Svol = phd.getCollect().getAir_volume(); // 样品采样体积
+ double DCF1, DCF2, DCF3;
+
+ if ( Ts == 0 ) DCF1 = 1;
+ else DCF1 = lambda * Ts / (1-Math.exp(-lambda*Ts));
+ if ( Td == 0 ) DCF2 = 1;
+ else DCF2 = Math.exp(lambda*Td);
+ if ( Ta == 0 ) DCF3 = 1;
+ else DCF3 = lambda * Ta / (1-Math.exp(-lambda*Ta));
+
+ double DCF_act = Math.exp(lambda * (phd.getUsedSetting().getRefTime_act().getTime()/1000 - acqStart.getTime()/1000));
+ double DCF_conc = Math.exp(lambda * (phd.getUsedSetting().getRefTime_conc().getTime()/1000 - collectStart.getTime()/1000));
+
+ PeakInfo peak = phd.getVPeak().get(mainPeakIdx);
+ double netKeyPeakArea = peak.area;
+ double linePeakAreaErr = peak.areaErr;
+
+ double detectorEfficiency = peak.efficiency;
+ double detectorEfficiencyError = 0.01 * peak.efficiency;
+ double fwhmc = peak.fwhmc;
+ int index = (int)(peak.peakCentroid + 0.5) - 1;
+ double lcc = phd.getVLc().get(index);
+ double baseline = phd.getVBase().get(index);
+
+ double activity, mda;
+ if ( keyLineYield == 0 ) {
+ activity = 0;
+ mda = 0;
+ } else {
+ activity = ( netKeyPeakArea * CCF * DCF3*DCF_act ) / ( keyLineYield * detectorEfficiency * Tl ) ;//Bq,参考时间为referenceTimeActivity
+ mda = (2 * fwhmc * (lcc - baseline) / 0.8591 ) * CCF * DCF3*DCF_act / ( keyLineYield * detectorEfficiency * Tl ) ;//Bq,参考时间为referenceTimeActivity
+ }
+ double concentration = ( netKeyPeakArea * CCF*DCF1*DCF2*DCF3*DCF_conc ) / ( keyLineYield * detectorEfficiency * Tl ) *1e6/ Svol;//mBq/m3,参考时间为referenceTimeConc
+ double mdc = (2 * fwhmc * (lcc - baseline) / 0.8591 ) * CCF*DCF1*DCF2*DCF3*DCF_conc / ( keyLineYield * detectorEfficiency * Tl ) *1e6 / Svol;
+ double activityErr = Math.sqrt( Math.pow(linePeakAreaErr/netKeyPeakArea, 2) + Math.pow(detectorEfficiencyError/detectorEfficiency, 2) ) * activity;
+
+ nucActMda.setActivity(activity);
+ nucActMda.setAct_err(activityErr);
+ nucActMda.setMda(mda);
+ nucActMda.setMdc(mdc);
+ nucActMda.setEfficiency(peak.efficiency);
+ nucActMda.setEffi_err(detectorEfficiencyError);
+ nucActMda.setConcentration(concentration);
+
+ return (activity > mda);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public Map GetNuclideLines(List nuclideList) {
+ Map mapLines = new HashMap<>();
+ if(nuclideList.size() < 1){
+ return mapLines;
+ }
+ for(String name : nuclideList) {
+ NuclideLines nlines = new NuclideLines();
+ List nuclideLineList = spectrumAnalysisMapper.getNuclideLines(name);
+ for(int j=0;j 0) {
+ nlines.key_flag = j;
+ nlines.maxYeildIdx = j;
+ }
+ }
+ mapLines.put(name, nlines);
+ }
+ long start = System.currentTimeMillis();
+ List halfs = spectrumAnalysisMapper.getHalf(nuclideList);
+ for(int m=0;m tempPoints){
- return spectrumAnalysisService.fitting(paramA, paramB, paramC, tempPoints);
+ public Result fitting(@RequestBody FittingBody fittingBody){
+ return spectrumAnalysisService.fitting(fittingBody.getParamA(), fittingBody.getParamB(), fittingBody.getParamC(), fittingBody.getTempPoints(), fittingBody.getCount());
+ }
+
+ @GetMapping("getGammaGated")
+ @ApiOperation(value = "获取gamma对应count数据", notes = "获取gamma对应count数据")
+ public Result getGammaGated(Integer chartHeight, Integer channelWidth, Integer gammaChannel, Integer sampleId){
+ return spectrumAnalysisService.getGammaGated(chartHeight, channelWidth, gammaChannel, sampleId);
+ }
+
+ @PostMapping("ReAnalyse")
+ public Result ReAnalyse(@RequestBody AnalyseData analyseData){
+ return spectrumAnalysisService.ReAnalyse(analyseData);
+ }
+
+ @PostMapping("analyseCurrentSpectrum")
+ public Result analyseCurrentSpectrum(String dbName, Integer sampleId){
+ return null;
+ }
+
+ @PostMapping("analyseAllSpectrum")
+ public Result analyseAllSpectrum(){
+ return null;
}
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsAnalysesSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsAnalysesSpectrum.java
new file mode 100644
index 00000000..f26473f5
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsAnalysesSpectrum.java
@@ -0,0 +1,139 @@
+package org.jeecg.modules.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsAnalysesSpectrum implements Serializable {
+
+ /**
+ * 分析ID号
+ */
+ private Integer idAnalysis;
+
+ /**
+ * 样品id
+ */
+ private Integer sampleId;
+
+ /**
+ * 分析开始时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date analysisBegin;
+
+ /**
+ * 分析结束时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date analysisEnd;
+
+ /**
+ * Reviewed:交互,auto:自动
+ */
+ private String type;
+
+ /**
+ * 使用的软件名称
+ */
+ private String software;
+
+ /**
+ * 软件版本号
+ */
+ private String swVersion;
+
+ /**
+ * 分析员名称
+ */
+ private String analyst;
+
+ /**
+ * 基线计数方法描述
+ */
+ private String baselineMethod;
+
+ /**
+ * 寻峰方法描述
+ */
+ private String peaksMethod;
+
+ /**
+ * 核素识别方法描述
+ */
+ private String nuclideMethod;
+
+ /**
+ * 不确定度计算描述
+ */
+ private String uncCalcMethod;
+
+ /**
+ * Lc计算方法描述
+ */
+ private String lcMethod;
+
+ /**
+ * 寻峰起始道
+ */
+ private Integer searchStartChannel;
+
+ /**
+ * 寻峰结束道
+ */
+ private Integer searchEndChannel;
+
+ /**
+ * 寻峰阈值
+ */
+ private Double searchThreshold;
+
+ /**
+ * 峰数目
+ */
+ private Integer numberOfPeaks;
+
+ /**
+ * 总计数
+ */
+ private Float totalCounts;
+
+ /**
+ * 分级结果
+ */
+ private Integer category;
+
+ /**
+ * 注释
+ */
+ private String comments;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date moddate;
+
+ private String usedgasphd;
+
+ private String useddetphd;
+
+ private Integer usedgasphdId;
+
+ private Integer useddetphdId;
+
+ private String baselinePath;
+
+ private String lcPath;
+
+ private String scacPath;
+
+ private String logPath;
+
+ private String reportPath;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsCalibrationPairsSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsCalibrationPairsSpectrum.java
new file mode 100644
index 00000000..7bf8041b
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsCalibrationPairsSpectrum.java
@@ -0,0 +1,61 @@
+package org.jeecg.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsCalibrationPairsSpectrum implements Serializable {
+
+ /**
+ * 样品id
+ */
+ private Integer sampleId;
+
+ /**
+ * 分析ID号
+ */
+ private Integer idAnalysis;
+
+ /**
+ * G:gamma探测器的数据,#g_;B:beta探测器的数据,#b_
+ */
+ private String sampleType;
+
+ /**
+ * energy:能量刻度;
+ * efficiency:效率刻度;
+ * Resolution:分辨率刻度
+ */
+ private String caltype;
+
+ /**
+ * PHD:代表数据来自PHD文件;External:代表数据来自外部,如刻度工具、其它文件等
+ */
+ private String input;
+
+ /**
+ * 刻度点ID号
+ */
+ private Integer idCalPoint;
+
+ private Double xValue;
+
+ private Double yValue;
+
+ private String decayMode;
+
+ /**
+ * y值不确定度
+ */
+ private String uncYValue;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date moddate;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsCalibrationSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsCalibrationSpectrum.java
new file mode 100644
index 00000000..b27866e6
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsCalibrationSpectrum.java
@@ -0,0 +1,107 @@
+package org.jeecg.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsCalibrationSpectrum implements Serializable {
+
+ /**
+ * 样品id
+ */
+ private Integer sampleId;
+
+ /**
+ * 分析ID号
+ */
+ private Integer idAnalysis;
+
+ /**
+ * G:gamma探测器的数据,#g_;B:beta探测器的数据,#b_
+ */
+ private String sampleType;
+
+ /**
+ * energy:能量刻度;
+ * efficiency:效率刻度;
+ * Resolution:分辨率刻度
+ */
+ private String calType;
+
+ /**
+ * 拟合方程ID号(统一定义)
+ */
+ private Integer function;
+
+ /**
+ * 拟合方程描述
+ */
+ private String functionDef;
+
+ /**
+ * 拟合的起始值
+ */
+ private Integer startOfRange;
+
+ /**
+ * 拟合的结束值
+ */
+ private Integer endOfRange;
+
+ /**
+ * 拟合系数1
+ */
+ private Double coeff1;
+
+ /**
+ * 拟合系数2
+ */
+ private Double coeff2;
+
+ /**
+ * 拟合系数3
+ */
+ private Double coeff3;
+
+ /**
+ * 拟合系数4
+ */
+ private Double coeff4;
+
+ /**
+ * 拟合系数5
+ */
+ private Double coeff5;
+
+ /**
+ * 拟合系数6
+ */
+ private Double coeff6;
+
+ /**
+ * 拟合系数7
+ */
+ private Double coeff7;
+
+ /**
+ * 拟合系数8
+ */
+ private Double coeff8;
+
+ /**
+ * 拟合系数9
+ */
+ private Double coeff9;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date moddate;
+
+ private String coeffString;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsNuclIdedSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsNuclIdedSpectrum.java
new file mode 100644
index 00000000..7fc0887c
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsNuclIdedSpectrum.java
@@ -0,0 +1,104 @@
+package org.jeecg.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsNuclIdedSpectrum implements Serializable {
+
+ /**
+ * 样品id
+ */
+ private Integer sampleId;
+
+ /**
+ * 分析ID号
+ */
+ private Integer idAnalysis;
+
+ /**
+ * 核素名称
+ */
+ private String nuclideName;
+
+ /**
+ * 核素类型
+ */
+ private String type;
+
+ /**
+ * 核素半衰期
+ */
+ private String halflife;
+
+ /**
+ * 平均活度值
+ */
+ private String aveActiv;
+
+ /**
+ * 平均活度值不确定度
+ */
+ private Double aveActivErr;
+
+ /**
+ * 主射线活度值
+ */
+ private Double activKey;
+
+ /**
+ * 主射线活度值不确定度
+ */
+ private Double activKeyErr;
+
+ /**
+ * 核素的最小可探测活度
+ */
+ private String mda;
+
+ /**
+ * 核素的最小可探测活度不确定度
+ */
+ private Double mdaErr;
+
+ /**
+ * 核素识别标志
+ */
+ private Integer nidFlag;
+
+ private Double activDecay;
+
+ private Double activDecayErr;
+ /**
+ * 符合相加校正因子(无设为1)
+ */
+ private Double cscRatio;
+
+ /**
+ * 符合相加校正因子不确定度(无设为0)
+ */
+ private Double cscRatioErr;
+
+ /**
+ * 活度是否经过符合相加校正
+ */
+ private Integer cscModFlag;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date moddate;
+
+ private String mdc;
+
+ private String concentration;
+
+ private String keyEnergy;
+
+ private String keyYield;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsNuclLinesIdedSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsNuclLinesIdedSpectrum.java
new file mode 100644
index 00000000..78081493
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsNuclLinesIdedSpectrum.java
@@ -0,0 +1,109 @@
+package org.jeecg.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsNuclLinesIdedSpectrum implements Serializable {
+
+ /**
+ * 样品id
+ */
+ private Integer sampleId;
+
+ /**
+ * 峰序号
+ */
+ private Integer idPeak;
+
+ /**
+ * 分析ID号
+ */
+ private Integer idAnalysis;
+
+ /**
+ * 核素名称
+ */
+ private String nuclideName;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date moddate;
+
+ /**
+ * 核素库中核素对应峰的能量(keV)
+ */
+ private Double energy;
+
+ /**
+ * 核素库中核素对应峰的能量不确定度(keV)
+ */
+ private Double uncEnergy;
+
+ /**
+ * 核素库中核素对应峰的发射几率
+ */
+ private Double abundance;
+
+ /**
+ * 核素库中核素对应峰的发射几率不确定度
+ */
+ private Double uncAbundance;
+
+ /**
+ * 利用该峰计算得到的活度
+ */
+ private String activity;
+
+ /**
+ * 利用该峰计算得到的活度不确定度
+ */
+ private Double uncActivity;
+
+ /**
+ * 该峰处的探测效率
+ */
+ private Double effic;
+
+ /**
+ * 该峰处的探测效率不确定度
+ */
+ private Double uncEffic;
+
+ /**
+ * 利用该峰计算得到的最小可探测活度
+ */
+ private Double mda;
+
+ /**
+ * 主射线标识:0-否;1-是
+ */
+ private Double keyFlag;
+
+ /**
+ * 符合相加校正因子(无设为1)
+ */
+ private Double cscRatio;
+
+ /**
+ * 符合相加校正因子不确定度(无设为0)
+ */
+ private Double cscRatioErr;
+
+ /**
+ * 活度是否经过符合相加校正
+ */
+ private Double cscModFlag;
+
+ private String nuclidefullname;
+
+ private String mdc;
+
+ private String concentration;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsPeaksSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsPeaksSpectrum.java
new file mode 100644
index 00000000..98524dcf
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsPeaksSpectrum.java
@@ -0,0 +1,155 @@
+package org.jeecg.modules.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsPeaksSpectrum implements Serializable {
+
+ /**
+ * 样品id
+ */
+ private Integer sampleId;
+
+ /**
+ * 峰序号
+ */
+ private Integer idPeak;
+
+ /**
+ * 分析ID号
+ */
+ private Integer idAnalysis;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date moddate;
+
+ /**
+ * 峰中心道(道址)
+ */
+ private Double centroidChannel;
+
+ /**
+ * 峰中心道不确定度(道址)
+ */
+ private Double uncCentroidChannel;
+
+ /**
+ * 峰中心道能量(keV)
+ */
+ private Double energy;
+
+ /**
+ * 峰中心道能量不确定度(keV)
+ */
+ private Double uncEnergy;
+
+ /**
+ * 峰面积(计数)。已扣除基线面积,但未扣除空白样品计数和探测器本底计数
+ */
+ private Double area;
+
+ /**
+ * 峰面积不确定度(计数)
+ */
+ private Double uncArea;
+
+ /**
+ * 峰的净计数率(1/s)=峰面积/活时间
+ */
+ private Double netCountRate;
+ /**
+ * 峰的净计数率的不确定度(1/s)
+ */
+ @TableField(value = "UNCNETCOUNTRATE")
+ private Double uncNetCountRate;
+ /**
+ * 测量系统在峰能量处的绝对效率
+ */
+ @TableField(value = "EFFICIENCY")
+ private Double efficiency;
+ /**
+ * 测量系统在峰能量处的绝对效率的不确定度
+ */
+ @TableField(value = "UNCEFFICIENCY")
+ private Double uncefficiency;
+ /**
+ * 峰的半高宽(道)
+ */
+ @TableField(value = "FWHM")
+ private Double fwhm;
+ /**
+ * 峰的十分之一高宽(道)
+ */
+ @TableField(value = "FWTM")
+ private Double fwtm;
+ /**
+ * 峰的重要性因子
+ */
+ @TableField(value = "SIGNIFICANCE")
+ private Double significance;
+ /**
+ * 峰的可探测线Lc
+ */
+ @TableField(value = "LC")
+ private Double lc;
+ /**
+ * 峰的感兴趣区的起始道
+ */
+ @TableField(value = "ROISTART")
+ private Double roiStart;
+ /**
+ * 峰的感兴趣区的结束道
+ */
+ @TableField(value = "ROIEND")
+ private Double roiEnd;
+
+ @TableField(value = "MULTIINDEX")
+ private Double mulitiIndex;
+
+ @TableField(value = "TAIL")
+ private Double tail;
+
+ @TableField(value = "TAILALPHA")
+ private Double tailAlpha;
+
+ @TableField(value = "UPPERTAIL")
+ private Double upperTail;
+
+ @TableField(value = "UPPERTAILALPHA")
+ private Double upperTailAlpha;
+
+ @TableField(value = "BWWIDTHCHAN")
+ private Double bwwidthchan;
+
+ @TableField(value = "RECOILDELTACHAN")
+ private Double recoildeltachan;
+
+ @TableField(value = "STEPRAIO")
+ private Double stepraio;
+
+ @TableField(value = "LD")
+ private Double ld;
+
+ @TableField(value = "SENSITIVITY")
+ private Double sensitivity;
+
+ @TableField(value = "BACKGROUNDAREA")
+ private Double backgroundarea;
+
+ @TableField(value = "MEANBACKCOUNT")
+ private Double meanbackcount;
+
+ @TableField(value = "RECOILBETACHAN")
+ private Double recoilbetachan;
+
+ @TableField(value = "PEAKCOMMENTS")
+ private String peakcomments;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsQcCheckSpectrum.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsQcCheckSpectrum.java
new file mode 100644
index 00000000..53ee5dfd
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/GardsQcCheckSpectrum.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class GardsQcCheckSpectrum implements Serializable {
+
+ private Integer sampleId;
+
+ private Integer idanalysis;
+
+ private String qcName;
+
+ private Double qcValue;
+
+ private String qcStandard;
+
+ private Integer qcResult;
+
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date moddate;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/AcquisitionBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/AcquisitionBlock.java
new file mode 100644
index 00000000..ad551e00
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/AcquisitionBlock.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class AcquisitionBlock implements Serializable {
+
+ /* Acquisition Block */
+ private String acquisition_start_date; // acquisition start date (yyyy / mm / dd)
+
+ private String acquisition_start_time; // acquisition start time (hh : mm : ss . s)
+
+ private Double acquisition_real_time; // acquisition real time (s)
+
+ private Double acquisition_live_time; // acquisition live time (s)
+
+ public AcquisitionBlock(){
+ acquisition_start_date="";
+ acquisition_start_time="";
+ acquisition_real_time=0.0;
+ acquisition_live_time=0.0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/AnalyseData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/AnalyseData.java
new file mode 100644
index 00000000..848633bd
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/AnalyseData.java
@@ -0,0 +1,44 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class AnalyseData implements Serializable {
+
+ private String applyType;
+
+ private boolean sampleData;
+
+ private boolean GasBgData;
+
+ private boolean DetBgData;
+
+ private boolean QCData;
+
+ private boolean gFitting;
+
+ private boolean bFitting;
+
+ private boolean bGammaEnergyValid;
+
+ private boolean bBetaEnergyValid;
+
+ private List fittingChannelEnergy;
+
+ private CalibrationParam g_calibration_param;
+
+ private CalibrationParam b_calibration_param;
+
+ private String dbName;
+
+ private List sampleIds;
+
+ public AnalyseData(){
+ g_calibration_param = new CalibrationParam();
+ b_calibration_param = new CalibrationParam();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BaseControls.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BaseControls.java
new file mode 100644
index 00000000..f78b3977
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BaseControls.java
@@ -0,0 +1,33 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class BaseControls implements Serializable {
+ private boolean ReplotUsed;
+ private boolean ReplotNeeded;
+ private int rg_low; //分析范围的最小值
+ private int rg_high; //分析范围的最大值
+ private List XCtrl;
+ private List YCtrl;
+ private List YSlope;
+ private List Baseline;
+ private List StepCounts;
+
+ public BaseControls(){
+ rg_low = 1;
+ rg_high = 1;
+ ReplotUsed = false;
+ ReplotNeeded = false;
+ XCtrl=new LinkedList<>();
+ YCtrl=new LinkedList<>();
+ YSlope=new LinkedList<>();
+ Baseline=new LinkedList<>();
+ StepCounts=new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BgCalibratePara.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BgCalibratePara.java
new file mode 100644
index 00000000..8b45f969
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BgCalibratePara.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class BgCalibratePara implements Serializable {
+
+ private List b_e_cal; //b 能刻度系数
+ private List g_e_cal; //g 能刻度系数
+ private int b_e_cal_flag; //b 自计算刻度系数配置
+ private int g_e_cal_flag; //g 自计算刻度系数配置
+ private boolean bApplyNewCalicSample; // 界面交互新刻度应用
+ private boolean bApplyNewCalicDetBg;
+ private boolean bApplyNewCalicGasBg;
+ private boolean bApplyNewCalicQc;
+ public BgCalibratePara() {
+ b_e_cal = new LinkedList<>();
+ g_e_cal = new LinkedList<>();
+ b_e_cal_flag = 2;
+ g_e_cal_flag = 2;
+ bApplyNewCalicSample = false;
+ bApplyNewCalicDetBg = false;
+ bApplyNewCalicGasBg = false;
+ bApplyNewCalicQc = false;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CalibrationBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CalibrationBlock.java
new file mode 100644
index 00000000..56ac7b0f
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CalibrationBlock.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CalibrationBlock implements Serializable {
+
+ /* Calibration Block */
+ private String date_calibration; // date of last calibration (yyyy / mm / dd)
+
+ private String time_calibration; // time of last calibration (hh : mm : ss)
+
+ public CalibrationBlock(){
+ date_calibration = "";
+ time_calibration = "";
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CalibrationParam.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CalibrationParam.java
new file mode 100644
index 00000000..f314b1f6
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CalibrationParam.java
@@ -0,0 +1,40 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CalibrationParam implements Serializable {
+
+ public double param_a_c2e_old;
+ public double param_b_c2e_old;
+ public double param_c_c2e_old;
+ public double param_a_c2e_new;
+ public double param_b_c2e_new;
+ public double param_c_c2e_new;
+
+ public double param_a_e2c_old;
+ public double param_b_e2c_old;
+ public double param_c_e2c_old;
+ public double param_a_e2c_new;
+ public double param_b_e2c_new;
+ public double param_c_e2c_new;
+
+ public CalibrationParam() {
+ param_a_c2e_old = 0;
+ param_b_c2e_old = 0;
+ param_c_c2e_old = 0;
+ param_a_e2c_old = 0;
+ param_b_e2c_old = 0;
+ param_c_e2c_old = 0;
+
+ param_a_c2e_new = 0;
+ param_b_c2e_new = 0;
+ param_c_c2e_new = 0;
+ param_a_e2c_new = 0;
+ param_b_e2c_new = 0;
+ param_c_e2c_new = 0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CertificateBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CertificateBlock.java
new file mode 100644
index 00000000..a190aaf2
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CertificateBlock.java
@@ -0,0 +1,61 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class CertificateBlock implements Serializable {
+
+ /* Certificate Block */
+ private double total_source_activity; // total source activity (Bq)
+
+ private String assay_date; // assay date (yyyy / mm / dd)
+
+ private String assay_time; // assay time (hh : mm : ss)
+
+ private String units_activity; // units of activity: “B,” “b” for Bq or “[blank]”; if nothing, then “B” is assigned
+
+ private List nuclide_name; // nuclide name
+
+ private List half_life_time; // half-life in seconds, hours, days, or years
+
+ private List time_unit; // time unit(Y, D, H, S)
+
+ private List activity_nuclide_time_assay;// activity of nuclide at time of assay
+
+ private List uncertainty; // uncertainty (%)
+
+ private List g_energy; // γ-energy (keV)
+
+ private List g_intensity; // γ-intensity (percent)
+
+ private List electron_decay_mode; // electron decay mode descriptor: B for β particle or C for conversion electron (CE), 0 for none (that is, γ-only source)
+
+ private List maximum_energy; // maximum β-particle energy or CE energy (keV)
+
+ private List intensity_b_particle; // intensity of β-particle (percent)
+
+ private int record_count;
+
+ public CertificateBlock(){
+ total_source_activity=0;
+ assay_date="";
+ assay_time="";
+ units_activity="";
+ nuclide_name= new LinkedList<>();
+ half_life_time= new LinkedList<>();
+ time_unit= new LinkedList<>();
+ activity_nuclide_time_assay= new LinkedList<>();
+ uncertainty= new LinkedList<>();
+ g_energy= new LinkedList<>();
+ g_intensity= new LinkedList<>();
+ electron_decay_mode= new LinkedList<>();
+ maximum_energy= new LinkedList<>();
+ intensity_b_particle= new LinkedList<>();
+ record_count=0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ChartData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ChartData.java
new file mode 100644
index 00000000..c9797f1f
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ChartData.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class ChartData implements Serializable {
+ private String name;
+ private String group;
+ private String color;
+ private boolean show;
+ private String type;
+ private List pointlist;
+
+ public ChartData() {
+ name = "";
+ group = "";
+ color = "yellow";
+ show = true;
+ type = "Either";
+ pointlist = new LinkedList<>();
+ }
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CollectionBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CollectionBlock.java
new file mode 100644
index 00000000..5f0fa00f
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/CollectionBlock.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CollectionBlock implements Serializable {
+
+ /* Collection Block */
+ private String collection_start_date; // collection start date (yyyy / mm / dd)
+
+ private String collection_start_time; // collection start time (hh : mm : ss . s)
+
+ private String collection_stop_date; // collection stop date (yyyy / mm / dd)
+
+ private String collection_stop_time; // collection stop time (hh : mm : ss . s)
+
+ private double air_volume; // total air volume sampled (standard cubic meters [scm])
+
+ public CollectionBlock(){
+ collection_start_date="";
+ collection_start_time="";
+ collection_stop_date="";
+ collection_stop_time="";
+ air_volume=0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/FittingBody.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/FittingBody.java
new file mode 100644
index 00000000..90d1d9c5
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/FittingBody.java
@@ -0,0 +1,22 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class FittingBody implements Serializable {
+
+ private Double paramA;
+
+ private Double paramB;
+
+ private Double paramC;
+
+ private List tempPoints;
+
+ private Integer count;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GEfficiencyBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GEfficiencyBlock.java
new file mode 100644
index 00000000..002936c2
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GEfficiencyBlock.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class GEfficiencyBlock implements Serializable {
+
+ private List g_energy; // γ -energy (keV)
+
+ private List efficiency; // efficiency (counts in peak/photon emitted)
+
+ private List uncertainty; // uncertainty (counts in peak/photon emitted)
+
+ private Integer record_count;
+
+ public GEfficiencyBlock(){
+ g_energy = new LinkedList<>();
+ efficiency = new LinkedList<>();
+ uncertainty = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GEnergyBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GEnergyBlock.java
new file mode 100644
index 00000000..b1c30949
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GEnergyBlock.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class GEnergyBlock implements Serializable {
+
+ private List g_energy; // γ -energy (keV)
+
+ private List centroid_channel; // centroid channel
+
+ private List uncertainty; // uncertainty (channels)
+
+ private Integer record_count;
+
+ public GEnergyBlock(){
+ g_energy = new LinkedList<>();
+ centroid_channel = new LinkedList<>();
+ uncertainty = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GResolutionBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GResolutionBlock.java
new file mode 100644
index 00000000..90363fce
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GResolutionBlock.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class GResolutionBlock implements Serializable {
+
+ private List g_energy; // γ -energy (keV)
+
+ private List FWHM; // FWHM (keV)
+
+ private List uncertainty; // uncertainty (keV)
+
+ private Integer record_count;
+
+ public GResolutionBlock(){
+ g_energy = new LinkedList<>();
+ FWHM = new LinkedList<>();
+ uncertainty = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GSpectrumBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GSpectrumBlock.java
new file mode 100644
index 00000000..17bb2403
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/GSpectrumBlock.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class GSpectrumBlock implements Serializable {
+
+ /* g_Spectrum Block */
+ private long num_g_channel; // number of γ channels
+
+ private long g_energy_span; // γ-energy span (keV)
+
+ private long begin_channel; // begin of channels
+
+ private List counts; // count at channel
+
+ public GSpectrumBlock(){
+ num_g_channel=0;
+ g_energy_span=0;
+ begin_channel=0;
+ counts= new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HalfData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HalfData.java
new file mode 100644
index 00000000..205fc1a0
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HalfData.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HalfData implements Serializable {
+
+ private String name;
+
+ private Double half;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HeaderBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HeaderBlock.java
new file mode 100644
index 00000000..881e09de
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HeaderBlock.java
@@ -0,0 +1,51 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HeaderBlock implements Serializable {
+
+ /* Header Black */
+ private String designator; // designator
+
+ private String site_code; // site code
+
+ private String detector_code; // detector code
+
+ private String system_type; // system type: P for particulate; B for gas with 3-D β - γ coincidence detection; and
+ // G for all other gas systems (high-resolu-tion γ-spectrometry or 2-D β-γ coinci-dence detection)
+
+ private String sample_geometry; // sample geometry
+
+ private String spectrum_quantity; // spectrum qualifier: preliminary ( PREL )or full ( FULL)
+
+ private String sample_ref_id; // sample reference identification
+
+ private String measurement_id; // measurement identification
+
+ private String detector_bk_measurement_id; // detector background measurement identification
+
+ private String gas_bk_measurement_id; // gas background measurement identification (memory effect)
+
+ private String transmit_date; // transmit date (yyyy / mm / dd)
+
+ private String transmit_time; // transmit time (hh : mm : ss . s)
+
+ public HeaderBlock(){
+ designator="";
+ site_code="";
+ detector_code="";
+ system_type="";
+ sample_geometry="";
+ spectrum_quantity="";
+ sample_ref_id="";
+ measurement_id="";
+ detector_bk_measurement_id="";
+ gas_bk_measurement_id="";
+ transmit_date="";
+ transmit_time="";
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/MessageInfo.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/MessageInfo.java
new file mode 100644
index 00000000..c72bfebf
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/MessageInfo.java
@@ -0,0 +1,47 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class MessageInfo implements Serializable {
+
+ /* Infomations */
+ private String msg_type;
+
+ private String msg_id;
+
+ private String msg_src_code;
+
+ private String ref_id_str;
+
+ private String ref_src_code;
+
+ private String seq_num;
+
+ private String tot_num;
+
+ private String product_id;
+
+ private String delivery_id;
+
+ private String data_type;
+
+ private boolean verify_srid;
+
+ public MessageInfo(){
+ msg_type="";
+ msg_id="";
+ msg_src_code="";
+ ref_id_str="";
+ ref_src_code="";
+ seq_num="";
+ tot_num="";
+ product_id="";
+ delivery_id="";
+ data_type="";
+ verify_srid=false;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideActMda.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideActMda.java
new file mode 100644
index 00000000..71b93797
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideActMda.java
@@ -0,0 +1,49 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class NuclideActMda implements Serializable {
+ private boolean bCalculateMDA;
+ private int calculateIdx;
+ private int key_flag; // 第 key_flag 条射线是主射线,从 0 开始编号, key_flag < 0 表示无主射线
+ private double halflife;
+ private double activity;
+ private double act_err;
+ private double mda;
+ private double mdc;
+ private double efficiency;
+ private double effi_err;
+ private double concentration;
+ private List fullNames;
+ private List vEnergy; // 匹配的γ射线能量
+ private List vUncertE;
+ private List vYield; // 匹配的γ射线分支比
+ private List vUncertY;
+ private List vPeakIdx; // 匹配的峰序号, 从 1 开始
+
+ public NuclideActMda() {
+ bCalculateMDA = false;
+ calculateIdx = -1;
+ key_flag = -1;
+ halflife = 0.0;
+ activity = 0.0;
+ act_err = 0.0;
+ mda = 0.0;
+ mdc = 0.0;
+ efficiency = 0.0;
+ effi_err = 0.0;
+ concentration = 0.0;
+ fullNames = new LinkedList<>();
+ vEnergy = new LinkedList<>();
+ vUncertE = new LinkedList<>();
+ vYield = new LinkedList<>();
+ vUncertY = new LinkedList<>();
+ vPeakIdx = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java
new file mode 100644
index 00000000..836a61a8
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideLine.java
@@ -0,0 +1,24 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class NuclideLine implements Serializable {
+
+ private String FullName;
+
+ private Double energy;
+
+ private Double energy_uncert;
+
+ private Double yield;
+
+ private Double yield_uncert;
+
+ private Double key_flag;
+
+ private String name;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java
new file mode 100644
index 00000000..b5917aa8
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/NuclideLines.java
@@ -0,0 +1,31 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class NuclideLines implements Serializable {
+ public List fullNames; // 核素全名
+ public List vEnergy; // 核素的所有γ射线能量
+ public List vUncertE;
+ public List vYield; // 核素γ射线分支比
+ public List vUncertY;
+ public double halflife;// 单位:秒
+ public int key_flag; // 记录主射线下标
+ public int maxYeildIdx;
+
+ public NuclideLines() {
+ maxYeildIdx = -1;
+ key_flag = -1;
+ halflife = 0;
+ fullNames=new LinkedList<>();
+ vEnergy=new LinkedList<>();
+ vUncertE=new LinkedList<>();
+ vYield=new LinkedList<>();
+ vUncertY=new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java
new file mode 100644
index 00000000..512618b8
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java
@@ -0,0 +1,169 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class PHDFile implements Serializable {
+
+ private boolean isValid; // 是否有效谱
+ private boolean bAnalyed; // 记录是否被分析
+ private String analy_start_time;
+
+ private String filename; // 谱文件名称
+ private String filepath; // 谱文件路径
+ private String log_path;
+ private String report_path;
+ private String baseline_path;
+ private String lc_path;
+ private String scac_path;
+ private String totalCmt; // 谱文件总注释
+ private String oriTotalCmt;// 原始谱总注释
+
+ SpecSetup usedSetting; // 当前使用的分析设置
+
+ SpecSetup setting; // 新修改的分析设置
+
+ // 分析结果
+ private List vPeak;
+ private List vEnergy;
+ private List vBase;
+ private List vLc;
+ private List vScac;
+ //stdvec vFwhm;
+ //stdvec vFwhmc;
+ BaseControls baseCtrls;
+
+ // 当前修改的刻度名称
+ private String newEner;
+ private String newReso;
+ private String newEffi;
+ private String newTotE;
+
+ // 当前寻峰结果所用的刻度名称
+ private String usedEner;
+ private String usedReso;
+ private String usedEffi;
+ private String usedTotE;
+
+ // 当前寻峰结果所用的刻度数据
+ private GEnergyBlock usedEnerKD;
+ private GResolutionBlock usedResoKD;
+ private GEfficiencyBlock usedEffiKD;
+ private TotaleffBlock usedTotEKD;
+
+ // 存储所有的刻度数据
+ private Map mapEnerKD; // 能量刻度
+ private Map mapResoKD; // 分辨率刻度
+ private Map mapEffiKD; // 效率刻度
+ private Map mapTotEKD; // 总效率刻度
+
+ // 当前寻峰结果所用的刻度参数
+ private ParameterInfo usedEnerPara;
+ private ParameterInfo usedResoPara;
+ private ParameterInfo usedEffiPara;
+ private ParameterInfo usedTotEPara;
+
+ // 存储所有的刻度参数
+ private Map mapEnerPara;
+ private Map mapResoPara;
+ private Map mapEffiPara;
+ private Map mapTotEPara;
+
+ // 其他参数,目前存储的是默认值
+ private ParameterInfo para_stepRatio;
+ private ParameterInfo para_tail;
+ private ParameterInfo para_tailAlpha;
+ private ParameterInfo para_tailRight;
+ private ParameterInfo para_tailRightAlpha;
+
+ // 谱基本信息
+ private String id_sample;
+ private String id_analysis;
+ private String status;
+ private String category;
+ private HeaderBlock header;
+ private MessageInfo msgInfo;
+ private GSpectrumBlock Spec;
+ private AcquisitionBlock acq;
+ private CollectionBlock collect;
+ private ProcessingBlock process;
+ private CalibrationBlock calibration;
+ private SampleBlock sampleBlock;
+ private CertificateBlock certificate;
+
+ // QC Check
+ private Map QcItems;
+
+ // 核素活度浓度
+ private Map mapNucActMda;
+
+ public PHDFile() {
+ bAnalyed = false;
+ isValid = true;
+ analy_start_time = "";
+ filename = "";
+ filepath = "";
+ log_path = "";
+ report_path = "";
+ baseline_path="";
+ lc_path="";
+ scac_path="";
+ totalCmt = "";
+ oriTotalCmt="";
+ usedSetting = new SpecSetup();
+ setting = new SpecSetup();
+ vPeak = new LinkedList<>();
+ vEnergy = new LinkedList<>();
+ vBase = new LinkedList<>();
+ vLc = new LinkedList<>();
+ vScac = new LinkedList<>();
+ baseCtrls = new BaseControls();
+ newEner = "PHD";
+ newReso = "PHD";
+ newEffi = "PHD";
+ newTotE = "PHD";
+ usedEner= "";
+ usedReso= "";
+ usedEffi= "";
+ usedTotE= "";
+ mapEnerKD = new HashMap<>();
+ mapResoKD = new HashMap<>();
+ mapEffiKD = new HashMap<>();
+ mapTotEKD = new HashMap<>();
+ usedEnerPara = new ParameterInfo();
+ usedResoPara = new ParameterInfo();
+ usedEffiPara = new ParameterInfo();
+ usedTotEPara = new ParameterInfo();
+ mapEnerPara = new HashMap<>();
+ mapResoPara = new HashMap<>();
+ mapEffiPara = new HashMap<>();
+ mapTotEPara = new HashMap<>();
+ para_stepRatio = new ParameterInfo();
+ para_tail = new ParameterInfo();
+ para_tailAlpha = new ParameterInfo();
+ para_tailRight = new ParameterInfo();
+ para_tailRightAlpha = new ParameterInfo();
+ id_sample = "";
+ id_analysis = "";
+ status = "";
+ category = "";
+ header = new HeaderBlock();
+ msgInfo = new MessageInfo();
+ Spec = new GSpectrumBlock();
+ acq = new AcquisitionBlock();
+ collect = new CollectionBlock();
+ process = new ProcessingBlock();
+ calibration = new CalibrationBlock();
+ sampleBlock = new SampleBlock();
+ certificate = new CertificateBlock();
+ QcItems = new HashMap<>();
+ mapNucActMda = new HashMap<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ParameterInfo.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ParameterInfo.java
new file mode 100644
index 00000000..d0f1dbbf
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ParameterInfo.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class ParameterInfo implements Serializable {
+
+ private List p;
+
+ private List perr;
+
+ public ParameterInfo(){
+ p = new LinkedList<>();
+ perr = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/PeakInfo.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/PeakInfo.java
new file mode 100644
index 00000000..da44b300
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/PeakInfo.java
@@ -0,0 +1,68 @@
+package org.jeecg.modules.entity.vo;
+
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+public class PeakInfo implements Serializable {
+
+ public int index; //峰序号
+
+ public int multiIndex; //重峰序号
+
+ public int left; //峰的左边界
+
+ public int right; //峰的右边界
+
+ public double peakCentroid; //峰拟合后加权峰中心道
+
+ public double energy;
+
+ public double fwhmc; //半高宽
+
+ public double fwhm; //以keV为单位的半高宽
+
+ public double area; //净面积
+
+ public double areaErr; //
+
+ public double efficiency;
+
+ public double lc;
+
+ public double ld;
+
+ public double meanBackCount;
+
+ public double backgroundArea;
+
+ public double significance;
+
+ public double sensitivity;
+
+ public double stepRatio;
+
+ public double tail;
+
+ public double tailAlpha;
+
+ public double upperTail;
+
+ public double upperTailAlpha;
+
+ public double BWWidthChan;
+
+ public double recoilBetaChan;
+
+ public double recoilDeltaChan;
+
+ public String comments;
+
+ public List nuclides;
+
+ public PeakInfo(){
+ nuclides = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ProcessingBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ProcessingBlock.java
new file mode 100644
index 00000000..965a8977
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ProcessingBlock.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ProcessingBlock implements Serializable {
+
+ /* Processing Block */
+ private double sample_volume_of_Xe; // sample volume of Xe (cm 3 )
+
+ private double uncertainty_1; // uncertainty (cm 3 )
+
+ private double Xe_collection_yield; // Xe collection yield (Xe gas in sample/total Xe gas sampled)
+
+ private double uncertainty_2; // uncertainty (Xe gas in sample/total Xe gas sampled)
+
+ private String archive_bottle_id; // archive bottle identification
+
+ public ProcessingBlock(){
+ sample_volume_of_Xe=0;
+ uncertainty_1=0;
+ Xe_collection_yield=0;
+ uncertainty_2=0;
+ archive_bottle_id="";
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/QcCheckItem.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/QcCheckItem.java
new file mode 100644
index 00000000..dd6a2693
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/QcCheckItem.java
@@ -0,0 +1,22 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class QcCheckItem implements Serializable {
+
+ private String standard;
+
+ private double value;
+
+ private boolean bPass;
+
+ public QcCheckItem(){
+ standard="";
+ bPass = false;
+ value = 0.0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SampleBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SampleBlock.java
new file mode 100644
index 00000000..b4aaf36c
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SampleBlock.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SampleBlock implements Serializable {
+
+ /* Sample Block */
+ private double dimension_1;
+
+ private double dimension_2;
+
+ public SampleBlock(){
+ dimension_1=0;
+ dimension_2=0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ShapeData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ShapeData.java
new file mode 100644
index 00000000..2e60c96b
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/ShapeData.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ShapeData implements Serializable {
+
+ private int size;
+
+ private String name;
+
+ private String color;
+
+ private SeriseData point;
+
+ private String type;
+
+ public ShapeData() {
+ size = 4;
+ color = "red";
+ type = "Shape_Round";
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpecSetup.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpecSetup.java
new file mode 100644
index 00000000..e95f0bbd
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpecSetup.java
@@ -0,0 +1,57 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class SpecSetup implements Serializable {
+
+ private double ECutAnalysis_Low;
+
+ private double ECutAnalysis_High;
+
+ private double EnergyTolerance;
+
+ private double CalibrationPSS_high;
+
+ private double CalibrationPSS_low;
+
+ private double BaseImprovePSS;
+
+ private double PSS_low;
+
+ private double k_back;
+
+ private double k_alpha;
+
+ private double k_beta;
+
+ private double RiskLevelK;
+
+ private boolean bUpdateCal;
+
+ private boolean KeepCalPeakSearchPeaks;
+
+ private Date refTime_act; //活度参考时间,默认是AcqStartTime
+
+ private Date refTime_conc; //默认是CollectStartTime
+
+ public SpecSetup(){
+ ECutAnalysis_Low = 12.0;
+ ECutAnalysis_High = 12.0;
+ EnergyTolerance = 0.5;
+ CalibrationPSS_high = 10.0;
+ CalibrationPSS_low = 5.0;
+ BaseImprovePSS = 10.0;
+ PSS_low = 2.7;
+ k_back = 1.25;
+ k_alpha = 2.576;
+ k_beta = 1.645;
+ RiskLevelK = 4.264890;
+ bUpdateCal = false;
+ KeepCalPeakSearchPeaks = false;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumGroup.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumGroup.java
new file mode 100644
index 00000000..c425cad2
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumGroup.java
@@ -0,0 +1,25 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class SpectrumGroup implements Serializable {
+
+ private String SampleSpectrumFile;
+ private String GasBgSpectrumFile;
+ private String DetBgSpectrumFile;
+ private BgCalibratePara BgCalPara;
+ private List b_c2e;
+ private List g_c2e;
+
+ public SpectrumGroup(){
+ BgCalPara = new BgCalibratePara();
+ b_c2e = new LinkedList<>();
+ g_c2e = new LinkedList<>();
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TableWidget.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TableWidget.java
index 2f7be2c3..ff76cc48 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TableWidget.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TableWidget.java
@@ -13,8 +13,8 @@ public class TableWidget implements Serializable {
private Double energy;
- private String c;
+ private String FWHMC;
- private String keV;
+ private String FWHMkeV;
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TotaleffBlock.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TotaleffBlock.java
new file mode 100644
index 00000000..3fe6fed3
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/TotaleffBlock.java
@@ -0,0 +1,27 @@
+package org.jeecg.modules.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+@Data
+public class TotaleffBlock implements Serializable {
+
+ private List g_energy; // γ -energy (keV)
+
+ private List total_efficiency; // total efficiency (counts/photon emitted)
+
+ private List uncertainty; // uncertainty (counts/photon emitted)
+
+ private int record_count;
+
+ public TotaleffBlock(){
+ g_energy = new LinkedList<>();
+ total_efficiency = new LinkedList<>();
+ uncertainty = new LinkedList<>();
+ record_count = 0;
+ }
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsDetectorsSpectrumMapper.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsDetectorsSpectrumMapper.java
index 06297217..d77cdb46 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsDetectorsSpectrumMapper.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsDetectorsSpectrumMapper.java
@@ -1,7 +1,7 @@
package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.jeecg.modules.system.entity.GardsDetectors;
+import org.jeecg.modules.base.entity.configuration.GardsDetectors;
public interface GardsDetectorsSpectrumMapper extends BaseMapper {
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java
index 1077dc3c..08f0cbe2 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java
@@ -3,12 +3,9 @@ package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.entity.GardsSampleDataSpectrum;
-import org.jeecg.modules.entity.GardsXeResultsSpectrum;
-import org.jeecg.modules.entity.vo.CommentData;
-import org.jeecg.modules.entity.vo.SpectrumFileRecord;
-import org.jeecg.modules.entity.vo.StatisticsData;
-import org.jeecg.modules.entity.vo.StatisticsQueryData;
+import org.jeecg.modules.base.entity.rnman.GardsAnalySetting;
+import org.jeecg.modules.entity.*;
+import org.jeecg.modules.entity.vo.*;
import java.util.List;
@@ -50,5 +47,28 @@ public interface SpectrumAnalysisMapper {
List statisticsQuerySampleVolumn(String startDate, String endDate, List detectorList);
+ String getStatus(@Param(value = "sampleId") Integer sampleId);
+
+ GardsAnalysesSpectrum getAnalysis(@Param(value = "dbName") String dbName, @Param(value = "sampleId") Integer sampleId);
+
+ List getPeaks(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis);
+
+ List getCalibrationPairs(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis);
+
+ List getPara(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis);
+
+ List getNuclLinesIded(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis);
+
+ List getNuclIded(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis);
+
+ List getQcCheck(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis);
+
+ GardsAnalySetting getAnalySetting(@Param(value = "idAnalysis") Integer idAnalysis);
+
+ List getNuclideLines(@Param(value = "name") String name);
+
+ List getHalf(@Param(value = "names") List names);
+
+ List UserNuclide(@Param(value = "systemType") String systemType, @Param(value = "userName") String userName);
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml
index 697945ef..62c95a45 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml
@@ -361,5 +361,134 @@
order by gsd.COLLECT_START
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/CalValuesHandler.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/CalValuesHandler.java
new file mode 100644
index 00000000..6be425bf
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/CalValuesHandler.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.native_jni;
+
+import org.jeecg.modules.entity.vo.PeakInfo;
+import org.jeecg.modules.native_jni.struct.CalValuesOut;
+
+import java.util.List;
+
+public class CalValuesHandler {
+
+ public static native CalValuesOut calFcnEval(List x, List para);
+
+ public static native CalValuesOut energyToChannel(List energy, List para);
+
+ public static native CalValuesOut calDerivEval(List channel, List para);
+
+ public static native List interp1(PeakInfo peak, List t_base, List regChan);
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/CalValuesOut.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/CalValuesOut.java
new file mode 100644
index 00000000..1846200f
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/CalValuesOut.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.native_jni.struct;
+
+import java.util.List;
+
+public class CalValuesOut {
+
+ public int rowNum;
+
+ public int colNum;
+
+ public List counts;
+
+}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java
index 85bb2452..e1ea99ad 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java
@@ -6,8 +6,8 @@ import java.util.List;
* 能谱结构体字段信息
*/
public class EnergySpectrumStruct {
-
- /************************* Infomations ******************/
+
+ /************************* Infomations ******************/
/**
* 消息类型
*/
@@ -70,6 +70,10 @@ public class EnergySpectrumStruct {
* transmit time (hh : mm : ss . s)
*/
public String transmit_time;
+ /************************* Comment ******************/
+ public Double dimension_1;
+
+ public Double dimension_2;
/************************* Comment ******************/
public String comment;
@@ -356,48 +360,193 @@ public class EnergySpectrumStruct {
* counts at channels
*/
public List h_counts;
-
- public EnergySpectrumStruct() {
- super();
- }
- @Override
- public String toString() {
- return "EnergySpectrumStruct [msg_type=" + msg_type + ", msg_id=" + msg_id + ", data_type=" + data_type
- + ", designator=" + designator + ", site_code=" + site_code + ", detector_code=" + detector_code
- + ", system_type=" + system_type + ", sample_geometry=" + sample_geometry + ", spectrum_quantity="
- + spectrum_quantity + ", sample_ref_id=" + sample_ref_id + ", measurement_id=" + measurement_id
- + ", detector_bk_measurement_id=" + detector_bk_measurement_id + ", gas_bk_measurement_id="
- + gas_bk_measurement_id + ", transmit_date=" + transmit_date + ", transmit_time=" + transmit_time
- + ", comment=" + comment + ", acquisition_start_date=" + acquisition_start_date
- + ", acquisition_start_time=" + acquisition_start_time + ", acquisition_real_time="
- + acquisition_real_time + ", acquisition_live_time=" + acquisition_live_time
- + ", collection_start_date=" + collection_start_date + ", collection_start_time="
- + collection_start_time + ", collection_stop_date=" + collection_stop_date + ", collection_stop_time="
- + collection_stop_time + ", air_volume=" + air_volume + ", sample_volume_of_Xe=" + sample_volume_of_Xe
- + ", uncertainty_1=" + uncertainty_1 + ", Xe_collection_yield=" + Xe_collection_yield
- + ", uncertainty_2=" + uncertainty_2 + ", archive_bottle_id=" + archive_bottle_id
- + ", date_calibration=" + date_calibration + ", time_calibration=" + time_calibration + ", g_energy="
- + g_energy + ", g_centroid_channel=" + g_centroid_channel + ", g_uncertainty=" + g_uncertainty
- + ", g_record_count=" + g_record_count + ", b_electron_energy=" + b_electron_energy + ", b_decay_mode="
- + b_decay_mode + ", b_channel=" + b_channel + ", b_uncertainty=" + b_uncertainty + ", b_record_count="
- + b_record_count + ", g_r_energy=" + g_r_energy + ", g_r_FWHM=" + g_r_FWHM + ", g_r_uncertainty="
- + g_r_uncertainty + ", g_r_record_count=" + g_r_record_count + ", b_r_electron_energy="
- + b_r_electron_energy + ", b_r_FWHM=" + b_r_FWHM + ", b_r_uncertainty=" + b_r_uncertainty
- + ", b_r_record_count=" + b_r_record_count + ", g_e_energy=" + g_e_energy + ", g_e_efficiency="
- + g_e_efficiency + ", g_e_uncertainty=" + g_e_uncertainty + ", g_e_record_count=" + g_e_record_count
- + ", ROI_number=" + ROI_number + ", POI_B_x1=" + POI_B_x1 + ", POI_B_x2=" + POI_B_x2 + ", POI_G_y1="
- + POI_G_y1 + ", POI_G_y2=" + POI_G_y2 + ", roi_record_count=" + roi_record_count + ", bg_nuclide_name="
- + bg_nuclide_name + ", bg_ROI_number=" + bg_ROI_number + ", bg_efficiency=" + bg_efficiency
- + ", bg_uncertainty=" + bg_uncertainty + ", bg_record_count=" + bg_record_count + ", ratio_id="
- + ratio_id + ", ROI_num_highter_G_energy_ROI=" + ROI_num_highter_G_energy_ROI
- + ", ROI_num_lower_G_energy_ROI=" + ROI_num_lower_G_energy_ROI + ", count_ratio=" + count_ratio
- + ", count_ratio_uncertainty=" + count_ratio_uncertainty + ", ratio_record_count=" + ratio_record_count
- + ", num_g_channel=" + num_g_channel + ", g_energy_span=" + g_energy_span + ", g_begin_channel="
- + g_begin_channel + ", g_counts=" + g_counts + ", num_b_channel=" + num_b_channel + ", b_energy_span="
- + b_energy_span + ", b_begin_channel=" + b_begin_channel + ", b_counts=" + b_counts + ", b_channels="
- + b_channels + ", g_channels=" + g_channels + ", b_h_energy_span=" + b_h_energy_span
- + ", g_h_energy_span=" + g_h_energy_span + ", h_counts="+ h_counts +"]";
- }
-
+ /************************* Certificate_Block ******************/
+ /**
+ * total source activity (Bq)
+ */
+ public double total_source_activity;
+ /**
+ * assay date (yyyy / mm / dd)
+ */
+ public String assay_date;
+ /**
+ * assay time (hh : mm : ss)
+ */
+ public String assay_time;
+ /**
+ * units of activity: “B,” “b” for Bq or “[blank]”; if nothing, then “B” is assigned
+ */
+ public String units_activity;
+ /**
+ * nuclide name
+ */
+ public List nuclide_name;
+ /**
+ * half-life in seconds, hours, days, or years
+ */
+ public List half_life_time;
+ /**
+ * time unit(Y, D, H, S)
+ */
+ public List time_unit;
+ /**
+ * activity of nuclide at time of assay
+ */
+ public List activity_nuclide_time_assay;
+ /**
+ * uncertainty (%)
+ */
+ public List uncertainty;
+ /**
+ * γ-energy (keV)
+ */
+ public List cer_g_energy;
+ /**
+ * γ-intensity (percent)
+ */
+ public List g_intensity;
+ /**
+ * electron decay mode descriptor: B for β particle or C for conversion electron (CE), 0 for none (that is, γ-only source)
+ */
+ public List electron_decay_mode;
+ /**
+ * maximum β-particle energy or CE energy (keV)
+ */
+ public List maximum_energy;
+ /**
+ * intensity of β-particle (percent)
+ */
+ public List intensity_b_particle;
+
+ public int record_count;
+ /************************* Totaleff Block ******************/
+ /**
+ * γ-energy (keV)
+ */
+ public List t_g_energy;
+ /**
+ * total efficiency (counts/photon emitted)
+ */
+ public List total_efficiency;
+ /**
+ * uncertainty (counts/photon emitted)
+ */
+ public List t_uncertainty;
+
+ public int t_record_count;
+
+ public EnergySpectrumStruct() {
+ super();
+ }
+
+ @Override
+ public String toString() {
+ return "EnergySpectrumStruct{" +
+ "msg_type='" + msg_type + '\'' +
+ ", msg_id='" + msg_id + '\'' +
+ ", data_type='" + data_type + '\'' +
+ ", designator='" + designator + '\'' +
+ ", site_code='" + site_code + '\'' +
+ ", detector_code='" + detector_code + '\'' +
+ ", system_type='" + system_type + '\'' +
+ ", sample_geometry='" + sample_geometry + '\'' +
+ ", spectrum_quantity='" + spectrum_quantity + '\'' +
+ ", sample_ref_id='" + sample_ref_id + '\'' +
+ ", measurement_id='" + measurement_id + '\'' +
+ ", detector_bk_measurement_id='" + detector_bk_measurement_id + '\'' +
+ ", gas_bk_measurement_id='" + gas_bk_measurement_id + '\'' +
+ ", transmit_date='" + transmit_date + '\'' +
+ ", transmit_time='" + transmit_time + '\'' +
+ ", comment='" + comment + '\'' +
+ ", acquisition_start_date='" + acquisition_start_date + '\'' +
+ ", acquisition_start_time='" + acquisition_start_time + '\'' +
+ ", acquisition_real_time=" + acquisition_real_time +
+ ", acquisition_live_time=" + acquisition_live_time +
+ ", collection_start_date='" + collection_start_date + '\'' +
+ ", collection_start_time='" + collection_start_time + '\'' +
+ ", collection_stop_date='" + collection_stop_date + '\'' +
+ ", collection_stop_time='" + collection_stop_time + '\'' +
+ ", air_volume=" + air_volume +
+ ", sample_volume_of_Xe=" + sample_volume_of_Xe +
+ ", uncertainty_1=" + uncertainty_1 +
+ ", Xe_collection_yield=" + Xe_collection_yield +
+ ", uncertainty_2=" + uncertainty_2 +
+ ", archive_bottle_id='" + archive_bottle_id + '\'' +
+ ", date_calibration='" + date_calibration + '\'' +
+ ", time_calibration='" + time_calibration + '\'' +
+ ", g_energy=" + g_energy +
+ ", g_centroid_channel=" + g_centroid_channel +
+ ", g_uncertainty=" + g_uncertainty +
+ ", g_record_count=" + g_record_count +
+ ", b_electron_energy=" + b_electron_energy +
+ ", b_decay_mode=" + b_decay_mode +
+ ", b_channel=" + b_channel +
+ ", b_uncertainty=" + b_uncertainty +
+ ", b_record_count=" + b_record_count +
+ ", g_r_energy=" + g_r_energy +
+ ", g_r_FWHM=" + g_r_FWHM +
+ ", g_r_uncertainty=" + g_r_uncertainty +
+ ", g_r_record_count=" + g_r_record_count +
+ ", b_r_electron_energy=" + b_r_electron_energy +
+ ", b_r_FWHM=" + b_r_FWHM +
+ ", b_r_uncertainty=" + b_r_uncertainty +
+ ", b_r_record_count=" + b_r_record_count +
+ ", g_e_energy=" + g_e_energy +
+ ", g_e_efficiency=" + g_e_efficiency +
+ ", g_e_uncertainty=" + g_e_uncertainty +
+ ", g_e_record_count=" + g_e_record_count +
+ ", ROI_number=" + ROI_number +
+ ", POI_B_x1=" + POI_B_x1 +
+ ", POI_B_x2=" + POI_B_x2 +
+ ", POI_G_y1=" + POI_G_y1 +
+ ", POI_G_y2=" + POI_G_y2 +
+ ", roi_record_count=" + roi_record_count +
+ ", bg_nuclide_name=" + bg_nuclide_name +
+ ", bg_ROI_number=" + bg_ROI_number +
+ ", bg_efficiency=" + bg_efficiency +
+ ", bg_uncertainty=" + bg_uncertainty +
+ ", bg_record_count=" + bg_record_count +
+ ", ratio_id=" + ratio_id +
+ ", ROI_num_highter_G_energy_ROI=" + ROI_num_highter_G_energy_ROI +
+ ", ROI_num_lower_G_energy_ROI=" + ROI_num_lower_G_energy_ROI +
+ ", count_ratio=" + count_ratio +
+ ", count_ratio_uncertainty=" + count_ratio_uncertainty +
+ ", ratio_record_count=" + ratio_record_count +
+ ", num_g_channel=" + num_g_channel +
+ ", g_energy_span=" + g_energy_span +
+ ", g_begin_channel=" + g_begin_channel +
+ ", g_counts=" + g_counts +
+ ", num_b_channel=" + num_b_channel +
+ ", b_energy_span=" + b_energy_span +
+ ", b_begin_channel=" + b_begin_channel +
+ ", b_counts=" + b_counts +
+ ", b_channels=" + b_channels +
+ ", g_channels=" + g_channels +
+ ", b_h_energy_span=" + b_h_energy_span +
+ ", g_h_energy_span=" + g_h_energy_span +
+ ", h_counts=" + h_counts +
+ ", total_source_activity=" + total_source_activity +
+ ", assay_date='" + assay_date + '\'' +
+ ", assay_time='" + assay_time + '\'' +
+ ", units_activity='" + units_activity + '\'' +
+ ", nuclide_name=" + nuclide_name +
+ ", half_life_time=" + half_life_time +
+ ", time_unit=" + time_unit +
+ ", activity_nuclide_time_assay=" + activity_nuclide_time_assay +
+ ", uncertainty=" + uncertainty +
+ ", cer_g_energy=" + cer_g_energy +
+ ", g_intensity=" + g_intensity +
+ ", electron_decay_mode=" + electron_decay_mode +
+ ", maximum_energy=" + maximum_energy +
+ ", intensity_b_particle=" + intensity_b_particle +
+ ", record_count=" + record_count +
+ '}';
+ }
+
+ public static void main(String[] args) {
+ EnergySpectrumStruct s = new EnergySpectrumStruct();
+ System.out.println(s);
+ System.out.println(s.gas_bk_measurement_id);
+ }
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java
new file mode 100644
index 00000000..4c829f36
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java
@@ -0,0 +1,11 @@
+package org.jeecg.modules.service;
+
+import org.jeecg.common.api.vo.Result;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IDataService {
+
+ Result initValue(HttpServletRequest 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 f831ba14..d9237fae 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
@@ -1,5 +1,15 @@
package org.jeecg.modules.service;
+import org.jeecg.common.api.vo.Result;
+
+import javax.servlet.http.HttpServletRequest;
+
public interface IGammaService{
- void gammaByFile(String path,String fileName);
+
+ Result gammaByDB(String dbName, Integer sampleId);
+
+ Result configure(Integer sampleId);
+
+ Result Reprocessing(Integer sampleId);
+
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java
index db6d4dab..ca06aa98 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java
@@ -3,6 +3,8 @@ package org.jeecg.modules.service;
import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.GardsSampleDataSpectrum;
+import org.jeecg.modules.entity.vo.AnalyseData;
+import org.jeecg.modules.entity.vo.SeriseData;
import org.jeecg.modules.entity.vo.StatisticsQueryData;
import javax.servlet.http.HttpServletRequest;
@@ -48,6 +50,14 @@ public interface ISpectrumAnalysisService {
Result statisticsQueryBtn(String detectorName, Integer stationId, String statisticsType, Date startTime, Date endTime);
- Result fitting(Double paramA, Double paramB, Double paramC, List tempPoints);
+ Result fitting(Double paramA, Double paramB, Double paramC, List tempPointsArray, Integer count);
+
+ Result getGammaGated(Integer chartHeight, Integer channelWidth, Integer gammaChannel, Integer sampleId);
+
+ Result ReAnalyse(AnalyseData analyseData);
+
+ Result analyseCurrentSpectrum(String dbName, Integer sampleId);
+
+ Result analyseAllSpectrum();
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IUserTaskService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IUserTaskService.java
index 4cec5c0d..85a53e3c 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IUserTaskService.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IUserTaskService.java
@@ -1,6 +1,6 @@
package org.jeecg.modules.service;
-import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.base.entity.postgre.SysUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java
new file mode 100644
index 00000000..7419cb73
--- /dev/null
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java
@@ -0,0 +1,49 @@
+package org.jeecg.modules.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.util.JwtUtil;
+import org.jeecg.common.util.GammaFileUtil;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.modules.entity.vo.NuclideLines;
+import org.jeecg.modules.mapper.SpectrumAnalysisMapper;
+import org.jeecg.modules.service.IDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+@Service("dataService")
+public class DataServiceImpl implements IDataService {
+
+ @Autowired
+ private SpectrumAnalysisMapper spectrumAnalysisMapper;
+ @Autowired
+ private GammaFileUtil gammaFileUtil;
+ @Autowired
+ private RedisUtil redisUtil;
+
+ @Override
+ public Result initValue(HttpServletRequest request) {
+ Result result = new Result();
+ String userName = JwtUtil.getUserNameByToken(request);
+ List PNuclideList = spectrumAnalysisMapper.UserNuclide("P", userName);
+ if (CollectionUtils.isEmpty(PNuclideList)){
+ PNuclideList = spectrumAnalysisMapper.UserNuclide("P", "admin");
+ }
+ List GNuclideList = spectrumAnalysisMapper.UserNuclide("G", userName);
+ if (CollectionUtils.isEmpty(GNuclideList)){
+ GNuclideList = spectrumAnalysisMapper.UserNuclide("G", "admin");
+ }
+ Map PNuclideLinesMap = gammaFileUtil.GetNuclideLines(PNuclideList);
+ redisUtil.set("Gamma:GammaPInit"+userName,PNuclideLinesMap);
+ Map GNuclideLinesMap = gammaFileUtil.GetNuclideLines(GNuclideList);
+ redisUtil.set("Gamma:GammaGInit"+userName,GNuclideLinesMap);
+ result.setSuccess(true);
+ return result;
+ }
+
+}
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 c0ba9417..c8075123 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
@@ -1,13 +1,97 @@
package org.jeecg.modules.service.impl;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.util.JwtUtil;
+import org.jeecg.common.util.GammaFileUtil;
+import org.jeecg.common.util.RedisUtil;
+import org.jeecg.modules.entity.vo.NuclideLines;
+import org.jeecg.modules.entity.vo.PHDFile;
+import org.jeecg.modules.entity.vo.SpecSetup;
import org.jeecg.modules.service.IGammaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-@Service
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service(value = "gammaService")
+@DS("ora")
public class GammaServiceImpl implements IGammaService {
- @Override
- public void gammaByFile(String path,String fileName) {
+ @Autowired
+ private RedisUtil redisUtil;
+ @Autowired
+ private GammaFileUtil gammaFileUtil;
+ @Override
+ public Result gammaByDB(String dbName, Integer sampleId) {
+ Result result = new Result();
+ Map map = new HashMap<>();
+ PHDFile phd = new PHDFile();
+ //读取文件内容
+ gammaFileUtil.loadFile(sampleId, phd, result);
+ //从数据库中读取相关信息 ---- 目前代码未完善
+ gammaFileUtil.getResultFromDB(dbName, sampleId, phd, result);
+ // 更新 ‘QC Flags’ 状态
+ List qcstate = gammaFileUtil.Qcstate(phd);
+ map.put("QCFlag", qcstate);
+ // 更新 ‘Detailed Information’ 信息
+ List detailedInfo = gammaFileUtil.DetailedInfo(phd);
+ map.put("DetailedInformation", detailedInfo);
+ // 更新 ACQ 模块中各时间信息
+ map.put("start_time", phd.getAcq().getAcquisition_start_date() + "\n" + phd.getAcq().getAcquisition_start_time());
+ map.put("real_time", String.format("%.2f", phd.getAcq().getAcquisition_real_time()));
+ map.put("live_time", String.format("%.2f", phd.getAcq().getAcquisition_live_time()));
+ double deadTime = (phd.getAcq().getAcquisition_real_time() - phd.getAcq().getAcquisition_live_time()) / phd.getAcq().getAcquisition_real_time();
+ map.put("dead_time", String.format("%.2f", deadTime*100));
+ gammaFileUtil.UpdateChart(phd, map);
+ redisUtil.set("Gamma : Gamma_"+sampleId, phd);
+ result.setSuccess(true);
+ result.setResult(map);
+ return result;
}
+
+ @Override
+ public Result configure(Integer sampleId) {
+ Result result = new Result();
+ PHDFile phd = (PHDFile) redisUtil.get("Gamma_" + sampleId);
+ Map map = new HashMap<>();
+ // 用当前谱使用的设置初始化界面控件
+ SpecSetup setup = phd.getUsedSetting();
+ map.put("edit_ps_low", setup.getECutAnalysis_Low());
+ map.put("edit_ps_high", setup.getECutAnalysis_High());
+ map.put("edit_energy", setup.getEnergyTolerance());
+ map.put("edit_pss_low", setup.getPSS_low());
+ map.put("edit_cal_low", setup.getCalibrationPSS_low());
+ map.put("edit_cal_high", setup.getCalibrationPSS_high());
+ map.put("checkBox_updateCal", setup.isBUpdateCal());
+ map.put("checkBox_keepPeak", setup.isKeepCalPeakSearchPeaks());
+ map.put("edit_bi_pss", setup.getBaseImprovePSS());
+ map.put("edit_riskLevelK", setup.getRiskLevelK());
+ map.put("edit_k_back", setup.getK_back());
+ map.put("edit_k_alpha", setup.getK_alpha());
+ map.put("edit_k_beta", setup.getK_beta());
+ map.put("dateTime_Act", setup.getRefTime_act());
+ map.put("dateTime_Conc", setup.getRefTime_conc());
+
+ // 当前谱文件为非 “P” 类型时禁用“刻度更新”模块
+ if(!phd.getHeader().getSystem_type().toUpperCase().contains("P")) {
+ map.put("group_calPS", false);
+ }
+ result.setSuccess(true);
+ result.setResult(map);
+ return result;
+ }
+
+ @Override
+ public Result Reprocessing(Integer sampleId) {
+
+ return null;
+ }
+
}
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java
index f381cff5..ef81a18a 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java
@@ -173,9 +173,6 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
result.error500("数据库类型不存在");
return result;
}
- if (redisUtil.hasKey("Spectrum_"+sampleId)){
- redisUtil.del("Spectrum_"+sampleId);
- }
//查询数据库文件信息
SpectrumFileRecord dbSpectrumFilePath = spectrumAnalysisMapper.getDBSpectrumFilePath(dbName, sampleId);
//查询数据库中结果的Xe数据
@@ -213,7 +210,7 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
detBgMap = this.fenxi(pathName, fileName, xeDataList, detBg.getSampleId(), detBg.getStatus());
resultMap.put("detBg",detBgMap);
}
- String collectStartStr = DateUtils.formatDate(dbSpectrumFilePath.getCollectStart(), "yyyy-MM-dd HH:mm:ss");
+ String collectStartStr = DateUtils.formatDate(dbSpectrumFilePath.getCollectStart(), "yyyy/MM/dd HH:mm:ss");
String dbQcFilePath = spectrumAnalysisMapper.getQCFilePath(dbSpectrumFilePath.getSiteDetCode(), collectStartStr);
dbSpectrumFilePath.setQcFilePath(dbQcFilePath);
filePath.add(dbQcFilePath);
@@ -226,7 +223,6 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
}
phdFileUtil.getLightColor(sampleMap,gasBgMap,detBgMap,qcMap);
}
- redisUtil.set("Spectrum_"+sampleId, filePath);
result.setSuccess(true);
result.setResult(resultMap);
return result;
@@ -285,9 +281,6 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
result.error500("删除失败!");
return result;
}
- for (Integer sampleId:sampleIds) {
- redisUtil.del("Spectrum_"+sampleId);
- }
result.success("删除成功");
return result;
}
@@ -498,7 +491,7 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
List lines = phdFileUtil.readLine(detBgFilePath);
map.put("detBg", lines);
}
- String collectStartStr = DateUtils.formatDate(dbSpectrumFilePath.getCollectStart(), "yyyy-MM-dd HH:mm:ss");
+ String collectStartStr = DateUtils.formatDate(dbSpectrumFilePath.getCollectStart(), "yyyy/MM/dd HH:mm:ss");
String dbQcFilePath = StringPool.SLASH+ spectrumPathProperties.getRootPath() +StringPool.SLASH+spectrumAnalysisMapper.getQCFilePath(dbSpectrumFilePath.getSiteDetCode(), collectStartStr);
if(StringUtils.isNotBlank(dbQcFilePath)){
List lines = phdFileUtil.readLine(dbQcFilePath);
@@ -554,15 +547,15 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
String sit_det_code = struct.site_code;
String detect_code = struct.detector_code;
String sample_id = sampleId.toString();
- Date collectStartDate = DateUtils.parseDate(struct.collection_start_date.replace(StringPool.SLASH, StringPool.DASH) + StringPool.SPACE + struct.collection_start_time.substring(0, struct.collection_start_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss");
- Date collectStopDate = DateUtils.parseDate(struct.collection_stop_date.replace(StringPool.SLASH, StringPool.DASH) + StringPool.SPACE + struct.collection_stop_time.substring(0, struct.collection_stop_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss");
- String collect_start = DateUtils.formatDate(collectStartDate, "yyyy-MM-dd HH:mm:ss");
- String collect_stop = DateUtils.formatDate(collectStopDate, "yyyy-MM-dd HH:mm:ss");
+ Date collectStartDate = DateUtils.parseDate(struct.collection_start_date + StringPool.SPACE + struct.collection_start_time.substring(0, struct.collection_start_time.indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ Date collectStopDate = DateUtils.parseDate(struct.collection_stop_date + StringPool.SPACE + struct.collection_stop_time.substring(0, struct.collection_stop_time.indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ String collect_start = DateUtils.formatDate(collectStartDate, "yyyy/MM/dd HH:mm:ss");
+ String collect_stop = DateUtils.formatDate(collectStopDate, "yyyy/MM/dd HH:mm:ss");
String collection_time_value = String.format ("%.2f",Double.valueOf(collectStopDate.getTime()/1000 - collectStartDate.getTime()/ 1000));
String s_volume_of_Xe = String.valueOf(struct.air_volume);
String s_xe_stable_volume = String.valueOf(struct.sample_volume_of_Xe);
- Date acquisitionStartDate = DateUtils.parseDate(struct.acquisition_start_date.replace(StringPool.SLASH, StringPool.DASH) + StringPool.SPACE + struct.acquisition_start_time.substring(0, struct.acquisition_start_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss");
- String acquisition_start = DateUtils.formatDate(acquisitionStartDate, "yyyy-MM-dd HH:mm:ss");
+ Date acquisitionStartDate = DateUtils.parseDate(struct.acquisition_start_date + StringPool.SPACE + struct.acquisition_start_time.substring(0, struct.acquisition_start_time.indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ String acquisition_start = DateUtils.formatDate(acquisitionStartDate, "yyyy/MM/dd HH:mm:ss");
String acquisition_real_sec = String.valueOf(struct.acquisition_real_time);
String acquisition_live_sec = String.valueOf(struct.acquisition_live_time);
StringBuffer strBuffer = new StringBuffer();
@@ -671,19 +664,19 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath());
bkgdMeasurementID = struct.detector_bk_measurement_id;
gasBkgdMeasurementID = struct.gas_bk_measurement_id;
- Date collectStartDate = DateUtils.parseDate(struct.collection_start_date.replace(StringPool.SLASH, StringPool.DASH) + StringPool.SPACE + struct.collection_start_time.substring(0, struct.collection_start_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss");
- Date collectStopDate = DateUtils.parseDate(struct.collection_stop_date.replace(StringPool.SLASH, StringPool.DASH) + StringPool.SPACE + struct.collection_stop_time.substring(0, struct.collection_stop_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss");
+ Date collectStartDate = DateUtils.parseDate(struct.collection_start_date + StringPool.SPACE + struct.collection_start_time.substring(0, struct.collection_start_time.indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
+ Date collectStopDate = DateUtils.parseDate(struct.collection_stop_date + StringPool.SPACE + struct.collection_stop_time.substring(0, struct.collection_stop_time.indexOf(StringPool.DOT)), "yyyy/MM/dd HH:mm:ss");
Double collection_time = Double.valueOf(collectStopDate.getTime() / 1000 - collectStartDate.getTime() / 1000);
String collection_time_value = String.format("%.2f",Double.valueOf(collectStopDate.getTime()/1000 - collectStartDate.getTime()/ 1000)/3600.0);
qcResult.setCollectTimeValue(collection_time_value);
- if (collectionTimeSections.get(1) < collection_time && collection_time < collectionTimeSections.get(4)){
+ if (collectionTimeSections.get(1) < collection_time/3600 && collection_time/3600 < collectionTimeSections.get(4)){
qcResult.setCollectTimeStatus("Pass");
}else {
qcResult.setCollectTimeStatus("Failed");
}
String acquisition_live_sec = String.format("%.2f",struct.acquisition_live_time/3600.0);
qcResult.setAcquisitionTimeValue(acquisition_live_sec);
- if (acquisitionTimeSections.get(1) < struct.acquisition_live_time && struct.acquisition_live_time < acquisitionTimeSections.get(4)){
+ if (acquisitionTimeSections.get(1) < struct.acquisition_live_time/3600.0 && struct.acquisition_live_time/3600.0 < acquisitionTimeSections.get(4)){
qcResult.setAcquisitionTimeStatus("Pass");
}else {
qcResult.setAcquisitionTimeStatus("Failed");
@@ -943,7 +936,7 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
Result result = new Result();
Map map = new HashMap<>();
GardsSampleData sampleData = spectrumAnalysisMapper.getSampleData(sampleId);
- String collectStartStr = DateUtils.formatDate(sampleData.getCollectStart(), "yyyy-MM-dd HH:mm:ss");
+ String collectStartStr = DateUtils.formatDate(sampleData.getCollectStart(), "yyyy/MM/dd HH:mm:ss");
String dbQcFilePath = spectrumAnalysisMapper.getQCFilePath(sampleData.getSiteDetCode(), collectStartStr);
FTPClient ftpClient = ftpUtil.LoginFTP();
if (Objects.isNull(ftpClient)){
@@ -1075,7 +1068,7 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
Result result = new Result();
Map map = new HashMap<>();
GardsSampleData sampleData = spectrumAnalysisMapper.getSampleData(sampleId);
- String collectStartStr = DateUtils.formatDate(sampleData.getCollectStart(), "yyyy-MM-dd HH:mm:ss");
+ String collectStartStr = DateUtils.formatDate(sampleData.getCollectStart(), "yyyy/MM/dd HH:mm:ss");
String dbQcFilePath = spectrumAnalysisMapper.getQCFilePath(sampleData.getSiteDetCode(), collectStartStr);
FTPClient ftpClient = ftpUtil.LoginFTP();
if (Objects.isNull(ftpClient)){
@@ -1143,9 +1136,7 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
long gChannels = struct.g_channels;
List hCounts = struct.h_counts;
List histogramDataList = new LinkedList<>();
- Map> countMap = new HashMap<>();
for (int column=0; column counts = new LinkedList<>();
for (int row=0; row bChannelList = struct.b_channel;
List bEnergy = struct.b_electron_energy;
@@ -1221,123 +1208,120 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService {
public Result viewExtrapolation(Integer sampleId) {
Result result = new Result();
Map map = new HashMap<>();
- String dbName = "RNAUTO.GARDS_ANALYSES";
- SpectrumFileRecord dbSpectrumFilePath = spectrumAnalysisMapper.getDBSpectrumFilePath(dbName, sampleId);
+ String sampleFilePath = spectrumAnalysisMapper.getSampleFilePath(sampleId);
//加载dll工具库
System.loadLibrary("ReadPHDFile");
- if (Objects.nonNull(dbSpectrumFilePath)){
- String sampleFilePath = dbSpectrumFilePath.getSampleFilePath();
- if (StringUtils.isNotBlank(sampleFilePath)){
- String samplePathName = sampleFilePath.substring(0, sampleFilePath.lastIndexOf(StringPool.SLASH));
- String sampleFileName = sampleFilePath.substring(sampleFilePath.lastIndexOf(StringPool.SLASH)+1);
- FTPClient ftpClient = ftpUtil.LoginFTP();
- if (Objects.isNull(ftpClient)){
- result.error500("ftp连接失败");
+ FTPClient ftpClient = ftpUtil.LoginFTP();
+ if (Objects.isNull(ftpClient)){
+ result.error500("ftp连接失败");
+ return result;
+ }
+ if (StringUtils.isNotBlank(sampleFilePath)){
+ String samplePathName = sampleFilePath.substring(0, sampleFilePath.lastIndexOf(StringPool.SLASH));
+ String sampleFileName = sampleFilePath.substring(sampleFilePath.lastIndexOf(StringPool.SLASH)+1);
+ try {
+ //切换被动模式
+ ftpClient.enterLocalPassiveMode();
+ ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
+ // 设置编码,当文件中存在中文且上传后文件乱码时可使用此配置项
+ ftpClient.setControlEncoding("UTF-8");
+ ftpClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
+ samplePathName = StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + samplePathName;
+ ftpClient.changeWorkingDirectory(samplePathName);
+ List sampleFtpFiles = Arrays.asList(ftpClient.listFiles());
+ sampleFtpFiles = sampleFtpFiles.stream().filter(item-> item.getName().equals(sampleFileName)).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(sampleFtpFiles)){
+ result.error500("ftp下对应的SAMPLE文件不存在");
return result;
}
- try {
- ftpClient.enterLocalPassiveMode();
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- // 设置编码,当文件中存在中文且上传后文件乱码时可使用此配置项
- ftpClient.setControlEncoding("UTF-8");
- ftpClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
- samplePathName = StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + samplePathName;
- ftpClient.changeWorkingDirectory(samplePathName);
- List sampleFtpFiles = Arrays.asList(ftpClient.listFiles());
- sampleFtpFiles = sampleFtpFiles.stream().filter(item-> item.getName().equals(sampleFileName)).collect(Collectors.toList());
- if (CollectionUtils.isEmpty(sampleFtpFiles)){
- result.error500("ftp下对应的SAMPLE文件不存在");
- return result;
+ FTPFile sampleFtpFile = sampleFtpFiles.get(0);
+ if (Objects.nonNull(sampleFtpFile)){
+ //获取ftp文件的输入流
+ InputStream inputStream = ftpClient.retrieveFileStream(sampleFtpFile.getName());
+ //声明一个临时文件
+ File file = File.createTempFile("tmp", null);
+ //ftp文件输入流复制给临时文件
+ FileUtils.copyInputStreamToFile(inputStream, file);
+ //读取文件信息
+ EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath());
+ //Acquisition
+ String acquisitionStart = struct.acquisition_start_date + " " + struct.acquisition_start_time;
+ String acquisitionRealTime = String.valueOf(struct.acquisition_real_time);
+ String acquisitionLiveTime = String.valueOf(struct.acquisition_live_time);
+ map.put("acquisitionStart", acquisitionStart);
+ map.put("acquisitionRealTime", acquisitionRealTime);
+ map.put("acquisitionLiveTime", acquisitionLiveTime);
+ //Gamma Spectrum: Sample
+ //蓝色线
+ List gCounts = struct.g_counts;
+ List gammaOriginSeriseData = new LinkedList<>();
+ for (int i=0; i< struct.num_g_channel; i++){
+ long count = gCounts.get(i);
+ SeriseData temp = new SeriseData();
+ temp.setX(i);
+ temp.setY(count);
+ gammaOriginSeriseData.add(temp);
}
- FTPFile sampleFtpFile = sampleFtpFiles.get(0);
- if (Objects.nonNull(sampleFtpFile)){
- //获取ftp文件的输入流
- InputStream inputStream = ftpClient.retrieveFileStream(sampleFtpFile.getName());
- //声明一个临时文件
- File file = File.createTempFile("tmp", null);
- //ftp文件输入流复制给临时文件
- FileUtils.copyInputStreamToFile(inputStream, file);
- //读取文件信息
- EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath());
- //Acquisition
- String acquisitionStart = struct.acquisition_start_date + " " + struct.acquisition_start_time;
- String acquisitionRealTime = String.valueOf(struct.acquisition_real_time);
- String acquisitionLiveTime = String.valueOf(struct.acquisition_live_time);
- map.put("acquisitionStart", acquisitionStart);
- map.put("acquisitionRealTime", acquisitionRealTime);
- map.put("acquisitionLiveTime", acquisitionLiveTime);
- //Gamma Spectrum: Sample
- //蓝色线
- List gCounts = struct.g_counts;
- List gammaOriginSeriseData = new LinkedList<>();
- for (int i=0; i< struct.num_g_channel; i++){
- long count = gCounts.get(i);
- SeriseData temp = new SeriseData();
- temp.setX(i);
- temp.setY(count);
- gammaOriginSeriseData.add(temp);
- }
- map.put("gammaOriginSeriseData", gammaOriginSeriseData);
- List chanelEnergy = new LinkedList<>();
- List gCentroidChannel = struct.g_centroid_channel;
- List gEnergy = struct.g_energy;
- List fittingPara = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel,gEnergy);
- for (int i=0; i channel = new LinkedList<>();
- channel.add(Double.valueOf(i));
- List energy = EnergySpectrumHandler.GetFileFittingData(channel, fittingPara);
- if(CollectionUtils.isNotEmpty(energy)) {
- chanelEnergy.add(energy.get(0));
- }
- }
- map.put("gammaChannelEnergy", chanelEnergy);
- //绿色线
- List gammaProjectedSeriseData = new LinkedList<>();
- List gammaProjectedDataValue = this.handleHistogram(struct.h_counts, struct.b_channels, struct.g_channels, "Vertical");
- for (int i=0; i bCounts = struct.b_counts;
- List betaOriginSeriseData = new LinkedList<>();
- for (int i=0; i< struct.num_b_channel; i++){
- long count = bCounts.get(i);
- SeriseData temp = new SeriseData();
- temp.setX(i);
- temp.setY(count);
- betaOriginSeriseData.add(temp);
- }
- map.put("betaOriginSeriseData", betaOriginSeriseData);
- List betaProjectedSeriseData = new LinkedList<>();
- List betaProjectedDataValue = this.handleHistogram(struct.h_counts, struct.b_channels, struct.g_channels, "Horizontal");
- for (int i=0; i chanelEnergy = new LinkedList<>();
+ List gCentroidChannel = struct.g_centroid_channel;
+ List gEnergy = struct.g_energy;
+ List fittingPara = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel,gEnergy);
+ for (int i=0; i channel = new LinkedList<>();
+ channel.add(Double.valueOf(i));
+ List energy = EnergySpectrumHandler.GetFileFittingData(channel, fittingPara);
+ if(CollectionUtils.isNotEmpty(energy)) {
+ chanelEnergy.add(energy.get(0));
}
}
+ map.put("gammaChannelEnergy", chanelEnergy);
+ //绿色线
+ List gammaProjectedSeriseData = new LinkedList<>();
+ List gammaProjectedDataValue = this.handleHistogram(struct.h_counts, struct.b_channels, struct.g_channels, "Vertical");
+ for (int i=0; i bCounts = struct.b_counts;
+ List betaOriginSeriseData = new LinkedList<>();
+ for (int i=0; i< struct.num_b_channel; i++){
+ long count = bCounts.get(i);
+ SeriseData temp = new SeriseData();
+ temp.setX(i);
+ temp.setY(count);
+ betaOriginSeriseData.add(temp);
+ }
+ map.put("betaOriginSeriseData", betaOriginSeriseData);
+ List betaProjectedSeriseData = new LinkedList<>();
+ List betaProjectedDataValue = this.handleHistogram(struct.h_counts, struct.b_channels, struct.g_channels, "Horizontal");
+ for (int i=0; i