diff --git a/backend/src/main/java/io/dataease/dto/chart/AxisChartDataDTO.java b/backend/src/main/java/io/dataease/dto/chart/AxisChartDataDTO.java new file mode 100644 index 0000000000..1301169e90 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/chart/AxisChartDataDTO.java @@ -0,0 +1,17 @@ +package io.dataease.dto.chart; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @Author gin + * @Date 2021/8/9 10:14 上午 + */ +@Data +public class AxisChartDataDTO { + private BigDecimal value; + private List dimensionList; + private List quotaList; +} diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartDimensionDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartDimensionDTO.java new file mode 100644 index 0000000000..a0b139b75c --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/chart/ChartDimensionDTO.java @@ -0,0 +1,13 @@ +package io.dataease.dto.chart; + +import lombok.Data; + +/** + * @Author gin + * @Date 2021/8/9 10:15 上午 + */ +@Data +public class ChartDimensionDTO { + private String id; + private String value; +} diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartQuotaDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartQuotaDTO.java new file mode 100644 index 0000000000..3784df31cd --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/chart/ChartQuotaDTO.java @@ -0,0 +1,12 @@ +package io.dataease.dto.chart; + +import lombok.Data; + +/** + * @Author gin + * @Date 2021/8/9 10:16 上午 + */ +@Data +public class ChartQuotaDTO { + private String id; +} diff --git a/backend/src/main/java/io/dataease/dto/chart/ScatterChartDataDTO.java b/backend/src/main/java/io/dataease/dto/chart/ScatterChartDataDTO.java new file mode 100644 index 0000000000..d8ee6cd6ef --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/chart/ScatterChartDataDTO.java @@ -0,0 +1,17 @@ +package io.dataease.dto.chart; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @Author gin + * @Date 2021/8/9 10:14 上午 + */ +@Data +public class ScatterChartDataDTO { + private Object[] value; + private List dimensionList; + private List quotaList; +} 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 89c08d91e7..e9507c1796 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -365,6 +365,8 @@ public class ChartViewService { mapChart = transStackChartData(xAxis, yAxis, view, data, extStack); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { mapChart = transScatterData(xAxis, yAxis, view, data, extBubble); + } else if (StringUtils.containsIgnoreCase(view.getType(), "radar")) { + mapChart = transRadarChartData(xAxis, yAxis, view, data); } else { mapChart = transChartData(xAxis, yAxis, view, data); } @@ -421,6 +423,63 @@ public class ChartViewService { private Map transChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data) { Map map = new HashMap<>(); + List x = new ArrayList<>(); + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + StringBuilder a = new StringBuilder(); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(new BigDecimal(StringUtils.isEmpty(d[i]) ? "0" : d[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + series.get(j).getData().add(axisChartDataDTO); + } + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + x.add(a.toString()); + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // radar图 + private Map transRadarChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data) { + Map map = new HashMap<>(); + List x = new ArrayList<>(); List series = new ArrayList<>(); for (ChartViewFieldDTO y : yAxis) { @@ -464,7 +523,9 @@ public class ChartViewService { List series = new ArrayList<>(); if (CollectionUtils.isNotEmpty(extStack)) { + AxisChartDataDTO defaultAxisChartDataDTO = new AxisChartDataDTO(); BigDecimal defaultValue = StringUtils.containsIgnoreCase(view.getType(), "line") ? new BigDecimal(0) : null; + defaultAxisChartDataDTO.setValue(defaultValue); // 构建横轴 for (String[] d : data) { StringBuilder a = new StringBuilder(); @@ -489,7 +550,7 @@ public class ChartViewService { series1.setType(view.getType()); List list = new ArrayList<>(); for (int i = 0; i < x.size(); i++) { - list.add(defaultValue); + list.add(defaultAxisChartDataDTO); } series1.setData(list); series.add(series1); @@ -509,9 +570,31 @@ public class ChartViewService { } if (StringUtils.equals(a.toString(), x.get(i))) { if (row.length > xAxis.size() + extStack.size()) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(0).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + + for (int k = 0; k < xAxis.size(); k++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(k).getId()); + chartDimensionDTO.setValue(row[k]); + dimensionList.add(chartDimensionDTO); + } + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(extStack.get(0).getId()); + chartDimensionDTO.setValue(row[xAxis.size()]); + dimensionList.add(chartDimensionDTO); + axisChartDataDTO.setDimensionList(dimensionList); + String s = row[xAxis.size() + extStack.size()]; if (StringUtils.isNotEmpty(s)) { - ss.getData().set(i, new BigDecimal(s)); + axisChartDataDTO.setValue(new BigDecimal(s)); + ss.getData().set(i, axisChartDataDTO); } } break; @@ -528,8 +611,35 @@ public class ChartViewService { series1.setData(new ArrayList<>()); series.add(series1); } - for (String[] d : data) { + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + StringBuilder a = new StringBuilder(); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(new BigDecimal(StringUtils.isEmpty(d[i]) ? "0" : d[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + series.get(j).getData().add(axisChartDataDTO); + } for (int i = 0; i < xAxis.size(); i++) { if (i == xAxis.size() - 1) { a.append(d[i]); @@ -538,14 +648,6 @@ public class ChartViewService { } } x.add(a.toString()); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - int j = i - xAxis.size(); - try { - series.get(j).getData().add(new BigDecimal(StringUtils.isEmpty(d[i]) ? "0" : d[i])); - } catch (Exception e) { - series.get(j).getData().add(new BigDecimal(0)); - } - } } } @@ -567,7 +669,66 @@ public class ChartViewService { series1.setData(new ArrayList<>()); series.add(series1); } - for (String[] d : data) { + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + StringBuilder a = new StringBuilder(); + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + x.add(a.toString()); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + ScatterChartDataDTO scatterChartDataDTO = new ScatterChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + scatterChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + scatterChartDataDTO.setQuotaList(quotaList); +// try { +// axisChartDataDTO.setValue(new BigDecimal(StringUtils.isEmpty(d[i]) ? "0" : d[i])); +// } catch (Exception e) { +// axisChartDataDTO.setValue(new BigDecimal(0)); +// } + if (CollectionUtils.isNotEmpty(extBubble) && extBubble.size() > 0) { + try { + scatterChartDataDTO.setValue(new Object[]{ + a.toString(), + new BigDecimal(StringUtils.isEmpty(d[i]) ? "0" : d[i]), + new BigDecimal(StringUtils.isEmpty(d[xAxis.size() + yAxis.size()]) ? "0" : d[xAxis.size() + yAxis.size()]) + }); + } catch (Exception e) { + scatterChartDataDTO.setValue(new Object[]{a.toString(), new BigDecimal(0), new BigDecimal(0)}); + } + } else { + try { + scatterChartDataDTO.setValue(new Object[]{ + a.toString(), + new BigDecimal(StringUtils.isEmpty(d[i]) ? "0" : d[i]) + }); + } catch (Exception e) { + scatterChartDataDTO.setValue(new Object[]{a.toString(), new BigDecimal(0)}); + } + } + series.get(j).getData().add(scatterChartDataDTO); + } + } + + /*for (String[] d : data) { StringBuilder a = new StringBuilder(); for (int i = 0; i < xAxis.size(); i++) { if (i == xAxis.size() - 1) { @@ -600,7 +761,7 @@ public class ChartViewService { } } } - } + }*/ map.put("x", x); map.put("series", series); diff --git a/frontend/src/views/chart/chart/funnel/funnel.js b/frontend/src/views/chart/chart/funnel/funnel.js index 8a5c4fc9c2..736820378e 100644 --- a/frontend/src/views/chart/chart/funnel/funnel.js +++ b/frontend/src/views/chart/chart/funnel/funnel.js @@ -34,10 +34,12 @@ export function baseFunnelOption(chart_option, chart) { // max value chart_option.series[0].max = Math.max.apply(Math, valueArr) for (let i = 0; i < valueArr.length; i++) { - const y = { - name: chart.data.x[i], - value: valueArr[i] - } + // const y = { + // name: chart.data.x[i], + // value: valueArr[i] + // } + const y = valueArr[i] + y.name = chart.data.x[i] // color y.itemStyle = { color: hexColorToRGBA(customAttr.color.colors[i % 9], customAttr.color.alpha) diff --git a/frontend/src/views/chart/chart/pie/pie.js b/frontend/src/views/chart/chart/pie/pie.js index 0b8bb92469..d2afdd159d 100644 --- a/frontend/src/views/chart/chart/pie/pie.js +++ b/frontend/src/views/chart/chart/pie/pie.js @@ -33,10 +33,12 @@ export function basePieOption(chart_option, chart) { } const valueArr = chart.data.series[0].data for (let i = 0; i < valueArr.length; i++) { - const y = { - name: chart.data.x[i], - value: valueArr[i] - } + // const y = { + // name: chart.data.x[i], + // value: valueArr[i] + // } + const y = valueArr[i] + y.name = chart.data.x[i] // color y.itemStyle = { color: hexColorToRGBA(customAttr.color.colors[i % 9], customAttr.color.alpha), @@ -84,10 +86,12 @@ export function rosePieOption(chart_option, chart) { } const valueArr = chart.data.series[0].data for (let i = 0; i < valueArr.length; i++) { - const y = { - name: chart.data.x[i], - value: valueArr[i] - } + // const y = { + // name: chart.data.x[i], + // value: valueArr[i] + // } + const y = valueArr[i] + y.name = chart.data.x[i] // color y.itemStyle = { color: hexColorToRGBA(customAttr.color.colors[i % 9], customAttr.color.alpha),