feat(数据集): 数据集增加分组字段功能

This commit is contained in:
junjun
2025-03-07 16:01:01 +08:00
committed by xuwei-fit2cloud
parent 81c613cafc
commit efa6dfadef
8 changed files with 30 additions and 14 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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<DatasetTableFieldDTO> fields) {
public static String transGroupFieldToSql(DatasetTableFieldDTO dto, List<DatasetTableFieldDTO> fields, boolean isCross, Map<Long, DatasourceSchemaDTO> 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<Long, DatasourceSchemaDTO> 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("'");
}
}