Merge pull request #11564 from dataease/pr@dev-v2@fix_date

fix(图表): 修复跨源关联日期错误的问题 #11339
This commit is contained in:
Junjun 2024-08-14 21:29:25 +08:00 committed by GitHub
commit 04f04fc986
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 56 additions and 8 deletions

View File

@ -104,6 +104,14 @@ public class CustomWhere2Str {
whereName = String.format(SQLConstants.FROM_UNIXTIME, cast, SQLConstants.DEFAULT_DATE_FORMAT);
}
if (field.getDeExtractType() == 1) {
// 如果都是时间类型把date和time类型进行字符串拼接
if (isCross) {
if (StringUtils.equalsIgnoreCase(field.getType(), "date")) {
originName = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, originName, "' 00:00:00'"), SQLConstants.DEFAULT_DATE_FORMAT);
} else if (StringUtils.equalsIgnoreCase(field.getType(), "time")) {
originName = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, "'1970-01-01 '", originName), SQLConstants.DEFAULT_DATE_FORMAT);
}
}
// 此处获取标准格式的日期
whereName = originName;
}

View File

@ -52,7 +52,7 @@ public class Dimension2SQLObj {
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
// 处理横轴字段
xFields.add(getXFields(x, originField, fieldAlias));
xFields.add(getXFields(x, originField, fieldAlias, isCross));
// 处理横轴排序
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
@ -69,12 +69,20 @@ public class Dimension2SQLObj {
meta.setXFieldsDialect(fieldsDialect);
}
public static SQLObj getXFields(ChartViewFieldDTO x, String originField, String fieldAlias) {
public static SQLObj getXFields(ChartViewFieldDTO x, String originField, String fieldAlias, boolean isCross) {
String fieldName = "";
if (Objects.equals(x.getDeExtractType(), DeTypeConstants.DE_TIME)) {
if (Objects.equals(x.getDeType(), DeTypeConstants.DE_INT) || Objects.equals(x.getDeType(), DeTypeConstants.DE_FLOAT)) {
fieldName = String.format(SQLConstants.UNIX_TIMESTAMP, originField);
} else if (Objects.equals(x.getDeType(), DeTypeConstants.DE_TIME)) {
// 如果都是时间类型把date和time类型进行字符串拼接
if (isCross) {
if (StringUtils.equalsIgnoreCase(x.getType(), "date")) {
originField = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, originField, "' 00:00:00'"), SQLConstants.DEFAULT_DATE_FORMAT);
} else if (StringUtils.equalsIgnoreCase(x.getType(), "time")) {
originField = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, "'1970-01-01 '", originField), SQLConstants.DEFAULT_DATE_FORMAT);
}
}
String format = Utils.transDateFormat(x.getDateStyle(), x.getDatePattern());
if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_Q")) {
fieldName = String.format(format,

View File

@ -76,6 +76,14 @@ public class ExtWhere2Str {
whereName = String.format(SQLConstants.UNIX_TIMESTAMP, whereName);
}
if (field.getDeExtractType() == 1) {
// 如果都是时间类型把date和time类型进行字符串拼接
if (isCross) {
if (StringUtils.equalsIgnoreCase(field.getType(), "date")) {
originName = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, originName, "' 00:00:00'"), SQLConstants.DEFAULT_DATE_FORMAT);
} else if (StringUtils.equalsIgnoreCase(field.getType(), "time")) {
originName = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, "'1970-01-01 '", originName), SQLConstants.DEFAULT_DATE_FORMAT);
}
}
// 此处获取标准格式的日期
whereName = originName;
}

View File

