From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/service/impl/EmailReceiveServiceImpl.java | 332 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 332 insertions(+), 0 deletions(-)
diff --git a/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/service/impl/EmailReceiveServiceImpl.java b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/service/impl/EmailReceiveServiceImpl.java
new file mode 100644
index 0000000..8704a8b
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/service/impl/EmailReceiveServiceImpl.java
@@ -0,0 +1,332 @@
+package jnpf.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import feign.Response;
+import jnpf.base.PaginationTime;
+import jnpf.base.entity.EmailConfigEntity;
+import jnpf.base.service.SuperServiceImpl;
+import jnpf.config.ConfigValueUtil;
+import jnpf.constant.FileTypeConstant;
+import jnpf.constant.MsgCode;
+import jnpf.entity.EmailReceiveEntity;
+import jnpf.entity.EmailSendEntity;
+import jnpf.exception.DataException;
+import jnpf.file.FileApi;
+import jnpf.file.FileUploadApi;
+import jnpf.mapper.EmailConfigMapper;
+import jnpf.mapper.EmailReceiveMapper;
+import jnpf.mapper.EmailSendMapper;
+import jnpf.message.model.mail.*;
+import jnpf.model.upload.UploadFileModel;
+import jnpf.service.EmailReceiveService;
+import jnpf.util.*;
+import jnpf.util.type.StringNumber;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 閭欢鎺ユ敹
+ *
+ * @author JNPF寮�鍙戝钩鍙扮粍
+ * @version V3.1.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙革紙https://www.jnpfsoft.com锛�
+ * @date 2019骞�9鏈�26鏃� 涓婂崍9:18
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class EmailReceiveServiceImpl extends SuperServiceImpl<EmailReceiveMapper, EmailReceiveEntity> implements EmailReceiveService {
+
+
+ private final EmailSendMapper emailSendMapper;
+
+ private final EmailConfigMapper emailConfigMapper;
+
+ private final Pop3Util pop3Util;
+
+ private final ConfigValueUtil configValueUtil;
+
+ private final FileApi fileApi;
+
+ private final FileUploadApi fileUploadApi;
+
+ @Override
+ public List<EmailReceiveEntity> getReceiveList(PaginationTime paginationTime) {
+ return this.baseMapper.getReceiveList(paginationTime);
+ }
+
+ @Override
+ public List<EmailReceiveEntity> getDashboardReceiveList() {
+ return this.baseMapper.getDashboardReceiveList();
+ }
+
+ @Override
+ public List<EmailReceiveEntity> getStarredList(PaginationTime paginationTime) {
+ return this.baseMapper.getStarredList(paginationTime);
+ }
+
+ @Override
+ public List<EmailSendEntity> getDraftList(PaginationTime paginationTime) {
+ return emailSendMapper.getDraftList(paginationTime);
+ }
+
+ @Override
+ public List<EmailSendEntity> getSentList(PaginationTime paginationTime) {
+ return emailSendMapper.getSentList(paginationTime);
+ }
+
+ @Override
+ public EmailConfigEntity getConfigInfo() {
+ String userId = UserProvider.getUser().getUserId();
+ QueryWrapper<EmailConfigEntity> queryWrapper = new QueryWrapper<>();
+ queryWrapper.lambda().eq(EmailConfigEntity::getCreatorUserId, userId);
+ return emailConfigMapper.selectOne(queryWrapper);
+ }
+
+ @Override
+ public EmailConfigEntity getConfigInfo(String userId) {
+ QueryWrapper<EmailConfigEntity> queryWrapper = new QueryWrapper<>();
+ queryWrapper.lambda().eq(EmailConfigEntity::getCreatorUserId, userId);
+ return emailConfigMapper.selectOne(queryWrapper);
+ }
+
+ @Override
+ public Object getInfo(String id) {
+ EmailReceiveEntity receiveInfo = this.getById(id);
+ Object object;
+ if (receiveInfo != null) {
+ //瑙f瀽鍐呭
+ receiveInfo.setBodyText(receiveInfo.getBodyText());
+ //鏇存柊宸茶
+ receiveInfo.setIsRead(1);
+ receiveInfo.setLastModifyTime(new Date());
+ receiveInfo.setLastModifyUserId(UserProvider.getUser().getUserId());
+ this.updateById(receiveInfo);
+ object = receiveInfo;
+ } else {
+ object = emailSendMapper.selectById(id);
+ }
+ return object;
+ }
+
+ @Override
+ public boolean delete(String id) {
+ Object object = getInfo(id);
+ if (object instanceof EmailReceiveEntity) {
+ //鍒犻櫎閭欢
+ EmailConfigEntity mailConfig = getConfigInfo();
+ EmailReceiveEntity mailReceiveEntity = (EmailReceiveEntity) object;
+ MailAccount mailAccount = new MailAccount();
+ mailAccount.setAccount(mailConfig.getAccount());
+ mailAccount.setPassword(mailConfig.getPassword());
+ mailAccount.setPop3Port(mailConfig.getPop3Port());
+ mailAccount.setPop3Host(mailConfig.getPop3Host());
+ pop3Util.deleteMessage(mailAccount, mailReceiveEntity.getMID());
+ this.removeById(mailReceiveEntity.getId());
+ return true;
+ } else if (object != null) {
+ //鍒犻櫎鏁版嵁
+ EmailSendEntity entity = (EmailSendEntity) object;
+ emailSendMapper.deleteById(entity.getId());
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ @DSTransactional
+ public void saveDraft(EmailSendEntity entity) {
+ entity.setState(-1);
+ if (StringUtil.isNotEmpty(entity.getId())) {
+ entity.setLastModifyTime(new Date());
+ entity.setLastModifyUserId(UserProvider.getUser().getUserId());
+ emailSendMapper.updateById(entity);
+ } else {
+ entity.setId(RandomUtil.uuId());
+ entity.setCreatorUserId(UserProvider.getUser().getUserId());
+ emailSendMapper.insert(entity);
+ }
+ }
+
+ @Override
+ public boolean receiveRead(String id, int isRead) {
+ EmailReceiveEntity entity = (EmailReceiveEntity) getInfo(id);
+ if (entity != null) {
+ entity.setIsRead(isRead);
+ return this.updateById(entity);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean receiveStarred(String id, int isStarred) {
+ EmailReceiveEntity entity = (EmailReceiveEntity) getInfo(id);
+ if (entity != null) {
+ entity.setStarred(isStarred);
+ return this.updateById(entity);
+ }
+ return false;
+ }
+
+ @Override
+ public String checkLogin(EmailConfigEntity configEntity) {
+ MailAccount mailAccount = new MailAccount();
+ mailAccount.setAccount(configEntity.getAccount());
+ mailAccount.setPassword(configEntity.getPassword());
+ mailAccount.setPop3Host(configEntity.getPop3Host());
+ mailAccount.setPop3Port(configEntity.getPop3Port());
+ mailAccount.setSmtpHost(configEntity.getSmtpHost());
+ mailAccount.setSmtpPort(configEntity.getSmtpPort());
+ mailAccount.setSsl("1".equals(String.valueOf(configEntity.getEmailSsl())));
+ if (mailAccount.getSmtpHost() != null) {
+ return SmtpUtil.checkConnected(mailAccount);
+ }
+ if (mailAccount.getPop3Host() != null) {
+ return pop3Util.checkConnected(mailAccount);
+ }
+ return "false";
+ }
+
+ @Override
+ public void saveConfig(EmailConfigEntity configEntity) throws DataException {
+ EmailConfigEntity emailConfigEntity = getConfigInfo(UserProvider.getUser().getUserId());
+ if (emailConfigEntity == null && UserProvider.getUser().getUserId() != null) {
+ configEntity.setId(RandomUtil.uuId());
+ configEntity.setCreatorTime(new Date());
+ configEntity.setCreatorUserId(UserProvider.getUser().getUserId());
+ emailConfigMapper.insert(configEntity);
+ } else if (UserProvider.getUser().getUserId() != null) {
+ if (emailConfigEntity != null) {
+ configEntity.setId(emailConfigEntity.getId());
+ }
+ emailConfigMapper.updateById(configEntity);
+ } else {
+ throw new DataException(MsgCode.ETD114.get());
+ }
+ }
+
+ @Override
+ @DSTransactional
+ public int saveSent(EmailSendEntity entity, EmailConfigEntity mailConfig) {
+ int flag = 1;
+ //鎷疯礉鏂囦欢,娉ㄦ剰锛氫粠涓存椂鏂囦欢澶规嫹璐濆埌閭欢鏂囦欢澶�
+ List<MailFile> attachmentList = JsonUtil.getJsonToList(entity.getAttachment(), MailFile.class);
+ //閭欢璺緞
+ String mailFilePath = configValueUtil.getEmailFilePath();
+ try {
+ //鍐欏叆鏁版嵁
+ //鍙戦�侀偖浠�
+ //閭欢鍙戦�佷俊鎭�
+ List<File> attachmentFile = new ArrayList<>();
+ MailModel mailModel = new MailModel();
+ mailModel.setFrom(entity.getSender());
+ mailModel.setRecipient(entity.getRecipient());
+ mailModel.setCc(entity.getCc());
+ mailModel.setBcc(entity.getBcc());
+ mailModel.setSubject(entity.getSubject());
+ mailModel.setBodyText(entity.getBodyText());
+ mailModel.setAttachment(attachmentList);
+ mailModel.setFromName(mailConfig.getSenderName());
+ for (MailFile mailFile : mailModel.getAttachment()) {
+ File file = new File(XSSEscape.escapePath(mailFilePath + mailFile.getFileId()));
+ copy(mailFile, mailFilePath, file);
+ attachmentFile.add(file);
+ }
+ mailModel.setAttachmentFile(attachmentFile);
+ //璐﹀彿楠岃瘉淇℃伅
+ MailAccount mailAccount = new MailAccount();
+ mailAccount.setAccount(mailConfig.getAccount());
+ mailAccount.setPassword(mailConfig.getPassword());
+ mailAccount.setPop3Host(mailConfig.getPop3Host());
+ mailAccount.setPop3Port(mailConfig.getPop3Port());
+ mailAccount.setSmtpHost(mailConfig.getSmtpHost());
+ mailAccount.setSmtpPort(mailConfig.getSmtpPort());
+ mailAccount.setSsl(mailConfig.getEmailSsl() == 1);
+ mailAccount.setAccountName(mailConfig.getSenderName());
+ SmtpUtil smtpUtil = new SmtpUtil(mailAccount);
+ smtpUtil.sendMail(mailModel);
+ flag = 0;
+ //鎻掑叆鏁版嵁搴�
+ if (entity.getId() != null) {
+ entity.setState(1);
+ emailSendMapper.updateById(entity);
+ } else {
+ entity.setId(RandomUtil.uuId());
+ entity.setCreatorUserId(UserProvider.getUser().getUserId());
+ if (mailConfig.getAccount() != null) {
+ entity.setSender(mailConfig.getAccount());
+ }
+ entity.setState(1);
+ emailSendMapper.insert(entity);
+ }
+ } catch (Exception e) {
+ for (MailFile mailFile : attachmentList) {
+ FileUtil.deleteFile(mailFilePath + mailFile.getFileId());
+ }
+ log.error(e.getMessage());
+ }
+ return flag;
+ }
+
+ private void copy(MailFile mailFile, String mailFilePath, File file) {
+ try (Response response = fileUploadApi.downFile(new UploadFileModel(mailFilePath, fileApi.getPath(FileTypeConstant.MAIL), mailFile.getFileId()));
+ InputStream inputStream = response.body().asInputStream()) {
+ cn.hutool.core.io.FileUtil.copyFile(inputStream, file, StandardCopyOption.REPLACE_EXISTING);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ @Override
+ @DSTransactional
+ public int receive(EmailConfigEntity mailConfig) {
+ //璐﹀彿楠岃瘉淇℃伅
+ MailAccount mailAccount = new MailAccount();
+ mailAccount.setAccount(mailConfig.getAccount());
+ mailAccount.setPassword(mailConfig.getPassword());
+ mailAccount.setPop3Host(mailConfig.getPop3Host());
+ mailAccount.setPop3Port(mailConfig.getPop3Port());
+ mailAccount.setSmtpHost(mailConfig.getSmtpHost());
+ mailAccount.setSmtpPort(mailConfig.getSmtpPort());
+ mailAccount.setDestDir(FileUploadUtils.getLocalBasePath() + FilePathUtil.getFilePath(FileTypeConstant.MAIL));
+ mailAccount.setSsl(StringNumber.ONE.equals(mailConfig.getEmailSsl().toString()));
+ PopMailModel popMailModel = pop3Util.popMail(mailAccount);
+
+ int receiveCount = popMailModel.getReceiveCount();
+ List<ReceiveModel> mailList = popMailModel.getMailList();
+ if (!mailList.isEmpty()) {
+ List<String> mids = mailList.stream().map(u -> u.getMID()).collect(Collectors.toList());
+ //鏌ヨ鏁版嵁搴撶姸鎬�
+ QueryWrapper<EmailReceiveEntity> wrapper = new QueryWrapper<>();
+ wrapper.lambda().in(EmailReceiveEntity::getMID, mids);
+ List<EmailReceiveEntity> emails = this.list(wrapper);
+ this.remove(wrapper);
+ //閭欢璧嬪�肩姸鎬�
+ for (ReceiveModel receiveModel : mailList) {
+ EmailReceiveEntity entity = JsonUtil.getJsonToBean(receiveModel, EmailReceiveEntity.class);
+ entity.setCreatorUserId(UserProvider.getUser().getUserId());
+ //閫氳繃鏁版嵁搴撹繘琛岃祴鍊硷紝娌℃湁灏遍粯璁�0
+ int stat = emails.stream().anyMatch(m -> m.getMID().equals(entity.getMID())) ? emails.stream().filter(m -> m.getMID().equals(entity.getMID())).findFirst().get().getIsRead() : 0;
+ long count = emails.stream().filter(m -> m.getMID().equals(entity.getMID())).count();
+ entity.setIsRead(stat);
+ if (count != 0) {
+ receiveCount--;
+ }
+ this.save(entity);
+ }
+ }
+ return receiveCount;
+ }
+}
--
Gitblit v1.8.0