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 f8d10b09be..d4ec1cfd96 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -54,6 +54,7 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.lang.reflect.Type; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; @@ -128,6 +129,9 @@ public class ChartViewService { } public ChartViewWithBLOBs newOne(ChartViewWithBLOBs chartView) { + if (StringUtils.isBlank(chartView.getViewFields())) { + chartView.setViewFields("[]"); + } long timestamp = System.currentTimeMillis(); chartView.setUpdateTime(timestamp); chartView.setId(UUID.randomUUID().toString()); @@ -300,23 +304,23 @@ public class ChartViewService { if (ObjectUtils.isEmpty(view)) { throw new RuntimeException(Translator.get("i18n_chart_delete")); } - List xAxis = new Gson().fromJson(view.getXAxis(), new TypeToken>() { + List xAxis = gson.fromJson(view.getXAxis(), new TypeToken>() { }.getType()); if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot")) { - List xAxisExt = new Gson().fromJson(view.getXAxisExt(), new TypeToken>() { + List xAxisExt = gson.fromJson(view.getXAxisExt(), new TypeToken>() { }.getType()); xAxis.addAll(xAxisExt); } - List yAxis = new Gson().fromJson(view.getYAxis(), new TypeToken>() { + List yAxis = gson.fromJson(view.getYAxis(), new TypeToken>() { }.getType()); if (StringUtils.equalsIgnoreCase(view.getType(), "chart-mix")) { - List yAxisExt = new Gson().fromJson(view.getYAxisExt(), new TypeToken>() { + List yAxisExt = gson.fromJson(view.getYAxisExt(), new TypeToken>() { }.getType()); yAxis.addAll(yAxisExt); } - List extStack = new Gson().fromJson(view.getExtStack(), new TypeToken>() { + List extStack = gson.fromJson(view.getExtStack(), new TypeToken>() { }.getType()); - List extBubble = new Gson().fromJson(view.getExtBubble(), new TypeToken>() { + List extBubble = gson.fromJson(view.getExtBubble(), new TypeToken>() { }.getType()); List fieldCustomFilter = new ArrayList(); List drill = new ArrayList(); @@ -401,7 +405,7 @@ public class ChartViewService { // 如果是插件视图 走插件内部的逻辑 if (ObjectUtils.isNotEmpty(view.getIsPlugin()) && view.getIsPlugin()) { Map> fieldMap = new HashMap<>(); - List xAxisExt = new Gson().fromJson(view.getXAxisExt(), new TypeToken>() { + List xAxisExt = gson.fromJson(view.getXAxisExt(), new TypeToken>() { }.getType()); fieldMap.put("xAxisExt", xAxisExt); fieldMap.put("xAxis", xAxis); @@ -434,7 +438,7 @@ public class ChartViewService { } // DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); datasourceRequest.setDatasource(ds); - DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); + DataTableInfoDTO dataTableInfoDTO = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); if (StringUtils.equalsIgnoreCase(table.getType(), "db")) { datasourceRequest.setTable(dataTableInfoDTO.getTable()); @@ -462,7 +466,7 @@ public class ChartViewService { datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, fieldCustomFilter, extFilterList, view)); } } else if (StringUtils.equalsIgnoreCase(table.getType(), "custom")) { - DataTableInfoDTO dt = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); + DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); List list = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId()); String sql = dataSetTableService.getCustomSQLDatasource(dt, list, ds); if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) { @@ -477,7 +481,7 @@ public class ChartViewService { datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, extFilterList, view)); } } else if (StringUtils.equalsIgnoreCase(table.getType(), "union")) { - DataTableInfoDTO dt = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); + DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); Map sqlMap = dataSetTableService.getUnionSQLDatasource(dt, ds); String sql = (String) sqlMap.get("sql"); @@ -538,28 +542,30 @@ public class ChartViewService { if (ObjectUtils.isEmpty(view)) { throw new RuntimeException(Translator.get("i18n_chart_delete")); } - List xAxis = new Gson().fromJson(view.getXAxis(), new TypeToken>() { - }.getType()); + Type tokenType = new TypeToken>() {}.getType(); + Type filterTokenType = new TypeToken>() {}.getType(); + + List viewFields = gson.fromJson(view.getViewFields(), tokenType); + Map> extFieldsMap = null; + if (CollectionUtils.isNotEmpty(viewFields)) { + extFieldsMap = viewFields.stream().collect(Collectors.groupingBy(ChartViewFieldDTO::getBusiType)); + } + + + List xAxis = gson.fromJson(view.getXAxis(), tokenType); if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot")) { - List xAxisExt = new Gson().fromJson(view.getXAxisExt(), new TypeToken>() { - }.getType()); + List xAxisExt = gson.fromJson(view.getXAxisExt(), tokenType); xAxis.addAll(xAxisExt); } - List yAxis = new Gson().fromJson(view.getYAxis(), new TypeToken>() { - }.getType()); + List yAxis = gson.fromJson(view.getYAxis(), tokenType); if (StringUtils.equalsIgnoreCase(view.getType(), "chart-mix")) { - List yAxisExt = new Gson().fromJson(view.getYAxisExt(), new TypeToken>() { - }.getType()); + List yAxisExt = gson.fromJson(view.getYAxisExt(), tokenType); yAxis.addAll(yAxisExt); } - List extStack = new Gson().fromJson(view.getExtStack(), new TypeToken>() { - }.getType()); - List extBubble = new Gson().fromJson(view.getExtBubble(), new TypeToken>() { - }.getType()); - List fieldCustomFilter = new Gson().fromJson(view.getCustomFilter(), new TypeToken>() { - }.getType()); - List drill = new Gson().fromJson(view.getDrillFields(), new TypeToken>() { - }.getType()); + List extStack = gson.fromJson(view.getExtStack(), tokenType); + List extBubble = gson.fromJson(view.getExtBubble(), tokenType); + List fieldCustomFilter = gson.fromJson(view.getCustomFilter(), filterTokenType); + List drill = gson.fromJson(view.getDrillFields(), tokenType); DatasetTableField datasetTableFieldObj = DatasetTableField.builder().tableId(view.getTableId()).checked(Boolean.TRUE).build(); @@ -741,14 +747,12 @@ public class ChartViewService { // 如果是插件视图 走插件内部的逻辑 if (ObjectUtils.isNotEmpty(view.getIsPlugin()) && view.getIsPlugin()) { - Map> fieldMap = new HashMap<>(); - List xAxisExt = new Gson().fromJson(view.getXAxisExt(), new TypeToken>() { - }.getType()); - fieldMap.put("xAxisExt", xAxisExt); - fieldMap.put("xAxis", xAxis); + Map> fieldMap = ObjectUtils.isEmpty(extFieldsMap) ? new HashMap<>() : extFieldsMap; + fieldMap.put("yAxis", yAxis); fieldMap.put("extStack", extStack); fieldMap.put("extBubble", extBubble); + fieldMap.put("xAxis", xAxis); PluginViewParam pluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, extFilterList, ds, table, view); String sql = pluginViewSql(pluginViewParam, view); if (StringUtils.isBlank(sql)) { @@ -775,7 +779,7 @@ public class ChartViewService { } // DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); datasourceRequest.setDatasource(ds); - DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); + DataTableInfoDTO dataTableInfoDTO = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); if (StringUtils.equalsIgnoreCase(table.getType(), "db")) { datasourceRequest.setTable(dataTableInfoDTO.getTable()); @@ -803,7 +807,7 @@ public class ChartViewService { datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, fieldCustomFilter, extFilterList, view)); } } else if (StringUtils.equalsIgnoreCase(table.getType(), "custom")) { - DataTableInfoDTO dt = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); + DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); List list = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId()); String sql = dataSetTableService.getCustomSQLDatasource(dt, list, ds); if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) { @@ -818,7 +822,7 @@ public class ChartViewService { datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, extFilterList, view)); } } else if (StringUtils.equalsIgnoreCase(table.getType(), "union")) { - DataTableInfoDTO dt = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); + DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); Map sqlMap = dataSetTableService.getUnionSQLDatasource(dt, ds); String sql = (String) sqlMap.get("sql"); @@ -1376,7 +1380,7 @@ public class ChartViewService { public List getFieldData(String id, ChartExtRequest requestList, boolean cache, String fieldId) throws Exception { ChartViewDTO view = getOne(id, requestList.getQueryFrom()); List sqlData = sqlData(view, requestList, cache, fieldId); - List xAxis = new Gson().fromJson(view.getXAxis(), new TypeToken>() { + List xAxis = gson.fromJson(view.getXAxis(), new TypeToken>() { }.getType()); DatasetTableField field = dataSetTableFieldsService.get(fieldId); diff --git a/frontend/src/views/chart/group/Group.vue b/frontend/src/views/chart/group/Group.vue index 6fe4be270c..43097c1a5f 100644 --- a/frontend/src/views/chart/group/Group.vue +++ b/frontend/src/views/chart/group/Group.vue @@ -822,6 +822,7 @@ export default { view.customFilter = JSON.stringify([]) view.drillFields = JSON.stringify([]) view.extBubble = JSON.stringify([]) + view.viewFields = JSON.stringify([]) this.setChartDefaultOptions(view) const _this = this post('/chart/view/newOne/' + this.panelInfo.id, view, true).then(response => { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 4bcd1e3fd8..11b50fd4f2 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -657,6 +657,8 @@ :view="view" :chart="chart" :properties="chartProperties" + :dimension-data="dimensionData" + :quota-data="quotaData" @calcStyle="calcStyle" @onColorChange="onColorChange" @onSizeChange="onSizeChange" @@ -1082,6 +1084,7 @@ export default { yaxisExt: [], extStack: [], drillFields: [], + viewFields: [], extBubble: [], show: true, type: 'bar', @@ -1528,6 +1531,7 @@ export default { this.view = JSON.parse(JSON.stringify(view)) // stringify json param view.xaxis = JSON.stringify(view.xaxis) + view.viewFields = JSON.stringify(view.viewFields) view.xaxisExt = JSON.stringify(view.xaxisExt) view.yaxis = JSON.stringify(view.yaxis) view.yaxisExt = JSON.stringify(view.yaxisExt) @@ -1596,6 +1600,7 @@ export default { // 将视图传入echart...组件 const view = JSON.parse(JSON.stringify(this.view)) view.xaxis = JSON.stringify(this.view.xaxis) + view.viewFields = JSON.stringify(this.view.viewFields) view.xaxisExt = JSON.stringify(this.view.xaxisExt) view.yaxis = JSON.stringify(this.view.yaxis) view.yaxisExt = JSON.stringify(this.view.yaxisExt) @@ -1660,6 +1665,7 @@ export default { }).then(response => { this.initTableData(response.data.tableId) this.view = JSON.parse(JSON.stringify(response.data)) + this.view.viewFields = this.view.viewFields ? JSON.parse(this.view.viewFields) : [] this.view.xaxis = this.view.xaxis ? JSON.parse(this.view.xaxis) : [] this.view.xaxisExt = this.view.xaxisExt ? JSON.parse(this.view.xaxisExt) : [] this.view.yaxis = this.view.yaxis ? JSON.parse(this.view.yaxis) : [] @@ -1710,6 +1716,7 @@ export default { this.initTableData(response.data.tableId) } this.view = JSON.parse(JSON.stringify(response.data)) + this.view.viewFields = this.view.viewFields ? JSON.parse(this.view.viewFields) : [] this.view.xaxis = this.view.xaxis ? JSON.parse(this.view.xaxis) : [] this.view.xaxisExt = this.view.xaxisExt ? JSON.parse(this.view.xaxisExt) : [] this.view.yaxis = this.view.yaxis ? JSON.parse(this.view.yaxis) : [] diff --git a/frontend/src/views/chart/view/ChartStyle.vue b/frontend/src/views/chart/view/ChartStyle.vue index 642688bd79..2b7c58a532 100644 --- a/frontend/src/views/chart/view/ChartStyle.vue +++ b/frontend/src/views/chart/view/ChartStyle.vue @@ -5,7 +5,7 @@ style="overflow:auto;border-right: 1px solid #e6e6e6;height: 100%;width: 100%;" class="attr-style theme-border-class" :component-name="view.type + '-style'" - :obj="{view, param, chart}" + :obj="{view, param, chart, dimensionData, quotaData}" />