feat: 过滤器枚举值排序

This commit is contained in:
fit2cloud-chenyw 2022-06-07 15:04:24 +08:00
parent 54d8d59c0a
commit fbd0d39002
30 changed files with 1269 additions and 60 deletions

View File

@ -34,6 +34,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* @Author gin * @Author gin
@ -159,13 +160,14 @@ public class DataSetTableFieldController {
public List<Object> multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception { public List<Object> multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
List<Object> results = new ArrayList<>(); List<Object> results = new ArrayList<>();
for (String fieldId : multFieldValuesRequest.getFieldIds()) { for (String fieldId : multFieldValuesRequest.getFieldIds()) {
List<Object> fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId(), true, false); List<Object> fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, false);
if (CollectionUtil.isNotEmpty(fieldValues)) { if (CollectionUtil.isNotEmpty(fieldValues)) {
results.addAll(fieldValues); results.addAll(fieldValues);
} }
} }
ArrayList<Object> list = results.stream().collect( List<Object> list = results.stream().distinct().collect(Collectors.toList());
/*ArrayList<Object> list = results.stream().collect(
Collectors.collectingAndThen( Collectors.collectingAndThen(
Collectors.toCollection( Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(t -> { () -> new TreeSet<>(Comparator.comparing(t -> {
@ -173,7 +175,7 @@ public class DataSetTableFieldController {
return ""; return "";
return t.toString(); return t.toString();
}))), }))),
ArrayList::new)); ArrayList::new));*/
return list; return list;
} }
@ -185,13 +187,13 @@ public class DataSetTableFieldController {
DecodedJWT jwt = JWT.decode(linkToken); DecodedJWT jwt = JWT.decode(linkToken);
Long userId = jwt.getClaim("userId").asLong(); Long userId = jwt.getClaim("userId").asLong();
multFieldValuesRequest.setUserId(userId); multFieldValuesRequest.setUserId(userId);
return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getUserId(), true, true,false); return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, true,false);
} }
@ApiIgnore @ApiIgnore
@PostMapping("mappingFieldValues") @PostMapping("mappingFieldValues")
public List<Object> mappingFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception { public List<Object> mappingFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception {
return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getUserId(), true, true, false); return dataSetFieldService.fieldValues(multFieldValuesRequest.getFieldIds(), multFieldValuesRequest.getSort(), multFieldValuesRequest.getUserId(), true, true, false);
} }
@ApiIgnore @ApiIgnore

View File

@ -1,5 +1,6 @@
package io.dataease.controller.request.dataset; package io.dataease.controller.request.dataset;
import io.dataease.dto.dataset.DeSortDTO;
import lombok.Data; import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;
@ -9,4 +10,7 @@ import java.util.List;
public class MultFieldValuesRequest { public class MultFieldValuesRequest {
List<String> fieldIds = new ArrayList<>(); List<String> fieldIds = new ArrayList<>();
Long userId= null; Long userId= null;
private DeSortDTO sort;
} }

View File

@ -0,0 +1,18 @@
package io.dataease.dto.dataset;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class DeSortDTO implements Serializable {
private String id;
private String name;
private String sort;
private List<String> custom;
}

View File

