From 59b97fdee2d5a857d2414177a3a877b5fb5b3905 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 24 May 2024 17:25:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- .../chart/server/ChartDataServer.java | 15 +++++- .../server/DataVisualizationServer.java | 47 +++++++++++++++++-- .../main/resources/db/migration/V2.7__ddl.sql | 21 ++++++++- core/core-frontend/src/api/dataset.ts | 2 +- .../visualization/ComponentEditBar.vue | 44 +++++++++++++++-- .../visualization/UserViewEnlarge.vue | 40 +++++++++++++++- .../src/views/chart/components/js/util.ts | 25 ++++++---- .../visualized/data/dataset/ExportExcel.vue | 25 +++++----- installer/dataease/docker-compose.yml | 1 + installer/install.sh | 12 ++--- .../java/io/dataease/utils/FileUtils.java | 20 ++++++++ 12 files changed, 213 insertions(+), 41 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6dbd2e9213..db67a1ff3a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM registry.cn-qingdao.aliyuncs.com/dataease/alpine-openjdk17-jre -RUN mkdir -p /opt/apps/config /opt/dataease2.0/drivers/ /opt/dataease2.0/cache/ /opt/dataease2.0/data/map /opt/dataease2.0/data/static-resource/ /opt/dataease2.0/data/appearance/ +RUN mkdir -p /opt/apps/config /opt/dataease2.0/drivers/ /opt/dataease2.0/cache/ /opt/dataease2.0/data/map /opt/dataease2.0/data/static-resource/ /opt/dataease2.0/data/appearance/ /opt/dataease2.0/data/exportData/ ADD drivers/* /opt/dataease2.0/drivers/ ADD mapFiles/ /opt/dataease2.0/data/map/ diff --git a/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java b/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java index 9d7e5494b5..4e99e031e6 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java +++ b/core/core-backend/src/main/java/io/dataease/chart/server/ChartDataServer.java @@ -5,13 +5,16 @@ import io.dataease.api.chart.dto.ChartViewDTO; import io.dataease.api.chart.dto.ViewDetailField; import io.dataease.api.chart.request.ChartExcelRequest; import io.dataease.chart.manage.ChartDataManage; +import io.dataease.constant.AuthConstant; import io.dataease.constant.CommonConstants; import io.dataease.engine.constant.DeTypeConstants; import io.dataease.exception.DEException; +import io.dataease.exportCenter.manage.ExportCenterManage; import io.dataease.result.ResultCode; import io.dataease.utils.LogUtil; import io.dataease.visualization.manage.VisualizationTemplateExtendDataManage; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ArrayUtils; @@ -22,12 +25,13 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; /** @@ -38,10 +42,11 @@ import java.util.stream.Collectors; public class ChartDataServer implements ChartDataApi { @Resource private ChartDataManage chartDataManage; + @Resource + private ExportCenterManage exportCenterManage; @Resource private VisualizationTemplateExtendDataManage extendDataManage; - @Value("${export.views.limit:500000}") private Integer limit; @@ -76,6 +81,12 @@ public class ChartDataServer implements ChartDataApi { @Override public void innerExportDetails(ChartExcelRequest request, HttpServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String linkToken = httpServletRequest.getHeader(AuthConstant.LINK_TOKEN_KEY); + if (StringUtils.isEmpty(linkToken)) { + exportCenterManage.addTask(request.getViewId(), "chart", request); + return; + } OutputStream outputStream = response.getOutputStream(); try { findExcelData(request); diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java index 1cdf69a02a..daf0e64ccb 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java @@ -13,6 +13,7 @@ import io.dataease.api.visualization.vo.DataVisualizationVO; import io.dataease.api.visualization.vo.VisualizationResourceVO; import io.dataease.api.visualization.vo.VisualizationWatermarkVO; import io.dataease.chart.dao.auto.entity.CoreChartView; +import io.dataease.chart.dao.auto.mapper.CoreChartViewMapper; import io.dataease.chart.manage.ChartDataManage; import io.dataease.chart.manage.ChartViewManege; import io.dataease.commons.constants.DataVisualizationConstants; @@ -41,6 +42,7 @@ import io.dataease.visualization.dao.auto.mapper.VisualizationWatermarkMapper; import io.dataease.visualization.dao.ext.mapper.ExtDataVisualizationMapper; import io.dataease.visualization.manage.CoreVisualizationManage; import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -48,10 +50,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @@ -64,6 +63,8 @@ public class DataVisualizationServer implements DataVisualizationApi { @Resource private ChartViewManege chartViewManege; + @Resource + private CoreChartViewMapper coreChartViewMapper; @Resource private ExtDataVisualizationMapper extDataVisualizationMapper; @@ -391,4 +392,42 @@ public class DataVisualizationServer implements DataVisualizationApi { } } + public String getAbsPath(String id) { + CoreChartView coreChartView = coreChartViewMapper.selectById(id); + if (coreChartView == null) { + return null; + } + if (coreChartView.getSceneId() == null) { + return coreChartView.getTitle(); + } + List parents = getParents(coreChartView.getSceneId()); + StringBuilder stringBuilder = new StringBuilder(); + parents.forEach(ele -> { + if (ObjectUtils.isNotEmpty(ele)) { + stringBuilder.append(ele.getName()).append("/"); + } + }); + stringBuilder.append(coreChartView.getTitle()); + return stringBuilder.toString(); + } + + public List getParents(Long id) { + List list = new ArrayList<>(); + DataVisualizationInfo dataVisualizationInfo = visualizationInfoMapper.selectById(id); + list.add(dataVisualizationInfo); + getParent(list, dataVisualizationInfo); + Collections.reverse(list); + return list; + } + + public void getParent(List list, DataVisualizationInfo dataVisualizationInfo) { + if (ObjectUtils.isNotEmpty(dataVisualizationInfo)) { + if (dataVisualizationInfo.getPid() != null) { + DataVisualizationInfo d = visualizationInfoMapper.selectById(dataVisualizationInfo.getPid()); + list.add(d); + getParent(list, d); + } + } + } + } diff --git a/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql index 303e400b80..8b725c028a 100644 --- a/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql +++ b/core/core-backend/src/main/resources/db/migration/V2.7__ddl.sql @@ -21,4 +21,23 @@ ALTER TABLE `xpack_setting_authentication` ALTER TABLE `xpack_setting_authentication` ADD COLUMN `synced` tinyint(1) NOT NULL DEFAULT 0 COMMENT '已同步' AFTER `plugin_json`; ALTER TABLE `xpack_setting_authentication` - ADD COLUMN `valid` tinyint(1) NOT NULL DEFAULT 0 COMMENT '有效' AFTER `synced`; \ No newline at end of file + ADD COLUMN `valid` tinyint(1) NOT NULL DEFAULT 0 COMMENT '有效' AFTER `synced`; + + +DROP TABLE IF EXISTS `core_export_task`; +CREATE TABLE `core_export_task` +( + `id` varchar(255) NOT NULL, + `user_id` bigint(20) NOT NULL, + `file_name` varchar(2048) DEFAULT NULL, + `file_size` DOUBLE DEFAULT NULL, + `file_size_unit` varchar(255) DEFAULT NULL, + `export_from` varchar(255) DEFAULT NULL, + `export_status` varchar(255) DEFAULT NULL, + `export_from_type` varchar(255) DEFAULT NULL, + `export_time` bigint(20) DEFAULT NULL, + `export_progress` varchar(255) DEFAULT NULL, + `export_machine_name` varchar(512) DEFAULT NULL, + `params` longtext NOT NULL COMMENT '过滤参数', + PRIMARY KEY (`id`) +) COMMENT='导出任务表'; diff --git a/core/core-frontend/src/api/dataset.ts b/core/core-frontend/src/api/dataset.ts index aeb29a85d0..8b1c42b7a4 100644 --- a/core/core-frontend/src/api/dataset.ts +++ b/core/core-frontend/src/api/dataset.ts @@ -250,7 +250,7 @@ export const getFunction = async (): Promise => { export const exportTasks = async (type): Promise => { return request.post({ url: '/exportCenter/exportTasks/' + type, data: {} }).then(res => { - return res?.data + return res }) } diff --git a/core/core-frontend/src/components/visualization/ComponentEditBar.vue b/core/core-frontend/src/components/visualization/ComponentEditBar.vue index 511fc750ca..5132a150fb 100644 --- a/core/core-frontend/src/components/visualization/ComponentEditBar.vue +++ b/core/core-frontend/src/components/visualization/ComponentEditBar.vue @@ -146,7 +146,7 @@