From a848e7f2fa5a0f24d8055ecd52c63a160a90e9d6 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 2 Apr 2024 18:21:42 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6):?= =?UTF-8?q?=20=E6=96=87=E6=9C=AC=E4=B8=8B=E6=8B=89=E6=A1=86=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E5=90=8E=E9=83=A8=E5=88=86=E9=80=89=E9=A1=B9=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=20close#8714?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 21 ++++++++++++++++--- .../provider/query/db2/Db2QueryProvider.java | 12 ++++++++++- .../query/mysql/MysqlQueryProvider.java | 21 ++++++++++++++++--- .../query/oracle/OracleQueryProvider.java | 13 ++++++++++-- .../provider/query/pg/PgQueryProvider.java | 13 +++++++++++- .../sqlserver/SqlserverQueryProvider.java | 15 ++++++++++++- .../datasource/query/QueryProvider.java | 4 ++++ 7 files changed, 88 insertions(+), 11 deletions(-) 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 7b22212f9c..ec8e792b7e 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 @@ -40,6 +40,7 @@ import javax.annotation.Resource; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -108,13 +109,14 @@ public class DorisQueryProvider extends QueryProvider { .build(); List xFields = new ArrayList<>(); List fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); + AtomicInteger sortIndex = new AtomicInteger(-1); if (CollectionUtils.isNotEmpty(sortFields)) { sortFields.forEach(item -> { - int indexOf = fieldList.indexOf(item.getId()); - if (indexOf == -1) { + sortIndex.set(fieldList.indexOf(item.getId())); + if (sortIndex.get() == -1) { fields.add(item); } else { - fields.set(indexOf, item); + fields.set(sortIndex.get(), item); } }); } @@ -218,6 +220,19 @@ public class DorisQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(xOrders)) { st.add("orders", xOrders); } + if (CollectionUtils.isNotEmpty(xFields)) { + List finallyFields = new ArrayList<>(); + for (int i = 0; i < xFields.size(); i++) { + if (CollectionUtils.isNotEmpty(xOrders) && sortIndex.get() == -1 && i == xFields.size() - 1) { + continue; + } + SQLObj f = xFields.get(i); + String prefix = finallyFields.isEmpty() ? " DISTINCT " : ""; + f.setFieldName(prefix + String.format(MySQLConstants.KEYWORD_FIX, tableSQL.getTableAlias(), f.getFieldAlias())); + finallyFields.add(f); + } + st.add("groups", finallyFields); + } if (ObjectUtils.isNotEmpty(limit)) { return st.render() + " LIMIT 0," + limit; } 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 2dd9ea9ce1..a17535c851 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 @@ -163,7 +163,6 @@ public class Db2QueryProvider extends QueryProvider { .build()); } } - STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); @@ -193,6 +192,17 @@ public class Db2QueryProvider extends QueryProvider { } if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); + if (needDistinct(sortFields, limit)) { + st_sql.remove("groups"); + xOrders.forEach(f -> { + if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { + String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); + SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); + xFields.add(tField); + } + }); + st_sql.add("groups", xFields); + } } if (ObjectUtils.isNotEmpty(limit)) { ChartViewWithBLOBs view = new ChartViewWithBLOBs(); 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 74fe391f29..d1b54f8cd7 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 @@ -39,6 +39,7 @@ import javax.annotation.Resource; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -168,13 +169,14 @@ public class MysqlQueryProvider extends QueryProvider { .build(); List xFields = new ArrayList<>(); List fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); + AtomicInteger sortIndex = new AtomicInteger(-1); if (CollectionUtils.isNotEmpty(sortFields)) { sortFields.forEach(item -> { - int indexOf = fieldList.indexOf(item.getId()); - if (indexOf == -1) { + sortIndex.set(fieldList.indexOf(item.getId())); + if (sortIndex.get() == -1) { fields.add(item); } else { - fields.set(indexOf, item); + fields.set(sortIndex.get(), item); } }); } @@ -273,6 +275,19 @@ public class MysqlQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(xOrders)) { st.add("orders", xOrders); } + if (CollectionUtils.isNotEmpty(xFields)) { + List finallyFields = new ArrayList<>(); + for (int i = 0; i < xFields.size(); i++) { + if (CollectionUtils.isNotEmpty(xOrders) && sortIndex.get() == -1 && i == xFields.size() - 1) { + continue; + } + SQLObj f = xFields.get(i); + String prefix = finallyFields.isEmpty() ? " DISTINCT " : ""; + f.setFieldName(prefix + String.format(MySQLConstants.KEYWORD_FIX, tableSQL.getTableAlias(), f.getFieldAlias())); + finallyFields.add(f); + } + st.add("groups", finallyFields); + } if (ObjectUtils.isNotEmpty(limit)) { ChartViewWithBLOBs view = new ChartViewWithBLOBs(); view.setResultMode("custom"); 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 dfcc5ccbbe..1b5c70fb9d 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 @@ -121,8 +121,6 @@ public class OracleQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = xFields(table, fields); - - STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); @@ -151,6 +149,17 @@ public class OracleQueryProvider extends QueryProvider { } if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); + if (needDistinct(sortFields, limit)) { + st_sql.remove("groups"); + xOrders.forEach(f -> { + if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { + String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); + SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); + xFields.add(tField); + } + }); + st_sql.add("groups", xFields); + } } if (ObjectUtils.isNotEmpty(limit)) { ChartViewWithBLOBs view = new ChartViewWithBLOBs(); 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 a18e0cc6f7..2a2c1a9076 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 @@ -170,10 +170,10 @@ public class PgQueryProvider extends QueryProvider { .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) + .build()); } } - STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); @@ -207,6 +207,17 @@ public class PgQueryProvider extends QueryProvider { } if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); + if (needDistinct(sortFields, limit)) { + st_sql.remove("groups"); + xOrders.forEach(f -> { + if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { + String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); + SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); + xFields.add(tField); + } + }); + st_sql.add("groups", xFields); + } } if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) { 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 37b0e78a00..716c32860b 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 @@ -250,7 +250,20 @@ public class SqlserverQueryProvider extends QueryProvider { } } if (ObjectUtils.isNotEmpty(limit)) { - SQLObj limitFiled = SQLObj.builder().limitFiled(" top " + limit + " ").build(); + String topKeyWord = " top "; + if (needDistinct(sortFields, limit)) { + topKeyWord = " distinct top "; + st_sql.remove("groups"); + xOrders.forEach(f -> { + if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { + String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); + SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); + xFields.add(tField); + } + }); + st_sql.add("groups", xFields); + } + SQLObj limitFiled = SQLObj.builder().limitFiled(topKeyWord + limit + " ").build(); st_sql.add("limitFiled", limitFiled); } 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 b9f863dc8b..d60e4a37f9 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 @@ -263,4 +263,8 @@ public abstract class QueryProvider { } return "'%" + value + "%'"; } + + public boolean needDistinct(List sortFields, Long limit) { + return CollectionUtils.isNotEmpty(sortFields) && ObjectUtils.isNotEmpty(limit); + } } From bc5fc821b4988324f01939170f5b59d5b5beaba6 Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Tue, 2 Apr 2024 18:23:17 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix(=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6):?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8Dradio=E7=BB=84=E4=BB=B6=E5=9C=A8=E6=B7=B1?= =?UTF-8?q?=E8=89=B2=E4=B8=BB=E9=A2=98=E7=9C=8B=E4=B8=8D=E8=A7=81=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/frontend/src/components/widget/deWidget/DeRadio.vue | 2 ++ core/frontend/src/styles/index.scss | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/frontend/src/components/widget/deWidget/DeRadio.vue b/core/frontend/src/components/widget/deWidget/DeRadio.vue index c75182eff8..bbbbbc6b00 100644 --- a/core/frontend/src/components/widget/deWidget/DeRadio.vue +++ b/core/frontend/src/components/widget/deWidget/DeRadio.vue @@ -8,6 +8,7 @@ diff --git a/core/frontend/src/styles/index.scss b/core/frontend/src/styles/index.scss index 67f019cbd9..70b0d32367 100644 --- a/core/frontend/src/styles/index.scss +++ b/core/frontend/src/styles/index.scss @@ -833,7 +833,7 @@ div:focus { color: #1F2329 !important; } -.el-radio__input.is-checked:not(.is-disabled)+.el-radio__label { +.el-radio:not(.is-custom-select) .el-radio__input.is-checked:not(.is-disabled)+.el-radio__label { color: var(--deTextPrimary, #1F2329) !important; } From 1fdc6d6a686c5ba1a52b69238ed2a7b9833ec756 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 2 Apr 2024 18:30:45 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/frontend/src/lang/en.js | 2 +- core/frontend/src/lang/tw.js | 2 +- core/frontend/src/lang/zh.js | 2 +- .../filter/filterMain/RangeFilterTime.vue | 363 ++++++++++-------- 4 files changed, 202 insertions(+), 167 deletions(-) diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index 0d8ff92580..616a3e68f2 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -2890,7 +2890,7 @@ export default { chart_data: 'View data', panel_preview: 'Preview report', preview: 'Preview', - emial_preview: 'Report preview', + email_preview: 'Report preview', chart_data_range: 'View data range', panel_format: 'Panel format', simple_repeat: 'Simple repeat', diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index 1029715311..2d9b9baafe 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -2883,7 +2883,7 @@ export default { chart_data: '視圖數據', panel_preview: '預覽報告', preview: '預覽', - emial_preview: '報告預覽', + email_preview: '報告預覽', chart_data_range: '視圖數據範圍', panel_format: '儀表板格式', simple_repeat: '簡單重複', diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index 150b50dacc..8618970c08 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -2885,7 +2885,7 @@ export default { chart_data: '视图数据', panel_preview: '预览报告', preview: '预览', - emial_preview: '报告预览', + email_preview: '报告预览', chart_data_range: '视图数据范围', panel_format: '仪表板格式', simple_repeat: '简单重复', diff --git a/core/frontend/src/views/panel/filter/filterMain/RangeFilterTime.vue b/core/frontend/src/views/panel/filter/filterMain/RangeFilterTime.vue index ba2d0d1775..d204062be0 100644 --- a/core/frontend/src/views/panel/filter/filterMain/RangeFilterTime.vue +++ b/core/frontend/src/views/panel/filter/filterMain/RangeFilterTime.vue @@ -10,13 +10,15 @@ v-for="ele in intervalTypeList" :key="ele.value" :label="ele.value" - >{{ $t(`time.${ele.label}`) }} + >{{ $t(`time.${ele.label}`) }} -
+
{{ $t(`time.${regularOrTrendsTitle}`) }}
@@ -33,7 +35,10 @@ {{ $t("time.relative_to_current") }}
- +
-
+
- + - + - + - + - + - +
-
-
+
+
{{ $t("time.preview") }}
- {{ $t("chart.cancel") }} - {{ $t("chart.confirm") }} + {{ $t("chart.cancel") }} + {{ $t("chart.confirm") }}