fix(仪表板-过滤器): ck数据源不能使用时间过滤器

This commit is contained in:
fit2cloud-chenyw 2022-08-29 14:05:50 +08:00
parent 7edebc36cd
commit 2fb8e8ad9d

View File

@ -1,5 +1,6 @@
package io.dataease.provider.query.ck; package io.dataease.provider.query.ck;
import io.dataease.commons.utils.BeanUtils;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample; import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@ -30,6 +31,7 @@ import javax.annotation.Resource;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -42,6 +44,8 @@ import static io.dataease.plugins.common.constants.datasource.SQLConstants.TABLE
*/ */
@Service("ckQueryProvider") @Service("ckQueryProvider")
public class CKQueryProvider extends QueryProvider { public class CKQueryProvider extends QueryProvider {
private static final String toDateTime64 = "toDateTime64(%s, 3, '')";
@Resource @Resource
private DatasetTableFieldMapper datasetTableFieldMapper; private DatasetTableFieldMapper datasetTableFieldMapper;
@ -1060,6 +1064,25 @@ public class CKQueryProvider extends QueryProvider {
if (CollectionUtils.isEmpty(requestList)) { if (CollectionUtils.isEmpty(requestList)) {
return null; return null;
} }
AtomicReference<ChartExtFilterRequest> atomicReference = new AtomicReference<>();
requestList.forEach(request -> {
DatasetTableField datasetTableField = request.getDatasetTableField();
List<String> requestValue = request.getValue();
if (ObjectUtils.isNotEmpty(datasetTableField) && datasetTableField.getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(request.getOperator(), "between")) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
request.setOperator("ge");
request.setValue(new ArrayList<String>(){{add(String.format(toDateTime64, "'" + simpleDateFormat.format(new Date(Long.parseLong(requestValue.get(0)))) + "'"));}});
ChartExtFilterRequest requestCopy = BeanUtils.copyBean(new ChartExtFilterRequest(), request);
requestCopy.setOperator("le");
requestCopy.setValue(new ArrayList<String>(){{add(String.format(toDateTime64, "'" + simpleDateFormat.format(new Date(Long.parseLong(requestValue.get(1)))) + "'"));}});
atomicReference.set(requestCopy);
}
});
if (ObjectUtils.isNotEmpty(atomicReference.get())) {
requestList.add(atomicReference.get());
}
List<SQLObj> list = new ArrayList<>(); List<SQLObj> list = new ArrayList<>();
for (ChartExtFilterRequest request : requestList) { for (ChartExtFilterRequest request : requestList) {
List<String> value = request.getValue(); List<String> value = request.getValue();
@ -1138,7 +1161,7 @@ public class CKQueryProvider extends QueryProvider {
whereValue = String.format(CKConstants.WHERE_BETWEEN, value.get(0), value.get(1)); whereValue = String.format(CKConstants.WHERE_BETWEEN, value.get(0), value.get(1));
} }
} else { } else {
whereValue = String.format(CKConstants.WHERE_VALUE_VALUE, value.get(0)); whereValue = isCompleteField(value.get(0)) ? value.get(0) : String.format(CKConstants.WHERE_VALUE_VALUE, value.get(0));
} }
if (!request.getIsTree() && fieldList.get(0).getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(request.getOperator(), "null")) { if (!request.getIsTree() && fieldList.get(0).getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(request.getOperator(), "null")) {
@ -1163,6 +1186,10 @@ public class CKQueryProvider extends QueryProvider {
return CollectionUtils.isNotEmpty(list) ? "(" + String.join(" AND ", strList) + ")" : null; return CollectionUtils.isNotEmpty(list) ? "(" + String.join(" AND ", strList) + ")" : null;
} }
private boolean isCompleteField(String field) {
return StringUtils.isNotBlank(field) && StringUtils.startsWith(field, "toDateTime64('") && StringUtils.endsWith(field, "')");
}
private String sqlFix(String sql) { private String sqlFix(String sql) {
if (sql.lastIndexOf(";") == (sql.length() - 1)) { if (sql.lastIndexOf(";") == (sql.length() - 1)) {
sql = sql.substring(0, sql.length() - 1); sql = sql.substring(0, sql.length() - 1);