From d39247d991d2388ea76dec5056a9e309738a0b62 Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Fri, 18 Aug 2023 11:10:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:1.=E5=AE=8C=E6=88=90=E5=90=84=E8=83=BD?= =?UTF-8?q?=E8=B0=B1=E5=8E=9F=E5=A7=8B=E5=BA=93=E6=95=B0=E6=8D=AE=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E3=80=81=E5=8E=9F=E5=A7=8Beml=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E3=80=81=E8=83=BD=E8=B0=B1=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E3=80=81=E9=82=AE=E4=BB=B6=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/email/EmailServiceManager.java | 14 +- .../properties/SpectrumPathProperties.java | 5 + .../java/org/jeecg/common/util/DateUtils.java | 16 ++ .../java/org/jeecg/common/util/FTPUtil.java | 9 +- .../original/GardsCalibrationPairsOrig.java | 2 +- .../base/entity/original/GardsMetData.java | 12 +- .../base/entity/original/GardsSampleData.java | 6 +- .../base/entity/original/GardsSohData.java | 6 +- .../base/entity/postgre/SysEmailLog.java | 6 - .../org/jeecg/modules/AutoProcessManager.java | 10 +- .../{email => }/EmailParsingActuator.java | 29 ++- .../config/datasource/DataSourceSwitcher.java | 25 ++ .../org/jeecg/modules/emuns/DataType.java | 65 +++++ .../org/jeecg/modules/emuns/SpectrumType.java | 46 ---- .../org/jeecg/modules/emuns/SystemType.java | 28 +++ .../modules/mapper/GardsAlertDataMapper.java | 7 + .../mapper/GardsBgEfficiencyPairsMapper.java | 7 + .../GardsCalibrationPairsOrigMapper.java | 7 + .../modules/mapper/GardsDetectorsMapper.java | 10 + .../modules/mapper/GardsHistogramMapper.java | 7 + .../modules/mapper/GardsMetDataMapper.java | 7 + .../modules/mapper/GardsRoiLimitsMapper.java | 7 + .../modules/mapper/GardsSampleAuxMapper.java | 7 + .../mapper/GardsSampleCertLineMapper.java | 7 + .../modules/mapper/GardsSampleCertMapper.java | 7 + .../modules/mapper/GardsSampleDataMapper.java | 8 + .../mapper/GardsSampleDescriptionMapper.java | 7 + .../mapper/GardsSampleRatiosMapper.java | 7 + .../modules/mapper/GardsSohDataMapper.java | 7 + .../modules/mapper/GardsSpectrumMapper.java | 7 + .../modules/mapper/GardsStationsMapper.java | 10 + .../GardsTotalEfficiencyPairsMapper.java | 7 + .../modules/mapper/SysMailLogMapper.java | 7 + .../native_jni/EnergySpectrumHandler.java | 26 ++ .../struct/AlertSpectrumStruct.java | 31 +++ .../struct/EnergySpectrumStruct.java | 229 +++++++++++++++--- .../native_jni/struct/MetSpectrumStruct.java | 71 ++++++ .../native_jni/struct/SOHSpectrumStruct.java | 67 +++++ .../service/IAlertSpectrumService.java | 18 ++ .../modules/service/IMetSpectrumService.java | 19 ++ .../modules/service/ISOHSpectrumService.java | 19 ++ .../service/ISpectrumBaseBlockService.java | 20 ++ .../service/ISpectrumBlockService.java | 17 ++ .../modules/service/ISysMailLogService.java | 19 ++ .../modules/service/ISysMailService.java | 3 +- .../impl/AlertSpectrumServiceImpl.java | 54 +++++ .../impl/B_EnergyBlockServiceImpl.java | 52 ++++ .../impl/B_G_EfficiencyBlockServiceImpl.java | 46 ++++ .../impl/B_ResolutionBlockServiceImpl.java | 51 ++++ .../impl/B_SpectrumBlockServiceImpl.java | 37 +++ .../impl/CertificateBlockServiceImpl.java | 74 ++++++ .../service/impl/CommentBlockServiceImpl.java | 30 +++ .../impl/G_EfficiencyBlockServiceImpl.java | 51 ++++ .../impl/G_EnergyBlockServiceImpl.java | 51 ++++ .../impl/G_ResolutionBlockServiceImpl.java | 51 ++++ .../impl/G_SpectrumBlockServiceImpl.java | 37 +++ .../impl/HistogramBlockServiceImpl.java | 35 +++ .../service/impl/MetSpectrumServiceImpl.java | 73 ++++++ .../impl/ROI_LimitsBlockServiceImpl.java | 47 ++++ .../service/impl/RatiosBlockServiceImpl.java | 47 ++++ .../service/impl/SOHSpectrumServiceImpl.java | 79 ++++++ .../impl/SpectrumBaseBlockServiceImpl.java | 136 +++++++++++ .../service/impl/SysMailLogServiceImpl.java | 32 +++ .../impl/TotalEffBlockServiceImpl.java | 45 ++++ .../jeecg/modules/spectrum/AlertSpectrum.java | 114 ++++++--- .../modules/spectrum/DetbkphdSpectrum.java | 57 ++--- .../jeecg/modules/spectrum/EmailCounter.java | 26 ++ .../modules/spectrum/GasbkphdSpectrum.java | 61 +++-- .../spectrum/HealthStatusSpectrum.java | 114 ++++++--- .../jeecg/modules/spectrum/MetSpectrum.java | 110 ++++++--- .../jeecg/modules/spectrum/QcphdSpectrum.java | 59 ++--- .../spectrum/S_D_Q_G_SpectrumHandler.java | 127 ++++++++++ .../modules/spectrum/SamplephdSpectrum.java | 56 ++--- .../modules/spectrum/SpectrumHandler.java | 140 ++++++++--- .../spectrum/SpectrumParsingActuator.java | 176 ++++++++++---- .../spectrum/SpectrumServiceQuotes.java | 44 ++++ .../modules/spectrum/SpecturmDataStorage.java | 14 -- .../src/main/resources/application.yml | 2 +- 78 files changed, 2651 insertions(+), 428 deletions(-) rename jeecg-module-auto-process/src/main/java/org/jeecg/modules/{email => }/EmailParsingActuator.java (67%) create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/config/datasource/DataSourceSwitcher.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/DataType.java delete mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SpectrumType.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SystemType.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsAlertDataMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsBgEfficiencyPairsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationPairsOrigMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsDetectorsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsHistogramMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsMetDataMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiLimitsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleAuxMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertLineMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDescriptionMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleRatiosMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSohDataMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSpectrumMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsStationsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsTotalEfficiencyPairsMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/SysMailLogMapper.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/AlertSpectrumStruct.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/MetSpectrumStruct.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/SOHSpectrumStruct.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IAlertSpectrumService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IMetSpectrumService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISOHSpectrumService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBaseBlockService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBlockService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailLogService.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/AlertSpectrumServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_EnergyBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_G_EfficiencyBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_ResolutionBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_SpectrumBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CertificateBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CommentBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_EfficiencyBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_EnergyBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_ResolutionBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_SpectrumBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/HistogramBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/MetSpectrumServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/ROI_LimitsBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/RatiosBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SOHSpectrumServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SysMailLogServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/TotalEffBlockServiceImpl.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/EmailCounter.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java delete mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpecturmDataStorage.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 dc67e62a..8d4634b5 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 @@ -210,12 +210,14 @@ public class EmailServiceManager { * @throws IOException */ public void getMailContent(@NotNull Part part, StringBuilder content) throws MessagingException, IOException { - Multipart multipart = (Multipart) part.getContent(); - for(int i=0;i systemCores?taskProperties.getReceiveNum():systemCores; + //初始化线程池 ThreadFactory threadFactory = new CustomizableThreadFactory("mail-parsing-"); - poolExecutor = new ThreadPoolExecutor(taskProperties.getReceiveNum(),taskProperties.getReceiveNum()*2,5, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),threadFactory); + poolExecutor = new ThreadPoolExecutor(taskProperties.getReceiveNum(),maximumPoolSize,5, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),threadFactory); } @Override @@ -38,17 +48,20 @@ public class EmailParsingActuator extends Thread{ try { final Message[] messages = emailServiceManager.receiveMail(); if(ArrayUtils.isNotEmpty(messages)){ - System.out.println(messages.length); CountDownLatch taskLatch = new CountDownLatch(messages.length); for(Message message : messages){ SpectrumParsingActuator spectrumParsingActuator = new SpectrumParsingActuator(); - spectrumParsingActuator.init(message,emailProperties,emailServiceManager,ftpUtil,taskLatch); + spectrumParsingActuator.init(message,emailProperties,emailServiceManager, + taskLatch,spectrumServiceQuotes,emailCounter); poolExecutor.execute(spectrumParsingActuator); } taskLatch.await(); } }catch (MessagingException | InterruptedException e) { e.printStackTrace(); + }finally { + //关闭资源 + emailServiceManager.close(); } long end = System.currentTimeMillis(); long sleepTime = taskProperties.getMailThreadExecCycle() - (end-start); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/config/datasource/DataSourceSwitcher.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/config/datasource/DataSourceSwitcher.java new file mode 100644 index 00000000..e227899f --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/config/datasource/DataSourceSwitcher.java @@ -0,0 +1,25 @@ +package org.jeecg.modules.config.datasource; + +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; + +/** + * 数据源切换器 + */ +public class DataSourceSwitcher { + + private final static String ORACLE = "ora"; + + private final static String PGSQL = "master"; + + public static void switchToOracle(){ + DynamicDataSourceContextHolder.push(ORACLE); + } + + public static void switchToPGSql(){ + DynamicDataSourceContextHolder.push(PGSQL); + } + + public static void clearDataSource(){ + DynamicDataSourceContextHolder.clear(); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/DataType.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/DataType.java new file mode 100644 index 00000000..45fb321d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/DataType.java @@ -0,0 +1,65 @@ +package org.jeecg.modules.emuns; + +/** + * 邮件类型 + */ +public enum DataType { + + /** + * 气象谱 + */ + MET("MET",".met"), + /** + * 警告谱 + */ + ALERT_UPS("ALERT_UPS",".alt"), + /** + * 警告谱 + */ + ALERT_SYSTEM("ALERT_SYSTEM",".alt"), + /** + * 警告谱 + */ + ALERT_TEMP("ALERT_TEMP",".alt"), + /** + * 警告谱 + */ + ALERT_FLOW("ALERT_FLOW",".alt"), + /** + * 健康状态谱 + */ + SOH("RMSSOH",".soh"), + /** + * 样品谱 + */ + SAMPLEPHD("SAMPLEPHD",".PHD"), + /** + * 探测器本地谱 + */ + DETBKPHD("DETBKPHD",".PHD"), + /** + * QC谱 + */ + QCPHD("QCPHD",".PHD"), + /** + * 气体谱 + */ + GASBKPHD("GASBKPHD",".PHD"); + + private String type; + + private String suffix; + + DataType(String type, String suffix) { + this.type = type; + this.suffix = suffix; + } + + public String getType(){ + return this.type; + } + + public String getSuffix(){ + return this.suffix; + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SpectrumType.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SpectrumType.java deleted file mode 100644 index 2dd23f47..00000000 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SpectrumType.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.jeecg.modules.emuns; - -/** - * 邮件类型 - */ -public enum SpectrumType { - - /** - * 气象谱 - */ - MET("MET"), - /** - * 警告谱 - */ - ALERT("ALERT_UPS"), - /** - * 健康状态谱 - */ - SOH("RMSSOH"), - /** - * 样品谱 - */ - SAMPLEPHD("SAMPLEPHD"), - /** - * 探测器本地谱 - */ - DETBKPHD("DETBKPHD"), - /** - * QC谱 - */ - QCPHD("QCPHD"), - /** - * 气体谱 - */ - GASBKPHD("GASBKPHD"); - - private String type; - - SpectrumType(String type) { - this.type = type; - } - - public String getType(){ - return this.type; - } -} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SystemType.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SystemType.java new file mode 100644 index 00000000..841eefdb --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/emuns/SystemType.java @@ -0,0 +1,28 @@ +package org.jeecg.modules.emuns; + +public enum SystemType { + + /** + * 颗粒物 + */ + PARTICULATE("P"), + /** + * β-γ + */ + BETA("B"), + /** + * γ + */ + GAMMA("G"); + + private String type; + + SystemType(String type) { + this.type = type; + } + + public String getType(){ + return this.type; + } + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsAlertDataMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsAlertDataMapper.java new file mode 100644 index 00000000..09ff3074 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsAlertDataMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsAlertData; + +public interface GardsAlertDataMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsBgEfficiencyPairsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsBgEfficiencyPairsMapper.java new file mode 100644 index 00000000..f72fad43 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsBgEfficiencyPairsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsBgEfficiencyPairs; + +public interface GardsBgEfficiencyPairsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationPairsOrigMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationPairsOrigMapper.java new file mode 100644 index 00000000..fac494db --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsCalibrationPairsOrigMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsCalibrationPairsOrig; + +public interface GardsCalibrationPairsOrigMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsDetectorsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsDetectorsMapper.java new file mode 100644 index 00000000..abce3ea5 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsDetectorsMapper.java @@ -0,0 +1,10 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.configuration.GardsDetectors; + +/** + * 台站的探测器信息数据表Mapper + */ +public interface GardsDetectorsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsHistogramMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsHistogramMapper.java new file mode 100644 index 00000000..073419c8 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsHistogramMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsHistogram; + +public interface GardsHistogramMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsMetDataMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsMetDataMapper.java new file mode 100644 index 00000000..71927446 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsMetDataMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsMetData; + +public interface GardsMetDataMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiLimitsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiLimitsMapper.java new file mode 100644 index 00000000..7a0d900e --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsRoiLimitsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsRoiLimits; + +public interface GardsRoiLimitsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleAuxMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleAuxMapper.java new file mode 100644 index 00000000..07e5fb38 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleAuxMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSampleAux; + +public interface GardsSampleAuxMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertLineMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertLineMapper.java new file mode 100644 index 00000000..2652a089 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertLineMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSampleCertLine; + +public interface GardsSampleCertLineMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertMapper.java new file mode 100644 index 00000000..8bd77ef0 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleCertMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSampleCert; + +public interface GardsSampleCertMapper 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 new file mode 100644 index 00000000..a0d9c341 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDataMapper.java @@ -0,0 +1,8 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSampleData; + +public interface GardsSampleDataMapper extends BaseMapper { + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDescriptionMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDescriptionMapper.java new file mode 100644 index 00000000..1e1ff9a5 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleDescriptionMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSampleDescription; + +public interface GardsSampleDescriptionMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleRatiosMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleRatiosMapper.java new file mode 100644 index 00000000..87c424fc --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSampleRatiosMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSampleRatios; + +public interface GardsSampleRatiosMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSohDataMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSohDataMapper.java new file mode 100644 index 00000000..9421af5a --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSohDataMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSohData; + +public interface GardsSohDataMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSpectrumMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSpectrumMapper.java new file mode 100644 index 00000000..2fafc897 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsSpectrumMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsSpectrum; + +public interface GardsSpectrumMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsStationsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsStationsMapper.java new file mode 100644 index 00000000..d7c2eb97 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsStationsMapper.java @@ -0,0 +1,10 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.configuration.GardsStations; + +/** + * 台站数据表Mapper + */ +public interface GardsStationsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsTotalEfficiencyPairsMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsTotalEfficiencyPairsMapper.java new file mode 100644 index 00000000..508f8731 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/GardsTotalEfficiencyPairsMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.original.GardsTotalEfficiencyPairs; + +public interface GardsTotalEfficiencyPairsMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/SysMailLogMapper.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/SysMailLogMapper.java new file mode 100644 index 00000000..634646db --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/mapper/SysMailLogMapper.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.postgre.SysEmailLog; + +public interface SysMailLogMapper extends BaseMapper { +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/EnergySpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/EnergySpectrumHandler.java index 34f30db1..f956fb59 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/EnergySpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/EnergySpectrumHandler.java @@ -1,6 +1,11 @@ package org.jeecg.modules.native_jni; +import org.jeecg.modules.native_jni.struct.AlertSpectrumStruct; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.native_jni.struct.MetSpectrumStruct; +import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct; + +import java.util.List; /** * 能谱处理本地类 @@ -13,4 +18,25 @@ public class EnergySpectrumHandler { * @return 能谱原始数据 */ public static native EnergySpectrumStruct getSourceData(String path); + + /** + * 获取健康状态谱原始数据 + * @param path 能谱文件路径 + * @return 能谱原始数据 + */ + public static native SOHSpectrumStruct getSOHSourceData(String path); + + /** + * 获取警告谱原始数据 + * @param path 能谱文件路径 + * @return 能谱原始数据 + */ + public static native AlertSpectrumStruct getAlertSourceData(String path); + + /** + * 获取气象谱原始数据 + * @param path 能谱文件路径 + * @return 能谱原始数据 + */ + public static native MetSpectrumStruct getMetSourceData(String path); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/AlertSpectrumStruct.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/AlertSpectrumStruct.java new file mode 100644 index 00000000..91fc8d59 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/AlertSpectrumStruct.java @@ -0,0 +1,31 @@ +package org.jeecg.modules.native_jni.struct; + +/** + * 警告谱结构体 + */ +public class AlertSpectrumStruct { + + public String station_code; + + public String alert_type; + + public String date; + + public String time; + + public String desc; + + public AlertSpectrumStruct() { + } + + @Override + public String toString() { + return "AlertSpectrumStruct{" + + "station_code='" + station_code + '\'' + + ", alert_type='" + alert_type + '\'' + + ", date='" + date + '\'' + + ", time='" + time + '\'' + + ", desc='" + desc + '\'' + + '}'; + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java index d090ed0d..391c6057 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/EnergySpectrumStruct.java @@ -71,6 +71,10 @@ public class EnergySpectrumStruct { */ public String transmit_time; + /************************* Sample ******************/ + public double dimension_1; + public double dimension_2; + /************************* Comment ******************/ public String comment; @@ -263,7 +267,7 @@ public class EnergySpectrumStruct { /** * ROI number */ - public List bg_ROI_number; + public List bg_ROI_number; /** * β-γ coincidence efficiency (counts in ROI/β-γ pair emitted) */ @@ -357,46 +361,199 @@ public class EnergySpectrumStruct { */ public List 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=1]"; + 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 + '\'' + + ", dimension_1=" + dimension_1 + + ", dimension_2=" + dimension_2 + + ", 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 + + ", t_g_energy=" + t_g_energy + + ", total_efficiency=" + total_efficiency + + ", t_uncertainty=" + t_uncertainty + + ", t_record_count=" + t_record_count + + '}'; + } + + public static void main(String[] args) { + EnergySpectrumStruct s = new EnergySpectrumStruct(); + System.out.println(s); + System.out.println(s.gas_bk_measurement_id); } } \ No newline at end of file diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/MetSpectrumStruct.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/MetSpectrumStruct.java new file mode 100644 index 00000000..6364d2e2 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/MetSpectrumStruct.java @@ -0,0 +1,71 @@ +package org.jeecg.modules.native_jni.struct; + +import java.util.List; + +/** + * 气象谱结构体 + */ +public class MetSpectrumStruct { + + public String station_code; + /** + * met start date (yyyy/mm/dd) + */ + public List met_start_date; + /** + * met start time (hh:mm:ss) + */ + public List met_start_time; + /** + * met end date (yyyy/mm/dd)= + */ + public List met_end_date; + /** + * met end time (hh:mm:ss) + */ + public List met_end_time; + /** + * average outside temperature (°C) + */ + public List average_outside_temperature; + /** + * average wind-direction (degrees from north) + */ + public List average_wind_direction; + /** + * average wind-speed (m/s) + */ + public List average_wind_speed; + /** + * average barometric reading (hPa) + */ + public List average_barometric_reading; + /** + * average relative humidity (percent relative humidity) + */ + public List humidity; + /** + * rainfall (mm) + */ + public List rainfall; + + public int record_count; + + @Override + public String toString() { + return "MetSpectrumStruct{" + + "station_code='" + station_code + '\'' + + ", met_start_date=" + met_start_date + + ", met_start_time=" + met_start_time + + ", met_end_date=" + met_end_date + + ", met_end_time=" + met_end_time + + ", average_outside_temperature=" + average_outside_temperature + + ", average_wind_direction=" + average_wind_direction + + ", average_wind_speed=" + average_wind_speed + + ", average_barometric_reading=" + average_barometric_reading + + ", humidity=" + humidity + + ", rainfall=" + rainfall + + ", record_count=" + record_count + + '}'; + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/SOHSpectrumStruct.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/SOHSpectrumStruct.java new file mode 100644 index 00000000..ddca7d0d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/native_jni/struct/SOHSpectrumStruct.java @@ -0,0 +1,67 @@ +package org.jeecg.modules.native_jni.struct; + +import java.util.List; + +/** + * 健康状态谱结构体 + */ +public class SOHSpectrumStruct { + + /** + * station code + */ + public String station_code; + /** + * detector code or NA if 1) there is more than one detector or 2) data are from the sam-pling site of a split station + */ + public String detector_code; + /** + * SOH data sampling period start date (yyyy/mm/dd) + */ + public String start_date; + /** + * SOH data sampling period start time (hh:mm:ss) + */ + public String start_time; + /* Air Sampler Flow block */ + /** + * average flow rate (standard cubic metersper hour (scm/h)) + */ + public List average_flow_rate; + /** + * flow rate standard deviation (scm/h) + */ + public List flow_rate_standard_deviation; + /** + * SOH data sampling interval start date (yyyy/mm/dd) + */ + public List af_start_date; + /** + * SOH data sampling interval start time (hh:mm:ss) + */ + public List af_start_time; + /** + * SOH data sampling interval duration (s) + */ + public List af_interval_duration; + + public int af_record_count; + + public SOHSpectrumStruct() { + super(); + } + + @Override + public String toString() { + return "SOHSpectrumStruct{" + + "station_code='" + station_code + '\'' + + ", detector_code='" + detector_code + '\'' + + ", average_flow_rate=" + average_flow_rate + + ", flow_rate_standard_deviation=" + flow_rate_standard_deviation + + ", af_start_date=" + af_start_date + + ", af_start_time=" + af_start_time + + ", af_interval_duration=" + af_interval_duration + + ", af_record_count=" + af_record_count + + '}'; + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IAlertSpectrumService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IAlertSpectrumService.java new file mode 100644 index 00000000..5f21c43a --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IAlertSpectrumService.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.original.GardsAlertData; +import org.jeecg.modules.native_jni.struct.AlertSpectrumStruct; + +/** + * 报警谱处理 + */ +public interface IAlertSpectrumService extends IService { + + /** + * 保存报警谱信息 + * @param struct + * @param fileName + */ + public void create(AlertSpectrumStruct struct,String fileName) throws Exception; +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IMetSpectrumService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IMetSpectrumService.java new file mode 100644 index 00000000..8176ea71 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/IMetSpectrumService.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.original.GardsMetData; +import org.jeecg.modules.native_jni.struct.MetSpectrumStruct; + +/** + * 处理气象谱 + */ +public interface IMetSpectrumService extends IService { + + /** + * 保存气象谱数据 + * @param struct + * @param fileName + * @throws Exception + */ + public void create(MetSpectrumStruct struct,String fileName) throws Exception; +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISOHSpectrumService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISOHSpectrumService.java new file mode 100644 index 00000000..8539705d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISOHSpectrumService.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.original.GardsSohData; +import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct; + +/** + * 健康谱数据处理 + */ +public interface ISOHSpectrumService extends IService { + + /** + * 保存健康谱数据 + * @param struct + * @param fileName + * @throws Exception + */ + public void create(SOHSpectrumStruct struct,String fileName) throws Exception; +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBaseBlockService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBaseBlockService.java new file mode 100644 index 00000000..87ea970f --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBaseBlockService.java @@ -0,0 +1,20 @@ +package org.jeecg.modules.service; + +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; + +/** + * 处理能谱文件块数据,GardsSampleData、GardsSampleAux + */ +public interface ISpectrumBaseBlockService { + + /** + * 保存块数据 + * 不添加事务注解由调用方手动事务提交 + * @param struct + * @param fileName + * @return + * @throws Exception + */ + public GardsSampleData create(EnergySpectrumStruct struct,String fileName) throws Exception; +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBlockService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBlockService.java new file mode 100644 index 00000000..5539f48c --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISpectrumBlockService.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.service; + +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; + +/** + * 处理能谱文件块数据,除GardsSampleData、GardsSampleAux + */ +public interface ISpectrumBlockService { + /** + * 保存块数据 + * 不添加事务注解由调用方手动事务提交 + * @param struct + * @param sampleData + */ + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData) throws Exception; +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailLogService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailLogService.java new file mode 100644 index 00000000..eafbf93a --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailLogService.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.base.entity.postgre.SysEmailLog; +import org.jeecg.modules.email.EmailProperties; +import javax.mail.Message; + +/** + * 邮件处理日志 + */ +public interface ISysMailLogService extends IService { + + /** + * 创建邮箱日志 + * @param message + * @param email + */ + public void create(Message message,EmailProperties email) throws Exception; +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailService.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailService.java index 16757886..e1fb7d0d 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailService.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/ISysMailService.java @@ -14,5 +14,6 @@ public interface ISysMailService extends IService { * 查询接收邮箱数据 * @return */ - List findReceiveMails(); + public List findReceiveMails(); + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/AlertSpectrumServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/AlertSpectrumServiceImpl.java new file mode 100644 index 00000000..63be0c09 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/AlertSpectrumServiceImpl.java @@ -0,0 +1,54 @@ +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 lombok.RequiredArgsConstructor; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.base.entity.configuration.GardsStations; +import org.jeecg.modules.base.entity.original.GardsAlertData; +import org.jeecg.modules.mapper.GardsAlertDataMapper; +import org.jeecg.modules.mapper.GardsStationsMapper; +import org.jeecg.modules.native_jni.struct.AlertSpectrumStruct; +import org.jeecg.modules.service.IAlertSpectrumService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; + +/** + * 报警谱处理 + */ +@Service +@DS("ora") +@RequiredArgsConstructor +public class AlertSpectrumServiceImpl extends ServiceImpl implements IAlertSpectrumService { + + private final GardsStationsMapper gardsStationsMapper; + + /** + * 保存报警谱信息 + * + * @param struct + * @param fileName + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void create(AlertSpectrumStruct struct, String fileName) throws Exception{ + Assert.notNull(struct.station_code,"此次解析结构体中的台站“台站代码”为空"); + + LambdaQueryWrapper gardsStationsQuery = new LambdaQueryWrapper<>(); + gardsStationsQuery.select(GardsStations::getStationId); + gardsStationsQuery.eq(GardsStations::getStationCode,struct.station_code); + final GardsStations stations = gardsStationsMapper.selectOne(gardsStationsQuery); + Assert.notNull(stations,"此台站代码:"+struct.station_code+"所属台站不存在"); + + GardsAlertData alertData = new GardsAlertData(); + alertData.setStationId(stations.getStationId()); + alertData.setStationCode(struct.station_code); + alertData.setTime(DateUtils.parseDate(struct.date+" "+struct.time)); + alertData.setAlertType(struct.alert_type); + alertData.setAlertText(struct.desc); + alertData.setInputFileName(fileName); + this.save(alertData); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_EnergyBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_EnergyBlockServiceImpl.java new file mode 100644 index 00000000..be1f2bb8 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/B_EnergyBlockServiceImpl.java @@ -0,0 +1,52 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.jeecg.modules.base.entity.original.GardsCalibrationPairsOrig; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.mapper.GardsCalibrationPairsOrigMapper; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * #b_Energy块 + */ +@Service("#b_Energy") +public class B_EnergyBlockServiceImpl extends ServiceImpl implements ISpectrumBlockService { + + private final static String PHD = "PHD"; + private final static String SYSTEMTYPE_B = "B"; + private final static String ENERGY_CAL = "ENERGY_CAL"; + + /** + * #b_Energy数据块中的刻度点。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData){ + if(struct.b_record_count > 0){ + List list = Lists.newArrayList(); + for (int i=0;i implements ISpectrumBlockService { + + /** + * 保存β-γ符合谱中#b-gEfficiency数据块中的探测器符合效率刻度点。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData) { + List list = Lists.newArrayList(); + if(struct.bg_record_count > 0){ + for(int i=0;i implements ISpectrumBlockService { + + private final static String PHD = "PHD"; + private final static String SYSTEMTYPE_B = "B"; + private final static String RESOLUTION_CAL = "Resolution"; + + /** + * #b_Resolution数据块中的刻度点。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData){ + if(struct.b_r_record_count > 0){ + List list = Lists.newArrayList(); + for (int i=0;i implements ISpectrumBlockService { + + private final static String SYSTEMTYPE_B = "B"; + + /** + * #b_Spectrum数据块中的数据。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData) { + GardsSpectrum spectrum = new GardsSpectrum(); + spectrum.setSampleId(sampleData.getSampleId()); + spectrum.setSampleType(SYSTEMTYPE_B); + spectrum.setFilename(sampleData.getInputFileName()); + spectrum.setChannels((int)struct.num_b_channel); + spectrum.setEnergySpan((int)struct.b_energy_span); + spectrum.setStartChannel((int)struct.b_begin_channel); + spectrum.setModdate(new Date()); + this.save(spectrum); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CertificateBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CertificateBlockServiceImpl.java new file mode 100644 index 00000000..85f83054 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CertificateBlockServiceImpl.java @@ -0,0 +1,74 @@ +package org.jeecg.modules.service.impl; + +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.base.entity.original.GardsSampleCert; +import org.jeecg.modules.base.entity.original.GardsSampleCertLine; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.mapper.GardsSampleCertLineMapper; +import org.jeecg.modules.mapper.GardsSampleCertMapper; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.stereotype.Service; + +/** + * #Certificate块 + */ +@Service("#Certificate") +@RequiredArgsConstructor +public class CertificateBlockServiceImpl implements ISpectrumBlockService { + + private final GardsSampleCertMapper sampleCertMapper; + private final GardsSampleCertLineMapper sampleCertLine; + + /** + * QCPHD 和 CALIBPHD谱中#CERTIFICATE数据块中的内容。 + * @param struct + * @param sampleData + * @throws Exception + */ + @Override + public void create(EnergySpectrumStruct struct, GardsSampleData sampleData) throws Exception { + this.saveSampleCert(struct,sampleData); + this.saveSampleCertLine(struct,sampleData); + } + + /** + * 保存GardsSampleCert数据表数据 + * @param struct + * @param sampleData + */ + private void saveSampleCert(EnergySpectrumStruct struct, GardsSampleData sampleData)throws Exception{ + GardsSampleCert sampleCert = new GardsSampleCert(); + sampleCert.setSampleId(sampleData.getSampleId()); + sampleCert.setQuantity(struct.total_source_activity); + if(StringUtils.isNotBlank(struct.assay_date) && StringUtils.isNotBlank(struct.assay_time)){ + sampleCert.setAssayDate(DateUtils.parseDate(struct.assay_date+" "+struct.assay_time)); + } + sampleCert.setUnit(struct.units_activity); + + this.sampleCertMapper.insert(sampleCert); + } + + private void saveSampleCertLine(EnergySpectrumStruct struct,GardsSampleData sampleData) { + if(struct.record_count > 0){ + for(int i=0;i implements ISpectrumBlockService { + + /** + * 保存#Comment块台站注释 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData){ + GardsSampleDescription description = new GardsSampleDescription(); + description.setSampleId(sampleData.getSampleId()); + description.setDescription(struct.comment); + this.save(description); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_EfficiencyBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_EfficiencyBlockServiceImpl.java new file mode 100644 index 00000000..b6aab609 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/G_EfficiencyBlockServiceImpl.java @@ -0,0 +1,51 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.jeecg.modules.base.entity.original.GardsCalibrationPairsOrig; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.mapper.GardsCalibrationPairsOrigMapper; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * #g_Efficiency块 + */ +@Service("#g_Efficiency") +public class G_EfficiencyBlockServiceImpl extends ServiceImpl implements ISpectrumBlockService { + + private final static String PHD = "PHD"; + private final static String SYSTEMTYPE_G = "G"; + private final static String EFFICIENCY_CAL ="efficiency"; + + /** + * #g_efficiency数据块中的刻度点。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData){ + if(struct.g_e_record_count > 0){ + List list = Lists.newArrayList(); + for (int i=0;i implements ISpectrumBlockService { + + private final static String PHD = "PHD"; + private final static String SYSTEMTYPE_G = "G"; + private final static String ENERGY_CAL = "ENERGY_CAL"; + + /** + * #g_energy数据块中的刻度点。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData){ + if(struct.g_record_count > 0){ + List list = Lists.newArrayList(); + for (int i=0;i implements ISpectrumBlockService { + + private final static String PHD = "PHD"; + private final static String SYSTEMTYPE_G = "G"; + private final static String RESOLUTION_CAL = "Resolution"; + + /** + * #g_Resolution数据块中的刻度点。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData){ + if(struct.g_r_record_count > 0){ + List list = Lists.newArrayList(); + for (int i=0;i implements ISpectrumBlockService { + + private final static String SYSTEMTYPE_G = "G"; + + /** + * #G_Spectrum数据块中的数据。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData) { + GardsSpectrum spectrum = new GardsSpectrum(); + spectrum.setSampleId(sampleData.getSampleId()); + spectrum.setSampleType(SYSTEMTYPE_G); + spectrum.setFilename(sampleData.getInputFileName()); + spectrum.setChannels((int)struct.num_g_channel); + spectrum.setEnergySpan((int)struct.g_energy_span); + spectrum.setStartChannel((int)struct.g_begin_channel); + spectrum.setModdate(new Date()); + this.save(spectrum); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/HistogramBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/HistogramBlockServiceImpl.java new file mode 100644 index 00000000..911ccfba --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/HistogramBlockServiceImpl.java @@ -0,0 +1,35 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.base.entity.original.GardsHistogram; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.mapper.GardsHistogramMapper; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.stereotype.Service; +import java.util.Date; + +/** + *#Histogram块 + */ +@Service("#Histogram") +public class HistogramBlockServiceImpl extends ServiceImpl implements ISpectrumBlockService { + + /** + * β-γ符合谱中#histogram数据块中的数据。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct, GardsSampleData sampleData) { + GardsHistogram histogram = new GardsHistogram(); + histogram.setSampleId(sampleData.getSampleId()); + histogram.setFilename(sampleData.getInputFileName()); + histogram.setGChannels((int)struct.g_channels); + histogram.setBChannels((int)struct.b_channels); + histogram.setGEnergySpan((int)struct.g_energy_span); + histogram.setBEnergySpan((int)struct.b_energy_span); + histogram.setModdate(new Date()); + this.save(histogram); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/MetSpectrumServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/MetSpectrumServiceImpl.java new file mode 100644 index 00000000..65216479 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/MetSpectrumServiceImpl.java @@ -0,0 +1,73 @@ +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 lombok.RequiredArgsConstructor; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.base.entity.configuration.GardsStations; +import org.jeecg.modules.base.entity.original.GardsMetData; +import org.jeecg.modules.mapper.GardsMetDataMapper; +import org.jeecg.modules.mapper.GardsStationsMapper; +import org.jeecg.modules.native_jni.struct.MetSpectrumStruct; +import org.jeecg.modules.service.IMetSpectrumService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; + +/** + * 处理气象谱 + */ +@Service +@DS("ora") +@RequiredArgsConstructor +public class MetSpectrumServiceImpl extends ServiceImpl implements IMetSpectrumService { + + private final GardsStationsMapper gardsStationsMapper; + + /** + * 保存气象谱数据 + * @param struct + * @param fileName + * @throws Exception + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void create(MetSpectrumStruct struct,String fileName) throws Exception{ + Assert.notNull(struct.station_code,"此次解析结构体中的台站“台站代码”为空"); + + LambdaQueryWrapper gardsStationsQuery = new LambdaQueryWrapper<>(); + gardsStationsQuery.select(GardsStations::getStationId); + gardsStationsQuery.eq(GardsStations::getStationCode,struct.station_code); + final GardsStations stations = gardsStationsMapper.selectOne(gardsStationsQuery); + Assert.notNull(stations,"此台站代码:"+struct.station_code+"所属台站不存在"); + + if(struct.record_count > 0){ + List list = Lists.newArrayList(); + for(int i=0;i implements ISpectrumBlockService { + + /** + * 保存β-γ符合谱中#ROI_LMITS 数据块中的感兴趣区能量边界数据。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct, GardsSampleData sampleData) { + if(struct.roi_record_count > 0) { + List list = Lists.newArrayList(); + for (int i = 0; i < struct.roi_record_count; i++) { + GardsRoiLimits roiLimits = new GardsRoiLimits(); + roiLimits.setSampleId(sampleData.getSampleId()); + roiLimits.setRoi(Integer.valueOf(struct.ROI_number.get(i))); + roiLimits.setBEnergyStart(struct.POI_B_x1.get(i)); + roiLimits.setBEnergyStop(struct.POI_B_x2.get(i)); + roiLimits.setGEnergyStart(struct.POI_G_y1.get(i)); + roiLimits.setGEnergyStop(struct.POI_G_y2.get(i)); + roiLimits.setModdate(new Date()); + list.add(roiLimits); + } + if(CollectionUtils.isNotEmpty(list)){ + this.saveBatch(list); + } + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/RatiosBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/RatiosBlockServiceImpl.java new file mode 100644 index 00000000..76e29f94 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/RatiosBlockServiceImpl.java @@ -0,0 +1,47 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.base.entity.original.GardsSampleRatios; +import org.jeecg.modules.mapper.GardsSampleRatiosMapper; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +/** + * #Ratios块 + */ +@Service("#Ratios") +public class RatiosBlockServiceImpl extends ServiceImpl implements ISpectrumBlockService { + + /** + * β-γ符合谱中# Ratios 数据块中的感兴趣区相应核素的计数比率。 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct, GardsSampleData sampleData) { + if(struct.ratio_record_count > 0) { + List list = Lists.newArrayList(); + for (int i = 0; i < struct.ratio_record_count; i++) { + GardsSampleRatios sampleRatios = new GardsSampleRatios(); + sampleRatios.setSampleId(sampleData.getSampleId()); + sampleRatios.setRatioId(struct.ratio_id.get(i)); + sampleRatios.setUpperRoiNumber(Integer.valueOf(struct.ROI_num_highter_G_energy_ROI.get(i))); + sampleRatios.setLowerRoiNumber(Integer.valueOf(struct.ROI_num_lower_G_energy_ROI.get(i))); + sampleRatios.setCountRatio(struct.count_ratio.get(i)); + sampleRatios.setCountRatioErr(struct.count_ratio_uncertainty.get(i)); + sampleRatios.setModdate(new Date()); + list.add(sampleRatios); + } + if(CollectionUtils.isNotEmpty(list)){ + this.saveBatch(list); + } + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SOHSpectrumServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SOHSpectrumServiceImpl.java new file mode 100644 index 00000000..d4f0e67e --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SOHSpectrumServiceImpl.java @@ -0,0 +1,79 @@ +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 lombok.RequiredArgsConstructor; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.base.entity.configuration.GardsDetectors; +import org.jeecg.modules.base.entity.configuration.GardsStations; +import org.jeecg.modules.base.entity.original.GardsSohData; +import org.jeecg.modules.mapper.GardsDetectorsMapper; +import org.jeecg.modules.mapper.GardsSohDataMapper; +import org.jeecg.modules.mapper.GardsStationsMapper; +import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct; +import org.jeecg.modules.service.ISOHSpectrumService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; + +/** + * 健康谱数据处理 + */ +@DS("ora") +@Service +@RequiredArgsConstructor +public class SOHSpectrumServiceImpl extends ServiceImpl implements ISOHSpectrumService { + + private final GardsStationsMapper gardsStationsMapper; + private final GardsDetectorsMapper gardsDetectorsMapper; + + /** + * 保存健康谱数据 + * @param struct + * @param fileName + * @throws Exception + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void create(SOHSpectrumStruct struct,String fileName) throws Exception{ + Assert.notNull(struct.station_code,"此次解析结构体中的台站“台站代码”为空"); + Assert.notNull(struct.detector_code,"此次解析结构体中的台站“探测器代码”为空"); + + LambdaQueryWrapper gardsStationsQuery = new LambdaQueryWrapper<>(); + gardsStationsQuery.select(GardsStations::getStationId); + gardsStationsQuery.eq(GardsStations::getStationCode,struct.station_code); + final GardsStations stations = gardsStationsMapper.selectOne(gardsStationsQuery); + Assert.notNull(stations,"此台站代码:"+struct.station_code+"所属台站不存在"); + + LambdaQueryWrapper gardsGardsDetectorsQuery = new LambdaQueryWrapper<>(); + gardsGardsDetectorsQuery.select(GardsDetectors::getDetectorId); + gardsGardsDetectorsQuery.eq(GardsDetectors::getDetectorCode,struct.detector_code); + final GardsDetectors gardsDetectors = gardsDetectorsMapper.selectOne(gardsGardsDetectorsQuery); + Assert.notNull(gardsDetectors,"此探测器代码:"+struct.detector_code+"所属探测器不存在"); + List list = Lists.newArrayList(); + if(struct.af_record_count > 0){ + for(int i=0;i gardsStationsQuery = new LambdaQueryWrapper<>(); + gardsStationsQuery.select(GardsStations::getStationId); + gardsStationsQuery.eq(GardsStations::getStationCode,struct.site_code); + final GardsStations stations = gardsStationsMapper.selectOne(gardsStationsQuery); + Assert.notNull(stations,"此台站代码:"+struct.site_code+"所属台站不存在"); + + LambdaQueryWrapper gardsGardsDetectorsQuery = new LambdaQueryWrapper<>(); + gardsGardsDetectorsQuery.select(GardsDetectors::getDetectorId); + gardsGardsDetectorsQuery.eq(GardsDetectors::getDetectorCode,struct.detector_code); + final GardsDetectors gardsDetectors = gardsDetectorsMapper.selectOne(gardsGardsDetectorsQuery); + Assert.notNull(gardsDetectors,"此探测器代码:"+struct.detector_code+"所属探测器不存在"); + + GardsSampleData gardsSampleData = new GardsSampleData(); + gardsSampleData.setSiteDetCode(struct.detector_code); +// gardsSampleData.setSampleId();//数据库自增 + gardsSampleData.setStationId(stations.getStationId()); + gardsSampleData.setDetectorId(gardsDetectors.getDetectorId()); + gardsSampleData.setInputFileName(fileName); + gardsSampleData.setSampleType(struct.system_type); + gardsSampleData.setDataType(String.valueOf(struct.data_type.charAt(0))); + gardsSampleData.setGeometry(struct.sample_geometry); + gardsSampleData.setSpectralQualifie(struct.spectrum_quantity); + if(StringUtils.isNotBlank(struct.transmit_date) && StringUtils.isNotBlank(struct.transmit_time)){ + gardsSampleData.setTransmitDtg(DateUtils.parseDate(struct.transmit_date+" "+struct.transmit_time)); + } + if(StringUtils.isNotBlank(struct.collection_start_date) && StringUtils.isNotBlank(struct.collection_start_time)){ + gardsSampleData.setCollectStart(DateUtils.parseDate(struct.collection_start_date+" "+struct.collection_start_time)); + } + if(StringUtils.isNotBlank(struct.collection_stop_date) && StringUtils.isNotBlank(struct.collection_stop_time)){ + gardsSampleData.setCollectStart(DateUtils.parseDate(struct.collection_stop_date+" "+struct.collection_stop_time)); + } + 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)); + gardsSampleData.setAcquisitionStop(acquisitionStop); + } + gardsSampleData.setAcquisitionRealSec(struct.acquisition_real_time); + gardsSampleData.setAcquisitionLiveSec(struct.acquisition_live_time); + gardsSampleData.setQuantity(struct.air_volume); + gardsSampleData.setStatus(SampleStatus.UNTREATED.getValue()); + gardsSampleData.setModdate(new Date()); + + this.sampleDataMapper.insert(gardsSampleData); + + return gardsSampleData; + } + + /** + * 保存GardsSampleAux基础数据 + * @param sampleData + */ + private void saveSampleAux(EnergySpectrumStruct struct,GardsSampleData sampleData) throws Exception{ + GardsSampleAux gardsSampleAux = new GardsSampleAux(); + gardsSampleAux.setSampleId(sampleData.getSampleId()); + gardsSampleAux.setSampleRefId(struct.sample_ref_id); + gardsSampleAux.setMeasurementId(struct.measurement_id); + gardsSampleAux.setBkgdMeasurementId(struct.detector_bk_measurement_id); + gardsSampleAux.setGasBkgdMeasurementId(struct.gas_bk_measurement_id); + gardsSampleAux.setSampleHeight(struct.dimension_2); + gardsSampleAux.setSampleDiameter(struct.dimension_1); + if(StringUtils.isNotBlank(struct.date_calibration) && StringUtils.isNotBlank(struct.time_calibration)){ + gardsSampleAux.setCalibrationDtg(DateUtils.parseDate(struct.date_calibration+" "+struct.time_calibration)); + } + gardsSampleAux.setMsgId(struct.msg_id); + gardsSampleAux.setArchiveBottleId(struct.archive_bottle_id); + gardsSampleAux.setXeVolume(struct.sample_volume_of_Xe); + gardsSampleAux.setXeVolumeUncer(struct.uncertainty_1); + gardsSampleAux.setXeCollectionYied(struct.Xe_collection_yield); + gardsSampleAux.setXeCollectionYiedUncer(struct.uncertainty_2); + + this.sampleAuxMapper.insert(gardsSampleAux); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SysMailLogServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SysMailLogServiceImpl.java new file mode 100644 index 00000000..310e0fd2 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SysMailLogServiceImpl.java @@ -0,0 +1,32 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.base.entity.postgre.SysEmailLog; +import org.jeecg.modules.email.EmailProperties; +import org.jeecg.modules.mapper.SysMailLogMapper; +import org.jeecg.modules.service.ISysMailLogService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.mail.Message; +import javax.mail.internet.MimeUtility; +/** + * 邮件处理日志 + */ +@Service +public class SysMailLogServiceImpl extends ServiceImpl implements ISysMailLogService { + + /** + * 创建邮箱日志 + * @param message + * @param email + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void create(Message message,EmailProperties email) throws Exception { + SysEmailLog mailLog = new SysEmailLog(); + mailLog.setEmailId(email.getId()); + mailLog.setSubject(MimeUtility.decodeText(message.getSubject())); + mailLog.setReceiveTime(message.getReceivedDate()); + this.save(mailLog); + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/TotalEffBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/TotalEffBlockServiceImpl.java new file mode 100644 index 00000000..01137a5d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/TotalEffBlockServiceImpl.java @@ -0,0 +1,45 @@ +package org.jeecg.modules.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.compress.utils.Lists; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.base.entity.original.GardsTotalEfficiencyPairs; +import org.jeecg.modules.mapper.GardsTotalEfficiencyPairsMapper; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.List; + +/** + * #TotalEff块 + */ +@Service("#TotalEff") +public class TotalEffBlockServiceImpl extends ServiceImpl implements ISpectrumBlockService { + + /** + * 所有谱中#TotalEff 数据块中的探测器总效率刻度点,此数据块是可选项。 IDC没有 + * @param struct + * @param sampleData + */ + @Override + public void create(EnergySpectrumStruct struct,GardsSampleData sampleData) { + if(struct.t_record_count > 0){ + List list = Lists.newArrayList(); + for(int i=0;i=10?month:"0"+month); + super.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile)); + //设置FTP文件保存路径 + super.ftpSavePath = ftpPath+"/"+this.mailFile.getName(); +// FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8"); + } + + /** + * 对本地能谱临时文件进行改名 + */ + @Override + protected void updateSpectrumFileName() { + StringBuilder newFileName = new StringBuilder(); + newFileName.append(this.sourceData.station_code); + newFileName.append("_"); + newFileName.append(super.currDataType.getType()); + newFileName.append("-"); + newFileName.append(StringUtils.replace(this.sourceData.date,"/","")); + newFileName.append("_"); + newFileName.append(StringUtils.replace(this.sourceData.time,":","")); + newFileName.append(super.currDataType.getSuffix()); + mailFile = FileUtil.rename(mailFile,newFileName.toString(),true); + } + /** * 处理原始数据 - * - * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { - - } - - /** - * 转存本地邮件到FTP服务 - * - * @return - */ - @Override - protected void transferToFTP() { - + protected void handlerOriginalData() throws Exception { + spectrumServiceQuotes.getAlertSpectrumService().create(this.sourceData,super.ftpSavePath); } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java index 24706a49..77aa6c78 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java @@ -1,15 +1,13 @@ package org.jeecg.modules.spectrum; - -import org.jeecg.modules.emuns.SpectrumType; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.emuns.DataType; /** * 探测器本地谱处理 */ -public class DetbkphdSpectrum extends SpectrumHandler{ +@Slf4j +public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{ /** * 设置过滤链路 @@ -17,7 +15,8 @@ public class DetbkphdSpectrum extends SpectrumHandler{ @Override protected void setChina() { SpectrumHandler spectrumHandler = new QcphdSpectrum(); - spectrumHandler.init(super.filePath,super.ftpUtil,super.sourceData); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, + super.currDataType,super.message,super.emailProperties); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -26,43 +25,35 @@ public class DetbkphdSpectrum extends SpectrumHandler{ * 检查规则并处理数据 */ @Override - protected void handler() { - if(Objects.nonNull(super.sourceData) && SpectrumType.DETBKPHD.getType().equals(super.sourceData.data_type)){ - System.out.println("----------------------------------"); - System.out.println(SpectrumType.DETBKPHD.getType()); - System.out.println("----------------------------------"); + protected void handler() throws Exception { + if(DataType.DETBKPHD.getType().equals(super.currDataType.getType())){ + log.info("----------------------------------"); + log.info(super.currDataType.getType()); + log.info("----------------------------------"); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //保存email日志 + super.saveEmailLog(); + //删除本地临时文件 + super.deleteLocalTemporaryFile(); }else{ super.next.handler(); } } - /** - * 处理原始数据 - * - * @param struct - */ - @Override - protected void handlerOriginalData(EnergySpectrumStruct struct) { - - } - /** * 处理分析结果 * * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { - - } - - /** - * 转存本地邮件到FTP服务 - * - * @return - */ - @Override - protected void transferToFTP() { + protected void handlerAnalysisResult() { } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/EmailCounter.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/EmailCounter.java new file mode 100644 index 00000000..a6b1e62a --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/EmailCounter.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.spectrum; + +import org.springframework.stereotype.Component; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * 邮件计数器 + */ +@Component +public class EmailCounter { + + private Object lock = new Object(); + + private AtomicInteger emlCounter = new AtomicInteger(); + + public int getCurrValue(){ + synchronized (lock){ + final int currValue = emlCounter.getAndIncrement(); + if(currValue >= 10){ + emlCounter.set(0); + } + return currValue; + } + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java index bfe299e6..2da4da8f 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java @@ -1,42 +1,47 @@ package org.jeecg.modules.spectrum; -import org.jeecg.modules.emuns.SpectrumType; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.emuns.DataType; /** * 气体谱处理 */ -public class GasbkphdSpectrum extends SpectrumHandler{ +@Slf4j +public class GasbkphdSpectrum extends S_D_Q_G_SpectrumHandler{ /** * 设置过滤链路 */ @Override protected void setChina() { - + SpectrumHandler spectrumHandler = new MetSpectrum(); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, + super.currDataType,super.message,super.emailProperties); + spectrumHandler.setPrevious(this); + super.setNext(spectrumHandler); } /** * 检查规则并处理数据 */ @Override - protected void handler() { - - } - - /** - * 处理原始数据 - * - * @param struct - */ - @Override - protected void handlerOriginalData(EnergySpectrumStruct struct) { - if(Objects.nonNull(super.sourceData) && SpectrumType.GASBKPHD.getType().equals(super.sourceData.data_type)){ - System.out.println("----------------------------------"); - System.out.println(SpectrumType.GASBKPHD.getType()); - System.out.println("----------------------------------"); + protected void handler() throws Exception { + if(DataType.GASBKPHD.getType().equals(super.currDataType.getType())){ + log.info("----------------------------------"); + log.info(super.currDataType.getType()); + log.info("----------------------------------"); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //保存email日志 + super.saveEmailLog(); + //删除本地临时文件 + super.deleteLocalTemporaryFile(); }else{ super.next.handler(); } @@ -44,21 +49,9 @@ public class GasbkphdSpectrum extends SpectrumHandler{ /** * 处理分析结果 - * - * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { - - } - - /** - * 转存本地邮件到FTP服务 - * - * @return - */ - @Override - protected void transferToFTP() { + protected void handlerAnalysisResult() { } } 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 4171c947..640f7c2f 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 @@ -1,67 +1,117 @@ package org.jeecg.modules.spectrum; -import org.jeecg.modules.emuns.SpectrumType; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -import java.util.Objects; +import cn.hutool.core.io.FileUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.modules.emuns.DataType; +import org.jeecg.modules.native_jni.EnergySpectrumHandler; +import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct; +import java.io.FileInputStream; +import java.time.LocalDate; /** * 健康状态谱处理 */ +@Slf4j public class HealthStatusSpectrum extends SpectrumHandler{ + /** + * 解析后的数据 + */ + private SOHSpectrumStruct sourceData = null; + /** * 设置过滤链路 */ @Override protected void setChina() { - SpectrumHandler spectrumHandler = new SamplephdSpectrum(); - spectrumHandler.init(super.filePath,super.ftpUtil,super.sourceData); - spectrumHandler.setPrevious(this); - super.setNext(spectrumHandler); + } /** * 检查规则并处理数据 */ @Override - protected void handler() { - if(Objects.nonNull(super.sourceData) && SpectrumType.SOH.getType().equals(super.sourceData.data_type)){ - System.out.println("----------------------------------"); - System.out.println(SpectrumType.SOH.getType()); - System.out.println("----------------------------------"); - }else{ - super.next.handler(); + protected void handler() throws Exception { + if(DataType.SOH.getType().equals(super.currDataType.getType())){ + log.info("----------------------------------"); + log.info(super.currDataType.getType()); + log.info("----------------------------------"); + //解析邮件内容 + this.parseingEmail(); + //保存PHD文件到ftp + this.saveFileToFtp(); + //结构体数据入库 + this.handlerOriginalData(); + //保存email日志 + super.saveEmailLog(); + //删除本地临时文件 + super.deleteLocalTemporaryFile(); } } - /** - * 处理原始数据 - * - * @param struct - */ - @Override - protected void handlerOriginalData(EnergySpectrumStruct struct) { - - } - /** * 处理分析结果 - * - * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { + protected void handlerAnalysisResult() { } /** - * 转存本地邮件到FTP服务 - * - * @return + * 调用dll解析邮件 */ @Override - protected void transferToFTP() { + protected void parseingEmail() { + final SOHSpectrumStruct sourceData = EnergySpectrumHandler.getSOHSourceData(mailFile.getAbsolutePath()); + this.sourceData = sourceData; + } + /** + * 保存能谱文件到ftp + */ + @Override + protected void saveFileToFtp() throws Exception { + this.updateSpectrumFileName(); + //处理此文件需要保存到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.getFilePathMap().get(super.currDataType.getType())); + ftpPath.append("/"); + ftpPath.append(year); + ftpPath.append("/"); + ftpPath.append(month>=10?month:"0"+month); + super.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile)); + //设置FTP文件保存路径 + super.ftpSavePath = ftpPath+"/"+this.mailFile.getName(); +// FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8"); + } + + /** + * 对本地能谱临时文件进行改名 + */ + @Override + protected void updateSpectrumFileName() { + StringBuilder newFileName = new StringBuilder(); + newFileName.append(this.sourceData.station_code); + newFileName.append("_"); + newFileName.append(super.currDataType.getType()); + newFileName.append("-"); + newFileName.append(StringUtils.replace(this.sourceData.start_date,"/","")); + newFileName.append("_"); + newFileName.append(StringUtils.replace(this.sourceData.start_time,":","")); + newFileName.append(super.currDataType.getSuffix()); + mailFile = FileUtil.rename(mailFile,newFileName.toString(),true); + } + + /** + * 处理原始数据 + */ + @Override + protected void handlerOriginalData() throws Exception { + spectrumServiceQuotes.getSohSpectrumService().create(this.sourceData,super.ftpSavePath); } } 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 97acf9c7..a065fbb1 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 @@ -1,22 +1,34 @@ package org.jeecg.modules.spectrum; -import org.jeecg.modules.emuns.SpectrumType; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -import java.util.Objects; +import cn.hutool.core.io.FileUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.modules.emuns.DataType; +import org.jeecg.modules.native_jni.EnergySpectrumHandler; +import org.jeecg.modules.native_jni.struct.MetSpectrumStruct; +import java.io.FileInputStream; +import java.time.LocalDate; /** * 气象谱处理 */ +@Slf4j public class MetSpectrum extends SpectrumHandler{ + /** + * 解析后的数据 + */ + private MetSpectrumStruct sourceData = null; + /** * 设置过滤链路 */ @Override protected void setChina() { SpectrumHandler spectrumHandler = new AlertSpectrum(); - spectrumHandler.init(super.filePath,super.ftpUtil,super.sourceData); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, + super.currDataType,super.message,super.emailProperties); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -25,43 +37,87 @@ public class MetSpectrum extends SpectrumHandler{ * 检查规则并处理数据 */ @Override - protected void handler() { - if(Objects.nonNull(super.sourceData) && SpectrumType.MET.getType().equals(super.sourceData.data_type)){ - System.out.println("----------------------------------"); - System.out.println(SpectrumType.MET.getType()); - System.out.println("----------------------------------"); + protected void handler() throws Exception { + if(DataType.MET.getType().equals(super.currDataType.getType())){ + log.info("----------------------------------"); + log.info(super.currDataType.getType()); + log.info("----------------------------------"); + //解析邮件内容 + this.parseingEmail(); + //保存PHD文件到ftp + this.saveFileToFtp(); + //结构体数据入库 + this.handlerOriginalData(); + //保存email日志 + super.saveEmailLog(); + //删除本地临时文件 + super.deleteLocalTemporaryFile(); }else{ super.next.handler(); } } - /** - * 处理原始数据 - * - * @param struct - */ - @Override - protected void handlerOriginalData(EnergySpectrumStruct struct) { - - } - /** * 处理分析结果 - * - * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { + protected void handlerAnalysisResult() { } /** - * 转存本地邮件到FTP服务 - * - * @return + * 调用dll解析邮件 */ @Override - protected void transferToFTP() { + protected void parseingEmail() { + final MetSpectrumStruct sourceData = EnergySpectrumHandler.getMetSourceData(mailFile.getAbsolutePath()); + this.sourceData = sourceData; + } + /** + * 保存能谱文件到ftp + */ + @Override + protected void saveFileToFtp() throws Exception { + this.updateSpectrumFileName(); + //处理此文件需要保存到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.getFilePathMap().get(super.currDataType.getType())); + ftpPath.append("/"); + ftpPath.append(year); + ftpPath.append("/"); + ftpPath.append(month>=10?month:"0"+month); + super.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile)); + //设置FTP文件保存路径 + super.ftpSavePath = ftpPath+"/"+this.mailFile.getName(); + FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8"); + } + + /** + * 对本地能谱临时文件进行改名 + */ + @Override + protected void updateSpectrumFileName() { + StringBuilder newFileName = new StringBuilder(); + newFileName.append(this.sourceData.station_code); + newFileName.append("_"); + newFileName.append(super.currDataType.getType()); + newFileName.append("-"); + newFileName.append(StringUtils.replace(this.sourceData.met_start_date.get(0),"/","")); + newFileName.append("_"); + newFileName.append(StringUtils.replace(this.sourceData.met_start_time.get(0),":","")); + newFileName.append(super.currDataType.getSuffix()); + mailFile = FileUtil.rename(mailFile,newFileName.toString(),true); + } + + /** + * 处理原始数据 + */ + @Override + protected void handlerOriginalData() throws Exception { + spectrumServiceQuotes.getMetSpectrumService().create(this.sourceData,super.ftpSavePath); } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java index baa21a20..ebcc31c9 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java @@ -1,14 +1,13 @@ package org.jeecg.modules.spectrum; -import org.jeecg.modules.emuns.SpectrumType; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.emuns.DataType; /** * QC谱处理 */ -public class QcphdSpectrum extends SpectrumHandler{ +@Slf4j +public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{ /** * 设置过滤链路 @@ -16,7 +15,8 @@ public class QcphdSpectrum extends SpectrumHandler{ @Override protected void setChina() { SpectrumHandler spectrumHandler = new GasbkphdSpectrum(); - spectrumHandler.init(super.filePath,super.ftpUtil,super.sourceData); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, + super.currDataType,super.message,super.emailProperties); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -25,43 +25,34 @@ public class QcphdSpectrum extends SpectrumHandler{ * 检查规则并处理数据 */ @Override - protected void handler() { - if(Objects.nonNull(super.sourceData) && SpectrumType.QCPHD.getType().equals(super.sourceData.data_type)){ - System.out.println("----------------------------------"); - System.out.println(SpectrumType.QCPHD.getType()); - System.out.println("----------------------------------"); + protected void handler() throws Exception { + //判断当前邮件内容是否是QC谱 + if(DataType.QCPHD.getType().equals(super.currDataType.getType())){ + log.info("----------------------------------"); + log.info(super.currDataType.getType()); + log.info("----------------------------------"); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //保存email日志 + super.saveEmailLog(); + //删除本地临时文件 + super.deleteLocalTemporaryFile(); }else{ super.next.handler(); } } - /** - * 处理原始数据 - * - * @param struct - */ - @Override - protected void handlerOriginalData(EnergySpectrumStruct struct) { - - } - /** * 处理分析结果 - * - * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { - - } - - /** - * 转存本地邮件到FTP服务 - * - * @return - */ - @Override - protected void transferToFTP() { + protected void handlerAnalysisResult() { } } 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 new file mode 100644 index 00000000..c5035d0d --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java @@ -0,0 +1,127 @@ +package org.jeecg.modules.spectrum; + +import cn.hutool.core.io.FileUtil; +import org.apache.commons.lang3.StringUtils; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.modules.base.entity.original.GardsSampleData; +import org.jeecg.modules.config.datasource.DataSourceSwitcher; +import org.jeecg.modules.native_jni.EnergySpectrumHandler; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.jeecg.modules.service.ISpectrumBlockService; +import org.springframework.transaction.TransactionStatus; +import java.io.FileInputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.util.List; +import java.util.Objects; + +/** + * 样品谱(Samplephd)、探测器本地谱(Detbkphd)、QC谱(Qcphd)、气体谱(Gasbkphd) + */ +public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ + + /** + * 解析后的数据 + */ + protected EnergySpectrumStruct sourceData = null; + + /** + * 调用dll解析邮件 + */ + @Override + protected void parseingEmail() { + final EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(mailFile.getAbsolutePath()); + this.sourceData = sourceData; + } + + /** + * 保存能谱文件到ftp + */ + @Override + protected void saveFileToFtp() throws Exception { + //修改能谱文件名称 + this.updateSpectrumFileName(); + //处理此文件需要保存到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.getFilePathMap().get(this.sourceData.system_type)); + ftpPath.append("/"); + ftpPath.append(properties.getFilePathMap().get(this.sourceData.data_type)); + ftpPath.append("/"); + ftpPath.append(year); + ftpPath.append("/"); + ftpPath.append(month>=10?month:"0"+month); + this.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile)); + //设置FTP文件保存路径 + super.ftpSavePath = ftpPath+"/"+this.mailFile.getName(); +// FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8"); + } + + /** + * 对本地能谱临时文件进行改名 + */ + @Override + protected void updateSpectrumFileName() { + StringBuilder newFileName = new StringBuilder(); + newFileName.append(this.sourceData.detector_code); + newFileName.append("-"); + newFileName.append(StringUtils.replace(this.sourceData.acquisition_start_date,"/","")); + newFileName.append("_"); + newFileName.append(StringUtils.replace(this.sourceData.acquisition_start_time.substring(0,this.sourceData.acquisition_start_time.lastIndexOf(":")),":","")); + newFileName.append("_"); + newFileName.append(this.sourceData.data_type.charAt(0)); + newFileName.append("_"); + newFileName.append(this.sourceData.spectrum_quantity); + newFileName.append("_"); + newFileName.append(this.sourceData.acquisition_live_time); + newFileName.append(super.currDataType.getSuffix()); + mailFile = FileUtil.rename(mailFile,newFileName.toString(),true); + } + + /** + * 读取邮件内容#开头的标签 + * @throws Exception + */ + protected void readFileLabel() throws Exception{ + Path path = Paths.get(mailFile.getAbsolutePath()); + final List lines = Files.readAllLines(path); + for(String line : lines){ + if(line.indexOf("#") != -1){ + spectrumFileLabels.add(line); + } + } + } + + + /** + * 处理原始数据 + */ + @Override + protected void handlerOriginalData() throws Exception { + DataSourceSwitcher.switchToOracle(); + final TransactionStatus transactionStatus = spectrumServiceQuotes.getTransactionManager().getTransaction(spectrumServiceQuotes.getTransactionDefinition()); + try{ + //存储基础数据 + final GardsSampleData sampleData = spectrumServiceQuotes.getSpectrumBaseBlockService().create(this.sourceData,super.ftpSavePath); + //存储其他块数据 + for(String labels : spectrumFileLabels){ + final ISpectrumBlockService spectrumBlockService = spectrumServiceQuotes.getSpectrumBlockService().get(labels); + if(Objects.nonNull(spectrumBlockService)){ + spectrumBlockService.create(sourceData,sampleData); + } + } + //提交事务 + spectrumServiceQuotes.getTransactionManager().commit(transactionStatus); + }catch (Exception e){ + //回滚事务 + spectrumServiceQuotes.getTransactionManager().rollback(transactionStatus); + throw e; + }finally { + DataSourceSwitcher.clearDataSource(); + } + } +} \ No newline at end of file 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 8a94ee12..7595284a 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,15 +1,13 @@ package org.jeecg.modules.spectrum; -import org.bouncycastle.tsp.TSPUtil; -import org.jeecg.modules.emuns.SpectrumType; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.emuns.DataType; /** * 样品谱处理 */ -public class SamplephdSpectrum extends SpectrumHandler{ +@Slf4j +public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ /** * 设置过滤链路 @@ -17,7 +15,8 @@ public class SamplephdSpectrum extends SpectrumHandler{ @Override protected void setChina() { SpectrumHandler spectrumHandler = new DetbkphdSpectrum(); - spectrumHandler.init(super.filePath,super.ftpUtil,super.sourceData); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, + super.currDataType,super.message,super.emailProperties); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -26,42 +25,35 @@ public class SamplephdSpectrum extends SpectrumHandler{ * 检查规则并处理数据 */ @Override - protected void handler() { - if(Objects.nonNull(super.sourceData) && SpectrumType.SAMPLEPHD.getType().equals(super.sourceData.data_type)){ - System.out.println("1111111111111111111111111111111111111111111111111"); - System.out.println(super.sourceData); + protected void handler() throws Exception { + if(DataType.SAMPLEPHD.getType().equals(super.currDataType.getType())){ + log.info("----------------------------------"); + log.info(super.currDataType.getType()); + log.info("----------------------------------"); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //保存email日志 + super.saveEmailLog(); + //删除本地临时文件 + super.deleteLocalTemporaryFile(); }else{ super.next.handler(); } } - /** - * 处理原始数据 - * - * @param struct - */ - @Override - protected void handlerOriginalData(EnergySpectrumStruct struct) { - - } - /** * 处理分析结果 * * @param struct */ @Override - protected void handlerAnalysisResult(EnergySpectrumStruct struct) { - - } - - /** - * 转存本地邮件到FTP服务 - * - * @return - */ - @Override - protected void transferToFTP() { + protected void handlerAnalysisResult() { } } 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 4c9cace0..18525198 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 @@ -1,66 +1,146 @@ package org.jeecg.modules.spectrum; -import org.jeecg.common.util.FTPUtil; -import org.jeecg.modules.native_jni.EnergySpectrumHandler; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - +import cn.hutool.core.io.FileUtil; +import com.google.common.collect.Lists; +import org.jeecg.modules.email.EmailProperties; +import org.jeecg.modules.emuns.DataType; +import javax.mail.Message; import java.io.File; -import java.io.InputStream; +import java.util.List; +import java.util.Objects; /** * 能谱处理模版 */ public abstract class SpectrumHandler extends Chain{ - protected FTPUtil ftpUtil; - + private final static String DATA_TYPE_PREFIX = "DATA_TYPE "; + /** + * 当前邮件信息 + */ + protected Message message; + /** + * 邮件属性 + */ + protected EmailProperties emailProperties; + /** + * 处理能谱数据相关Service引用 + */ + protected SpectrumServiceQuotes spectrumServiceQuotes; + /** + * 当前解析的邮件内容文本 + */ + protected String mailContent; + /** + * 能谱类型 + */ + protected DataType currDataType; /** * 当前解析的能谱文件路径 */ - protected String filePath; + protected File mailFile = null; + /** + * 能谱文件FTP保存路径 + */ + protected String ftpSavePath; - protected EnergySpectrumStruct sourceData =null; + /** + * 保存当前能谱文件有哪些#开头的标签 + */ + protected List spectrumFileLabels = Lists.newArrayList(); /** * 初始化参数 */ - protected void init(String filePath,FTPUtil ftpUtil,EnergySpectrumStruct sourceData){ - this.filePath = filePath; - this.ftpUtil = ftpUtil; - this.sourceData = sourceData; + protected void init(String mailContent,SpectrumServiceQuotes spectrumServiceQuotes,Message message,EmailProperties emailProperties) throws Exception{ + this.mailContent = mailContent; + this.spectrumServiceQuotes = spectrumServiceQuotes; + this.message = message; + this.emailProperties = emailProperties; + } + + /** + * 初始化参数 + */ + protected void initNext(SpectrumServiceQuotes spectrumServiceQuotes,File mailFile,DataType currDataType,Message message,EmailProperties emailProperties){ + this.spectrumServiceQuotes = spectrumServiceQuotes; + this.mailFile = mailFile; + this.currDataType = currDataType; + this.message = message; + this.emailProperties = emailProperties; this.setChina(); } /** * 检查规则并处理数据 */ - protected abstract void handler(); - - /** - * 处理原始数据 - * @param struct - */ - protected abstract void handlerOriginalData(EnergySpectrumStruct struct); + protected abstract void handler() throws Exception; /** * 处理分析结果 - * @param struct */ - protected abstract void handlerAnalysisResult(EnergySpectrumStruct struct); + protected abstract void handlerAnalysisResult(); /** - * 转存本地邮件到FTP服务 - * @return + * 调用dll解析邮件 */ - protected abstract void transferToFTP(); + protected abstract void parseingEmail(); /** - * 删除本地邮件 + * 保存能谱文件到ftp */ - protected void removeLocalFile(){ - File file = new File(this.filePath); - if(file.exists() && file.isFile()){ - file.delete(); + protected abstract void saveFileToFtp() throws Exception; + + /** + * 对本地能谱临时文件进行改名 + */ + protected abstract void updateSpectrumFileName(); + + /** + * 处理原始数据 + */ + protected abstract void handlerOriginalData() throws Exception; + + /** + * 把邮件内容存储到本地 + */ + protected boolean saveEmailToLocal(){ + boolean flag = false; + final DataType[] values = DataType.values(); + for(DataType value : values){ + if(this.mailContent.indexOf(DATA_TYPE_PREFIX+value.getType()) != -1){ + StringBuilder localPath = new StringBuilder(); + localPath.append(this.spectrumServiceQuotes.getTaskProperties().getTemporaryStoragePath()); + localPath.append(File.separator); + localPath.append(System.currentTimeMillis()); + localPath.append(value.getSuffix()); + this.mailFile = FileUtil.writeString(this.mailContent, localPath.toString(), "UTF-8"); + this.currDataType = value; + flag = true; + break; + } + } + //如果匹配成功则设置过滤链路 + if(flag){ + this.setChina(); + } + return flag; + } + + /** + * 保存邮件日志到PG数据库 + * @throws Exception + */ + protected void saveEmailLog() throws Exception { + this.spectrumServiceQuotes.getMailLogService().create(this.message,this.emailProperties); + } + + /** + * 删除本地临时文件 + */ + protected void deleteLocalTemporaryFile(){ + if(Objects.nonNull(mailFile) && mailFile.isFile()){ + mailFile.delete(); } } } 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 2857d19d..aa4a9ac2 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 @@ -1,25 +1,40 @@ package org.jeecg.modules.spectrum; +import cn.hutool.core.io.FileUtil; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.jeecg.common.email.EmailServiceManager; -import org.jeecg.common.email.emuns.MailContentType; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.common.properties.TaskProperties; +import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.FTPUtil; import org.jeecg.modules.email.EmailLogProperties; import org.jeecg.modules.email.EmailProperties; -import org.jeecg.modules.native_jni.EnergySpectrumHandler; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import javax.mail.Address; import javax.mail.Message; -import javax.mail.MessagingException; +import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeUtility; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.util.List; +import java.io.File; +import java.util.Date; import java.util.concurrent.CountDownLatch; /** * 能谱解析 */ +@Slf4j public class SpectrumParsingActuator implements Runnable{ + /** + * IMS2.0格式邮件判断条件 + */ + private final static String EMAIL_BEGIN = "BEGIN IMS2.0"; + private final static String MSG_TYPE = "MSG_TYPE DATA"; + private final static String EMAIL_STOP = "STOP"; + /** + * 存储到ftp的Email文件后缀 + */ + private final static String SAVE_EML_SUFFIX = ".eml"; /** * 邮件对象 @@ -34,58 +49,135 @@ public class SpectrumParsingActuator implements Runnable{ */ private EmailServiceManager emailServiceManager; /** - * FTP工具 + * 线程池任务计数器 + */ + private CountDownLatch taskLatch; + /** + * 相关Spring组件引用 + */ + private SpectrumServiceQuotes spectrumServiceQuotes; + /** + * 邮件保存路径相关属性 + */ + private SpectrumPathProperties spectrumPathProperties; + /** + * 邮件计数器 + */ + private EmailCounter emailCounter; + /** + * ftp工具 */ private FTPUtil ftpUtil; - CountDownLatch taskLatch; - - public void init(Message message,EmailProperties emailProperties, - EmailServiceManager emailServiceManager,FTPUtil ftpUtil, - CountDownLatch taskLatch){ + public void init(Message message, EmailProperties emailProperties, + EmailServiceManager emailServiceManager, + CountDownLatch taskLatch,SpectrumServiceQuotes spectrumServiceQuotes, + EmailCounter emailCounter){ this.message = message; this.emailProperties = emailProperties; this.emailServiceManager = emailServiceManager; - this.ftpUtil = ftpUtil; this.taskLatch = taskLatch; + this.spectrumServiceQuotes = spectrumServiceQuotes; + this.spectrumPathProperties = spectrumServiceQuotes.getSpectrumPathProperties(); + this.emailCounter = emailCounter; + this.ftpUtil = spectrumServiceQuotes.getFtpUtil(); } @Override public void run() { - //如果是带有附件的邮件 + String subject = null; + StringBuilder mailContent = null; try { - if(message.getContentType().startsWith(MailContentType.MIXED.getContentType())){ - //封装邮件日志信息 - EmailLogProperties mailLog = new EmailLogProperties(); - mailLog.setEmailId(emailProperties.getId()); - mailLog.setSubject(MimeUtility.decodeText(message.getSubject())); - final StringBuilder content = new StringBuilder(); - emailServiceManager.getMailContent(message,content); - mailLog.setContext(content.toString()); - mailLog.setReceiveTime(message.getSentDate()); - final List filePathList = emailServiceManager.saveAttachment(message); - //通过策略模式根据条件适配那个谱所属类执行处理原始信息和分析结果 - for (String filePath : filePathList){ - final EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(filePath); - //如果返回的结构体数据是错误的说明文件不是正常能谱文件则跳出 - if(false){ - - }else{ - SpectrumHandler spectrumHandler = new MetSpectrum(); - spectrumHandler.init(filePath,ftpUtil,sourceData); - spectrumHandler.handler(); - } + subject = MimeUtility.decodeText(message.getSubject()); + System.out.println(subject); + mailContent = new StringBuilder(); + emailServiceManager.getMailContent(message,mailContent); +// mailContent = new StringBuilder(FileUtil.readUtf8String("E:\\file\\AUX04_RMSSOH-20230601_021743.soh")); + //所有邮件都需以.eml格式存储到ftp eml文件夹中 + downloadEmailToFtp(); + //判断是否是IMS2.0协议文件 + if(checkMailContent(mailContent,subject)){ + SpectrumHandler spectrumHandler = new SamplephdSpectrum(); + spectrumHandler.init(mailContent.toString(),spectrumServiceQuotes,message,emailProperties); + final boolean matchResult = spectrumHandler.saveEmailToLocal(); + if(matchResult){ + spectrumHandler.handler(); + }else{ + log.warn("此邮件{}匹配失败,不在气象谱、警告谱、健康状态谱、样品谱、探测器本地谱、QC谱、气体谱之列",subject); } - }else{ - //如果此邮件不带有附件,则删除 - emailServiceManager.removeMail(message); } - } catch (MessagingException | IOException e) { + //删除邮箱中已处理过的邮件 + emailServiceManager.removeMail(message); + } catch (Exception e) { + System.out.println(mailContent.toString()); + log.error("邮件解析失败,邮件主题为:{},失败原因为:{}",subject,e.getMessage()); e.printStackTrace(); }finally { this.taskLatch.countDown(); - //关闭资源 - emailServiceManager.close(); } } + + /** + * 校验邮件内容完整性 + * 1.虽然包含BEGIN IMS2.0,但是有些邮件的第一行不是BEGIN IMS2.0,而是Mime-Version: 1.0 ,Content-Type: multipart/signed;等信息 + * 2.所以若是IMS2.0协议邮件但是头部包含Mime-Version等信息了要删除 + * 具体解释如下: + * 1.邮件包含附件或特殊内容类型:当邮件包含附件、HTML 内容、图像或其他非纯文本内容时,通常会采用 MIME 格式来处理和传输这些内容。 + * 因此,这样的邮件可能会在头部中指定 Mime-Version 和适当的 Content-Type。 + * 2.邮件需要进行签名或加密:如果邮件需要进行数字签名、加密或其他安全操作,通常会使用 multipart/signed 或其他相关的 Content-Type。 + * 这些类型的邮件在头部中会指定相应的内容类型和协议信息。 + * 3.简单纯文本邮件:另一方面,简单的纯文本邮件没有特殊的附件或内容类型要求,因此可能不需要使用 MIME 格式。 + * 这种情况下,邮件文本中可能不包含 Mime-Version: 1.0 和 Content-Type: multipart/signed;。 + * @param mailContent + * @return + */ + private boolean checkMailContent(StringBuilder mailContent,String subject){ + if(StringUtils.isNotBlank(mailContent) && mailContent.indexOf(EMAIL_BEGIN) != -1 && + mailContent.indexOf(MSG_TYPE) != -1 && mailContent.indexOf(EMAIL_STOP) != -1){ + if(!StringUtils.startsWith(mailContent,EMAIL_BEGIN)){ + mailContent.delete(0,mailContent.indexOf(EMAIL_BEGIN)); + } + if(!StringUtils.endsWith(mailContent,EMAIL_STOP)){ + mailContent.delete(mailContent.indexOf(EMAIL_STOP)+EMAIL_STOP.length(),mailContent.length()); + } + log.info("{}邮件校验成功,符合IMS2.0格式",subject); + return true; + } + log.warn("{}邮件校验成功,此邮件不符合IMS2.0格式",subject); + return false; + } + + /** + * 把邮件下载到ftp指定文件夹(eml) + * 格式为:发件人_主题_年月日_时分秒毫秒_计数(0-10000) + * 当计数大于10000后从0开始,服务重启后也从0开始 + */ + private void downloadEmailToFtp() throws Exception{ + //获取发件人 + final String address = ((InternetAddress) message.getFrom()[0]).getAddress(); + final String from = address.substring(0,address.indexOf("@")); + //获取主题 + String subject = MimeUtility.decodeText(message.getSubject()); + if(subject.indexOf("/") != -1){ + subject = StringUtils.replace(subject,"/",""); + } + if(subject.indexOf(":") != -1){ + subject = StringUtils.replace(subject,":",""); + } + + StringBuilder fileName = new StringBuilder(); + fileName.append(from); + fileName.append("_"); + fileName.append(subject); + fileName.append("_"); + fileName.append(DateUtils.formatDate(new Date(),"YYMMdd")); + fileName.append("_"); + fileName.append(DateUtils.formatDate(new Date(),"HHMMSSSSS")); + fileName.append("_"); + fileName.append(emailCounter.getCurrValue()); + fileName.append(SAVE_EML_SUFFIX); +// final File file = new File("E:\\file\\" + fileName.toString()); +// FileUtil.writeFromStream(message.getInputStream(),file); + ftpUtil.saveFile(spectrumPathProperties.getEmlPath(),fileName.toString(),message.getInputStream()); + } } 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 new file mode 100644 index 00000000..dcdafb1e --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java @@ -0,0 +1,44 @@ +package org.jeecg.modules.spectrum; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.common.properties.TaskProperties; +import org.jeecg.common.util.FTPUtil; +import org.jeecg.modules.service.*; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.stereotype.Component; +import org.springframework.transaction.TransactionDefinition; +import java.util.Map; + +/** + * 各能谱Service引用封装 + */ +@Getter +@Component +@RequiredArgsConstructor +public class SpectrumServiceQuotes { + + private final DataSourceTransactionManager transactionManager; + + private final TransactionDefinition transactionDefinition; + + private final ISpectrumBaseBlockService spectrumBaseBlockService; + + private final Map spectrumBlockService; + + private final TaskProperties taskProperties; + + private final FTPUtil ftpUtil; + + private final SpectrumPathProperties spectrumPathProperties; + + private final ISOHSpectrumService sohSpectrumService; + + private final IAlertSpectrumService alertSpectrumService; + + private final IMetSpectrumService metSpectrumService; + + private final ISysMailLogService mailLogService; + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpecturmDataStorage.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpecturmDataStorage.java deleted file mode 100644 index 4866e1b8..00000000 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpecturmDataStorage.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.jeecg.modules.spectrum; - -import org.jeecg.modules.base.entity.original.GardsSampleData; -import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; - -public class SpecturmDataStorage { - - /** - * 保存 GARDS_SAMPLE_DATA - */ - public static void saveSampleData(EnergySpectrumStruct struct){ - GardsSampleData gardsSampleData = new GardsSampleData(); - } -} diff --git a/jeecg-server-cloud/jeecg-auto-process-start/src/main/resources/application.yml b/jeecg-server-cloud/jeecg-auto-process-start/src/main/resources/application.yml index c74f45bc..a5d0fe92 100644 --- a/jeecg-server-cloud/jeecg-auto-process-start/src/main/resources/application.yml +++ b/jeecg-server-cloud/jeecg-auto-process-start/src/main/resources/application.yml @@ -15,5 +15,5 @@ spring: config: import: - optional:nacos:jeecg.yaml - - optional:nacos:jeecg-@profile.name@.yaml + - optional:nacos:jeecg-@profile.name@-pbl.yaml From 9b9af8a48150007ee61736d0957e22c0b9bde207 Mon Sep 17 00:00:00 2001 From: orgin Date: Fri, 18 Aug 2023 17:07:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat=EF=BC=9A=E8=A7=A3=E5=86=B3=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=99=A8=E5=90=AF=E5=8A=A8=E6=97=B6=E5=8D=A1=E6=AD=BB?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/quartz/service/impl/QuartzJobServiceImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java index bc6b0390..25de10fd 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -66,7 +66,9 @@ public class QuartzJobServiceImpl extends ServiceImpl