From 4dd805cf05bb614d19691547b414fab428b632ce Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 19 Dec 2022 16:43:48 +0800 Subject: [PATCH] =?UTF-8?q?perf(=E5=9C=B0=E5=9B=BE):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E5=90=8E=E5=8F=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chart/ChartViewService.java | 28 ++++++++++++++++++- frontend/src/views/chart/chart/map/map.js | 11 +++++--- .../views/chart/components/ChartComponent.vue | 8 +++--- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 77b17ba08f..24f8b99a41 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -960,6 +960,11 @@ public class ChartViewService { totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); } else { querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view); + if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) { + detailFieldList.addAll(xAxis); + detailFieldList.addAll(viewFields); + detailFieldSql = qp.getSQLWithPage(false, sql, detailFieldList, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); + } } } else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.CUSTOM.name())) { DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); @@ -976,6 +981,11 @@ public class ChartViewService { totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); } else { querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view); + if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) { + detailFieldList.addAll(xAxis); + detailFieldList.addAll(viewFields); + detailFieldSql = qp.getSQLWithPage(false, sql, detailFieldList, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); + } } } else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.UNION.name())) { DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); @@ -992,6 +1002,11 @@ public class ChartViewService { totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); } else { querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view); + if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) { + detailFieldList.addAll(xAxis); + detailFieldList.addAll(viewFields); + detailFieldSql = qp.getSQLWithPage(false, sql, detailFieldList, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo); + } } } if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { @@ -1029,6 +1044,11 @@ public class ChartViewService { datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); } else { datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view)); + if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) { + detailFieldList.addAll(xAxis); + detailFieldList.addAll(viewFields); + detailFieldSql = qp.getSQLTableInfo(tableName, detailFieldList, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view); + } } if (CollectionUtils.isNotEmpty(assistFields)) { datasourceAssistRequest.setQuery(assistSQL(datasourceRequest.getQuery(), assistFields)); @@ -1055,6 +1075,10 @@ public class ChartViewService { } } } + if (StringUtils.isNotBlank(detailFieldSql)) { + datasourceRequest.setQuery(detailFieldSql); + detailData = datasourceProvider.getData(datasourceRequest); + } } // 自定义排序 if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { @@ -1218,9 +1242,11 @@ public class ChartViewService { } } // table组件,明细表,也用于导出数据 - Map mapTableNormal = ChartDataBuild.transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList); + Map mapTableNormal = null; if (CollectionUtils.isNotEmpty(detailData)) { mapTableNormal = ChartDataBuild.transTableNormalWithDetail(xAxis, yAxis, data, detailFieldList, detailData, desensitizationList); + } else { + mapTableNormal = ChartDataBuild.transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList); } chartViewDTO = uniteViewResult(datasourceRequest.getQuery(), mapChart, mapTableNormal, view, isDrill, drillFilters, dynamicAssistFields, assistData); chartViewDTO.setTotalPage(totalPage); diff --git a/frontend/src/views/chart/chart/map/map.js b/frontend/src/views/chart/chart/map/map.js index 109b6feb33..3c695c80f7 100644 --- a/frontend/src/views/chart/chart/map/map.js +++ b/frontend/src/views/chart/chart/map/map.js @@ -48,9 +48,9 @@ export function baseMapOption(chart_option, chart, themeStyle, curAreaCode, seri let currentSeriesId = seriesId const yAxis = JSON.parse(chart.yaxis) if (!currentSeriesId || !yAxis.some(item => item.id === currentSeriesId)) { - currentSeriesId = yAxis[0].id + currentSeriesId = yAxis?.length ? yAxis[0].id : null } - chart.data.series.forEach((item, index) => { + chart.data?.series.forEach((item, index) => { if (item.data[0].quotaList[0].id === currentSeriesId) { seriesIndex = index return false @@ -213,7 +213,7 @@ export function baseMapOption(chart_option, chart, themeStyle, curAreaCode, seri } const val = values[valueIndex] const field = deNameArray[valueIndex] - const con = getSvgCondition(val, field, markCondition.conditions) + const con = getSvgCondition(val, field, markCondition?.conditions || null) let svgName = null if (con) { svgName = con.icon @@ -227,7 +227,7 @@ export function baseMapOption(chart_option, chart, themeStyle, curAreaCode, seri color: params => { const { value } = params const val = value[valueIndex] - const con = getSvgCondition(val, null, markCondition.conditions) + const con = getSvgCondition(val, null, markCondition?.conditions || null) return con?.color || '#b02a02' } }, @@ -248,6 +248,9 @@ export function baseMapOption(chart_option, chart, themeStyle, curAreaCode, seri } const getSvgCondition = (val, field, conditions) => { + if (!conditions) { + return null + } for (let i = 0; i < conditions.length; i++) { const condition = conditions[i] if (conditionMatch(condition, val)) { diff --git a/frontend/src/views/chart/components/ChartComponent.vue b/frontend/src/views/chart/components/ChartComponent.vue index a3f0cc1153..5b5c9f6fd4 100644 --- a/frontend/src/views/chart/components/ChartComponent.vue +++ b/frontend/src/views/chart/components/ChartComponent.vue @@ -455,20 +455,20 @@ export default { }, roamMap(flag) { let targetZoom = 1 - const zoom = this.myChart.getOption().series[0].zoom + const zoom = this.myChart.getOption().geo[0].zoom if (flag) { targetZoom = zoom * 1.2 } else { targetZoom = zoom / 1.2 } const options = JSON.parse(JSON.stringify(this.myChart.getOption())) - options.series[0].zoom = targetZoom + options.geo[0].zoom = targetZoom this.myChart.setOption(options) }, resetZoom() { const options = JSON.parse(JSON.stringify(this.myChart.getOption())) - options.series[0].zoom = 1 - options.series[0].center = this.mapCenter + options.geo[0].zoom = 1 + options.geo[0].center = this.mapCenter this.myChart.setOption(options) } }