|
@@ -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);
|
|
|
}
|