From 2a0c7df77303db6def713bde0343e708328546f3 Mon Sep 17 00:00:00 2001
From: wisonic
Date: Fri, 13 Dec 2024 14:58:34 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E5=9B=BE=E8=A1=A8):=20=E6=94=AF=E6=8C=81?=
=?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=AD=97=E6=AE=B5=E6=8E=92=E5=BA=8F=E4=BC=98?=
=?UTF-8?q?=E5=85=88=E7=BA=A7=20#12454=20#12551?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../charts/impl/DefaultChartHandler.java | 2 +-
.../charts/impl/map/SymbolicMapHandler.java | 2 +-
.../impl/table/TableHeatmapHandler.java | 2 +-
.../charts/impl/table/TableInfoHandler.java | 7 +-
.../chart/dao/auto/entity/CoreChartView.java | 72 ++++---
.../dao/auto/mapper/CoreChartViewMapper.java | 2 +-
.../io/dataease/engine/sql/SQLProvider.java | 22 +++
.../engine/trans/Dimension2SQLObj.java | 1 +
.../dataease/engine/trans/Quota2SQLObj.java | 1 +
.../resources/db/migration/V2.10.4__ddl.sql | 1 +
.../src/assets/svg/icon_sort_priority.svg | 1 +
core/core-frontend/src/locales/en.ts | 4 +-
core/core-frontend/src/locales/tw.ts | 4 +-
core/core-frontend/src/locales/zh-CN.ts | 4 +-
.../core-frontend/src/models/chart/chart.d.ts | 1 +
.../editor/drag-item/DimensionItem.vue | 38 ++--
.../components/editor/drag-item/DrillItem.vue | 37 ++--
.../components/editor/drag-item/QuotaItem.vue | 59 ++++--
.../drag-item/components/SortPriorityEdit.vue | 186 ++++++++++++++++++
.../views/chart/components/editor/index.vue | 53 +++++
.../chart/components/editor/util/chart.ts | 1 +
.../js/panel/charts/others/indicator.ts | 1 +
.../extensions/datasource/model/SQLObj.java | 2 +
.../extensions/view/dto/ChartViewBaseDTO.java | 4 +
.../extensions/view/dto/SortAxis.java | 12 ++
.../extensions/view/util/ChartDataUtil.java | 86 +++++---
26 files changed, 494 insertions(+), 111 deletions(-)
create mode 100644 core/core-frontend/src/assets/svg/icon_sort_priority.svg
create mode 100644 core/core-frontend/src/views/chart/components/editor/drag-item/components/SortPriorityEdit.vue
create mode 100644 sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/SortAxis.java
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java
index 61a453e170..fcfcbb29ce 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java
@@ -121,7 +121,7 @@ public class DefaultChartHandler extends AbstractChartPlugin {
logger.debug("calcite chart sql: " + querySql);
List data = (List) provider.fetchResultField(datasourceRequest).get("data");
//自定义排序
- data = ChartDataUtil.resultCustomSort(xAxis, data);
+ data = ChartDataUtil.resultCustomSort(xAxis, yAxis, view.getSortPriority(), data);
//快速计算
quickCalc(xAxis, yAxis, data);
//数据重组逻辑可重载
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java
index cc8706c8a4..547ee0a811 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java
@@ -107,7 +107,7 @@ public class SymbolicMapHandler extends GroupChartHandler {
detailData = (List) provider.fetchResultField(datasourceRequest1).get("data");
}
//自定义排序
- data = ChartDataUtil.resultCustomSort(xAxis, data);
+ data = ChartDataUtil.resultCustomSort(xAxis, yAxis, view.getSortPriority(), data);
//数据重组逻辑可重载
var result = customBuildResult(view, formatResult, filterResult, data, detailFields, detailData);
T calcResult = (T) new ChartCalcDataResult();
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableHeatmapHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableHeatmapHandler.java
index 85f0b249ca..53bdbf42b0 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableHeatmapHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableHeatmapHandler.java
@@ -74,7 +74,7 @@ public class TableHeatmapHandler extends DefaultChartHandler {
logger.debug("calcite chart sql: " + querySql);
List data = (List) provider.fetchResultField(datasourceRequest).get("data");
//自定义排序
- data = ChartDataUtil.resultCustomSort(xAxis, data);
+ data = ChartDataUtil.resultCustomSort(xAxis, yAxis, view.getSortPriority(), data);
//数据重组逻辑可重载
var result = this.buildResult(view, formatResult, filterResult, data);
T calcResult = (T) new ChartCalcDataResult();
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java
index d4d3cab806..923a43ac0d 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java
@@ -19,10 +19,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
@Component
@@ -129,7 +126,7 @@ public class TableInfoHandler extends DefaultChartHandler {
logger.debug("calcite chart sql: " + querySql);
List data = (List) provider.fetchResultField(datasourceRequest).get("data");
//自定义排序
- data = ChartDataUtil.resultCustomSort(xAxis, data);
+ data = ChartDataUtil.resultCustomSort(xAxis, Collections.emptyList(), view.getSortPriority(), data);
//数据重组逻辑可重载
var result = this.buildResult(view, formatResult, filterResult, data);
T calcResult = (T) new ChartCalcDataResult();
diff --git a/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java b/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java
index 1058f0465e..6307ee4e07 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/dao/auto/entity/CoreChartView.java
@@ -9,7 +9,7 @@ import java.io.Serializable;
*
*
* @author fit2cloud
- * @since 2024-10-23
+ * @since 2024-12-12
*/
@TableName("core_chart_view")
public class CoreChartView implements Serializable {
@@ -101,21 +101,11 @@ public class CoreChartView implements Serializable {
*/
private String customAttr;
- /**
- * 图形属性_移动端
- */
- private String customAttrMobile;
-
/**
* 组件样式
*/
private String customStyle;
- /**
- * 组件样式_移动端
- */
- private String customStyleMobile;
-
/**
* 结果过滤
*/
@@ -231,6 +221,21 @@ public class CoreChartView implements Serializable {
*/
private String extColor;
+ /**
+ * 图形属性_移动端
+ */
+ private String customAttrMobile;
+
+ /**
+ * 组件样式_移动端
+ */
+ private String customStyleMobile;
+
+ /**
+ * 字段排序优先级
+ */
+ private String sortPriority;
+
public Long getId() {
return id;
}
@@ -367,14 +372,6 @@ public class CoreChartView implements Serializable {
this.customAttr = customAttr;
}
- public String getCustomAttrMobile() {
- return customAttrMobile;
- }
-
- public void setCustomAttrMobile(String customAttrMobile) {
- this.customAttrMobile = customAttrMobile;
- }
-
public String getCustomStyle() {
return customStyle;
}
@@ -383,14 +380,6 @@ public class CoreChartView implements Serializable {
this.customStyle = customStyle;
}
- public String getCustomStyleMobile() {
- return customStyleMobile;
- }
-
- public void setCustomStyleMobile(String customStyleMobile) {
- this.customStyleMobile = customStyleMobile;
- }
-
public String getCustomFilter() {
return customFilter;
}
@@ -575,6 +564,30 @@ public class CoreChartView implements Serializable {
this.extColor = extColor;
}
+ public String getCustomAttrMobile() {
+ return customAttrMobile;
+ }
+
+ public void setCustomAttrMobile(String customAttrMobile) {
+ this.customAttrMobile = customAttrMobile;
+ }
+
+ public String getCustomStyleMobile() {
+ return customStyleMobile;
+ }
+
+ public void setCustomStyleMobile(String customStyleMobile) {
+ this.customStyleMobile = customStyleMobile;
+ }
+
+ public String getSortPriority() {
+ return sortPriority;
+ }
+
+ public void setSortPriority(String sortPriority) {
+ this.sortPriority = sortPriority;
+ }
+
@Override
public String toString() {
return "CoreChartView{" +
@@ -595,9 +608,7 @@ public class CoreChartView implements Serializable {
", extLabel = " + extLabel +
", extTooltip = " + extTooltip +
", customAttr = " + customAttr +
- ", customAttrMobile = " + customAttrMobile +
", customStyle = " + customStyle +
- ", customStyleMobile = " + customStyleMobile +
", customFilter = " + customFilter +
", drillFields = " + drillFields +
", senior = " + senior +
@@ -621,6 +632,9 @@ public class CoreChartView implements Serializable {
", flowMapStartName = " + flowMapStartName +
", flowMapEndName = " + flowMapEndName +
", extColor = " + extColor +
+ ", customAttrMobile = " + customAttrMobile +
+ ", customStyleMobile = " + customStyleMobile +
+ ", sortPriority = " + sortPriority +
"}";
}
}
diff --git a/core/core-backend/src/main/java/io/dataease/chart/dao/auto/mapper/CoreChartViewMapper.java b/core/core-backend/src/main/java/io/dataease/chart/dao/auto/mapper/CoreChartViewMapper.java
index e5c4fb1c33..6b9fa610f6 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/dao/auto/mapper/CoreChartViewMapper.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/dao/auto/mapper/CoreChartViewMapper.java
@@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
*
*
* @author fit2cloud
- * @since 2024-10-23
+ * @since 2024-12-12
*/
@Mapper
public interface CoreChartViewMapper extends BaseMapper {
diff --git a/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java b/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java
index 1b05e4424d..4bdffe551b 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java
@@ -4,6 +4,8 @@ import io.dataease.engine.constant.SQLConstants;
import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ChartViewDTO;
+import io.dataease.extensions.view.dto.SortAxis;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.stringtemplate.v4.ST;
@@ -11,6 +13,7 @@ import org.stringtemplate.v4.STGroup;
import org.stringtemplate.v4.STGroupString;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
/**
@@ -116,6 +119,25 @@ public class SQLProvider {
List orders = new ArrayList<>();
if (ObjectUtils.isNotEmpty(xOrders)) orders.addAll(xOrders);
if (ObjectUtils.isNotEmpty(yOrders)) orders.addAll(yOrders);
+ if (!orders.isEmpty() && CollectionUtils.isNotEmpty(view.getSortPriority())) {
+ var sortPriority = view.getSortPriority();
+ var tmp = new ArrayList();
+ var ids = new HashSet();
+ for (SortAxis sortAxis : sortPriority) {
+ for (SQLObj order : orders) {
+ if (sortAxis.getId().equals(order.getId())){
+ tmp.add(order);
+ ids.add(order.getId());
+ }
+ }
+ }
+ for (SQLObj order : orders) {
+ if (!ids.contains(order.getId())) {
+ tmp.add(order);
+ }
+ }
+ orders = tmp;
+ }
// check datasource 是否需要排序
if (needOrder && ObjectUtils.isEmpty(orders)) {
if (ObjectUtils.isNotEmpty(xFields) || ObjectUtils.isNotEmpty(yFields)) {
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java
index f0bff8ba7b..5f14fdaeee 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java
@@ -76,6 +76,7 @@ public class Dimension2SQLObj {
.orderField(originField)
.orderAlias(fieldAlias)
.orderDirection(x.getSort())
+ .id(x.getId())
.build());
}
}
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java
index b4c35fe38b..6fcde84593 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java
@@ -85,6 +85,7 @@ public class Quota2SQLObj {
.orderField(originField)
.orderAlias(fieldAlias)
.orderDirection(y.getSort())
+ .id(y.getId())
.build());
}
}
diff --git a/core/core-backend/src/main/resources/db/migration/V2.10.4__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.10.4__ddl.sql
index af9304a0e4..921a566136 100644
--- a/core/core-backend/src/main/resources/db/migration/V2.10.4__ddl.sql
+++ b/core/core-backend/src/main/resources/db/migration/V2.10.4__ddl.sql
@@ -2,3 +2,4 @@ UPDATE `visualization_background` SET `name` = 'Board10' WHERE `id` = 'dark_1';
UPDATE `visualization_subject` SET `name` = 'chart.light_theme' WHERE `id` = '10001';
UPDATE `visualization_subject` SET `name` = 'chart.dark_theme' WHERE `id` = '10002';
CREATE INDEX idx_dataset_table_task_log_A ON core_datasource_task_log(ds_id, table_name, start_time);
+ALTER TABLE core_chart_view ADD sort_priority longtext null comment '字段排序优先级';
diff --git a/core/core-frontend/src/assets/svg/icon_sort_priority.svg b/core/core-frontend/src/assets/svg/icon_sort_priority.svg
new file mode 100644
index 0000000000..04ac42d671
--- /dev/null
+++ b/core/core-frontend/src/assets/svg/icon_sort_priority.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/core/core-frontend/src/locales/en.ts b/core/core-frontend/src/locales/en.ts
index df424b9bec..382f73ae37 100644
--- a/core/core-frontend/src/locales/en.ts
+++ b/core/core-frontend/src/locales/en.ts
@@ -1917,7 +1917,9 @@ Scatter chart (bubble) chart: {a} (series name), {b} (data name), {c} (value arr
'When Customizing, Supports SVG, JPG, JPEG, and PNG files up to 1MB',
size_range: 'Size Range',
x_axis_constant_line: 'X-axis Constant Line',
- y_axis_constant_line: 'Y-axis Constant Line'
+ y_axis_constant_line: 'Y-axis Constant Line',
+ sort_priority: 'Sort Priority Setting',
+ sort_priority_tip: 'Top-down, sorting priority from highest to lowest'
},
dataset: {
scope_edit: 'Only effective when editing',
diff --git a/core/core-frontend/src/locales/tw.ts b/core/core-frontend/src/locales/tw.ts
index 2c13306519..404da771f1 100644
--- a/core/core-frontend/src/locales/tw.ts
+++ b/core/core-frontend/src/locales/tw.ts
@@ -1873,7 +1873,9 @@ export default {
symbolic_map_symbol_shape_tip: '自訂時, 支援 1MB 以內的 SVG, JPG, JPEG, PNG 檔案',
size_range: '大小區間',
x_axis_constant_line: 'X 軸恆線',
- y_axis_constant_line: 'Y 軸恆線'
+ y_axis_constant_line: 'Y 軸恆線',
+ sort_priority: '排序優先級設置',
+ sort_priority_tip: '自上而下,排序優先級從高到低'
},
dataset: {
scope_edit: '僅編輯時生效',
diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts
index 5fb73f1ae8..f4fbe0ce7c 100644
--- a/core/core-frontend/src/locales/zh-CN.ts
+++ b/core/core-frontend/src/locales/zh-CN.ts
@@ -1875,7 +1875,9 @@ export default {
symbolic_map_symbol_shape_tip: '自定义时, 支持 1MB 以内的 SVG, JPG, JPEG, PNG 文件',
size_range: '大小区间',
x_axis_constant_line: 'X 轴恒线',
- y_axis_constant_line: 'Y 轴恒线'
+ y_axis_constant_line: 'Y 轴恒线',
+ sort_priority: '排序优先级设置',
+ sort_priority_tip: '自上而下,排序优先级从高到低'
},
dataset: {
scope_edit: '仅编辑时生效',
diff --git a/core/core-frontend/src/models/chart/chart.d.ts b/core/core-frontend/src/models/chart/chart.d.ts
index 6fc1a5f7f3..90787da11e 100644
--- a/core/core-frontend/src/models/chart/chart.d.ts
+++ b/core/core-frontend/src/models/chart/chart.d.ts
@@ -50,6 +50,7 @@ declare interface Chart {
customStyleMobile: CustomStyle
drillFields: ChartViewField[]
drillFilters: Filter[]
+ sortPriority: ChartViewField[]
datasetMode: 0 | 1
datasourceType: string
totalItems: number
diff --git a/core/core-frontend/src/views/chart/components/editor/drag-item/DimensionItem.vue b/core/core-frontend/src/views/chart/components/editor/drag-item/DimensionItem.vue
index 41251b014b..36ceafc272 100644
--- a/core/core-frontend/src/views/chart/components/editor/drag-item/DimensionItem.vue
+++ b/core/core-frontend/src/views/chart/components/editor/drag-item/DimensionItem.vue
@@ -7,6 +7,7 @@ import icon_down_outlined1 from '@/assets/svg/icon_down_outlined-1.svg'
import icon_right_outlined from '@/assets/svg/icon_right_outlined.svg'
import icon_done_outlined from '@/assets/svg/icon_done_outlined.svg'
import icon_edit_outlined from '@/assets/svg/icon_edit_outlined.svg'
+import icon_sort_priority from '@/assets/svg/icon_sort_priority.svg'
import { useI18n } from '@/hooks/web/useI18n'
import { computed, onMounted, ref, toRefs, watch } from 'vue'
import { getItemType } from '@/views/chart/components/editor/drag-item/utils'
@@ -59,7 +60,8 @@ const emit = defineEmits([
'onDimensionItemChange',
'onNameEdit',
'valueFormatter',
- 'onToggleHide'
+ 'onToggleHide',
+ 'editSortPriority'
])
const { item } = toRefs(props)
@@ -101,6 +103,9 @@ const clickItem = param => {
case 'toggleHide':
toggleHide()
break
+ case 'sortPriority':
+ emit('editSortPriority')
+ break
default:
break
}
@@ -258,16 +263,18 @@ onMounted(() => {
-
- | {{ t('dataset.field_origin_name') }} |
- : |
- {{ item.name }} |
-
-
- | {{ t('chart.show_name') }} |
- : |
- {{ item.chartShowName ? item.chartShowName : item.name }} |
-
+
+
+ | {{ t('dataset.field_origin_name') }} |
+ : |
+ {{ item.name }} |
+
+
+ | {{ t('chart.show_name') }} |
+ : |
+ {{ item.chartShowName ? item.chartShowName : item.name }} |
+
+
@@ -383,7 +390,14 @@ onMounted(() => {
-
+
{
case 'remove':
removeItem()
break
+ case 'sortPriority':
+ emit('editSortPriority')
+ break
default:
break
}
@@ -163,16 +168,18 @@ onMounted(() => {
-
- | {{ t('dataset.field_origin_name') }} |
- : |
- {{ item.name }} |
-
-
- | {{ t('chart.show_name') }} |
- : |
- {{ item.chartShowName ? item.chartShowName : item.name }} |
-
+
+
+ | {{ t('dataset.field_origin_name') }} |
+ : |
+ {{ item.name }} |
+
+
+ | {{ t('chart.show_name') }} |
+ : |
+ {{ item.chartShowName ? item.chartShowName : item.name }} |
+
+
@@ -279,6 +286,14 @@ onMounted(() => {
+
-
+
{
+
+