perf(系统管理): 定时报告发送仪表板截图带视图

This commit is contained in:
fit2cloud-chenyw 2022-07-22 16:07:39 +08:00
parent d032f6ffce
commit bd55c18eae
3 changed files with 59 additions and 101 deletions

View File

@ -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<String> viewIdList = Arrays.asList(viewIds.split(",")).stream().map(s -> (s.trim())).collect(Collectors.toList());
PermissionProxy proxy = new PermissionProxy();
proxy.setUserId(user.getUserId());
List<File> files = viewExportExcel.export(panelId, viewIdList, proxy);
emailService.sendWithImageAndFiles(recipients, emailTemplateDTO.getTitle(), contentStr, bytes, files);
success(taskInstance);
} catch (Exception e) {

View File

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

View File

@ -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<File> files) {
public void sendWithImageAndFiles(String to, String title, String content, byte[] bytes, List<File> 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 + "<br/><img style='width: 60%;' src='cid:" + uuid + "' />", "text/html; charset=gb2312");
image.setDataHandler(png);
image.setContentID(uuid);
text.setContent(content + "<br/><img style='width: 60%;' src='cid:" + uuid + "' />",
"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<File> 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) {