|
@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+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;
|
|
@@ -33,6 +34,7 @@ import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -121,47 +123,40 @@ public class MailServiceImpl implements IMailService {
|
|
|
@Override
|
|
|
public MessageDetailVo getMessageDetail(GetMessagePageDto dto) {
|
|
|
Long messageId = dto.getMessageId();
|
|
|
-
|
|
|
- Integer contentSync;
|
|
|
- Integer addressSync;
|
|
|
- Integer attachmentSync;
|
|
|
-
|
|
|
- Integer messageNumber;
|
|
|
+ Integer type = dto.getType();
|
|
|
|
|
|
String folderName;
|
|
|
Long mailboxId;
|
|
|
+ Integer syncStatus;
|
|
|
+ Long uid;
|
|
|
|
|
|
- if (dto.getType().equals(1)) {
|
|
|
+ if (type.equals(1)) {
|
|
|
PersonalMessage personalMessage = personalMessageService.getById(messageId);
|
|
|
if (personalMessage == null) {
|
|
|
throw new ServiceException("没有找到邮箱");
|
|
|
}
|
|
|
- messageNumber = personalMessage.getMessageNumber();
|
|
|
- contentSync = personalMessage.getContentSync();
|
|
|
- addressSync = personalMessage.getAddressSync();
|
|
|
- attachmentSync = personalMessage.getAttachmentSync();
|
|
|
|
|
|
folderName = personalMessage.getFolderName();
|
|
|
+ syncStatus = personalMessage.getSyncStatus();
|
|
|
mailboxId = personalMessage.getMailboxId();
|
|
|
+ uid = personalMessage.getUid();
|
|
|
} else {
|
|
|
EnterpriseMessage enterpriseMessage = enterpriseMessageService.getById(messageId);
|
|
|
if (enterpriseMessage == null) {
|
|
|
throw new ServiceException("没有找到邮箱");
|
|
|
}
|
|
|
- messageNumber = enterpriseMessage.getMessageNumber();
|
|
|
- contentSync = enterpriseMessage.getContentSync();
|
|
|
- addressSync = enterpriseMessage.getAddressSync();
|
|
|
- attachmentSync = enterpriseMessage.getAttachmentSync();
|
|
|
|
|
|
folderName = enterpriseMessage.getFolderName();
|
|
|
+ syncStatus = enterpriseMessage.getSyncStatus();
|
|
|
mailboxId = enterpriseMessage.getMailboxId();
|
|
|
+ uid = enterpriseMessage.getUid();
|
|
|
}
|
|
|
|
|
|
MessageDetailVo messageDetailVo = new MessageDetailVo();
|
|
|
|
|
|
// 正文附件已同步
|
|
|
- if (contentSync == 1 && addressSync == 1 && attachmentSync == 1) {
|
|
|
- if (dto.getType().equals(1)) {
|
|
|
+ if (syncStatus.equals(1)) {
|
|
|
+ if (type.equals(1)) {
|
|
|
setPersonalMessageDetailVo(messageDetailVo, messageId);
|
|
|
} else {
|
|
|
setEnterpriseMessageDetailVo(messageDetailVo, messageId);
|
|
@@ -170,13 +165,17 @@ public class MailServiceImpl implements IMailService {
|
|
|
// 未同步
|
|
|
else {
|
|
|
|
|
|
- MailboxInfo mailboxInfo = getMailboxInfo(dto.getType(), mailboxId);
|
|
|
+ MailboxInfo mailboxInfo = getMailboxInfo(type, mailboxId);
|
|
|
|
|
|
IMAPStore imapStore = EmailUtil.getIMAPStore(mailboxInfo);
|
|
|
IMAPFolder folder = (IMAPFolder) imapStore.getFolder(folderName);
|
|
|
folder.open(Folder.READ_ONLY);
|
|
|
- IMAPMessage message = (IMAPMessage) folder.getMessage(messageNumber);
|
|
|
|
|
|
+ IMAPMessage message = (IMAPMessage) folder.getMessageByUID(uid);
|
|
|
+
|
|
|
+ if (message == null) {
|
|
|
+ throw new ServiceException("没有找到邮箱详情,邮件可能已被删除");
|
|
|
+ }
|
|
|
|
|
|
List<CompletableFuture<MessageDetailVo.MessageAttachment>> list = new ArrayList<>();
|
|
|
|
|
@@ -184,8 +183,8 @@ public class MailServiceImpl implements IMailService {
|
|
|
|
|
|
getMessageAndAttachment(messageDetailVo, message, messageId, list);
|
|
|
|
|
|
- List<MessageDetailVo.MessageAttachment> messageAttachmentList = list.stream()
|
|
|
- .map(CompletableFuture::join).collect(Collectors.toList());
|
|
|
+ List<MessageDetailVo.MessageAttachment> messageAttachmentList =
|
|
|
+ list.stream().map(CompletableFuture::join).collect(Collectors.toList());
|
|
|
|
|
|
messageDetailVo.setMessageAttachmentList(messageAttachmentList);
|
|
|
|
|
@@ -196,9 +195,7 @@ public class MailServiceImpl implements IMailService {
|
|
|
|
|
|
CompletableFuture.allOf(attachmentFuture, addressFuture).join();
|
|
|
|
|
|
- new Thread(() ->
|
|
|
- saveMessageDetail(contentSync, addressSync, attachmentSync, messageId, messageDetailVo, dto.getType())
|
|
|
- ).start();
|
|
|
+ new Thread(() -> saveMessageDetail(messageId, messageDetailVo, type)).start();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -209,88 +206,81 @@ public class MailServiceImpl implements IMailService {
|
|
|
return messageDetailVo;
|
|
|
}
|
|
|
|
|
|
- private void saveMessageDetail(Integer contentSync, Integer addressSync, Integer attachmentSync,
|
|
|
- Long messageId, MessageDetailVo messageDetailVo, Integer type) {
|
|
|
+ private void saveMessageDetail(Long messageId, MessageDetailVo messageDetailVo, Integer type) {
|
|
|
|
|
|
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
|
|
|
|
|
|
try {
|
|
|
if (type == 1) {
|
|
|
- if (contentSync == 0) {
|
|
|
- PersonalMessageContent personalMessageContent = new PersonalMessageContent();
|
|
|
- personalMessageContent.setMessageId(messageId);
|
|
|
- personalMessageContent.setContent(messageDetailVo.getContent());
|
|
|
- personalMessageContent.setMimeType(messageDetailVo.getMimeType());
|
|
|
- personalMessageContentService.save(personalMessageContent);
|
|
|
- }
|
|
|
- if (addressSync == 0) {
|
|
|
- List<MessageDetailVo.MessageAddress> messageAddressList = messageDetailVo.getMessageAddressList();
|
|
|
- List<PersonalMessageAddress> personalMessageContentService = messageAddressList.stream().map(item -> {
|
|
|
- PersonalMessageAddress personalMessageAddress = new PersonalMessageAddress();
|
|
|
- personalMessageAddress.setMessageId(messageId);
|
|
|
- personalMessageAddress.setPersonalName(item.getPersonalName());
|
|
|
- personalMessageAddress.setType(item.getType());
|
|
|
- personalMessageAddress.setEmail(item.getEmail());
|
|
|
- return personalMessageAddress;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- personalMessageAddressService.saveBatch(personalMessageContentService);
|
|
|
- }
|
|
|
- if (attachmentSync == 0) {
|
|
|
- List<MessageDetailVo.MessageAttachment> messageAttachmentList = messageDetailVo.getMessageAttachmentList();
|
|
|
-
|
|
|
- List<PersonalMessageAttachment> messageAttachments = messageAttachmentList.stream().map(item -> {
|
|
|
- PersonalMessageAttachment personalMessageAttachment = new PersonalMessageAttachment();
|
|
|
- personalMessageAttachment.setName(item.getName());
|
|
|
- personalMessageAttachment.setUrl(item.getUrl());
|
|
|
- personalMessageAttachment.setMessageId(messageId);
|
|
|
- return personalMessageAttachment;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- personalMessageAttachmentService.saveBatch(messageAttachments);
|
|
|
- }
|
|
|
- personalMessageService.update(q -> q.eq(PersonalMessage::getId, messageId)
|
|
|
- .set(PersonalMessage::getAddressSync, 1)
|
|
|
- .set(PersonalMessage::getContentSync, 1)
|
|
|
- .set(PersonalMessage::getAttachmentSync, 1)
|
|
|
- .set(PersonalMessage::getReadStatus, 1)
|
|
|
+
|
|
|
+ PersonalMessageContent personalMessageContent = new PersonalMessageContent();
|
|
|
+ personalMessageContent.setMessageId(messageId);
|
|
|
+ personalMessageContent.setContent(messageDetailVo.getContent());
|
|
|
+ personalMessageContent.setMimeType(messageDetailVo.getMimeType());
|
|
|
+ personalMessageContentService.save(personalMessageContent);
|
|
|
+
|
|
|
+ List<MessageDetailVo.MessageAddress> messageAddressList = messageDetailVo.getMessageAddressList();
|
|
|
+ List<PersonalMessageAddress> personalMessageContentService = messageAddressList.stream().map(item -> {
|
|
|
+ PersonalMessageAddress personalMessageAddress = new PersonalMessageAddress();
|
|
|
+ personalMessageAddress.setMessageId(messageId);
|
|
|
+ personalMessageAddress.setPersonalName(item.getPersonalName());
|
|
|
+ personalMessageAddress.setType(item.getType());
|
|
|
+ personalMessageAddress.setEmail(item.getEmail());
|
|
|
+ return personalMessageAddress;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ personalMessageAddressService.saveBatch(personalMessageContentService);
|
|
|
+
|
|
|
+ List<MessageDetailVo.MessageAttachment> messageAttachmentList = messageDetailVo.getMessageAttachmentList();
|
|
|
+ List<PersonalMessageAttachment> messageAttachments = messageAttachmentList.stream().map(item -> {
|
|
|
+ PersonalMessageAttachment personalMessageAttachment = new PersonalMessageAttachment();
|
|
|
+ personalMessageAttachment.setName(item.getName());
|
|
|
+ personalMessageAttachment.setUrl(item.getUrl());
|
|
|
+ personalMessageAttachment.setMessageId(messageId);
|
|
|
+ return personalMessageAttachment;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ personalMessageAttachmentService.saveBatch(messageAttachments);
|
|
|
+
|
|
|
+ personalMessageService.update(q -> q
|
|
|
+ .eq(PersonalMessage::getId, messageId)
|
|
|
+ .set(PersonalMessage::getSyncStatus, 1)
|
|
|
+ .set(BaseEntity::getUpdateTime, new Date())
|
|
|
);
|
|
|
|
|
|
} else {
|
|
|
- if (contentSync == 0) {
|
|
|
- EnterpriseMessageContent enterpriseMessageContent = new EnterpriseMessageContent();
|
|
|
- enterpriseMessageContent.setMessageId(messageId);
|
|
|
- enterpriseMessageContent.setContent(messageDetailVo.getContent());
|
|
|
- enterpriseMessageContent.setMimeType(messageDetailVo.getMimeType());
|
|
|
- enterpriseMessageContentService.save(enterpriseMessageContent);
|
|
|
- }
|
|
|
- if (addressSync == 0) {
|
|
|
- List<MessageDetailVo.MessageAddress> messageAddressList = messageDetailVo.getMessageAddressList();
|
|
|
- List<EnterpriseMessageAddress> enterpriseMessageAddressList = messageAddressList.stream().map(item -> {
|
|
|
- EnterpriseMessageAddress enterpriseMessageAddress = new EnterpriseMessageAddress();
|
|
|
- enterpriseMessageAddress.setMessageId(messageId);
|
|
|
- enterpriseMessageAddress.setPersonalName(item.getPersonalName());
|
|
|
- enterpriseMessageAddress.setType(item.getType());
|
|
|
- enterpriseMessageAddress.setEmail(item.getEmail());
|
|
|
- return enterpriseMessageAddress;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- enterpriseMessageAddressService.saveBatch(enterpriseMessageAddressList);
|
|
|
- }
|
|
|
- if (attachmentSync == 0) {
|
|
|
- List<MessageDetailVo.MessageAttachment> messageAttachmentList = messageDetailVo.getMessageAttachmentList();
|
|
|
- List<EnterpriseMessageAttachment> messageAttachments = messageAttachmentList.stream().map(item -> {
|
|
|
- EnterpriseMessageAttachment enterpriseMessageAttachment = new EnterpriseMessageAttachment();
|
|
|
- enterpriseMessageAttachment.setName(item.getName());
|
|
|
- enterpriseMessageAttachment.setUrl(item.getUrl());
|
|
|
- enterpriseMessageAttachment.setMessageId(messageId);
|
|
|
- return enterpriseMessageAttachment;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- enterpriseMessageAttachmentService.saveBatch(messageAttachments);
|
|
|
- }
|
|
|
- enterpriseMessageService.update(q -> q.eq(EnterpriseMessage::getId, messageId)
|
|
|
- .set(EnterpriseMessage::getAddressSync, 1)
|
|
|
- .set(EnterpriseMessage::getContentSync, 1)
|
|
|
- .set(EnterpriseMessage::getAttachmentSync, 1)
|
|
|
- .set(EnterpriseMessage::getReadStatus, 1)
|
|
|
+
|
|
|
+ EnterpriseMessageContent enterpriseMessageContent = new EnterpriseMessageContent();
|
|
|
+ enterpriseMessageContent.setMessageId(messageId);
|
|
|
+ enterpriseMessageContent.setContent(messageDetailVo.getContent());
|
|
|
+ enterpriseMessageContent.setMimeType(messageDetailVo.getMimeType());
|
|
|
+ enterpriseMessageContentService.save(enterpriseMessageContent);
|
|
|
+
|
|
|
+ List<MessageDetailVo.MessageAddress> messageAddressList = messageDetailVo.getMessageAddressList();
|
|
|
+ List<EnterpriseMessageAddress> enterpriseMessageAddressList = messageAddressList.stream().map(item -> {
|
|
|
+ EnterpriseMessageAddress enterpriseMessageAddress = new EnterpriseMessageAddress();
|
|
|
+ enterpriseMessageAddress.setMessageId(messageId);
|
|
|
+ enterpriseMessageAddress.setPersonalName(item.getPersonalName());
|
|
|
+ enterpriseMessageAddress.setType(item.getType());
|
|
|
+ enterpriseMessageAddress.setEmail(item.getEmail());
|
|
|
+ return enterpriseMessageAddress;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ enterpriseMessageAddressService.saveBatch(enterpriseMessageAddressList);
|
|
|
+
|
|
|
+ List<MessageDetailVo.MessageAttachment> messageAttachmentList = messageDetailVo.getMessageAttachmentList();
|
|
|
+ List<EnterpriseMessageAttachment> messageAttachments = messageAttachmentList.stream().map(item -> {
|
|
|
+ EnterpriseMessageAttachment enterpriseMessageAttachment = new EnterpriseMessageAttachment();
|
|
|
+ enterpriseMessageAttachment.setName(item.getName());
|
|
|
+ enterpriseMessageAttachment.setUrl(item.getUrl());
|
|
|
+ enterpriseMessageAttachment.setMessageId(messageId);
|
|
|
+ return enterpriseMessageAttachment;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ enterpriseMessageAttachmentService.saveBatch(messageAttachments);
|
|
|
+
|
|
|
+ enterpriseMessageService.update(q -> q
|
|
|
+ .eq(EnterpriseMessage::getId, messageId)
|
|
|
+ .set(EnterpriseMessage::getSyncStatus, 1)
|
|
|
+ .set(BaseEntity::getUpdateTime, new Date())
|
|
|
);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// 提交事务
|
|
@@ -426,8 +416,9 @@ public class MailServiceImpl implements IMailService {
|
|
|
completableFutureList.add(CompletableFuture.supplyAsync(() -> getMessageAttachment(bodyPart), executorService));
|
|
|
|
|
|
} else {
|
|
|
- if (!contentType.equals("text/html; charset=UTF-8"))
|
|
|
+ if (!contentType.equals("text/html; charset=UTF-8")) {
|
|
|
log.error("未知文件格式:{} ,邮件id:{},待解析", contentType, messageId);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|