diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java index bbea93a56a..59b0218383 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java @@ -104,7 +104,7 @@ public class CustomWhere2Str { originName = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), field.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 3) { - String groupFieldExp = Utils.transGroupFieldToSql(field, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(field, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId()); fieldsDialect.put(originName, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java index 2081155f36..fc4dd84760 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java @@ -60,7 +60,7 @@ public class Dimension2SQLObj { originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), x.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(x.getExtField()) && Objects.equals(x.getExtField(), ExtFieldConstant.EXT_GROUP)) { - String groupFieldExp = Utils.transGroupFieldToSql(x, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(x, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId()); fieldsDialect.put(originField, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java index 3ee5ab8f93..5618ef2d40 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java @@ -74,7 +74,7 @@ public class ExtWhere2Str { originName = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), field.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 3) { - String groupFieldExp = Utils.transGroupFieldToSql(field, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(field, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId()); fieldsDialect.put(originName, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java index 4a17ad3125..4c2544c109 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java @@ -64,7 +64,7 @@ public class Field2SQLObj { originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), x.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(x.getExtField()) && Objects.equals(x.getExtField(), ExtFieldConstant.EXT_GROUP)) { - String groupFieldExp = Utils.transGroupFieldToSql(x, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(x, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId()); fieldsDialect.put(originField, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java index 2baf98518e..df6e0307b5 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java @@ -66,7 +66,7 @@ public class Order2SQLObj { originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), f.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_GROUP)) { - String groupFieldExp = Utils.transGroupFieldToSql(f, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(f, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, f.getId()); fieldsDialect.put(originField, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java index 5a9e0f7a51..17d6c2634e 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java @@ -60,7 +60,7 @@ public class Quota2SQLObj { originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), y.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(y.getExtField()) && Objects.equals(y.getExtField(), ExtFieldConstant.EXT_GROUP)) { - String groupFieldExp = Utils.transGroupFieldToSql(y, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(y, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, y.getId()); fieldsDialect.put(originField, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java index f556781817..ff64acdb2f 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java +++ b/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java @@ -120,7 +120,7 @@ public class WhereTree2Str { originName = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), field.getDataeaseName()); } } else if (ObjectUtils.isNotEmpty(field.getExtField()) && Objects.equals(field.getExtField(), ExtFieldConstant.EXT_GROUP)) { - String groupFieldExp = Utils.transGroupFieldToSql(field, originFields); + String groupFieldExp = Utils.transGroupFieldToSql(field, originFields, isCross, dsMap, pluginManage); // 给计算字段处加一个占位符,后续SQL方言转换后再替换 originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId()); fieldsDialect.put(originName, groupFieldExp); diff --git a/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java b/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java index 6a6e0274ba..e500a63d69 100644 --- a/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java +++ b/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java @@ -1,7 +1,7 @@ package io.dataease.engine.utils; -import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.constant.SQLConstants; +import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.exception.DEException; import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants; @@ -496,7 +496,7 @@ public class Utils { return null; } - public static String transGroupFieldToSql(DatasetTableFieldDTO dto, List fields) { + public static String transGroupFieldToSql(DatasetTableFieldDTO dto, List fields, boolean isCross, Map dsMap, PluginManageApi pluginManage) { // get origin field DatasetTableFieldDTO originField = null; for (DatasetTableFieldDTO ele : fields) { @@ -509,6 +509,22 @@ public class Utils { DEException.throwException("Field not exists"); } + DsTypeDTO datasourceType = null; + if (dsMap != null && dsMap.entrySet().iterator().hasNext()) { + Map.Entry next = dsMap.entrySet().iterator().next(); + datasourceType = getDs(pluginManage, next.getValue().getType()); + } + if (datasourceType == null) { + DEException.throwException("Datasource not exists"); + } + + String fieldName; + if (isCross) { + fieldName = originField.getDataeaseName(); + } else { + fieldName = datasourceType.getPrefix() + originField.getDataeaseName() + datasourceType.getSuffix(); + } + StringBuilder exp = new StringBuilder(); exp.append(" (CASE "); if (originField.getDeType() == 0) { @@ -516,7 +532,7 @@ public class Utils { exp.append(" WHEN "); for (int i = 0; i < fieldGroupDTO.getText().size(); i++) { String value = fieldGroupDTO.getText().get(i); - exp.append(originField.getDataeaseName()).append(" = ").append("'").append(transValue(value)).append("'"); + exp.append(fieldName).append(" = ").append("'").append(transValue(value)).append("'"); if (i < fieldGroupDTO.getText().size() - 1) { exp.append(" OR "); } @@ -526,17 +542,17 @@ public class Utils { } else if (originField.getDeType() == 1) { for (FieldGroupDTO fieldGroupDTO : dto.getGroupList()) { exp.append(" WHEN "); - exp.append(originField.getDataeaseName()).append(" >= ").append("'").append(fieldGroupDTO.getStartTime()).append("'"); + exp.append(fieldName).append(" >= ").append("'").append(fieldGroupDTO.getStartTime()).append("'"); exp.append(" AND "); - exp.append(originField.getDataeaseName()).append(" <= ").append("'").append(fieldGroupDTO.getEndTime()).append("'"); + exp.append(fieldName).append(" <= ").append("'").append(fieldGroupDTO.getEndTime()).append("'"); exp.append(" THEN '").append(transValue(fieldGroupDTO.getName())).append("'"); } } else if (originField.getDeType() == 2 || originField.getDeType() == 3 || originField.getDeType() == 4) { for (FieldGroupDTO fieldGroupDTO : dto.getGroupList()) { exp.append(" WHEN "); - exp.append(originField.getDataeaseName()).append(StringUtils.equalsIgnoreCase(fieldGroupDTO.getMinTerm(), "le") ? " >= " : " > ").append(fieldGroupDTO.getMin()); + exp.append(fieldName).append(StringUtils.equalsIgnoreCase(fieldGroupDTO.getMinTerm(), "le") ? " >= " : " > ").append(fieldGroupDTO.getMin()); exp.append(" AND "); - exp.append(originField.getDataeaseName()).append(StringUtils.equalsIgnoreCase(fieldGroupDTO.getMaxTerm(), "le") ? " <= " : " < ").append(fieldGroupDTO.getMax()); + exp.append(fieldName).append(StringUtils.equalsIgnoreCase(fieldGroupDTO.getMaxTerm(), "le") ? " <= " : " < ").append(fieldGroupDTO.getMax()); exp.append(" THEN '").append(transValue(fieldGroupDTO.getName())).append("'"); } }