|
@@ -2,22 +2,30 @@ package com.fjhx.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.thread.ThreadUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.fjhx.config.TaskPoolConfig;
|
|
|
import com.fjhx.entity.EmailInfo;
|
|
|
import com.fjhx.entity.EmailMailbox;
|
|
|
+import com.fjhx.entity.EmailMessage;
|
|
|
import com.fjhx.service.IAccountService;
|
|
|
import com.fjhx.service.IEmailInfoService;
|
|
|
import com.fjhx.service.IEmailMailboxService;
|
|
|
+import com.fjhx.service.IEmailMessageService;
|
|
|
import com.fjhx.utils.EmailEngineUtil;
|
|
|
import com.fjhx.vo.BindingVo;
|
|
|
+import com.fjhx.vo.EmailMailboxVo;
|
|
|
+import com.fjhx.vo.MessageDetailVo;
|
|
|
+import com.fjhx.vo.MessageVo;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.Executor;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class AccountServiceImpl implements IAccountService {
|
|
@@ -28,6 +36,9 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
@Autowired
|
|
|
private IEmailMailboxService emailMailboxService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IEmailMessageService emailMessageService;
|
|
|
+
|
|
|
@Qualifier(TaskPoolConfig.taskExecutor)
|
|
|
@Autowired
|
|
|
private Executor executor;
|
|
@@ -46,14 +57,14 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
|
|
|
// 添加账号
|
|
|
EmailEngineUtil.createAccount(bindingVo);
|
|
|
- // 查询邮箱
|
|
|
- List<EmailMailbox> mailboxList = EmailEngineUtil.getMailboxList(email);
|
|
|
// 保存账号数据
|
|
|
emailInfo = saveEmailInfo(bindingVo);
|
|
|
+ // 查询邮箱文件夹
|
|
|
+ List<EmailMailboxVo.MailboxesDTO> mailboxList = EmailEngineUtil.getMailboxList(email);
|
|
|
// 添加邮箱文件夹
|
|
|
- saveEmailMailbox(mailboxList, emailInfo.getId(), email);
|
|
|
+ List<EmailMailbox> emailMailboxList = saveEmailMailbox(mailboxList, emailInfo.getId(), email);
|
|
|
// 异步遍历文件夹下的所有邮件
|
|
|
- asyncReadEmail(email, mailboxList);
|
|
|
+ asyncReadEmail(email, emailMailboxList);
|
|
|
return emailInfo;
|
|
|
}
|
|
|
|
|
@@ -69,24 +80,62 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
/**
|
|
|
* 添加邮箱文件夹
|
|
|
*/
|
|
|
- private void saveEmailMailbox(List<EmailMailbox> mailboxList, Long emailInfoId, String email) {
|
|
|
- for (EmailMailbox emailMailbox : mailboxList) {
|
|
|
+ private List<EmailMailbox> saveEmailMailbox(List<EmailMailboxVo.MailboxesDTO> mailboxDTOList, Long emailInfoId, String email) {
|
|
|
+
|
|
|
+ List<EmailMailbox> mailboxList = mailboxDTOList.stream().map(item -> {
|
|
|
+ EmailMailbox emailMailbox = BeanUtil.copyProperties(item, EmailMailbox.class);
|
|
|
emailMailbox.setEmailInfoId(emailInfoId);
|
|
|
emailMailbox.setEmail(email);
|
|
|
emailMailbox.setIsShow(true);
|
|
|
emailMailbox.setInitialize(false);
|
|
|
- }
|
|
|
+ return emailMailbox;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
emailMailboxService.saveBatch(mailboxList);
|
|
|
+
|
|
|
+ return mailboxList;
|
|
|
}
|
|
|
|
|
|
- private void asyncReadEmail(String email, List<EmailMailbox> mailboxList) {
|
|
|
+ /**
|
|
|
+ * 异步读取文件
|
|
|
+ */
|
|
|
+ private void asyncReadEmail(String email, List<EmailMailbox> emailMailboxList) {
|
|
|
executor.execute(() -> {
|
|
|
|
|
|
ThreadUtil.sleep(5000);
|
|
|
|
|
|
- for (EmailMailbox emailMailbox : mailboxList) {
|
|
|
- EmailEngineUtil.getMessageList(email, emailMailbox.getPath());
|
|
|
+ List<EmailMessage> emailMessageList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (EmailMailbox emailMailbox : emailMailboxList) {
|
|
|
+ List<MessageVo.MessagesDTO> messageList = EmailEngineUtil.getMessageList(email, emailMailbox.getPath());
|
|
|
+
|
|
|
+ for (MessageVo.MessagesDTO messagesDTO : messageList) {
|
|
|
+ MessageDetailVo messageDetail = EmailEngineUtil.getMessageDetail(email, messagesDTO.getId());
|
|
|
+
|
|
|
+ EmailMessage emailMessage = new EmailMessage();
|
|
|
+ emailMessage.setMessageId(messagesDTO.getId());
|
|
|
+ emailMessage.setEmailMailboxId(emailMailbox.getId());
|
|
|
+ emailMessage.setEmailMailboxPath(emailMailbox.getPath());
|
|
|
+ emailMessage.setUnseen(messagesDTO.getUnseen());
|
|
|
+ emailMessage.setFlagged(messagesDTO.getFlagged());
|
|
|
+ emailMessage.setSubject(messagesDTO.getSubject());
|
|
|
+ emailMessage.setFromDate(messagesDTO.getDate());
|
|
|
+
|
|
|
+ MessageVo.MessagesDTO.ToDTO from = messagesDTO.getFrom();
|
|
|
+ if (ObjectUtils.isNotEmpty(from)) {
|
|
|
+ emailMessage.setFromName(from.getName());
|
|
|
+ emailMessage.setFromAddress(from.getAddress());
|
|
|
+ }
|
|
|
+
|
|
|
+ MessageDetailVo.TextDTO text = messageDetail.getText();
|
|
|
+ if (ObjectUtils.isNotEmpty(text)) {
|
|
|
+ emailMessage.setHtmlContent(text.getHtml());
|
|
|
+ }
|
|
|
+
|
|
|
+ emailMessageList.add(emailMessage);
|
|
|
+ }
|
|
|
}
|
|
|
+ emailMessageService.saveBatch(emailMessageList);
|
|
|
|
|
|
});
|
|
|
|