mirror of
https://github.com/dataease/dataease.git
synced 2026-05-24 06:18:10 +08:00
feat(数据集): 数据集增加分组字段功能
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user