forked from github/dataease
Merge pull request #11564 from dataease/pr@dev-v2@fix_date
fix(图表): 修复跨源关联日期错误的问题 #11339
This commit is contained in:
commit
04f04fc986
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)) {
|
||||
|
@ -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)) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user