From a7c29ad3bcdeed935b201d9635e0f2e53cb724f5 Mon Sep 17 00:00:00 2001 From: junjun Date: Wed, 12 Mar 2025 14:37:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E9=9B=86):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=95=B0=E6=8D=AE=E9=9B=86=E5=BC=82=E5=B8=B8=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=B8=A4=E6=AC=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/manage/DatasetDataManage.java | 92 ++++++++++--------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java index ed30489df4..437984d25e 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java @@ -12,6 +12,7 @@ import io.dataease.auth.bo.TokenUserBO; import io.dataease.chart.utils.ChartDataBuild; import io.dataease.commons.utils.SqlparserUtils; import io.dataease.constant.AuthEnum; +import io.dataease.constant.SQLConstants; import io.dataease.dataset.constant.DatasetTableType; import io.dataease.dataset.utils.DatasetUtils; import io.dataease.dataset.utils.FieldUtils; @@ -22,7 +23,6 @@ import io.dataease.datasource.manage.DataSourceManage; import io.dataease.datasource.manage.EngineManage; import io.dataease.datasource.utils.DatasourceUtils; import io.dataease.engine.constant.ExtFieldConstant; -import io.dataease.constant.SQLConstants; import io.dataease.engine.sql.SQLProvider; import io.dataease.engine.trans.*; import io.dataease.engine.utils.SQLUtils; @@ -285,54 +285,58 @@ public class DatasetDataManage { return 0L; } - public Long getDatasetCountWithWhere(Long datasetGroupId) throws Exception { - DatasetGroupInfoDTO datasetGroupInfoDTO = datasetGroupManage.getForCount(datasetGroupId); - Map sqlMap = datasetSQLManage.getUnionSQLForEdit(datasetGroupInfoDTO, null); - String sql = (String) sqlMap.get("sql"); + public Long getDatasetCountWithWhere(Long datasetGroupId) { + try { + DatasetGroupInfoDTO datasetGroupInfoDTO = datasetGroupManage.getForCount(datasetGroupId); + Map sqlMap = datasetSQLManage.getUnionSQLForEdit(datasetGroupInfoDTO, null); + String sql = (String) sqlMap.get("sql"); - // 获取allFields - List fields = datasetGroupInfoDTO.getAllFields(); - if (ObjectUtils.isEmpty(fields)) { - DEException.throwException(Translator.get("i18n_no_fields")); - } - - buildFieldName(sqlMap, fields); - - Map dsMap = (Map) sqlMap.get("dsMap"); - DatasourceUtils.checkDsStatus(dsMap); - List dsList = new ArrayList<>(); - for (Map.Entry next : dsMap.entrySet()) { - dsList.add(next.getValue().getType()); - } - boolean crossDs = Utils.isCrossDs(dsMap); - if (!crossDs) { - if (notFullDs.contains(dsMap.entrySet().iterator().next().getValue().getType()) && (boolean) sqlMap.get("isFullJoin")) { - DEException.throwException(Translator.get("i18n_not_full")); + // 获取allFields + List fields = datasetGroupInfoDTO.getAllFields(); + if (ObjectUtils.isEmpty(fields)) { + DEException.throwException(Translator.get("i18n_no_fields")); } - sql = Utils.replaceSchemaAlias(sql, dsMap); - } - List rowPermissionsTree = new ArrayList<>(); - TokenUserBO user = AuthUtils.getUser(); - if (user != null) { - rowPermissionsTree = permissionManage.getRowPermissionsTree(datasetGroupInfoDTO.getId(), user.getUserId()); - } + buildFieldName(sqlMap, fields); - Provider provider; - if (crossDs) { - provider = ProviderFactory.getDefaultProvider(); - } else { - provider = ProviderFactory.getProvider(dsList.getFirst()); - } + Map dsMap = (Map) sqlMap.get("dsMap"); + DatasourceUtils.checkDsStatus(dsMap); + List dsList = new ArrayList<>(); + for (Map.Entry next : dsMap.entrySet()) { + dsList.add(next.getValue().getType()); + } + boolean crossDs = Utils.isCrossDs(dsMap); + if (!crossDs) { + if (notFullDs.contains(dsMap.entrySet().iterator().next().getValue().getType()) && (boolean) sqlMap.get("isFullJoin")) { + DEException.throwException(Translator.get("i18n_not_full")); + } + sql = Utils.replaceSchemaAlias(sql, dsMap); + } - // build query sql - SQLMeta sqlMeta = new SQLMeta(); - Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs); - Field2SQLObj.field2sqlObj(sqlMeta, fields, fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); - WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); - Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); - String replaceSql = provider.rebuildSQL(SQLProvider.createQuerySQL(sqlMeta, false, false, false), sqlMeta, crossDs, dsMap); - return getDatasetTotal(datasetGroupInfoDTO, replaceSql, null); + List rowPermissionsTree = new ArrayList<>(); + TokenUserBO user = AuthUtils.getUser(); + if (user != null) { + rowPermissionsTree = permissionManage.getRowPermissionsTree(datasetGroupInfoDTO.getId(), user.getUserId()); + } + + Provider provider; + if (crossDs) { + provider = ProviderFactory.getDefaultProvider(); + } else { + provider = ProviderFactory.getProvider(dsList.getFirst()); + } + + // build query sql + SQLMeta sqlMeta = new SQLMeta(); + Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs); + Field2SQLObj.field2sqlObj(sqlMeta, fields, fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); + WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); + Order2SQLObj.getOrders(sqlMeta, datasetGroupInfoDTO.getSortFields(), fields, crossDs, dsMap, Utils.getParams(fields), null, pluginManage); + String replaceSql = provider.rebuildSQL(SQLProvider.createQuerySQL(sqlMeta, false, false, false), sqlMeta, crossDs, dsMap); + return getDatasetTotal(datasetGroupInfoDTO, replaceSql, null); + } catch (Exception e) { + return null; + } } public Long getDatasetTotal(DatasetGroupInfoDTO datasetGroupInfoDTO, String s, ChartExtRequest request) throws Exception {