From abe1d6dfb3ceaa057ed3a781dd2126e34c707009 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Fri, 23 Feb 2024 20:09:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A4=84=E7=90=86=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BC=9A=E5=88=A0=E9=99=A4=E9=82=AE=E4=BB=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/email/EmailServiceManager.java | 10 +++--- .../org/jeecg/modules/AutoProcessManager.java | 36 ++++++++++++++----- .../jeecg/modules/EmailParsingActuator.java | 22 ++++++------ .../spectrum/SpectrumParsingActuator.java | 1 + 4 files changed, 46 insertions(+), 23 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 51e4c073..95822640 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 @@ -543,13 +543,13 @@ public class EmailServiceManager { fileName.append(StringConstant.UNDER_LINE); fileName.append(DateUtils.formatDate(new Date(),"YYMMdd")); fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(new Date(),"HHMMSSSSS")); + fileName.append(DateUtils.formatDate(new Date(),"HHmmssSSS")); fileName.append(StringConstant.UNDER_LINE); fileName.append("receive"); fileName.append(StringConstant.UNDER_LINE); fileName.append(DateUtils.formatDate(receivedDate,"YYMMdd")); fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(receivedDate,"HHMMSSSSS")); + fileName.append(DateUtils.formatDate(receivedDate,"HHmmssSSS")); fileName.append(StringConstant.UNDER_LINE); fileName.append(emailCounter); fileName.append(SAVE_EML_SUFFIX); @@ -580,6 +580,8 @@ public class EmailServiceManager { String errorMsg = StrUtil.format("The email download failed, the subject of the email is {}, the reason is {}.", subject, e.getMessage()); log.error(errorMsg); throw new DownloadEmailException(errorMsg); + }catch (Exception e) { + log.error("",e); }finally { EmailLogEvent event = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDEML,subject,DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss:SSS"), (Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath())); @@ -599,8 +601,8 @@ public class EmailServiceManager { Date receivedDate = null; try { subject = MimeUtility.decodeText(message.getSubject()); - receivedDate = message.getReceivedDate(); message.setFlag(Flags.Flag.DELETED,true); + log.info("EmailServiceManager: Remove Email:{},receiveTime:{}",message.getSubject(), DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss")); } 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()); @@ -645,9 +647,9 @@ public class EmailServiceManager { boolean exist = false; try { String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; - log.info("Check: Remove Email:{},receiveTime:{}",message.getSubject(), DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss")); exist = redisUtil.hasKey(key); if(exist){ + log.info("Check: Remove Email:{},receiveTime:{}",message.getSubject(), DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss")); message.setFlag(Flags.Flag.DELETED,true); } return exist; 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 4472ca79..59496410 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 @@ -85,6 +85,20 @@ public class AutoProcessManager{ if(emailExecThreadMap.containsKey(next.getId())){ EmailParsingActuator actuator = emailExecThreadMap.get(next.getId()); actuator.setStop(true); + // 二十秒内 如果现在没有停止将强制停止 + for(int i=1;i<=20;i++){ + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + if(i==20 && actuator.isAlive()){ + actuator.stop(); + } + if(!actuator.isAlive()){ + break; + } + } emailExecThreadMap.remove(next.getId()); } iterator.remove(); @@ -95,14 +109,20 @@ public class AutoProcessManager{ next.setResetFlag(false); } if(next.isNewEmailFlag()){ - EmailParsingActuator emailParsingActuator = new EmailParsingActuator(); - emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime); - emailParsingActuator.setName(next.getUsername()+"-email-monitor"); - emailParsingActuator.start(); - //把邮件监测执行线程加入管理队列 - emailExecThreadMap.put(next.getId(),emailParsingActuator); - //新邮件监测监测线程已启动则修改新邮件标记为false - next.setNewEmailFlag(false); + // 网络正常之后才允许创建新的实例 + final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); + emailServiceManager.init(next); + boolean testFlag = emailServiceManager.testConnectEmailServer(); + if(testFlag){ + EmailParsingActuator emailParsingActuator = new EmailParsingActuator(); + emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime); + emailParsingActuator.setName(next.getUsername()+"-email-monitor"); + emailParsingActuator.start(); + //把邮件监测执行线程加入管理队列 + emailExecThreadMap.put(next.getId(),emailParsingActuator); + //新邮件监测监测线程已启动则修改新邮件标记为false + next.setNewEmailFlag(false); + } } } } 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 e3868439..bf267392 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 @@ -75,16 +75,16 @@ public class EmailParsingActuator extends Thread{ if(ArrayUtils.isNotEmpty(messages)){ log.info("EmailParsingActuator本次获取邮件数量为:{}",messages.length); //检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除 - for(int i=messages.length-1;i>=0;i--){ - if (!messages[i].isExpunged()){ - String messageId = ((MimeMessage) messages[i]).getMessageID(); - final boolean exist = emailServiceManager.check(messages[i],messageId); - messageIds.add(messageId); - if(exist){ - messages = ArrayUtils.remove(messages,i); - } - } - } +// for(int i=messages.length-1;i>=0;i--){ +// if (!messages[i].isExpunged()){ +// String messageId = ((MimeMessage) messages[i]).getMessageID(); +// final boolean exist = emailServiceManager.check(messages[i],messageId); +// messageIds.add(messageId); +// if(exist){ +// messages = ArrayUtils.remove(messages,i); +// } +// } +// } log.info("EmailParsingActuator本次真实执行邮件数量为:{}",messages.length); if(messages.length > 0){ //本批次邮件号 @@ -99,7 +99,7 @@ public class EmailParsingActuator extends Thread{ taskLatch.await(); } } - }catch (InterruptedException | MessagingException e) { + }catch (InterruptedException e) { e.printStackTrace(); } finally { //清除本批次邮件日志缓存 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 9a412530..90704309 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 @@ -126,6 +126,7 @@ public class SpectrumParsingActuator implements Runnable{ final String emlErrorPath = spectrumServiceQuotes.getSpectrumPathProperties().getEmlErrorPath(); final String finalPath = rootPath+emlErrorPath; FileOperation.moveFile(emlFile,finalPath,true); + spectrumServiceQuotes.getRedisUtil().del(key); throw new DownloadEmailException("邮件移走后手动抛出DownloadEmailException"); } }