From 31d0deee7c87475c15cbcdd5f081eb55f4b0f052 Mon Sep 17 00:00:00 2001 From: junjun Date: Mon, 22 Aug 2022 20:18:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=9F=B1=E7=8A=B6=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chart/ChartViewService.java | 11 ++-- .../service/chart/util/ChartDataBuild.java | 65 ++++++++++++++++++- .../chart/components/ChartComponentG2.vue | 2 + 3 files changed, 73 insertions(+), 5 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 11b373dab1..0694a0fc52 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -563,9 +563,10 @@ public class ChartViewService { } + List xAxisBase = gson.fromJson(view.getXAxis(), tokenType); List xAxis = gson.fromJson(view.getXAxis(), tokenType); - if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot")) { - List xAxisExt = gson.fromJson(view.getXAxisExt(), tokenType); + List xAxisExt = gson.fromJson(view.getXAxisExt(), tokenType); + if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot") || StringUtils.containsIgnoreCase(view.getType(), "group")) { xAxis.addAll(xAxisExt); } List yAxis = gson.fromJson(view.getYAxis(), tokenType); @@ -589,8 +590,8 @@ public class ChartViewService { DataSetTableDTO table = dataSetTableService.getWithPermission(view.getTableId(), requestList.getUser()); checkPermission("use", table, requestList.getUser()); - //列权限 List desensitizationList = new ArrayList<>(); + //列权限 List columnPermissionFields = permissionService.filterColumnPermissons(fields, desensitizationList, table.getId(), requestList.getUser()); //将没有权限的列删掉 List dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()); @@ -1044,7 +1045,9 @@ public class ChartViewService { mapChart = ChartDataBuild.transChartData(xAxis, yAxis, view, data, isDrill); } } else if (StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { - if (StringUtils.containsIgnoreCase(view.getType(), "bar-stack")) { + if (StringUtils.equalsIgnoreCase(view.getType(), "bar-group")) { + mapChart = ChartDataBuild.transBaseGroupDataAntV(xAxisBase, xAxisExt, yAxis, view, data, isDrill); + } else if (StringUtils.containsIgnoreCase(view.getType(), "bar-stack")) { mapChart = ChartDataBuild.transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "line-stack")) { mapChart = ChartDataBuild.transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); diff --git a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java index ed6085ecc3..36b1c15b30 100644 --- a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java +++ b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -103,6 +103,69 @@ public class ChartDataBuild { return map; } + public static Map transBaseGroupDataAntV(List xAxis, List xAxisExt, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List datas = 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]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(row[i]); + } else { + a.append(row[i]).append("\n"); + } + } + } + + StringBuilder b = new StringBuilder(); + for (int i = xAxis.size(); i < xAxis.size() + xAxisExt.size(); i++) { + if (i == xAxis.size() + xAxisExt.size() - 1) { + b.append(row[i]); + } else { + b.append(row[i]).append("\n"); + } + } + + for (int i = xAxis.size() + xAxisExt.size(); i < xAxis.size() + xAxisExt.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + axisChartDataDTO.setField(a.toString()); + axisChartDataDTO.setName(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(row[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size() - xAxisExt.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + axisChartDataDTO.setCategory(b.toString()); + datas.add(axisChartDataDTO); + } + } + map.put("datas", datas); + return map; + } + // AntV柱状堆叠图 public static Map transStackChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, boolean isDrill) { Map map = new HashMap<>(); @@ -877,7 +940,7 @@ public class ChartDataBuild { // 表格 public static Map transTableNormal(Map> fieldMap, ChartViewWithBLOBs view, List data, List desensitizationList) { - + List fields = new ArrayList<>(); if (CollectionUtils.isNotEmpty(fieldMap.get("xAxis")))fields.addAll(fieldMap.get("xAxis")); if (CollectionUtils.isNotEmpty(fieldMap.get("tooltipAxis")))fields.addAll(fieldMap.get("tooltipAxis")); diff --git a/frontend/src/views/chart/components/ChartComponentG2.vue b/frontend/src/views/chart/components/ChartComponentG2.vue index ebc4069c73..fe8b3576c7 100644 --- a/frontend/src/views/chart/components/ChartComponentG2.vue +++ b/frontend/src/views/chart/components/ChartComponentG2.vue @@ -192,6 +192,8 @@ export default { } if (chart.type === 'bar') { this.myChart = baseBarOptionAntV(this.myChart, this.chartId, chart, this.antVAction, true, false) + } else if (chart.type === 'bar-group') { + this.myChart = baseBarOptionAntV(this.myChart, this.chartId, chart, this.antVAction, true, false) } else if (chart.type === 'bar-stack') { this.myChart = baseBarOptionAntV(this.myChart, this.chartId, chart, this.antVAction, false, true) } else if (chart.type === 'bar-horizontal') {