From 8f6ec41e6bcc595483d45e87e7acf3fffa5c4000 Mon Sep 17 00:00:00 2001 From: junjun Date: Sun, 4 Feb 2024 14:07:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9A=E6=97=B6=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=92=8CExcel=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 --- .../engine/doris/DorisQueryProvider.java | 17 ++++++++++++----- .../service/chart/ChartViewService.java | 18 ++++++++++++++++-- .../chart/components/ChartComponentS2.vue | 4 ++-- .../chart/components/table/TableNormal.vue | 4 ++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index d845cf1e8b..c3afea3508 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -413,13 +413,13 @@ public class DorisQueryProvider extends QueryProvider { public String getSQLWithPage(boolean isTable, String table, List xAxis, FilterTreeObj fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : ""); if (isTable) { - return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true) + limit; } else { - return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, true) + limit; } } - private String originalTableInfo(String table, List xAxis, FilterTreeObj fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { + private String originalTableInfo(String table, List xAxis, FilterTreeObj fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, boolean needOrder) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -478,6 +478,13 @@ public class DorisQueryProvider extends QueryProvider { // 外层再次套sql List orders = new ArrayList<>(); orders.addAll(xOrders); + if (needOrder && CollectionUtils.isEmpty(xOrders)) { + orders.add(SQLObj.builder() + .orderField(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderAlias(String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, 0)) + .orderDirection("ASC") + .build()); + } STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); @@ -503,7 +510,7 @@ public class DorisQueryProvider extends QueryProvider { @Override public String getSQLTableInfo(String table, List xAxis, FilterTreeObj fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); + return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false), view); } @Override @@ -1371,7 +1378,7 @@ public class DorisQueryProvider extends QueryProvider { if (field.getType().equalsIgnoreCase("YEAR") || StringUtils.equalsIgnoreCase(field.getDateFormat(), "%Y")) { date = String.format(MySQLConstants.DATE_FORMAT, "CONCAT(" + date + ",'-01-01')", "%Y-01-01"); whereName = String.format(MySQLConstants.DATE_FORMAT, date, format); - }else { + } else { whereName = originName; } diff --git a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index e55fde67d7..fa24a4a823 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -1255,7 +1255,8 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { - datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); + querySql = qp.getSQLWithPage(true, tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); + totalPageSql = qp.getResultCount(true, tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); } else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) { datasourceRequest.setQuery(qp.getSQLRangeBar(tableName, xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view)); @@ -1271,6 +1272,15 @@ public class ChartViewService { view.setResultMode(resultMode); } } + // 分页 + if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { + datasourceRequest.setQuery(totalPageSql); + datasourceRequest.setTotalPageFlag(true); + java.util.List tmpData = datasourceProvider.getData(datasourceRequest); + totalItems = CollectionUtils.isEmpty(tmpData) ? 0 : Long.valueOf(tmpData.get(0)[0]); + totalPage = (totalItems / pageInfo.getPageSize()) + (totalItems % pageInfo.getPageSize() > 0 ? 1 : 0); + } + if (CollectionUtils.isNotEmpty(assistFields)) { datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields, ds)); logger.info(datasourceAssistRequest.getQuery()); @@ -1282,7 +1292,11 @@ public class ChartViewService { || CollectionUtils.isNotEmpty(chartExtRequest.getOuterParamsFilters()) || CollectionUtils.isNotEmpty(chartExtRequest.getDrill()) || CollectionUtils.isNotEmpty(rowPermissionsTree) - || fields.size() != columnPermissionFields.size()) { + || fields.size() != columnPermissionFields.size() + || StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { + if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { + datasourceRequest.setQuery(querySql); + } data = datasourceProvider.getData(datasourceRequest); } else { try { diff --git a/core/frontend/src/views/chart/components/ChartComponentS2.vue b/core/frontend/src/views/chart/components/ChartComponentS2.vue index 7470b841ec..19d55c8f45 100644 --- a/core/frontend/src/views/chart/components/ChartComponentS2.vue +++ b/core/frontend/src/views/chart/components/ChartComponentS2.vue @@ -68,7 +68,7 @@ > {{ $t('chart.total') }} {{ - (chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) + ((chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType) || chart.datasetMode === 1)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) }} {{ $t('chart.items') }} @@ -252,7 +252,7 @@ export default { } this.currentPage.pageSize = parseInt(attr.size.tablePageSize ? attr.size.tablePageSize : 20) data = JSON.parse(JSON.stringify(this.chart.data.tableRow)) - if (this.chart.datasetMode === 0 && !NOT_SUPPORT_PAGE_DATASET.includes(this.chart.datasourceType)) { + if ((this.chart.datasetMode === 0 && !NOT_SUPPORT_PAGE_DATASET.includes(this.chart.datasourceType) || this.chart.datasetMode === 1)) { if (this.chart.type === 'table-info' && (attr.size.tablePageMode === 'page' || !attr.size.tablePageMode) && this.chart.totalItems > this.currentPage.pageSize) { this.currentPage.show = this.chart.totalItems this.showPage = true diff --git a/core/frontend/src/views/chart/components/table/TableNormal.vue b/core/frontend/src/views/chart/components/table/TableNormal.vue index e5948321f5..a73cf113c5 100644 --- a/core/frontend/src/views/chart/components/table/TableNormal.vue +++ b/core/frontend/src/views/chart/components/table/TableNormal.vue @@ -80,7 +80,7 @@ > {{ $t('chart.total') }} {{ - (chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) + ((chart.datasetMode === 0 && !not_support_page_dataset.includes(chart.datasourceType)) || chart.datasetMode === 1) ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) }} {{ $t('chart.items') }} @@ -319,7 +319,7 @@ export default { } data = JSON.parse(JSON.stringify(this.chart.data.tableRow)) - if (this.chart.datasetMode === 0 && !NOT_SUPPORT_PAGE_DATASET.includes(this.chart.datasourceType)) { + if ((this.chart.datasetMode === 0 && !NOT_SUPPORT_PAGE_DATASET.includes(this.chart.datasourceType) || this.chart.datasetMode === 1)) { if (this.chart.type === 'table-info' && (attr.size.tablePageMode === 'page' || !attr.size.tablePageMode) && this.chart.totalItems > this.currentPage.pageSize) { this.currentPage.show = this.chart.totalItems this.showPage = true