Merge pull request #2929 from dataease/pr@dev@feat_email_task_export

feat(系统管理-定时报告): 增加导出api
This commit is contained in:
fit2cloud-chenyw 2022-08-24 14:51:07 +08:00 committed by GitHub
commit d963c92a7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 100 additions and 0 deletions

View File

@ -1,11 +1,14 @@
package io.dataease.plugins.server;
import cn.hutool.core.io.FileUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.dataease.auth.api.dto.CurrentUserDto;
import io.dataease.commons.exception.DEException;
import io.dataease.commons.model.excel.ExcelSheetModel;
import io.dataease.commons.pool.PriorityThreadPoolExecutor;
import io.dataease.commons.utils.*;
import io.dataease.i18n.Translator;
import io.dataease.plugins.common.entity.GlobalTaskEntity;
import io.dataease.plugins.common.entity.GlobalTaskInstance;
import io.dataease.plugins.common.entity.XpackConditionEntity;
@ -27,11 +30,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
@ApiIgnore
@RequestMapping("/plugin/task")
@ -216,6 +225,70 @@ public class XEmailTaskServer {
return instanceForm.getInfo();
}
@RequiresPermissions("task-email:read")
@PostMapping("/export")
public void export(@RequestBody XpackGridRequest request) throws Exception{
Pager<List<XpackTaskInstanceDTO>> listPager = instancesGrid(0, 0, request);
List<XpackTaskInstanceDTO> instanceDTOS = listPager.getListObject();
ExcelSheetModel excelSheetModel = excelSheetModel(instanceDTOS);
List<ExcelSheetModel> sheetModels = new ArrayList<>();
sheetModels.add(excelSheetModel);
File file = ExcelUtils.exportExcel(sheetModels, null);
InputStream inputStream = new FileInputStream(file);
HttpServletResponse response = ServletUtils.response();
try {
String filename = file.getName();
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.setContentType("application/octet-stream;charset=UTF-8");
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
ServletOutputStream outputStream = response.getOutputStream();
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
// 读取文件
bis = new BufferedInputStream(inputStream);
int i = bis.read(buff);
while (i != -1) {
outputStream.write(buff, 0, buff.length);
outputStream.flush();
i = bis.read(buff);
}
outputStream.close();
inputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}finally {
if (file.exists())
FileUtil.del(file);
}
}
private ExcelSheetModel excelSheetModel(List<XpackTaskInstanceDTO> instanceDTOS) {
ExcelSheetModel excelSheetModel = new ExcelSheetModel();
excelSheetModel.setSheetName(Translator.get("I18N_XPACKTASK_FILE_NAME"));
String[] headArr = new String[] {Translator.get("I18N_XPACKTASK_NAME"), Translator.get("I18N_XPACKTASK_EXEC_TIME"), Translator.get("I18N_XPACKTASK_STATUS")};
List<String> head = Arrays.asList(headArr);
excelSheetModel.setHeads(head);
List<List<String>> datas = instanceDTOS.stream().map(this::formatExcelData).collect(Collectors.toList());
excelSheetModel.setDatas(datas);
return excelSheetModel;
}
private List<String> formatExcelData(XpackTaskInstanceDTO instanceDTO) {
List<String> results = new ArrayList<>();
results.add(instanceDTO.getTaskName());
try {
results.add(DateUtils.getTimeString(instanceDTO.getExecuteTime()));
} catch (Exception e) {
throw new RuntimeException(e);
}
Integer status = instanceDTO.getStatus();
String i18key = "I18N_XPACKTASK_" + (ObjectUtils.isEmpty(status) || status == -1 ? "ERROR" : status == 0 ? "UNDERWAY" : "SUCCESS");
results.add(Translator.get(i18key));
return results;
}
private XpackPixelEntity buildPixel(String pixel) {
if (StringUtils.isBlank(pixel))

View File

@ -213,3 +213,12 @@ i18n_gauge_field_delete=Field type changed,please edit
\u6570\u636E\u540C\u6B65\u8868\u5355=Data synchronization form
i18n_max_user_import_size=File size exceeds 10M
I18N_XPACKTASK_FILE_NAME=Execute log
I18N_XPACKTASK_NAME=Name
I18N_XPACKTASK_EXEC_TIME=Time
I18N_XPACKTASK_STATUS=Status
I18N_XPACKTASK_SUCCESS=Success
I18N_XPACKTASK_ERROR=Error
I18N_XPACKTASK_UNDERWAY=Underway

View File

@ -214,3 +214,12 @@ i18n_gauge_field_change=\u6240\u7528\u5B57\u6BB5\u53D1\u751F\u53D8\u66F4\uFF0C\u
i18n_gauge_field_delete=\u6240\u7528\u5B57\u6BB5\u5DF2\u5220\u9664\uFF0C\u8BF7\u91CD\u65B0\u7F16\u8F91
i18n_max_user_import_size=\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC710M
I18N_XPACKTASK_FILE_NAME=\u6267\u884C\u8BB0\u5F55
I18N_XPACKTASK_NAME=\u4EFB\u52A1\u540D\u79F0
I18N_XPACKTASK_EXEC_TIME=\u6267\u884C\u65F6\u95F4
I18N_XPACKTASK_STATUS=\u6267\u884C\u72B6\u6001
I18N_XPACKTASK_SUCCESS=\u6210\u529F
I18N_XPACKTASK_ERROR=\u5931\u8D25
I18N_XPACKTASK_UNDERWAY=\u6267\u884C\u4E2D

View File

@ -211,3 +211,12 @@ i18n_gauge_field_delete=\u6240\u7528\u5B57\u6BB5\u5DF2\u522A\u9664\uFF0C\u8ACB\u
i18n_max_user_import_size=\u6587\u4EF6\u5927\u5C0F\u8D85\u904E10M
I18N_XPACKTASK_FILE_NAME=\u57F7\u884C\u8A18\u9304
I18N_XPACKTASK_NAME=\u4EFB\u52D9\u540D\u7A31
I18N_XPACKTASK_EXEC_TIME=\u57F7\u884C\u6642\u9593
I18N_XPACKTASK_STATUS=\u57F7\u884C\u72C0\u614B
I18N_XPACKTASK_SUCCESS=\u6210\u529F
I18N_XPACKTASK_ERROR=\u5931\u6557
I18N_XPACKTASK_UNDERWAY=\u57F7\u884C\u4E2D