@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -83,6 +84,11 @@ public class DorisQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -149,9 +155,71 @@ public class DorisQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName());
} else {
originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == 1) {
if (f.getDeType() == 2 || f.getDeType() == 3) {
fieldName = String.format(DorisConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == 0) {
if (f.getDeType() == 2) {
fieldName = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == 1) {
fieldName = String.format(DorisConstants.STR_TO_DATE, originField, DorisConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == 1) {
String cast = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(DorisConstants.FROM_UNIXTIME, cast, DorisConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(DorisConstants.CAST, originField, DorisConstants.DEFAULT_FLOAT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -83,6 +84,11 @@ public class MysqlQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MysqlConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MysqlConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -149,9 +155,71 @@ public class MysqlQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName());
} else {
originField = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getDataeaseName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == 1) {
if (f.getDeType() == 2 || f.getDeType() == 3) {
fieldName = String.format(MysqlConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == 0) {
if (f.getDeType() == 2) {
fieldName = String.format(MysqlConstants.CAST, originField, MysqlConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(MysqlConstants.CAST, originField, MysqlConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == 1) {
fieldName = String.format(MysqlConstants.STR_TO_DATE, originField, MysqlConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == 1) {
String cast = String.format(MysqlConstants.CAST, originField, MysqlConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(MysqlConstants.FROM_UNIXTIME, cast, MysqlConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(MysqlConstants.CAST, originField, MysqlConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(MysqlConstants.CAST, originField, MysqlConstants.DEFAULT_FLOAT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -5,6 +5,7 @@ import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.common.base.domain.Datasource;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -71,6 +72,16 @@ public class ApiProvider extends QueryProvider {
return null; return null;
} }
@Override
public String createQuerySQL(String s, List<DatasetTableField> list, boolean b, Datasource datasource, List<ChartFieldCustomFilterDTO> list1, List<DeSortField> list2) {
return null;
}
@Override
public String createQuerySQLAsTmp(String s, List<DatasetTableField> list, boolean b, List<ChartFieldCustomFilterDTO> list1, List<DeSortField> list2) {
return null;
}
@Override @Override
public String getSQLAsTmp(String s, List<ChartViewFieldDTO> list, List<ChartViewFieldDTO> list1, List<ChartFieldCustomFilterDTO> list2, List<ChartExtFilterRequest> list3, ChartViewWithBLOBs chartViewWithBLOBs) { public String getSQLAsTmp(String s, List<ChartViewFieldDTO> list, List<ChartViewFieldDTO> list1, List<ChartFieldCustomFilterDTO> list2, List<ChartExtFilterRequest> list3, ChartViewWithBLOBs chartViewWithBLOBs) {
return null; return null;

View File

@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -113,6 +114,11 @@ public class CKQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -179,9 +185,75 @@ public class CKQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) {
if (f.getType().equalsIgnoreCase("DATE")) {
fieldName = String.format(CKConstants.toInt32, String.format(CKConstants.toDateTime, originField)) + "*1000";
} else {
fieldName = String.format(CKConstants.toInt32, originField) + "*1000";
}
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(CKConstants.toInt64, originField);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(CKConstants.toFloat64, originField);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(CKConstants.toDateTime, originField);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {
String cast = String.format(CKConstants.toFloat64, originField);
fieldName = String.format(CKConstants.toDateTime, cast);
} else if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(CKConstants.toInt64, originField);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -14,6 +14,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -84,6 +85,11 @@ public class Db2QueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(Db2Constants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(Db2Constants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -153,9 +159,74 @@ public class Db2QueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(Db2Constants.UNIX_TIMESTAMP, originField);
} else {
if(f.getType().equalsIgnoreCase("TIME")){
fieldName = String.format(Db2Constants.FORMAT_TIME, originField, Db2Constants.DEFAULT_DATE_FORMAT);
}else {
fieldName = originField;
}
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(Db2Constants.CAST, originField, Db2Constants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(Db2Constants.CAST, originField, Db2Constants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(Db2Constants.DATE_FORMAT, originField, Db2Constants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {
String cast = String.format(Db2Constants.CAST, originField, Db2Constants.DEFAULT_INT_FORMAT);
fieldName = String.format(Db2Constants.FROM_UNIXTIME, cast, Db2Constants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(Db2Constants.CAST, originField, Db2Constants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -116,6 +117,11 @@ public class EsQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(EsSqlLConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(EsSqlLConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -180,9 +186,71 @@ public class EsQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == DeTypeConstants.DE_INT) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == DeTypeConstants.DE_TIME) {
originField = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(EsSqlLConstants.CAST, originField, "bigint");
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(EsSqlLConstants.CAST, originField, "bigint");
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(EsSqlLConstants.CAST, originField, "double");
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(EsSqlLConstants.CAST, originField, "timestamp");
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {
String cast = String.format(EsSqlLConstants.CAST, originField, "timestamp");
fieldName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, EsSqlLConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(EsSqlLConstants.CAST, originField, "bigint");
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -77,6 +78,11 @@ public class HiveQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(HiveConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(HiveConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -139,9 +145,71 @@ public class HiveQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (f.getDeType() == 2 || f.getDeType() == 3) {
fieldName = String.format(HiveConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(HiveConstants.CAST, originField, HiveConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(HiveConstants.CAST, originField, HiveConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(HiveConstants.STR_TO_DATE, originField, HiveConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {
String cast = String.format(HiveConstants.CAST, originField, HiveConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(HiveConstants.FROM_UNIXTIME, cast, HiveConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(HiveConstants.CAST, originField, HiveConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -74,6 +75,11 @@ public class ImpalaQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(ImpalaConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(ImpalaConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -136,14 +142,76 @@ public class ImpalaQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(ImpalaConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(ImpalaConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) { //时间转数值
if (f.getDeType() == 2 || f.getDeType() == 3) {
fieldName = String.format(ImpalaConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) { //字符串转时间
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(ImpalaConstants.CAST, originField, ImpalaConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(ImpalaConstants.CAST, originField, ImpalaConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(ImpalaConstants.DATE_FORMAT, originField, ImpalaConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {//数值转时间
String cast = String.format(ImpalaConstants.CAST, originField, ImpalaConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(ImpalaConstants.FROM_UNIXTIME, cast, ImpalaConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(ImpalaConstants.CAST, originField, ImpalaConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override @Override
public String createQueryTableWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQueryTableWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, null, fieldCustomFilter) + " LIMIT " + realSize; return createQuerySQL(table, fields, isGroup, null, fieldCustomFilter) + " LIMIT " + realSize;

View File

@ -12,6 +12,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -86,6 +87,11 @@ public class MongoQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -125,14 +131,50 @@ public class MongoQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == DeTypeConstants.DE_INT) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == DeTypeConstants.DE_TIME) {
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index);
String fieldName = "";
fieldName = originField;
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override @Override
public String createQueryTableWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQueryTableWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, null, fieldCustomFilter) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return createQuerySQL(table, fields, isGroup, null, fieldCustomFilter) + " LIMIT " + (page - 1) * pageSize + "," + realSize;

View File

@ -11,6 +11,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -84,6 +85,60 @@ public class MysqlQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, null);
}
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == 1) {
if (f.getDeType() == 2 || f.getDeType() == 3) {
fieldName = String.format(MySQLConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else {
fieldName = String.format(MySQLConstants.DATE_FORMAT, originField, MySQLConstants.DEFAULT_DATE_FORMAT);
}
} else if (f.getDeExtractType() == 0) {
if (f.getDeType() == 2) {
fieldName = String.format(MySQLConstants.CAST, originField, MySQLConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(MySQLConstants.CAST, originField, MySQLConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == 1) {
fieldName = String.format(MySQLConstants.STR_TO_DATE, originField, MySQLConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == 1) {
String cast = String.format(MySQLConstants.CAST, originField, MySQLConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(MySQLConstants.FROM_UNIXTIME, cast, MySQLConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(MySQLConstants.CAST, originField, MySQLConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -137,6 +192,8 @@ public class MysqlQueryProvider extends QueryProvider {
} }
} }
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup); st_sql.add("isGroup", isGroup);
@ -148,12 +205,25 @@ public class MysqlQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
} }
@Override @Override

View File

@ -13,6 +13,7 @@ import io.dataease.plugins.common.constants.SQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.entity.JdbcConfiguration;
@ -98,7 +99,7 @@ public class OracleQueryProvider extends QueryProvider {
} }
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0))) .tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0)))
@ -107,6 +108,8 @@ public class OracleQueryProvider extends QueryProvider {
setSchema(tableObj, ds); setSchema(tableObj, ds);
List<SQLObj> xFields = xFields(table, fields); List<SQLObj> xFields = xFields(table, fields);
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
ST st_sql = stg.getInstanceOf("previewSql"); ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", isGroup); st_sql.add("isGroup", isGroup);
@ -116,9 +119,34 @@ public class OracleQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
public void setSchema(SQLObj tableObj, Datasource ds) { public void setSchema(SQLObj tableObj, Datasource ds) {
if (ds != null && !tableObj.getTableName().startsWith("(") && !tableObj.getTableName().endsWith(")")) { if (ds != null && !tableObj.getTableName().startsWith("(") && !tableObj.getTableName().endsWith(")")) {
String schema = new Gson().fromJson(ds.getConfiguration(), JdbcConfiguration.class).getSchema(); String schema = new Gson().fromJson(ds.getConfiguration(), JdbcConfiguration.class).getSchema();
@ -127,6 +155,49 @@ public class OracleQueryProvider extends QueryProvider {
} }
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(OracleConstants.ALIAS_FIX, String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index));
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == 1) {
if (f.getDeType() == 2 || f.getDeType() == 3) {
fieldName = String.format(OracleConstants.UNIX_TIMESTAMP, originField) + "*1000";
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == 0) {
if (f.getDeType() == 2) {
fieldName = String.format(OracleConstants.CAST, originField, OracleConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == 3) {
fieldName = String.format(OracleConstants.CAST, originField, OracleConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == 1) {
fieldName = String.format(OracleConstants.DATE_FORMAT, originField, OracleConstants.DEFAULT_DATE_FORMAT);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == 1) {
String cast = String.format(OracleConstants.CAST, originField, OracleConstants.DEFAULT_INT_FORMAT) + "/1000";
fieldName = String.format(OracleConstants.FROM_UNIXTIME, cast, OracleConstants.DEFAULT_DATE_FORMAT);
} else if (f.getDeType() == 2) {
fieldName = String.format(OracleConstants.CAST, originField, OracleConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
private List<SQLObj> xFields(String table, List<DatasetTableField> fields) { private List<SQLObj> xFields(String table, List<DatasetTableField> fields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table))

View File

@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.*;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.entity.JdbcConfiguration;
@ -99,6 +100,11 @@ public class PgQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -163,9 +169,70 @@ public class PgQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(PgConstants.UNIX_TIMESTAMP, originField);
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(PgConstants.CAST, originField, PgConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(PgConstants.CAST, originField, PgConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(PgConstants.CAST, originField, "timestamp");
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {
String cast = String.format(PgConstants.CAST, originField, "bigint");
fieldName = String.format(PgConstants.FROM_UNIXTIME, cast);
} else if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(PgConstants.CAST, originField, PgConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -10,6 +10,7 @@ import io.dataease.plugins.common.constants.*;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.entity.JdbcConfiguration;
@ -107,6 +108,11 @@ public class RedshiftQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -171,9 +177,71 @@ public class RedshiftQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
String originField;
if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index);
String fieldName = "";
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) {
if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(PgConstants.UNIX_TIMESTAMP, originField);
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(PgConstants.CAST, originField, PgConstants.DEFAULT_INT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(PgConstants.CAST, originField, PgConstants.DEFAULT_FLOAT_FORMAT);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) {
fieldName = String.format(PgConstants.CAST, originField, "timestamp");
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) {
String cast = String.format(PgConstants.CAST, originField, "bigint");
fieldName = String.format(PgConstants.FROM_UNIXTIME, cast);
} else if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(PgConstants.CAST, originField, PgConstants.DEFAULT_INT_FORMAT);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);

View File

@ -13,6 +13,7 @@ import io.dataease.plugins.common.constants.SqlServerSQLConstants;
import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.dto.sqlObj.SQLObj;
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.entity.JdbcConfiguration;
@ -93,6 +94,21 @@ public class SqlserverQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, null);
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter);
}
@Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, sortFields);
}
@Override
public String createQuerySQL(String table, List<DatasetTableField> fields, boolean isGroup, Datasource ds, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DeSortField> sortFields) {
SQLObj tableObj = SQLObj.builder() SQLObj tableObj = SQLObj.builder()
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table)) .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
@ -157,12 +173,62 @@ public class SqlserverQueryProvider extends QueryProvider {
List<String> wheres = new ArrayList<>(); List<String> wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres); if (customWheres != null) wheres.add(customWheres);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sortFields)) {
int step = fields.size();
for (int i = step; i < (step + sortFields.size()); i++) {
DeSortField deSortField = sortFields.get(i - step);
SQLObj order = buildSortField(deSortField, tableObj, i);
xOrders.add(order);
}
}
if (ObjectUtils.isNotEmpty(xOrders)) {
st_sql.add("orders", xOrders);
}
return st_sql.render(); return st_sql.render();
} }
@Override private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) {
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields, boolean isGroup, List<ChartFieldCustomFilterDTO> fieldCustomFilter) { String originField;
return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter); if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) {
// 解析origin name中有关联的字段生成sql表达式
originField = calcFieldRegex(f.getOriginName(), tableObj);
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) {
originField = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
} else {
originField = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName());
}
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, index);
String fieldName;
// 处理横轴字段
if (f.getDeExtractType() == DeTypeConstants.DE_TIME) { // 时间 转为 数值
if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField);
} else {
fieldName = originField;
}
} else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) {
if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_INT_FORMAT, originField);
} else if (f.getDeType() == DeTypeConstants.DE_FLOAT) {
fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT, originField);
} else if (f.getDeType() == DeTypeConstants.DE_TIME) { //字符串转时间
fieldName = String.format(SqlServerSQLConstants.STRING_TO_DATE, originField);
} else {
fieldName = originField;
}
} else {
if (f.getDeType() == DeTypeConstants.DE_TIME) { // 数值转时间
String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originField + "/1000");
fieldName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast);
} else if (f.getDeType() == DeTypeConstants.DE_INT) {
fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_INT_FORMAT, originField);
} else {
fieldName = originField;
}
}
SQLObj result = SQLObj.builder().orderField(originField).orderAlias(originField).orderDirection(f.getOrderDirection()).build();
return result;
} }
@Override @Override

View File

@ -1,11 +1,17 @@
package io.dataease.service.dataset; package io.dataease.service.dataset;
import io.dataease.dto.dataset.DeSortDTO;
import java.util.List; import java.util.List;
public interface DataSetFieldService { public interface DataSetFieldService {
List<Object> fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception; List<Object> fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception;
List<Object> fieldValues(List<String> fieldIds, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception; List<Object> fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception;
List<Object> fieldValues(List<String> fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception;
} }

View File

@ -3,13 +3,16 @@ package io.dataease.service.dataset.impl.direct;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.dataease.commons.exception.DEException; import io.dataease.commons.exception.DEException;
import io.dataease.commons.model.BaseTreeNode; import io.dataease.commons.model.BaseTreeNode;
import io.dataease.commons.utils.BeanUtils;
import io.dataease.commons.utils.TreeUtils; import io.dataease.commons.utils.TreeUtils;
import io.dataease.dto.dataset.DeSortDTO;
import io.dataease.plugins.common.base.domain.DatasetTable; import io.dataease.plugins.common.base.domain.DatasetTable;
import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.common.base.domain.Datasource;
import io.dataease.commons.constants.ColumnPermissionConstants; import io.dataease.commons.constants.ColumnPermissionConstants;
import io.dataease.i18n.Translator; import io.dataease.i18n.Translator;
import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO;
import io.dataease.plugins.common.dto.datasource.DeSortField;
import io.dataease.plugins.common.request.datasource.DatasourceRequest; import io.dataease.plugins.common.request.datasource.DatasourceRequest;
import io.dataease.plugins.datasource.provider.Provider; import io.dataease.plugins.datasource.provider.Provider;
import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.QueryProvider;
@ -48,11 +51,28 @@ public class DirectFieldService implements DataSetFieldService {
public List<Object> fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception { public List<Object> fieldValues(String fieldId, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception {
List<String> filedIds = new ArrayList<>(); List<String> filedIds = new ArrayList<>();
filedIds.add(fieldId); filedIds.add(fieldId);
return fieldValues(filedIds, userId, userPermissions, false, rowAndColumnMgm); return fieldValues(filedIds, null, userId, userPermissions, false, rowAndColumnMgm);
} }
@Override @Override
public List<Object> fieldValues(List<String> fieldIds, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception { public List<Object> fieldValues(String fieldId, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean rowAndColumnMgm) throws Exception {
List<String> filedIds = new ArrayList<>();
filedIds.add(fieldId);
return fieldValues(filedIds, sortDTO, userId, userPermissions, false, rowAndColumnMgm);
}
public List<DeSortField> buildSorts(List<DatasetTableField> allFields, DeSortDTO sortDTO) {
if (ObjectUtils.isEmpty(sortDTO) || StringUtils.isBlank(sortDTO.getId()) || StringUtils.isBlank(sortDTO.getSort()))
return null;
return allFields.stream().filter(field -> StringUtils.equals(sortDTO.getId(), field.getId())).map(field -> {
DeSortField deSortField = BeanUtils.copyBean(new DeSortField(), field);
deSortField.setOrderDirection(sortDTO.getSort());
return deSortField;
}).collect(Collectors.toList());
}
@Override
public List<Object> fieldValues(List<String> fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm) throws Exception {
String fieldId = fieldIds.get(0); String fieldId = fieldIds.get(0);
DatasetTableField field = dataSetTableFieldsService.selectByPrimaryKey(fieldId); DatasetTableField field = dataSetTableFieldsService.selectByPrimaryKey(fieldId);
if (field == null || StringUtils.isEmpty(field.getTableId())) return null; if (field == null || StringUtils.isEmpty(field.getTableId())) return null;
@ -62,6 +82,9 @@ public class DirectFieldService implements DataSetFieldService {
DatasetTableField datasetTableField = DatasetTableField.builder().tableId(field.getTableId()).checked(Boolean.TRUE).build(); DatasetTableField datasetTableField = DatasetTableField.builder().tableId(field.getTableId()).checked(Boolean.TRUE).build();
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField); List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
List<DeSortField> deSortFields = buildSorts(fields, sortDTO);
final List<String> allTableFieldIds = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); final List<String> allTableFieldIds = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList());
boolean multi = fieldIds.stream().anyMatch(item -> !allTableFieldIds.contains(item)); boolean multi = fieldIds.stream().anyMatch(item -> !allTableFieldIds.contains(item));
if (multi && needMapping) { if (multi && needMapping) {
@ -95,6 +118,8 @@ public class DirectFieldService implements DataSetFieldService {
} }
} }
DatasourceRequest datasourceRequest = new DatasourceRequest(); DatasourceRequest datasourceRequest = new DatasourceRequest();
Provider datasourceProvider = null; Provider datasourceProvider = null;
if (datasetTable.getMode() == 0) {// 直连 if (datasetTable.getMode() == 0) {// 直连
@ -110,18 +135,18 @@ public class DirectFieldService implements DataSetFieldService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) { if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) {
datasourceRequest.setTable(dataTableInfoDTO.getTable()); datasourceRequest.setTable(dataTableInfoDTO.getTable());
datasourceRequest.setQuery(qp.createQuerySQL(dataTableInfoDTO.getTable(), permissionFields, true, ds, customFilter)); datasourceRequest.setQuery(qp.createQuerySQL(dataTableInfoDTO.getTable(), permissionFields, true, ds, customFilter, deSortFields));
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) {
datasourceRequest.setQuery(qp.createQuerySQLAsTmp(dataTableInfoDTO.getSql(), permissionFields, true, customFilter)); datasourceRequest.setQuery(qp.createQuerySQLAsTmp(dataTableInfoDTO.getSql(), permissionFields, true, customFilter, deSortFields));
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) { } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) {
DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class);
List<DataSetTableUnionDTO> listUnion = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId()); List<DataSetTableUnionDTO> listUnion = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId());
String sql = dataSetTableService.getCustomSQLDatasource(dt, listUnion, ds); String sql = dataSetTableService.getCustomSQLDatasource(dt, listUnion, ds);
datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, permissionFields, true, customFilter)); datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, permissionFields, true, customFilter, deSortFields));
} else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "union")) { } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "union")) {
DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class);
String sql = (String) dataSetTableService.getUnionSQLDatasource(dt, ds).get("sql"); String sql = (String) dataSetTableService.getUnionSQLDatasource(dt, ds).get("sql");
datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, permissionFields, true, customFilter)); datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, permissionFields, true, customFilter, deSortFields));
} }
} else if (datasetTable.getMode() == 1) {// 抽取 } else if (datasetTable.getMode() == 1) {// 抽取
// 连接doris构建doris数据源查询 // 连接doris构建doris数据源查询

View File

@ -6,8 +6,82 @@
{{ item.name }}<i class="el-icon-arrow-down el-icon--right" /> {{ item.name }}<i class="el-icon-arrow-down el-icon--right" />
</el-tag> </el-tag>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item icon="el-icon-delete" :command="beforeClickItem('remove')">
<span>{{ $t('chart.delete') }}</span> <el-dropdown-item v-if="isSortWidget" :disabled="disabledSort" :command="beforeClickItem('none')">
<span class="de-sort-menu" :class="!disabledSort && (!sortNode || sortNode.sort === 'none') ? 'de-active-li': ''">{{ $t('chart.none') }}</span>
</el-dropdown-item>
<el-dropdown-item v-if="isSortWidget" :disabled="disabledSort" :command="beforeClickItem('asc')">
<span v-popover:popoverasc class="el-dropdown-link inner-dropdown-menu de-sort-menu" :class="!disabledSort && sortNode.sort === 'asc' ? 'de-active-li': ''">
<span>
<span>{{ $t('chart.asc') }}</span>
</span>
<i class="el-icon-arrow-right el-icon--right" />
</span>
<el-popover
ref="popoverasc"
v-model="ascFieldsShow"
placement="right-start"
width="120"
:close-delay="500"
trigger="hover"
>
<ul class="de-ul">
<li
v-for="(node, i) in allFields"
:key="node.id"
:index="i"
class="de-sort-field-span"
:class="sortNode.sort === 'asc' && sortNode.id === node.id ? 'de-active-li': ''"
@click="saveAscField(node)"
>
<span>{{ node.name }}</span>
</li>
</ul>
</el-popover>
</el-dropdown-item>
<el-dropdown-item v-if="isSortWidget" :disabled="disabledSort" :command="beforeClickItem('desc')">
<span v-popover:popoverdesc class="el-dropdown-link inner-dropdown-menu de-sort-menu" :class="!disabledSort && sortNode.sort === 'desc' ? 'de-active-li': ''">
<span>
<span>{{ $t('chart.desc') }}</span>
</span>
<i class="el-icon-arrow-right el-icon--right" />
</span>
<el-popover
ref="popoverdesc"
v-model="descFieldsShow"
placement="right-start"
width="120"
:close-delay="500"
trigger="hover"
>
<ul class="de-ul">
<li
v-for="(node, i) in allFields"
:key="node.id"
:index="i"
class="de-sort-field-span"
:class="sortNode.sort === 'desc' && sortNode.id === node.id ? 'de-active-li': ''"
@click="saveDescField(node)"
>
<span>{{ node.name }}</span>
</li>
</ul>
</el-popover>
</el-dropdown-item>
<!-- <el-dropdown-item :disabled="index" :command="beforeClickItem('customSort')">
<span class="de-sort-menu" :class="sortNode.sort === 'custom' ? 'de-active-li': ''">{{ $t('chart.custom_sort') }}</span>
</el-dropdown-item> -->
<el-dropdown-item :divided="isSortWidget" icon="el-icon-delete" :command="beforeClickItem('remove')">
<span class="de-delete-field">{{ $t('chart.delete') }}</span>
</el-dropdown-item> </el-dropdown-item>
<slot /> <slot />
</el-dropdown-menu> </el-dropdown-menu>
@ -27,22 +101,59 @@ export default {
index: { index: {
type: Number, type: Number,
required: true required: true
},
allFields: {
type: Array,
default: () => []
},
sort: {
type: Object,
default: () => null
},
isSortWidget: {
type: Boolean,
default: false
} }
}, },
data() { data() {
return { return {
radio: 0,
ascFieldsShow: false,
descFieldsShow: false,
defaultSortProp: {
sort: 'none'
},
sortNode: null
}
},
computed: {
disabledSort() {
return this.index > 0
} }
}, },
mounted() { mounted() {
}, },
created() {
if (!this.sortNode) {
this.sortNode = this.sort && this.sort.id ? JSON.parse(JSON.stringify(this.sort)) : JSON.parse(JSON.stringify(this.defaultSortProp))
// this.sortChange('none')
}
},
methods: { methods: {
clickItem(param) { clickItem(param) {
if (!param) { if (!param) {
return return
} }
switch (param.type) { switch (param.type) {
case 'rename': case 'none':
this.showRename() this.sortChange('none')
break
case 'asc':
this.sortChange('asc')
break
case 'desc':
this.sortChange('desc')
break break
case 'remove': case 'remove':
this.removeItem() this.removeItem()
@ -56,20 +167,38 @@ export default {
type: type type: type
} }
}, },
showRename() {
this.item.index = this.index
this.item.renameType = 'dimension'
this.$emit('onNameEdit', this.item)
},
removeItem() { removeItem() {
this.item.index = this.index this.item.index = this.index
this.$emit('closeItem', this.item) this.$emit('closeItem', this.item)
},
saveAscField({ id, name }) {
this.ascFieldsShow = false
const sort = 'asc'
this.sortNode = { id, name, sort }
this.$emit('sort-change', this.sortNode)
},
saveDescField({ id, name }) {
this.descFieldsShow = false
const sort = 'desc'
this.sortNode = { id, name, sort }
this.$emit('sort-change', this.sortNode)
},
sortChange(type) {
this.sortNode.sort = type
if (type === 'none') {
this.sortNode = { sort: 'none' }
}
this.$emit('sort-change', this.sortNode)
} }
} }
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.item-axis { .item-axis {
padding: 1px 6px; padding: 1px 6px;
margin: 0 3px 2px 3px; margin: 0 3px 2px 3px;
@ -90,4 +219,47 @@ export default {
span { span {
font-size: 12px; font-size: 12px;
} }
.de-ul li {
margin: 5px 2px;
cursor: pointer;
&:hover {
color: #409EFF;
border-color: rgb(198, 226, 255);
background-color: rgb(236, 245, 255);
}
&:before {
content: "";
width: 6px;
height: 6px;
display: inline-block;
border-radius: 50%;
vertical-align: middle;
margin-right: 5px;
}
}
.de-active-li {
&:before {
background: #409EFF;
}
}
.de-sort-menu::before {
content: "";
width: 6px;
height: 6px;
display: inline-block;
border-radius: 50%;
vertical-align: middle;
margin-right: 5px;
}
.de-delete-field {
margin-left: 4px;
}
.de-sort-field-span {
/* width: 80px;
max-width: 80px; */
display: inline-flexbox;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style> </style>

View File

@ -100,7 +100,7 @@ export default {
if (!token && linkToken) { if (!token && linkToken) {
method = linkMultFieldValues method = linkMultFieldValues
} }
const param = { fieldIds: this.element.options.attrs.fieldId.split(',') } const param = { fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }
if (this.panelInfo.proxy) { if (this.panelInfo.proxy) {
param.userId = this.panelInfo.proxy param.userId = this.panelInfo.proxy
} }
@ -121,10 +121,33 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.show = true this.show = true
}) })
},
'element.options.attrs.sort': function(value, old) {
if (value === null || typeof value === 'undefined' || value === old) return
this.datas = []
let method = multFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMultFieldValues
}
const param = { fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }
if (this.panelInfo.proxy) {
param.userId = this.panelInfo.proxy
}
this.element.options.attrs.fieldId &&
this.element.options.attrs.fieldId.length > 0 &&
method(param).then(res => {
this.datas = this.optionDatas(res.data)
}) || (this.element.options.value = '')
} }
}, },
created() { created() {
if (!this.element.options.attrs.sort) {
this.element.options.attrs.sort = {}
}
this.initLoad() this.initLoad()
}, },
mounted() { mounted() {
@ -155,7 +178,7 @@ export default {
if (!token && linkToken) { if (!token && linkToken) {
method = linkMultFieldValues method = linkMultFieldValues
} }
method({ fieldIds: this.element.options.attrs.fieldId.split(',') }).then(res => { method({ fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
}) })
} }

View File

@ -122,7 +122,7 @@ export default {
if (!token && linkToken) { if (!token && linkToken) {
method = linkMultFieldValues method = linkMultFieldValues
} }
const param = { fieldIds: this.element.options.attrs.fieldId.split(',') } const param = { fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }
if (this.panelInfo.proxy) { if (this.panelInfo.proxy) {
param.userId = this.panelInfo.proxy param.userId = this.panelInfo.proxy
} }
@ -149,9 +149,31 @@ export default {
this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length
} }
}) })
},
'element.options.attrs.sort': function(value, old) {
if (typeof value === 'undefined' || value === old) return
this.datas = []
let method = multFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMultFieldValues
}
const param = { fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }
if (this.panelInfo.proxy) {
param.userId = this.panelInfo.proxy
}
this.element.options.attrs.fieldId &&
this.element.options.attrs.fieldId.length > 0 &&
method(param).then(res => {
this.datas = this.optionDatas(res.data)
}) || (this.element.options.value = '')
} }
}, },
created() { created() {
if (!this.element.options.attrs.sort) {
this.element.options.attrs.sort = {}
}
this.initLoad() this.initLoad()
}, },
mounted() { mounted() {
@ -178,7 +200,7 @@ export default {
if (!token && linkToken) { if (!token && linkToken) {
method = linkMultFieldValues method = linkMultFieldValues
} }
method({ fieldIds: this.element.options.attrs.fieldId.split(',') }).then(res => { method({ fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
if (this.element.options.attrs.multiple) { if (this.element.options.attrs.multiple) {
this.checkAll = this.value.length === this.datas.length this.checkAll = this.value.length === this.datas.length

View File

@ -118,7 +118,7 @@ export default {
if (!token && linkToken) { if (!token && linkToken) {
method = linkMappingFieldValues method = linkMappingFieldValues
} }
const param = { fieldIds: this.element.options.attrs.fieldId.split(',') } const param = { fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }
if (this.panelInfo.proxy) { if (this.panelInfo.proxy) {
param.userId = this.panelInfo.proxy param.userId = this.panelInfo.proxy
} }
@ -162,10 +162,37 @@ export default {
this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas) this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas)
}) })
}) })
},
'element.options.attrs.sort': function(value, old) {
if (value === null || typeof value === 'undefined' || value === old) return
this.datas = []
let method = mappingFieldValues
const token = this.$store.getters.token || getToken()
const linkToken = this.$store.getters.linkToken || getLinkToken()
if (!token && linkToken) {
method = linkMappingFieldValues
}
const param = { fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }
if (this.panelInfo.proxy) {
param.userId = this.panelInfo.proxy
}
this.element.options.attrs.fieldId &&
this.element.options.attrs.fieldId.length > 0 &&
method(param).then(res => {
this.datas = this.optionDatas(res.data)
this.$nextTick(() => {
this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas)
})
})
this.element.options.value = ''
} }
}, },
created() { created() {
if (!this.element.options.attrs.sort) {
this.element.options.attrs.sort = {}
}
this.initLoad() this.initLoad()
}, },
mounted() { mounted() {
@ -206,7 +233,7 @@ export default {
if (!token && linkToken) { if (!token && linkToken) {
method = linkMappingFieldValues method = linkMappingFieldValues
} }
method({ fieldIds: this.element.options.attrs.fieldId.split(',') }).then(res => { method({ fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }).then(res => {
this.datas = this.optionDatas(res.data) this.datas = this.optionDatas(res.data)
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas) this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas)

View File

@ -18,7 +18,8 @@ const dialogPanel = {
label: 'text', label: 'text',
value: 'id', value: 'id',
fieldId: '', fieldId: '',
dragItems: [] dragItems: [],
sort: {}
}, },
value: '', value: '',
manualModify: false manualModify: false
@ -90,6 +91,10 @@ class NumberSelectGridServiceImpl extends WidgetService {
} }
return param return param
} }
isSortWidget() {
return true
}
fillValueDerfault(element) { fillValueDerfault(element) {
const defaultV = element.options.value === null ? '' : element.options.value.toString() const defaultV = element.options.value === null ? '' : element.options.value.toString()
if (element.options.attrs.multiple) { if (element.options.attrs.multiple) {

View File

@ -18,7 +18,8 @@ const dialogPanel = {
label: 'text', label: 'text',
value: 'id', value: 'id',
fieldId: '', fieldId: '',
dragItems: [] dragItems: [],
sort: {}
}, },
value: '', value: '',
manualModify: false manualModify: false
@ -91,6 +92,10 @@ class NumberSelectServiceImpl extends WidgetService {
} }
return param return param
} }
isSortWidget() {
return true
}
fillValueDerfault(element) { fillValueDerfault(element) {
const defaultV = element.options.value === null ? '' : element.options.value.toString() const defaultV = element.options.value === null ? '' : element.options.value.toString()
if (element.options.attrs.multiple) { if (element.options.attrs.multiple) {

View File

@ -18,7 +18,8 @@ const dialogPanel = {
label: 'text', label: 'text',
value: 'id', value: 'id',
fieldId: '', fieldId: '',
dragItems: [] dragItems: [],
sort: {}
}, },
value: '', value: '',
manualModify: false manualModify: false
@ -90,6 +91,10 @@ class TextSelectGridServiceImpl extends WidgetService {
} }
return param return param
} }
isSortWidget() {
return true
}
fillValueDerfault(element) { fillValueDerfault(element) {
const defaultV = element.options.value === null ? '' : element.options.value.toString() const defaultV = element.options.value === null ? '' : element.options.value.toString()
if (element.options.attrs.multiple) { if (element.options.attrs.multiple) {

View File

@ -17,7 +17,8 @@ const dialogPanel = {
label: 'text', label: 'text',
value: 'id', value: 'id',
fieldId: '', fieldId: '',
dragItems: [] dragItems: [],
sort: {}
}, },
value: '', value: '',
manualModify: false manualModify: false
@ -92,6 +93,9 @@ class TextSelectServiceImpl extends WidgetService {
} }
return param return param
} }
isSortWidget() {
return true
}
fillValueDerfault(element) { fillValueDerfault(element) {
const defaultV = element.options.value === null ? '' : element.options.value.toString() const defaultV = element.options.value === null ? '' : element.options.value.toString()

View File

@ -17,7 +17,8 @@ const dialogPanel = {
label: 'text', label: 'text',
value: 'id', value: 'id',
fieldId: '', fieldId: '',
dragItems: [] dragItems: [],
sort: {}
}, },
value: '', value: '',
manualModify: false manualModify: false
@ -96,6 +97,9 @@ class TextSelectTreeServiceImpl extends WidgetService {
} }
return param return param
} }
isSortWidget() {
return true
}
fillValueDerfault(element) { fillValueDerfault(element) {
const defaultV = element.options.value === null ? '' : element.options.value.toString() const defaultV = element.options.value === null ? '' : element.options.value.toString()

View File

@ -181,7 +181,7 @@
<de-main-container class="ms-main-container"> <de-main-container class="ms-main-container">
<div v-if="currentElement.options && currentElement.options.attrs"> <div v-if="currentElement.options && currentElement.options.attrs">
<filter-head :element="currentElement" /> <filter-head :element="currentElement" :all-fields="allFields" :widget="widget" />
<filter-control :element="currentElement" :widget="widget" :control-attrs="myAttrs" :child-views="childViews" /> <filter-control :element="currentElement" :widget="widget" :control-attrs="myAttrs" :child-views="childViews" />
@ -294,7 +294,8 @@ export default {
childViews: { childViews: {
viewInfos: [] viewInfos: []
}, },
currentElement: null currentElement: null,
allFields: []
} }
}, },
computed: { computed: {
@ -318,6 +319,7 @@ export default {
} }
this.enableSureButton() this.enableSureButton()
}, },
keyWord(val) { keyWord(val) {
this.expandedArray = [] this.expandedArray = []
if (this.showDomType === 'field') { if (this.showDomType === 'field') {
@ -546,6 +548,7 @@ export default {
loadField(tableId) { loadField(tableId) {
fieldListWithPermission(tableId).then(res => { fieldListWithPermission(tableId).then(res => {
let datas = res.data let datas = res.data
this.allFields = JSON.parse(JSON.stringify(datas))
if (this.widget && this.widget.filterFieldMethod) { if (this.widget && this.widget.filterFieldMethod) {
datas = this.widget.filterFieldMethod(datas) datas = this.widget.filterFieldMethod(datas)
} }
@ -556,6 +559,7 @@ export default {
comLoadField(tableId) { comLoadField(tableId) {
fieldListWithPermission(tableId).then(res => { fieldListWithPermission(tableId).then(res => {
let datas = res.data let datas = res.data
this.allFields = JSON.parse(JSON.stringify(datas))
if (this.widget && this.widget.filterFieldMethod) { if (this.widget && this.widget.filterFieldMethod) {
datas = this.widget.filterFieldMethod(datas) datas = this.widget.filterFieldMethod(datas)
} }

View File

@ -16,28 +16,12 @@
style="width:100%;height: 100%;margin:0 10px;border-radius: 4px;overflow-x: auto;display: flex;align-items: center;" style="width:100%;height: 100%;margin:0 10px;border-radius: 4px;overflow-x: auto;display: flex;align-items: center;"
@end="end2" @end="end2"
> >
<!-- <div class="list-group-container">
<drag-item
v-for="(item,index) in element.options.attrs.dragItems"
:key="item.id"
:item="item"
:index="index"
@closeItem="closeItem"
/>
</div> -->
<v-flex v-for="(item,index) in element.options.attrs.dragItems" :key="item.id"> <v-flex v-for="(item,index) in element.options.attrs.dragItems" :key="item.id">
<drag-item :key="item.id" :item="item" :index="index" @closeItem="closeItem" /> <drag-item :key="item.id" :is-sort-widget="isSortWidget" :item="item" :index="index" :sort="element.options.attrs.sort" :all-fields="index ? [] : allFields" @closeItem="closeItem" @sort-change="sortChange" />
</v-flex> </v-flex>
<!-- <transition-group class="list-group" :data-value="$t('panel.drag_here')">
<drag-item
v-for="(item,index) in element.options.attrs.dragItems"
:key="item.id"
:item="item"
:index="index"
@closeItem="closeItem"
/>
</transition-group> -->
<span solt="footer">{{ $t('panel.drag_here') }}</span> <span solt="footer">{{ $t('panel.drag_here') }}</span>
</draggable> </draggable>
</el-row> </el-row>
@ -61,6 +45,14 @@ export default {
element: { element: {
type: Object, type: Object,
default: () => {} default: () => {}
},
allFields: {
type: Array,
default: () => []
},
widget: {
type: Object,
default: null
} }
}, },
data() { data() {
@ -68,11 +60,17 @@ export default {
targets: [] targets: []
} }
}, },
computed: {
isSortWidget() {
return this.widget && this.widget.isSortWidget && this.widget.isSortWidget()
}
},
watch: { watch: {
}, },
created() { created() {
}, },
methods: { methods: {
onMove(e, originalEvent) { onMove(e, originalEvent) {
@ -84,6 +82,13 @@ export default {
closeItem(tag) { closeItem(tag) {
const index = tag.index const index = tag.index
this.element.options.attrs.dragItems.splice(index, 1) this.element.options.attrs.dragItems.splice(index, 1)
if (!index) {
this.element.options.attrs.sort = null
}
},
sortChange(param) {
this.element.options.attrs.sort = param
// this.$emit('sort-change', param)
} }
} }
} }