24282 2 rokov pred
rodič
commit
bcea44c994

+ 4 - 0
src/main/java/com/fjhx/email/controller/MailController.java

@@ -99,6 +99,10 @@ public class MailController {
     @GetMapping("/getUserEmailList/{userId}")
     public R getUserEmailList(@PathVariable("userId") Long userId) {
         List<MailboxInfo> mailboxInfoList = mailService.getMailboxInfoListByUserId(Collections.singletonList(userId));
+
+        // 赋值文件夹未读邮件数量
+        mailService.setUnreadMessageCount(mailboxInfoList);
+
         return R.ok(mailboxInfoList);
     }
 

+ 5 - 0
src/main/java/com/fjhx/email/entity/dto/MailFolderInfo.java

@@ -34,4 +34,9 @@ public class MailFolderInfo {
      */
     private Date lastReceivedDate;
 
+    /**
+     * 未读邮件数量
+     */
+    private Integer unreadMessageCount;
+
 }

+ 5 - 0
src/main/java/com/fjhx/email/service/IMailService.java

@@ -25,4 +25,9 @@ public interface IMailService {
      */
     MessageDetailVo getMessageDetail(GetMessagePageDto dto);
 
+    /**
+     * 获取文件夹未读数据
+     */
+    void setUnreadMessageCount(List<MailboxInfo> mailboxInfoList);
+
 }

+ 24 - 0
src/main/java/com/fjhx/email/service/impl/MailServiceImpl.java

@@ -9,6 +9,7 @@ import com.fjhx.email.config.base.BaseEntity;
 import com.fjhx.email.config.exception.ServiceException;
 import com.fjhx.email.entity.*;
 import com.fjhx.email.entity.dto.GetMessagePageDto;
+import com.fjhx.email.entity.dto.MailFolderInfo;
 import com.fjhx.email.entity.dto.MailSyncInfo;
 import com.fjhx.email.entity.dto.MailboxInfo;
 import com.fjhx.email.entity.vo.MessageDetailVo;
@@ -144,6 +145,7 @@ public class MailServiceImpl implements IMailService {
         }
 
         folder.open(Folder.READ_ONLY);
+
         for (MessageVo messageVo : wrapper.getRows()) {
             Long uid = messageVo.getUid();
             Message message = folder.getMessageByUID(uid);
@@ -253,6 +255,28 @@ public class MailServiceImpl implements IMailService {
         return copy;
     }
 
+    @SneakyThrows
+    @Override
+    public void setUnreadMessageCount(List<MailboxInfo> mailboxInfoList) {
+
+        for (MailboxInfo mailboxInfo : mailboxInfoList) {
+
+            IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
+
+            for (MailFolderInfo mailFolderInfo : mailboxInfo.getMailFolderInfoList()) {
+                IMAPFolder folder = (IMAPFolder) imapStore.getFolder(mailFolderInfo.getName());
+                folder.open(Folder.READ_WRITE);
+                int unreadMessageCount = folder.getUnreadMessageCount();
+                mailFolderInfo.setUnreadMessageCount(unreadMessageCount);
+                if (folder.isOpen()) {
+                    folder.close();
+                }
+            }
+
+        }
+
+    }
+
     private void saveMessageDetail(Long messageId, MessageDetailVo messageDetailVo, Integer type) {
 
         TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);