From 6335a3f588c9214529ad949ed9315efddb825df2 Mon Sep 17 00:00:00 2001
From: nieziyan <nzyone@qq.com>
Date: Wed, 24 Apr 2024 09:34:59 +0800
Subject: [PATCH 1/8] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9FTP=E4=B8=BA?=
 =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../impl/GardsSampleDataServiceImpl.java      | 68 +++++++++----------
 1 file changed, 32 insertions(+), 36 deletions(-)

diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java
index 22984ab2..71e490fc 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java
@@ -1,8 +1,10 @@
 package org.jeecg.modules.system.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -13,6 +15,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
+import com.google.common.io.Files;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.QueryRequest;
 import org.jeecg.common.api.vo.Result;
@@ -47,9 +50,6 @@ public class GardsSampleDataServiceImpl extends ServiceImpl<GardsSampleDataMappe
     @Autowired
     private RedisUtil redisUtil;
 
-    @Autowired
-    private FTPUtil ftpUtil;
-
     @Autowired
     private SpectrumPathProperties pathProperties;
 
@@ -110,9 +110,9 @@ public class GardsSampleDataServiceImpl extends ServiceImpl<GardsSampleDataMappe
         TransactionDefinition txDef = new DefaultTransactionDefinition();
         final TransactionStatus txStatus = transactionManager.getTransaction(txDef);
         try {
-            String ftpRootPath = ftpUtil.getFtpRootPath();
-            String savePath = ftpRootPath + pathProperties.getSaveFilePath() + StrUtil.SLASH;
-            String logPath = ftpRootPath + pathProperties.getLogPath() + StrUtil.SLASH;
+            String rootPath = pathProperties.getRootPath();
+            String savePath = rootPath + pathProperties.getSaveFilePath() + StrUtil.SLASH;
+            String logPath = rootPath + pathProperties.getLogPath() + StrUtil.SLASH;
             /* 删除数据库数据 */
             // 过滤掉多余的表
             String ORIGINAL = "ORIGINAL";String RNAUTO = "RNAUTO";String RNMAN = "RNMAN";
@@ -170,16 +170,14 @@ public class GardsSampleDataServiceImpl extends ServiceImpl<GardsSampleDataMappe
             needDel = needDel.stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
             if (CollUtil.isEmpty(needDel))
                 return Result.OK("Data cleaning is complete. No files need to be cleaned!");
-            // 删除FTP文件
-            List<String> failList = new ArrayList<>();
-            for (String path:needDel) {
-                boolean success = ftpUtil.removeFiles(path);
-                if (!success) {
-                    failList.add(path);
-                }
+            // 删除本地文件
+            List<String> fails = new ArrayList<>();
+            for (String path : needDel) {
+                boolean success = FileUtil.del(path);
+                if (!success) fails.add(path);
             }
-            if (CollUtil.isNotEmpty(failList))
-                return Result.error("Data clearing is complete, but file clearing fails!", failList);
+            if (CollUtil.isNotEmpty(fails))
+                return Result.error("Data clearing is complete, but file clearing fails!", fails);
             return Result.OK("Data and file cleanup complete!");
         }catch (Exception e){
             transactionManager.rollback(txStatus);
@@ -215,27 +213,25 @@ public class GardsSampleDataServiceImpl extends ServiceImpl<GardsSampleDataMappe
                                  Integer sampleId, String owner){
         List<String> fileList = new ArrayList<>();
         List<AnalysesDto> AnalysesDtoList = baseMapper.getAnalysis(owner, sampleId);
-        if (CollectionUtils.isNotEmpty(AnalysesDtoList)) {
-            for (AnalysesDto AnalysesDto:AnalysesDtoList) {
-                String baselinePath = AnalysesDto.getBaselinePath();
-                if (StrUtil.isNotBlank(baselinePath)) {
-                    fileList.add(savePath + baselinePath);
-                }
-                String lcPath = AnalysesDto.getLcPath();
-                if (StrUtil.isNotBlank(lcPath)) {
-                    fileList.add(savePath + lcPath);
-                }
-                String scacPath = AnalysesDto.getScacPath();
-                if (StrUtil.isNotBlank(scacPath)) {
-                    fileList.add(savePath + scacPath);
-                }
-                if (StrUtil.isNotBlank(AnalysesDto.getLogPath())) {
-                    fileList.add(logPath + AnalysesDto.getLogPath());
-                }
-                String reportPath = AnalysesDto.getReportPath();
-                if (StrUtil.isNotBlank(reportPath)) {
-                    fileList.add(savePath + reportPath + FileTypeEnum.txt.getType());
-                }
+        for (AnalysesDto AnalysesDto:AnalysesDtoList) {
+            String baselinePath = AnalysesDto.getBaselinePath();
+            if (StrUtil.isNotBlank(baselinePath)) {
+                fileList.add(savePath + baselinePath);
+            }
+            String lcPath = AnalysesDto.getLcPath();
+            if (StrUtil.isNotBlank(lcPath)) {
+                fileList.add(savePath + lcPath);
+            }
+            String scacPath = AnalysesDto.getScacPath();
+            if (StrUtil.isNotBlank(scacPath)) {
+                fileList.add(savePath + scacPath);
+            }
+            if (StrUtil.isNotBlank(AnalysesDto.getLogPath())) {
+                fileList.add(logPath + AnalysesDto.getLogPath());
+            }
+            String reportPath = AnalysesDto.getReportPath();
+            if (StrUtil.isNotBlank(reportPath)) {
+                fileList.add(savePath + reportPath + FileTypeEnum.txt.getType());
             }
         }
         return fileList;

From caf47a58d5014800cc3a719a19c12ed1015118ee Mon Sep 17 00:00:00 2001
From: qiaoqinzheng <qiaoqinzheng@hivekion.com>
Date: Fri, 10 May 2024 16:12:26 +0800
Subject: [PATCH 2/8] =?UTF-8?q?=E4=BA=BA=E5=B7=A5=E4=BA=A4=E4=BA=92?=
 =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD=E5=A6=82?=
 =?UTF-8?q?=E6=9E=9C=E4=B8=8D=E6=98=AF=E6=AD=A3=E5=B8=B8=E8=B0=B1=E6=8F=90?=
 =?UTF-8?q?=E7=A4=BA=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=E5=86=85=E5=AE=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../org/jeecg/modules/service/impl/GammaServiceImpl.java  | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java
index 05fd4687..42f90b0b 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java
@@ -194,6 +194,10 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
             if (!flag) {
                 return result;
             }
+            if (Objects.nonNull(phd) && !phd.isValid()) {
+                result.error500("This Spectrum is invalid! it's counts are all zero");
+                return result;
+            }
             // 加载phd数据所需的lc,scac,baseline数据
             if (dbName.equals("auto")) {
                 gammaFileUtil.SetBaseInfo(phd, "RNAUTO");
@@ -609,6 +613,10 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi
             if (!bRet) {
                 return result;
             }
+            if (Objects.nonNull(phd) && !phd.isValid()) {
+                result.error500("This Spectrum is invalid! it's counts are all zero");
+                return result;
+            }
             if (!redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()) || !redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list")) {
                 //读取缓存的全部核素信息
                 Map<String, NuclideLines> allNuclideMap = (Map<String, NuclideLines>) redisUtil.get("AllNuclideMap");

From 6c5a0bf5464aef9bd3379b9fbff4912174275b01 Mon Sep 17 00:00:00 2001
From: qiaoqinzheng <qiaoqinzheng@hivekion.com>
Date: Mon, 13 May 2024 09:24:25 +0800
Subject: [PATCH 3/8] =?UTF-8?q?=E4=BA=BA=E5=B7=A5=E4=BA=A4=E4=BA=92?=
 =?UTF-8?q?=E6=A8=A1=E5=9D=97BetaDataFile=E5=AE=9E=E4=BD=93=E7=B1=BB?=
 =?UTF-8?q?=E5=A2=9E=E5=8A=A0detectorId=E5=AD=97=E6=AE=B5=E7=94=A8?=
 =?UTF-8?q?=E4=BA=8E=E6=8A=A5=E8=AD=A6=E4=BD=BF=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/main/java/org/jeecg/modules/entity/vo/BetaDataFile.java | 2 ++
 .../jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java | 1 +
 2 files changed, 3 insertions(+)

diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BetaDataFile.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BetaDataFile.java
index 92a31639..2de9f6e2 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BetaDataFile.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/BetaDataFile.java
@@ -41,6 +41,8 @@ public class BetaDataFile implements Serializable {
 
     private String stationId;
 
+    private String detectorId;
+
     private boolean bProcessed;
 
     private boolean saveAnalysisResult;
diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java
index f44a2ec7..8b997d75 100644
--- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java
+++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java
@@ -4420,6 +4420,7 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements
                     String error = "get station_id or detect_id error";
                     return false;
                 }
+                betaDataFile.setDetectorId(detectorId.toString());
                 //新增Gards_Sample_Data表数据
                 sampleDataSpectrumService.saveSampleData(sourceData, stationId, detectorId, filePathName, readLines);
                 //获取sampleId

From 2407b65a067865b58baba748bb383776961bf19d Mon Sep 17 00:00:00 2001
From: qiaoqinzheng <qiaoqinzheng@hivekion.com>
Date: Mon, 13 May 2024 14:09:42 +0800
Subject: [PATCH 4/8] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86?=
 =?UTF-8?q?=E6=A8=A1=E5=9D=97=E4=B8=8B=E8=BD=BD=E9=82=AE=E4=BB=B6=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../common/email/EmailServiceManager.java     | 37 +++++++++----------
 1 file changed, 18 insertions(+), 19 deletions(-)

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 f4f8b334..9c52eb09 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
@@ -532,7 +532,8 @@ public class EmailServiceManager {
             File emlFile = null;
             String status = EmailLogManager.STATUS_SUCCESS;
             Date receivedDate = null;
-            FileOutputStream outputStream = null;
+            InputStream inputStream = null;
+            BufferedOutputStream outputStream = null;
             try {
                 //获取发件人
                 final String address = ((InternetAddress) message.getFrom()[0]).getAddress();
@@ -566,25 +567,19 @@ public class EmailServiceManager {
                 final String rootPath = spectrumPathProperties.getRootPath();
                 final String emlPath = spectrumPathProperties.getEmlPath();
                 emlFile = new File(rootPath+emlPath+File.separator+fileName);
-                outputStream = new FileOutputStream(emlFile);
-                message.writeTo(outputStream);
+//                outputStream = new FileOutputStream(emlFile);
+//                message.writeTo(outputStream);
+
+                int bufferSize = 1024 * 1024; // 1M
+                inputStream = message.getInputStream();
+                outputStream = new BufferedOutputStream(new FileOutputStream(emlFile), bufferSize);
+                // 从邮件的输入流读取内容,并写入到本地文件
+                byte[] buffer = new byte[bufferSize];
+                int bytesRead;
+                while ((bytesRead = inputStream.read(buffer)) != -1) {
+                    outputStream.write(buffer, 0, bytesRead);
+                }
 
-//            int bufferSize = 1024 * 1024; // 1M
-//            InputStream inputStream = message.getInputStream();
-//            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream, bufferSize);
-//            // 或者使用 BufferedOutputStream
-//            OutputStream outputStream = new FileOutputStream(emlFile);
-//            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream, bufferSize);
-//            // 从邮件的输入流读取内容,并写入到本地文件
-//            byte[] buffer = new byte[bufferSize];
-//            int bytesRead;
-//            while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
-//                bufferedOutputStream.write(buffer, 0, bytesRead);
-//            }
-//
-//            // 关闭流
-//            bufferedInputStream.close();
-//            bufferedOutputStream.close();
             } catch (MessagingException | IOException e) {
                 // 下载邮件失败 抛出自定义邮件下载异常
                 status = EmailLogManager.STATUS_ERROR;
@@ -598,7 +593,11 @@ public class EmailServiceManager {
                         (Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath()));
                 EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event);
                 try {
+                    if (Objects.nonNull(inputStream)) {
+                        inputStream.close();
+                    }
                     if (Objects.nonNull(outputStream)) {
+                        outputStream.flush();
                         outputStream.close();
                     }
                 } catch (IOException e) {

From 9fffd2436c3d74b8ba3d5fa0d9a883a4b7b2fbad Mon Sep 17 00:00:00 2001
From: qiaoqinzheng <qiaoqinzheng@hivekion.com>
Date: Mon, 13 May 2024 14:14:01 +0800
Subject: [PATCH 5/8] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86?=
 =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=A8=A1=E5=9D=97=E5=90=8C=E6=AD=A5=E4=BB=A3?=
 =?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../common/email/EmailServiceManager.java     | 11 +++++-----
 .../org/jeecg/modules/AutoProcessManager.java | 11 ++++++++--
 .../jeecg/modules/EmailParsingActuator.java   | 20 ++++++++++++-------
 .../spectrum/SpectrumParsingActuator.java     |  8 ++++----
 4 files changed, 32 insertions(+), 18 deletions(-)

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 9c52eb09..a3ac56f3 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
@@ -9,6 +9,8 @@ import com.sun.mail.imap.IMAPStore;
 import com.sun.mail.smtp.SMTPAddressFailedException;
 import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.Charsets;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.dto.message.MessageDTO;
 import org.jeecg.common.constant.RedisConstant;
@@ -124,7 +126,7 @@ public class EmailServiceManager {
     /**
      * 接收邮件
      */
-    public Message[] receiveMail() {
+    public Message[] receiveMail() throws MessagingException {
         String status = EmailLogManager.STATUS_SUCCESS;
         try{
             //配置邮件服务属性
@@ -183,12 +185,11 @@ public class EmailServiceManager {
                     return Arrays.copyOfRange(messages,0,this.receiveNum-1);
                 }
             }
-        }catch (MessagingException e){
+        } catch (MessagingException e){
             status = EmailLogManager.STATUS_ERROR;
             log.error("Email connection is abnormal, account is {}, service is {},the reason is {}.",email.getName(),email.getEmailServerAddress(),e.getMessage());
-            e.printStackTrace();
-            return null;
-        }finally {
+            throw e;
+        } finally {
             EmailLogEvent connectEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,email,status,EmailLogManager.CONNECT);
             EmailLogManager.getInstance().setConnectLogEvent(connectEvent);
             //GetAllId C++原业务是把远程邮箱邮件同步到C++,本次java编写没有这一步,所以和Connect绑定,若Connect成功则GetAllId成功
diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/AutoProcessManager.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/AutoProcessManager.java
index 3a0880dd..9460d44d 100644
--- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/AutoProcessManager.java
+++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/AutoProcessManager.java
@@ -233,9 +233,15 @@ public class AutoProcessManager{
                                     if(databaseEmail.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())){
                                         final boolean testFlag = testConnectEmailServer(databaseEmail);
                                         if(testFlag){
-                                            databaseEmail.setNewEmailFlag(true);
+                                            if (emailExecThreadMap.containsKey(databaseEmail.getId())) {
+                                                EmailParsingActuator actuator = emailExecThreadMap.get(databaseEmail.getId());
+                                                actuator.setStop(false);
+                                                log.info("{}邮箱重新加入监测队列",databaseEmail.getUsername());
+                                            } else {
+                                                databaseEmail.setNewEmailFlag(true);
+                                                log.info("{}邮箱加入监测队列,设置新增标记",databaseEmail.getUsername());
+                                            }
                                             emailMap.put(databaseEmail.getId(),databaseEmail);
-                                            log.info("{}邮箱加入监测队列,设置新增标记",databaseEmail.getUsername());
                                         }
                                     }
                                 }
@@ -279,6 +285,7 @@ public class AutoProcessManager{
                         if(next.getValue().getState() == State.TERMINATED){
                             log.info("{}邮箱执行线程已停止,emailExecThreadMap删除此邮箱数据",next.getValue().getEmailProperties().getUsername());
                             checkStopThreads.remove();
+                            emailMap.remove(next.getKey());
                         }
                     }
 
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 737b53c8..2f85fe4f 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
@@ -17,10 +17,7 @@ import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.*;
 
 /**
@@ -79,11 +76,17 @@ public class EmailParsingActuator extends Thread{
             try {
                 Message[] messages = emailServiceManager.receiveMail();
                 if(ArrayUtils.isNotEmpty(messages)){
-                    log.info("EmailParsingActuator本次获取邮件数量为:{}",messages.length);
+                    log.info("EmailParsingActuator本次{}获取邮件数量为:{}", Thread.currentThread().getName(), messages.length);
                     //检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除
                     for(int i=messages.length-1;i>=0;i--){
+                        if (null == messages[i].getHeader("Message-ID")) {
+                            System.out.println("Message ID是空值信息!!!!!!!");
+                            messages = ArrayUtils.remove(messages, i);
+                            continue;
+                        }
                         if (!messages[i].isExpunged()){
                             String messageId = ((MimeMessage) messages[i]).getMessageID();
+                            System.out.println("正常获取到的Message ID是:"+messageId);
                             final boolean exist = emailServiceManager.check(messages[i],messageId);
                             messageIds.add(messageId);
                             if(exist){
@@ -105,10 +108,13 @@ public class EmailParsingActuator extends Thread{
                         taskLatch.await();
                     }
                 }
-            }catch (InterruptedException e) {
-                e.printStackTrace();
             } catch (MessagingException e) {
+                System.out.println("捕获MessagingException!!!!!!!!");
+                closeResource();
                 throw new RuntimeException(e);
+            } catch (Exception e) {
+                closeResource();
+                log.error(""+e);
             } finally {
                 //清除本批次邮件日志缓存
                 EmailLogManager.getInstance().clear();
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 a88f07ad..5548ba1e 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
@@ -97,9 +97,6 @@ public class SpectrumParsingActuator implements Runnable{
             String emlName = subject+ StringConstant.UNDER_LINE+ receiveDate;
             String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId;
 //            spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime);
-            //判断当前key的下载次数是否超过限制次数
-            spectrumServiceQuotes.getRedisUtil().incr(key, 1L);
-            spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime);
             //线程开始初始化时,初始本线程负责的能谱日志事件
             SpectrumLogManager.mailSpectrumLogManager.offer(Thread.currentThread().getId(),null);
 
@@ -144,7 +141,10 @@ public class SpectrumParsingActuator implements Runnable{
                     log.warn("This email {} parsing failed and is not listed in the Met, Alert, SOH, Sample, Detbkphd, QC, Gasbkphd spectra.",subject);
                 }
                 emailServiceManager.removeMail(message,batchesCounter);
-            }else {
+            } else {
+                //判断当前key的下载次数是否超过限制次数
+                spectrumServiceQuotes.getRedisUtil().incr(key, 1L);
+                spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime);
                 // 如果邮件内容校验失败(邮件内容不完整) 将错误邮件从eml移动到emlError
                 if (Objects.nonNull(emlFile) && emlFile.exists()){
                     moveEmail(emlFile, key);

From 86968e383b729909dfd44887b7099a4f2d6260d3 Mon Sep 17 00:00:00 2001
From: nieziyan <nzyone@qq.com>
Date: Mon, 13 May 2024 14:58:41 +0800
Subject: [PATCH 6/8] =?UTF-8?q?fix=EF=BC=9A=E5=88=A0=E9=99=A4=E5=A4=9A?=
 =?UTF-8?q?=E4=BD=99=E6=96=87=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../quartz/controller/TestController.java     | 70 -------------------
 1 file changed, 70 deletions(-)
 delete mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/controller/TestController.java

diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/controller/TestController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/controller/TestController.java
deleted file mode 100644
index c350e0a8..00000000
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/controller/TestController.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.jeecg.modules.quartz.controller;
-
-import cn.hutool.core.map.MapUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.SecurityUtils;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.constant.Prompt;
-import org.jeecg.common.constant.SymbolConstant;
-import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.common.util.ImportExcelUtil;
-import org.jeecg.common.util.RedisStreamUtil;
-import org.jeecg.modules.base.dto.Info;
-import org.jeecg.modules.quartz.entity.QuartzJob;
-import org.jeecg.modules.quartz.service.IQuartzJobService;
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("sys/testana")
-@Slf4j
-@Api(tags = "定时任务接口")
-public class TestController {
-
-	@Autowired
-	private RedisStreamUtil redisStreamUtil;
-
-	@GetMapping("test")
-	public void test(){
-		Info info = new Info();
-        info.setStationId("205");
-        info.setSampleId("425496");
-        info.setBetaOrGamma("Gamma");
-        info.setFullOrPrel("FULL");
-        info.setDatasource("1");
-        info.setSampleName("CAX05_001-20230624_0220_Q_FULL_299.3.PHD");
-        info.setCollectionDate(LocalDateTime.now());
-        Map<String, String> nuclides = MapUtil.newHashMap();
-        nuclides.put("Be7","1000000");
-        nuclides.put("sss","1000000");
-        nuclides.put("Tl208","10");
-        info.setNuclides(nuclides);
-        redisStreamUtil.pushAnalysis(info);
-	}
-}

From cf0751109da56849e6659a304cea7fa59a783ca2 Mon Sep 17 00:00:00 2001
From: nieziyan <nzyone@qq.com>
Date: Tue, 18 Jun 2024 14:52:44 +0800
Subject: [PATCH 7/8] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0IDC=E6=95=B0?=
 =?UTF-8?q?=E6=8D=AE=E6=BA=90=E6=8E=A7=E5=88=B6=E8=AE=BF=E9=97=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/org/jeecg/JeecgSpectrumAnalysisApplication.java  | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java b/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java
index 3a5017b3..dbdbc6ff 100644
--- a/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java
+++ b/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java
@@ -1,5 +1,6 @@
 package org.jeecg;
 
+import cn.hutool.core.util.ObjectUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.cache.BetaCache;
 import org.jeecg.common.cache.LocalCache;
@@ -9,6 +10,7 @@ import org.jeecg.modules.service.IDataService;
 import org.jeecg.modules.service.IGammaService;
 import org.jeecg.modules.service.IGardsNuclCoincidenceSumSpectrumService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -40,6 +42,9 @@ public class JeecgSpectrumAnalysisApplication extends SpringBootServletInitializ
     @Autowired
     private IDataService dataService;
 
+    @Value("${isOpen}")
+    private Boolean isOpen;
+
 
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
@@ -78,6 +83,7 @@ public class JeecgSpectrumAnalysisApplication extends SpringBootServletInitializ
         gammaService.readMDCParameter();
         nuclLibService.getNuclideMap();
         nuclCoincidenceSumSpectrumService.getNuclCoincidenceMap();
-        dataService.viewStations();
+        if (ObjectUtil.isNotNull(isOpen) && isOpen)
+            dataService.viewStations();
     }
 }
\ No newline at end of file

From 8b4064607697965149a0c9a70981ae53e9f814ca Mon Sep 17 00:00:00 2001
From: nieziyan <nzyone@qq.com>
Date: Wed, 19 Jun 2024 16:33:55 +0800
Subject: [PATCH 8/8] =?UTF-8?q?feat=EF=BC=9AApplication=E5=BC=82=E5=B8=B8?=
 =?UTF-8?q?=E7=BB=93=E6=9D=9F=E9=80=80=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../org/jeecg/JeecgAbnormalAlarmApplication.java  | 14 +++++++++++++-
 .../org/jeecg/JeecgAutoProcessApplication.java    | 14 +++++++++++++-
 .../java/org/jeecg/JeecgLogManageApplication.java | 14 +++++++++++++-
 .../jeecg/JeecgSpectrumAnalysisApplication.java   | 14 +++++++++++++-
 .../jeecg/JeecgStationOperationApplication.java   | 15 ++++++++++++++-
 .../org/jeecg/JeecgSystemCloudApplication.java    | 13 ++++++++++++-
 .../org/jeecg/JeecgWebStatisticsApplication.java  | 14 +++++++++++++-
 7 files changed, 91 insertions(+), 7 deletions(-)

diff --git a/jeecg-server-cloud/armd-abnormal-alarm-start/src/main/java/org/jeecg/JeecgAbnormalAlarmApplication.java b/jeecg-server-cloud/armd-abnormal-alarm-start/src/main/java/org/jeecg/JeecgAbnormalAlarmApplication.java
index b692a493..853f8c77 100644
--- a/jeecg-server-cloud/armd-abnormal-alarm-start/src/main/java/org/jeecg/JeecgAbnormalAlarmApplication.java
+++ b/jeecg-server-cloud/armd-abnormal-alarm-start/src/main/java/org/jeecg/JeecgAbnormalAlarmApplication.java
@@ -31,7 +31,19 @@ public class JeecgAbnormalAlarmApplication extends SpringBootServletInitializer
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgAbnormalAlarmApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgAbnormalAlarmApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+
+        // ConfigurableApplicationContext application = SpringApplication.run(JeecgAbnormalAlarmApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");
diff --git a/jeecg-server-cloud/armd-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java b/jeecg-server-cloud/armd-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java
index 853ac505..f1883692 100644
--- a/jeecg-server-cloud/armd-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java
+++ b/jeecg-server-cloud/armd-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java
@@ -53,7 +53,19 @@ public class JeecgAutoProcessApplication extends SpringBootServletInitializer im
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgAutoProcessApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgAutoProcessApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+
+        // ConfigurableApplicationContext application = SpringApplication.run(JeecgAutoProcessApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");
diff --git a/jeecg-server-cloud/armd-log-manage-start/src/main/java/org/jeecg/JeecgLogManageApplication.java b/jeecg-server-cloud/armd-log-manage-start/src/main/java/org/jeecg/JeecgLogManageApplication.java
index a4a117ed..61c29aac 100644
--- a/jeecg-server-cloud/armd-log-manage-start/src/main/java/org/jeecg/JeecgLogManageApplication.java
+++ b/jeecg-server-cloud/armd-log-manage-start/src/main/java/org/jeecg/JeecgLogManageApplication.java
@@ -27,7 +27,19 @@ public class JeecgLogManageApplication extends SpringBootServletInitializer impl
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgLogManageApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgLogManageApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+
+        // ConfigurableApplicationContext application = SpringApplication.run(JeecgLogManageApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");
diff --git a/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java b/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java
index dbdbc6ff..5ca9816c 100644
--- a/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java
+++ b/jeecg-server-cloud/armd-spectrum-analysis-start/src/main/java/org/jeecg/JeecgSpectrumAnalysisApplication.java
@@ -52,7 +52,19 @@ public class JeecgSpectrumAnalysisApplication extends SpringBootServletInitializ
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgSpectrumAnalysisApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgSpectrumAnalysisApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+
+        // ConfigurableApplicationContext application = SpringApplication.run(JeecgSpectrumAnalysisApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");
diff --git a/jeecg-server-cloud/armd-station-operation-start/src/main/java/org/jeecg/JeecgStationOperationApplication.java b/jeecg-server-cloud/armd-station-operation-start/src/main/java/org/jeecg/JeecgStationOperationApplication.java
index 8c3db501..e44e7459 100644
--- a/jeecg-server-cloud/armd-station-operation-start/src/main/java/org/jeecg/JeecgStationOperationApplication.java
+++ b/jeecg-server-cloud/armd-station-operation-start/src/main/java/org/jeecg/JeecgStationOperationApplication.java
@@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.service.ISysUserFocusStationService;
 import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.ExitCodeGenerator;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -35,7 +36,19 @@ public class JeecgStationOperationApplication extends SpringBootServletInitializ
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgStationOperationApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgStationOperationApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+
+        //ConfigurableApplicationContext application = SpringApplication.run(JeecgStationOperationApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");
diff --git a/jeecg-server-cloud/armd-system-cloud-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java b/jeecg-server-cloud/armd-system-cloud-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java
index ea5070ee..c270153a 100644
--- a/jeecg-server-cloud/armd-system-cloud-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java
+++ b/jeecg-server-cloud/armd-system-cloud-start/src/main/java/org/jeecg/JeecgSystemCloudApplication.java
@@ -52,7 +52,18 @@ public class JeecgSystemCloudApplication extends SpringBootServletInitializer im
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgSystemCloudApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgSystemCloudApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+        // ConfigurableApplicationContext application = SpringApplication.run(JeecgSystemCloudApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");
diff --git a/jeecg-server-cloud/armd-web-statistics-start/src/main/java/org/jeecg/JeecgWebStatisticsApplication.java b/jeecg-server-cloud/armd-web-statistics-start/src/main/java/org/jeecg/JeecgWebStatisticsApplication.java
index 2c0c4f34..f227a7c5 100644
--- a/jeecg-server-cloud/armd-web-statistics-start/src/main/java/org/jeecg/JeecgWebStatisticsApplication.java
+++ b/jeecg-server-cloud/armd-web-statistics-start/src/main/java/org/jeecg/JeecgWebStatisticsApplication.java
@@ -26,7 +26,19 @@ public class JeecgWebStatisticsApplication extends SpringBootServletInitializer
     }
 
     public static void main(String[] args) throws UnknownHostException {
-        ConfigurableApplicationContext application = SpringApplication.run(JeecgWebStatisticsApplication.class, args);
+        int exitCode = 1;
+        ConfigurableApplicationContext application = null;
+        try {
+            application = SpringApplication.run(JeecgWebStatisticsApplication.class, args);
+        } catch (Exception e) {
+            if (null != application) {
+                application.close();
+                exitCode = SpringApplication.exit(application, () -> 0);
+            }
+            System.exit(exitCode);
+        }
+
+        // ConfigurableApplicationContext application = SpringApplication.run(JeecgWebStatisticsApplication.class, args);
         Environment env = application.getEnvironment();
         String ip = InetAddress.getLocalHost().getHostAddress();
         String port = env.getProperty("server.port");