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 e82b8aa48e..7162ea76d9 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 @@ -1,13 +1,11 @@ package io.dataease.dataset.manage; +import io.dataease.api.chart.dto.ChartExtFilterDTO; import io.dataease.api.chart.dto.ChartViewDTO; import io.dataease.api.chart.dto.ColumnPermissionItem; import io.dataease.api.chart.dto.DeSortField; import io.dataease.api.chart.request.ChartExtRequest; -import io.dataease.api.dataset.dto.DatasetTableDTO; -import io.dataease.api.dataset.dto.EnumValueRequest; -import io.dataease.api.dataset.dto.PreviewSqlDTO; -import io.dataease.api.dataset.dto.SqlLogDTO; +import io.dataease.api.dataset.dto.*; import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.api.dataset.union.DatasetTableInfoDTO; import io.dataease.api.dataset.union.model.SQLMeta; @@ -33,10 +31,7 @@ import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.engine.constant.SqlPlaceholderConstants; import io.dataease.engine.sql.SQLProvider; -import io.dataease.engine.trans.Field2SQLObj; -import io.dataease.engine.trans.Order2SQLObj; -import io.dataease.engine.trans.Table2SQLObj; -import io.dataease.engine.trans.WhereTree2Str; +import io.dataease.engine.trans.*; import io.dataease.engine.utils.SQLUtils; import io.dataease.engine.utils.Utils; import io.dataease.exception.DEException; @@ -55,6 +50,8 @@ import org.springframework.util.CollectionUtils; import java.util.*; import java.util.stream.Collectors; +import static io.dataease.chart.manage.ChartDataManage.START_END_SEPARATOR; + /** * @Author Junjun */ @@ -583,6 +580,87 @@ public class DatasetDataManage { rowPermissionsTree = permissionManage.getRowPermissionsTree(datasetGroupInfoDTO.getId(), user.getUserId()); } + //组件过滤条件 + List extFilterList = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(request.getFilter())) { + for (ChartExtFilterDTO filterDTO : request.getFilter()) { + // 解析多个fieldId,fieldId是一个逗号分隔的字符串 + String fieldId = filterDTO.getFieldId(); + if (filterDTO.getIsTree() == null) { + filterDTO.setIsTree(false); + } + + boolean hasParameters = false; + List sqlVariables = datasetGroupManage.getSqlParams(Arrays.asList(datasetGroupInfoDTO.getId())); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(sqlVariables)) { + for (SqlVariableDetails parameter : Optional.ofNullable(filterDTO.getParameters()).orElse(new ArrayList<>())) { + String parameterId = StringUtils.endsWith(parameter.getId(), START_END_SEPARATOR) ? parameter.getId().split(START_END_SEPARATOR)[0] : parameter.getId(); + if (sqlVariables.stream().map(SqlVariableDetails::getId).collect(Collectors.toList()).contains(parameterId)) { + hasParameters = true; + } + } + } + + if (hasParameters) { + continue; + } + + if (StringUtils.isNotEmpty(fieldId)) { + List fieldIds = Arrays.stream(fieldId.split(",")).map(Long::valueOf).collect(Collectors.toList()); + + if (filterDTO.getIsTree()) { + ChartExtFilterDTO filterRequest = new ChartExtFilterDTO(); + BeanUtils.copyBean(filterRequest, filterDTO); + filterRequest.setDatasetTableFieldList(new ArrayList<>()); + for (Long fId : fieldIds) { + DatasetTableFieldDTO datasetTableField = datasetTableFieldManage.selectById(fId); + if (datasetTableField == null) { + continue; + } + if (Objects.equals(datasetTableField.getDatasetGroupId(), datasetGroupInfoDTO.getId())) { + filterRequest.getDatasetTableFieldList().add(datasetTableField); + } + } + if (ObjectUtils.isNotEmpty(filterRequest.getDatasetTableFieldList())) { + extFilterList.add(filterRequest); + } + } else { + for (Long fId : fieldIds) { + ChartExtFilterDTO filterRequest = new ChartExtFilterDTO(); + BeanUtils.copyBean(filterRequest, filterDTO); + filterRequest.setFieldId(fId + ""); + + DatasetTableFieldDTO datasetTableField = datasetTableFieldManage.selectById(fId); + if (datasetTableField == null) { + continue; + } + filterRequest.setDatasetTableField(datasetTableField); + if (Objects.equals(datasetTableField.getDatasetGroupId(), datasetGroupInfoDTO.getId())) { + extFilterList.add(filterRequest); + } + } + } + } + } + } + + // 搜索备选项 + if (StringUtils.isNotEmpty(request.getSearchText())) { + ChartExtFilterDTO dto = new ChartExtFilterDTO(); + DatasetTableFieldDTO field = null; + if (ids.size() == 1) { + field = datasetTableFieldManage.selectById(ids.get(0)); + } else { + field = datasetTableFieldManage.selectById(ids.get(1)); + } + dto.setDatasetTableField(field); + dto.setFieldId(field.getId() + ""); + dto.setIsTree(false); + dto.setOperator("like"); + dto.setValue(List.of(request.getSearchText())); + extFilterList.add(dto); + } + // 排序 if (ObjectUtils.isNotEmpty(request.getSortId())) { DatasetTableFieldDTO field = datasetTableFieldManage.selectById(request.getSortId()); @@ -596,9 +674,10 @@ public class DatasetDataManage { } Field2SQLObj.field2sqlObj(sqlMeta, fields, datasetGroupInfoDTO.getAllFields(), crossDs, dsMap); + ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, datasetGroupInfoDTO.getAllFields(), crossDs, dsMap); WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap); Order2SQLObj.getOrders(sqlMeta, fields, datasetGroupInfoDTO.getSortFields(), crossDs, dsMap); - String querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, false, 0, 1000); + String querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, ids.size() == 1, 0, 1000); querySQL = SqlUtils.rebuildSQL(querySQL, sqlMeta, crossDs, dsMap); logger.info("calcite data enum sql: " + querySQL); diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/dto/EnumValueRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/dto/EnumValueRequest.java index 25dc8e2598..acc327ed25 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/dto/EnumValueRequest.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/dto/EnumValueRequest.java @@ -1,14 +1,19 @@ package io.dataease.api.dataset.dto; +import io.dataease.api.chart.dto.ChartExtFilterDTO; import lombok.Data; +import java.util.List; + /** * @Author Junjun */ @Data public class EnumValueRequest { - private Long queryId; - private Long displayId; - private Long sortId; - private String sort; + private Long queryId;// 查询字段 + private Long displayId;// 显示字段 + private Long sortId;// 排序字段 + private String sort;// 排序 asc||desc + private String searchText;// 搜索内容,以 field like '%text%' 拼接到SQL + private List filter;// 级联查询条件,多个条件之间用and拼接到SQL }