@ -56,14 +56,14 @@ public class Field2SQLObj {
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
// 处理横轴字段
xFields.add(getXFields(x, originField, fieldAlias));
xFields.add(getXFields(x, originField, fieldAlias, isCross));
}
}
meta.setXFields(xFields);
meta.setXFieldsDialect(fieldsDialect);
}
public static SQLObj getXFields(DatasetTableFieldDTO f, String originField, String fieldAlias) {
public static SQLObj getXFields(DatasetTableFieldDTO f, String originField, String fieldAlias, boolean isCross) {
String fieldName = "";
if (originField != null) {
// 处理横轴字段
@ -71,6 +71,14 @@ public class Field2SQLObj {
if (Objects.equals(f.getDeType(), DeTypeConstants.DE_INT) || Objects.equals(f.getDeType(), DeTypeConstants.DE_FLOAT)) {
fieldName = String.format(SQLConstants.UNIX_TIMESTAMP, originField);
} else {
// 如果都是时间类型把date和time类型进行字符串拼接
if (isCross) {
if (StringUtils.equalsIgnoreCase(f.getType(), "date")) {
originField = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, originField, "' 00:00:00'"), SQLConstants.DEFAULT_DATE_FORMAT);
} else if (StringUtils.equalsIgnoreCase(f.getType(), "time")) {
originField = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, "'1970-01-01 '", originField), SQLConstants.DEFAULT_DATE_FORMAT);
}
}
fieldName = originField;
}
} else if (Objects.equals(f.getDeExtractType(), DeTypeConstants.DE_STRING)) {

View File

@ -1,13 +1,13 @@
package io.dataease.engine.trans;
import io.dataease.api.chart.dto.DeSortField;
import io.dataease.extensions.datasource.dto.CalParam;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.CalParam;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.model.SQLObj;
import org.apache.commons.lang3.ObjectUtils;
@ -58,6 +58,14 @@ public class Order2SQLObj {
if (Objects.equals(f.getDeType(), DeTypeConstants.DE_INT) || Objects.equals(f.getDeType(), DeTypeConstants.DE_FLOAT)) {
fieldName = String.format(SQLConstants.UNIX_TIMESTAMP, originField);
} else {
// 如果都是时间类型把date和time类型进行字符串拼接
if (isCross) {
if (StringUtils.equalsIgnoreCase(f.getType(), "date")) {
originField = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, originField, "' 00:00:00'"), SQLConstants.DEFAULT_DATE_FORMAT);
} else if (StringUtils.equalsIgnoreCase(f.getType(), "time")) {
originField = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, "'1970-01-01 '", originField), SQLConstants.DEFAULT_DATE_FORMAT);
}
}
fieldName = originField;
}
} else if (Objects.equals(f.getDeExtractType(), DeTypeConstants.DE_STRING)) {

View File

@ -54,7 +54,7 @@ public class Quota2SQLObj {
// 处理纵轴字段
SQLObj ySQLObj = getYFields(y, originField, fieldAlias);
if (StringUtils.equalsIgnoreCase("bar-range", meta.getChartType()) && StringUtils.equalsIgnoreCase(y.getGroupType(), "d") && y.getDeType() == 1) {
yFields.add(Dimension2SQLObj.getXFields(y, ySQLObj.getFieldName(), fieldAlias));
yFields.add(Dimension2SQLObj.getXFields(y, ySQLObj.getFieldName(), fieldAlias, isCross));
} else {
yFields.add(ySQLObj);
}

View File

@ -107,6 +107,14 @@ public class WhereTree2Str {
whereName = String.format(SQLConstants.FROM_UNIXTIME, cast, SQLConstants.DEFAULT_DATE_FORMAT);
}
if (field.getDeExtractType() == 1) {
// 如果都是时间类型把date和time类型进行字符串拼接
if (isCross) {
if (StringUtils.equalsIgnoreCase(field.getType(), "date")) {
originName = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, originName, "' 00:00:00'"), SQLConstants.DEFAULT_DATE_FORMAT);
} else if (StringUtils.equalsIgnoreCase(field.getType(), "time")) {
originName = String.format(SQLConstants.DE_STR_TO_DATE, String.format(SQLConstants.CONCAT, "'1970-01-01 '", originName), SQLConstants.DEFAULT_DATE_FORMAT);
}
}
whereName = originName;
}
} else if (field.getDeType() == 2 || field.getDeType() == 3) {