From 960b8be38956863a659d3b70c38406108658df6b Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Mon, 25 Sep 2023 19:22:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:1.=E4=BF=AE=E6=94=B9B=E8=B0=B1=E5=88=86?= =?UTF-8?q?=E6=9E=90=E5=8A=9F=E8=83=BD=E4=B8=AD=E5=AD=98=E5=82=A8=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E8=B7=AF=E5=BE=84=E5=8E=BB=E9=99=A4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8E=E7=BC=802.=E4=BC=98=E5=8C=96=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E8=B0=B1=E3=80=81=E6=8A=A5=E8=AD=A6=E8=B0=B1=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8A=9F=E8=83=BD3.=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E6=97=B6=E5=8F=AF=E8=8E=B7=E5=8F=96=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=90=AF=E5=8A=A8=E6=97=B6=E9=97=B4=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8A=9F=E8=83=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/email/EmailServiceManager.java | 30 +++++++++++++++---- .../common/properties/TaskProperties.java | 5 ++++ .../org/jeecg/modules/AutoProcessManager.java | 14 ++++----- .../jeecg/modules/EmailParsingActuator.java | 7 +++-- .../modules/email/EmailReceivePolicy.java | 26 ++++++++++++++++ .../service/impl/CommentBlockServiceImpl.java | 9 +++++- .../jeecg/modules/spectrum/AlertSpectrum.java | 3 +- .../spectrum/HealthStatusSpectrum.java | 5 ++-- .../jeecg/modules/spectrum/MetSpectrum.java | 5 ++-- .../modules/spectrum/Sample_B_Analysis.java | 3 +- .../jeecg/JeecgAutoProcessApplication.java | 15 +++++++++- 11 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/email/EmailReceivePolicy.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java index 8a2bd25a..2f3cf40c 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 @@ -17,6 +17,9 @@ import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; +import javax.mail.search.ComparisonTerm; +import javax.mail.search.ReceivedDateTerm; +import javax.mail.search.SearchTerm; import java.io.*; import java.net.InetSocketAddress; import java.net.Socket; @@ -30,6 +33,10 @@ import java.util.stream.Collectors; public class EmailServiceManager { private SysEmail email; + /** + * 系统启动时间 + */ + private Date systemStartupTime; /** 邮件接收数量 */ private Integer receiveNum; /** smtp协议的存储对象 */ @@ -56,10 +63,11 @@ public class EmailServiceManager { * 初始化邮件服务管理器 * @param email 邮件属性 */ - public void init(SysEmail email,Integer receiveNum,String temporaryStoragePath){ + public void init(SysEmail email,Integer receiveNum,String temporaryStoragePath,Date systemStartupTime){ this.email = email; this.receiveNum = receiveNum; this.temporaryStoragePath = temporaryStoragePath; + this.systemStartupTime = systemStartupTime; } /** @@ -115,12 +123,24 @@ public class EmailServiceManager { //获取收件箱 folder = store.getFolder("INBOX"); folder.open(Folder.READ_WRITE); - //获取邮件数量 + //如果邮箱邮件数量 > 0 final int messageCount = folder.getMessageCount(); if(messageCount > 0){ - Integer start = 1; - Integer end = this.receiveNum>messageCount?messageCount:this.receiveNum; - final Message[] messages = folder.getMessages(start,end); + SearchTerm searchTerm = new ReceivedDateTerm(ComparisonTerm.GT,this.systemStartupTime); + Message[] messages = folder.search(searchTerm); + Arrays.sort(messages, (o1, o2) -> { + try { + return o1.getReceivedDate().compareTo(o2.getReceivedDate()); + } catch (MessagingException e) { + e.printStackTrace(); + } + return 0; + }); + if(this.receiveNum >= messages.length){ + return messages; + }else{ + messages = Arrays.copyOfRange(messages,0,this.receiveNum-1); + } return messages; } return null; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java index 8882bbca..0ad23f77 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java @@ -15,6 +15,11 @@ import java.io.Serializable; @ConfigurationProperties(prefix = "task") public class TaskProperties implements Serializable { + /** + * 邮箱邮件获取策略:0-从历史按顺序获取,1-从当前系统启动时间按顺序获取,当前系统启动时间会在系统启动时赋值 + */ + private Integer receivePolicy; + /** * 单次获取邮件数量 */ 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 2b4c87fa..dd685337 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 @@ -14,10 +14,8 @@ import org.jeecg.modules.spectrum.EmailCounter; import org.jeecg.modules.spectrum.SpectrumServiceQuotes; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; + +import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -31,9 +29,10 @@ public class AutoProcessManager{ private final ISysMailService mailService; private final TaskProperties taskProperties; private final RedisUtil redisUtil; - private final SpectrumPathProperties spectrumPathProperties; private final SpectrumServiceQuotes spectrumServiceQuotes; private final EmailCounter emailCounter; + private Date systemStartupTime; + /** * 邮件Map数据锁 */ @@ -51,7 +50,8 @@ public class AutoProcessManager{ /** * 启动自动处理 */ - public void start() { + public void start(Date systemStartupTime) { + this.systemStartupTime = systemStartupTime; //邮件数据监测线程 final MailDataMonitor mailDataMonitor = new MailDataMonitor(); mailDataMonitor.setName("mail-data-monitor"); @@ -90,7 +90,7 @@ public class AutoProcessManager{ } if(next.isNewEmailFlag()){ EmailParsingActuator emailParsingActuator = new EmailParsingActuator(); - emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter); + emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime); emailParsingActuator.setName(next.getUsername()+"-email-monitor"); emailParsingActuator.start(); //把邮件监测执行线程加入管理队列 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 143d5624..511a9959 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 @@ -10,6 +10,7 @@ import org.jeecg.modules.spectrum.SpectrumServiceQuotes; import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import javax.mail.Message; import javax.mail.MessagingException; +import java.util.Date; import java.util.concurrent.*; /** @@ -22,12 +23,14 @@ public class EmailParsingActuator extends Thread{ private ThreadPoolExecutor poolExecutor; private SpectrumServiceQuotes spectrumServiceQuotes; private EmailCounter emailCounter; + private Date systemStartupTime; - public void init(EmailProperties emailProperties,SpectrumServiceQuotes spectrumServiceQuotes,EmailCounter emailCounter){ + public void init(EmailProperties emailProperties,SpectrumServiceQuotes spectrumServiceQuotes,EmailCounter emailCounter,Date systemStartupTime){ this.emailProperties = emailProperties; this.spectrumServiceQuotes = spectrumServiceQuotes; this.taskProperties = spectrumServiceQuotes.getTaskProperties(); this.emailCounter = emailCounter; + this.systemStartupTime = systemStartupTime; //获取机器可用核心数 int systemCores = Runtime.getRuntime().availableProcessors(); @@ -43,7 +46,7 @@ public class EmailParsingActuator extends Thread{ for(;;){ long start = System.currentTimeMillis(); final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); - emailServiceManager.init(emailProperties,taskProperties.getReceiveNum(),taskProperties.getTemporaryStoragePath()); + emailServiceManager.init(this.emailProperties,this.taskProperties.getReceiveNum(),this.taskProperties.getTemporaryStoragePath(),this.systemStartupTime); try { final Message[] messages = emailServiceManager.receiveMail(); if(ArrayUtils.isNotEmpty(messages)){ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/email/EmailReceivePolicy.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/email/EmailReceivePolicy.java new file mode 100644 index 00000000..58b63833 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/email/EmailReceivePolicy.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.email; + +/** + * 获取邮件策略 + */ +public enum EmailReceivePolicy { + + /** + * 历史顺序获取 + */ + HISTORY_ORDER_RECEIVE(0), + /** + * 当前时间顺序获取 + */ + CURR_DATE_ORDER_RECEIVE(1); + + private Integer policy; + + EmailReceivePolicy(int policy) { + this.policy = policy; + } + + public Integer getPolicy(){ + return this.policy; + } +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CommentBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CommentBlockServiceImpl.java index a7880f87..ff205d64 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CommentBlockServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/CommentBlockServiceImpl.java @@ -24,7 +24,14 @@ public class CommentBlockServiceImpl extends ServiceImpl1024){ + comment.append(struct.comment.substring(0,1024)); + }else { + comment.append(comment); + } + description.setDescription(comment.toString()); this.save(description); } } 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 bbc8937c..0c664780 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 @@ -97,8 +97,7 @@ public class AlertSpectrum extends SpectrumHandler{ //获取文件保存路径 String fileSavePath = this.getFileSavePath(); final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); - fileSavePath = properties.getRootPath()+StringConstant.SLASH+fileSavePath; - super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile)); + super.ftpUtil.saveFile(properties.getRootPath()+StringConstant.SLASH+fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile)); //设置FTP文件保存路径 super.ftpSavePath = fileSavePath+StringConstant.SLASH+this.mailFile.getName(); } 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 d54e705c..35b79087 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 @@ -99,10 +99,9 @@ public class HealthStatusSpectrum extends SpectrumHandler{ //获取文件保存路径 String fileSavePath = this.getFileSavePath(); final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); - fileSavePath = properties.getRootPath()+"/"+fileSavePath; - super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile)); + super.ftpUtil.saveFile(properties.getRootPath()+StringConstant.SLASH+fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile)); //设置FTP文件保存路径 - super.ftpSavePath = fileSavePath+"/"+this.mailFile.getName(); + super.ftpSavePath = fileSavePath+StringConstant.SLASH+this.mailFile.getName(); } /** 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 54a5efb0..814d0b31 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 @@ -95,10 +95,9 @@ public class MetSpectrum extends SpectrumHandler{ //获取文件保存路径 String fileSavePath = this.getFileSavePath(); final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); - fileSavePath = properties.getRootPath()+"/"+fileSavePath; - super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile)); + super.ftpUtil.saveFile(properties.getRootPath()+StringConstant.SLASH+fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile)); //设置FTP文件保存路径 - super.ftpSavePath = fileSavePath+"/"+this.mailFile.getName(); + super.ftpSavePath = fileSavePath+StringConstant.SLASH+this.mailFile.getName(); } /** 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 bd7dee08..d56d59d1 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 @@ -272,7 +272,8 @@ 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; + //报告路径存储到数据库时不包括后缀.txt,C++原来是这样做的,并且历史大量数据都是这样,暂时还保持这样 + String arrFileRelativePath = this.arrFilePath+StringConstant.SLASH+this.arrFileName.substring(0,this.arrFileName.lastIndexOf(StringConstant.DOT)); //如果数据已经存储,不在重复存储 final Integer idAnalysis = spectrumServiceQuotes.getAnalysesService().getIdAnalysis(this.sampleData.getSampleId()); if(Objects.nonNull(idAnalysis)){ diff --git a/jeecg-server-cloud/jeecg-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java b/jeecg-server-cloud/jeecg-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java index 7150d3ec..9c38dc05 100644 --- a/jeecg-server-cloud/jeecg-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java +++ b/jeecg-server-cloud/jeecg-auto-process-start/src/main/java/org/jeecg/JeecgAutoProcessApplication.java @@ -2,10 +2,13 @@ package org.jeecg; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.properties.TaskProperties; +import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.AutoProcessManager; import org.jeecg.modules.FileSourceHandleManager; import org.jeecg.modules.UndealHandleManager; +import org.jeecg.modules.email.EmailReceivePolicy; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -17,6 +20,7 @@ import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableScheduling; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.Date; /** * @author 86187 @@ -28,6 +32,7 @@ import java.net.UnknownHostException; @RequiredArgsConstructor public class JeecgAutoProcessApplication extends SpringBootServletInitializer implements CommandLineRunner { + private final TaskProperties taskProperties; private final AutoProcessManager autoProcessManager; private final UndealHandleManager undealHandleManager; private final FileSourceHandleManager fileSourceHandleManager; @@ -55,7 +60,15 @@ public class JeecgAutoProcessApplication extends SpringBootServletInitializer im public void run(String... args) throws Exception { //调用dll System.loadLibrary("ReadPHDFile"); -// autoProcessManager.start(); + //根据配置文件配置邮件获取策略定义时间条件 + Date systemStartupTime = null; + if(EmailReceivePolicy.HISTORY_ORDER_RECEIVE.getPolicy().equals(taskProperties.getReceivePolicy())){ + systemStartupTime = DateUtils.parseDate("1970-01-01 00:00:00","yyyy-MM-dd HH:mm:ss"); + } + if(EmailReceivePolicy.CURR_DATE_ORDER_RECEIVE.getPolicy().equals(taskProperties.getReceivePolicy())){ + systemStartupTime = new Date(); + } + autoProcessManager.start(systemStartupTime); undealHandleManager.start(); fileSourceHandleManager.start(); }