From 0320c94e6dce0443429031f29e0a5e7f748f79bb Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sun, 21 Nov 2021 20:23:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B4=E5=90=88=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/impl/EmailTaskHandler.java | 50 +++++++++++++++---- .../dataease/service/system/EmailService.java | 41 +++++++++++++++ 2 files changed, 80 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java index 97ee372f35..417a3b1e72 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskHandler.java @@ -5,20 +5,23 @@ import io.dataease.auth.entity.SysUserEntity; import io.dataease.auth.entity.TokenInfo; import io.dataease.auth.service.AuthUserService; import io.dataease.auth.util.JWTUtils; -import io.dataease.commons.utils.CodingUtil; import io.dataease.commons.utils.CommonBeanFactory; +import io.dataease.commons.utils.LogUtil; import io.dataease.job.sechedule.strategy.TaskHandler; - import io.dataease.plugins.common.entity.GlobalTaskEntity; import io.dataease.plugins.common.entity.GlobalTaskInstance; import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.xpack.email.dto.response.XpackEmailTemplateDTO; import io.dataease.plugins.xpack.email.service.EmailXpackService; +import io.dataease.service.FileService; +import io.dataease.service.system.EmailService; +import org.apache.commons.lang3.ObjectUtils; import org.quartz.*; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.UnknownHostException; @@ -28,10 +31,10 @@ public class EmailTaskHandler extends TaskHandler implements Job { private static final Integer RUNING = 0; + private static final Integer SUCCESS = 1; + private static final Integer ERROR = -1; - private AuthUserService authUserService; - @Override protected JobDataMap jobDataMap(GlobalTaskEntity taskEntity) { @@ -58,13 +61,9 @@ public class EmailTaskHandler extends TaskHandler implements Job { Long instanceId = saveInstance(taskInstance); taskInstance.setInstanceId(instanceId); - XpackEmailTemplateDTO emailTemplate = (XpackEmailTemplateDTO) jobDataMap.get("emailTemplate"); - - SysUserEntity creator = (SysUserEntity) jobDataMap.get("creator"); - - proxy().sendReport(taskEntity, taskInstance, emailTemplate, creator); + proxy().sendReport(taskInstance, emailTemplate, creator); } @@ -86,15 +85,41 @@ public class EmailTaskHandler extends TaskHandler implements Job { return taskInstance; } + private void changeStatus(GlobalTaskInstance taskInstance, Integer status) { + taskInstance.setStatus(status); + if(status == SUCCESS) { + taskInstance.setFinishTime(System.currentTimeMillis()); + } + EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); + emailXpackService.saveInstance(taskInstance); + } + @Async - public void sendReport(GlobalTaskEntity taskEntity, GlobalTaskInstance taskInstance, XpackEmailTemplateDTO emailTemplateDTO, SysUserEntity user) { + public void sendReport(GlobalTaskInstance taskInstance, XpackEmailTemplateDTO emailTemplateDTO, SysUserEntity user) { EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); String fileId = emailXpackService.print(panelUrl(emailTemplateDTO.getPanelId()), tokenByUser(user)); // 下面继续执行发送邮件的略记 String recipients = emailTemplateDTO.getRecipients(); byte[] content = emailTemplateDTO.getContent(); + EmailService emailService = SpringContextUtil.getBean(EmailService.class); + String contentStr = ""; + byte[] bytes = null; + if (ObjectUtils.isNotEmpty(content)) { + try { + contentStr = new String(content, "UTF-8"); + FileService fileService = SpringContextUtil.getBean(FileService.class); + bytes = fileService.loadFileAsBytes(fileId); + emailService.sendWithImage(recipients, emailTemplateDTO.getTitle(), contentStr, bytes); + changeStatus(taskInstance, SUCCESS); + } catch (Exception e) { + changeStatus(taskInstance, ERROR); + LogUtil.error(e.getMessage(), e); + throw new RuntimeException(e); + } + } + } @@ -102,19 +127,22 @@ public class EmailTaskHandler extends TaskHandler implements Job { private String tokenByUser(SysUserEntity user) { TokenInfo tokenInfo = TokenInfo.builder().userId(user.getUserId()).username(user.getUsername()).build(); String token = JWTUtils.sign(tokenInfo, user.getPassword()); + return token; } private String panelUrl(String panelId) { InetAddress ip = null; + String hostAddress = null; try { ip = InetAddress.getLocalHost(); + hostAddress = ip.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } Environment environment = SpringContextUtil.getBean(Environment.class); Integer port = environment.getProperty("server.port", Integer.class); - String url = "http://" + ip + ":"+port + "/#/preview/" + panelId; + String url = "http://" + hostAddress + ":"+port + "/#/preview/" + panelId; return url; } diff --git a/backend/src/main/java/io/dataease/service/system/EmailService.java b/backend/src/main/java/io/dataease/service/system/EmailService.java index 5dcf384616..9ae8294c83 100644 --- a/backend/src/main/java/io/dataease/service/system/EmailService.java +++ b/backend/src/main/java/io/dataease/service/system/EmailService.java @@ -16,12 +16,19 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; + +import javax.activation.DataHandler; import javax.annotation.Resource; +import javax.mail.Message; import javax.mail.MessagingException; +import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import javax.mail.util.ByteArrayDataSource; import java.util.HashMap; import java.util.List; import java.util.Properties; +import java.util.UUID; @Service @@ -72,6 +79,40 @@ public class EmailService { } } + public void sendWithImage(String to, String title, String content, byte[] bytes) { + if (StringUtils.isBlank(to)) return ; + MailInfo mailInfo = proxy().mailInfo(); + JavaMailSenderImpl driver = driver(mailInfo); + + MimeMessage mimeMessage = driver.createMimeMessage(); + MimeMessageHelper helper = null; + + MimeBodyPart image = new MimeBodyPart(); + DataHandler png = new DataHandler(new ByteArrayDataSource(bytes, "image/png")); + + String uuid = UUID.randomUUID().toString(); + MimeBodyPart text = new MimeBodyPart(); + try { + text.setContent(content + "
", "text/html; charset=gb2312"); + // text.setText(, "text/html; charset=gb2312"); + image.setDataHandler(png); + image.setContentID(uuid); + MimeMultipart multipart = new MimeMultipart(); + multipart.addBodyPart(text); + multipart.addBodyPart(image); + multipart.setSubType("related"); + mimeMessage.setFrom(driver.getUsername()); + mimeMessage.setSubject(title); + mimeMessage.setRecipients(Message.RecipientType.TO, to); + mimeMessage.setContent(multipart); + driver.send(mimeMessage); + } catch (Exception e) { + LogUtil.error(e.getMessage(), e); + throw new RuntimeException(e); + // DEException.throwException(Translator.get("connection_failed")); + } + } + public JavaMailSenderImpl driver(MailInfo mailInfo) { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setDefaultEncoding("UTF-8");