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 e24464bf55..916c3a5457 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,6 +5,7 @@ import io.dataease.auth.entity.TokenInfo; import io.dataease.auth.service.AuthUserService; import io.dataease.auth.service.impl.AuthUserServiceImpl; import io.dataease.auth.util.JWTUtils; +import io.dataease.dto.PermissionProxy; import io.dataease.ext.ExtTaskMapper; import io.dataease.commons.utils.CommonBeanFactory; import io.dataease.commons.utils.CronUtils; @@ -19,6 +20,7 @@ import io.dataease.plugins.xpack.email.dto.request.XpackEmailTaskRequest; import io.dataease.plugins.xpack.email.dto.request.XpackPixelEntity; import io.dataease.plugins.xpack.email.dto.response.XpackEmailTemplateDTO; import io.dataease.plugins.xpack.email.service.EmailXpackService; +import io.dataease.service.chart.ViewExportExcel; import io.dataease.service.system.EmailService; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -27,7 +29,11 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.File; +import java.util.Arrays; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @Service("emailTaskHandler") public class EmailTaskHandler extends TaskHandler implements Job { @@ -39,6 +45,9 @@ public class EmailTaskHandler extends TaskHandler implements Job { @Resource private AuthUserServiceImpl authUserServiceImpl; + @Resource + private ViewExportExcel viewExportExcel; + @Override protected JobDataMap jobDataMap(GlobalTaskEntity taskEntity) { JobDataMap jobDataMap = new JobDataMap(); @@ -132,8 +141,8 @@ public class EmailTaskHandler extends TaskHandler implements Job { } @Async("priorityExecutor") - public void sendReport(GlobalTaskInstance taskInstance, XpackEmailTemplateDTO emailTemplateDTO, - SysUserEntity user) { + public void sendReport(GlobalTaskInstance taskInstance, XpackEmailTemplateDTO emailTemplateDTO, SysUserEntity user) { + EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); try { XpackEmailTaskRequest taskForm = emailXpackService.taskForm(taskInstance.getTaskId()); @@ -158,8 +167,14 @@ public class EmailTaskHandler extends TaskHandler implements Job { if (ObjectUtils.isNotEmpty(content)) { contentStr = new String(content, "UTF-8"); } - emailService.sendWithImage(recipients, emailTemplateDTO.getTitle(), - contentStr, bytes); + + String viewIds = emailTemplateDTO.getViewIds(); + List viewIdList = Arrays.asList(viewIds.split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList()); + + PermissionProxy proxy = new PermissionProxy(); + proxy.setUserId(user.getUserId()); + List files = viewExportExcel.export(panelId, viewIdList, proxy); + emailService.sendWithImageAndFiles(recipients, emailTemplateDTO.getTitle(), contentStr, bytes, files); success(taskInstance); } catch (Exception e) { diff --git a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskViewHandler.java b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskViewHandler.java index 34881d2881..dbb2cbe65f 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskViewHandler.java +++ b/backend/src/main/java/io/dataease/job/sechedule/strategy/impl/EmailTaskViewHandler.java @@ -1,74 +1,24 @@ package io.dataease.job.sechedule.strategy.impl; import io.dataease.auth.entity.SysUserEntity; -import io.dataease.commons.utils.CronUtils; -import io.dataease.commons.utils.LogUtil; -import io.dataease.dto.PermissionProxy; + import io.dataease.plugins.common.entity.GlobalTaskInstance; -import io.dataease.plugins.config.SpringContextUtil; -import io.dataease.plugins.xpack.email.dto.request.XpackEmailTaskRequest; + import io.dataease.plugins.xpack.email.dto.response.XpackEmailTemplateDTO; -import io.dataease.plugins.xpack.email.service.EmailXpackService; -import io.dataease.service.chart.ViewExportExcel; -import io.dataease.service.system.EmailService; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.ObjectUtils; + import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.File; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; + @Service("emailTaskViewHandler") public class EmailTaskViewHandler extends EmailTaskHandler { - @Resource - private ViewExportExcel viewExportExcel; + @Async("priorityExecutor") - public void sendReport(GlobalTaskInstance taskInstance, XpackEmailTemplateDTO emailTemplateDTO, - SysUserEntity user) { - EmailXpackService emailXpackService = SpringContextUtil.getBean(EmailXpackService.class); - List files = null; - try { - XpackEmailTaskRequest taskForm = emailXpackService.taskForm(taskInstance.getTaskId()); - if (ObjectUtils.isEmpty(taskForm) || CronUtils.taskExpire(taskForm.getEndTime())) { - removeInstance(taskInstance); - return; - } - String panelId = emailTemplateDTO.getPanelId(); - - // 下面继续执行发送邮件的 - byte[] content = emailTemplateDTO.getContent(); - EmailService emailService = SpringContextUtil.getBean(EmailService.class); - - String contentStr = ""; - if (ObjectUtils.isNotEmpty(content)) { - contentStr = new String(content, "UTF-8"); - } - String viewIds = emailTemplateDTO.getPixel(); - List viewIdList = Arrays.asList(viewIds.split(",")).stream().map(s -> (s.trim())) - .collect(Collectors.toList()); - PermissionProxy proxy = new PermissionProxy(); - proxy.setUserId(user.getUserId()); - files = viewExportExcel.export(panelId, viewIdList, proxy); - emailService.sendWithFiles(emailTemplateDTO.getRecipients(), emailTemplateDTO.getTitle(), contentStr, files); - success(taskInstance); - } catch (Exception e) { - error(taskInstance, e); - LogUtil.error(e.getMessage(), e); - } finally { - if (CollectionUtils.isNotEmpty(files)) { - for (int i = 0; i < files.size(); i++) { - File file = files.get(i); - if (file.exists()) { - file.delete(); - } - } - } - } + public void sendReport(GlobalTaskInstance taskInstance, XpackEmailTemplateDTO emailTemplateDTO, SysUserEntity user) { + super.sendReport(taskInstance, emailTemplateDTO, user); } } 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 ade9939eb8..ddf3ff2f06 100644 --- a/backend/src/main/java/io/dataease/service/system/EmailService.java +++ b/backend/src/main/java/io/dataease/service/system/EmailService.java @@ -1,5 +1,6 @@ package io.dataease.service.system; +import cn.hutool.core.util.ArrayUtil; import io.dataease.commons.constants.ParamConstants; import io.dataease.commons.exception.DEException; import io.dataease.commons.utils.CommonBeanFactory; @@ -81,10 +82,15 @@ public class EmailService { } } - public void sendWithFiles(String to, String title, String content, List files) { + + + + + public void sendWithImageAndFiles(String to, String title, String content, byte[] bytes, List files) { if (StringUtils.isBlank(to)) return; - if (CollectionUtils.isEmpty(files)) { + + if (ArrayUtil.isEmpty(bytes)) { send(to, title, content); return; } @@ -92,19 +98,12 @@ public class EmailService { checkMailInfo(mailInfo); JavaMailSenderImpl driver = driver(mailInfo); MimeMessage mimeMessage = driver.createMimeMessage(); - MimeBodyPart text = new MimeBodyPart(); + MimeMultipart multipart = new MimeMultipart(); + try { - MimeMultipart multipart = new MimeMultipart(); - text.setText(content, "gb2312"); - multipart.addBodyPart(text); - multipart.setSubType("related"); - for (int i = 0; i < files.size(); i++) { - File file = files.get(i); - MimeBodyPart attach = new MimeBodyPart(); - FileDataSource fileDataSource = new FileDataSource(file); - attach.setDataHandler(new DataHandler(fileDataSource)); - attach.setFileName(MimeUtility.encodeText(file.getName())); - multipart.addBodyPart(attach); + multipart = addImage(multipart, bytes, content); + if (CollectionUtils.isNotEmpty(files)) { + multipart = addFiles(multipart, files); } mimeMessage.setFrom(driver.getUsername()); mimeMessage.setSubject(title); @@ -117,38 +116,32 @@ public class EmailService { } } - public void sendWithImage(String to, String title, String content, byte[] bytes) { - if (StringUtils.isBlank(to)) - return; - MailInfo mailInfo = proxy().mailInfo(); - checkMailInfo(mailInfo); - JavaMailSenderImpl driver = driver(mailInfo); - MimeMessage mimeMessage = driver.createMimeMessage(); - + private MimeMultipart addImage(MimeMultipart multipart, byte[] bytes, String content) throws Exception{ 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"); + image.setDataHandler(png); + image.setContentID(uuid); - text.setContent(content + "
", - "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); + multipart.addBodyPart(text); + multipart.addBodyPart(image); + multipart.setSubType("related"); + return multipart; + } + + private MimeMultipart addFiles(MimeMultipart multipart, List files) throws Exception{ + for (int i = 0; i < files.size(); i++) { + File file = files.get(i); + MimeBodyPart attach = new MimeBodyPart(); + FileDataSource fileDataSource = new FileDataSource(file); + attach.setDataHandler(new DataHandler(fileDataSource)); + attach.setFileName(MimeUtility.encodeText(file.getName())); + multipart.addBodyPart(attach); } + multipart.setSubType("related"); + return multipart; } public JavaMailSenderImpl driver(MailInfo mailInfo) {