From f44ba359d906a8ccd877cb3c3cf985431cb5cd97 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Fri, 12 Jan 2024 14:42:16 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=88=86=E6=9E=90=E5=BA=93=E8=A1=A8=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F=E5=BC=82=E5=B8=B8=E7=9A=84=E5=88=A4=E6=96=AD?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E5=8F=8A=E8=BF=9D=E5=8F=8D=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F=E6=80=A7=E9=94=99=E8=AF=AF=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E4=B9=A6=E5=86=99=EF=BC=8C=E8=BF=9D=E5=8F=8D?= =?UTF-8?q?=E5=94=AF=E4=B8=80=E7=BA=A6=E6=9D=9F=E6=80=A7=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/common/constant/RedisConstant.java | 5 ++- .../common/email/EmailServiceManager.java | 35 +++++++++++++++- .../properties/MaximumPoolSizeProperties.java | 2 + .../jeecg/modules/EmailParsingActuator.java | 17 +++++--- .../org/jeecg/modules/enums/ErrorType.java | 3 +- .../modules/exception/AnalyseException.java | 19 +++++++++ .../modules/exception/BAnalyseException.java | 7 +++- .../modules/exception/GAnalyseException.java | 7 +++- .../spectrum/AbstractSpectrumHandler.java | 20 +++++++++- .../jeecg/modules/spectrum/AlertSpectrum.java | 4 +- .../modules/spectrum/DetbkphdSpectrum.java | 4 +- .../modules/spectrum/GasbkphdSpectrum.java | 4 +- .../spectrum/HealthStatusSpectrum.java | 4 +- .../jeecg/modules/spectrum/MetSpectrum.java | 4 +- .../jeecg/modules/spectrum/QcphdSpectrum.java | 4 +- .../modules/spectrum/Sample_B_Analysis.java | 7 +++- .../modules/spectrum/Sample_G_Analysis.java | 15 +++++-- .../modules/spectrum/SamplephdSpectrum.java | 40 ++++++++++++++++--- .../modules/spectrum/SpectrumLogManager.java | 10 +++-- .../spectrum/SpectrumParsingActuator.java | 1 - .../spectrum/SpectrumServiceQuotes.java | 4 ++ 21 files changed, 175 insertions(+), 41 deletions(-) create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalyseException.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java index 30122674..f86d600b 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java @@ -41,5 +41,8 @@ public interface RedisConstant { String PREFIX_TEMPLATE = "Template:"; // 消息模板 - String UNDEAL_FILE = "Undeal:"; + /** + * 删除失败邮件KEY + */ + String DELETE_FAIL_EMAILS = "delete_fail_emails"; } 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 c2f8bfe1..faa63a2f 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 @@ -8,14 +8,16 @@ import com.sun.mail.smtp.SMTPAddressFailedException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.dto.message.MessageDTO; +import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.constant.StringConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.email.emuns.MailContentType; import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.util.DateUtils; +import org.jeecg.common.util.Md5Util; +import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.base.entity.postgre.SysEmail; import org.jetbrains.annotations.NotNull; - import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; @@ -55,6 +57,8 @@ public class EmailServiceManager { /** 收件箱 */ private Folder folder = null; + private RedisUtil redisUtil; + @NotNull public static EmailServiceManager getInstance(){ return new EmailServiceManager(); @@ -72,12 +76,15 @@ public class EmailServiceManager { * 初始化邮件服务管理器 * @param email 邮件属性 */ - public void init(SysEmail email,Integer receiveNum,String temporaryStoragePath,Date systemStartupTime, SpectrumPathProperties pathProperties){ + public void init(SysEmail email, Integer receiveNum, String temporaryStoragePath, + Date systemStartupTime, SpectrumPathProperties pathProperties, + RedisUtil redisUtil){ this.email = email; this.receiveNum = receiveNum; this.temporaryStoragePath = temporaryStoragePath; this.systemStartupTime = systemStartupTime; this.spectrumPathProperties = pathProperties; + this.redisUtil = redisUtil; } /** @@ -569,6 +576,8 @@ public class EmailServiceManager { } catch (MessagingException | UnsupportedEncodingException e) { status = EmailLogManager.STATUS_ERROR; log.error("Email deletion failed, the subject of the email is :{}, the reason is :{}.",subject,e.getMessage()); + String emlName = subject+StringConstant.UNDER_LINE+DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss"); + redisUtil.hset(RedisConstant.DELETE_FAIL_EMAILS,Md5Util.md5Encode(emlName,"UTF-8"),emlName); e.printStackTrace(); }finally { EmailLogEvent removeEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,status,EmailLogManager.DELETEID,subject,receivedDate); @@ -594,4 +603,26 @@ public class EmailServiceManager { e.printStackTrace(); } } + + /** + * 校验邮件 + * 若此次获取的邮件是上次删除失败的邮件直接删除 + * @param message + */ + public boolean check(Message message){ + boolean exist = false; + try { + String subject = MimeUtility.decodeText(message.getSubject()); + Date receivedDate = message.getReceivedDate(); + String emlName = subject+StringConstant.UNDER_LINE+DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss"); + exist = redisUtil.hHasKey(RedisConstant.DELETE_FAIL_EMAILS,Md5Util.md5Encode(emlName,"UTF-8")); + if(exist){ + message.setFlag(Flags.Flag.DELETED,true); + redisUtil.hdel(RedisConstant.DELETE_FAIL_EMAILS,Md5Util.md5Encode(emlName,"UTF-8")); + } + } catch (MessagingException | UnsupportedEncodingException e) { + return exist; + } + return exist; + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/MaximumPoolSizeProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/MaximumPoolSizeProperties.java index 81b10e7b..a2883eaa 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/MaximumPoolSizeProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/MaximumPoolSizeProperties.java @@ -11,4 +11,6 @@ public class MaximumPoolSizeProperties { private Integer station; + private Integer auto; + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java index 2d2c0ca5..7d6fe72f 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java @@ -6,7 +6,6 @@ import org.jeecg.common.email.EmailLogManager; import org.jeecg.common.email.EmailServiceManager; import org.jeecg.common.properties.TaskProperties; import org.jeecg.modules.email.EmailProperties; -import org.jeecg.modules.eneity.event.SpectrumLog; import org.jeecg.modules.spectrum.EmailCounter; import org.jeecg.modules.spectrum.SpectrumLogManager; import org.jeecg.modules.spectrum.SpectrumParsingActuator; @@ -39,7 +38,7 @@ public class EmailParsingActuator extends Thread{ this.systemStartupTime = systemStartupTime; //获取机器可用核心数 - int systemCores = Runtime.getRuntime().availableProcessors(); + int systemCores = spectrumServiceQuotes.getMaximumPoolSizeProperties().getAuto(); int maximumPoolSize = taskProperties.getReceiveNum() > systemCores?taskProperties.getReceiveNum():systemCores; //初始化线程池 @@ -60,10 +59,18 @@ public class EmailParsingActuator extends Thread{ } long start = System.currentTimeMillis(); final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); - emailServiceManager.init(this.emailProperties,this.taskProperties.getReceiveNum(),this.taskProperties.getTemporaryStoragePath(),this.systemStartupTime, spectrumServiceQuotes.getSpectrumPathProperties()); + emailServiceManager.init(this.emailProperties,this.taskProperties.getReceiveNum(),this.taskProperties.getTemporaryStoragePath(), + this.systemStartupTime, spectrumServiceQuotes.getSpectrumPathProperties(),spectrumServiceQuotes.getRedisUtil()); try { - final Message[] messages = emailServiceManager.receiveMail(); + Message[] messages = emailServiceManager.receiveMail(); if(ArrayUtils.isNotEmpty(messages)){ + //检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除 + for(int i=messages.length-1;i>=0;i--){ + final boolean exist = emailServiceManager.check(messages[i]); + if(exist){ + messages = ArrayUtils.remove(messages,i); + } + } CountDownLatch taskLatch = new CountDownLatch(messages.length); for(Message message : messages){ SpectrumParsingActuator spectrumParsingActuator = new SpectrumParsingActuator(); @@ -98,6 +105,4 @@ public class EmailParsingActuator extends Thread{ } } } - - } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/enums/ErrorType.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/enums/ErrorType.java index 9c002fe4..bc385a57 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/enums/ErrorType.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/enums/ErrorType.java @@ -7,7 +7,8 @@ public enum ErrorType { STATION_ERROR("station_code:%s=0"), FILE_REPEAT("file repeat"), GAS_OR_DET_ERROR("gas or det file is no exist or is error"), - AIR_SAMPLER_FLOW_ERROR("this is no ariSamplerFlow data"); + AIR_SAMPLER_FLOW_ERROR("this is no ariSamplerFlow data"), + INSERT_ERROR("The sample_id:%s has been reported missing in the database"); private String content; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalyseException.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalyseException.java new file mode 100644 index 00000000..bdc00859 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalyseException.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.exception; + +import lombok.Getter; + +public class AnalyseException extends Exception{ + + @Getter + private boolean isDuplicateKeyException = false; + + public AnalyseException(String message) { + super(message); + } + + public AnalyseException(String message, boolean isDuplicateKeyException) { + super(message); + this.isDuplicateKeyException = isDuplicateKeyException; + } + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/BAnalyseException.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/BAnalyseException.java index d0125608..c9270fae 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/BAnalyseException.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/BAnalyseException.java @@ -3,7 +3,7 @@ package org.jeecg.modules.exception; /** * B谱分析异常 */ -public class BAnalyseException extends Exception{ +public class BAnalyseException extends AnalyseException{ /** * Constructs a new exception with the specified detail message. The @@ -16,4 +16,9 @@ public class BAnalyseException extends Exception{ public BAnalyseException(String message) { super(message); } + + public BAnalyseException(String message, boolean isDuplicateKeyException) { + super(message,isDuplicateKeyException); + } + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/GAnalyseException.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/GAnalyseException.java index 406dc605..2f69fdfa 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/GAnalyseException.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/GAnalyseException.java @@ -3,7 +3,7 @@ package org.jeecg.modules.exception; /** * B谱分析异常 */ -public class GAnalyseException extends Exception{ +public class GAnalyseException extends AnalyseException{ /** * Constructs a new exception with the specified detail message. The @@ -16,4 +16,9 @@ public class GAnalyseException extends Exception{ public GAnalyseException(String message) { super(message); } + + public GAnalyseException(String message, boolean isDuplicateKeyException) { + super(message,isDuplicateKeyException); + } + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java index d2bd62f5..9b8dd0ca 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java @@ -16,6 +16,7 @@ import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.eneity.event.SpectrumLog; import org.jeecg.modules.enums.ErrorType; import org.jeecg.modules.enums.SpectrumSource; +import org.jeecg.modules.exception.AnalyseException; import org.jeecg.modules.exception.FileRepeatException; import org.jeecg.modules.exception.HeaderBlockException; import org.jeecg.modules.file.FileOperation; @@ -272,9 +273,26 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { final String rootPath = spectrumServiceQuotes.getSpectrumPathProperties().getRootPath(); final String undealPath = spectrumServiceQuotes.getSpectrumPathProperties().getUndealPath(); final String finalPath = rootPath+File.separator+undealPath; - FileOperation.moveFile(spectrumFile,finalPath,true); + //判断文件是否在savefile下已经保存过 + final String savefileName = spectrumServiceQuotes.getSpectrumPathProperties().getSaveFilePath().substring(1); + //若文件已经在savefile了进行复制 + if(spectrumFile.getAbsolutePath().contains(savefileName)){ + FileOperation.copyFile(spectrumFile,finalPath,true); + }else { + //若文件不在savefile 则判断异常是否属于违反唯一约束性 + if (e instanceof AnalyseException) { + AnalyseException exception = (AnalyseException) e; + if (exception.isDuplicateKeyException()) { + this.spectrumFile.delete(); + } + } else { + //如果文件在savefile中没有 并且 不属于违反唯一约束性的异常 将文件移动到undeal + FileOperation.moveFile(spectrumFile,finalPath,true); + } + } } } catch (IOException ex) { + log.error("An error occurred during the process of processing the failed parsing file. The file is: {}, and the reason is: {}",this.spectrumFile.getAbsolutePath(),e.getMessage()); ex.printStackTrace(); } }else if(SpectrumSource.FROM_FILE_SOURCE.getSourceType().equals(spectrumSource) && (e instanceof FileRepeatException)){ 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 c91496d6..c0ccad74 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 @@ -81,10 +81,10 @@ public class AlertSpectrum extends AbstractSpectrumHandler{ this.parseingEmail(); //修改能谱文件名称 this.updateSpectrumFileName(); - //结构体数据入库 - this.handlerOriginalData(); //保存PHD文件到savefile super.saveFileToSavefile(); + //结构体数据入库 + this.handlerOriginalData(); //若本次文件来自于undel目录,解析成功则删除 deleteIfFromUndelFile(); }catch (Exception e){ 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 a61b6fd0..5995047e 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 @@ -41,10 +41,10 @@ public class DetbkphdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { super.readFileLabel(); //修改能谱文件名称 super.updateSpectrumFileName(); - //结构体数据入库 - super.handlerOriginalData(); //保存PHD文件到savefile super.saveFileToSavefile(); + //结构体数据入库 + super.handlerOriginalData(); //修改状态为解析完成 super.status = SampleStatus.COMPLETE.getValue(); super.updateStatus(); 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 8bc4088e..dea30f27 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 @@ -43,10 +43,10 @@ public class GasbkphdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { super.readFileLabel(); //修改能谱文件名称 super.updateSpectrumFileName(); - //结构体数据入库 - super.handlerOriginalData(); //保存PHD文件到savefile super.saveFileToSavefile(); + //结构体数据入库 + super.handlerOriginalData(); //修改状态为解析完成 super.status = SampleStatus.COMPLETE.getValue(); super.updateStatus(); 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 13f4af23..b85c6c0c 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 @@ -80,10 +80,10 @@ public class HealthStatusSpectrum extends AbstractSpectrumHandler{ this.parseingEmail(); //修改能谱文件名称 this.updateSpectrumFileName(); - //结构体数据入库 - this.handlerOriginalData(); //保存PHD文件到savefile super.saveFileToSavefile(); + //结构体数据入库 + this.handlerOriginalData(); //把流程日志保存到日志目录 this.saveLogToLogDir(); //若本次文件来自于undel目录,解析成功则删除 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 7c0141d6..7125a537 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 @@ -71,10 +71,10 @@ public class MetSpectrum extends AbstractSpectrumHandler{ this.parseingEmail(); //修改能谱文件名称 this.updateSpectrumFileName(); - //结构体数据入库 - this.handlerOriginalData(); //保存PHD文件到savefile super.saveFileToSavefile(); + //结构体数据入库 + this.handlerOriginalData(); //把流程日志保存到日志目录 this.saveLogToLogDir(); //若本次文件来自于undel目录,解析成功则删除 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 d2444204..d75b6a9a 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 @@ -42,10 +42,10 @@ public class QcphdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { super.readFileLabel(); //修改能谱文件名称 super.updateSpectrumFileName(); - //结构体数据入库 - super.handlerOriginalData(); //保存PHD文件到savefile super.saveFileToSavefile(); + //结构体数据入库 + super.handlerOriginalData(); //修改状态为解析完成 super.status = SampleStatus.COMPLETE.getValue(); super.updateStatus(); 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 dad40675..5a052851 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 @@ -23,6 +23,7 @@ import org.jeecg.modules.native_jni.EnergySpectrumHandler; import org.jeecg.modules.native_jni.struct.BgAnalyseResult; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.jeecg.modules.service.BlockConstant; +import org.springframework.dao.DuplicateKeyException; import org.springframework.transaction.TransactionStatus; import java.io.*; import java.time.Instant; @@ -170,7 +171,11 @@ public class Sample_B_Analysis implements BlockConstant { pushToRedis(); }catch (Exception e){ analyseFail = true; - throw new BAnalyseException(e.getMessage()); + if (e instanceof DuplicateKeyException) { + throw new BAnalyseException(e.getMessage(), true); + } else { + throw new BAnalyseException(e.getMessage()); + } }finally { this.endAnalysisTime = new Date(); //如果分析成功并且analyses对象不为空 diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java index ce1c6a2e..f5fc6e9e 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java @@ -3,7 +3,6 @@ package org.jeecg.modules.spectrum; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.io.FileUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; @@ -20,6 +19,7 @@ import org.jeecg.common.constant.enums.SpectrumSystemType; import org.jeecg.common.properties.ParameterProperties; import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.util.*; +import org.jeecg.modules.ErrorLogManager; import org.jeecg.modules.base.bizVo.AttributeItemVo; import org.jeecg.modules.base.dto.*; import org.jeecg.modules.base.entity.original.GardsSampleData; @@ -28,11 +28,14 @@ import org.jeecg.modules.base.enums.DSType; import org.jeecg.modules.base.enums.MiddleDataType; import org.jeecg.modules.base.enums.SpectrumType; import org.jeecg.modules.config.datasource.DataSourceSwitcher; +import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.entity.vo.*; +import org.jeecg.modules.enums.ErrorType; import org.jeecg.modules.exception.GAnalyseException; import org.jeecg.modules.file.FileOperation; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.jeecgframework.core.util.ApplicationContextUtil; +import org.springframework.dao.DuplicateKeyException; import org.springframework.transaction.TransactionStatus; import org.w3c.dom.*; import org.xml.sax.SAXException; @@ -43,13 +46,13 @@ import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; import java.lang.reflect.Field; +import java.sql.SQLIntegrityConstraintViolationException; import java.text.ParseException; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; -import static org.jeecg.modules.service.BlockConstant.XE_131m; @Data @Slf4j @@ -124,7 +127,7 @@ public class Sample_G_Analysis { this.dataType = energySpectrumStruct.data_type; this.sampleInputFilename = sampleData.getInputFileName(); this.sampleFilename = StringUtils.substring(sampleData.getInputFileName(), - sampleData.getInputFileName().lastIndexOf((StringConstant.SLASH)+1)); + sampleData.getInputFileName().lastIndexOf((StringConstant.SLASH))+1); } public void analysis() throws GAnalyseException{ @@ -194,7 +197,11 @@ public class Sample_G_Analysis { }catch (Exception e){ e.printStackTrace(); log.error("Sample_G_Analysis", e); - throw new GAnalyseException("Sample Analyse Error at "+DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss")); + if (e instanceof DuplicateKeyException) { + throw new GAnalyseException("Sample Analyse Error at "+DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss"), true); + } else { + throw new GAnalyseException("Sample Analyse Error at "+DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss")); + } } log.info("Gamma自动处理分析--End"); } 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 fe2a68d1..8cd0b4d4 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,8 +1,18 @@ package org.jeecg.modules.spectrum; +import org.jeecg.modules.ErrorLogManager; import org.jeecg.modules.base.enums.DataType; import org.jeecg.modules.base.enums.SampleStatus; import org.jeecg.modules.base.enums.SystemType; +import org.jeecg.modules.eneity.event.SpectrumErrorEvent; +import org.jeecg.modules.enums.ErrorType; +import org.jeecg.modules.enums.SpectrumSource; +import org.jeecg.modules.exception.AnalyseException; +import org.jeecg.modules.exception.GAnalyseException; +import org.springframework.dao.DuplicateKeyException; + +import java.sql.SQLIntegrityConstraintViolationException; +import java.util.Date; import java.util.Objects; /** @@ -42,12 +52,20 @@ public class SamplephdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { super.readFileLabel(); //修改能谱文件名称 super.updateSpectrumFileName(); + //保存PHD文件到savefile + //如果文件来自于邮箱或filesource则在存储原始库之前需移动到savefile,便于和input_file_name字段对应 + if(!SpectrumSource.FORM_FILE_UNDEL.getSourceType().equals(super.spectrumSource)){ + super.saveFileToSavefile(); + } //结构体数据入库 super.handlerOriginalData(); //进行B、G(P)谱分析 this.autoAnalysis(); //保存PHD文件到savefile - super.saveFileToSavefile(); + //如果文件来自于undel必须到分析结束后才能移动到savefile,否则可能导致本次处理再次失败然后就移动到savefile了 + if(SpectrumSource.FORM_FILE_UNDEL.getSourceType().equals(super.spectrumSource)){ + super.saveFileToSavefile(); + } //修改状态为解析完成 super.status = SampleStatus.COMPLETE.getValue(); super.updateStatus(); @@ -56,12 +74,22 @@ public class SamplephdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { }catch (Exception e){ //异常返回文件名称用于报错日志 super.returnFileName.append(super.spectrumFile.getName()); - //修改状态为解析失败 - super.status = SampleStatus.FAIL.getValue(); - super.updateStatus(); - //处理解析失败的文件 - super.handleParseingFailFile(e); + if (e instanceof AnalyseException) { + AnalyseException exception = (AnalyseException) e; + if (exception.isDuplicateKeyException()) { + ErrorLogManager.getInstance().write(new SpectrumErrorEvent(new Date(), ErrorType.INSERT_ERROR, super.spectrumFile.getName(), String.valueOf(this.sampleData.getSampleId()))); + } + //处理解析失败的文件 + super.handleParseingFailFile(e); + } else { + //修改状态为解析失败 + super.status = SampleStatus.FAIL.getValue(); + super.updateStatus(); + + //处理解析失败的文件 + super.handleParseingFailFile(e); + } throw e; }finally { if(Objects.nonNull(this.parsingProcessLog)){ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumLogManager.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumLogManager.java index dea3e018..3e814be2 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumLogManager.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumLogManager.java @@ -65,10 +65,12 @@ public class SpectrumLogManager { * 保存所有日志 */ public void saveAllLog(){ - if(!execLogMap.isEmpty()){ - execLogMap.forEach((k,v)->{ - this.saveLog(k); - }); + synchronized (execLogMap){ + if(!execLogMap.isEmpty()){ + execLogMap.forEach((k,v)->{ + this.saveLog(k); + }); + } } } } 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 e382fd6f..dc6a46b9 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 @@ -25,7 +25,6 @@ public class SpectrumParsingActuator implements Runnable{ private final static String MSG_TYPE = "MSG_TYPE DATA"; private final static String EMAIL_STOP = "STOP"; - /** * 邮件对象 */ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java index ea4dc666..9158d08c 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.jeecg.common.properties.*; import org.jeecg.common.util.NameStandUtil; import org.jeecg.common.util.RedisStreamUtil; +import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.datasource.OraDataSourceProperties; import org.jeecg.modules.service.*; import org.springframework.context.ApplicationContext; @@ -81,6 +82,9 @@ public class SpectrumServiceQuotes { private final ApplicationContext applicationContext; + private final RedisUtil redisUtil; + + private final MaximumPoolSizeProperties maximumPoolSizeProperties; /** * 原始库插入数据锁 */ From ba810df5d21d821326a4dc67ac6debdff51a1c5d Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Fri, 12 Jan 2024 14:48:01 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E6=8F=92=E5=85=A5=E6=95=B0=E6=8D=AE=E8=BF=9D?= =?UTF-8?q?=E5=8F=8D=E5=94=AF=E4=B8=80=E7=BA=A6=E6=9D=9F=E6=80=A7=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=86=85=E5=AE=B9sampleId=E6=9C=AA=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/jeecg/common/constant/RedisConstant.java | 2 ++ .../src/main/java/org/jeecg/modules/ErrorLogManager.java | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java index f86d600b..9cd85b76 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/RedisConstant.java @@ -45,4 +45,6 @@ public interface RedisConstant { * 删除失败邮件KEY */ String DELETE_FAIL_EMAILS = "delete_fail_emails"; + + String UNDEAL_FILE = "Undeal:"; } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ErrorLogManager.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ErrorLogManager.java index 6f6d03bc..5e830a23 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ErrorLogManager.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/ErrorLogManager.java @@ -51,7 +51,9 @@ public class ErrorLogManager { //台站找不到,格式化报错信息 if(event.getErrorType().equals(ErrorType.STATION_ERROR)){ errorContent = String.format(ErrorType.STATION_ERROR.getContent(),event.getFormatArgs()); - }else{ + } else if (event.getErrorType().equals(ErrorType.INSERT_ERROR)) { + errorContent = String.format(ErrorType.INSERT_ERROR.getContent(), event.getFormatArgs()); + } else{ errorContent = event.getErrorType().getContent(); } //header、acquisition、ariSamplerFlow错误使用mesg_id生成文件名称 From 00a61f60c697d6059c00682b6242b4376bc493ab Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Fri, 12 Jan 2024 15:07:39 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:1.=E4=BF=AE=E6=94=B9Sample=E5=88=86?= =?UTF-8?q?=E6=9E=90=E5=BC=82=E5=B8=B8=E6=97=B6=E9=92=88=E5=AF=B9=E8=BF=9D?= =?UTF-8?q?=E5=8F=8D=E5=94=AF=E4=B8=80=E6=80=A7=E7=BA=A6=E6=9D=9F=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/modules/spectrum/SamplephdSpectrum.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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 8cd0b4d4..3680d36f 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 @@ -75,21 +75,20 @@ public class SamplephdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { //异常返回文件名称用于报错日志 super.returnFileName.append(super.spectrumFile.getName()); + //修改状态为解析失败 + super.status = SampleStatus.FAIL.getValue(); if (e instanceof AnalyseException) { AnalyseException exception = (AnalyseException) e; if (exception.isDuplicateKeyException()) { ErrorLogManager.getInstance().write(new SpectrumErrorEvent(new Date(), ErrorType.INSERT_ERROR, super.spectrumFile.getName(), String.valueOf(this.sampleData.getSampleId()))); + }else{ + super.updateStatus(); } - //处理解析失败的文件 - super.handleParseingFailFile(e); } else { - //修改状态为解析失败 - super.status = SampleStatus.FAIL.getValue(); super.updateStatus(); - - //处理解析失败的文件 - super.handleParseingFailFile(e); } + //处理解析失败的文件 + super.handleParseingFailFile(e); throw e; }finally { if(Objects.nonNull(this.parsingProcessLog)){ From f7e51db3bcedd47465a8d42b665e7988efd5bb27 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Fri, 12 Jan 2024 15:49:11 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=A7=BB=E5=8A=A8=E6=96=87=E4=BB=B6=E5=9C=A8?= =?UTF-8?q?savefile=E5=B7=B2=E7=BB=8F=E6=9C=89=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E8=BF=9D=E5=8F=8D=E5=94=AF=E4=B8=80=E7=BA=A6?= =?UTF-8?q?=E6=9D=9F=E6=80=A7=E7=9A=84=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E6=98=AF=E5=B0=B1=E7=A7=BB=E5=8A=A8=E5=88=B0?= =?UTF-8?q?undeal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/modules/spectrum/AbstractSpectrumHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java index 9b8dd0ca..2da09334 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java @@ -277,7 +277,9 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { final String savefileName = spectrumServiceQuotes.getSpectrumPathProperties().getSaveFilePath().substring(1); //若文件已经在savefile了进行复制 if(spectrumFile.getAbsolutePath().contains(savefileName)){ - FileOperation.copyFile(spectrumFile,finalPath,true); + if (!(e instanceof AnalyseException)) { + FileOperation.copyFile(spectrumFile,finalPath,true); + } }else { //若文件不在savefile 则判断异常是否属于违反唯一约束性 if (e instanceof AnalyseException) {