diff --git a/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java b/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java index 889bf79bd4..94210a177c 100644 --- a/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/XEmailTaskServer.java @@ -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> listPager = instancesGrid(0, 0, request); + List instanceDTOS = listPager.getListObject(); + ExcelSheetModel excelSheetModel = excelSheetModel(instanceDTOS); + List 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 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 head = Arrays.asList(headArr); + excelSheetModel.setHeads(head); + List> datas = instanceDTOS.stream().map(this::formatExcelData).collect(Collectors.toList()); + excelSheetModel.setDatas(datas); + return excelSheetModel; + } + + private List formatExcelData(XpackTaskInstanceDTO instanceDTO) { + List 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)) diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index e16cb37c4d..d31cc57791 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -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 diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 53e3ba69ff..a3dea632e5 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -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 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index f8208f88f6..c46259352d 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -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