From 61da5a5c50dca39a823db5a156251659d853b1b2 Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Wed, 13 Sep 2023 10:24:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:1.=E4=BC=98=E5=8C=96=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E8=A7=A3=E6=9E=90=E6=97=A5=E5=BF=97=E5=8A=9F?= =?UTF-8?q?=E8=83=BD2.=E4=BF=AE=E6=94=B9=E5=8E=9F=E5=A7=8B=E5=BA=93?= =?UTF-8?q?=E3=80=81=E5=88=86=E6=9E=90=E5=BA=93=E6=95=B0=E6=8D=AE=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E6=9D=A1=E4=BB=B63.=E4=BF=AE=E6=94=B9=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=BC=82=E5=B8=B8=E6=8A=A5=E9=94=99=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../properties/SpectrumPathProperties.java | 7 ++- .../java/org/jeecg/modules/ftp/FTPUtils.java | 35 ++++++++++++- .../jeecg/modules/spectrum/AlertSpectrum.java | 4 +- .../modules/spectrum/DetbkphdSpectrum.java | 46 ++++++++++------- .../modules/spectrum/GasbkphdSpectrum.java | 46 ++++++++++------- .../spectrum/HealthStatusSpectrum.java | 2 - .../jeecg/modules/spectrum/MetSpectrum.java | 4 +- .../jeecg/modules/spectrum/QcphdSpectrum.java | 46 ++++++++++------- .../spectrum/S_D_Q_G_SpectrumHandler.java | 11 ++-- .../modules/spectrum/Sample_B_Analysis.java | 39 ++++++++++----- .../modules/spectrum/SamplephdSpectrum.java | 50 +++++++++++-------- .../modules/spectrum/SpectrumHandler.java | 29 +++-------- .../spectrum/SpectrumParsingActuator.java | 26 ++++------ 13 files changed, 205 insertions(+), 140 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java index 8034a1b3..1f2a8055 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java @@ -39,7 +39,12 @@ public class SpectrumPathProperties implements Serializable { /** * 用户上传文件路径 */ - private String uploadPath; + private String uploadPath;; + + /** + * 能谱解析失败文件存储路径 + */ + private String failPath; /** * 能谱文件存储路径以能谱系统类型/能谱类型为key,以存储路径为value diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ftp/FTPUtils.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ftp/FTPUtils.java index 05ab760a..39e0c641 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ftp/FTPUtils.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ftp/FTPUtils.java @@ -124,13 +124,46 @@ public class FTPUtils { } /** - * 写入文件,若文件或文件目录不存在则自行创建 + * 写入文件,若文件或文件目录不存在则自行创建,存在先删除再创建 * @param filePath 文件路径 * @param fileName 文件名称 * @param inputStream 文件输入流 * @return 返回值true/false */ public boolean saveFile(String filePath,String fileName,InputStream inputStream){ + try{ + final boolean flag = this.checkDirectory(filePath); + if(flag){ + final FTPFile[] ftpFiles = this.client.listFiles(fileName); + if(ArrayUtils.isNotEmpty(ftpFiles)){ + client.deleteFile(fileName); + } + return client.storeFile(fileName, inputStream); + } + }catch (IOException e){ + log.error("{}文件创建失败,原因为:{}",filePath+"/"+fileName,e.getMessage()); + e.printStackTrace(); + return false; + }finally { + if(null != inputStream){ + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return false; + } + + /** + * 写入文件,若文件或文件目录不存在则自行创建,存在则追加内容 + * @param filePath 文件路径 + * @param fileName 文件名称 + * @param inputStream 文件输入流 + * @return 返回值true/false + */ + public boolean saveOrAppendFile(String filePath,String fileName,InputStream inputStream){ try{ final boolean flag = this.checkDirectory(filePath); if(flag){ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java index 28c00d79..6753e34f 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java @@ -45,7 +45,7 @@ public class AlertSpectrum extends SpectrumHandler{ protected void setChina() { SpectrumHandler spectrumHandler = new HealthStatusSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, - super.currDataType,super.message,super.emailProperties,super.ftpUtil,super.mailContent); + super.currDataType,super.ftpUtil,super.mailContent); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -67,8 +67,6 @@ public class AlertSpectrum extends SpectrumHandler{ this.saveFileToFtp(); //结构体数据入库 this.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); //删除本地临时文件 super.deleteLocalTemporaryFile(); //把流程日志写入ftp日志文件 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 b3c76672..60e545d8 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 @@ -2,6 +2,7 @@ package org.jeecg.modules.spectrum; import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.SampleStatus; /** * 探测器本地谱处理 @@ -15,7 +16,7 @@ public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{ protected void setChina() { SpectrumHandler spectrumHandler = new QcphdSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, - super.currDataType,super.message,super.emailProperties,super.ftpUtil,super.mailContent); + super.currDataType,super.ftpUtil,super.mailContent); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -26,24 +27,31 @@ public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{ @Override protected void handler() throws Exception { if(DataType.DETBKPHD.getType().equals(super.currDataType.getType())){ - //前置检查 - this.preCheck(); - //打印当前处理的能谱类型 - super.printCurrDataType(); - //解析邮件内容 - super.parseingEmail(); - //读取邮件内容标签 - super.readFileLabel(); - //保存PHD文件到ftp - super.saveFileToFtp(); - //结构体数据入库 - super.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); - //删除本地临时文件 - super.deleteLocalTemporaryFile(); - //把流程日志写入ftp日志文件 - super.saveLogToFtp(); + try{ + //前置检查 + this.preCheck(); + //打印当前处理的能谱类型 + super.printCurrDataType(); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //把流程日志写入ftp日志文件 + super.saveLogToFtp(); + }catch (Exception e){ + //修改状态为解析失败 + this.spectrumServiceQuotes.getSampleDataService().updateStatus(SampleStatus.FAIL.getValue(),super.sampleData.getInputFileName()); + //处理解析失败的文件,上传到ftp->undeal目录 + super.handleParseingFailFile(); + throw e; + }finally { + //删除本地临时文件 + super.deleteLocalTemporaryFile(); + } }else{ super.next.handler(); } 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 64ee0e99..600dd178 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 @@ -2,6 +2,7 @@ package org.jeecg.modules.spectrum; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.SampleStatus; /** * 气体谱处理 @@ -16,7 +17,7 @@ public class GasbkphdSpectrum extends S_D_Q_G_SpectrumHandler{ protected void setChina() { SpectrumHandler spectrumHandler = new MetSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, - super.currDataType,super.message,super.emailProperties,super.ftpUtil,super.mailContent); + super.currDataType,super.ftpUtil,super.mailContent); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -27,24 +28,31 @@ public class GasbkphdSpectrum extends S_D_Q_G_SpectrumHandler{ @Override protected void handler() throws Exception { if(DataType.GASBKPHD.getType().equals(super.currDataType.getType())){ - //前置检查 - this.preCheck(); - //打印当前处理的能谱类型 - super.printCurrDataType(); - //解析邮件内容 - super.parseingEmail(); - //读取邮件内容标签 - super.readFileLabel(); - //保存PHD文件到ftp - super.saveFileToFtp(); - //结构体数据入库 - super.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); - //删除本地临时文件 - super.deleteLocalTemporaryFile(); - //把流程日志写入ftp日志文件 - super.saveLogToFtp(); + try{ + //前置检查 + this.preCheck(); + //打印当前处理的能谱类型 + super.printCurrDataType(); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //把流程日志写入ftp日志文件 + super.saveLogToFtp(); + }catch (Exception e){ + //修改状态为解析失败 + this.spectrumServiceQuotes.getSampleDataService().updateStatus(SampleStatus.FAIL.getValue(),super.sampleData.getInputFileName()); + //处理解析失败的文件,上传到ftp->undeal目录 + super.handleParseingFailFile(); + throw e; + }finally { + //删除本地临时文件 + super.deleteLocalTemporaryFile(); + } }else{ super.next.handler(); } 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 092deb36..4a946c2a 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 @@ -68,8 +68,6 @@ public class HealthStatusSpectrum extends SpectrumHandler{ this.saveFileToFtp(); //结构体数据入库 this.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); //删除本地临时文件 super.deleteLocalTemporaryFile(); //把流程日志写入ftp日志文件 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 e79a08da..4b9a24af 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 @@ -46,7 +46,7 @@ public class MetSpectrum extends SpectrumHandler{ protected void setChina() { SpectrumHandler spectrumHandler = new AlertSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, - super.currDataType,super.message,super.emailProperties,super.ftpUtil,super.mailContent); + super.currDataType,super.ftpUtil,super.mailContent); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -65,8 +65,6 @@ public class MetSpectrum extends SpectrumHandler{ this.saveFileToFtp(); //结构体数据入库 this.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); //删除本地临时文件 super.deleteLocalTemporaryFile(); //把流程日志写入ftp日志文件 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 15593951..efc5043e 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,6 +1,7 @@ package org.jeecg.modules.spectrum; import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.SampleStatus; /** * QC谱处理 @@ -14,7 +15,7 @@ public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{ protected void setChina() { SpectrumHandler spectrumHandler = new GasbkphdSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, - super.currDataType,super.message,super.emailProperties,super.ftpUtil,super.mailContent); + super.currDataType,super.ftpUtil,super.mailContent); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -26,24 +27,31 @@ public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{ protected void handler() throws Exception { //判断当前邮件内容是否是QC谱 if(DataType.QCPHD.getType().equals(super.currDataType.getType())){ - //前置检查 - this.preCheck(); - //打印当前处理的能谱类型 - super.printCurrDataType(); - //解析邮件内容 - super.parseingEmail(); - //读取邮件内容标签 - super.readFileLabel(); - //保存PHD文件到ftp - super.saveFileToFtp(); - //结构体数据入库 - super.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); - //删除本地临时文件 - super.deleteLocalTemporaryFile(); - //把流程日志写入ftp日志文件 - super.saveLogToFtp(); + try{ + //前置检查 + this.preCheck(); + //打印当前处理的能谱类型 + super.printCurrDataType(); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //把流程日志写入ftp日志文件 + super.saveLogToFtp(); + }catch (Exception e){ + //修改状态为解析失败 + this.spectrumServiceQuotes.getSampleDataService().updateStatus(SampleStatus.FAIL.getValue(),super.sampleData.getInputFileName()); + //处理解析失败的文件,上传到ftp->undeal目录 + super.handleParseingFailFile(); + throw e; + }finally { + //删除本地临时文件 + super.deleteLocalTemporaryFile(); + } }else{ super.next.handler(); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java index 8ec056d0..9fa42c29 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/S_D_Q_G_SpectrumHandler.java @@ -1,6 +1,7 @@ package org.jeecg.modules.spectrum; import cn.hutool.core.io.FileUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.util.Strings; @@ -35,6 +36,7 @@ import java.util.Objects; /** * 样品谱(Samplephd)、探测器本地谱(Detbkphd)、QC谱(Qcphd)、气体谱(Gasbkphd) */ +@Slf4j public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ /** @@ -202,11 +204,14 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ */ @Override protected void handlerOriginalData() throws Exception { + this.startIntoDatabaseTime = new Date(); + //如果数据已经存储,不在重复存储 final boolean exist = spectrumServiceQuotes.getSampleDataService().fileExist(super.ftpSavePath); if(exist){ - throw new FileRepeatException("file repeat"); + this.endIntoDatabaseTime = new Date(); + log.warn("{} file data has been stored",super.mailFile.getName()); + return; } - this.startIntoDatabaseTime = new Date(); DataSourceSwitcher.switchToOracle(); final TransactionStatus transactionStatus = spectrumServiceQuotes.getTransactionManager().getTransaction(spectrumServiceQuotes.getTransactionDefinition()); try{ @@ -266,7 +271,7 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{ this.logFilePath = properties.getLogPath()+StringConstant.SLASH+this.getFileSavePath(); this.logFileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),LOG_FILE_SUFFIX); - super.ftpUtil.saveFile(logFilePath,logFileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8))); + super.ftpUtil.saveOrAppendFile(logFilePath,logFileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8))); } /** diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java index e3d6f712..30e386ee 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_B_Analysis.java @@ -3,6 +3,7 @@ package org.jeecg.modules.spectrum; import cn.hutool.core.io.FileUtil; import com.google.common.collect.Lists; import io.swagger.models.auth.In; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; @@ -36,6 +37,7 @@ import java.util.stream.Collectors; /** * B谱分析过程 */ +@Slf4j public class Sample_B_Analysis implements BlockConstant { /** @@ -141,8 +143,8 @@ public class Sample_B_Analysis implements BlockConstant { /** * 执行解析过程 */ - public void start(){ - try { + public void start() throws BAnalyseException { + try{ //修改状态为解析中 this.updateStatus(SampleStatus.IN_PROCESS.getValue()); //查询det、gas数据(sampleId,inputFileName),sample数据在构造函数已经传过来 @@ -158,15 +160,19 @@ public class Sample_B_Analysis implements BlockConstant { //生成报告 Sample_B_Analysis.B_AnalysisReport report = new Sample_B_Analysis.B_AnalysisReport(); report.start(); - //删除下载的det和gas临时文件 - this.deleteLocalTemporaryFile(); + //修改状态为解析成功 + this.updateStatus(SampleStatus.COMPLETE.getValue()); }catch (Exception e){ e.printStackTrace(); + throw new BAnalyseException("Sample Analyse Error at "+DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss")); + }finally { + //删除下载的det和gas临时文件 + this.deleteLocalTemporaryFile(); } } /** - * 修改状态为解析中 + * 修改状态 * @param analysesStatus */ private void updateStatus(String analysesStatus){ @@ -270,6 +276,12 @@ public class Sample_B_Analysis implements BlockConstant { private void storageDataToDatabase(){ String logFileRelativePath = this.logFilePath+StringConstant.SLASH+this.logFileName; String arrFileRelativePath = this.arrFilePath+StringConstant.SLASH+this.arrFileName; + //如果数据已经存储,不在重复存储 + final Integer idAnalysis = spectrumServiceQuotes.getAnalysesService().getIdAnalysis(this.sampleData.getSampleId()); + if(Objects.nonNull(idAnalysis)){ + log.warn("{} file analysis data has been stored",new File(this.sampleTempFilePath).getName()); + return; + } DataSourceSwitcher.switchToOracle(); final TransactionStatus transactionStatus = spectrumServiceQuotes.getTransactionManager().getTransaction(spectrumServiceQuotes.getTransactionDefinition()); try{ @@ -312,14 +324,17 @@ public class Sample_B_Analysis implements BlockConstant { * 删除下载的det和gas临时文件 */ private void deleteLocalTemporaryFile(){ - File detFile = new File(this.detTempFilePath); - if(detFile.exists() && detFile.isFile()){ - detFile.delete(); + if(StringUtils.isNotBlank(this.detTempFilePath)){ + File detFile = new File(this.detTempFilePath); + if(detFile.exists() && detFile.isFile()){ + detFile.delete(); + } } - - File gasFile = new File(this.gasTempFilePath); - if(gasFile.exists() && gasFile.isFile()){ - gasFile.delete(); + if(StringUtils.isNotBlank(this.gasTempFilePath)){ + File gasFile = new File(this.gasTempFilePath); + if(gasFile.exists() && gasFile.isFile()){ + gasFile.delete(); + } } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java index bd021eab..94699301 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,6 +1,7 @@ package org.jeecg.modules.spectrum; import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.SampleStatus; import org.jeecg.modules.base.enums.SystemType; /** @@ -15,7 +16,7 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ protected void setChina() { SpectrumHandler spectrumHandler = new DetbkphdSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile, - super.currDataType,super.message,super.emailProperties,super.ftpUtil,super.mailContent); + super.currDataType,super.ftpUtil,super.mailContent); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } @@ -26,26 +27,33 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{ @Override protected void handler() throws Exception { if(DataType.SAMPLEPHD.getType().equals(super.currDataType.getType())){ - //前置检查 - this.preCheck(); - //打印当前处理的能谱类型 - super.printCurrDataType(); - //解析邮件内容 - super.parseingEmail(); - //读取邮件内容标签 - super.readFileLabel(); - //保存PHD文件到ftp - super.saveFileToFtp(); - //结构体数据入库 - super.handlerOriginalData(); - //保存email日志 - super.saveEmailLog(); - //把原始库流程日志写入ftp日志文件 - super.saveLogToFtp(); - //进行B、G(P)谱分析 - this.autoAnalysis(); - //删除本地临时文件 - super.deleteLocalTemporaryFile(); + try{ + //前置检查 + this.preCheck(); + //打印当前处理的能谱类型 + super.printCurrDataType(); + //解析邮件内容 + super.parseingEmail(); + //读取邮件内容标签 + super.readFileLabel(); + //保存PHD文件到ftp + super.saveFileToFtp(); + //结构体数据入库 + super.handlerOriginalData(); + //把原始库流程日志写入ftp日志文件 + super.saveLogToFtp(); + //进行B、G(P)谱分析 + this.autoAnalysis(); + }catch (Exception e){ + //修改状态为解析失败 + this.spectrumServiceQuotes.getSampleDataService().updateStatus(SampleStatus.FAIL.getValue(),super.sampleData.getInputFileName()); + //处理解析失败的文件,上传到ftp->undeal目录 + super.handleParseingFailFile(); + throw e; + }finally { + //删除本地临时文件 + super.deleteLocalTemporaryFile(); + } }else{ super.next.handler(); } 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 148e5fc3..e9da4c6b 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 @@ -4,11 +4,9 @@ import cn.hutool.core.io.FileUtil; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.base.enums.DataType; -import org.jeecg.modules.email.EmailProperties; -import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.ftp.FTPUtils; -import javax.mail.Message; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; import java.util.Objects; @@ -22,14 +20,6 @@ public abstract class SpectrumHandler extends Chain{ private final static String DATA_TYPE_PREFIX = "DATA_TYPE "; protected final static String LOG_FILE_SUFFIX = ".log"; - /** - * 当前邮件信息 - */ - protected Message message; - /** - * 邮件属性 - */ - protected EmailProperties emailProperties; /** * 处理能谱数据相关Service引用 */ @@ -63,12 +53,9 @@ public abstract class SpectrumHandler extends Chain{ /** * 初始化参数 */ - protected void init(String mailContent,SpectrumServiceQuotes spectrumServiceQuotes,Message message, - EmailProperties emailProperties,FTPUtils ftpUtil) throws Exception{ + protected void init(String mailContent,SpectrumServiceQuotes spectrumServiceQuotes,FTPUtils ftpUtil) throws Exception{ this.mailContent = mailContent; this.spectrumServiceQuotes = spectrumServiceQuotes; - this.message = message; - this.emailProperties = emailProperties; this.ftpUtil = ftpUtil; } @@ -76,12 +63,10 @@ public abstract class SpectrumHandler extends Chain{ * 初始化参数 */ protected void initNext(SpectrumServiceQuotes spectrumServiceQuotes,File mailFile,DataType currDataType, - Message message,EmailProperties emailProperties,FTPUtils ftpUtil,String mailContent){ + FTPUtils ftpUtil,String mailContent){ this.spectrumServiceQuotes = spectrumServiceQuotes; this.mailFile = mailFile; this.currDataType = currDataType; - this.message = message; - this.emailProperties = emailProperties; this.ftpUtil = ftpUtil; this.mailContent = mailContent; this.setChina(); @@ -153,11 +138,11 @@ public abstract class SpectrumHandler extends Chain{ } /** - * 保存邮件日志到PG数据库 - * @throws Exception + * 处理解析失败的文件,上传到ftp->undeal目录 + * @throws FileNotFoundException */ - protected void saveEmailLog() throws Exception { - this.spectrumServiceQuotes.getMailLogService().create(this.message,this.emailProperties); + protected void handleParseingFailFile() throws FileNotFoundException { + this.ftpUtil.saveFile(spectrumServiceQuotes.getSpectrumPathProperties().getFailPath(),this.mailFile.getName(),new FileInputStream(this.mailFile)); } /** diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java index f4485823..804d4ded 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,6 +1,5 @@ package org.jeecg.modules.spectrum; -import cn.hutool.core.io.FileUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.StringConstant; @@ -10,8 +9,8 @@ import org.jeecg.common.util.DateUtils; import org.jeecg.modules.email.EmailProperties; import org.jeecg.modules.ftp.FTPProperties; import org.jeecg.modules.ftp.FTPUtils; - import javax.mail.Message; +import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeUtility; import java.util.Date; @@ -99,22 +98,28 @@ public class SpectrumParsingActuator implements Runnable{ //判断是否是IMS2.0协议文件 if(checkMailContent(mailContent,subject)){ SpectrumHandler spectrumHandler = new SamplephdSpectrum(); - spectrumHandler.init(mailContent.toString(),spectrumServiceQuotes,message,emailProperties,ftpUtil); + spectrumHandler.init(mailContent.toString(),spectrumServiceQuotes,ftpUtil); final boolean matchResult = spectrumHandler.saveEmailToLocal(); if(matchResult){ + //保存邮件解析日志到PG数据库 + this.spectrumServiceQuotes.getMailLogService().create(message,emailProperties); + //开始解析 spectrumHandler.handler(); }else{ log.warn("此邮件{}匹配失败,不在气象谱、警告谱、健康状态谱、样品谱、探测器本地谱、QC谱、气体谱之列",subject); } } - //删除邮箱中已处理过的邮件 - emailServiceManager.removeMail(message); } catch (Exception e) { log.error(mailContent.toString()); log.error("邮件解析失败,邮件主题为:{},发送时间为:{},接收时间为:{},失败原因为:{}",subject,sendTime,receiveTime,e.getMessage()); - this.handleErrorLog(e); e.printStackTrace(); }finally { + //删除邮箱中已处理过的邮件 + try { + emailServiceManager.removeMail(message); + } catch (MessagingException e) { + e.printStackTrace(); + } this.taskLatch.countDown(); ftpUtil.close(); } @@ -181,13 +186,4 @@ public class SpectrumParsingActuator implements Runnable{ fileName.append(SAVE_EML_SUFFIX); ftpUtil.saveFile(spectrumPathProperties.getEmlPath(),fileName.toString(),message.getInputStream()); } - - /** - * 处理解析报错日志 - * @param e - */ - private void handleErrorLog(Exception e){ - StringBuilder logContent = new StringBuilder(); - - } }