自动处理模块会删除邮件问题

This commit is contained in:
qiaoqinzheng 2024-02-23 20:09:20 +08:00
parent 93d78ee368
commit abe1d6dfb3
4 changed files with 46 additions and 23 deletions

View File

@ -543,13 +543,13 @@ public class EmailServiceManager {
fileName.append(StringConstant.UNDER_LINE); fileName.append(StringConstant.UNDER_LINE);
fileName.append(DateUtils.formatDate(new Date(),"YYMMdd")); fileName.append(DateUtils.formatDate(new Date(),"YYMMdd"));
fileName.append(StringConstant.UNDER_LINE); 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(StringConstant.UNDER_LINE);
fileName.append("receive"); fileName.append("receive");
fileName.append(StringConstant.UNDER_LINE); fileName.append(StringConstant.UNDER_LINE);
fileName.append(DateUtils.formatDate(receivedDate,"YYMMdd")); fileName.append(DateUtils.formatDate(receivedDate,"YYMMdd"));
fileName.append(StringConstant.UNDER_LINE); fileName.append(StringConstant.UNDER_LINE);
fileName.append(DateUtils.formatDate(receivedDate,"HHMMSSSSS")); fileName.append(DateUtils.formatDate(receivedDate,"HHmmssSSS"));
fileName.append(StringConstant.UNDER_LINE); fileName.append(StringConstant.UNDER_LINE);
fileName.append(emailCounter); fileName.append(emailCounter);
fileName.append(SAVE_EML_SUFFIX); 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()); String errorMsg = StrUtil.format("The email download failed, the subject of the email is {}, the reason is {}.", subject, e.getMessage());
log.error(errorMsg); log.error(errorMsg);
throw new DownloadEmailException(errorMsg); throw new DownloadEmailException(errorMsg);
}catch (Exception e) {
log.error("",e);
}finally { }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"), 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())); (Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath()));
@ -599,8 +601,8 @@ public class EmailServiceManager {
Date receivedDate = null; Date receivedDate = null;
try { try {
subject = MimeUtility.decodeText(message.getSubject()); subject = MimeUtility.decodeText(message.getSubject());
receivedDate = message.getReceivedDate();
message.setFlag(Flags.Flag.DELETED,true); 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) { } catch (MessagingException | UnsupportedEncodingException e) {
status = EmailLogManager.STATUS_ERROR; status = EmailLogManager.STATUS_ERROR;
log.error("Email deletion failed, the subject of the email is :{}, the reason is :{}.",subject,e.getMessage()); 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; boolean exist = false;
try { try {
String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; 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); exist = redisUtil.hasKey(key);
if(exist){ 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); message.setFlag(Flags.Flag.DELETED,true);
} }
return exist; return exist;

View File

@ -85,6 +85,20 @@ public class AutoProcessManager{
if(emailExecThreadMap.containsKey(next.getId())){ if(emailExecThreadMap.containsKey(next.getId())){
EmailParsingActuator actuator = emailExecThreadMap.get(next.getId()); EmailParsingActuator actuator = emailExecThreadMap.get(next.getId());
actuator.setStop(true); 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()); emailExecThreadMap.remove(next.getId());
} }
iterator.remove(); iterator.remove();
@ -95,6 +109,11 @@ public class AutoProcessManager{
next.setResetFlag(false); next.setResetFlag(false);
} }
if(next.isNewEmailFlag()){ if(next.isNewEmailFlag()){
// 网络正常之后才允许创建新的实例
final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance();
emailServiceManager.init(next);
boolean testFlag = emailServiceManager.testConnectEmailServer();
if(testFlag){
EmailParsingActuator emailParsingActuator = new EmailParsingActuator(); EmailParsingActuator emailParsingActuator = new EmailParsingActuator();
emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime); emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime);
emailParsingActuator.setName(next.getUsername()+"-email-monitor"); emailParsingActuator.setName(next.getUsername()+"-email-monitor");
@ -106,6 +125,7 @@ public class AutoProcessManager{
} }
} }
} }
}
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
long sleepTime = taskProperties.getMonitoringMailDataCycle() - (end-start); long sleepTime = taskProperties.getMonitoringMailDataCycle() - (end-start);
//如果sleepTime > 0 需要睡眠到指定时间否则继续下次获取邮件 //如果sleepTime > 0 需要睡眠到指定时间否则继续下次获取邮件

View File

@ -75,16 +75,16 @@ public class EmailParsingActuator extends Thread{
if(ArrayUtils.isNotEmpty(messages)){ if(ArrayUtils.isNotEmpty(messages)){
log.info("EmailParsingActuator本次获取邮件数量为{}",messages.length); log.info("EmailParsingActuator本次获取邮件数量为{}",messages.length);
//检验获取的邮件是否在之前删除失败列表中若在直接调用邮件API删除并且此次数组里元素也删除 //检验获取的邮件是否在之前删除失败列表中若在直接调用邮件API删除并且此次数组里元素也删除
for(int i=messages.length-1;i>=0;i--){ // for(int i=messages.length-1;i>=0;i--){
if (!messages[i].isExpunged()){ // if (!messages[i].isExpunged()){
String messageId = ((MimeMessage) messages[i]).getMessageID(); // String messageId = ((MimeMessage) messages[i]).getMessageID();
final boolean exist = emailServiceManager.check(messages[i],messageId); // final boolean exist = emailServiceManager.check(messages[i],messageId);
messageIds.add(messageId); // messageIds.add(messageId);
if(exist){ // if(exist){
messages = ArrayUtils.remove(messages,i); // messages = ArrayUtils.remove(messages,i);
} // }
} // }
} // }
log.info("EmailParsingActuator本次真实执行邮件数量为{}",messages.length); log.info("EmailParsingActuator本次真实执行邮件数量为{}",messages.length);
if(messages.length > 0){ if(messages.length > 0){
//本批次邮件号 //本批次邮件号
@ -99,7 +99,7 @@ public class EmailParsingActuator extends Thread{
taskLatch.await(); taskLatch.await();
} }
} }
}catch (InterruptedException | MessagingException e) { }catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
//清除本批次邮件日志缓存 //清除本批次邮件日志缓存

View File

@ -126,6 +126,7 @@ public class SpectrumParsingActuator implements Runnable{
final String emlErrorPath = spectrumServiceQuotes.getSpectrumPathProperties().getEmlErrorPath(); final String emlErrorPath = spectrumServiceQuotes.getSpectrumPathProperties().getEmlErrorPath();
final String finalPath = rootPath+emlErrorPath; final String finalPath = rootPath+emlErrorPath;
FileOperation.moveFile(emlFile,finalPath,true); FileOperation.moveFile(emlFile,finalPath,true);
spectrumServiceQuotes.getRedisUtil().del(key);
throw new DownloadEmailException("邮件移走后手动抛出DownloadEmailException"); throw new DownloadEmailException("邮件移走后手动抛出DownloadEmailException");
} }
} }