From 919bae79f783d22a18cd4c341f6a2f15643cdbb1 Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Thu, 7 Sep 2023 09:32:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:1.=E5=AE=8C=E6=88=90B=E5=88=86=E6=9E=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=95=B0=E6=8D=AE=E5=AD=98=E5=82=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/email/EmailServiceManager.java | 3 +- .../common/properties/SoftwareProperties.java | 24 ++ .../properties/SpectrumPathProperties.java | 5 + .../modules/exception/BAnalyseException.java | 19 ++ .../modules/exception/PHD_ReadException.java | 19 ++ .../java/org/jeecg/modules/ftp/FTPUtils.java | 67 ++-- .../mapper/GardsCalibrationMapper.java | 5 + .../mapper/GardsRoiChannelsMapper.java | 8 + .../modules/mapper/GardsRoiResultsMapper.java | 7 + .../modules/mapper/GardsSampleDataMapper.java | 18 +- .../modules/mapper/GardsXeResultsMapper.java | 7 + .../mapper/xml/GardsCalibrationMapper.xml | 35 ++ .../native_jni/struct/BgAnalyseResult.java | 176 +++++++++-- .../jeecg/modules/service/BlockConstant.java | 5 + .../modules/service/GardsAnalysesService.java | 13 +- .../service/GardsCalibrationService.java | 11 +- .../service/GardsRoiChannelsService.java | 20 ++ .../service/GardsRoiResultsService.java | 20 ++ .../service/GardsSampleDataService.java | 20 +- .../service/GardsXeResultsService.java | 20 ++ .../impl/GardsAnalysesServiceImpl.java | 47 ++- .../GardsCalibrationPairsServiceImpl.java | 1 + .../impl/GardsCalibrationServiceImpl.java | 193 ++++++++++- .../impl/GardsRoiChannelsServiceImpl.java | 104 ++++++ .../impl/GardsRoiResultsServiceImpl.java | 101 ++++++ .../impl/GardsSampleDataServiceImpl.java | 34 +- .../impl/GardsXeResultsServiceImpl.java | 128 ++++++++ .../impl/SpectrumBaseBlockServiceImpl.java | 4 +- .../jeecg/modules/spectrum/AlertSpectrum.java | 5 +- .../spectrum/HealthStatusSpectrum.java | 5 +- .../jeecg/modules/spectrum/MetSpectrum.java | 2 +- .../spectrum/S_D_Q_G_SpectrumHandler.java | 22 +- .../modules/spectrum/Sample_B_Analysis.java | 299 ++++++++++++++++++ .../modules/spectrum/SamplephdSpectrum.java | 96 +----- .../modules/spectrum/SpectrumHandler.java | 3 +- .../spectrum/SpectrumParsingActuator.java | 2 +- .../spectrum/SpectrumServiceQuotes.java | 7 + 37 files changed, 1314 insertions(+), 241 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SoftwareProperties.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/BAnalyseException.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/PHD_ReadException.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiResultsServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java index 8d4634b5..8a2bd25a 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java @@ -212,9 +212,8 @@ public class EmailServiceManager { public void getMailContent(@NotNull Part part, StringBuilder content) throws MessagingException, IOException { if(part.isMimeType(MailContentType.PLAIN.getContentType())){ content.append(part.getContent()); - }else if(part.isMimeType(MailContentType.HTML.getContentType())){ - content.append(part.getContent()); }else if(part.isMimeType("multipart/*")){ + System.out.println(part.getContentType()); Multipart multipart = (Multipart) part.getContent(); for(int i=0;i { - if (fileName.equals(file.getName())) { - return true; - } - return false; - }); - for(FTPFile file : ftpFiles){ - InputStream inputStream = null; - try{ - inputStream = this.client.retrieveFileStream(new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)); - FileUtil.writeFromStream(inputStream,localPath+File.separator+fileName); - }catch (Exception e){ - if(null != inputStream){ - inputStream.close(); + InputStream inputStream = null; + try{ + final FTPFile[] ftpFiles = this.client.listFiles(fileName); + if(ArrayUtils.isNotEmpty(ftpFiles)){ + inputStream = this.client.retrieveFileStream(fileName); + if(Objects.nonNull(inputStream)){ + FileUtil.writeFromStream(inputStream,localPath+File.separator+fileName); + return true; } + }else { + log.warn("{}不存在",fileName); + } + }catch (Exception e){ + e.printStackTrace(); + return false; + }finally { + if(Objects.nonNull(inputStream)){ + inputStream.close(); + this.client.completePendingCommand(); } } + return false; } /** * 检查目录是否存在,不存在则创建,支持递归创建 * @param path 目录路径 * @return 返回值true/false - * @throws IOException */ private boolean checkDirectory(String path){ try{ @@ -114,6 +117,12 @@ public class FTPUtils { return true; } + public static void main(String[] args) throws IOException { + FTPUtils ftp = new FTPUtils("8.141.87.165",21,"rmsops","cnndc010","utf-8","/"); +// ftp.saveFile("log/Soh/2023/08","GBX68_RMSSOH-20230731_152800.0.log",new ByteArrayInputStream((System.lineSeparator()+"ssssssssssss").getBytes(StandardCharsets.UTF_8))); + ftp.downloadFTPFile("/savefile/Spectrum/Xenon/Sauna/Gasbkphd/2023/09","AUX09_003-20151224_0655_G_FULL_40182.873.PHD","E:\\file"); + } + /** * 写入文件,若文件或文件目录不存在则自行创建 * @param filePath 文件路径 @@ -125,9 +134,12 @@ public class FTPUtils { try{ final boolean flag = this.checkDirectory(filePath); if(flag){ - client.setFileType(FTP.BINARY_FILE_TYPE); - String encodedName = new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1); - return client.storeFile(encodedName, inputStream); + final FTPFile[] ftpFiles = this.client.listFiles(fileName); + if(ArrayUtils.isEmpty(ftpFiles)){ + return client.storeFile(fileName, inputStream); + }else{ + return client.appendFile(fileName,inputStream); + } } }catch (IOException e){ log.error("{}文件创建失败,原因为:{}",filePath+"/"+fileName,e.getMessage()); @@ -201,6 +213,7 @@ public class FTPUtils { public void close(){ try{ if (client != null){ + client.logout(); client.disconnect(); } }catch (IOException e){ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java index fb3db82d..1025782a 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationMapper.java @@ -1,7 +1,12 @@ package org.jeecg.modules.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.jeecg.modules.base.entity.rnauto.GardsCalibration; public interface GardsCalibrationMapper extends BaseMapper { + + @InterceptorIgnore(tenantLine = "true") + public int create(@Param("calibration") GardsCalibration calibration); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java new file mode 100644 index 00000000..edba26d7 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiChannelsMapper.java @@ -0,0 +1,8 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsRoiChannels; + +public interface GardsRoiChannelsMapper extends BaseMapper { + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java new file mode 100644 index 00000000..711cbae7 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiResultsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsRoiResults; + +public interface GardsRoiResultsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java index 95657d3f..76c11320 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java @@ -9,22 +9,10 @@ import org.jeecg.modules.base.entity.original.GardsSampleData; public interface GardsSampleDataMapper extends BaseMapper { @Select(value = "select " + - "gsd.SAMPLE_ID,gsd.input_file_name " + - "from GARDS_SAMPLE_AUX gsa inner join GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + + "gsd.SAMPLE_ID as sampleId,gsd.input_file_name as inputFileName " + + "from ORIGINAL.GARDS_SAMPLE_AUX gsa inner join ORIGINAL.GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + "where gsa.measurement_id = #{measurementId} and gsd.data_type=#{dataType}") - public GardsSampleData getSampleInputFileName(@Param("measurementId") String measurementId,@Param("dataType") String dataType); - - @Select(value = "select " + - "gsd.SAMPLE_ID,gsd.input_file_name " + - "from GARDS_SAMPLE_AUX gsa inner join GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + - "where gsa.bkgd_measurement_id = #{bkgdMeasurementId} and gsd.data_type=#{dataType}") - public GardsSampleData getDetInputFileName(@Param("bkgdMeasurementId") String bkgdMeasurementId,@Param("dataType") String dataType); - - @Select(value = "select " + - "gsd.SAMPLE_ID,gsd.input_file_name " + - "from GARDS_SAMPLE_AUX gsa inner join GARDS_SAMPLE_DATA gsd on gsa.sample_id = gsd.sample_id " + - "where gsa.gas_bkgd_measurement_id = #{gasMeasurementId} and gsd.data_type=#{dataType}") - public GardsSampleData getGasInputFileName(@Param("gasMeasurementId") String gasMeasurementId,@Param("dataType") String dataType); + public GardsSampleData getSampleIdAndInputFileName(@Param("measurementId") String measurementId,@Param("dataType") String dataType); @Update(value = "UPDATE ORIGINAL.GARDS_SAMPLE_DATA SET STATUS=#{status} WHERE INPUT_FILE_NAME=#{inputFileName}") public int updateStatus(@Param("status") String status,@Param("inputFileName") String inputFileName); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java new file mode 100644 index 00000000..c60bc80b --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsXeResultsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsXeResults; + +public interface GardsXeResultsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml new file mode 100644 index 00000000..f63942f5 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationMapper.xml @@ -0,0 +1,35 @@ + + + + + + insert into RNAUTO.GARDS_CALIBRATION( + SAMPLE_ID, + IDANALYSIS, + SAMPLE_TYPE, + CALTYPE, + FUNCTION, + FUNCTIONDEF, + STARTOFRANGE, + ENDOFRANGE, + coeff1, + coeff2, + coeff3, + moddate) + values( + #{calibration.sampleId}, + #{calibration.idAnalysis}, + #{calibration.sampleType}, + #{calibration.calType}, + #{calibration.function}, + #{calibration.functionDef}, + #{calibration.startOfRange}, + #{calibration.endOfRange}, + #{calibration.coeff1}, + #{calibration.coeff2}, + #{calibration.coeff3}, + #{calibration.moddate}) + + + + \ No newline at end of file diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java index 493f6450..a20be280 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/BgAnalyseResult.java @@ -3,29 +3,92 @@ package org.jeecg.modules.native_jni.struct; import java.util.List; public class BgAnalyseResult { - /************************** BgMDCPara **************************/ - /** MDC XE135 */ - public double MDC_Xe135; - /** MDC XE131m */ - public double MDC_Xe131m; - /** MDC XE133m*/ - public double MDC_Xe133m; - /** MDC XE133 */ - public double MDC_Xe133; - public List MDC; - public List MDC_CTS; - - /************************** BgXeConUncer **************************/ - /** 135不浓度 */ - public double Xe135_con; - /** 135不确定度 */ - public double Xe135_uncer; + /************************** GARDS_XE_RESULTS START**************************/ + /************************** XE_131m **************************/ public double Xe131m_con; public double Xe131m_uncer; - public double Xe133m_con; - public double Xe133m_uncer; + public double MDC_Xe131m; + public double LC_Xe131m; + public int XE_131m_NID_FLAG; + + /************************** XE_133 **************************/ public double Xe133_con; public double Xe133_uncer; + public double MDC_Xe133; + public double LC_Xe133; + public int XE_133_NID_FLAG; + /************************** XE_133m **************************/ + public double Xe133m_con; + public double Xe133m_uncer; + public double MDC_Xe133m; + public double LC_Xe133m; + public int XE_133m_NID_FLAG; + + /************************** XE_135 **************************/ + public double Xe135_con; + public double Xe135_uncer; + public double MDC_Xe135; + public double LC_Xe135; + public int XE_135_NID_FLAG; + /************************** GARDS_XE_RESULTS end **************************/ + + /************************** GARDS_ROI_RESULTS START**************************/ + public List ROI; + public List LC; + public List s_roi_cts; + public List g_roi_cts; + public List d_roi_cts; + public List s_deduct_d_cts; + public List g_deduct_d_cts; + public List ROI_net_coutns; + public List ROI_net_coutns_err; + public List ROI_con_uncer; + public List ROI_con_uncer_err; + public List MDC; + public List dNidFlag; + + /************************** GARDS_ROI_RESULTS end **************************/ + + /************************** GARDS_CALIBRATION START**************************/ + public List s_b_fitting_e_c; + public int s_b_fitting_type; + public String s_b_fitting_type_def; + public List s_g_fitting_e_c; + public int s_g_fitting_type; + public String s_g_fitting_type_def; + + public List g_b_fitting_e_c; + public int g_b_fitting_type; + public String g_b_fitting_type_def; + public List g_g_fitting_e_c; + public int g_g_fitting_type; + public String g_g_fitting_type_def; + + public List d_b_fitting_e_c; + public int d_b_fitting_type; + public String d_b_fitting_type_def; + public List d_g_fitting_e_c; + public int d_g_fitting_type; + public String d_g_fitting_type_def; + /************************** GARDS_CALIBRATION end **************************/ + + /************************** GARDS_ROI_CHANNELS START**************************/ + public List S_ROI; + public List S_ROI_B_Boundary_start; + public List S_ROI_B_Boundary_stop; + public List S_ROI_G_Boundary_start; + public List S_ROI_G_Boundary_stop; + public List G_ROI; + public List G_ROI_B_Boundary_start; + public List G_ROI_B_Boundary_stop; + public List G_ROI_G_Boundary_start; + public List G_ROI_G_Boundary_stop; + public List D_ROI; + public List D_ROI_B_Boundary_start; + public List D_ROI_B_Boundary_stop; + public List D_ROI_G_Boundary_start; + public List D_ROI_G_Boundary_stop; + /************************** GARDS_ROI_CHANNELS end **************************/ /** * 分析结果标记,true成功,false失败 @@ -36,23 +99,76 @@ public class BgAnalyseResult { */ public String error_log; + @Override public String toString() { return "BgAnalyseResult{" + - "MDC_Xe135=" + MDC_Xe135 + - ", MDC_Xe131m=" + MDC_Xe131m + - ", MDC_Xe133m=" + MDC_Xe133m + - ", MDC_Xe133=" + MDC_Xe133 + - ", MDC=" + MDC + - ", MDC_CTS=" + MDC_CTS + - ", Xe135_con=" + Xe135_con + - ", Xe135_uncer=" + Xe135_uncer + - ", Xe131m_con=" + Xe131m_con + + "Xe131m_con=" + Xe131m_con + ", Xe131m_uncer=" + Xe131m_uncer + - ", Xe133m_con=" + Xe133m_con + - ", Xe133m_uncer=" + Xe133m_uncer + + ", MDC_Xe131m=" + MDC_Xe131m + + ", LC_Xe131m=" + LC_Xe131m + + ", XE_131m_NID_FLAG=" + XE_131m_NID_FLAG + ", Xe133_con=" + Xe133_con + ", Xe133_uncer=" + Xe133_uncer + + ", MDC_Xe133=" + MDC_Xe133 + + ", LC_Xe133=" + LC_Xe133 + + ", XE_133_NID_FLAG=" + XE_133_NID_FLAG + + ", Xe133m_con=" + Xe133m_con + + ", Xe133m_uncer=" + Xe133m_uncer + + ", MDC_Xe133m=" + MDC_Xe133m + + ", LC_Xe133m=" + LC_Xe133m + + ", XE_133m_NID_FLAG=" + XE_133m_NID_FLAG + + ", Xe135_con=" + Xe135_con + + ", Xe135_uncer=" + Xe135_uncer + + ", MDC_Xe135=" + MDC_Xe135 + + ", LC_Xe135=" + LC_Xe135 + + ", XE_135_NID_FLAG=" + XE_135_NID_FLAG + + ", ROI=" + ROI + + ", LC=" + LC + + ", s_roi_cts=" + s_roi_cts + + ", g_roi_cts=" + g_roi_cts + + ", d_roi_cts=" + d_roi_cts + + ", s_deduct_d_cts=" + s_deduct_d_cts + + ", g_deduct_d_cts=" + g_deduct_d_cts + + ", ROI_net_coutns=" + ROI_net_coutns + + ", ROI_net_coutns_err=" + ROI_net_coutns_err + + ", ROI_con_uncer=" + ROI_con_uncer + + ", ROI_con_uncer_err=" + ROI_con_uncer_err + + ", MDC=" + MDC + + ", dNidFlag=" + dNidFlag + + ", s_b_fitting_e_c=" + s_b_fitting_e_c + + ", s_b_fitting_type=" + s_b_fitting_type + + ", s_b_fitting_type_def='" + s_b_fitting_type_def + '\'' + + ", s_g_fitting_e_c=" + s_g_fitting_e_c + + ", s_g_fitting_type=" + s_g_fitting_type + + ", s_g_fitting_type_def='" + s_g_fitting_type_def + '\'' + + ", g_b_fitting_e_c=" + g_b_fitting_e_c + + ", g_b_fitting_type=" + g_b_fitting_type + + ", g_b_fitting_type_def='" + g_b_fitting_type_def + '\'' + + ", g_g_fitting_e_c=" + g_g_fitting_e_c + + ", g_g_fitting_type=" + g_g_fitting_type + + ", g_g_fitting_type_def='" + g_g_fitting_type_def + '\'' + + ", d_b_fitting_e_c=" + d_b_fitting_e_c + + ", d_b_fitting_type=" + d_b_fitting_type + + ", d_b_fitting_type_def='" + d_b_fitting_type_def + '\'' + + ", d_g_fitting_e_c=" + d_g_fitting_e_c + + ", d_g_fitting_type=" + d_g_fitting_type + + ", d_g_fitting_type_def='" + d_g_fitting_type_def + '\'' + + ", S_ROI=" + S_ROI + + ", S_ROI_B_Boundary_start=" + S_ROI_B_Boundary_start + + ", S_ROI_B_Boundary_stop=" + S_ROI_B_Boundary_stop + + ", S_ROI_G_Boundary_start=" + S_ROI_G_Boundary_start + + ", S_ROI_G_Boundary_stop=" + S_ROI_G_Boundary_stop + + ", G_ROI=" + G_ROI + + ", G_ROI_B_Boundary_start=" + G_ROI_B_Boundary_start + + ", G_ROI_B_Boundary_stop=" + G_ROI_B_Boundary_stop + + ", G_ROI_G_Boundary_start=" + G_ROI_G_Boundary_start + + ", G_ROI_G_Boundary_stop=" + G_ROI_G_Boundary_stop + + ", D_ROI=" + D_ROI + + ", D_ROI_B_Boundary_start=" + D_ROI_B_Boundary_start + + ", D_ROI_B_Boundary_stop=" + D_ROI_B_Boundary_stop + + ", D_ROI_G_Boundary_start=" + D_ROI_G_Boundary_start + + ", D_ROI_G_Boundary_stop=" + D_ROI_G_Boundary_stop + ", analyse_flag=" + analyse_flag + ", error_log='" + error_log + '\'' + '}'; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java index 1ca9045a..82882588 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/BlockConstant.java @@ -9,5 +9,10 @@ public interface BlockConstant { public final static String SYSTEMTYPE_G = "G"; public final static String EFFICIENCY_CAL ="efficiency"; + public final static String XE_131m = "Xe131m"; + public final static String XE_133m = "Xe133m"; + public final static String XE_133 = "Xe133"; + public final static String XE_135 = "Xe135"; + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java index 2ed5e7e9..312a192b 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsAnalysesService.java @@ -1,9 +1,12 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.entity.rnauto.GardsAnalyses; import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import java.util.Date; + /** * 存储谱数据分析的基本信息 */ @@ -12,10 +15,16 @@ public interface GardsAnalysesService extends IService { /** * 存储谱数据分析的基本信息 * 不提交事务,由调用方手动统一提交事务 - * @param analyseResult * @param sampleId + * @param detSampleData + * @param gasSampleData + * @param beginDate 分析开始时间 + * @param endDate 分析结束时间 + * @param logPath + * @param reportPath + * @return */ - public void create(BgAnalyseResult analyseResult,Integer sampleId); + public GardsAnalyses create(Integer sampleId, GardsSampleData detSampleData, GardsSampleData gasSampleData, Date beginDate, Date endDate, String logPath, String reportPath); Integer getIdAnalysis(Integer sampleId); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java index d6b5e45a..55f51a8b 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsCalibrationService.java @@ -2,11 +2,20 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnauto.GardsCalibration; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; /** * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 */ public interface GardsCalibrationService extends IService { - + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param anayId + */ + public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java new file mode 100644 index 00000000..7506daee --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiChannelsService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.rnauto.GardsRoiChannels; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; + +/** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + */ +public interface GardsRoiChannelsService extends IService { + + /** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis); +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java new file mode 100644 index 00000000..5adbc9bc --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsRoiResultsService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.rnauto.GardsRoiResults; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; + +/** + * 存储β-γ符合谱中分析过程中的有关感兴趣区(ROI)计算的中间结果。 + */ +public interface GardsRoiResultsService extends IService { + + /** + * 存储β-γ符合谱中分析过程中的有关感兴趣区(ROI)计算的中间结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis); +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java index d7841cfd..59d6a559 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsSampleDataService.java @@ -13,28 +13,12 @@ public interface GardsSampleDataService extends IService { public boolean fileExist(String inputFileName); /** - * 获取Sample谱文件保存路径 + * 获取谱文件保存路径 * @param measurementId * @param dataType * @return */ - public GardsSampleData getSampleInputFileName(String measurementId,String dataType); - - /** - * 获取Det谱文件保存路径 - * @param bkgdMeasurementId - * @param dataType - * @return - */ - public GardsSampleData getDetInputFileName(String bkgdMeasurementId,String dataType); - - /** - * 获取Gas谱文件保存路径 - * @param gasMeasurementId - * @param dataType - * @return - */ - public GardsSampleData getGasInputFileName(String gasMeasurementId,String dataType); + public GardsSampleData getSampleIdAndInputFileName(String measurementId,String dataType); /** * 修改能谱处理状态 diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java new file mode 100644 index 00000000..44c0a218 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/GardsXeResultsService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.rnauto.GardsXeResults; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; + +/** + * 存储β-γ符合谱最终分析结果。 + */ +public interface GardsXeResultsService extends IService { + + /** + * 存储β-γ符合谱最终分析结果 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer idAnalysis); +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java index c312cbf6..8708f13c 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsAnalysesServiceImpl.java @@ -3,45 +3,58 @@ package org.jeecg.modules.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.jeecg.common.properties.SoftwareProperties; +import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.entity.rnauto.GardsAnalyses; import org.jeecg.modules.base.enums.AnalysesType; import org.jeecg.modules.mapper.GardsAnalysesMapper; -import org.jeecg.modules.native_jni.struct.BgAnalyseResult; import org.jeecg.modules.service.GardsAnalysesService; import org.springframework.stereotype.Service; - -import java.util.Optional; +import java.util.Date; /** * 存储谱数据分析的基本信息 */ @Service +@RequiredArgsConstructor public class GardsAnalysesServiceImpl extends ServiceImpl implements GardsAnalysesService { + private final SoftwareProperties properties; + /** * 存储谱数据分析的基本信息 * 不提交事务,由调用方手动统一提交事务 - * @param analyseResult * @param sampleId + * @param detSampleData + * @param gasSampleData + * @param beginDate 分析开始时间 + * @param endDate 分析结束时间 + * @param logPath + * @param reportPath + * @return */ @Override - public void create(BgAnalyseResult analyseResult,Integer sampleId) { + public GardsAnalyses create(Integer sampleId, GardsSampleData detSampleData, GardsSampleData gasSampleData, Date beginDate, Date endDate, String logPath, String reportPath) { GardsAnalyses analyses = new GardsAnalyses(); analyses.setSampleId(sampleId); - analyses.setAnalysisBegin(null);//分析开始时间,java控制 - analyses.setAnalysisEnd(null);//分析结束时间,java控制 - analyses.setType(AnalysesType.AUTO.getValue());//类型,java控制 - analyses.setSoftware(null);//使用的软件名称,配置文件配置 - analyses.setSwVersion(null);//软件版本号,配置文件配置 - analyses.setAnalyst(null);//分析员名称,配置文件配置 + analyses.setAnalysisBegin(beginDate); + analyses.setAnalysisEnd(endDate); + analyses.setType(AnalysesType.AUTO.getValue()); + analyses.setSoftware(properties.getSwName()); + analyses.setSwVersion(properties.getSwVersion()); + analyses.setAnalyst(properties.getAnalyst()); analyses.setCategory(1);//按C++代码写死的1,该字段是分级结果张博士还没有想好数据要不要分级1,2,3,4 analyses.setComments("test");//按C++代码写死的test - analyses.setUsedgasphd(null);//gas谱的phd文件ftp路径 - analyses.setUseddetphd(null);//det谱的phd文件ftp路径 - analyses.setUsedgasphdId(null);//gas谱的sampleId - analyses.setUseddetphdId(null);//det谱的sampleId - analyses.setLogPath(null);//解析过程日志ftp路径 - analyses.setReportPath(null);//报告ftp路径 + analyses.setUsedgasphd(gasSampleData.getInputFileName()); + analyses.setUseddetphd(detSampleData.getInputFileName()); + analyses.setUsedgasphdId(gasSampleData.getSampleId()); + analyses.setUseddetphdId(detSampleData.getSampleId()); + analyses.setLogPath(logPath); + analyses.setReportPath(reportPath); + + this.save(analyses); + return analyses; } @Override diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java index 1ed06ee3..6f721267 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsServiceImpl.java @@ -70,6 +70,7 @@ public class GardsCalibrationPairsServiceImpl extends ServiceImpl implements GardsCalibrationService { +public class GardsCalibrationServiceImpl extends ServiceImpl implements GardsCalibrationService, BlockConstant { + private final static int START_RANGE = 0; + private final static int END_RANGE = 1; + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param anayId + */ + @Override + public void create(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId){ + this.saveSampleB_EnergyRecord(analyseResult,sampleId,anayId); + this.saveSampleG_EnergyRecord(analyseResult,sampleId,anayId); + this.saveGasB_EnergyRecord(analyseResult,sampleId,anayId); + this.saveGasG_EnergyRecord(analyseResult,sampleId,anayId); + this.saveDetB_EnergyRecord(analyseResult,sampleId,anayId); + this.saveDetG_EnergyRecord(analyseResult,sampleId,anayId); + } + + /** + * 保存 B_Energy 块信息 + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveSampleB_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_B); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.s_b_fitting_type); + calibration.setFunctionDef(analyseResult.s_b_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.s_b_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.s_b_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.s_b_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * G_Energy能道存储 + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveSampleG_EnergyRecord(BgAnalyseResult analyseResult,Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_G); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.s_g_fitting_type); + calibration.setFunctionDef(analyseResult.s_g_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.s_g_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.s_g_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.s_g_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * B_Energy + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveGasB_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_B); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.g_b_fitting_type); + calibration.setFunctionDef(analyseResult.g_b_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.g_b_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.g_b_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.g_b_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * G_Energy能道存储 + * + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveGasG_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_G); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.g_g_fitting_type); + calibration.setFunctionDef(analyseResult.g_g_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.g_g_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.g_g_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.g_g_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * B_Energy + * + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveDetB_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_B); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.d_b_fitting_type); + calibration.setFunctionDef(analyseResult.d_b_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.d_b_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.d_b_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.d_b_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + + /** + * 存储数据分析过程中能量、分辨率和效率刻度的拟合结果。 + * 不提交事务,由调用方手动统一提交事务 + * G_Energy能道存储 + * + * @param analyseResult + * @param sampleId + * @param anayId + */ + private void saveDetG_EnergyRecord(BgAnalyseResult analyseResult, Integer sampleId, Integer anayId) { + GardsCalibration calibration = new GardsCalibration(); + calibration.setSampleId(sampleId); + calibration.setIdAnalysis(anayId); + calibration.setSampleType(SYSTEMTYPE_G); + calibration.setCalType(ENERGY_CAL); + calibration.setFunction(analyseResult.d_g_fitting_type); + calibration.setFunctionDef(analyseResult.d_g_fitting_type_def); + calibration.setStartOfRange(START_RANGE); + calibration.setEndOfRange(END_RANGE); + calibration.setCoeff1(analyseResult.d_g_fitting_e_c.get(0)); + calibration.setCoeff2(analyseResult.d_g_fitting_e_c.get(1)); + calibration.setCoeff3(analyseResult.d_g_fitting_e_c.get(2)); + calibration.setModdate(new Date()); + + this.baseMapper.create(calibration); + } + +// public static void main(String[] args) { +// System.loadLibrary("ReadPHDFile"); +// String sampleTempFilePath = "E:\\file\\AUX09_003-20151224_1855_S_FULL_40184.505.PHD"; +// String gasTempFilePath = "E:\\file\\AUX09_003-20151224_0655_G_FULL_40182.873.PHD"; +// String detTempFilePath = "E:\\file\\AUX09_003-20150527_0425_D_FULL_259449.672.PHD"; +// BgAnalyseResult analyseResult = EnergySpectrumHandler.bgAnalyse(sampleTempFilePath,gasTempFilePath,detTempFilePath); +// System.out.println(analyseResult); +// } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java new file mode 100644 index 00000000..5f5bc3d8 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsRoiChannelsServiceImpl.java @@ -0,0 +1,104 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.modules.base.entity.rnauto.GardsRoiChannels; +import org.jeecg.modules.mapper.GardsRoiChannelsMapper; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import org.jeecg.modules.service.GardsRoiChannelsService; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; + +/** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + */ +@Service +public class GardsRoiChannelsServiceImpl extends ServiceImpl implements GardsRoiChannelsService { + + /** + * 存储β-γ符合谱中感兴趣区道址边界数据。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + @Override + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis) { + List roiChannelsList = Lists.newArrayList(); + this.saveSampleRoiChannels(analyseResult,sampleId,idAnalysis,roiChannelsList); + this.saveGasRoiChannels(analyseResult,sampleId,idAnalysis,roiChannelsList); + this.saveDetRoiChannels(analyseResult,sampleId,idAnalysis,roiChannelsList); + if(!CollectionUtils.isEmpty(roiChannelsList)){ + this.saveBatch(roiChannelsList); + } + } + + /** + * 存储sample谱RoiChannels数据 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + private void saveSampleRoiChannels(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis,List roiChannelsList) { + for(int i=0;i roiChannelsList) { + for(int i=0;i roiChannelsList) { + for(int i=0;i implements GardsRoiResultsService { + + + /** + * 存储β-γ符合谱中分析过程中的有关感兴趣区(ROI)计算的中间结果。 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + @Override + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis) { + List list = Lists.newArrayList(); + for(int i=0;i analyseResult.MDC.get(i)){ +// list.get(i).setNidFlag(1); +// }else { +// list.get(i).setNidFlag(0); +// } +// } + list.get(i).setNidFlag(0); + } + + if(!CollectionUtils.isEmpty(list)){ + this.saveBatch(list); + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java index 3ed94ab2..29245aa0 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataServiceImpl.java @@ -3,6 +3,7 @@ package org.jeecg.modules.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.mapper.GardsSampleDataMapper; import org.jeecg.modules.service.GardsSampleDataService; @@ -26,43 +27,18 @@ public class GardsSampleDataServiceImpl extends ServiceImpl implements GardsXeResultsService, BlockConstant { + + /** + * 存储β-γ符合谱最终分析结果 + * 不提交事务,由调用方手动统一提交事务 + * @param analyseResult + * @param sampleId + * @param idAnalysis + */ + @Override + public void create(BgAnalyseResult analyseResult,Integer sampleId, Integer idAnalysis) { + List xeResultsList = Lists.newArrayList(); + this.saveXE_131m(analyseResult,sampleId,idAnalysis,XE_131m,xeResultsList); + this.saveXE_133(analyseResult,sampleId,idAnalysis,XE_133,xeResultsList); + this.saveXE_133m(analyseResult,sampleId,idAnalysis,XE_133m,xeResultsList); + this.saveXE_135(analyseResult,sampleId,idAnalysis,XE_135,xeResultsList); + if(!CollectionUtils.isEmpty(xeResultsList)){ + this.saveBatch(xeResultsList); + } + } + + /** + * 保存XE_131m + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_131m(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe131m_con); + xeResults.setConcErr(analyseResult.Xe131m_uncer); + xeResults.setMdc(analyseResult.MDC_Xe131m); + xeResults.setLc(analyseResult.LC_Xe131m); + xeResults.setNidFlag(analyseResult.XE_131m_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } + + /** + * 保存XE_133 + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_133(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe133_con); + xeResults.setConcErr(analyseResult.Xe133_uncer); + xeResults.setMdc(analyseResult.MDC_Xe133); + xeResults.setLc(analyseResult.MDC_Xe133); + xeResults.setNidFlag(analyseResult.XE_133_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } + + /** + * 保存XE_133m + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_133m(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe131m_con); + xeResults.setConcErr(analyseResult.Xe131m_uncer); + xeResults.setMdc(analyseResult.MDC_Xe131m); + xeResults.setLc(analyseResult.LC_Xe131m); + xeResults.setNidFlag(analyseResult.XE_131m_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } + + /** + * 保存XE_135 + * @param analyseResult + * @param sampleId + * @param idAnalysis + * @param nuclideName + */ + private void saveXE_135(BgAnalyseResult analyseResult,Integer sampleId,Integer idAnalysis,String nuclideName,List xeResultsList){ + GardsXeResults xeResults = new GardsXeResults(); + xeResults.setSampleId(sampleId); + xeResults.setIdAnalysis(idAnalysis); + xeResults.setNuclideName(nuclideName); + xeResults.setConc(analyseResult.Xe135_con); + xeResults.setConcErr(analyseResult.Xe135_uncer); + xeResults.setMdc(analyseResult.MDC_Xe135); + xeResults.setLc(analyseResult.LC_Xe135); + xeResults.setNidFlag(analyseResult.XE_135_NID_FLAG); + xeResults.setModdate(new Date()); + + xeResultsList.add(xeResults); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java index 458bb105..f1631cb1 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java @@ -93,8 +93,8 @@ public class SpectrumBaseBlockServiceImpl implements ISpectrumBaseBlockService { if(StringUtils.isNotBlank(struct.acquisition_start_date) && StringUtils.isNotBlank(struct.acquisition_start_time)){ gardsSampleData.setAcquisitionStart(DateUtils.parseDate(struct.acquisition_start_date+" "+struct.acquisition_start_time)); } - if(Objects.nonNull(gardsSampleData.getAcquisitionStart()) && struct.acquisition_real_time > 0){ - Date acquisitionStop = new Date((long) (gardsSampleData.getAcquisitionStart().getTime()+struct.acquisition_real_time)); + if(Objects.nonNull(gardsSampleData.getAcquisitionStart()) && struct.acquisition_live_time > 0){ + Date acquisitionStop = new Date((long) (gardsSampleData.getAcquisitionStart().getTime()+(struct.acquisition_live_time*1000))); gardsSampleData.setAcquisitionStop(acquisitionStop); } gardsSampleData.setAcquisitionRealSec(struct.acquisition_real_time); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java index 7cece8f9..28c00d79 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java @@ -7,6 +7,7 @@ import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.base.entity.original.GardsAlertData; import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.AlertSpectrumStruct; @@ -81,10 +82,10 @@ public class AlertSpectrum extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception { final AlertSpectrumStruct sourceData = EnergySpectrumHandler.getAlertSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ - throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); } this.sourceData = sourceData; } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java index 607381c9..092deb36 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java @@ -8,6 +8,7 @@ import org.jeecg.common.util.DateUtils; import org.jeecg.modules.base.entity.original.GardsSohData; import org.jeecg.modules.base.enums.DataType; import org.jeecg.modules.exception.AirSamplerFlowException; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct; import org.springframework.util.CollectionUtils; @@ -80,10 +81,10 @@ public class HealthStatusSpectrum extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception { final SOHSpectrumStruct sourceData = EnergySpectrumHandler.getSOHSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ - throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); } if(sourceData.af_record_count <= 0 || sourceData.af_start_date.size() < 0 || sourceData.af_start_time.size() < 0){ throw new AirSamplerFlowException("ariSamplerFlow data error"); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java index 8395a868..e79a08da 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java @@ -80,7 +80,7 @@ public class MetSpectrum extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception{ final MetSpectrumStruct sourceData = EnergySpectrumHandler.getMetSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java index e0174d01..58378faf 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java @@ -12,6 +12,7 @@ import org.jeecg.modules.config.datasource.DataSourceSwitcher; import org.jeecg.modules.exception.AcquisitionBlockException; import org.jeecg.modules.exception.FileRepeatException; import org.jeecg.modules.exception.HeaderBlockException; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.jeecg.modules.service.ISpectrumBlockService; @@ -49,6 +50,14 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ * 基础数据 */ protected GardsSampleData sampleData; + /** + * 日志文件路径 + */ + protected String logFilePath; + /** + * 日志文件名称 + */ + protected String logFileName; /** * 前置检查 @@ -80,10 +89,10 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ * 调用dll解析邮件 */ @Override - protected void parseingEmail() { + protected void parseingEmail() throws Exception { final EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(mailFile.getAbsolutePath()); if(Objects.isNull(sourceData)){ - throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath()); } this.sourceData = sourceData; } @@ -182,7 +191,7 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ } } //提交事务 - spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); + this.spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); this.endIntoDatabaseTime = new Date(); }catch (Exception e){ //回滚事务 @@ -225,9 +234,10 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------"); //保存日志文件到ftp final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); - final String ftpPath = properties.getLogPath()+StringConstant.SLASH+this.getFileSavePath(); - final String fileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),LOG_FILE_SUFFIX); - super.ftpUtil.saveFile(ftpPath,fileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8))); + this.logFilePath = properties.getLogPath()+StringConstant.SLASH+this.getFileSavePath(); + this.logFileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),LOG_FILE_SUFFIX); + + super.ftpUtil.saveFile(logFilePath,logFileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8))); } /** diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java new file mode 100644 index 00000000..fa919a1d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java @@ -0,0 +1,299 @@ +package org.jeecg.modules.spectrum; + +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.constant.StringConstant; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.base.entity.rnauto.GardsAnalyses; +import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.DataTypeAbbr; +import org.jeecg.modules.base.enums.SampleStatus; +import org.jeecg.modules.config.datasource.DataSourceSwitcher; +import org.jeecg.modules.exception.BAnalyseException; +import org.jeecg.modules.exception.FileNotExistException; +import org.jeecg.modules.ftp.FTPUtils; +import org.jeecg.modules.native_jni.EnergySpectrumHandler; +import org.jeecg.modules.native_jni.struct.BgAnalyseResult; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.springframework.transaction.TransactionStatus; +import java.io.File; +import java.io.IOException; +import java.time.LocalDate; +import java.util.Date; +import java.util.Objects; + +/** + * B谱分析过程 + */ +public class Sample_B_Analysis { + + /** + * 报告文件后缀 + */ + private static final String ARR_FILE_SUFFIX = ".txt"; + /** + * 正常分析过程日志 + */ + private StringBuilder analysesLog = new StringBuilder(); + /** + * 分析过程当前状态 + */ + private String currAnalysesStatus = null; + /** + * Sample谱结构体数据 + */ + private EnergySpectrumStruct sampleStruct = null; + /** + * sample谱原始数据 + */ + private GardsSampleData sampleData = null; + /** + * gas谱原始数据 + */ + private GardsSampleData detSampleData = null; + /** + * det谱原始数据 + */ + private GardsSampleData gasSampleData = null; + /** + * sample谱PHD文件临时路径 + */ + private String sampleTempFilePath; + /** + * det谱PHD文件临时路径 + */ + private String detTempFilePath; + /** + * gas谱PHD文件临时路径 + */ + private String gasTempFilePath; + /** + * 日志文件路径 + */ + private String logFilePath; + /** + * 日志文件名称 + */ + private String logFileName; + /** + * 报告文件路径 + */ + private String arrFilePath; + /** + * 报告文件名称 + */ + private String arrFileName; + /** + * spring bean引用 + */ + private SpectrumServiceQuotes spectrumServiceQuotes; + /** + * ftp工具 + */ + private FTPUtils ftpUtil; + /** + * 分析结果 + */ + private BgAnalyseResult analyseResult; + /** + * 开始分析时间 + */ + private Date startAnalysisTime; + /** + * 结束分析时间 + */ + private Date endAnalysisTime; + + public Sample_B_Analysis(GardsSampleData sampleData,String sampleTempFilePath,SpectrumServiceQuotes spectrumServiceQuotes, + EnergySpectrumStruct sampleStruct,FTPUtils ftpUtil,String logFilePath,String logFileName){ + this.sampleData = sampleData; + this.sampleTempFilePath = sampleTempFilePath; + this.spectrumServiceQuotes = spectrumServiceQuotes; + this.sampleStruct = sampleStruct; + this.ftpUtil = ftpUtil; + this.logFilePath = logFilePath; + this.logFileName = logFileName; + } + + /** + * 执行解析过程 + */ + public void start(){ + try { + //修改状态为解析中 + this.updateStatus(SampleStatus.IN_PROCESS.getValue()); + //查询det、gas数据(sampleId,inputFileName),sample数据在构造函数已经传过来 + this.queryPHDFile(); + //构造报告文件存储路径及文件名称,日志文件存储路径及文件名称在原始库存储阶段已存在,已经传过来 + this.structureArrFilePath(); + //下载det和gas谱PHD文件,sample谱PHD文件位置在构造函数已经传过来 + this.downloadPHDFile(); + //传入sample、det和gas谱PHD文件调用dll进行分析 + this.autoAnalyse(); + //存储数据 + this.storageDataToDatabase(); + //删除下载的det和gas临时文件 + this.deleteLocalTemporaryFile(); + }catch (Exception e){ + e.printStackTrace(); + } + } + + /** + * 修改状态为解析中 + * @param analysesStatus + */ + private void updateStatus(String analysesStatus){ + this.currAnalysesStatus = analysesStatus; + this.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,this.sampleData.getInputFileName()); + } + + /** + * 查询det、gas数据,sample在构造函数已经传过来 + * @throws FileNotExistException + */ + private void queryPHDFile() throws FileNotExistException { + //查询det和gas能谱文件 + this.detSampleData = spectrumServiceQuotes.getSampleDataService().getSampleIdAndInputFileName(this.sampleStruct.detector_bk_measurement_id, DataTypeAbbr.DETBKPHD.getType()); + this.gasSampleData = spectrumServiceQuotes.getSampleDataService().getSampleIdAndInputFileName(this.sampleStruct.gas_bk_measurement_id, DataTypeAbbr.GASBKPHD.getType()); + + //如果找不到sample、det、gas谱文件数据则解析失败修改记录状态 + if(StringUtils.isEmpty(this.sampleData.getInputFileName()) || Objects.isNull(this.detSampleData) || StringUtils.isEmpty(this.detSampleData.getInputFileName()) || Objects.isNull(this.gasSampleData) || StringUtils.isEmpty(this.gasSampleData.getInputFileName())){ + this.currAnalysesStatus = SampleStatus.FAIL.getValue(); + this.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,this.sampleData.getInputFileName()); + + throw new FileNotExistException("gas or det file is no exist or is error.."); + } + } + + /** + * 创建报告文件路径 + */ + private void structureArrFilePath(){ + //处理此文件需要保存到ftp服务的路径 + final int year = LocalDate.now().getYear(); + final int month = LocalDate.now().getMonth().getValue(); + final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); + StringBuilder ftpPath = new StringBuilder(); + ftpPath.append(properties.getRootPath()); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(properties.getArrPath()); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(properties.getFilePathMap().get(this.sampleStruct.system_type)); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(properties.getFilePathMap().get(this.sampleStruct.data_type)); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(year); + ftpPath.append(StringConstant.SLASH); + ftpPath.append(month>=10?month:"0"+month); + this.arrFilePath = ftpPath.toString(); + final String filePath = this.sampleData.getInputFileName().replace(DataType.SAMPLEPHD.getSuffix(), ARR_FILE_SUFFIX); + this.arrFileName = filePath.substring(filePath.lastIndexOf(StringConstant.SLASH)+1); + } + + /** + * 调用dll库的分析B谱结果 + */ + private void autoAnalyse() throws BAnalyseException, FileNotExistException { + this.startAnalysisTime = new Date(); + System.out.println("sam:"+this.sampleTempFilePath); + System.out.println("gas:"+this.gasTempFilePath); + System.out.println("det:"+this.detTempFilePath); + + BgAnalyseResult analyseResult = EnergySpectrumHandler.bgAnalyse(this.sampleTempFilePath,this.gasTempFilePath,this.detTempFilePath); + System.out.println(analyseResult); + this.endAnalysisTime = new Date(); + if(Objects.isNull(analyseResult)){ + throw new BAnalyseException("THE PHD file cannot be parsed:"+this.sampleTempFilePath+","+this.gasTempFilePath+","+this.detTempFilePath); + } + this.analyseResult = analyseResult; + } + + /** + * 下载det和gas谱PHD文件,sample谱PHD文件位置在构造函数已经传过来 + * @throws IOException + */ + private void downloadPHDFile() throws IOException, FileNotExistException { + boolean flag = false; + //下载gas谱PHD文件到本地临时路径 + String gasFileName = gasSampleData.getInputFileName().substring(gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); + String gasFileFTPPath = gasSampleData.getInputFileName().substring(0, gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); + boolean gasFlag = ftpUtil.downloadFTPFile(gasFileFTPPath,gasFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); + if(!gasFlag){ + flag = true; + } + gasTempFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+File.separator+gasFileName; + + //下载det谱PHD文件到本地临时路径 + final String detFileName = detSampleData.getInputFileName().substring(detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); + String detFileFTPPath = detSampleData.getInputFileName().substring(0, detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); + boolean detFlag = ftpUtil.downloadFTPFile(detFileFTPPath,detFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); + if(!detFlag){ + flag = true; + } + detTempFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+ File.separator+detFileName; + + if(flag){ + throw new FileNotExistException("gas or det file is no exist or is error.."); + } + } + + /** + * 数据入库 + */ + private void storageDataToDatabase(){ + String logFileRelativePath = this.logFilePath+StringConstant.SLASH+this.logFileName; + String arrFileRelativePath = this.arrFilePath+StringConstant.SLASH+this.arrFileName; + DataSourceSwitcher.switchToOracle(); + final TransactionStatus transactionStatus = spectrumServiceQuotes.getTransactionManager().getTransaction(spectrumServiceQuotes.getTransactionDefinition()); + try{ + //存储基础数据 + final GardsAnalyses analyses = spectrumServiceQuotes.getAnalysesService().create(this.sampleData.getSampleId(),this.detSampleData, + this.gasSampleData,this.startAnalysisTime,this.endAnalysisTime,logFileRelativePath,arrFileRelativePath); + //调用原始数据dll获取gas、det谱数据入库,sample已有数据直接入库 + //存储sample谱B_Energy和G_Energy块数据 + spectrumServiceQuotes.getGardsCalibrationPairsService().createB_EnergyRecord(sampleData.getSampleId(),analyses.getIdAnalysis(),sampleStruct); + spectrumServiceQuotes.getGardsCalibrationPairsService().createG_EnergyRecord(sampleData.getSampleId(),analyses.getIdAnalysis(),sampleStruct); + //存储det谱B_Energy和G_Energy块数据 + final EnergySpectrumStruct detStruct = EnergySpectrumHandler.getSourceData(detSampleData.getInputFileName()); + spectrumServiceQuotes.getGardsCalibrationPairsService().createB_EnergyRecord(detSampleData.getSampleId(),analyses.getIdAnalysis(),detStruct); + spectrumServiceQuotes.getGardsCalibrationPairsService().createG_EnergyRecord(detSampleData.getSampleId(),analyses.getIdAnalysis(),detStruct); + //存储gas谱B_Energy和G_Energy块数据 + final EnergySpectrumStruct gasStruct = EnergySpectrumHandler.getSourceData(gasSampleData.getInputFileName()); + spectrumServiceQuotes.getGardsCalibrationPairsService().createB_EnergyRecord(gasSampleData.getSampleId(),analyses.getIdAnalysis(),gasStruct); + spectrumServiceQuotes.getGardsCalibrationPairsService().createG_EnergyRecord(gasSampleData.getSampleId(),analyses.getIdAnalysis(),gasStruct); + + //存储gards_calibration表数据sample、det、gas谱B_Energy和G_Energy块数据 + spectrumServiceQuotes.getGardsCalibrationService().create(this.analyseResult,gasSampleData.getSampleId(),analyses.getIdAnalysis()); + //gards_roi_channels数据表,存储sample、det、gas谱数据 + spectrumServiceQuotes.getRoiChannelsService().create(this.analyseResult,sampleData.getSampleId(),analyses.getIdAnalysis()); + //gards_Xe_results数据表XE_131m、XE_133、XE_133m、XE_135数据 + spectrumServiceQuotes.getXeResultsService().create(this.analyseResult,sampleData.getSampleId(),analyses.getIdAnalysis()); + //gards_ roi_results数据表 + spectrumServiceQuotes.getRoiResultsService().create(this.analyseResult,sampleData.getSampleId(),analyses.getIdAnalysis()); + //提交事务 + spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); + }catch (Exception e){ + //回滚事务 + spectrumServiceQuotes.getTransactionManager().rollback(transactionStatus); + throw e; + }finally { + DataSourceSwitcher.clearDataSource(); + } + } + + /** + * 删除下载的det和gas临时文件 + */ + private void deleteLocalTemporaryFile(){ + File detFile = new File(this.detTempFilePath); + if(detFile.exists() && detFile.isFile()){ + detFile.delete(); + } + + File gasFile = new File(this.gasTempFilePath); + if(gasFile.exists() && gasFile.isFile()){ + gasFile.delete(); + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java index 81808e7c..bd021eab 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java @@ -1,33 +1,13 @@ package org.jeecg.modules.spectrum; -import org.apache.commons.lang3.StringUtils; -import org.jeecg.common.constant.StringConstant; -import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.enums.DataType; -import org.jeecg.modules.base.enums.DataTypeAbbr; -import org.jeecg.modules.base.enums.SampleStatus; -import org.jeecg.modules.exception.FileNotExistException; -import org.jeecg.modules.native_jni.EnergySpectrumHandler; -import org.jeecg.modules.native_jni.struct.BgAnalyseResult; - -import java.io.File; -import java.io.IOException; -import java.util.Objects; +import org.jeecg.modules.base.enums.SystemType; /** * 样品谱处理 */ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ - /** - * 正常分析过程日志 - */ - private StringBuilder analysesLog = new StringBuilder(); - /** - * 分析过程当前状态 - */ - private String currAnalysesStatus = null; - /** * 设置过滤链路 */ @@ -60,78 +40,26 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ super.handlerOriginalData(); //保存email日志 super.saveEmailLog(); + //把原始库流程日志写入ftp日志文件 + super.saveLogToFtp(); + //进行B、G(P)谱分析 + this.autoAnalysis(); //删除本地临时文件 super.deleteLocalTemporaryFile(); - //把流程日志写入ftp日志文件 - super.saveLogToFtp(); }else{ super.next.handler(); } } /** - * 处理分析结果 - * - * @param struct + * 进行B、G(P)谱分析 + * @throws Exception */ - protected void handlerAnalysisResult() throws FileNotExistException, IOException { - - final String sampleFilePath = super.ftpSavePath; - String detFilePath = null; - String gasFilePath = null; - //修改状态为解析中 - this.currAnalysesStatus = SampleStatus.IN_PROCESS.getValue(); - super.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,sampleFilePath); - //查询det和gas能谱文件 - GardsSampleData detSampleData = super.spectrumServiceQuotes.getSampleDataService().getDetInputFileName(super.sourceData.detector_bk_measurement_id, DataTypeAbbr.DETBKPHD.getType()); - GardsSampleData gasSampleData = super.spectrumServiceQuotes.getSampleDataService().getGasInputFileName(super.sourceData.gas_bk_measurement_id, DataTypeAbbr.GASBKPHD.getType()); - - //如果找不到sample、det、gas谱文件数据则解析失败修改记录状态 - if(StringUtils.isEmpty(sampleFilePath) || Objects.isNull(detSampleData) || StringUtils.isEmpty(detSampleData.getInputFileName()) || Objects.isNull(gasSampleData) || StringUtils.isEmpty(gasSampleData.getInputFileName())){ - this.currAnalysesStatus = SampleStatus.FAIL.getValue(); - super.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,sampleFilePath); - - throw new FileNotExistException("gas or det file is no exist or is error.."); + protected void autoAnalysis() throws Exception { + if(this.sourceData.system_type.equals(SystemType.BETA.getType())){ + Sample_B_Analysis bAnalysis = new Sample_B_Analysis(super.sampleData,super.mailFile.getAbsolutePath(), + super.spectrumServiceQuotes,super.sourceData,super.ftpUtil,super.logFilePath,super.logFileName); + bAnalysis.start(); } - //下载det谱PHD文件到本地临时路径 - final String detFileName = detSampleData.getInputFileName().substring(detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); - detFilePath = detSampleData.getInputFileName().substring(0, detSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); - ftpUtil.downloadFTPFile(detFilePath,detFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); - detFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+File.separator+detFileName; - - //下载gas谱PHD文件到本地临时路径 - String gasFileName = gasSampleData.getInputFileName().substring(gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH) + 1); - gasFilePath = gasSampleData.getInputFileName().substring(0, gasSampleData.getInputFileName().lastIndexOf(StringConstant.SLASH)); - ftpUtil.downloadFTPFile(gasFilePath,gasFileName,this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); - gasFilePath = this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()+File.separator+gasFileName; - - //分析结果 - final BgAnalyseResult analyseResult = EnergySpectrumHandler.bgAnalyse(sampleFilePath, gasFilePath, detFilePath); - System.out.println(analyseResult); - if(Objects.nonNull(analyseResult) && analyseResult.analyse_flag){ - //存储数据 - super.spectrumServiceQuotes.getAnalysesService().create(analyseResult,super.sampleData.getSampleId()); - //修改分析状态为已完成 - this.currAnalysesStatus = SampleStatus.COMPLETE.getValue(); - super.spectrumServiceQuotes.getSampleDataService().updateStatus(this.currAnalysesStatus,sampleFilePath); - - //调用原始数据dll获取gas、det谱数据入库,sample已有数据直接入库 EnergySpectrumHandler.getSourceData() - - //存储gards_calibration表数据sample、det、gas谱数据 - - //存储GARDS_ROI_CHANNELS表数据sample、det、gas谱数据-乔钦政那边已和周雨涵调试过 - - //gards_ Xe_results数据表 - - - } - } - - /** - * 下载FTP文件到临时目录 - * @param filePath - */ - private void downFTPFileToTemporaryDirectory(String filePath){ - } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java index b976f417..148e5fc3 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumHandler.java @@ -5,6 +5,7 @@ import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.base.enums.DataType; import org.jeecg.modules.email.EmailProperties; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.ftp.FTPUtils; import javax.mail.Message; import java.io.File; @@ -94,7 +95,7 @@ public abstract class SpectrumHandler extends Chain{ /** * 调用dll解析邮件 */ - protected abstract void parseingEmail(); + protected abstract void parseingEmail() throws Exception; /** * 保存能谱文件到ftp diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java index f4485823..8aacc32a 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java @@ -95,7 +95,7 @@ public class SpectrumParsingActuator implements Runnable{ mailContent = new StringBuilder(); emailServiceManager.getMailContent(message,mailContent); //所有邮件都需以.eml格式存储到ftp eml文件夹中 - downloadEmailToFtp(); +// downloadEmailToFtp(); //判断是否是IMS2.0协议文件 if(checkMailContent(mailContent,subject)){ SpectrumHandler spectrumHandler = new SamplephdSpectrum(); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java index 2a495bee..861eaa6b 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java @@ -59,4 +59,11 @@ public class SpectrumServiceQuotes { private final GardsNuclLinesIdedAutoService gardsNuclLinesIdedAutoService; private final GardsQcCheckAutoService gardsQcCheckAutoService; + + private final GardsXeResultsService xeResultsService; + + private final GardsRoiResultsService roiResultsService; + + private final GardsRoiChannelsService roiChannelsService; + }