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

This commit is contained in:
junjun
2025-02-07 09:53:20 +08:00
committed by Junjun
parent 0b225ed0d9
commit 83d42991f3
14 changed files with 172 additions and 11 deletions

View File

@@ -22,6 +22,7 @@ import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.api.PluginManageApi;
import io.dataease.extensions.datasource.dto.CalParam;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.FieldGroupDTO;
import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.filter.FilterTreeObj;
@@ -42,7 +43,10 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -141,13 +145,13 @@ public class ChartViewManege {
List<CoreDatasetTableField> coreDatasetTableFields = coreDatasetTableFieldMapper.selectList(wp);
Map<Long, List<CoreDatasetTableField>> groupedByTableId = coreDatasetTableFields.stream()
.collect(Collectors.groupingBy(CoreDatasetTableField::getDatasetGroupId));
if(chartViewDTOS.size()<10){
if (chartViewDTOS.size() < 10) {
chartViewDTOS.forEach(dto -> {
if (dto.getTableId() != null) {
dto.setCalParams(Utils.getParams(datasetTableFieldManage.transDTO(groupedByTableId.get(dto.getTableId()))));
}
});
}else{
} else {
ExecutorService executor = Executors.newFixedThreadPool(10);
try {
// 超过10个图表要处理启用多线程处理
@@ -208,11 +212,14 @@ public class ChartViewManege {
TypeReference<List<CalParam>> typeToken = new TypeReference<>() {
};
TypeReference<List<FieldGroupDTO>> groupTokenType = new TypeReference<>() {
};
List<CoreDatasetTableField> fields = coreDatasetTableFieldMapper.selectList(wrapper);
List<DatasetTableFieldDTO> collect = fields.stream().map(ele -> {
DatasetTableFieldDTO dto = new DatasetTableFieldDTO();
BeanUtils.copyBean(dto, ele);
dto.setParams(JsonUtil.parseList(ele.getParams(), typeToken));
dto.setGroupList(JsonUtil.parseList(ele.getGroupList(), groupTokenType));
return dto;
}).collect(Collectors.toList());
// filter column disable field
@@ -228,6 +235,7 @@ public class ChartViewManege {
List<DatasetTableFieldDTO> chartFields = coreDatasetTableFieldMapper.selectList(wrapper).stream().map(ele -> {
DatasetTableFieldDTO dto = new DatasetTableFieldDTO();
BeanUtils.copyBean(dto, ele);
dto.setGroupList(JsonUtil.parseList(ele.getGroupList(), groupTokenType));
return dto;
}).collect(Collectors.toList());
list.addAll(transFieldDTO(chartFields));
@@ -381,11 +389,11 @@ public class ChartViewManege {
record.setExtLabel(objectMapper.writeValueAsString(dto.getExtLabel()));
record.setExtTooltip(objectMapper.writeValueAsString(dto.getExtTooltip()));
record.setCustomAttr(objectMapper.writeValueAsString(dto.getCustomAttr()));
if(dto.getCustomAttrMobile() != null){
if (dto.getCustomAttrMobile() != null) {
record.setCustomAttrMobile(objectMapper.writeValueAsString(dto.getCustomAttrMobile()));
}
record.setCustomStyle(objectMapper.writeValueAsString(dto.getCustomStyle()));
if(dto.getCustomAttrMobile() != null) {
if (dto.getCustomAttrMobile() != null) {
record.setCustomStyleMobile(objectMapper.writeValueAsString(dto.getCustomStyleMobile()));
}
record.setSenior(objectMapper.writeValueAsString(dto.getSenior()));
@@ -415,11 +423,11 @@ public class ChartViewManege {
dto.setExtLabel(JsonUtil.parseList(record.getExtLabel(), tokenType));
dto.setExtTooltip(JsonUtil.parseList(record.getExtTooltip(), tokenType));
dto.setCustomAttr(JsonUtil.parse(record.getCustomAttr(), Map.class));
if(record.getCustomAttrMobile() != null){
if (record.getCustomAttrMobile() != null) {
dto.setCustomAttrMobile(JsonUtil.parse(record.getCustomAttrMobile(), Map.class));
}
dto.setCustomStyle(JsonUtil.parse(record.getCustomStyle(), Map.class));
if(record.getCustomStyleMobile() != null) {
if (record.getCustomStyleMobile() != null) {
dto.setCustomStyleMobile(JsonUtil.parse(record.getCustomStyleMobile(), Map.class));
}
dto.setSenior(JsonUtil.parse(record.getSenior(), Map.class));

View File

@@ -366,6 +366,14 @@ public class DatasetGroupManage {
datasetTableFieldDTO.setFieldShortName(dataeaseName);
datasetTableFieldDTO.setDeExtractType(datasetTableFieldDTO.getDeType());
}
if (Objects.equals(datasetTableFieldDTO.getExtField(), ExtFieldConstant.EXT_GROUP)) {
String dataeaseName = TableUtils.fieldNameShort(datasetTableFieldDTO.getId() + "_" + datasetTableFieldDTO.getOriginName());
datasetTableFieldDTO.setDataeaseName(dataeaseName);
datasetTableFieldDTO.setFieldShortName(dataeaseName);
datasetTableFieldDTO.setDeExtractType(0);
datasetTableFieldDTO.setDeType(0);
datasetTableFieldDTO.setGroupType("d");
}
datasetTableFieldDTO.setDatasetGroupId(datasetGroupId);
} else {
datasetTableFieldDTO.setDataeaseName(dto.getDataeaseName());

View File

@@ -14,6 +14,7 @@ import io.dataease.extensions.datasource.api.PluginManageApi;
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.dto.FieldGroupDTO;
import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ColumnPermissionItem;
import io.dataease.i18n.Translator;
@@ -290,8 +291,12 @@ public class DatasetTableFieldManage {
if (StringUtils.isNotEmpty(ele.getParams())) {
TypeReference<List<CalParam>> tokenType = new TypeReference<>() {
};
TypeReference<List<FieldGroupDTO>> groupTokenType = new TypeReference<>() {
};
List<CalParam> calParams = JsonUtil.parseList(ele.getParams(), tokenType);
List<FieldGroupDTO> fieldGroups = JsonUtil.parseList(ele.getGroupList(), groupTokenType);
dto.setParams(calParams);
dto.setGroupList(fieldGroups);
}
return dto;
}).collect(Collectors.toList());
@@ -307,6 +312,9 @@ public class DatasetTableFieldManage {
if (ObjectUtils.isNotEmpty(dto.getParams())) {
record.setParams(JsonUtil.toJSONString(dto.getParams()).toString());
}
if (ObjectUtils.isNotEmpty(dto.getGroupList())) {
record.setGroupList(JsonUtil.toJSONString(dto.getGroupList()).toString());
}
return record;
}

View File

@@ -9,4 +9,6 @@ public class ExtFieldConstant {
public final static Integer EXT_COPY = 1;
public final static Integer EXT_CALC = 2;
public final static Integer EXT_GROUP = 3;
}

View File

@@ -103,6 +103,14 @@ public class CustomWhere2Str {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId());
fieldsDialect.put(originName, groupFieldExp);
if (isCross) {
originName = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originName = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), field.getOriginName());

View File

@@ -59,6 +59,14 @@ public class Dimension2SQLObj {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId());
fieldsDialect.put(originField, groupFieldExp);
if (isCross) {
originField = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), x.getOriginName());

View File

@@ -73,6 +73,14 @@ public class ExtWhere2Str {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId());
fieldsDialect.put(originName, groupFieldExp);
if (isCross) {
originName = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originName = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), field.getOriginName());

View File

@@ -63,6 +63,14 @@ public class Field2SQLObj {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId());
fieldsDialect.put(originField, groupFieldExp);
if (isCross) {
originField = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), x.getOriginName());

View File

@@ -65,6 +65,14 @@ public class Order2SQLObj {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, f.getId());
fieldsDialect.put(originField, groupFieldExp);
if (isCross) {
originField = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), f.getOriginName());

View File

@@ -59,6 +59,14 @@ public class Quota2SQLObj {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, y.getId());
fieldsDialect.put(originField, groupFieldExp);
if (isCross) {
originField = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), y.getOriginName());

View File

@@ -119,6 +119,14 @@ public class WhereTree2Str {
} else {
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);
// 给计算字段处加一个占位符后续SQL方言转换后再替换
originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId());
fieldsDialect.put(originName, groupFieldExp);
if (isCross) {
originName = groupFieldExp;
}
} else {
if (StringUtils.equalsIgnoreCase(dsType, "es")) {
originName = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), field.getOriginName());

View File

@@ -5,10 +5,7 @@ import io.dataease.engine.constant.SQLConstants;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.api.PluginManageApi;
import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
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.dto.DsTypeDTO;
import io.dataease.extensions.datasource.dto.*;
import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
@@ -498,4 +495,49 @@ public class Utils {
}
return null;
}
public static String transGroupFieldToSql(DatasetTableFieldDTO dto, List<DatasetTableFieldDTO> fields) {
// get origin field
String originField = null;
for (DatasetTableFieldDTO ele : fields) {
if (Objects.equals(ele.getId(), Long.valueOf(dto.getOriginName()))) {
originField = ele.getOriginName();
break;
}
}
if (originField == null) {
DEException.throwException("Field not exists");
}
StringBuilder exp = new StringBuilder();
exp.append(" (CASE WHEN ");
if (dto.getDeType() == 0) {
for (FieldGroupDTO fieldGroupDTO : dto.getGroupList()) {
for (int i = 0; i < fieldGroupDTO.getText().size(); i++) {
String value = fieldGroupDTO.getText().get(i);
exp.append(originField).append(" = ").append("'").append(value).append("'");
if (i < fieldGroupDTO.getText().size() - 1) {
exp.append(" OR ");
}
}
exp.append(" THEN '").append(fieldGroupDTO.getName()).append("'");
}
} else if (dto.getDeType() == 1) {
for (FieldGroupDTO fieldGroupDTO : dto.getGroupList()) {
exp.append(originField).append(" >= ").append("'").append(fieldGroupDTO.getStartTime()).append("'");
exp.append(" AND ");
exp.append(originField).append(" <= ").append("'").append(fieldGroupDTO.getEndTime()).append("'");
exp.append(" THEN '").append(fieldGroupDTO.getName()).append("'");
}
} else if (dto.getDeType() == 2 || dto.getDeType() == 3 || dto.getDeType() == 4) {
for (FieldGroupDTO fieldGroupDTO : dto.getGroupList()) {
exp.append(originField).append(StringUtils.equalsIgnoreCase(fieldGroupDTO.getMinTerm(), "le") ? " >= " : " > ").append(fieldGroupDTO.getMin());
exp.append(" AND ");
exp.append(originField).append(StringUtils.equalsIgnoreCase(fieldGroupDTO.getMaxTerm(), "le") ? " <= " : " < ").append(fieldGroupDTO.getMax());
exp.append(" THEN '").append(fieldGroupDTO.getName()).append("'");
}
}
exp.append(" ELSE ").append("'").append(dto.getOtherGroup()).append("'").append(" END) ");
return exp.toString();
}
}