From 2fb8e8ad9d73260bb928d6a88127288aa33fc2ec Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 29 Aug 2022 14:05:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BB=AA=E8=A1=A8=E6=9D=BF-=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=99=A8):=20ck=E6=95=B0=E6=8D=AE=E6=BA=90=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E4=BD=BF=E7=94=A8=E6=97=B6=E9=97=B4=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/query/ck/CKQueryProvider.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index 67a095281e..0be43013ff 100644 --- a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -1,5 +1,6 @@ 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.DatasetTableField; import io.dataease.plugins.common.base.domain.DatasetTableFieldExample; @@ -30,6 +31,7 @@ import javax.annotation.Resource; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -42,6 +44,8 @@ import static io.dataease.plugins.common.constants.datasource.SQLConstants.TABLE */ @Service("ckQueryProvider") public class CKQueryProvider extends QueryProvider { + + private static final String toDateTime64 = "toDateTime64(%s, 3, '')"; @Resource private DatasetTableFieldMapper datasetTableFieldMapper; @@ -1060,6 +1064,25 @@ public class CKQueryProvider extends QueryProvider { if (CollectionUtils.isEmpty(requestList)) { return null; } + + AtomicReference atomicReference = new AtomicReference<>(); + requestList.forEach(request -> { + DatasetTableField datasetTableField = request.getDatasetTableField(); + List 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(){{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(){{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 list = new ArrayList<>(); for (ChartExtFilterRequest request : requestList) { List value = request.getValue(); @@ -1138,7 +1161,7 @@ public class CKQueryProvider extends QueryProvider { whereValue = String.format(CKConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } 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")) { @@ -1163,6 +1186,10 @@ public class CKQueryProvider extends QueryProvider { 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) { if (sql.lastIndexOf(";") == (sql.length() - 1)) { sql = sql.substring(0, sql.length() - 1);