From 7b638824036d02f4ef41d95b58fe0f7d094b78ff Mon Sep 17 00:00:00 2001 From: junjun Date: Fri, 21 Mar 2025 17:37:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=95=B0=E6=8D=AE=E9=9B=86):=20?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=AD=97=E6=AE=B5=E4=B8=AD=E7=9A=84=20SQL=20?= =?UTF-8?q?=E7=89=87=E6=AE=B5=E5=9C=A8=E4=BC=A0=E8=BE=93=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD=E8=BF=9B=E8=A1=8C=E5=8A=A0=E5=AF=86=E5=A4=84=E7=90=86?= =?UTF-8?q?=20#15446?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/manage/DatasetDataManage.java | 19 ++++-- .../dataset/manage/DatasetGroupManage.java | 13 +++- .../dataset/server/DatasetDataServer.java | 8 +-- .../dataset/server/DatasetTreeServer.java | 6 +- .../dataease/dataset/utils/DatasetUtils.java | 68 +++++++++++++++++-- .../manage/ExportCenterManage.java | 2 +- .../server/DataVisualizationServer.java | 6 +- 7 files changed, 98 insertions(+), 24 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 437984d25e..8f67149e97 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 @@ -196,7 +196,11 @@ public class DatasetDataManage { }).collect(Collectors.toList()); } - public Map previewDataWithLimit(DatasetGroupInfoDTO datasetGroupInfoDTO, Integer start, Integer count, boolean checkPermission) throws Exception { + public Map previewDataWithLimit(DatasetGroupInfoDTO datasetGroupInfoDTO, Integer start, Integer count, boolean checkPermission, boolean encode) throws Exception { + if (encode) { + DatasetUtils.dsDecode(datasetGroupInfoDTO); + } + Map sqlMap = datasetSQLManage.getUnionSQLForEdit(datasetGroupInfoDTO, null); String sql = (String) sqlMap.get("sql"); @@ -264,12 +268,15 @@ public class DatasetDataManage { Map map = new LinkedHashMap<>(); // 重新构造data - Map previewData = buildPreviewData(data, fields, desensitizationList); + Map previewData = buildPreviewData(data, fields, desensitizationList, encode); map.put("data", previewData); if (ObjectUtils.isEmpty(datasetGroupInfoDTO.getId())) { map.put("allFields", fields); } else { List fieldList = datasetTableFieldManage.selectByDatasetGroupId(datasetGroupInfoDTO.getId()); + if (encode) { + DatasetUtils.listEncode(fieldList); + } map.put("allFields", fieldList); } map.put("sql", Base64.getEncoder().encodeToString(querySQL.getBytes())); @@ -467,14 +474,14 @@ public class DatasetDataManage { // 重新构造data List fList = (List) data.get("fields"); List fields = transFields(fList, false); - Map previewData = buildPreviewData(data, fields, new HashMap<>()); + Map previewData = buildPreviewData(data, fields, new HashMap<>(), false); Map map = new LinkedHashMap<>(); map.put("data", previewData); map.put("sql", Base64.getEncoder().encodeToString(sql.getBytes())); return map; } - public Map buildPreviewData(Map data, List fields, Map desensitizationList) { + public Map buildPreviewData(Map data, List fields, Map desensitizationList, boolean isEncode) { Map map = new LinkedHashMap<>(); List dataList = (List) data.get("data"); List> dataObjectList = new ArrayList<>(); @@ -502,6 +509,10 @@ public class DatasetDataManage { } } + if (isEncode) { + DatasetUtils.listEncode(fields); + } + map.put("fields", fields); map.put("data", dataObjectList); return map; diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java index a22b9d01c4..d424cc9493 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java @@ -14,6 +14,7 @@ import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableMapper; import io.dataease.dataset.dao.ext.mapper.CoreDataSetExtMapper; import io.dataease.dataset.dao.ext.po.DataSetNodePO; import io.dataease.dataset.dto.DataSetNodeBO; +import io.dataease.dataset.utils.DatasetUtils; import io.dataease.dataset.utils.FieldUtils; import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; @@ -86,9 +87,12 @@ public class DatasetGroupManage { @Transactional - public DatasetGroupInfoDTO save(DatasetGroupInfoDTO datasetGroupInfoDTO, boolean rename) throws Exception { + public DatasetGroupInfoDTO save(DatasetGroupInfoDTO datasetGroupInfoDTO, boolean rename, boolean encode) throws Exception { lock.lock(); try { + if (encode) { + DatasetUtils.dsDecode(datasetGroupInfoDTO); + } boolean isCreate; // 用于重命名获取pid if (ObjectUtils.isEmpty(datasetGroupInfoDTO.getPid()) && ObjectUtils.isNotEmpty(datasetGroupInfoDTO.getId())) { @@ -138,6 +142,9 @@ public class DatasetGroupManage { datasetTableManage.deleteByDatasetGroupUpdate(datasetGroupInfoDTO.getId(), tableIds); datasetTableFieldManage.deleteByDatasetGroupUpdate(datasetGroupInfoDTO.getId(), fieldIds); } + if (encode) { + DatasetUtils.dsEncode(datasetGroupInfoDTO); + } return datasetGroupInfoDTO; } catch (Exception e) { DEException.throwException(e.getMessage()); @@ -339,7 +346,7 @@ public class DatasetGroupManage { if (ObjectUtils.isEmpty(datasetGroupInfoDTO.getUnion())) { return; } - datasetDataManage.previewDataWithLimit(datasetGroupInfoDTO, 0, 1, false); + datasetDataManage.previewDataWithLimit(datasetGroupInfoDTO, 0, 1, false, false); // table和field均由前端生成id(如果没有id) Long datasetGroupId = datasetGroupInfoDTO.getId(); List allFields = datasetGroupInfoDTO.getAllFields(); @@ -480,7 +487,7 @@ public class DatasetGroupManage { if ("preview".equalsIgnoreCase(type)) { // 请求数据 - Map map = datasetDataManage.previewDataWithLimit(dto, 0, 100, true); + Map map = datasetDataManage.previewDataWithLimit(dto, 0, 100, true, false); // 获取data,sql Map data = (Map) map.get("data"); String sql = (String) map.get("sql"); diff --git a/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetDataServer.java b/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetDataServer.java index 9e73d906e6..0cbd220fc9 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetDataServer.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetDataServer.java @@ -1,12 +1,8 @@ package io.dataease.dataset.server; import io.dataease.api.dataset.DatasetDataApi; -import io.dataease.api.dataset.dto.BaseTreeNodeDTO; -import io.dataease.api.dataset.dto.EnumValueRequest; -import io.dataease.api.dataset.dto.MultFieldValuesRequest; -import io.dataease.api.dataset.dto.PreviewSqlDTO; +import io.dataease.api.dataset.dto.*; import io.dataease.api.dataset.union.DatasetGroupInfoDTO; -import io.dataease.api.dataset.dto.EnumObj; import io.dataease.dataset.manage.DatasetDataManage; import io.dataease.extensions.datasource.dto.DatasetTableDTO; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; @@ -29,7 +25,7 @@ public class DatasetDataServer implements DatasetDataApi { @Override public Map previewData(DatasetGroupInfoDTO datasetGroupInfoDTO) throws Exception { - return datasetDataManage.previewDataWithLimit(datasetGroupInfoDTO, 0, 100, false); + return datasetDataManage.previewDataWithLimit(datasetGroupInfoDTO, 0, 100, false, true); } @Override diff --git a/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java b/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java index d886cb68da..cf10ac64f6 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/server/DatasetTreeServer.java @@ -33,19 +33,19 @@ public class DatasetTreeServer implements DatasetTreeApi { @DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET) @Override public DatasetGroupInfoDTO save(DatasetGroupInfoDTO datasetNodeDTO) throws Exception { - return datasetGroupManage.save(datasetNodeDTO, false); + return datasetGroupManage.save(datasetNodeDTO, false, true); } @DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET) @Override public DatasetNodeDTO rename(DatasetGroupInfoDTO dto) throws Exception { - return datasetGroupManage.save(dto, true); + return datasetGroupManage.save(dto, true, false); } @DeLog(id = "#p0.id", pid = "#p0.pid", ot = LogOT.CREATE, st = LogST.DATASET) @Override public DatasetNodeDTO create(DatasetGroupInfoDTO dto) throws Exception { - return datasetGroupManage.save(dto, false); + return datasetGroupManage.save(dto, false, true); } @DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET) diff --git a/core/core-backend/src/main/java/io/dataease/dataset/utils/DatasetUtils.java b/core/core-backend/src/main/java/io/dataease/dataset/utils/DatasetUtils.java index d11571a87e..09a5f84ad1 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/utils/DatasetUtils.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/utils/DatasetUtils.java @@ -1,15 +1,15 @@ package io.dataease.dataset.utils; import io.dataease.api.dataset.dto.BaseTreeNodeDTO; +import io.dataease.api.dataset.union.DatasetGroupInfoDTO; +import io.dataease.engine.constant.ExtFieldConstant; +import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.utils.TreeUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.util.Assert; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -53,4 +53,64 @@ public class DatasetUtils { }); return result; } + + public static String getEncode(String str) { + return Base64.getEncoder().encodeToString(str.getBytes()); + } + + public static String getDecode(String str) { + return new String(Base64.getDecoder().decode(str)); + } + + /** + * 计算字段表达式base64加密 + * + * @param obj + */ + public static void dsEncode(DatasetGroupInfoDTO obj) { + for (DatasetTableFieldDTO dto : obj.getAllFields()) { + if (dto.getExtField().equals(ExtFieldConstant.EXT_CALC)) { + dto.setOriginName(getEncode(dto.getOriginName())); + } + } + } + + /** + * 计算字段表达式base64加密 + * + * @param obj + */ + public static void dsDecode(DatasetGroupInfoDTO obj) { + for (DatasetTableFieldDTO dto : obj.getAllFields()) { + if (dto.getExtField().equals(ExtFieldConstant.EXT_CALC)) { + dto.setOriginName(getDecode(dto.getOriginName())); + } + } + } + + /** + * 计算字段表达式base64加密 + * + * @param fields + */ + public static void listEncode(List fields) { + for (DatasetTableFieldDTO dto : fields) { + if (dto.getExtField().equals(ExtFieldConstant.EXT_CALC)) { + dto.setOriginName(getEncode(dto.getOriginName())); + } + } + } + + /** + * 计算字段表达式base64解密 + * + * @param fields + */ + public static void listDecode(List fields) { + for (DatasetTableFieldDTO dto : fields) { + if (dto.getExtField().equals(ExtFieldConstant.EXT_CALC)) { + dto.setOriginName(getDecode(dto.getOriginName())); + } + } + } } 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 e724db71da..1017b3f395 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 @@ -544,7 +544,7 @@ public class ExportCenterManage implements BaseExportApi { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setQuery(querySQL); datasourceRequest.setDsList(dsMap); - Map previewData = datasetDataManage.buildPreviewData(provider.fetchResultField(datasourceRequest), allFields, desensitizationList); + Map previewData = datasetDataManage.buildPreviewData(provider.fetchResultField(datasourceRequest), allFields, desensitizationList, false); List> data = (List>) previewData.get("data"); if (p.equals(0L)) { detailsSheet = wb.createSheet("数据" + s); 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 dc7be91689..50f995b91a 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 @@ -261,7 +261,7 @@ public class DataVisualizationServer implements DataVisualizationApi { datasetFolderNewRequest.setName(datasetFolderName); datasetFolderNewRequest.setNodeType("folder"); datasetFolderNewRequest.setPid(datasetFolderPid); - DatasetGroupInfoDTO datasetFolderNew = datasetGroupManage.save(datasetFolderNewRequest, false); + DatasetGroupInfoDTO datasetFolderNew = datasetGroupManage.save(datasetFolderNewRequest, false, false); Long datasetFolderNewId = datasetFolderNew.getId(); //新建数据集 appData.getDatasetGroupsInfo().forEach(appDatasetGroup -> { @@ -815,8 +815,8 @@ public class DataVisualizationServer implements DataVisualizationApi { if (CollectionUtils.isEmpty(datasourceVOInfo)) { DEException.throwException("当前不存在数据源无法导出"); - } else if(datasourceVOInfo.stream() - .anyMatch(datasource -> DatasourceConfiguration.DatasourceType.API.name().equals(datasource.getType()))){ + } else if (datasourceVOInfo.stream() + .anyMatch(datasource -> DatasourceConfiguration.DatasourceType.API.name().equals(datasource.getType()))) { DEException.throwException(Translator.get("i18n_app_error_no_api")); }