24282 vor 2 Jahren
Ursprung
Commit
afbebb2926

+ 5 - 0
src/main/java/com/fjhx/entity/EmailMessageAttachment.java

@@ -39,6 +39,11 @@ public class EmailMessageAttachment implements Serializable {
     private String email;
 
     /**
+     * 发送时间
+     */
+    private Date fromDate;
+
+    /**
      * 附件名称
      */
     private String name;

+ 25 - 7
src/main/java/com/fjhx/service/impl/AccountServiceImpl.java

@@ -1,6 +1,8 @@
 package com.fjhx.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.thread.ThreadUtil;
@@ -11,6 +13,7 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fjhx.config.TaskPoolConfig;
 import com.fjhx.config.exception.EmailEngineException;
+import com.fjhx.config.exception.ServiceException;
 import com.fjhx.config.redis.RedisCache;
 import com.fjhx.constants.RedisConstant;
 import com.fjhx.entity.EmailInfo;
@@ -32,6 +35,7 @@ import org.springframework.web.context.ServletContextAware;
 import javax.servlet.ServletContext;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
@@ -69,6 +73,11 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
      */
     private static final int SIZE = 50;
 
+    /**
+     * 最多统计多少天的正文以及邮件
+     */
+    private static final int DAY = 30;
+
     @Override
     public void setServletContext(ServletContext servletContext) {
         syncExecutor.execute(this::syncMessageContent);
@@ -79,11 +88,13 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
      * 同步正文
      */
     private void syncMessageContent() {
+        DateTime dateTime = DateUtil.offsetDay(new Date(), -DAY);
 
         List<String> collect = emailMessageService.list(Wrappers.<EmailMessage>lambdaQuery()
                         .select(EmailMessage::getEmail, EmailMessage::getMessageId)
                         .eq(EmailMessage::getIsShow, true)
                         .eq(EmailMessage::getContentSync, false)
+                        .ge(EmailMessage::getFromDate, dateTime)
                         .orderByDesc(EmailMessage::getFromDate).last("limit 50"))
                 .stream()
                 .map(item -> item.getEmail() + "," + item.getMessageId())
@@ -140,9 +151,12 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
     }
 
     private void syncMessageAttachment() {
+        DateTime dateTime = DateUtil.offsetDay(new Date(), -DAY);
+
         List<String> collect = emailMessageAttachmentService.list(Wrappers.<EmailMessageAttachment>lambdaQuery()
                         .select(EmailMessageAttachment::getAttachmentId, EmailMessageAttachment::getEmail, EmailMessageAttachment::getPath)
                         .eq(EmailMessageAttachment::getIsDownload, false)
+                        .ge(EmailMessageAttachment::getFromDate, dateTime)
                         .orderByDesc(EmailMessageAttachment::getCreateTime)
                         .last("limit 50"))
                 .stream()
@@ -207,12 +221,12 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
             emailInfo = BeanUtil.copyProperties(bindingVo, EmailInfo.class);
             emailInfoService.save(emailInfo);
             // 添加账号
-            RetryUtil.execute(() -> EmailEngineUtil.createAccount(bindingVo), 3, 1000L);
+            RetryUtil.execute(() -> EmailEngineUtil.createAccount(bindingVo), 3, 3000L);
             // redis添加同步进度
             this.progressInitialization(bindingVo);
         } catch (Exception e) {
-            RetryUtil.execute(() -> EmailEngineUtil.deleteAccount(bindingVo.getEmail()), 5, 1000L);
-            throw e;
+            RetryUtil.execute(() -> EmailEngineUtil.deleteAccount(bindingVo.getEmail()), 5, 3000L);
+            throw new ServiceException("添加邮箱失败");
         }
 
         // 异步遍历文件夹下的所有邮件
@@ -249,7 +263,8 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
         String email = bindingVo.getEmail();
         int pages = bindingVo.getPages();
 
-        MessageVo messageVo = RetryUtil.executeT(() -> EmailEngineUtil.getMessageList(email, bindingVo.getPath(), 0, 1), 5, 1000L);
+        ThreadUtil.sleep(3000L);
+        MessageVo messageVo = RetryUtil.executeT(() -> EmailEngineUtil.getMessageList(email, bindingVo.getPath(), 0, 1), 5, 3000L);
 
         ProgressVo progressVo = new ProgressVo();
         progressVo.setEmail(email);
@@ -311,10 +326,12 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
             EmailMessage message = this.createMessage(emailInfoId, email, messagesDTO);
             emailMessageList.add(message);
 
+            Date fromDate = message.getFromDate();
+
             List<MessageVo.MessagesDTO.AttachmentsDTO> attachments = messagesDTO.getAttachments();
             if (attachments != null && attachments.size() > 0) {
                 for (MessageVo.MessagesDTO.AttachmentsDTO attachment : attachments) {
-                    emailMessageAttachmentList.add(this.createMessageAttachment(message, attachment));
+                    emailMessageAttachmentList.add(this.createMessageAttachment(message, attachment, fromDate));
                 }
             }
         }
@@ -356,7 +373,7 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
     /**
      * 生成附件实体
      */
-    private EmailMessageAttachment createMessageAttachment(EmailMessage message, MessageVo.MessagesDTO.AttachmentsDTO attachment) {
+    private EmailMessageAttachment createMessageAttachment(EmailMessage message, MessageVo.MessagesDTO.AttachmentsDTO attachment, Date fromDate) {
         String newFileName = attachment.getId() + "." + FileUtil.getSuffix(attachment.getFilename());
 
         EmailMessageAttachment emailMessageAttachment = new EmailMessageAttachment();
@@ -367,6 +384,7 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
         emailMessageAttachment.setSize(attachment.getEncodedSize());
         emailMessageAttachment.setPath(message.getEmail() + "\\" + newFileName);
         emailMessageAttachment.setIsDownload(false);
+        emailMessageAttachment.setFromDate(fromDate);
 
         return emailMessageAttachment;
     }
@@ -412,7 +430,7 @@ public class AccountServiceImpl implements IAccountService, ServletContextAware
         List<MessageVo.MessagesDTO.AttachmentsDTO> attachments = messagesDTO.getAttachments();
         if (attachments != null && attachments.size() > 0) {
             emailMessageAttachmentList = attachments.stream()
-                    .map(attachment -> this.createMessageAttachment(emailMessage, attachment))
+                    .map(attachment -> this.createMessageAttachment(emailMessage, attachment, emailMessage.getFromDate()))
                     .collect(Collectors.toList());
             emailMessageAttachmentService.saveOrUpdateBatch(emailMessageAttachmentList);
         }