diff --git a/core/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java b/core/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java index 635da3b188..b0affa8cfd 100644 --- a/core/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java +++ b/core/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java @@ -46,4 +46,5 @@ public class ChartViewDTO extends ChartViewWithBLOBs { private long totalItems; private int datasetMode; private String datasourceType; + private Boolean aggregate; } diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index 482b541015..d845cf1e8b 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -28,6 +28,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -777,12 +778,15 @@ public class DorisQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -823,21 +827,29 @@ public class DorisQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(DorisConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(DorisConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(DorisConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(DorisConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -849,6 +861,9 @@ public class DorisQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java index acdd4ac67a..6805237353 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java @@ -28,6 +28,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -383,12 +384,15 @@ public class MysqlQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -431,22 +435,29 @@ public class MysqlQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(MysqlConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(MysqlConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(MysqlConstants.AGG_FIELD, "max", originField); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(MysqlConstants.AGG_FIELD, "max", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yFields.add(getXFields(x, fieldName, fieldAlias)); - - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -458,6 +469,9 @@ public class MysqlQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index bf0037d7f0..fc60502d55 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -27,6 +27,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -771,12 +772,15 @@ public class CKQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -817,21 +821,29 @@ public class CKQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(CKConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(CKConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(CKConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(CKConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -843,6 +855,9 @@ public class CKQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java index 5b1a66e3ed..6204522966 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java @@ -29,6 +29,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -756,12 +757,15 @@ public class Db2QueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -802,21 +806,29 @@ public class Db2QueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(Db2Constants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(Db2Constants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(Db2Constants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(Db2Constants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -828,6 +840,9 @@ public class Db2QueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java index 577e684448..cf415b8b5e 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java @@ -25,6 +25,7 @@ import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -771,12 +772,15 @@ public class EsQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -827,21 +831,29 @@ public class EsQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(EsSqlLConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(EsSqlLConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(EsSqlLConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(EsSqlLConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -853,6 +865,9 @@ public class EsQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java index b239e216d5..0c2feffc45 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java @@ -26,6 +26,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -720,12 +721,15 @@ public class HiveQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -766,21 +770,29 @@ public class HiveQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(HiveConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(HiveConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(HiveConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(HiveConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -792,6 +804,9 @@ public class HiveQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java index 1828db449f..bc821a16cf 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java @@ -26,6 +26,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -724,12 +725,15 @@ public class ImpalaQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -770,21 +774,29 @@ public class ImpalaQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(ImpalaConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(ImpalaConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(ImpalaConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(ImpalaConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -796,6 +808,9 @@ public class ImpalaQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java index 6ed2e479c6..312243c7d9 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java @@ -26,6 +26,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -696,12 +697,15 @@ public class MongoQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -742,22 +746,31 @@ public class MongoQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(MongoConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(MongoConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(MongoConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(MongoConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } + // 处理横轴排序 if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) { xOrders.add(SQLObj.builder() @@ -767,6 +780,9 @@ public class MongoQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index 43cec13ccb..6fa4e26026 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -27,6 +27,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -417,12 +418,15 @@ public class MysqlQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -463,21 +467,29 @@ public class MysqlQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(MySQLConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(MySQLConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(MySQLConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(MySQLConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -489,6 +501,9 @@ public class MysqlQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java index 6544bbd6ab..aa14257f0a 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java @@ -30,6 +30,7 @@ import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import io.dataease.service.chart.ChartFilterTreeService; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -826,12 +827,15 @@ public class OracleQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -872,21 +876,29 @@ public class OracleQueryProvider extends QueryProvider { } String fieldAlias = String.format(OracleConstants.ALIAS_FIX, String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i)); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(OracleConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(OracleConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(OracleConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(OracleConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -898,6 +910,9 @@ public class OracleQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java index 3d2a3a6810..f8ce5c2c92 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java @@ -29,6 +29,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -755,12 +756,15 @@ public class PgQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -801,21 +805,29 @@ public class PgQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(PgConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(PgConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(PgConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(PgConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -827,6 +839,9 @@ public class PgQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java index e39776a3ad..5c0245b434 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java @@ -27,6 +27,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -756,12 +757,15 @@ public class RedshiftQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -802,21 +806,29 @@ public class RedshiftQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(PgConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(PgConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(PgConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(PgConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -828,6 +840,9 @@ public class RedshiftQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index bec8a38d11..8021fe0c21 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -28,6 +28,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -842,12 +843,15 @@ public class SqlserverQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -888,21 +892,29 @@ public class SqlserverQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -914,6 +926,9 @@ public class SqlserverQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/core/backend/src/main/resources/db/migration/V60__1.18-table-desc-update.sql b/core/backend/src/main/resources/db/migration/V60__1.18-table-desc-update.sql deleted file mode 100644 index a8e5e53ee6..0000000000 --- a/core/backend/src/main/resources/db/migration/V60__1.18-table-desc-update.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE `sys_auth` - MODIFY COLUMN `auth_details` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '授权明细' AFTER `auth_time`; - -ALTER TABLE `sys_auth_detail` - MODIFY COLUMN `privilege_type` int(6) NULL DEFAULT NULL COMMENT '权限类型:1 使用/查看 3 导出/管理 5 仪表板管理 15 授权' AFTER `privilege_name`, - MODIFY COLUMN `privilege_value` int(6) NULL DEFAULT NULL COMMENT '权限值:1 可用 0 不可用' AFTER `privilege_type`; diff --git a/core/backend/src/main/resources/db/migration/V61__1.18.15-chart-view-update.sql b/core/backend/src/main/resources/db/migration/V61__1.18.15-chart-view-update.sql new file mode 100644 index 0000000000..2e927f462f --- /dev/null +++ b/core/backend/src/main/resources/db/migration/V61__1.18.15-chart-view-update.sql @@ -0,0 +1,2 @@ + alter table `chart_view` + add `_aggregate` TINYINT(1) default 0 null comment 'aggregate'; diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index 3e7221d409..dcc7239e94 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -1287,6 +1287,7 @@ export default { map_range: 'Map range', select_map_range: 'Please select map range', area: 'Area', + aggregate: 'Aggregate', placeholder_field: 'Drag Field To Here', axis_label_rotate: 'Label Rotate', chart_scatter_bubble: 'Bubble', diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index 67a09dc11e..269032e748 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -1285,6 +1285,7 @@ export default { select_map_range: '請選擇地圖範圍', area: '地區', stack_item: '堆疊項', + aggregate: '聚合', placeholder_field: '拖動字段至此處', axis_label_rotate: '標簽角度', chart_scatter_bubble: '氣泡圖', diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index 09972e1a73..c246e89f70 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -1285,6 +1285,7 @@ export default { select_map_range: '请选择地图范围', area: '地区', stack_item: '堆叠项', + aggregate: '聚合', placeholder_field: '拖动字段至此处', axis_label_rotate: '标签角度', chart_scatter_bubble: '气泡图', diff --git a/core/frontend/src/views/chart/chart/bar/bar_antv.js b/core/frontend/src/views/chart/chart/bar/bar_antv.js index c3bfb8e4eb..4cea5a2f12 100644 --- a/core/frontend/src/views/chart/chart/bar/bar_antv.js +++ b/core/frontend/src/views/chart/chart/bar/bar_antv.js @@ -12,8 +12,8 @@ import { setGradientColor, getMeta } from '@/views/chart/chart/common/common_antv' -import { antVCustomColor, handleEmptyDataStrategy } from '@/views/chart/chart/util' -import _ from 'lodash' +import { antVCustomColor, getColors, handleEmptyDataStrategy, hexColorToRGBA } from '@/views/chart/chart/util' +import { cloneDeep, find } from 'lodash-es' export function baseBarOptionAntV(plot, container, chart, action, isGroup, isStack) { // theme @@ -26,7 +26,7 @@ export function baseBarOptionAntV(plot, container, chart, action, isGroup, isSta const xAxis = getXAxis(chart) const yAxis = getYAxis(chart) // data - const data = _.cloneDeep(chart.data.data) + const data = cloneDeep(chart.data.data) // config const slider = getSlider(chart) const analyse = getAnalyse(chart) @@ -153,7 +153,7 @@ export function hBaseBarOptionAntV(plot, container, chart, action, isGroup, isSt const xAxis = getXAxis(chart) const yAxis = getYAxis(chart) // data - const data = _.cloneDeep(chart.data.data) + const data = cloneDeep(chart.data.data) // config const slider = getSlider(chart) const analyse = getAnalyse(chart) @@ -263,17 +263,27 @@ export function hBaseBarOptionAntV(plot, container, chart, action, isGroup, isSt } export function timeRangeBarOptionAntV(plot, container, chart, action) { + const ifAggregate = !!chart.aggregate + // theme const theme = getTheme(chart) // attr const label = getLabel(chart) + if (label && !ifAggregate) { + label.layout = [ + { type: 'interval-adjust-position' }, + { type: 'interval-hide-overlap' }, + { type: 'limit-in-plot', cfg: { action: 'hide' }} + ] + } + const tooltip = getTooltip(chart) // style const legend = getLegend(chart) const yAxis = getXAxis(chart) const xAxis = getYAxis(chart) // data - const data = _.cloneDeep(chart.data.data) + const data = cloneDeep(chart.data.data) const isDate = !!chart.data.isDate @@ -292,7 +302,7 @@ export function timeRangeBarOptionAntV(plot, container, chart, action) { data: data, xField: 'values', yField: 'field', - seriesField: 'category', + colorFiled: 'category', appendPadding: getPadding(chart), label: label, tooltip: tooltip, @@ -339,19 +349,32 @@ export function timeRangeBarOptionAntV(plot, container, chart, action) { ] } + if (ifAggregate) { + options.seriesField = 'category' + delete options.isGroup + delete options.isStack + } else { + options.isGroup = true + options.isStack = true + } + if (isDate) { options.meta = { values: { type: 'time', min: minTime, - max: maxTime + max: maxTime, + mask: 'YYYY-MM-DD HH:mm:ss', + key: true } } } else { options.meta = { values: { min: minNumber, - max: maxNumber + max: maxNumber, + mask: 'YYYY-MM-DD HH:mm:ss', + key: true } } } @@ -370,17 +393,39 @@ export function timeRangeBarOptionAntV(plot, container, chart, action) { } } - delete options.isGroup - delete options.isStack - options.isPercent = chart.type.includes('percentage') // custom color - options.color = antVCustomColor(chart) - if (customAttr.color.gradient) { - options.color = options.color.map((ele) => { - return setGradientColor(ele, customAttr.color.gradient) - }) + if (ifAggregate) { + options.color = antVCustomColor(chart) + if (customAttr.color.gradient) { + options.color = options.color.map((ele) => { + return setGradientColor(ele, customAttr.color.gradient) + }) + } + } else { + if (chart.customAttr) { + // color + if (customAttr.color) { + const c = JSON.parse(JSON.stringify(customAttr.color)) + const customColors = getColors(chart, c.colors, false) + options.color = function(obj) { + const colorObj = find(customColors, (o) => { + return o.name === obj.field + }) + if (colorObj === undefined) { + return undefined + } + const color = hexColorToRGBA(colorObj.color, c.alpha) + if (customAttr.color.gradient) { + return setGradientColor(color, customAttr.color.gradient) + } else { + return color + } + } + } + } } + // 处理空值 if (chart.senior) { let emptyDataStrategy = JSON.parse(chart.senior)?.functionCfg?.emptyDataStrategy @@ -415,7 +460,7 @@ export function baseBidirectionalBarOptionAntV(plot, container, chart, action, i // 处理横轴标题方向不对 yAxis?.title && (yAxis.title.autoRotate = false) // data - const data = _.cloneDeep(chart.data.data) + const data = cloneDeep(chart.data.data) // options const options = { theme: theme, diff --git a/core/frontend/src/views/chart/chart/util.js b/core/frontend/src/views/chart/chart/util.js index ceede3c23f..bae35d77ae 100644 --- a/core/frontend/src/views/chart/chart/util.js +++ b/core/frontend/src/views/chart/chart/util.js @@ -3526,10 +3526,30 @@ export function customColor(custom, res, colors) { } export function getColors(chart, colors, reset) { + const ifAggregate = !!chart.aggregate // 自定义颜色,先按照没有设定的情况,并排好序,当做最终结果 let seriesColors = [] let series - if (chart.type.includes('stack')) { + if (!ifAggregate && chart.type === 'bar-time-range') { + if (chart.data && chart.data.data && chart.data.data.length > 0) { + // 只能处理field字段 + const groups = [] + for (let i = 0; i < chart.data.data.length; i++) { + const name = chart.data.data[i].field + if (groups.indexOf(name) < 0) { + groups.push(name) + } + } + for (let i = 0; i < groups.length; i++) { + const s = groups[i] + seriesColors.push({ + name: s, + color: colors[i % colors.length], + isCustom: false + }) + } + } + } else if (chart.type.includes('stack')) { if (chart.data) { const data = chart.data.data const stackData = [] diff --git a/core/frontend/src/views/chart/view/ChartEdit.vue b/core/frontend/src/views/chart/view/ChartEdit.vue index bdad6a9b96..4968205b37 100644 --- a/core/frontend/src/views/chart/view/ChartEdit.vue +++ b/core/frontend/src/views/chart/view/ChartEdit.vue @@ -1192,6 +1192,21 @@ {{ $t('chart.placeholder_field') }} + + + {{ $t('chart.aggregate') }}{{ $t('chart.chart_bar_time') }} + + + + {{ $t('chart.aggregate') }} + + @@ -3400,6 +3415,9 @@ export default { drillItemChange(item) { this.calcData(true) }, + aggregateChange() { + this.calcData(true) + }, drillItemRemove(item) { this.view.drillFields.splice(item.index, 1) this.calcData(true) diff --git a/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java b/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java index 2e85f60bed..4b86978dfb 100644 --- a/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java +++ b/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java @@ -28,6 +28,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -473,12 +474,15 @@ public class DmQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -525,22 +529,31 @@ public class DmQueryProvider extends QueryProvider { String fieldAlias = String.format(OracleConstants.ALIAS_FIX, String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i)); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(OracleConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(OracleConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(OracleConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(OracleConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } + // 处理横轴排序 if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) { xOrders.add(SQLObj.builder() @@ -550,6 +563,9 @@ public class DmQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } // 处理视图中字段过滤 diff --git a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java index 036749d4ea..292735e89f 100644 --- a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java +++ b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java @@ -28,6 +28,7 @@ import io.dataease.plugins.datasource.kingbase.provider.KingbaseConfig; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -460,12 +461,15 @@ public class KingbaseQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -510,22 +514,31 @@ public class KingbaseQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(KingbaseConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(KingbaseConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(KingbaseConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(KingbaseConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } + // 处理横轴排序 if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) { xOrders.add(SQLObj.builder() @@ -535,6 +548,9 @@ public class KingbaseQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java b/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java index 4c67f4e679..ad524c2124 100644 --- a/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java +++ b/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java @@ -22,6 +22,7 @@ import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeIt import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.query.QueryProvider; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -369,12 +370,16 @@ public class KylinQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -415,22 +420,31 @@ public class KylinQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(KylinConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(KylinConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(KylinConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(KylinConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } + // 处理横轴排序 if (StringUtils.isNotEmpty(x.getSort()) && !StringUtils.equalsIgnoreCase(x.getSort(), "none")) { xOrders.add(SQLObj.builder() @@ -440,6 +454,9 @@ public class KylinQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java b/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java index 8fbad1e044..0df45dd8e6 100644 --- a/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java +++ b/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java @@ -26,6 +26,7 @@ import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -374,12 +375,15 @@ public class MaxcomputeQueryProvider extends QueryProvider { .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -420,22 +424,31 @@ public class MaxcomputeQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(MaxConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(MaxConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(MaxConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(MaxConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } + // 处理横轴排序 if (StringUtils.isNotEmpty(x.getSort()) && !StringUtils.equalsIgnoreCase(x.getSort(), "none")) { xOrders.add(SQLObj.builder() @@ -445,6 +458,9 @@ public class MaxcomputeQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java b/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java index fe5bbe0374..5966b54da8 100644 --- a/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java +++ b/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java @@ -24,6 +24,7 @@ import io.dataease.plugins.datasource.entity.PageInfo; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -375,12 +376,15 @@ public class MongobiQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -421,22 +425,31 @@ public class MongobiQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(MongoConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(MongoConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(MongoConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(MongoConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } + // 处理横轴排序 if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) { xOrders.add(SQLObj.builder() @@ -446,6 +459,9 @@ public class MongobiQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java b/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java index 2c3cf4e0cd..931b0791f5 100644 --- a/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java +++ b/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java @@ -26,6 +26,7 @@ import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.query.QueryProvider; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -371,12 +372,15 @@ public class PrestoQueryProvider extends QueryProvider { .build(); setSchema(tableObj, ds); List xFields = new ArrayList<>(); + List xFields2Tail = new ArrayList<>(); List xOrders = new ArrayList<>(); List yFields = new ArrayList<>(); // 要把两个时间字段放进y里面 List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); + boolean ifAggregate = BooleanUtils.isTrue(view.getAggregate()); + if (CollectionUtils.isNotEmpty(xAxis)) { for (int i = 0; i < xAxis.size(); i++) { ChartViewFieldDTO x = xAxis.get(i); @@ -417,21 +421,29 @@ public class PrestoQueryProvider extends QueryProvider { } String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); - if (i == baseXAxis.size()) {// 起止时间 - String fieldName = String.format(PrestoConstants.AGG_FIELD, "min", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + if (ifAggregate) { + if (i == baseXAxis.size()) {// 起止时间 + String fieldName = String.format(PrestoConstants.AGG_FIELD, "min", originField); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); - } else if (i == baseXAxis.size() + 1) { - String fieldName = String.format(PrestoConstants.AGG_FIELD, "max", originField); + } else if (i == baseXAxis.size() + 1) { + String fieldName = String.format(PrestoConstants.AGG_FIELD, "max", originField); - yFields.add(getXFields(x, fieldName, fieldAlias)); + yFields.add(getXFields(x, fieldName, fieldAlias)); - yWheres.add(getYWheres(x, originField, fieldAlias)); + yWheres.add(getYWheres(x, originField, fieldAlias)); + } else { + // 处理横轴字段 + xFields.add(getXFields(x, originField, fieldAlias)); + } } else { - // 处理横轴字段 - xFields.add(getXFields(x, originField, fieldAlias)); + if (i == baseXAxis.size() || i == baseXAxis.size() + 1) {// 起止时间 + xFields2Tail.add(getXFields(x, originField, fieldAlias)); + } else { + xFields.add(getXFields(x, originField, fieldAlias)); + } } // 处理横轴排序 @@ -443,6 +455,9 @@ public class PrestoQueryProvider extends QueryProvider { .build()); } } + if (!ifAggregate) { //把起止时间放到数组最后 + xFields.addAll(xFields2Tail); + } } diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartView.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartView.java index 670b975819..fb5dae637d 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartView.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartView.java @@ -43,5 +43,7 @@ public class ChartView implements Serializable { private Integer refreshTime; + private Boolean aggregate; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartViewExample.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartViewExample.java index 30a9cf263f..83bc529f6e 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartViewExample.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/ChartViewExample.java @@ -1373,6 +1373,66 @@ public class ChartViewExample { addCriterion("refresh_time not between", value1, value2, "refreshTime"); return (Criteria) this; } + + public Criteria andAggregateIsNull() { + addCriterion("_aggregate is null"); + return (Criteria) this; + } + + public Criteria andAggregateIsNotNull() { + addCriterion("_aggregate is not null"); + return (Criteria) this; + } + + public Criteria andAggregateEqualTo(Boolean value) { + addCriterion("_aggregate =", value, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateNotEqualTo(Boolean value) { + addCriterion("_aggregate <>", value, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateGreaterThan(Boolean value) { + addCriterion("_aggregate >", value, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateGreaterThanOrEqualTo(Boolean value) { + addCriterion("_aggregate >=", value, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateLessThan(Boolean value) { + addCriterion("_aggregate <", value, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateLessThanOrEqualTo(Boolean value) { + addCriterion("_aggregate <=", value, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateIn(List values) { + addCriterion("_aggregate in", values, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateNotIn(List values) { + addCriterion("_aggregate not in", values, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateBetween(Boolean value1, Boolean value2) { + addCriterion("_aggregate between", value1, value2, "aggregate"); + return (Criteria) this; + } + + public Criteria andAggregateNotBetween(Boolean value1, Boolean value2) { + addCriterion("_aggregate not between", value1, value2, "aggregate"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/ChartViewMapper.xml b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/ChartViewMapper.xml index 806d923f3e..c20372413f 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/ChartViewMapper.xml +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/ChartViewMapper.xml @@ -21,6 +21,7 @@ + @@ -98,7 +99,7 @@ id, `name`, title, scene_id, table_id, `type`, render, result_count, result_mode, create_by, create_time, update_time, style_priority, chart_type, is_plugin, data_from, - refresh_view_enable, refresh_unit, refresh_time + refresh_view_enable, refresh_unit, refresh_time, _aggregate x_axis, x_axis_ext, y_axis, y_axis_ext, ext_stack, ext_bubble, custom_attr, custom_style, @@ -159,22 +160,24 @@ create_by, create_time, update_time, style_priority, chart_type, is_plugin, data_from, refresh_view_enable, refresh_unit, - refresh_time, x_axis, x_axis_ext, - y_axis, y_axis_ext, ext_stack, - ext_bubble, custom_attr, custom_style, - custom_filter, drill_fields, senior, - snapshot, view_fields) + refresh_time, _aggregate, x_axis, + x_axis_ext, y_axis, y_axis_ext, + ext_stack, ext_bubble, custom_attr, + custom_style, custom_filter, drill_fields, + senior, snapshot, view_fields + ) values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR}, #{sceneId,jdbcType=VARCHAR}, #{tableId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{render,jdbcType=VARCHAR}, #{resultCount,jdbcType=INTEGER}, #{resultMode,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{stylePriority,jdbcType=VARCHAR}, #{chartType,jdbcType=VARCHAR}, #{isPlugin,jdbcType=BIT}, #{dataFrom,jdbcType=VARCHAR}, #{refreshViewEnable,jdbcType=BIT}, #{refreshUnit,jdbcType=VARCHAR}, - #{refreshTime,jdbcType=INTEGER}, #{xAxis,jdbcType=LONGVARCHAR}, #{xAxisExt,jdbcType=LONGVARCHAR}, - #{yAxis,jdbcType=LONGVARCHAR}, #{yAxisExt,jdbcType=LONGVARCHAR}, #{extStack,jdbcType=LONGVARCHAR}, - #{extBubble,jdbcType=LONGVARCHAR}, #{customAttr,jdbcType=LONGVARCHAR}, #{customStyle,jdbcType=LONGVARCHAR}, - #{customFilter,jdbcType=LONGVARCHAR}, #{drillFields,jdbcType=LONGVARCHAR}, #{senior,jdbcType=LONGVARCHAR}, - #{snapshot,jdbcType=LONGVARCHAR}, #{viewFields,jdbcType=LONGVARCHAR}) + #{refreshTime,jdbcType=INTEGER}, #{aggregate,jdbcType=BIT}, #{xAxis,jdbcType=LONGVARCHAR}, + #{xAxisExt,jdbcType=LONGVARCHAR}, #{yAxis,jdbcType=LONGVARCHAR}, #{yAxisExt,jdbcType=LONGVARCHAR}, + #{extStack,jdbcType=LONGVARCHAR}, #{extBubble,jdbcType=LONGVARCHAR}, #{customAttr,jdbcType=LONGVARCHAR}, + #{customStyle,jdbcType=LONGVARCHAR}, #{customFilter,jdbcType=LONGVARCHAR}, #{drillFields,jdbcType=LONGVARCHAR}, + #{senior,jdbcType=LONGVARCHAR}, #{snapshot,jdbcType=LONGVARCHAR}, #{viewFields,jdbcType=LONGVARCHAR} + ) insert into chart_view @@ -236,6 +239,9 @@ refresh_time, + + _aggregate, + x_axis, @@ -334,6 +340,9 @@ #{refreshTime,jdbcType=INTEGER}, + + #{aggregate,jdbcType=BIT}, + #{xAxis,jdbcType=LONGVARCHAR}, @@ -441,6 +450,9 @@ refresh_time = #{record.refreshTime,jdbcType=INTEGER}, + + _aggregate = #{record.aggregate,jdbcType=BIT}, + x_axis = #{record.xAxis,jdbcType=LONGVARCHAR}, @@ -506,6 +518,7 @@ refresh_view_enable = #{record.refreshViewEnable,jdbcType=BIT}, refresh_unit = #{record.refreshUnit,jdbcType=VARCHAR}, refresh_time = #{record.refreshTime,jdbcType=INTEGER}, + _aggregate = #{record.aggregate,jdbcType=BIT}, x_axis = #{record.xAxis,jdbcType=LONGVARCHAR}, x_axis_ext = #{record.xAxisExt,jdbcType=LONGVARCHAR}, y_axis = #{record.yAxis,jdbcType=LONGVARCHAR}, @@ -543,7 +556,8 @@ data_from = #{record.dataFrom,jdbcType=VARCHAR}, refresh_view_enable = #{record.refreshViewEnable,jdbcType=BIT}, refresh_unit = #{record.refreshUnit,jdbcType=VARCHAR}, - refresh_time = #{record.refreshTime,jdbcType=INTEGER} + refresh_time = #{record.refreshTime,jdbcType=INTEGER}, + _aggregate = #{record.aggregate,jdbcType=BIT} @@ -605,6 +619,9 @@ refresh_time = #{refreshTime,jdbcType=INTEGER}, + + _aggregate = #{aggregate,jdbcType=BIT}, + x_axis = #{xAxis,jdbcType=LONGVARCHAR}, @@ -667,6 +684,7 @@ refresh_view_enable = #{refreshViewEnable,jdbcType=BIT}, refresh_unit = #{refreshUnit,jdbcType=VARCHAR}, refresh_time = #{refreshTime,jdbcType=INTEGER}, + _aggregate = #{aggregate,jdbcType=BIT}, x_axis = #{xAxis,jdbcType=LONGVARCHAR}, x_axis_ext = #{xAxisExt,jdbcType=LONGVARCHAR}, y_axis = #{yAxis,jdbcType=LONGVARCHAR}, @@ -701,7 +719,8 @@ data_from = #{dataFrom,jdbcType=VARCHAR}, refresh_view_enable = #{refreshViewEnable,jdbcType=BIT}, refresh_unit = #{refreshUnit,jdbcType=VARCHAR}, - refresh_time = #{refreshTime,jdbcType=INTEGER} + refresh_time = #{refreshTime,jdbcType=INTEGER}, + _aggregate = #{aggregate,jdbcType=BIT} where id = #{id,jdbcType=VARCHAR} \ No newline at end of file diff --git a/sdk/dataease-plugin-common/src/main/resources/generatorConfig.xml b/sdk/dataease-plugin-common/src/main/resources/generatorConfig.xml index a395b57a56..930744a03e 100644 --- a/sdk/dataease-plugin-common/src/main/resources/generatorConfig.xml +++ b/sdk/dataease-plugin-common/src/main/resources/generatorConfig.xml @@ -63,7 +63,7 @@ - +