From bd82b1da94109940b244fec0e799139e54ded9b3 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 15 Sep 2025 18:03:29 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AF=B9=E6=8E=A5=20SQLBot=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=85=B3=E8=81=94=E6=95=B0=E6=8D=AE=E9=9B=86=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E5=BC=80=E5=90=AF=E9=97=AE=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mapper/DataSetAssistantMapper.java | 6 ++--- .../dataset/manage/DatasetSQLBotManage.java | 27 +++++++++++++++++-- .../dataease/engine/trans/Field2SQLObj.java | 5 ++++ .../api/dataset/vo/SQLBotAssistanTable.java | 4 ++- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/dataset/dao/ext/mapper/DataSetAssistantMapper.java b/core/core-backend/src/main/java/io/dataease/dataset/dao/ext/mapper/DataSetAssistantMapper.java index 77b375581e..910e7340a7 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/dao/ext/mapper/DataSetAssistantMapper.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/dao/ext/mapper/DataSetAssistantMapper.java @@ -55,7 +55,7 @@ public interface DataSetAssistantMapper { from `core_dataset_group` cdg left join `core_dataset_table` cdt on cdg.id = cdt.dataset_group_id - left join `core_dataset_table_field` cdtf on cdtf.dataset_group_id = cdg.id + left join `core_dataset_table_field` cdtf on cdtf.dataset_group_id = cdg.id and (cdtf.dataset_table_id is NULL or cdtf.dataset_table_id = cdt.id) inner join `core_datasource` cd on cdt.datasource_id = cd.id where cdg.is_cross != 1 and (cd.STATUS IS NULL OR cd.STATUS != 'Error') ${ew.customSqlSegment} @@ -119,7 +119,7 @@ public interface DataSetAssistantMapper { INNER JOIN `core_datasource` cd ON cdt.datasource_id = cd.id and (cd.STATUS IS NULL OR cd.STATUS != 'Error') INNER JOIN `core_dataset_group` cdg ON cdg.id = cdt.dataset_group_id AND cdg.is_cross != 1 - INNER JOIN `core_dataset_table_field` cdtf ON cdtf.dataset_group_id = cdg.id + INNER JOIN `core_dataset_table_field` cdtf ON cdtf.dataset_group_id = cdg.id and (cdtf.dataset_table_id is NULL or cdtf.dataset_table_id = cdt.id) where not exists( select 1 from user_ds_permissions ds_p where cd.id = ds_p.resource_id ) and not exists( select 1 from user_dg_permissions dg_p where cdg.id = dg_p.resource_id ) ${ew.customSqlSegment} @@ -212,7 +212,7 @@ public interface DataSetAssistantMapper { AND (cd.STATUS IS NULL OR cd.STATUS != 'Error') INNER JOIN `core_dataset_group` cdg ON cdg.id = cdt.dataset_group_id AND cdg.is_cross != 1 - INNER JOIN `core_dataset_table_field` cdtf ON cdtf.dataset_group_id = cdg.id + INNER JOIN `core_dataset_table_field` cdtf ON cdtf.dataset_group_id = cdg.id and (cdtf.dataset_table_id is NULL or cdtf.dataset_table_id = cdt.id) INNER JOIN user_ds_permissions ds_p ON cd.id = ds_p.resource_id INNER JOIN user_dg_permissions dg_p ON cdg.id = dg_p.resource_id ${ew.customSqlSegment} diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLBotManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLBotManage.java index 29b0f4155e..2396e2cdf3 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLBotManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLBotManage.java @@ -34,6 +34,7 @@ import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; import io.dataease.extensions.datasource.dto.FieldGroupDTO; import io.dataease.extensions.datasource.factory.ProviderFactory; import io.dataease.extensions.datasource.model.SQLMeta; +import io.dataease.extensions.datasource.model.SQLObj; import io.dataease.extensions.datasource.provider.Provider; import io.dataease.extensions.datasource.vo.Configuration; import io.dataease.extensions.datasource.vo.DatasourceConfiguration; @@ -105,8 +106,10 @@ public class DatasetSQLBotManage { } return AesUtils.aesEncrypt(text, aesKey, iv); } + TypeReference> listTypeReference = new TypeReference>() { }; + private Map> getColPermission(Long uid, List roleIds) { ColumnPermissionsApi columnPermissionsApi = CommonBeanFactory.getBean(ColumnPermissionsApi.class); Objects.requireNonNull(columnPermissionsApi); @@ -123,10 +126,10 @@ public class DatasetSQLBotManage { dataSetColumnPermissionsDTO.setAuthTargetType("role"); List roleDataSetColumnPermissionsDTOS = columnPermissionsApi.list(dataSetColumnPermissionsDTO); if (CollectionUtils.isNotEmpty(roleDataSetColumnPermissionsDTOS)) { - for (DataSetColumnPermissionsDTO dto :roleDataSetColumnPermissionsDTOS) { + for (DataSetColumnPermissionsDTO dto : roleDataSetColumnPermissionsDTOS) { List userIdList = JsonUtil.parseList(dto.getWhiteListUser(), listTypeReference); if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(uid)) { - // roleColumnPermissionsDTOS.add(columnPermissionsDTO); + // roleColumnPermissionsDTOS.add(columnPermissionsDTO); dataSetColumnPermissionsDTOS.add(dto); } } @@ -218,6 +221,16 @@ public class DatasetSQLBotManage { tableFlagMap.put(tableId, table); vo.getTables().add(table); } + Object cdt_id_obj = null; + Long cdt_id = null; + + if (ObjectUtils.isNotEmpty(cdt_id_obj = row.get("cdt_id")) && !table.getTableIds().contains(cdt_id = Long.parseLong(cdt_id_obj.toString()))) { + table.getTableIds().add(cdt_id); + if (table.getTableIds().size() > 1) { + table.setNeedTransform(true); + } + } + // build field String fieldId = row.get("cdtf_id").toString(); SQLBotAssistantField field = fieldFlagMap.get(fieldId); @@ -397,6 +410,13 @@ public class DatasetSQLBotManage { String querySQL; querySQL = SQLProvider.createQuerySQL(sqlMeta, false, needOrder, false); querySQL = provider.rebuildSQL(querySQL, sqlMeta, false, dsMap, true); + for (int i = 0; i < sqlMeta.getXFields().size(); i++) { + SQLObj fieldObj = sqlMeta.getXFields().get(i); + DatasetTableFieldDTO fieldDTO = fields.get(i); + if (fieldObj.getFieldAlias().endsWith("_" + String.valueOf(i) + '`')) { + table.getFields().get(i).setName(fieldObj.getFieldAlias().substring(1, fieldObj.getFieldAlias().length() - 1)); + } + } table.setSql(querySQL); } @@ -546,6 +566,9 @@ public class DatasetSQLBotManage { Map tableRowData = buildRowData(row, 1); tableRowData.put("datasource_id", Long.parseLong(row.get("cd_id").toString())); table.setRowData(tableRowData); + Set tableIds = new HashSet<>(); + tableIds.add(Long.parseLong(row.get("cdt_id").toString())); + table.setTableIds(tableIds); return table; } diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java index 8f76f7110f..579b37dd63 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java @@ -40,6 +40,7 @@ public class Field2SQLObj { } if (ObjectUtils.isNotEmpty(fields)) { + Set aliasSet = new HashSet<>(); for (int i = 0; i < fields.size(); i++) { DatasetTableFieldDTO x = fields.get(i); String originField; @@ -86,6 +87,10 @@ public class Field2SQLObj { if (ObjectUtils.isNotEmpty(x.getExtField()) && !x.getExtField().equals(ExtFieldConstant.EXT_NORMAL) && StringUtils.isNotBlank(x.getName())) { fieldAlias = x.getName(); } + if (aliasSet.contains(fieldAlias)) { + fieldAlias += ('_' + String.valueOf(i)); + } + aliasSet.add(fieldAlias); fieldAlias = String.format(FIELD_DOT_FIX, fieldAlias); } // 处理横轴字段 diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/SQLBotAssistanTable.java b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/SQLBotAssistanTable.java index 29256457ea..7b95b3b4bc 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/SQLBotAssistanTable.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/SQLBotAssistanTable.java @@ -7,6 +7,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; @Data public class SQLBotAssistanTable implements Serializable { @@ -24,5 +25,6 @@ public class SQLBotAssistanTable implements Serializable { private boolean needPermission; @JsonIgnore private Map rowData; - + @JsonIgnore + private Set tableIds; }