From 36935296355b314aba4d165a668ba20f70390b0f Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 31 Oct 2023 14:50:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20antv=20=E6=95=A3=E7=82=B9=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/chart/AxisChartDataAntVDTO.java | 2 + .../engine/doris/DorisQueryProvider.java | 31 ++++- .../engine/mysql/MysqlQueryProvider.java | 31 ++++- .../provider/query/api/ApiProvider.java | 4 +- .../provider/query/ck/CKQueryProvider.java | 33 +++++- .../provider/query/db2/Db2QueryProvider.java | 31 ++++- .../provider/query/es/EsQueryProvider.java | 31 ++++- .../query/hive/HiveQueryProvider.java | 55 ++++++--- .../query/impala/ImpalaQueryProvider.java | 62 ++++++---- .../query/mongodb/MongoQueryProvider.java | 33 +++++- .../query/mysql/MysqlQueryProvider.java | 33 +++++- .../query/oracle/OracleQueryProvider.java | 45 ++++++-- .../provider/query/pg/PgQueryProvider.java | 43 +++++-- .../query/redshift/RedshiftQueryProvider.java | 49 +++++--- .../sqlserver/SqlserverQueryProvider.java | 75 +++++++----- .../service/chart/ChartViewService.java | 24 ++-- .../service/chart/util/ChartDataBuild.java | 69 +++++++++-- core/frontend/src/lang/en.js | 5 +- core/frontend/src/lang/tw.js | 5 +- core/frontend/src/lang/zh.js | 5 +- .../views/chart/chart/common/common_antv.js | 74 ++++++++++-- .../views/chart/chart/scatter/scatter_antv.js | 2 +- .../chart/components/dragItem/QuotaItem.vue | 19 +++ .../src/views/chart/view/ChartEdit.vue | 108 ++++++++++++++---- .../datasource/dm/query/DmQueryProvider.java | 31 ++++- .../kingbase/query/KingbaseQueryProvider.java | 31 ++++- .../kylin/query/KylinQueryProvider.java | 31 ++++- .../dm/query/MaxcomputeQueryProvider.java | 39 +++++-- .../mongo/query/MongobiQueryProvider.java | 42 +++++-- .../dm/query/PrestoQueryProvider.java | 39 +++++-- .../dto/chart/ChartViewFieldBaseDTO.java | 2 + .../datasource/query/QueryProvider.java | 12 +- 32 files changed, 849 insertions(+), 247 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/dto/chart/AxisChartDataAntVDTO.java b/core/backend/src/main/java/io/dataease/dto/chart/AxisChartDataAntVDTO.java index 4ab8ccda0b..97e9321b18 100644 --- a/core/backend/src/main/java/io/dataease/dto/chart/AxisChartDataAntVDTO.java +++ b/core/backend/src/main/java/io/dataease/dto/chart/AxisChartDataAntVDTO.java @@ -20,4 +20,6 @@ public class AxisChartDataAntVDTO { private BigDecimal popSize; private String group; private BigDecimal extValue; + + private Object x; } 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 720b2167b8..929f45ff42 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 @@ -631,16 +631,34 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -668,6 +686,9 @@ public class DorisQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -743,8 +764,8 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + table + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + table + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 6c459d49e8..bc425a04f8 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 @@ -580,16 +580,34 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MysqlConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -617,6 +635,9 @@ public class MysqlQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -689,8 +710,8 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + table + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + table + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java b/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java index 3df2b83dfc..30cf927e13 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java @@ -111,12 +111,12 @@ public class ApiProvider extends QueryProvider { } @Override - public String getSQLScatter(String s, List list, List list1, List list2, List rowPermissionsTree, List list3, List list4, Datasource datasource, ChartViewWithBLOBs chartViewWithBLOBs) { + public String getSQLScatter(String s, List list, List list1, List list2, List rowPermissionsTree, List list3, List list4, List extGroup, Datasource datasource, ChartViewWithBLOBs chartViewWithBLOBs) { return null; } @Override - public String getSQLAsTmpScatter(String s, List list, List list1, List list2, List rowPermissionsTree, List list3, List list4, ChartViewWithBLOBs chartViewWithBLOBs) { + public String getSQLAsTmpScatter(String s, List list, List list1, List list2, List rowPermissionsTree, List list3, List list4, List extGroup, ChartViewWithBLOBs chartViewWithBLOBs) { return null; } 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 9d6f7cf6a5..653bc2b089 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 @@ -611,16 +611,34 @@ public class CKQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -648,6 +666,9 @@ public class CKQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -720,8 +741,8 @@ public class CKQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -1417,7 +1438,7 @@ public class CKQueryProvider extends QueryProvider { @Override public String sqlForPreview(String table, Datasource ds) { - return "SELECT * FROM " + String.format(CKConstants.KEYWORD_TABLE, table); + return "SELECT * FROM " + String.format(CKConstants.KEYWORD_TABLE, table); } public List dateformat() { 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 394c6d0aa4..7750f94709 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 @@ -598,7 +598,7 @@ public class Db2QueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(Db2Constants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -606,9 +606,27 @@ public class Db2QueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -636,6 +654,9 @@ public class Db2QueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -708,8 +729,8 @@ public class Db2QueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 610e837715..be5c96eed9 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 @@ -605,16 +605,34 @@ public class EsQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(EsSqlLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -646,6 +664,9 @@ public class EsQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -722,8 +743,8 @@ public class EsQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 697c370f70..b677c0a701 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 @@ -350,13 +350,14 @@ public class HiveQueryProvider extends QueryProvider { @Override public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { - String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " , " + pageInfo.getPageSize(): ""); + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " , " + pageInfo.getPageSize() : ""); if (isTable) { return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; } else { return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; } } + private String originalTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(HiveConstants.KEYWORD_TABLE, table)) @@ -431,9 +432,10 @@ public class HiveQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); return st.render(); } - @Override + + @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); + return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); } @Override @@ -562,16 +564,34 @@ public class HiveQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(HiveConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -599,6 +619,9 @@ public class HiveQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -671,8 +694,8 @@ public class HiveQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -771,9 +794,9 @@ public class HiveQueryProvider extends QueryProvider { } public String getTotalCount(boolean isTable, String sql, Datasource ds) { - if(isTable){ + if (isTable) { return "SELECT COUNT(*) from " + String.format(HiveConstants.KEYWORD_TABLE, sql); - }else { + } else { return "SELECT COUNT(*) from ( " + sqlFix(sql) + " ) DE_COUNT_TEMP"; } } @@ -1039,17 +1062,17 @@ public class HiveQueryProvider extends QueryProvider { if (field.getDeType() == DeTypeConstants.DE_TIME) { if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { String date = String.format(HiveConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : HiveConstants.DEFAULT_DATE_FORMAT); - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = date; - }else { + } else { whereName = String.format(HiveConstants.DATE_FORMAT, date, format); } } if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { String cast = String.format(HiveConstants.CAST, originName, HiveConstants.DEFAULT_INT_FORMAT) + "/1000"; whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, HiveConstants.DEFAULT_DATE_FORMAT); - }else { + } else { String cast = String.format(HiveConstants.CAST, originName, HiveConstants.DEFAULT_INT_FORMAT) + "/1000"; whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, format); } @@ -1057,9 +1080,9 @@ public class HiveQueryProvider extends QueryProvider { whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, format); } if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = originName; - }else { + } else { whereName = String.format(HiveConstants.DATE_FORMAT, originName, format); } 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 9f3989a44a..afb4867912 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 @@ -116,7 +116,7 @@ public class ImpalaQueryProvider extends QueryProvider { } 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.STR_TO_DATE, originField, StringUtils.isNotEmpty(f.getDateFormat()) ? f.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT ,ImpalaConstants.DEFAULT_DATE_FORMAT); + fieldName = String.format(ImpalaConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(f.getDateFormat()) ? f.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, ImpalaConstants.DEFAULT_DATE_FORMAT); } else { fieldName = originField; } @@ -201,7 +201,7 @@ public class ImpalaQueryProvider extends QueryProvider { } 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.STR_TO_DATE, originField, StringUtils.isNotEmpty(f.getDateFormat()) ? f.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT ,ImpalaConstants.DEFAULT_DATE_FORMAT); + fieldName = String.format(ImpalaConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(f.getDateFormat()) ? f.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, ImpalaConstants.DEFAULT_DATE_FORMAT); } else { fieldName = originField; } @@ -419,7 +419,8 @@ public class ImpalaQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); return st.render(); } - @Override + + @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); } @@ -550,16 +551,34 @@ public class ImpalaQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(ImpalaConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -587,6 +606,9 @@ public class ImpalaQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -659,8 +681,8 @@ public class ImpalaQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -759,9 +781,9 @@ public class ImpalaQueryProvider extends QueryProvider { } public String getTotalCount(boolean isTable, String sql, Datasource ds) { - if(isTable){ + if (isTable) { return "SELECT COUNT(*) from " + String.format(ImpalaConstants.KEYWORD_TABLE, sql); - }else { + } else { return "SELECT COUNT(*) from ( " + sqlFix(sql) + " ) DE_COUNT_TEMP"; } } @@ -804,7 +826,7 @@ public class ImpalaQueryProvider extends QueryProvider { } if (field.getDeType() == DeTypeConstants.DE_TIME) { if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(ImpalaConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT ,ImpalaConstants.DEFAULT_DATE_FORMAT); + whereName = String.format(ImpalaConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, ImpalaConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(ImpalaConstants.CAST, originName, ImpalaConstants.DEFAULT_INT_FORMAT) + "/1000"; @@ -931,7 +953,7 @@ public class ImpalaQueryProvider extends QueryProvider { } if (field.getDeType() == DeTypeConstants.DE_TIME) { if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(ImpalaConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT ,ImpalaConstants.DEFAULT_DATE_FORMAT); + whereName = String.format(ImpalaConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, ImpalaConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(ImpalaConstants.CAST, originName, ImpalaConstants.DEFAULT_INT_FORMAT) + "/1000"; @@ -1035,25 +1057,25 @@ public class ImpalaQueryProvider extends QueryProvider { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeType() == DeTypeConstants.DE_TIME) { if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = String.format(ImpalaConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, ImpalaConstants.DEFAULT_DATE_FORMAT); - }else { + } else { whereName = String.format(ImpalaConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, format); } } if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { String cast = String.format(ImpalaConstants.CAST, originName, ImpalaConstants.DEFAULT_INT_FORMAT) + "/1000"; whereName = String.format(ImpalaConstants.FROM_UNIXTIME, cast, ImpalaConstants.DEFAULT_DATE_FORMAT); - }else { + } else { String cast = String.format(ImpalaConstants.CAST, originName, ImpalaConstants.DEFAULT_INT_FORMAT) + "/1000"; whereName = String.format(ImpalaConstants.FROM_UNIXTIME, cast, format); } } if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = originName; - }else { + } else { whereName = String.format(ImpalaConstants.DATE_FORMAT, originName, format); } } @@ -1096,7 +1118,7 @@ public class ImpalaQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - if(request.getDatasetTableField().getDeExtractType() == DeTypeConstants.DE_TIME){ + if (request.getDatasetTableField().getDeExtractType() == DeTypeConstants.DE_TIME) { simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); } String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); @@ -1179,7 +1201,7 @@ public class ImpalaQueryProvider extends QueryProvider { if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { - fieldName = String.format(ImpalaConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT ,ImpalaConstants.DEFAULT_DATE_FORMAT); + fieldName = String.format(ImpalaConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : ImpalaConstants.DEFAULT_DATE_FORMAT, ImpalaConstants.DEFAULT_DATE_FORMAT); fieldName = String.format(ImpalaConstants.DATE_FORMAT, fieldName, format); } else { String cast = String.format(ImpalaConstants.CAST, originField, ImpalaConstants.DEFAULT_INT_FORMAT) + "/1000"; 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 7e4ebcc7e1..d8ad59fc31 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 @@ -315,7 +315,7 @@ public class MongoQueryProvider extends QueryProvider { @Override public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { - String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " , " + pageInfo.getPageSize() : ""); + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + " , " + pageInfo.getPageSize() : ""); if (isTable) { return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; } else { @@ -535,16 +535,34 @@ public class MongoQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == DeTypeConstants.DE_INT) { // 解析origin name中有关联的字段生成sql表达式 @@ -571,6 +589,9 @@ public class MongoQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -648,8 +669,8 @@ public class MongoQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 17f7a77641..f32a2ad515 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 @@ -589,16 +589,34 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -625,6 +643,9 @@ public class MysqlQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -679,7 +700,7 @@ public class MysqlQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(groups)) st_sql.add("groups", groups); if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); @@ -697,8 +718,8 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 5dd5ab8763..201dd395a3 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 @@ -653,7 +653,7 @@ public class OracleQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0))) @@ -661,9 +661,27 @@ public class OracleQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -690,6 +708,9 @@ public class OracleQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -762,8 +783,8 @@ public class OracleQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -918,7 +939,7 @@ public class OracleQueryProvider extends QueryProvider { continue; } String originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()); - if(xAxis.get(i).getType().equals("DATE")){ + if (xAxis.get(i).getType().equals("DATE")) { originField = String.format(OracleConstants.TO_CHAR, originField, OracleConstants.DEFAULT_DATE_FORMAT); } String fieldAlias = String.format(OracleConstants.KEYWORD_TABLE, x.getOriginName()); @@ -1209,25 +1230,25 @@ public class OracleQueryProvider extends QueryProvider { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - if(!request.getOperator().equals("between")){ + if (!request.getOperator().equals("between")) { whereName = String.format(OracleConstants.TO_CHAR, String.format(OracleConstants.TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : OracleConstants.DEFAULT_DATE_FORMAT), format); - }else { + } else { whereName = String.format(OracleConstants.TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : OracleConstants.DEFAULT_DATE_FORMAT); } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - if(!request.getOperator().equals("between")){ + if (!request.getOperator().equals("between")) { String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, format); - }else { + } else { String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, OracleConstants.DEFAULT_DATE_FORMAT); } } if (field.getDeExtractType() == 1) { - if(!request.getOperator().equals("between")){ + if (!request.getOperator().equals("between")) { whereName = String.format(OracleConstants.TO_CHAR, originName, format); - }else { + } else { whereName = originName; } } 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 bb00acfdee..4682f88323 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 @@ -591,7 +591,7 @@ public class PgQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -599,9 +599,27 @@ public class PgQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -628,6 +646,9 @@ public class PgQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -700,8 +721,8 @@ public class PgQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -1075,25 +1096,25 @@ public class PgQueryProvider extends QueryProvider { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { String timestamp = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = timestamp; - }else { + } else { whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); String timestamp = String.format(PgConstants.FROM_UNIXTIME, cast); - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = timestamp; - }else { + } else { whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); } } if (field.getDeExtractType() == 1) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = originName; - }else { + } else { whereName = String.format(PgConstants.DATE_FORMAT, originName, format); } 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 393c4d040a..b550a81485 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 @@ -598,7 +598,7 @@ public class RedshiftQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -606,9 +606,27 @@ public class RedshiftQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -635,6 +653,9 @@ public class RedshiftQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -707,8 +728,8 @@ public class RedshiftQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -808,11 +829,11 @@ public class RedshiftQueryProvider extends QueryProvider { } public String getTotalCount(boolean isTable, String sql, Datasource ds) { - if(isTable){ + if (isTable) { String schema = new Gson().fromJson(ds.getConfiguration(), JdbcConfiguration.class).getSchema(); String tableWithSchema = String.format(SqlServerSQLConstants.KEYWORD_TABLE, schema) + "." + String.format(SqlServerSQLConstants.KEYWORD_TABLE, sql); return "SELECT COUNT(*) from " + String.format(ImpalaConstants.KEYWORD_TABLE, tableWithSchema); - }else { + } else { return "SELECT COUNT(*) from ( " + sqlFix(sql) + " ) DE_COUNT_TEMP"; } } @@ -1069,26 +1090,26 @@ public class RedshiftQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - String timestamp = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); - if(request.getOperator().equals("between")){ + String timestamp = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); + if (request.getOperator().equals("between")) { whereName = timestamp; - }else { + } else { whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); String timestamp = String.format(PgConstants.FROM_UNIXTIME, cast); - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = timestamp; - }else { + } else { whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); } } if (field.getDeExtractType() == 1) { - if(request.getOperator().equals("between")){ + if (request.getOperator().equals("between")) { whereName = originName; - }else { + } else { whereName = String.format(PgConstants.DATE_FORMAT, originName, format); } } 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 3516959bd2..ced343ad33 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 @@ -600,7 +600,7 @@ public class SqlserverQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -608,9 +608,27 @@ public class SqlserverQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -637,6 +655,9 @@ public class SqlserverQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -713,8 +734,8 @@ public class SqlserverQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -898,19 +919,19 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.equalsIgnoreCase(item.getTerm(), "not_empty")) { whereValue = "''"; } else if (StringUtils.containsIgnoreCase(item.getTerm(), "in") || StringUtils.containsIgnoreCase(item.getTerm(), "not in")) { - if(field.getType().equalsIgnoreCase("NVARCHAR")){ - whereValue ="(" + Arrays.asList(value.split(",")).stream().map(str -> { + if (field.getType().equalsIgnoreCase("NVARCHAR")) { + whereValue = "(" + Arrays.asList(value.split(",")).stream().map(str -> { return "N" + "'" + str + "'"; }).collect(Collectors.joining(",")) + ")"; - }else { + } else { whereValue = "('" + String.join("','", value.split(",")) + "')"; } } else if (StringUtils.containsIgnoreCase(item.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - if(field.getType().equalsIgnoreCase("NVARCHAR")){ + if (field.getType().equalsIgnoreCase("NVARCHAR")) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value); - }else { + } else { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); } } @@ -1035,19 +1056,19 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { whereValue = "''"; } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in") || StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "not in")) { - if(field.getType().equalsIgnoreCase("NVARCHAR")) { - whereValue = "(" + Arrays.asList(value.split(",")).stream().map(str -> { + if (field.getType().equalsIgnoreCase("NVARCHAR")) { + whereValue = "(" + Arrays.asList(value.split(",")).stream().map(str -> { return "N" + "'" + str + "'"; }).collect(Collectors.joining(",")) + ")"; - }else { + } else { whereValue = "('" + String.join("','", value.split(",")) + "')"; } } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - if(field.getType().equalsIgnoreCase("NVARCHAR")){ + if (field.getType().equalsIgnoreCase("NVARCHAR")) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value); - }else { + } else { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); } } @@ -1103,7 +1124,7 @@ public class SqlserverQueryProvider extends QueryProvider { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { if (!StringUtils.containsIgnoreCase(request.getOperator(), "between")) { whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), String.format(SqlServerSQLConstants.STRING_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : SqlServerSQLConstants.DEFAULT_DATE_FORMAT)); - }else { + } else { whereName = String.format(SqlServerSQLConstants.STRING_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : SqlServerSQLConstants.DEFAULT_DATE_FORMAT); } } @@ -1111,7 +1132,7 @@ public class SqlserverQueryProvider extends QueryProvider { if (!StringUtils.containsIgnoreCase(request.getOperator(), "between")) { String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), cast); - }else { + } else { String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); whereName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast); } @@ -1119,7 +1140,7 @@ public class SqlserverQueryProvider extends QueryProvider { if (field.getDeExtractType() == 1) { if (!StringUtils.containsIgnoreCase(request.getOperator(), "between")) { whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), originName); - }else { + } else { whereName = originName; } } @@ -1149,11 +1170,11 @@ public class SqlserverQueryProvider extends QueryProvider { String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { - if(request.getDatasetTableField() != null && request.getDatasetTableField().getType().equalsIgnoreCase("NVARCHAR")) { + if (request.getDatasetTableField() != null && request.getDatasetTableField().getType().equalsIgnoreCase("NVARCHAR")) { whereValue = "(" + value.stream().map(str -> { return "N" + "'" + str + "'"; }).collect(Collectors.joining(",")) + ")"; - }else { + } else { whereValue = "('" + StringUtils.join(value, "','") + "')"; } } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { @@ -1171,9 +1192,9 @@ public class SqlserverQueryProvider extends QueryProvider { } } else { - if(request.getDatasetTableField() != null && request.getDatasetTableField().getType().equalsIgnoreCase("NVARCHAR")){ + if (request.getDatasetTableField() != null && request.getDatasetTableField().getType().equalsIgnoreCase("NVARCHAR")) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, value.get(0)); - }else { + } else { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value.get(0)); } @@ -1339,19 +1360,19 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.equalsIgnoreCase(f.getTerm(), "not_empty")) { whereValue = "''"; } else if (StringUtils.containsIgnoreCase(f.getTerm(), "in")) { - if(y.getType().equalsIgnoreCase("NVARCHAR")){ - whereValue = "(" +Arrays.asList(f.getValue().split(",")).stream().map(str -> { + if (y.getType().equalsIgnoreCase("NVARCHAR")) { + whereValue = "(" + Arrays.asList(f.getValue().split(",")).stream().map(str -> { return "N" + "'" + str + "'"; }).collect(Collectors.joining(",")) + ")"; - }else { + } else { whereValue = "('" + String.join("','", f.getValue().split(",")) + "')"; } } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { whereValue = "'%" + f.getValue() + "%'"; } else { - if(y.getType().equalsIgnoreCase("NVARCHAR")){ + if (y.getType().equalsIgnoreCase("NVARCHAR")) { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE_CH, f.getValue()); - }else { + } else { whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, f.getValue()); } } diff --git a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 61f575449c..c70099ffbf 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -487,7 +487,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { datasourceRequest.setQuery(qp.getSQLStack(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view)); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - datasourceRequest.setQuery(qp.getSQLScatter(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, ds, view)); + datasourceRequest.setQuery(qp.getSQLScatter(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { datasourceRequest.setQuery(qp.getSQLTableInfo(dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { @@ -501,7 +501,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { datasourceRequest.setQuery(qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view)); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, view)); + datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { @@ -516,7 +516,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { datasourceRequest.setQuery(qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view)); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, view)); + datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { @@ -532,7 +532,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { datasourceRequest.setQuery(qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view)); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, view)); + datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { @@ -557,7 +557,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { datasourceRequest.setQuery(qp.getSQLStack(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view)); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, ds, view)); + datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { @@ -604,7 +604,7 @@ public class ChartViewService { List viewFields = gson.fromJson(view.getViewFields(), tokenType); final Map> extFieldsMap = new LinkedHashMap<>(); if (CollectionUtils.isNotEmpty(viewFields)) { - String[] busiFlagArray = new String[] {"daxis", "locationXaxis", "locationYaxis"}; + String[] busiFlagArray = new String[]{"daxis", "locationXaxis", "locationYaxis"}; Map flagMap = new HashMap<>(); for (String s : busiFlagArray) { flagMap.put(s, false); @@ -1060,7 +1060,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { querySql = qp.getSQLStack(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - querySql = qp.getSQLScatter(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, ds, view); + querySql = qp.getSQLScatter(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { querySql = qp.getSQLWithPage(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); totalPageSql = qp.getResultCount(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); @@ -1080,7 +1080,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { querySql = qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - querySql = qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, view); + querySql = qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); @@ -1101,7 +1101,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { querySql = qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - querySql = qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, view); + querySql = qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); @@ -1122,7 +1122,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { querySql = qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - querySql = qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, view); + querySql = qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); @@ -1174,7 +1174,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { datasourceRequest.setQuery(qp.getSQLStack(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view)); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, ds, view)); + datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view)); } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) { datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { @@ -1361,7 +1361,7 @@ public class ChartViewService { } else if (StringUtils.containsIgnoreCase(view.getType(), "line-stack")) { mapChart = ChartDataBuild.transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - mapChart = ChartDataBuild.transScatterDataAntV(xAxis, yAxis, view, data, extBubble, isDrill); + mapChart = ChartDataBuild.transScatterDataAntV(xAxis, yAxis, view, data, extBubble, extStack, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "radar")) { mapChart = ChartDataBuild.transRadarChartDataAntV(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "text") diff --git a/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java index 4df9247e53..7a4a0abbe1 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java +++ b/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -291,19 +291,33 @@ public class ChartDataBuild { } //AntV scatter - public static Map transScatterDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extBubble, boolean isDrill) { + public static Map transScatterDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extBubble, List extGroup, boolean isDrill) { Map map = new HashMap<>(); + boolean xIsNumber = false; + + //先判断x轴内是不是数值格式的 + if (CollectionUtils.isNotEmpty(xAxis)) { + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q")) { + xIsNumber = true; + } + } + List extGroupList = new ArrayList<>(); + if (xIsNumber) { + extGroupList.addAll(extGroup); + } + + List dataList = new ArrayList<>(); for (int i1 = 0; i1 < data.size(); i1++) { String[] row = data.get(i1); StringBuilder a = new StringBuilder(); if (isDrill) { - a.append(row[xAxis.size() - 1]); + a.append(row[extGroupList.size() + xAxis.size() - 1]); } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { + for (int i = extGroupList.size(); i < extGroupList.size() + xAxis.size(); i++) { + if (i == extGroupList.size() + xAxis.size() - 1) { a.append(row[i]); } else { a.append(row[i]).append("\n"); @@ -311,8 +325,15 @@ public class ChartDataBuild { } } - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + for (int i = xAxis.size() + extGroupList.size(); i < xAxis.size() + extGroupList.size() + yAxis.size(); i++) { AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + + if (xIsNumber) { + axisChartDataDTO.setX(new BigDecimal(a.toString())); + } else { + axisChartDataDTO.setX(a.toString()); + } + axisChartDataDTO.setField(a.toString()); axisChartDataDTO.setName(a.toString()); @@ -327,7 +348,7 @@ public class ChartDataBuild { } axisChartDataDTO.setDimensionList(dimensionList); - int j = i - xAxis.size(); + int j = i - xAxis.size() - extGroupList.size(); ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); chartQuotaDTO.setId(yAxis.get(j).getId()); quotaList.add(chartQuotaDTO); @@ -337,11 +358,18 @@ public class ChartDataBuild { } catch (Exception e) { axisChartDataDTO.setValue(new BigDecimal(0)); } - axisChartDataDTO.setCategory(yAxis.get(j).getName()); + + if (CollectionUtils.isNotEmpty(extGroup) && xIsNumber) { //有分组时其实就是第一个 + axisChartDataDTO.setCategory(row[0]); + } else { + axisChartDataDTO.setCategory(yAxis.get(j).getName()); + } + axisChartDataDTO.setGroup(yAxis.get(j).getName()); + // pop if (CollectionUtils.isNotEmpty(extBubble)) { try { - axisChartDataDTO.setPopSize(StringUtils.isEmpty(row[xAxis.size() + yAxis.size()]) ? null : new BigDecimal(row[xAxis.size() + yAxis.size()])); + axisChartDataDTO.setPopSize(StringUtils.isEmpty(row[extGroupList.size() + xAxis.size() + yAxis.size()]) ? null : new BigDecimal(row[extGroupList.size() + xAxis.size() + yAxis.size()])); } catch (Exception e) { axisChartDataDTO.setPopSize(new BigDecimal(0)); } @@ -944,7 +972,28 @@ public class ChartDataBuild { // 表格 public static Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, Map desensitizationList) { List fields = new ArrayList<>(); - if (ObjectUtils.isNotEmpty(xAxis)) { + + // scatter start + if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { + boolean xIsNumber = false; + + if (CollectionUtils.isNotEmpty(xAxis)) { + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q")) { + xIsNumber = true; + } + } + if (xIsNumber && CollectionUtils.isNotEmpty(extStack)) { + fields.add(extStack.get(0)); + } + + if (xIsNumber) { + fields.add(xAxis.get(0)); + } else { + fields.addAll(xAxis); + } + + // scatter end + } else if (ObjectUtils.isNotEmpty(xAxis)) { fields.addAll(xAxis); } if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { @@ -1253,7 +1302,7 @@ public class ChartDataBuild { quotaList.add(chartQuotaDTO); axisChartDataDTO.setQuotaList(quotaList); } - if (yAxis.size() == 2){ + if (yAxis.size() == 2) { try { axisChartDataDTO.setValue(StringUtils.isEmpty(row[xAxis.size()]) ? null : new BigDecimal(row[xAxis.size()])); } catch (Exception e) { diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index 3397df4246..a9162134b9 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -1513,6 +1513,7 @@ export default { Do not modify the reference content, otherwise the reference will fail.
If you enter content in the same format as the reference field, it will be treated as a reference field.`, scatter_tip: 'When this indicator is in effect, the bubble size attribute in the style size will be invalid', + scatter_group_tip: 'This setting only active when quota value in xAxis', place_name_mapping: 'Place name mapping', axis_tip: 'The minimum value, maximum value, and interval are all numeric types; it will be regarded as automatic if left blank.
Please make sure that the filled values can be calculated correctly, otherwise the axis values will not be displayed normally.', format_tip: `The template variables include {a}, {b}, {c}, {d}, which represent series name, data name, data value, etc. respectively.
@@ -1954,8 +1955,8 @@ export default { jsonpath_info: 'Please fill in JsonPath', req_param: 'Request parameters', headers: 'Request header', - query_param: "QUERY param", - query_info: "Follow in the address bar? The following parameters, such as: updateAPI? id=112", + query_param: 'QUERY param', + query_info: 'Follow in the address bar? The following parameters, such as: updateAPI? id=112', key: 'Key', value: 'Value', data_path: 'Extract data', diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index acae311002..8337bc319b 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -1507,6 +1507,7 @@ export default { table_column_width_tip: '列寬並非任何時候都能生效。
容器寬度優先級高於列寬。即(表格容器寬度 / 列數 > 指定列寬),則列寬優先取(容器寬度 / 列數)', reference_field_tip: '引用字段以 "[" 開始,"]" 結束。請
勿修改引用內容,否則將引用失敗。
若輸入與引用字段相同格式的內容,將被當做引用字段處理。', scatter_tip: '該指標生效時,樣式大小中的氣泡大小屬性將失效', + scatter_group_tip: '僅當橫軸內為指標時生效', place_name_mapping: '地名映射', axis_tip: '最小值、最大值、間隔均為數值類型;若不填,則該項視為自動。
請確保填寫數值能正確計算,否則將無法正常顯示值軸', format_tip: `模板變量有 {a}, {b},{c},{d},分別表示系列名,數據名,數據值等。
@@ -1948,8 +1949,8 @@ export default { jsonpath_info: '請輸入JsonPath', req_param: '請求參數', headers: '請求頭', - query_param: "QUERY參數", - query_info: "地址欄中跟在?後面的參數,如:updateapi? id=112", + query_param: 'QUERY參數', + query_info: '地址欄中跟在?後面的參數,如:updateapi? id=112', key: '鍵', value: '值', data_path: '提取數據', diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index a68a573db0..32c5719c98 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -1506,6 +1506,7 @@ export default { table_column_width_tip: '列宽并非任何时候都能生效。
容器宽度优先级高于列宽,即(表格容器宽度 / 列数 > 指定列宽),则列宽优先取(容器宽度 / 列数)。', reference_field_tip: '引用字段以 "[" 开始, "]" 结束。
请勿修改引用内容,否则将引用失败。
若输入与引用字段相同格式的内容,将被当作引用字段处理。', scatter_tip: '该指标生效时,样式大小中的气泡大小属性将失效', + scatter_group_tip: '仅当横轴内为指标时生效', place_name_mapping: '地名映射', axis_tip: '最小值、最大值、间隔均为数值类型;若不填,则该项视为自动。
请确保填写数值能正确计算,否则将无法正常显示轴值。', format_tip: `模板变量有 {a}, {b},{c},{d},分别表示系列名,数据名,数据值等。
@@ -1947,8 +1948,8 @@ export default { jsonpath_info: '请填入JsonPath', req_param: '请求参数', headers: '请求头', - query_param: "QUERY参数", - query_info: "地址栏中跟在?后面的参数,如: updateapi?id=112", + query_param: 'QUERY参数', + query_info: '地址栏中跟在?后面的参数,如: updateapi?id=112', key: '键', value: '值', data_path: '提取数据', diff --git a/core/frontend/src/views/chart/chart/common/common_antv.js b/core/frontend/src/views/chart/chart/common/common_antv.js index 5db67a2105..05b9b0a1ff 100644 --- a/core/frontend/src/views/chart/chart/common/common_antv.js +++ b/core/frontend/src/views/chart/chart/common/common_antv.js @@ -300,21 +300,28 @@ export function getTooltip(chart) { const t = JSON.parse(JSON.stringify(customAttr.tooltip)) if (t.show) { tooltip = {} + let xAxis, yAxis, extStack + + try { + xAxis = JSON.parse(chart.xaxis) + } catch (e) { + xAxis = JSON.parse(JSON.stringify(chart.xaxis)) + } + try { + yAxis = JSON.parse(chart.yaxis) + } catch (e) { + yAxis = JSON.parse(JSON.stringify(chart.yaxis)) + } + try { + extStack = JSON.parse(chart.extStack) + } catch (e) { + extStack = JSON.parse(JSON.stringify(chart.extStack)) + } + // tooltip value formatter if (chart.type && chart.type !== 'waterfall') { tooltip.formatter = function(param) { - let yAxis, extStack let res = param.value - try { - yAxis = JSON.parse(chart.yaxis) - } catch (e) { - yAxis = JSON.parse(JSON.stringify(chart.yaxis)) - } - try { - extStack = JSON.parse(chart.extStack) - } catch (e) { - extStack = JSON.parse(JSON.stringify(chart.extStack)) - } let obj if (equalsAny(chart.type, 'bar-stack', 'line-stack', @@ -445,6 +452,51 @@ export function getTooltip(chart) { obj.value = res === null ? '' : res return obj } + // + if (chart.type === 'scatter' && xAxis && xAxis.length > 0 && xAxis[0].groupType === 'q') { + tooltip.fields = ['x', 'category', 'value', 'group'] + tooltip.customContent = (title, data) => { + const key1 = xAxis[0]?.name + let key2, v1, v2 + + if (data && data.length > 0) { + title = data[0].data.category + key2 = data[0].data.group + + const fx = xAxis[0] + if (fx.formatterCfg) { + v1 = valueFormatter(data[0].data.x, fx.formatterCfg) + } else { + v1 = valueFormatter(data[0].data.x, formatterItem) + } + + for (let i = 0; i < yAxis.length; i++) { + const f = yAxis[i] + if (f.name === key2) { + if (f.formatterCfg) { + v2 = valueFormatter(data[0].data.value, f.formatterCfg) + } else { + v2 = valueFormatter(data[0].data.value, formatterItem) + } + break + } + } + } + + return ` +
+
${title}
+
+ ${key1}:${v1} +
+
+ ${key2}:${v2} +
+
 
+
+ ` + } + } } } else { // 百分比堆叠柱状图隐藏 tooltip 设置 show 为 false 或者直接设置 tooltip 为 false 都无效,会变成分组显示, diff --git a/core/frontend/src/views/chart/chart/scatter/scatter_antv.js b/core/frontend/src/views/chart/chart/scatter/scatter_antv.js index 96032b3844..f6e84a17c3 100644 --- a/core/frontend/src/views/chart/chart/scatter/scatter_antv.js +++ b/core/frontend/src/views/chart/chart/scatter/scatter_antv.js @@ -32,7 +32,7 @@ export function baseScatterOptionAntV(plot, container, chart, action) { const options = { theme: theme, data: data, - xField: 'field', + xField: 'x', yField: 'value', colorField: 'category', appendPadding: getPadding(chart), diff --git a/core/frontend/src/views/chart/components/dragItem/QuotaItem.vue b/core/frontend/src/views/chart/components/dragItem/QuotaItem.vue index 3866646186..01e05de33d 100644 --- a/core/frontend/src/views/chart/components/dragItem/QuotaItem.vue +++ b/core/frontend/src/views/chart/components/dragItem/QuotaItem.vue @@ -275,6 +275,10 @@ export default { quotaData: { type: Array, required: true + }, + specialType: { + type: String, + required: false } }, data() { @@ -436,23 +440,35 @@ export default { showRename() { this.item.index = this.index this.item.renameType = 'quota' + if (this.specialType) { + this.item.renameType = this.specialType + } this.item.dsFieldName = getOriginFieldName(this.dimensionData, this.quotaData, this.item) this.$emit('onNameEdit', this.item) }, removeItem() { this.item.index = this.index this.item.removeType = 'quota' + if (this.specialType) { + this.item.removeType = this.specialType + } this.$emit('onQuotaItemRemove', this.item) }, editFilter() { this.item.index = this.index this.item.filterType = 'quota' + if (this.specialType) { + this.item.filterType = this.specialType + } this.$emit('editItemFilter', this.item) }, editCompare() { this.item.index = this.index this.item.calcType = 'quota' + if (this.specialType) { + this.item.calcType = this.specialType + } this.$emit('editItemCompare', this.item) }, getItemTagType() { @@ -462,6 +478,9 @@ export default { valueFormatter() { this.item.index = this.index this.item.formatterType = 'quota' + if (this.specialType) { + this.item.formatterType = this.specialType + } this.$emit('valueFormatter', this.item) } } diff --git a/core/frontend/src/views/chart/view/ChartEdit.vue b/core/frontend/src/views/chart/view/ChartEdit.vue index 2ea98a2432..0907270b36 100644 --- a/core/frontend/src/views/chart/view/ChartEdit.vue +++ b/core/frontend/src/views/chart/view/ChartEdit.vue @@ -558,8 +558,11 @@ $t('chart.drag_block_table_data_column') }} {{ $t('chart.drag_block_type_axis') }} + {{ $t('chart.x_axis') }} {{ $t('chart.drag_block_pie_label') }} @@ -579,7 +582,10 @@ {{ $t('chart.drag_block_label') }} {{ $t('chart.start_point') }} / - + {{ $t('chart.dimension_or_quota') }} + {{ $t('chart.dimension') }} - +
- {{ $t('chart.stack_item') }} + {{ $t('chart.stack_item') }} + {{ $t('chart.form_type') }} / {{ $t('chart.dimension') }} + +
+ {{ $t('chart.scatter_group_tip') }} +
+ +
1) { this.view.xaxis = [this.view.xaxis[0]] } 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 e43bea7a80..f8bdad6754 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 @@ -701,7 +701,7 @@ public class DmQueryProvider extends QueryProvider { @Override public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, - List extBubble, Datasource ds, ChartViewWithBLOBs view) { + List extBubble,List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) @@ -710,9 +710,27 @@ public class DmQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -742,6 +760,9 @@ public class DmQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -829,9 +850,9 @@ public class DmQueryProvider extends QueryProvider { @Override public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, - List extBubble, ChartViewWithBLOBs view) { + List extBubble, List extGroup,ChartViewWithBLOBs view) { return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, - extBubble, null, view); + extBubble, extGroup,null, view); } @Override 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 127a754cf1..5fed752ae8 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 @@ -721,7 +721,7 @@ public class KingbaseQueryProvider extends QueryProvider { public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, - List extFilterRequestList, List extBubble, + List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() @@ -732,9 +732,27 @@ public class KingbaseQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -763,6 +781,9 @@ public class KingbaseQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -851,10 +872,10 @@ public class KingbaseQueryProvider extends QueryProvider { List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, - List extBubble, + List extBubble, List extGroup, ChartViewWithBLOBs view) { return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, - extFilterRequestList, extBubble, null, view); + extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 d7b455cb0d..7ad5ae0488 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 @@ -554,7 +554,7 @@ public class KylinQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(KylinConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -562,9 +562,27 @@ public class KylinQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -591,6 +609,9 @@ public class KylinQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -663,8 +684,8 @@ public class KylinQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override 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 a7e7fe14fa..60d60390d0 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 @@ -569,7 +569,7 @@ public class MaxcomputeQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MaxConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -577,9 +577,27 @@ public class MaxcomputeQueryProvider extends QueryProvider { List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -606,6 +624,9 @@ public class MaxcomputeQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -678,8 +699,8 @@ public class MaxcomputeQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -1270,7 +1291,7 @@ public class MaxcomputeQueryProvider extends QueryProvider { public List dateformat() { ObjectMapper objectMapper = new ObjectMapper(); List dateformats = new ArrayList<>(); - try{ + try { dateformats = objectMapper.readValue("[\n" + "{\"dateformat\": \"yyyymmdd\"},\n" + "{\"dateformat\": \"yyyy/mm/dd\"},\n" + @@ -1278,8 +1299,10 @@ public class MaxcomputeQueryProvider extends QueryProvider { "{\"dateformat\": \"yyyymmdd hh:mi:s\"},\n" + "{\"dateformat\": \"yyyy/mm/dd hh:mi:s\"},\n" + "{\"dateformat\": \"yyyy-mm-dd hh:mi:s\"}\n" + - "]", new TypeReference>() {} ); - }catch (Exception e){} + "]", new TypeReference>() { + }); + } catch (Exception e) { + } return dateformats; } } 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 f79e43bafa..eca34019e8 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 @@ -439,7 +439,8 @@ public class MongobiQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); return st.render(); } - @Override + + @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); } @@ -569,16 +570,34 @@ public class MongobiQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -605,6 +624,9 @@ public class MongobiQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -677,8 +699,8 @@ public class MongobiQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -1316,7 +1338,7 @@ public class MongobiQueryProvider extends QueryProvider { public List dateformat() { ObjectMapper objectMapper = new ObjectMapper(); List dateformats = new ArrayList<>(); - try{ + try { dateformats = objectMapper.readValue("[\n" + "{\"dateformat\": \"%Y%m%d\"},\n" + "{\"dateformat\": \"%Y-%m-%d\"},\n" + @@ -1324,8 +1346,10 @@ public class MongobiQueryProvider extends QueryProvider { "{\"dateformat\": \"%Y%m%d %H:%i:%S\"},\n" + "{\"dateformat\": \"%Y/%m/%d %H:%i:%S\"},\n" + "{\"dateformat\": \"%Y-%m-%d %H:%i:%S\"}\n" + - "]", new TypeReference>() {} ); - }catch (Exception e){} + "]", new TypeReference>() { + }); + } catch (Exception e) { + } return dateformats; } } 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 c2ec9926d6..ab7f0421c9 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 @@ -559,7 +559,7 @@ public class PrestoQueryProvider extends QueryProvider { } @Override - public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view) { + public String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PrestoConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -567,9 +567,27 @@ public class PrestoQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = new ArrayList<>(); List xOrders = new ArrayList<>(); + + boolean xIsNumber = false; + List xAxisList = new ArrayList<>(); + + //先判断x轴内是不是数值格式的 if (CollectionUtils.isNotEmpty(xAxis)) { - for (int i = 0; i < xAxis.size(); i++) { - ChartViewFieldDTO x = xAxis.get(i); + if (StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + xIsNumber = true; + } else { + xAxisList.addAll(xAxis); + } + } + + //然后是数值格式的情况还需要传extGroup + if (xIsNumber && CollectionUtils.isNotEmpty(extGroup)) { + xAxisList.add(extGroup.get(0)); + } + + if (CollectionUtils.isNotEmpty(xAxisList)) { + for (int i = 0; i < xAxisList.size(); i++) { + ChartViewFieldDTO x = xAxisList.get(i); String originField; if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 @@ -596,6 +614,9 @@ public class PrestoQueryProvider extends QueryProvider { List yWheres = new ArrayList<>(); List yOrders = new ArrayList<>(); List yList = new ArrayList<>(); + if (xIsNumber) { + yList.add(xAxis.get(0)); + } yList.addAll(yAxis); yList.addAll(extBubble); if (CollectionUtils.isNotEmpty(yList)) { @@ -668,8 +689,8 @@ public class PrestoQueryProvider extends QueryProvider { } @Override - public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view) { - return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, null, view); + public String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view) { + return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view); } @Override @@ -1268,7 +1289,7 @@ public class PrestoQueryProvider extends QueryProvider { public List dateformat() { ObjectMapper objectMapper = new ObjectMapper(); List dateformats = new ArrayList<>(); - try{ + try { dateformats = objectMapper.readValue("[\n" + "{\"dateformat\": \"yyyy-MM-dd\"},\n" + "{\"dateformat\": \"yyyy/MM/dd\"},\n" + @@ -1276,8 +1297,10 @@ public class PrestoQueryProvider extends QueryProvider { "{\"dateformat\": \"yyyy-MM-dd HH:mm:s\"},\n" + "{\"dateformat\": \"yyyy-MM-dd HH:mm:s\"},\n" + "{\"dateformat\": \"yyyy-MM-dd HH:mm:s\"}\n" + - "]", new TypeReference>() {} ); - }catch (Exception e){} + "]", new TypeReference>() { + }); + } catch (Exception e) { + } return dateformats; } diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldBaseDTO.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldBaseDTO.java index 1a6e270689..61841f40c3 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldBaseDTO.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldBaseDTO.java @@ -22,6 +22,8 @@ public class ChartViewFieldBaseDTO implements Serializable { private String type; + private String groupType; + private Boolean checked; private Integer columnIndex; diff --git a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java index 45918c6477..c3de471a40 100644 --- a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java +++ b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java @@ -61,17 +61,17 @@ public abstract class QueryProvider { public abstract String getSQLAsTmpTableInfo(String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view); public String getSQLWithPage(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { - if(isTable){ + if (isTable) { return getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); - }else { + } else { return getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view); } } public String getResultCount(boolean isTable, String sql, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - if(isTable){ + if (isTable) { return "SELECT COUNT(*) from (" + getSQLTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + ") COUNT_TEMP"; - }else { + } else { return "SELECT COUNT(*) from (" + getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + ") COUNT_TEMP"; } } @@ -80,9 +80,9 @@ public abstract class QueryProvider { public abstract String getSQLAsTmpStack(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extStack, ChartViewWithBLOBs view); - public abstract String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, Datasource ds, ChartViewWithBLOBs view); + public abstract String getSQLScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, Datasource ds, ChartViewWithBLOBs view); - public abstract String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, ChartViewWithBLOBs view); + public abstract String getSQLAsTmpScatter(String table, List xAxis, List yAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, List extBubble, List extGroup, ChartViewWithBLOBs view); public abstract String searchTable(String table);