diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index a348aa7e8e..20d6b9ee9b 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -9,7 +9,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -255,6 +257,8 @@ public class DorisQueryProvider extends QueryProvider { return " IS NULL "; case "not_null": return " IS NOT NULL "; + case "between": + return " BETWEEN "; default: return ""; } @@ -285,6 +289,11 @@ public class DorisQueryProvider extends QueryProvider { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { filter.append("'%").append(value.get(0)).append("%'"); + } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); + String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); + filter.append("'").append(startTime).append("' AND '").append(endTime).append("'"); } else { filter.append("'").append(value.get(0)).append("'"); } diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java index 2fe0d6c0b4..56019e566d 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -9,7 +9,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -262,6 +264,8 @@ public class MysqlQueryProvider extends QueryProvider { return " IS NULL "; case "not_null": return " IS NOT NULL "; + case "between": + return " BETWEEN "; default: return ""; } @@ -292,6 +296,11 @@ public class MysqlQueryProvider extends QueryProvider { filter.append("('").append(StringUtils.join(value, "','")).append("')"); } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { filter.append("'%").append(value.get(0)).append("%'"); + } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); + String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); + filter.append("'").append(startTime).append("' AND '").append(endTime).append("'"); } else { filter.append("'").append(value.get(0)).append("'"); } diff --git a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index 306051c0cd..bb2d6ea60e 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -3,6 +3,7 @@ package io.dataease.service.dataset.impl.direct; import io.dataease.base.domain.DatasetTable; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.Datasource; +import io.dataease.commons.utils.CommonBeanFactory; import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.request.DatasourceRequest; @@ -53,15 +54,26 @@ public class DirectFieldService implements DataSetFieldService { if (ObjectUtils.isEmpty(datasetTable) || StringUtils.isEmpty(datasetTable.getName())) return null; String tableName = datasetTable.getName(); - String dataSourceId = datasetTable.getDataSourceId(); - if (StringUtils.isEmpty(dataSourceId)) return null; - Datasource ds = datasourceService.get(dataSourceId); - DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); - datasourceRequest.setDatasource(ds); - QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - String querySQL = qp.createQuerySQL(tableName, Collections.singletonList(field)); - datasourceRequest.setQuery(querySQL); + DatasourceProvider datasourceProvider; + if (datasetTable.getMode() == 0) { + String dataSourceId = datasetTable.getDataSourceId(); + if (StringUtils.isEmpty(dataSourceId)) return null; + Datasource ds = datasourceService.get(dataSourceId); + datasourceProvider = ProviderFactory.getProvider(ds.getType()); + datasourceRequest.setDatasource(ds); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + String querySQL = qp.createQuerySQL(tableName, Collections.singletonList(field)); + datasourceRequest.setQuery(querySQL); + } else { + Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); + datasourceProvider = ProviderFactory.getProvider(ds.getType()); + datasourceRequest.setDatasource(ds); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + String querySQL = qp.createQuerySQL(tableName, Collections.singletonList(field)); + datasourceRequest.setQuery(querySQL); + } + try { List rows = datasourceProvider.getData(datasourceRequest); List results = rows.stream().map(row -> row[0]).distinct().collect(Collectors.toList());