From 9d15e0106faf667336ad7d0eca19d7c6d8d1cbf1 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 28 Nov 2024 16:01:09 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=20fix:=20=E3=80=90=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E3=80=91=E5=AD=98=E9=87=8F=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E4=BF=A1=E6=81=AFAES=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/manage/DataSourceManage.java | 28 +++++++++++++------ .../system/manage/SysParameterManage.java | 5 ++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java b/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java index 0a79c72d9b..af132fe9c3 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java @@ -17,10 +17,9 @@ import io.dataease.license.config.XpackInteract; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; import io.dataease.operation.manage.CoreOptRecentManage; -import io.dataease.utils.AuthUtils; -import io.dataease.utils.BeanUtils; -import io.dataease.utils.CommunityUtils; -import io.dataease.utils.TreeUtils; +import io.dataease.system.dao.auto.entity.CoreSysSetting; +import io.dataease.system.manage.SysParameterManage; +import io.dataease.utils.*; import jakarta.annotation.Resource; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -43,6 +42,9 @@ public class DataSourceManage { @Resource private CoreOptRecentManage coreOptRecentManage; + @Resource + private SysParameterManage sysParameterManage; + private DatasourceNodeBO rootNode() { return new DatasourceNodeBO(0L, "root", false, 7, -1L, 0, "mysql"); } @@ -157,10 +159,20 @@ public class DataSourceManage { } - public void encryptDsConfig(){ - coreDatasourceMapper.selectList(null).forEach(dataSource -> { - coreDatasourceMapper.updateById(dataSource); - }); + public void encryptDsConfig() { + List coreSysSettings = sysParameterManage.groupList("datasource.encrypt"); + if (CollectionUtils.isEmpty(coreSysSettings)) { + coreDatasourceMapper.selectList(null).forEach(dataSource -> { + coreDatasourceMapper.updateById(dataSource); + }); + CoreSysSetting coreSysSetting = new CoreSysSetting(); + coreSysSetting.setId(IDUtils.snowID()); + coreSysSetting.setPkey("datasource.encrypt"); + coreSysSetting.setPval("true"); + coreSysSetting.setType("text"); + coreSysSetting.setSort(1); + sysParameterManage.insert(coreSysSetting); + } } public DatasourceDTO getDs(Long id) { diff --git a/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java b/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java index 60b7096b99..8c69904f8c 100644 --- a/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java +++ b/core/core-backend/src/main/java/io/dataease/system/manage/SysParameterManage.java @@ -172,4 +172,9 @@ public class SysParameterManage { } return vo; } + + public void insert(CoreSysSetting coreSysSetting) { + coreSysSettingMapper.insert(coreSysSetting); + } + } From d38f20fd55d8e280dd43c8b4af524712bb7ca3c6 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 28 Nov 2024 18:25:34 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=20fix:=20=E4=B8=8B=E8=BD=BD=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E8=A1=A8=E5=AE=9E=E7=8E=B0=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/table/TableInfoHandler.java | 3 +- .../chart/server/ChartDataServer.java | 88 +++++++----- .../manage/ExportCenterManage.java | 134 ++++++++++++------ 3 files changed, 140 insertions(+), 85 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java index 0d87d54348..d94b6133ce 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java @@ -44,7 +44,7 @@ public class TableInfoHandler extends DefaultChartHandler { Map mapSize = (Map) mapAttr.get("basicStyle"); var tablePageMode = (String) mapSize.get("tablePageMode"); formatResult.getContext().put("tablePageMode", tablePageMode); - if (StringUtils.equalsIgnoreCase(tablePageMode, "page") && !view.getIsExcelExport()) { + if (StringUtils.equalsIgnoreCase(tablePageMode, "page")) { if (chartExtRequest.getGoPage() == null) { chartExtRequest.setGoPage(1L); } @@ -127,6 +127,7 @@ public class TableInfoHandler extends DefaultChartHandler { querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); datasourceRequest.setQuery(querySql); logger.debug("calcite chart sql: " + querySql); + System.out.println(querySql); List data = (List) provider.fetchResultField(datasourceRequest).get("data"); //自定义排序 data = ChartDataUtil.resultCustomSort(xAxis, data); 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 758cdd18dc..0b69c37147 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 @@ -17,7 +17,6 @@ import io.dataease.exception.DEException; import io.dataease.exportCenter.manage.ExportCenterManage; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.view.dto.ChartViewDTO; -import io.dataease.extensions.view.dto.ChartViewFieldBaseDTO; import io.dataease.extensions.view.dto.ChartViewFieldDTO; import io.dataease.extensions.view.dto.FormatterCfgDTO; import io.dataease.license.manage.F2CLicLimitedManage; @@ -74,6 +73,9 @@ public class ChartDataServer implements ChartDataApi { @Resource(name = "f2CLicLimitedManage") private F2CLicLimitedManage f2CLicLimitedManage; + @Value("${dataease.export.page.size:50000}") + private Integer extractPageSize; + private final Long sheetLimit = 1000000L; private Integer getExportLimit() { return Math.toIntExact(Math.min(f2CLicLimitedManage.checkDatasetLimit(), limit)); @@ -95,7 +97,8 @@ public class ChartDataServer implements ChartDataApi { return null; } - public void findExcelData(ChartExcelRequest request) { + public ChartViewDTO findExcelData(ChartExcelRequest request) { + ChartViewDTO chartViewInfo = new ChartViewDTO(); try { ChartViewDTO viewDTO = request.getViewInfo(); viewDTO.setIsExcelExport(true); @@ -107,12 +110,8 @@ public class ChartDataServer implements ChartDataApi { List sourceFields = datasetFieldServer.listByDatasetGroup(viewDTO.getTableId()); List fileNames = permissionManage.filterColumnPermissions(sourceFields, new HashMap<>(), viewDTO.getTableId(), null).stream().map(DatasetTableFieldDTO::getDataeaseName).collect(Collectors.toList()); sourceFields = sourceFields.stream().filter(datasetTableFieldDTO -> fileNames.contains(datasetTableFieldDTO.getDataeaseName())).collect(Collectors.toList()); - dsHeader = sourceFields.stream() - .map(DatasetTableFieldDTO::getName) - .toArray(String[]::new); - dsTypes = sourceFields.stream() - .map(DatasetTableFieldDTO::getDeType) - .toArray(Integer[]::new); + dsHeader = sourceFields.stream().map(DatasetTableFieldDTO::getName).toArray(String[]::new); + dsTypes = sourceFields.stream().map(DatasetTableFieldDTO::getDeType).toArray(Integer[]::new); TypeReference> listTypeReference = new TypeReference>() { }; viewDTO.setXAxis(JsonUtil.parseList(JsonUtil.toJSONString(sourceFields).toString(), listTypeReference)); @@ -124,7 +123,7 @@ public class ChartDataServer implements ChartDataApi { } else { viewDTO.setResultCount(curLimit); } - ChartViewDTO chartViewInfo = getData(viewDTO); + chartViewInfo = getData(viewDTO); List tableRow = (List) chartViewInfo.getData().get("sourceData"); if ("dataset".equals(request.getDownloadType())) { request.setHeader(dsHeader); @@ -149,9 +148,10 @@ public class ChartDataServer implements ChartDataApi { } catch (Exception e) { throw new RuntimeException(e); } - + return chartViewInfo; } + public static String valueFormatter(BigDecimal value, FormatterCfgDTO formatter) { if (value == null) { return null; @@ -240,9 +240,7 @@ public class ChartDataServer implements ChartDataApi { if ((StringUtils.isNotEmpty(linkToken) && !request.isDataEaseBi()) || (request.isDataEaseBi() && StringUtils.isEmpty(linkToken))) { OutputStream outputStream = response.getOutputStream(); try { - findExcelData(request); Workbook wb = new SXSSFWorkbook(); - //给单元格设置样式 CellStyle cellStyle = wb.createCellStyle(); Font font = wb.createFont(); @@ -257,35 +255,50 @@ public class ChartDataServer implements ChartDataApi { //设置单元格填充样式(使用纯色背景颜色填充) cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - if (CollectionUtils.isEmpty(request.getMultiInfo())) { - List details = request.getDetails(); - Integer[] excelTypes = request.getExcelTypes(); - details.add(0, request.getHeader()); - ViewDetailField[] detailFields = request.getDetailFields(); - Object[] header = request.getHeader(); - - //明细sheet - Sheet detailsSheet = wb.createSheet("数据"); - - setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + if ("dataset".equals(request.getDownloadType()) || request.getViewInfo().getType().equalsIgnoreCase("table-info")) { + List details = new ArrayList<>(); + Sheet detailsSheet; + Integer sheetIndex = 1; + request.getViewInfo().getChartExtRequest().setPageSize(Long.valueOf(extractPageSize)); + ChartViewDTO chartViewDTO = findExcelData(request); + for (long i = 1; i < chartViewDTO.getTotalPage() + 1; i++) { + request.getViewInfo().getChartExtRequest().setGoPage(i); + findExcelData(request); + details.addAll(request.getDetails()); + if ((details.size() + extractPageSize) > sheetLimit) { + detailsSheet = wb.createSheet("数据" + sheetIndex); + Integer[] excelTypes = request.getExcelTypes(); + details.add(0, request.getHeader()); + ViewDetailField[] detailFields = request.getDetailFields(); + Object[] header = request.getHeader(); + ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + sheetIndex++; + details.clear(); + } + } } else { - //多个sheet - for (int i = 0; i < request.getMultiInfo().size(); i++) { - ChartExcelRequestInner requestInner = request.getMultiInfo().get(i); - - List details = requestInner.getDetails(); - Integer[] excelTypes = requestInner.getExcelTypes(); - details.add(0, requestInner.getHeader()); - ViewDetailField[] detailFields = requestInner.getDetailFields(); - Object[] header = requestInner.getHeader(); - - //明细sheet - Sheet detailsSheet = wb.createSheet("数据 " + (i + 1)); - + findExcelData(request); + if (CollectionUtils.isEmpty(request.getMultiInfo())) { + List details = request.getDetails(); + Integer[] excelTypes = request.getExcelTypes(); + details.add(0, request.getHeader()); + ViewDetailField[] detailFields = request.getDetailFields(); + Object[] header = request.getHeader(); + Sheet detailsSheet = wb.createSheet("数据"); setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + } else { + for (int i = 0; i < request.getMultiInfo().size(); i++) { + ChartExcelRequestInner requestInner = request.getMultiInfo().get(i); + List details = requestInner.getDetails(); + Integer[] excelTypes = requestInner.getExcelTypes(); + details.add(0, requestInner.getHeader()); + ViewDetailField[] detailFields = requestInner.getDetailFields(); + Object[] header = requestInner.getHeader(); + Sheet detailsSheet = wb.createSheet("数据 " + (i + 1)); + setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + } } } - response.setContentType("application/vnd.ms-excel"); //文件名称 response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(request.getViewName(), StandardCharsets.UTF_8) + ".xlsx"); @@ -308,7 +321,6 @@ public class ChartDataServer implements ChartDataApi { } - public static void setExcelData(Sheet detailsSheet, CellStyle cellStyle, Object[] header, List details, ViewDetailField[] detailFields, Integer[] excelTypes) { boolean mergeHead = false; if (ArrayUtils.isNotEmpty(detailFields)) { diff --git a/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java b/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java index 4770e47bec..ce7e32c1a3 100644 --- a/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java +++ b/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java @@ -38,6 +38,7 @@ import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; import io.dataease.extensions.datasource.factory.ProviderFactory; import io.dataease.extensions.datasource.model.SQLMeta; import io.dataease.extensions.datasource.provider.Provider; +import io.dataease.extensions.view.dto.ChartViewDTO; import io.dataease.extensions.view.dto.ColumnPermissionItem; import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeObj; import io.dataease.i18n.Translator; @@ -104,6 +105,11 @@ public class ExportCenterManage implements BaseExportApi { private Long limit; private final static String DATA_URL_TITLE = "data:image/jpeg;base64,"; private static final String exportData_path = "/opt/dataease2.0/data/exportData/"; + + public Integer getExtractPageSize() { + return extractPageSize; + } + @Value("${dataease.export.page.size:50000}") private Integer extractPageSize; static private List STATUS = Arrays.asList("SUCCESS", "FAILED", "PENDING", "IN_PROGRESS", "ALL"); @@ -122,7 +128,7 @@ public class ExportCenterManage implements BaseExportApi { private DatasetTableFieldManage datasetTableFieldManage; @Resource private DatasetDataManage datasetDataManage; - + private final Long sheetLimit = 1000000L; @Autowired(required = false) private DataFillingApi dataFillingApi = null; @@ -512,10 +518,17 @@ public class ExportCenterManage implements BaseExportApi { Long totalCount = datasetDataManage.getDatasetTotal(dto, replaceSql, null); Long curLimit = getExportLimit(); totalCount = totalCount > curLimit ? curLimit : totalCount; - Long sheetLimit = 1000000L; + Long sheetCount = (totalCount / sheetLimit) + (totalCount % sheetLimit > 0 ? 1 : 0); Workbook wb = new SXSSFWorkbook(); - FileOutputStream fileOutputStream = new FileOutputStream(dataPath + "/" + exportTask.getId() + ".xlsx"); + CellStyle cellStyle = wb.createCellStyle(); + Font font = wb.createFont(); + font.setFontHeightInPoints((short) 12); + font.setBold(true); + cellStyle.setFont(font); + cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + for (Long s = 1L; s < sheetCount + 1; s++) { Long sheetSize; if (s.equals(sheetCount)) { @@ -539,14 +552,7 @@ public class ExportCenterManage implements BaseExportApi { Map previewData = datasetDataManage.buildPreviewData(provider.fetchResultField(datasourceRequest), allFields, desensitizationList); List> data = (List>) previewData.get("data"); if (p.equals(0L)) { - detailsSheet = wb.createSheet("数据-" + s); - CellStyle cellStyle = wb.createCellStyle(); - Font font = wb.createFont(); - font.setFontHeightInPoints((short) 12); - font.setBold(true); - cellStyle.setFont(font); - cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); - cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + detailsSheet = wb.createSheet("数据" + s); List header = new ArrayList<>(); for (DatasetTableFieldDTO field : allFields) { header.add(field.getName()); @@ -617,6 +623,7 @@ public class ExportCenterManage implements BaseExportApi { exportTaskMapper.updateById(exportTask); } } + FileOutputStream fileOutputStream = new FileOutputStream(dataPath + "/" + exportTask.getId() + ".xlsx"); wb.write(fileOutputStream); fileOutputStream.flush(); fileOutputStream.close(); @@ -647,53 +654,46 @@ public class ExportCenterManage implements BaseExportApi { try { exportTask.setExportStatus("IN_PROGRESS"); exportTaskMapper.updateById(exportTask); - chartDataServer.findExcelData(request); - Workbook wb = new SXSSFWorkbook(); - - //给单元格设置样式 CellStyle cellStyle = wb.createCellStyle(); Font font = wb.createFont(); - //设置字体大小 font.setFontHeightInPoints((short) 12); - //设置字体加粗 font.setBold(true); - //给字体设置样式 cellStyle.setFont(font); - //设置单元格背景颜色 cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); - //设置单元格填充样式(使用纯色背景颜色填充) cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); - if (CollectionUtils.isEmpty(request.getMultiInfo())) { - if (request.getViewInfo().getType().equalsIgnoreCase("chart-mix-dual-line")) { - - } else { - List details = request.getDetails(); - Integer[] excelTypes = request.getExcelTypes(); - details.add(0, request.getHeader()); - ViewDetailField[] detailFields = request.getDetailFields(); - Object[] header = request.getHeader(); - Sheet detailsSheet = wb.createSheet("数据"); - ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + List details = new ArrayList<>(); + Sheet detailsSheet; + Integer sheetIndex = 1; + if ("dataset".equals(request.getDownloadType()) || request.getViewInfo().getType().equalsIgnoreCase("table-info")) { + request.getViewInfo().getChartExtRequest().setPageSize(Long.valueOf(extractPageSize)); + ChartViewDTO chartViewDTO = chartDataServer.findExcelData(request); + for (long i = 1; i < chartViewDTO.getTotalPage() + 1; i++) { + request.getViewInfo().getChartExtRequest().setGoPage(i); + chartDataServer.findExcelData(request); + details.addAll(request.getDetails()); + if ((details.size() + extractPageSize) > sheetLimit) { + detailsSheet = wb.createSheet("数据" + sheetIndex); + Integer[] excelTypes = request.getExcelTypes(); + details.add(0, request.getHeader()); + ViewDetailField[] detailFields = request.getDetailFields(); + Object[] header = request.getHeader(); + ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + sheetIndex++; + details.clear(); + exportTask.setExportStatus("IN_PROGRESS"); + double exportRogress = (double) (i / chartViewDTO.getTotalPage() + 1); + DecimalFormat df = new DecimalFormat("#.##"); + String formattedResult = df.format((exportRogress) * 100); + exportTask.setExportProgress(formattedResult); + exportTaskMapper.updateById(exportTask); + } } } else { - //多个sheet - for (int i = 0; i < request.getMultiInfo().size(); i++) { - ChartExcelRequestInner requestInner = request.getMultiInfo().get(i); - - List details = requestInner.getDetails(); - Integer[] excelTypes = requestInner.getExcelTypes(); - details.add(0, requestInner.getHeader()); - ViewDetailField[] detailFields = requestInner.getDetailFields(); - Object[] header = requestInner.getHeader(); - - //明细sheet - Sheet detailsSheet = wb.createSheet("数据 " + (i + 1)); - - ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); - } + downloadNotTableInfoData(request, wb); } + try (FileOutputStream outputStream = new FileOutputStream(dataPath + "/" + exportTask.getId() + ".xlsx")) { wb.write(outputStream); outputStream.flush(); @@ -713,6 +713,48 @@ public class ExportCenterManage implements BaseExportApi { Running_Task.put(exportTask.getId(), future); } + private void downloadNotTableInfoData(ChartExcelRequest request, Workbook wb) { + chartDataServer.findExcelData(request); + //给单元格设置样式 + CellStyle cellStyle = wb.createCellStyle(); + Font font = wb.createFont(); + //设置字体大小 + font.setFontHeightInPoints((short) 12); + //设置字体加粗 + font.setBold(true); + //给字体设置样式 + cellStyle.setFont(font); + //设置单元格背景颜色 + cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + //设置单元格填充样式(使用纯色背景颜色填充) + cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + if (CollectionUtils.isEmpty(request.getMultiInfo())) { + if (request.getViewInfo().getType().equalsIgnoreCase("chart-mix-dual-line")) { + } else { + List details = request.getDetails(); + Integer[] excelTypes = request.getExcelTypes(); + details.add(0, request.getHeader()); + ViewDetailField[] detailFields = request.getDetailFields(); + Object[] header = request.getHeader(); + Sheet detailsSheet = wb.createSheet("数据"); + ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + } + } else { + //多个sheet + for (int i = 0; i < request.getMultiInfo().size(); i++) { + ChartExcelRequestInner requestInner = request.getMultiInfo().get(i); + + List details = requestInner.getDetails(); + Integer[] excelTypes = requestInner.getExcelTypes(); + details.add(0, requestInner.getHeader()); + ViewDetailField[] detailFields = requestInner.getDetailFields(); + Object[] header = requestInner.getHeader(); + //明细sheet + Sheet detailsSheet = wb.createSheet("数据 " + (i + 1)); + ChartDataServer.setExcelData(detailsSheet, cellStyle, header, details, detailFields, excelTypes); + } + } + } private void setFileSize(String filePath, CoreExportTask exportTask) { File file = new File(filePath); From 7079965a50595be66518acc21da276c6bfe85e74 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 2 Dec 2024 18:53:09 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=E3=80=90=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E3=80=91-=E7=BC=96=E8=BE=91API=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-frontend/src/locales/en.ts | 2 +- core/core-frontend/src/locales/tw.ts | 2 +- core/core-frontend/src/locales/zh-CN.ts | 2 +- .../datasource/form/ApiHttpRequestDraw.vue | 90 ++++++++++--------- .../data/datasource/form/EditorDetail.vue | 16 ++-- 5 files changed, 59 insertions(+), 53 deletions(-) diff --git a/core/core-frontend/src/locales/en.ts b/core/core-frontend/src/locales/en.ts index 190be559d8..bcefe1495e 100644 --- a/core/core-frontend/src/locales/en.ts +++ b/core/core-frontend/src/locales/en.ts @@ -261,7 +261,7 @@ export default { customize: 'Customize', that_day: 'That day', value: 'Value', - name_use_parameters: 'You can use ${parameter name}, use parameters', + name_use_parameters: 'You can use \$\{parameter name\}, use parameters', add_parameters: 'Add parameters', data_source_name: 'Datasource name', data_source_name_de: 'Please enter the Datasource name', diff --git a/core/core-frontend/src/locales/tw.ts b/core/core-frontend/src/locales/tw.ts index 26ff19a366..a68bf3b47d 100644 --- a/core/core-frontend/src/locales/tw.ts +++ b/core/core-frontend/src/locales/tw.ts @@ -253,7 +253,7 @@ export default { customize: '自訂', that_day: '當天', value: '值', - name_use_parameters: '可用${參數名稱},使用參數', + name_use_parameters: '可用\$\{參數名稱\},使用參數', add_parameters: '新增參數', data_source_name: '資料來源名稱', data_source_name_de: '請輸入資料來源名稱', diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index f72f8638cb..e30d7b08c7 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -254,7 +254,7 @@ export default { customize: '自定义', that_day: '当天', value: '值', - name_use_parameters: '可用${参数名},使用参数', + name_use_parameters: '可用\$\{参数名\},使用参数', add_parameters: '添加参数', data_source_name: '数据源名称', data_source_name_de: '请输入数据源名称', diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestDraw.vue b/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestDraw.vue index c6f2c62281..d314b632d6 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestDraw.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/form/ApiHttpRequestDraw.vue @@ -245,6 +245,51 @@ const saveItem = () => { } } } + } else { + if (editItem.value) { + let msg = '' + for (let i = 0; i < apiItem.fields.length; i++) { + if (apiItem.fields[i].primaryKey) { + let find = false + for (let j = 0; j < fields.length; j++) { + if (fields[j].name === apiItem.fields[i].name && fields[j].primaryKey) { + find = true + } + } + if (!find) { + msg = msg + ' ' + apiItem.fields[i].name + } + } + } + for (let i = 0; i < fields.length; i++) { + if (fields[i].primaryKey) { + let find = false + for (let j = 0; j < apiItem.fields.length; j++) { + if (fields[i].name === apiItem.fields[j].name && apiItem.fields[j].primaryKey) { + find = true + } + } + if (!find) { + msg = msg + ' ' + fields[i].name + } + } + } + if (msg !== '') { + ElMessage.error(t('datasource.primary_key_change') + msg) + return + } + } else { + for (let i = 0; i < apiItem.fields.length; i++) { + if ( + apiItem.fields[i].primaryKey && + !apiItem.fields[i].length && + apiItem.fields[i].deExtractType === 0 + ) { + ElMessage.error(t('datasource.primary_key_length') + apiItem.fields[i].name) + return + } + } + } } for (let i = 0; i < apiItem.fields.length - 1; i++) { @@ -255,50 +300,7 @@ const saveItem = () => { } } } - if (editItem.value) { - let msg = '' - for (let i = 0; i < apiItem.fields.length; i++) { - if (apiItem.fields[i].primaryKey) { - let find = false - for (let j = 0; j < fields.length; j++) { - if (fields[j].name === apiItem.fields[i].name && fields[j].primaryKey) { - find = true - } - } - if (!find) { - msg = msg + ' ' + apiItem.fields[i].name - } - } - } - for (let i = 0; i < fields.length; i++) { - if (fields[i].primaryKey) { - let find = false - for (let j = 0; j < apiItem.fields.length; j++) { - if (fields[i].name === apiItem.fields[j].name && apiItem.fields[j].primaryKey) { - find = true - } - } - if (!find) { - msg = msg + ' ' + fields[i].name - } - } - } - if (msg !== '') { - ElMessage.error(t('datasource.primary_key_change') + msg) - return - } - } else { - for (let i = 0; i < apiItem.fields.length; i++) { - if ( - apiItem.fields[i].primaryKey && - !apiItem.fields[i].length && - apiItem.fields[i].deExtractType === 0 - ) { - ElMessage.error(t('datasource.primary_key_length') + apiItem.fields[i].name) - return - } - } - } + returnAPIItem('returnItem', cloneDeep(apiItem)) edit_api_item.value = false } diff --git a/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue b/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue index 85f8b9ee55..77fc6d1adc 100644 --- a/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue +++ b/core/core-frontend/src/views/visualized/data/datasource/form/EditorDetail.vue @@ -451,14 +451,18 @@ const returnItem = apiItem => { form.value.apiConfiguration.push(apiItem) } } else { - for (let i = 0; i < form.value.paramsConfiguration.length; i++) { - if (form.value.paramsConfiguration[i].serialNumber === apiItem.serialNumber) { - find = true - form.value.paramsConfiguration[i] = apiItem - if (apiItem.serialNumber === activeParamsID.value) { - setActiveName(apiItem) + if (form.value.paramsConfiguration) { + for (let i = 0; i < form.value.paramsConfiguration.length; i++) { + if (form.value.paramsConfiguration[i].serialNumber === apiItem.serialNumber) { + find = true + form.value.paramsConfiguration[i] = apiItem + if (apiItem.serialNumber === activeParamsID.value) { + setActiveName(apiItem) + } } } + } else { + form.value.paramsConfiguration = [] } if (!find) { state.itemRef = [] From 5731e878a33153257bfe924c97429e3c9bf10d26 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 2 Dec 2024 18:53:29 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=E5=AF=BC=E5=87=BA=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E8=A1=A8=E6=94=AF=E6=8C=81=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/chart/charts/impl/table/TableInfoHandler.java | 1 - .../src/main/java/io/dataease/chart/server/ChartDataServer.java | 1 + .../io/dataease/exportCenter/manage/ExportCenterManage.java | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java index d94b6133ce..d4d3cab806 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java @@ -127,7 +127,6 @@ public class TableInfoHandler extends DefaultChartHandler { querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); datasourceRequest.setQuery(querySql); logger.debug("calcite chart sql: " + querySql); - System.out.println(querySql); List data = (List) provider.fetchResultField(datasourceRequest).get("data"); //自定义排序 data = ChartDataUtil.resultCustomSort(xAxis, data); 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 0b69c37147..47a5e10c65 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 @@ -106,6 +106,7 @@ public class ChartDataServer implements ChartDataApi { Integer[] dsTypes = null; //downloadType = dataset 为下载原始名字 这里做数据转换模拟 table-info类型图表导出 if ("dataset".equals(request.getDownloadType())) { + viewDTO.setResultMode(ChartConstants.VIEW_RESULT_MODE.ALL); viewDTO.setType("table-info"); List sourceFields = datasetFieldServer.listByDatasetGroup(viewDTO.getTableId()); List fileNames = permissionManage.filterColumnPermissions(sourceFields, new HashMap<>(), viewDTO.getTableId(), null).stream().map(DatasetTableFieldDTO::getDataeaseName).collect(Collectors.toList()); diff --git a/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java b/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java index ce7e32c1a3..892fa8c404 100644 --- a/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java +++ b/core/core-backend/src/main/java/io/dataease/exportCenter/manage/ExportCenterManage.java @@ -673,7 +673,7 @@ public class ExportCenterManage implements BaseExportApi { request.getViewInfo().getChartExtRequest().setGoPage(i); chartDataServer.findExcelData(request); details.addAll(request.getDetails()); - if ((details.size() + extractPageSize) > sheetLimit) { + if (((details.size() + extractPageSize) > sheetLimit) || i == chartViewDTO.getTotalPage()) { detailsSheet = wb.createSheet("数据" + sheetIndex); Integer[] excelTypes = request.getExcelTypes(); details.add(0, request.getHeader()); From 1283fe6ea01ce40ea47bab3dc8052064b953e580 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 2 Dec 2024 19:24:30 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=E3=80=90=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E3=80=91-API=E6=95=B0=E6=8D=AE=E6=BA=90=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=A1=A8=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0=E4=B8=AD?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=8E=A5=E5=8F=A3=E5=8F=82=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-frontend/src/locales/en.ts | 2 +- core/core-frontend/src/locales/tw.ts | 2 +- core/core-frontend/src/locales/zh-CN.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/core-frontend/src/locales/en.ts b/core/core-frontend/src/locales/en.ts index bcefe1495e..190be559d8 100644 --- a/core/core-frontend/src/locales/en.ts +++ b/core/core-frontend/src/locales/en.ts @@ -261,7 +261,7 @@ export default { customize: 'Customize', that_day: 'That day', value: 'Value', - name_use_parameters: 'You can use \$\{parameter name\}, use parameters', + name_use_parameters: 'You can use ${parameter name}, use parameters', add_parameters: 'Add parameters', data_source_name: 'Datasource name', data_source_name_de: 'Please enter the Datasource name', diff --git a/core/core-frontend/src/locales/tw.ts b/core/core-frontend/src/locales/tw.ts index a68bf3b47d..26ff19a366 100644 --- a/core/core-frontend/src/locales/tw.ts +++ b/core/core-frontend/src/locales/tw.ts @@ -253,7 +253,7 @@ export default { customize: '自訂', that_day: '當天', value: '值', - name_use_parameters: '可用\$\{參數名稱\},使用參數', + name_use_parameters: '可用${參數名稱},使用參數', add_parameters: '新增參數', data_source_name: '資料來源名稱', data_source_name_de: '請輸入資料來源名稱', diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index e30d7b08c7..f72f8638cb 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -254,7 +254,7 @@ export default { customize: '自定义', that_day: '当天', value: '值', - name_use_parameters: '可用\$\{参数名\},使用参数', + name_use_parameters: '可用${参数名},使用参数', add_parameters: '添加参数', data_source_name: '数据源名称', data_source_name_de: '请输入数据源名称',