From ed053ed762adfda29ad8774999519f0fac52b474 Mon Sep 17 00:00:00 2001 From: ulleo Date: Sat, 14 Sep 2024 10:55:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=9B=BE=E8=A1=A8):=20=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=9F=B1=E7=BA=BF=E7=BB=84=E5=90=88=E5=9B=BE=E5=AD=90=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E5=A2=9E=E5=8A=A0=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #11863 --- .../charts/impl/mix/DualLineMixHandler.java | 21 +++++++++++++++ .../chart/charts/impl/mix/MixHandler.java | 23 ++++++++-------- .../dataease/chart/utils/ChartDataBuild.java | 26 ++++++++++++++----- 3 files changed, 53 insertions(+), 17 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/DualLineMixHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/DualLineMixHandler.java index 8561590988..491d6c9dae 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/DualLineMixHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/DualLineMixHandler.java @@ -1,11 +1,32 @@ package io.dataease.chart.charts.impl.mix; +import io.dataease.chart.utils.ChartDataBuild; +import io.dataease.extensions.view.dto.AxisFormatResult; +import io.dataease.extensions.view.dto.ChartAxis; +import io.dataease.extensions.view.dto.ChartViewDTO; +import io.dataease.extensions.view.dto.CustomFilterResult; import lombok.Getter; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + @Component public class DualLineMixHandler extends GroupMixHandler { @Getter private final String type = "chart-mix-dual-line"; + @Override + public Map buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List data) { + boolean isDrill = filterResult + .getFilterList() + .stream() + .anyMatch(ele -> ele.getFilterType() == 1); + var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); + var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt); + var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); + var xAxisBase = xAxis.subList(0, xAxis.size() - xAxisExt.size()); + return ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill, true); + } + } diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java index 7989cb3a1a..962bd853b7 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java @@ -55,11 +55,19 @@ public class MixHandler extends YoyChartHandler { .getFilterList() .stream() .anyMatch(ele -> ele.getFilterType() == 1); + if (StringUtils.equals((String) formatResult.getContext().get("isRight"), "isRight")) { + var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); + var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt); + var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); + var xAxisBase = xAxis.subList(0, xAxis.size() - xAxisExt.size()); + return ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill, true); + } + var xAxisBase = (List) formatResult.getContext().get("xAxisBase"); var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt); - var result = ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill); + var result = ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill, false); return result; } @@ -97,11 +105,6 @@ public class MixHandler extends YoyChartHandler { AxisFormatResult formatResult2 = new AxisFormatResult(); var axisMap = new HashMap>(); - axisMap.put(ChartAxis.xAxis, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.xAxis))); - axisMap.put(ChartAxis.extStack, new ArrayList<>()); - axisMap.put(ChartAxis.xAxisExt, new ArrayList<>()); - axisMap.put(ChartAxis.extBubble, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extBubble))); - axisMap.put(ChartAxis.yAxisExt, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.yAxisExt))); axisMap.put(ChartAxis.extLabel, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extLabel))); axisMap.put(ChartAxis.extTooltip, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extTooltip))); axisMap.put(ChartAxis.drill, new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.drill))); @@ -110,18 +113,16 @@ public class MixHandler extends YoyChartHandler { // 计算右轴,包含 xAxis,xAxisExt,yAxisExt,需要去掉 group 和 stack var xAxis = new ArrayList<>(view.getXAxis()); - var extStack = formatResult2.getAxisMap().get(ChartAxis.extStack); - var xAxisExt = formatResult2.getAxisMap().get(ChartAxis.xAxisExt); - //xAxis = xAxis.subList(0, xAxis.size() - extStack.size() - xAxisExt.size()); - var extBubble = formatResult2.getAxisMap().get(ChartAxis.extBubble); + var extBubble = new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.extBubble)); xAxis.addAll(extBubble); var dillAxis = (ArrayList) formatResult.getContext().get("dillAxis"); xAxis.addAll(dillAxis); formatResult2.getAxisMap().put(ChartAxis.xAxis, xAxis); formatResult2.getAxisMap().put(ChartAxis.xAxisExt, extBubble); - var yAxisExt = formatResult2.getAxisMap().get(ChartAxis.yAxisExt); + var yAxisExt = new ArrayList<>(formatResult.getAxisMap().get(ChartAxis.yAxisExt)); formatResult2.getAxisMap().put(ChartAxis.yAxis, yAxisExt); formatResult2.getContext().remove("yoyFiltered"); + formatResult2.getContext().put("isRight", "isRight"); formatResult.getContext().put("subAxisMap", axisMap); diff --git a/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java b/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java index 7519fbb1b4..32d5404979 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java +++ b/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java @@ -1,6 +1,7 @@ package io.dataease.chart.utils; -import io.dataease.api.chart.dto.*; +import io.dataease.api.chart.dto.ScatterChartDataDTO; +import io.dataease.api.chart.dto.Series; import io.dataease.extensions.view.dto.*; import io.dataease.i18n.Lang; import io.dataease.i18n.Translator; @@ -423,7 +424,7 @@ public class ChartDataBuild { axisChartDataDTO.setValue(new BigDecimal(0)); } axisChartDataDTO.setCategory(StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName())); - buildDynamicValue(view, axisChartDataDTO, row, size, ObjectUtils.isNotEmpty(extBubble)?extSize-1:extSize); + buildDynamicValue(view, axisChartDataDTO, row, size, ObjectUtils.isNotEmpty(extBubble) ? extSize - 1 : extSize); // pop if (ObjectUtils.isNotEmpty(extBubble)) { try { @@ -504,6 +505,11 @@ public class ChartDataBuild { // antV组合图形 public static Map transMixChartDataAntV(List xAxisBase, List xAxis, List xAxisExt, List yAxis, ChartViewDTO view, List data, boolean isDrill) { + return transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill, false); + } + + public static Map transMixChartDataAntV(List xAxisBase, List xAxis, List xAxisExt, List yAxis, ChartViewDTO view, List data, boolean isDrill, boolean isLine) { + Map map = new HashMap<>(); List series = new ArrayList<>(); @@ -571,8 +577,16 @@ public class ChartDataBuild { } catch (Exception e) { axisChartDataDTO.setValue(new BigDecimal(0)); } + String category = StringUtils.defaultIfBlank(b.toString(), StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName())); + + if (isLine) { + if (ObjectUtils.isEmpty(xAxisExt)) { + category = StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName()); + } + } + axisChartDataDTO.setCategory(category); categories.add(category); @@ -1764,7 +1778,7 @@ public class ChartDataBuild { List> tableRow = (List>) map.get("tableRow"); final int xEndIndex = detailIndex; Map> groupDataList = detailData.stream().collect(Collectors.groupingBy(item -> "(" + StringUtils.join(ArrayUtils.subarray(item, 0, xEndIndex), ")-de-(") + ")")); - String extBubbleDataeaseName = ObjectUtils.isNotEmpty(extBubble)?extBubble.get(0).getDataeaseName():""; + String extBubbleDataeaseName = ObjectUtils.isNotEmpty(extBubble) ? extBubble.get(0).getDataeaseName() : ""; tableRow.forEach(row -> { BigDecimal rowValue = row.get(extBubbleDataeaseName) == null ? BigDecimal.ZERO : new BigDecimal(row.get(extBubbleDataeaseName).toString()); String key = xAxis.stream().map(x -> String.format(format, row.get(x.getDataeaseName()).toString())).collect(Collectors.joining("-de-")); @@ -1773,16 +1787,16 @@ public class ChartDataBuild { Map temp = new HashMap<>(); for (int i = 0; i < realDetailFields.size(); i++) { ChartViewFieldDTO realDetailField = realDetailFields.get(i); - if(StringUtils.equalsIgnoreCase(extBubbleDataeaseName,realDetailField.getDataeaseName())){ + if (StringUtils.equalsIgnoreCase(extBubbleDataeaseName, realDetailField.getDataeaseName())) { temp.put(realDetailField.getDataeaseName(), rowValue); - }else{ + } else { temp.put(realDetailField.getDataeaseName(), detailArr[detailIndex + i]); } } return temp; })).collect(Collectors.toList()); //详情只要一个 - row.put("details", !detailValueMapList.isEmpty() ?Collections.singletonList(detailValueMapList.getFirst()):detailValueMapList); + row.put("details", !detailValueMapList.isEmpty() ? Collections.singletonList(detailValueMapList.getFirst()) : detailValueMapList); }); // 先过滤掉所有记录数字段 List filterCountAxis = fields.stream()