24282 2 lat temu
rodzic
commit
5a7bd06441

+ 10 - 0
src/main/java/com/fjhx/enums/SendEventEnum.java

@@ -29,6 +29,16 @@ public enum SendEventEnum {
     MAILBOX_NEW("mailboxNew"),
 
     /**
+     * 删除文件夹
+     */
+    MAILBOX_DELETED("mailboxDeleted"),
+
+    /**
+     * 更新文件夹
+     */
+    MAILBOX_RESET("mailboxReset"),
+
+    /**
      * 未知事件
      */
     UNKNOWN_EVENT("unknownEvent");

+ 81 - 40
src/main/java/com/fjhx/service/impl/AccountServiceImpl.java

@@ -59,8 +59,8 @@ public class AccountServiceImpl implements IAccountService {
 
         String email = bindingVo.getEmail();
 
-        ProgressVo progressVo = RedisCache.get(RedisConstant.PROGRESS_KEY + email);
-        Assert.isNull(progressVo, "邮箱正在同步中,请勿重复操作");
+        // ProgressVo progressVo = RedisCache.get(RedisConstant.PROGRESS_KEY + email);
+        // Assert.isNull(progressVo, "邮箱正在同步中,请勿重复操作");
 
         EmailInfo emailInfo = emailInfoService.getOne(Wrappers.<EmailInfo>lambdaQuery().eq(EmailInfo::getEmail, email));
         // 如果存在,直接返回邮箱信息
@@ -103,7 +103,12 @@ public class AccountServiceImpl implements IAccountService {
             case MAILBOX_NEW:
                 this.handleMailboxNewEvent(listenerVo);
                 break;
-
+            case MAILBOX_DELETED:
+                this.handleMailboxDeleteEvent(listenerVo);
+                break;
+            case MAILBOX_RESET:
+                this.handleMailboxResetEvent(listenerVo);
+                break;
             default:
                 log.error("监听到未知事件:{}", JSONObject.toJSONString(listenerVo));
         }
@@ -139,6 +144,33 @@ public class AccountServiceImpl implements IAccountService {
     }
 
     /**
+     * 同步邮件进度初始化
+     */
+    private void synchronizationProgressInitialization(String email, List<EmailMailboxVo.MailboxesDTO> mailboxList) {
+
+        ProgressVo progressVo = new ProgressVo();
+
+
+        List<ProgressVo.Details> detailsList = BeanUtil.copyToList(mailboxList, ProgressVo.Details.class);
+
+        int totalMessageCount = 0;
+
+        for (ProgressVo.Details detail : detailsList) {
+            detail.setCompleteMessageCount(0);
+            detail.setPercentage(0);
+            totalMessageCount += detail.getMessages();
+        }
+
+        progressVo.setEmail(email);
+        progressVo.setTotalMessageCount(totalMessageCount);
+        progressVo.setCompleteMessageCount(0);
+        progressVo.setPercentage(0);
+        progressVo.setDetailsList(detailsList);
+
+        RedisCache.set(RedisConstant.PROGRESS_KEY + email, progressVo);
+    }
+
+    /**
      * 异步读取文件
      */
     private void asyncReadEmail(String email, List<EmailMailbox> emailMailboxList) {
@@ -153,11 +185,16 @@ public class AccountServiceImpl implements IAccountService {
                 int page = 0;
                 int pages;
                 do {
-                    MessageVo result = EmailEngineUtil.handleMessageList(email, emailMailbox.getPath(), page);
+                    MessageVo result = EmailEngineUtil.getMessageList(email, emailMailbox.getPath(), page);
                     List<MessageVo.MessagesDTO> messagesDTOList = result.getMessages();
                     if (messagesDTOList.size() > 0) {
-                        this.saveBatchMessage(email, lastMessageIdList, emailMailbox, messagesDTOList);
+                        List<EmailMessage> emailMessageList = this.saveBatchMessage(email, lastMessageIdList, emailMailbox, messagesDTOList);
                         this.synchronizationProgress(email, messagesDTOList, emailMailbox);
+
+                        lastMessageIdList.clear();
+                        for (EmailMessage emailMessage : emailMessageList) {
+                            lastMessageIdList.add(emailMessage.getMessageId());
+                        }
                     }
                     pages = result.getPages();
                     page++;
@@ -170,7 +207,7 @@ public class AccountServiceImpl implements IAccountService {
     /**
      * 批量保存邮件信息
      */
-    private void saveBatchMessage(String email, List<String> lastMessageId, EmailMailbox emailMailbox, List<MessageVo.MessagesDTO> messageList) {
+    private List<EmailMessage> saveBatchMessage(String email, List<String> lastMessageId, EmailMailbox emailMailbox, List<MessageVo.MessagesDTO> messageList) {
         List<EmailMessage> emailMessageList = new ArrayList<>();
         List<EmailMessageSend> emailMessageSendList = new ArrayList<>();
         List<EmailMessageAttachment> emailMessageAttachmentList = new ArrayList<>();
@@ -199,11 +236,7 @@ public class AccountServiceImpl implements IAccountService {
         // 保存附件信息
         emailMessageAttachmentService.saveBatch(emailMessageAttachmentList);
 
-        lastMessageId.clear();
-        for (EmailMessage emailMessage : emailMessageList) {
-            lastMessageId.add(emailMessage.getMessageId());
-        }
-
+        return emailMessageList;
     }
 
     /**
@@ -324,32 +357,6 @@ public class AccountServiceImpl implements IAccountService {
     }
 
     /**
-     * 同步邮件进度初始化
-     */
-    private void synchronizationProgressInitialization(String email, List<EmailMailboxVo.MailboxesDTO> mailboxList) {
-
-        ProgressVo progressVo = new ProgressVo();
-
-
-        List<ProgressVo.Details> detailsList = BeanUtil.copyToList(mailboxList, ProgressVo.Details.class);
-
-        int totalMessageCount = 0;
-
-        for (ProgressVo.Details detail : detailsList) {
-            detail.setCompleteMessageCount(0);
-            detail.setPercentage(0);
-            totalMessageCount += detail.getMessages();
-        }
-
-        progressVo.setTotalMessageCount(totalMessageCount);
-        progressVo.setCompleteMessageCount(0);
-        progressVo.setPercentage(0);
-        progressVo.setDetailsList(detailsList);
-
-        RedisCache.set(RedisConstant.PROGRESS_KEY + email, progressVo);
-    }
-
-    /**
      * 同步邮件进度
      */
     private void synchronizationProgress(String email, List<MessageVo.MessagesDTO> messagesDTOList, EmailMailbox emailMailbox) {
@@ -426,20 +433,54 @@ public class AccountServiceImpl implements IAccountService {
     }
 
     /**
-     * 邮件flag被改变件
+     * 邮件flag被改变
      */
     private void handleMessageUpdatedEvent(ListenerVo listenerVo) {
         // System.err.println(JSONObject.toJSONString(listenerVo));
     }
 
     /**
-     * 新增文件夹
+     * 新增文件夹事件
      */
     private void handleMailboxNewEvent(ListenerVo listenerVo) {
 
-        System.err.println(JSONObject.toJSONString(listenerVo));
+        EmailMailboxVo.MailboxesDTO mailboxesDTO = listenerVo.getData().toJavaObject(EmailMailboxVo.MailboxesDTO.class);
 
+        EmailInfo emailInfo = emailInfoService.getOne(
+                Wrappers.<EmailInfo>lambdaQuery().eq(EmailInfo::getEmail, listenerVo.getAccount()));
+
+        EmailMailbox emailMailbox = new EmailMailbox();
+        emailMailbox.setEmailInfoId(emailInfo.getId());
+        emailMailbox.setEmail(emailInfo.getEmail());
+        emailMailbox.setName(mailboxesDTO.getName());
+        emailMailbox.setPath(mailboxesDTO.getPath());
+        emailMailbox.setIsShow(true);
+        emailMailbox.setInitialize(true);
+        emailMailboxService.save(emailMailbox);
     }
 
+    /**
+     * 删除文件夹事件
+     */
+    private void handleMailboxDeleteEvent(ListenerVo listenerVo) {
+        EmailMailboxVo.MailboxesDTO mailboxesDTO = listenerVo.getData().toJavaObject(EmailMailboxVo.MailboxesDTO.class);
+
+        boolean remove = emailMailboxService.remove(Wrappers.<EmailMailbox>lambdaQuery()
+                .eq(EmailMailbox::getPath, mailboxesDTO.getPath())
+                .eq(EmailMailbox::getEmail, listenerVo.getAccount())
+        );
+
+        if (!remove) {
+            log.error("文件夹删除失败:email '{}',path '{}'", listenerVo.getAccount(), mailboxesDTO.getPath());
+        }
+
+    }
+
+    /**
+     * 更新文件夹事件
+     */
+    public void handleMailboxResetEvent(ListenerVo listenerVo) {
+        System.err.println(listenerVo);
+    }
 
 }

+ 2 - 2
src/main/java/com/fjhx/utils/EmailEngineUtil.java

@@ -84,8 +84,8 @@ public class EmailEngineUtil {
     /**
      * 查看文件夹的所有邮件
      */
-    public static MessageVo handleMessageList(String email, String path, int page) {
-        String url = "/v1/account/" + email + "/messages?path=" + path + "&page=" + page + "&pageSize=100&documentStore=false";
+    public static MessageVo getMessageList(String email, String path, int page) {
+        String url = "/v1/account/" + email + "/messages?path=" + path + "&page=" + page + "&pageSize=50&documentStore=false";
         return get(url, MessageVo.class);
     }
 

+ 5 - 0
src/main/java/com/fjhx/vo/ProgressVo.java

@@ -11,6 +11,11 @@ public class ProgressVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
+     * 邮箱
+     */
+    private String email;
+
+    /**
      * 所有需要同步的邮件数量
      */
     private Integer totalMessageCount;