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 detectorList = new LinkedList<>(); if (StringUtils.isNotBlank(statisticsQueryData.getDetectorName())){ @@ -1634,12 +1618,12 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { result.error500("开始时间不能为空"); return result; } - String startDate = DateUtils.formatDate(startTime, "yyyy-MM-dd"); + String startDate = DateUtils.formatDate(startTime, "yyyy/MM/dd"); if (Objects.isNull(endTime)){ result.error500("结束时间不能为空"); return result; } - String endDate = DateUtils.formatDate(endTime, "yyyy-MM-dd"); + String endDate = DateUtils.formatDate(endTime, "yyyy/MM/dd"); List detectorList = new LinkedList<>(); if (StringUtils.isNotBlank(detectorName)){ if (detectorName.equals("All")){ @@ -1713,58 +1697,341 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { } @Override - public Result fitting(Double paramA, Double paramB, Double paramC, List tempPoints) { + public Result fitting(Double paramA, Double paramB, Double paramC, List tempPoints, Integer count) { Result result = new Result(); Map map = new HashMap<>(); - List fittingPara = new LinkedList<>(); - fittingPara.add(paramA); - fittingPara.add(paramB); - fittingPara.add(paramC); - List xs = new LinkedList<>(); - for (int i=0; i ys = EnergySpectrumHandler.GetFileFittingPara(xs, fittingPara); - List seriseDataList = new LinkedList<>(); - List tableWidgets = new LinkedList<>(); - for (int i=0; i xs = new LinkedList<>(); + List ys = new LinkedList<>(); + for (int i=0; i fittingPara = EnergySpectrumHandler.GetFileFittingPara(xs, ys); + List fittingParaStr = new LinkedList<>(); + for (Double para:fittingPara) { + fittingParaStr.add(String.valueOf(para)); + } + map.put("CToE", fittingParaStr); - List channels = new LinkedList<>(); - for (int i=0; i<255; i++) { - channels.add(Double.valueOf(i)); + List channels = new LinkedList<>(); + for (int i=0; i<255; i++) { + channels.add(Double.valueOf(i)); + } + List energys = EnergySpectrumHandler.GetFileFittingData(channels,fittingPara); + List newLineSeries = new LinkedList<>(); + for (int i=0; i fittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(ys, xs); + List fittingParaToUiStr = new LinkedList<>(); + for (Double para:fittingParaToUi) { + fittingParaToUiStr.add(String.valueOf(para)); + } + map.put("EToC", fittingParaToUiStr); + }else { + List fittingPara = new LinkedList<>(); + fittingPara.add(paramA); + fittingPara.add(paramB); + fittingPara.add(paramC); + List xs = new LinkedList<>(); + for (int i=0; i ys = EnergySpectrumHandler.GetFileFittingData(xs, fittingPara); + List seriseDataList = new LinkedList<>(); + List tableWidgets = new LinkedList<>(); + for (int i=0; i channels = new LinkedList<>(); + for (int i=0; i<255; i++) { + channels.add(Double.valueOf(i)); + } + List energys = EnergySpectrumHandler.GetFileFittingData(channels,fittingPara); + List newLineSeries = new LinkedList<>(); + for (int i=0; i fittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(ys, xs); + List fittingParaToUiStr = new LinkedList<>(); + for (Double para:fittingParaToUi) { + fittingParaToUiStr.add(String.valueOf(para)); + } + map.put("EToC", fittingParaToUiStr); } - List energys = EnergySpectrumHandler.GetFileFittingData(channels,fittingPara); - List newLineSeries = new LinkedList<>(); - for (int i=0; i fittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(ys, xs); - List fittingParaToUiStr = new LinkedList<>(); - for (Double para:fittingParaToUi) { - fittingParaToUiStr.add(String.valueOf(para)); - } - map.put("EToC", fittingParaToUiStr); result.setSuccess(true); result.setResult(map); return result; } + @Override + public Result getGammaGated(Integer chartHeight, Integer channelWidth, Integer gammaChannel, Integer sampleId) { + //选择矩形框高度 + Integer flagHeight = channelWidth * (chartHeight/256); + int value = Double.valueOf(flagHeight / 2).intValue(); + //计算得到最高值 + int up = gammaChannel - value; + if (up<0){ + up = 0; + } + //计算得到最低值 + int down = up + value; + 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 dbQcFilePath = spectrumAnalysisMapper.getQCFilePath(sampleData.getSiteDetCode(), collectStartStr); + FTPClient ftpClient = ftpUtil.LoginFTP(); + if (Objects.isNull(ftpClient)){ + result.error500("ftp连接失败"); + return result; + } + try { + //切换被动模式 + ftpClient.enterLocalPassiveMode(); + ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); + // 设置编码,当文件中存在中文且上传后文件乱码时可使用此配置项 + ftpClient.setControlEncoding("UTF-8"); + ftpClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE); + if (StringUtils.isNotBlank(dbQcFilePath)){ + String qcPathName = dbQcFilePath.substring(0, dbQcFilePath.lastIndexOf(StringPool.SLASH)); + String qcFileName = dbQcFilePath.substring(dbQcFilePath.lastIndexOf(StringPool.SLASH)+1); + qcPathName=StringPool.SLASH + spectrumPathProperties.getRootPath() + StringPool.SLASH + qcPathName; + ftpClient.changeWorkingDirectory(qcPathName); + List qcFtpFiles = Arrays.asList(ftpClient.listFiles()); + qcFtpFiles=qcFtpFiles.stream().filter(item -> item.getName().equals(qcFileName)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(qcFtpFiles)){ + result.error500("ftp下对应的QC文件不存在"); + return result; + } + FTPFile qcFtpFile = qcFtpFiles.get(0); + if (Objects.nonNull(qcFtpFile)){ + InputStream inputStream = ftpClient.retrieveFileStream(qcFtpFile.getName()); + //声明一个临时文件 + File file = File.createTempFile("tmp", null); + //将ftp文件的输入流复制给临时文件 + FileUtils.copyInputStreamToFile(inputStream, file); + //加载dll工具库 + System.loadLibrary("ReadPHDFile"); + EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(file.getAbsolutePath()); + //Beta-Gamma Spectrum: QC + long bChannels = struct.b_channels; + List hCounts = struct.h_counts; + List serise_data = new LinkedList<>(); + for ( int i=0; i sampleIds = analyseData.getSampleIds(); + if (CollectionUtils.isNotEmpty(sampleIds)){ + Integer sampleId = sampleIds.get(0); + SpectrumFileRecord dbSpectrumFilePath = spectrumAnalysisMapper.getDBSpectrumFilePath(dbName, sampleId); + if (Objects.nonNull(dbSpectrumFilePath)) { + BetaGammaAnalyzeCurrentProcess(analyseData, dbSpectrumFilePath); + } + } + + } else if ("AllSpectrum".equals(analyseData.getApplyType())) { + Map m_loadData = new HashMap<>(); + for (int i=0; iBetaOriginalChartView->SetFittingParam(fit_analy_param.b_calibration_param.param_a_c2e_new, +// fit_analy_param.b_calibration_param.param_b_c2e_new, +// fit_analy_param.b_calibration_param.param_c_c2e_new); +// ui->BetaProjectedChartView->SetFittingParam(fit_analy_param.b_calibration_param.param_a_c2e_new, +// fit_analy_param.b_calibration_param.param_b_c2e_new, +// fit_analy_param.b_calibration_param.param_c_c2e_new); +// } +// if (analyseData.isBGammaEnergyValid()) { +// ui->GammaOriginalChartView->SetFittingParam(fit_analy_param.g_calibration_param.param_a_c2e_new, +// fit_analy_param.g_calibration_param.param_b_c2e_new, +// fit_analy_param.g_calibration_param.param_c_c2e_new); +// ui->GammaProjectedChartView->SetFittingParam(fit_analy_param.g_calibration_param.param_a_c2e_new, +// fit_analy_param.g_calibration_param.param_b_c2e_new, +// fit_analy_param.g_calibration_param.param_c_c2e_new); +// } + + return null; + } + + private void BetaGammaAnalyzeCurrentProcess(AnalyseData analyseData, SpectrumFileRecord dbSpectrumFilePath){ + SpectrumGroup spectrum_group = new SpectrumGroup(); + spectrum_group.setSampleSpectrumFile(dbSpectrumFilePath.getSampleFilePath()); + spectrum_group.setGasBgSpectrumFile(dbSpectrumFilePath.getGasBgFilePath()); + spectrum_group.setDetBgSpectrumFile(dbSpectrumFilePath.getDetBgFilePath()); + + if (analyseData.isBBetaEnergyValid()) { + List beCal = new LinkedList<>(); + beCal.add(analyseData.getB_calibration_param().param_c_e2c_new); + beCal.add(analyseData.getB_calibration_param().param_b_e2c_new); + beCal.add(analyseData.getB_calibration_param().param_a_e2c_new); + spectrum_group.getBgCalPara().setB_e_cal(beCal); + List bc2e = new LinkedList<>(); + bc2e.add(analyseData.getB_calibration_param().param_c_c2e_new); + bc2e.add(analyseData.getB_calibration_param().param_b_c2e_new); + bc2e.add(analyseData.getB_calibration_param().param_a_c2e_new); + spectrum_group.setB_c2e(bc2e); + } + if (analyseData.isBGammaEnergyValid()) { + List geCal = new LinkedList<>(); + geCal.add(analyseData.getG_calibration_param().param_c_e2c_new); + geCal.add(analyseData.getG_calibration_param().param_b_e2c_new); + geCal.add(analyseData.getG_calibration_param().param_a_e2c_new); + spectrum_group.getBgCalPara().setG_e_cal(geCal); + List gc2e = new LinkedList<>(); + gc2e.add(analyseData.getG_calibration_param().param_c_c2e_new); + gc2e.add(analyseData.getG_calibration_param().param_b_c2e_new); + gc2e.add(analyseData.getG_calibration_param().param_a_c2e_new); + spectrum_group.setG_c2e(gc2e); + } + spectrum_group.getBgCalPara().setBApplyNewCalicSample(analyseData.isSampleData()); + spectrum_group.getBgCalPara().setBApplyNewCalicGasBg(analyseData.isGasBgData()); + spectrum_group.getBgCalPara().setBApplyNewCalicDetBg(analyseData.isDetBgData()); + spectrum_group.getBgCalPara().setBApplyNewCalicQc(analyseData.isQCData()); + List spectrum_group_list = new LinkedList<>(); + spectrum_group_list.add(spectrum_group); +// beta_gamma_analy.SetSpectrumGroupList(spectrum_group_list); +// AnalyProcessDlg analy_dlg(beta_gamma_analy); +// analy_dlg.SetProgressRange(0, spectrum_group_list.count()); +// analy_dlg.exec(); + } + + private void BetaGammaAnalyzeAllProcess(Map m_loadData, AnalyseData analyseData){ + List spectrum_group_list = new LinkedList<>(); + for (Map.Entry entry: m_loadData.entrySet()){ + SpectrumGroup spectrum_group = new SpectrumGroup(); + SpectrumFileRecord spectrumFileRecord = entry.getValue(); + spectrum_group.setSampleSpectrumFile(spectrumFileRecord.getSampleFilePath()); + spectrum_group.setGasBgSpectrumFile(spectrumFileRecord.getGasBgFilePath()); + spectrum_group.setDetBgSpectrumFile(spectrumFileRecord.getDetBgFilePath()); + + if (analyseData.isBBetaEnergyValid()) { + List beCal = new LinkedList<>(); + beCal.add(analyseData.getB_calibration_param().param_c_e2c_new); + beCal.add(analyseData.getB_calibration_param().param_b_e2c_new); + beCal.add(analyseData.getB_calibration_param().param_a_e2c_new); + spectrum_group.getBgCalPara().setB_e_cal(beCal); + List bc2e = new LinkedList<>(); + bc2e.add(analyseData.getB_calibration_param().param_c_c2e_new); + bc2e.add(analyseData.getB_calibration_param().param_b_c2e_new); + bc2e.add(analyseData.getB_calibration_param().param_a_c2e_new); + spectrum_group.setB_c2e(bc2e); + } + if (analyseData.isBGammaEnergyValid()) { + List geCal = new LinkedList<>(); + geCal.add(analyseData.getG_calibration_param().param_c_e2c_new); + geCal.add(analyseData.getG_calibration_param().param_b_e2c_new); + geCal.add(analyseData.getG_calibration_param().param_a_e2c_new); + spectrum_group.getBgCalPara().setG_e_cal(geCal); + List gc2e = new LinkedList<>(); + gc2e.add(analyseData.getG_calibration_param().param_c_c2e_new); + gc2e.add(analyseData.getG_calibration_param().param_b_c2e_new); + gc2e.add(analyseData.getG_calibration_param().param_a_c2e_new); + spectrum_group.setG_c2e(gc2e); + } + spectrum_group.getBgCalPara().setBApplyNewCalicSample(analyseData.isSampleData()); + spectrum_group.getBgCalPara().setBApplyNewCalicGasBg(analyseData.isGasBgData()); + spectrum_group.getBgCalPara().setBApplyNewCalicDetBg(analyseData.isDetBgData()); + spectrum_group.getBgCalPara().setBApplyNewCalicQc(analyseData.isQCData()); + + spectrum_group_list.add(spectrum_group); + } + + if (CollectionUtils.isNotEmpty(spectrum_group_list)) { +// beta_gamma_analy.SetSpectrumGroupList(spectrum_group_list); +// AnalyProcessDlg analy_dlg(beta_gamma_analy); +// analy_dlg.SetProgressRange(0, spectrum_group_list.count()); +// analy_dlg.exec(); + } + } + + @Override + public Result analyseCurrentSpectrum(String dbName, Integer sampleId) { + if (dbName.equalsIgnoreCase("auto")){ + dbName = "RNAUTO.GARDS_ANALYSES"; + }else if (dbName.equalsIgnoreCase("man")){ + dbName = "RNMAN.GARDS_ANALYSES"; + } + SpectrumFileRecord dbSpectrumFilePath = spectrumAnalysisMapper.getDBSpectrumFilePath(dbName, sampleId); +// BetaGammaAnalyzeCurrentProcess(); + return null; + } + + @Override + public Result analyseAllSpectrum() { + return null; + } + + + } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/GardsDetectors.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/GardsDetectors.java deleted file mode 100644 index 3011f988..00000000 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/GardsDetectors.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.jeecg.modules.system.entity; - -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 = "CONFIGURATION.GARDS_DETECTORS") -public class GardsDetectors implements Serializable { - - @TableField(value = "DETECTOR_ID") - private Integer detectorId; - - @TableField(value = "DETECTOR_CODE") - private String detectorCode; - - @TableField(value = "LON") - private Double lon; - - @TableField(value = "LAT") - private Double lat; - - @TableField(value = "TYPE") - private String type; - - @TableField(value = "CHANNELS") - private Double channels; - - @TableField(value = "RATED_EFFICIENCY") - private Double ratedEfficiency; - - @TableField(value = "RATED_RESOLUTION") - private Double ratedResolution; - - @TableField(value = "ECAL_RANGE_MAX") - private Double ecalRangeMax; - - @TableField(value = "DATE_BEGIN") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date dateBegin; - - @TableField(value = "DATE_END") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date dateEnd; - - @TableField(value = "STATUS") - private String status; - - @TableField(value = "DESCRIPTION") - private String description; - - @TableField(value = "MODDATE") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date moddate; - - @TableField(value = "STATION_ID") - private Integer stationId; - - @TableField(exist = false) - private String stationName; - -} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/GardsStations.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/GardsStations.java deleted file mode 100644 index 596d21f8..00000000 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/GardsStations.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.jeecg.modules.system.entity; - -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 = "CONFIGURATION.GARDS_STATIONS") -public class GardsStations implements Serializable { - - @TableField(value = "STATION_ID") - private Integer stationId; - - @TableField(value = "STATION_CODE") - private String stationCode; - - @TableField(value = "COUNTRY_CODE") - private String countryCode; - - @TableField(value = "TYPE") - private String type; - - @TableField(value = "LON") - private Double lon; - - @TableField(value = "LAT") - private Double lat; - - @TableField(value = "ELEVATION") - private Double elevation; - - @TableField(value = "DESCRIPTION") - private String description; - - @TableField(value = "DATE_BEGIN") - @DateTimeFormat(pattern = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date dateBegin; - - @TableField(value = "DATE_END") - @DateTimeFormat(pattern = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date dateEnd; - - @TableField(value = "STATUS") - private String status; - - @TableField(value = "MODDATE") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date moddate; - -} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/SysUser.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/SysUser.java deleted file mode 100644 index 26a93acd..00000000 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/system/entity/SysUser.java +++ /dev/null @@ -1,204 +0,0 @@ -package org.jeecg.modules.system.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; -import org.jeecg.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.springframework.format.annotation.DateTimeFormat; - -import java.io.Serializable; -import java.util.Date; - -/** - *

- * 用户表 - *

- * - * @Author scott - * @since 2018-12-20 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@Accessors(chain = true) -public class SysUser implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; - - /** - * 登录账号 - */ - @Excel(name = "登录账号", width = 15) - private String username; - - /** - * 真实姓名 - */ - @Excel(name = "真实姓名", width = 15) - private String realname; - - /** - * 密码 - */ - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) - private String password; - - /** - * md5密码盐 - */ - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) - private String salt; - - /** - * 头像 - */ - @Excel(name = "头像", width = 15,type = 2) - private String avatar; - - /** - * 生日 - */ - @Excel(name = "生日", width = 15, format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern = "yyyy-MM-dd") - private Date birthday; - - /** - * 性别(1:男 2:女) - */ - @Excel(name = "性别", width = 15,dicCode="sex") - @Dict(dicCode = "sex") - private Integer sex; - - /** - * 电子邮件 - */ - @Excel(name = "电子邮件", width = 15) - private String email; - - /** - * 电话 - */ - @Excel(name = "电话", width = 15) - private String phone; - - /** - * 登录选择部门编码 - */ - private String orgCode; - /** - * 登录选择租户ID - */ - private Integer loginTenantId; - - /**部门名称*/ - private transient String orgCodeTxt; - - /** - * 状态(1:正常 2:冻结 ) - */ - @Excel(name = "状态", width = 15,dicCode="user_status") - @Dict(dicCode = "user_status") - private Integer status; - - /** - * 删除状态(0,正常,1已删除) - */ - @Excel(name = "删除状态", width = 15,dicCode="del_flag") - @TableLogic - private Integer delFlag; - - /** - * 工号,唯一键 - */ - @Excel(name = "工号", width = 15) - private String workNo; - - /** - * 职务,关联职务表 - */ - @Excel(name = "职务", width = 15) - @Dict(dictTable ="sys_position",dicText = "name",dicCode = "code") - private String post; - - /** - * 座机号 - */ - @Excel(name = "座机号", width = 15) - private String telephone; - - /** - * 创建人 - */ - private String createBy; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新人 - */ - private String updateBy; - - /** - * 更新时间 - */ - private Date updateTime; - /** - * 同步工作流引擎1同步0不同步 - */ - private Integer activitiSync; - - /** - * 身份(0 普通成员 1 上级) - */ - @Excel(name="(1普通成员 2上级)",width = 15) - private Integer userIdentity; - - /** - * 负责部门 - */ - @Excel(name="负责部门",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") - @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") - private String departIds; - - /** - * 多租户ids临时用,不持久化数据库(数据库字段不存在) - */ - @TableField(exist = false) - private String relTenantIds; - - /**设备id uniapp推送用*/ - private String clientId; - - /** - * 登录首页地址 - */ - @TableField(exist = false) - private String homePath; - - /** - * 职位名称 - */ - @TableField(exist = false) - private String postText; - - /** - * 流程状态 - */ - private String bpmStatus; -} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/vo/SysTaskChangeVo.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/vo/SysTaskChangeVo.java index cf928013..6d19f214 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/vo/SysTaskChangeVo.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/vo/SysTaskChangeVo.java @@ -17,7 +17,7 @@ public class SysTaskChangeVo { private List stationIds; @DateTimeFormat(pattern = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date day; }