diff --git a/core/backend/src/main/java/io/dataease/controller/exportCenter/ExportCenterController.java b/core/backend/src/main/java/io/dataease/controller/exportCenter/ExportCenterController.java index fa6a9ada08..74d88b52d7 100644 --- a/core/backend/src/main/java/io/dataease/controller/exportCenter/ExportCenterController.java +++ b/core/backend/src/main/java/io/dataease/controller/exportCenter/ExportCenterController.java @@ -34,6 +34,11 @@ public class ExportCenterController { exportCenterService.delete(ids); } + @PostMapping("/deleteAll/{type}") + public void deleteAll(@PathVariable String type){ + exportCenterService.deleteAll(type); + } + @GetMapping("/download/{id}") public void download(@PathVariable String id, HttpServletResponse response) throws Exception { exportCenterService.download(id, response); diff --git a/core/backend/src/main/java/io/dataease/service/exportCenter/ExportCenterService.java b/core/backend/src/main/java/io/dataease/service/exportCenter/ExportCenterService.java index 54bf874cc3..2ba74cacf7 100644 --- a/core/backend/src/main/java/io/dataease/service/exportCenter/ExportCenterService.java +++ b/core/backend/src/main/java/io/dataease/service/exportCenter/ExportCenterService.java @@ -15,6 +15,7 @@ import io.dataease.dto.dataset.DataSetPreviewPage; import io.dataease.dto.dataset.DataSetTableUnionDTO; import io.dataease.i18n.Translator; import io.dataease.plugins.common.base.domain.*; +import io.dataease.plugins.common.base.mapper.ChartViewMapper; import io.dataease.plugins.common.base.mapper.DatasetTableMapper; import io.dataease.plugins.common.base.mapper.DatasourceMapper; import io.dataease.plugins.common.base.mapper.ExportTaskMapper; @@ -37,6 +38,8 @@ import io.dataease.service.dataset.*; import io.dataease.service.datasource.DatasourceService; import io.dataease.service.engine.EngineService; import io.dataease.service.panel.PanelGroupService; +import io.dataease.websocket.entity.WsMessage; +import io.dataease.websocket.service.WsService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ObjectUtils; @@ -47,6 +50,7 @@ import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -68,6 +72,8 @@ import java.util.stream.Collectors; @Service public class ExportCenterService { + @Resource + private ChartViewMapper chartViewMapper; @Resource private ExportTaskMapper exportTaskMapper; @Value("${export.dataset.limit:100000}") @@ -108,6 +114,9 @@ public class ExportCenterService { private int keepAliveSeconds = 600; private Map Running_Task = new HashMap<>(); + @Autowired + private WsService wsService; + @PostConstruct public void init() { scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(corePoolSize); @@ -121,6 +130,16 @@ public class ExportCenterService { Map.Entry entry = iterator.next(); if (entry.getValue().isDone()) { iterator.remove(); + try { + ExportTask exportTask = exportTaskMapper.selectByPrimaryKey(entry.getKey()); + ExportTaskDTO exportTaskDTO = new ExportTaskDTO(); + BeanUtils.copyBean(exportTaskDTO, exportTask); + setExportFromName(exportTaskDTO); + WsMessage message = new WsMessage(exportTask.getUserId(), "/task-export-topic", exportTaskDTO); + wsService.releaseMessage(message); + } catch (Exception e) { + + } } } } @@ -157,6 +176,32 @@ public class ExportCenterService { exportTaskMapper.deleteByPrimaryKey(id); } + public void deleteAll(String type) { + if (!STATUS.contains(type)) { + DataEaseException.throwException("无效的状态"); + } + ExportTaskExample exportTaskExample = new ExportTaskExample(); + ExportTaskExample.Criteria criteria = exportTaskExample.createCriteria(); + criteria.andUserIdEqualTo(AuthUtils.getUser().getUserId()); + if (!type.equalsIgnoreCase("ALL")) { + criteria.andExportStatusEqualTo(type); + } + List exportTasks = exportTaskMapper.selectByExample(exportTaskExample); + exportTasks.parallelStream().forEach(exportTask -> { + Iterator> iterator = Running_Task.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (entry.getKey().equalsIgnoreCase(exportTask.getId())) { + entry.getValue().cancel(true); + iterator.remove(); + } + } + FileUtil.deleteDirectoryRecursively(exportData_path + exportTask.getId()); + exportTaskMapper.deleteByPrimaryKey(exportTask.getId()); + }); + + } + public void delete(List ids) { ids.forEach(id -> { delete(id); @@ -195,10 +240,10 @@ public class ExportCenterService { ExportTaskDTO exportTaskDTO = new ExportTaskDTO(); BeanUtils.copyBean(exportTaskDTO, exportTask); if (status.equalsIgnoreCase("ALL")) { - setExportFromName(exportTaskDTO); + setExportFromAbsName(exportTaskDTO); } if (status.equalsIgnoreCase(exportTaskDTO.getExportStatus())) { - setExportFromName(exportTaskDTO); + setExportFromAbsName(exportTaskDTO); } result.add(exportTaskDTO); }); @@ -206,7 +251,7 @@ public class ExportCenterService { return result; } - private void setExportFromName(ExportTaskDTO exportTaskDTO) { + private void setExportFromAbsName(ExportTaskDTO exportTaskDTO) { if (exportTaskDTO.getExportFromType().equalsIgnoreCase("chart")) { exportTaskDTO.setExportFromName(panelGroupService.getAbsPath(exportTaskDTO.getExportFrom())); } @@ -215,6 +260,16 @@ public class ExportCenterService { } } + private void setExportFromName(ExportTaskDTO exportTaskDTO) { + if (exportTaskDTO.getExportFromType().equalsIgnoreCase("chart")) { + exportTaskDTO.setExportFromName(chartViewMapper.selectByPrimaryKey(exportTaskDTO.getExportFrom()).getName()); + } + if (exportTaskDTO.getExportFromType().equalsIgnoreCase("dataset")) { + exportTaskDTO.setExportFromName(datasetTableMapper.selectByPrimaryKey(exportTaskDTO.getExportFrom()).getName()); + } + } + + public void exportTableDetails(PanelViewDetailsRequest request, Workbook wb, CellStyle cellStyle, Sheet detailsSheet) throws IOException { List details = request.getDetails(); Integer[] excelTypes = request.getExcelTypes(); diff --git a/core/frontend/src/components/canvas/components/editor/EditBar.vue b/core/frontend/src/components/canvas/components/editor/EditBar.vue index 079a7dda4d..c03573952f 100644 --- a/core/frontend/src/components/canvas/components/editor/EditBar.vue +++ b/core/frontend/src/components/canvas/components/editor/EditBar.vue @@ -488,7 +488,7 @@ export default { const customClass = `de-message-loading de-message-export`; this.$message({ message: h("p", null, [ - "后台导出中,可前往", + this.$t('data_export.exporting'), h( Button, { @@ -503,9 +503,9 @@ export default { }, }, }, - "数据导出中心", + this.$t('data_export.export_center'), ), - "查看进度,进行下载", + this.$t('data_export.export_info'), ]), iconClass, showClose: true, @@ -533,7 +533,7 @@ export default { }, }, }, - "数据导出中心", + this.$t('data_export.export_center'), ), ]), iconClass, diff --git a/core/frontend/src/components/canvas/customComponent/UserView.vue b/core/frontend/src/components/canvas/customComponent/UserView.vue index 598f8d650f..3c4cbf26e3 100644 --- a/core/frontend/src/components/canvas/customComponent/UserView.vue +++ b/core/frontend/src/components/canvas/customComponent/UserView.vue @@ -765,7 +765,7 @@ export default { const customClass = `de-message-loading de-message-export`; this.$message({ message: h("p", null, [ - "后台导出中,可前往", + this.$t('data_export.exporting'), h( Button, { @@ -780,9 +780,9 @@ export default { }, }, }, - "数据导出中心", + this.$t('data_export.export_center'), ), - "查看进度,进行下载", + this.$t('data_export.export_info'), ]), iconClass, showClose: true, @@ -810,7 +810,7 @@ export default { }, }, }, - "数据导出中心", + this.$t('data_export.export_center'), ), ]), iconClass, diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index 1438ae37fa..cf1e908ec9 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -538,6 +538,7 @@ export default { confirm: 'Confirm' }, deDataset: { + goto:', go to ', search_by_name: 'Search by name', new_folder: 'New Folder', search_fields: 'Search Fields', @@ -3106,5 +3107,15 @@ export default { geometry: 'Geometry', onlinemap: 'Online map', empty_desc: 'No map key' + }, + data_export:{ + export_center: 'Data Export Center', + export_info: 'View progress and download', + exporting: 'Exporting in the background, you can go to', + del_all: 'Delete all', + export_failed: 'Export failed', + export_from: 'Export source', + export_obj: 'Export object', + export_time: 'Export time' } } diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index 1ad207c391..8ab1d5101c 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -538,6 +538,7 @@ export default { confirm: '確 定' }, deDataset: { + goto:', 前往 ', search_by_name: '通過名稱搜索', new_folder: '新建資料夾', search_fields: '搜索欄位', @@ -3098,5 +3099,15 @@ export default { geometry: '地理信息', onlinemap: '在線地圖', empty_desc: '暫無在線地圖key' + }, + data_export:{ + export_center: '資料匯出中心', + export_info: '查看進度,進行下載', + exporting: '後台匯出中,可前往', + del_all: '全部刪除', + export_failed: '匯出失敗', + export_from: '匯出來源', + export_obj: '匯出對象', + export_time: '匯出時間' } } diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index 52366c6037..2917ab4833 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -1704,6 +1704,7 @@ export default { sub_axis_label: '副轴标签' }, dataset: { + goto:', 前往 ', scope_edit: '仅编辑时生效', scope_all: '数据集预览时全局生效', spend_time: '耗时', @@ -3100,5 +3101,15 @@ export default { geometry: '地理信息', onlinemap: '在线地图', empty_desc: '暂无在线地图key' + }, + data_export:{ + export_center: '数据导出中心', + export_info: '查看进度,进行下载', + exporting: '后台导出中,可前往', + del_all: '全部删除', + export_failed: '导出失败', + export_from: '导出来源', + export_obj: '导出对象', + export_time: '导出时间' } } diff --git a/core/frontend/src/views/dataset/data/ViewTable.vue b/core/frontend/src/views/dataset/data/ViewTable.vue index e0a18b80a0..c60521ea04 100644 --- a/core/frontend/src/views/dataset/data/ViewTable.vue +++ b/core/frontend/src/views/dataset/data/ViewTable.vue @@ -497,7 +497,7 @@ export default { const customClass = `de-message-loading de-message-export`; this.$message({ message: h("p", null, [ - "后台导出中,可前往", + this.$t('data_export.exporting'), h( Button, { @@ -512,9 +512,9 @@ export default { }, }, }, - "数据导出中心", + this.$t('data_export.export_center'), ), - "查看进度,进行下载", + this.$t('data_export.export_info'), ]), iconClass, showClose: true, diff --git a/core/frontend/src/views/dataset/exportExcel/index.vue b/core/frontend/src/views/dataset/exportExcel/index.vue index 32750fe737..c90e1284d3 100644 --- a/core/frontend/src/views/dataset/exportExcel/index.vue +++ b/core/frontend/src/views/dataset/exportExcel/index.vue @@ -1,7 +1,7 @@