From da310e2f01c30efa2a470c99e88965b009dd89ab Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 2 Jul 2024 10:56:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9F=B1=E7=BA=BF=E7=BB=84=E5=90=88=E5=9B=BE=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E9=92=BB=E5=8F=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/mix/GroupMixHandler.java | 42 +------------ .../chart/charts/impl/mix/MixHandler.java | 60 +++++++++++++------ .../charts/impl/mix/StackMixHandler.java | 45 +------------- .../chart/manage/ChartDataManage.java | 9 +++ .../extensions/view/dto/AxisFormatResult.java | 2 + 5 files changed, 55 insertions(+), 103 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/GroupMixHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/GroupMixHandler.java index 1012ba60b6..4b58abfbc0 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/GroupMixHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/GroupMixHandler.java @@ -41,6 +41,7 @@ public class GroupMixHandler extends MixHandler { xAxisGroup.addAll(view.getXAxisExt()); axisMap.put(ChartAxis.xAxis, xAxisGroup); context.put("xAxisBase", xAxis); + axisMap.put(ChartAxis.drill, new ArrayList<>(view.getDrillFields())); return result; } @@ -49,45 +50,4 @@ public class GroupMixHandler extends MixHandler { return super.buildNormalResult(view, formatResult, filterResult, data); } - @Override - public ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult) { - var desensitizationList = (Map) filterResult.getContext().get("desensitizationList"); - var leftCalcResult = (ChartCalcDataResult) calcResult.getData().get("left"); - var leftFields = new ArrayList(); - leftFields.addAll(view.getXAxis()); - leftFields.addAll(view.getXAxisExt()); - leftFields.addAll(view.getYAxis()); - var leftOriginData = leftCalcResult.getOriginData(); - var leftTable = ChartDataBuild.transTableNormal(leftFields, view, leftOriginData, desensitizationList); - mergeAssistField(leftCalcResult.getDynamicAssistFields(), leftCalcResult.getAssistData()); - var leftData = new HashMap(leftTable); - leftData.putAll(leftCalcResult.getData()); - leftData.put("dynamicAssistLines", leftCalcResult.getDynamicAssistFields()); - - var rightCalcResult = (ChartCalcDataResult) calcResult.getData().get("right"); - var rightFields = new ArrayList(); - rightFields.addAll(view.getXAxis()); - rightFields.addAll(view.getExtBubble()); - rightFields.addAll(view.getYAxisExt()); - var rightOriginData = rightCalcResult.getOriginData(); - var rightTable = ChartDataBuild.transTableNormal(rightFields, view, rightOriginData, desensitizationList); - mergeAssistField(rightCalcResult.getDynamicAssistFields(), rightCalcResult.getAssistData()); - var rightData = new HashMap(rightTable); - rightData.putAll(rightCalcResult.getData()); - rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields()); - - var allFields = (List) filterResult.getContext().get("allFields"); - // 构建结果 - Map chartData = new TreeMap<>(); - chartData.put("left", leftData); - chartData.put("right", rightData); - - var drillFilters = filterResult.getFilterList().stream().filter(f -> f.getFilterType() == 1).collect(Collectors.toList()); - var isDrill = CollectionUtils.isNotEmpty(drillFilters); - view.setDrillFilters(drillFilters); - view.setDrill(isDrill); - view.setSql(leftCalcResult.getQuerySql()); - view.setData(chartData); - return view; - } } 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 5fa6c93d31..f04cc6fd52 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 @@ -45,6 +45,7 @@ public class MixHandler extends YoyChartHandler { //图表整体主维度 axisMap.put(ChartAxis.xAxis, new ArrayList<>(view.getXAxis())); context.put("xAxisBase", new ArrayList<>(view.getXAxis())); + axisMap.put(ChartAxis.drill, new ArrayList<>(view.getDrillFields())); return result; } @@ -93,26 +94,46 @@ public class MixHandler extends YoyChartHandler { } catch (Exception e) { e.printStackTrace(); } + + 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))); + formatResult2.setAxisMap(axisMap); + formatResult2.setContext(formatResult.getContext()); + // 计算右轴,包含 xAxis,xAxisExt,yAxisExt,需要去掉 group 和 stack - var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); - var extStack = formatResult.getAxisMap().get(ChartAxis.extStack); - var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt); - xAxis = xAxis.subList(0, xAxis.size() - extStack.size() - xAxisExt.size()); - var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble); + 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); xAxis.addAll(extBubble); - formatResult.getAxisMap().put(ChartAxis.xAxis, xAxis); - formatResult.getAxisMap().put(ChartAxis.xAxisExt, extBubble); - var yAxisExt = formatResult.getAxisMap().get(ChartAxis.yAxisExt); - formatResult.getAxisMap().put(ChartAxis.yAxis, yAxisExt); - formatResult.getContext().remove("yoyFiltered"); + 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); + formatResult2.getAxisMap().put(ChartAxis.yAxis, yAxisExt); + formatResult2.getContext().remove("yoyFiltered"); + + + formatResult.getContext().put("subAxisMap", axisMap); + // 右轴重新检测同环比过滤 - customFilter(view, filterResult.getFilterList(), formatResult); - var rightResult = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider); + customFilter(view, filterResult.getFilterList(), formatResult2); + var rightResult = (T) super.calcChartResult(view, formatResult2, filterResult, sqlMap, sqlMeta, provider); try { //如果有同环比过滤,应该用原始sql var originSql = rightResult.getQuerySql(); var rightAssistFields = dynamicAssistFields.stream().filter(x -> StringUtils.equalsAnyIgnoreCase(x.getYAxisType(), "right")).toList(); - var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); + var yAxis = formatResult2.getAxisMap().get(ChartAxis.yAxis); var assistFields = getAssistFields(rightAssistFields, yAxis); if (CollectionUtils.isNotEmpty(assistFields)) { var req = new DatasourceRequest(); @@ -140,8 +161,8 @@ public class MixHandler extends YoyChartHandler { var desensitizationList = (Map) filterResult.getContext().get("desensitizationList"); var leftCalcResult = (ChartCalcDataResult) calcResult.getData().get("left"); var leftFields = new ArrayList(); - leftFields.addAll(view.getXAxis()); - leftFields.addAll(view.getYAxis()); + leftFields.addAll(formatResult.getAxisMap().get(ChartAxis.xAxis)); + leftFields.addAll(formatResult.getAxisMap().get(ChartAxis.yAxis)); mergeAssistField(leftCalcResult.getDynamicAssistFields(), leftCalcResult.getAssistData()); var leftOriginData = leftCalcResult.getOriginData(); var leftTable = ChartDataBuild.transTableNormal(leftFields, view, leftOriginData, desensitizationList); @@ -151,13 +172,14 @@ public class MixHandler extends YoyChartHandler { var rightCalcResult = (ChartCalcDataResult) calcResult.getData().get("right"); var rightFields = new ArrayList(); - rightFields.addAll(view.getXAxis()); - rightFields.addAll(view.getExtBubble()); - rightFields.addAll(view.getYAxisExt()); + + var subAxisMap = (HashMap>) formatResult.getContext().get("subAxisMap"); + rightFields.addAll(subAxisMap.get(ChartAxis.xAxis)); + rightFields.addAll(subAxisMap.get(ChartAxis.yAxis)); + mergeAssistField(rightCalcResult.getDynamicAssistFields(), rightCalcResult.getAssistData()); var rightOriginData = rightCalcResult.getOriginData(); var rightTable = ChartDataBuild.transTableNormal(rightFields, view, rightOriginData, desensitizationList); - mergeAssistField(rightCalcResult.getDynamicAssistFields(), rightCalcResult.getAssistData()); var rightData = new HashMap(rightTable); rightData.putAll(rightCalcResult.getData()); rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields()); diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/StackMixHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/StackMixHandler.java index d130b7119b..4d2ff9883d 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/StackMixHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/StackMixHandler.java @@ -41,6 +41,7 @@ public class StackMixHandler extends MixHandler { xAxisStack.addAll(view.getExtStack()); axisMap.put(ChartAxis.xAxis, xAxisStack); context.put("xAxisBase", xAxis); + axisMap.put(ChartAxis.drill, new ArrayList<>(view.getDrillFields())); return result; } @@ -61,49 +62,7 @@ public class StackMixHandler extends MixHandler { var xAxisBase = (List) formatResult.getContext().get("xAxisBase"); var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt); - return ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill); + return super.buildNormalResult(view, formatResult, filterResult, data); } } - - @Override - public ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult) { - var desensitizationList = (Map) filterResult.getContext().get("desensitizationList"); - var leftCalcResult = (ChartCalcDataResult) calcResult.getData().get("left"); - var leftFields = new ArrayList(); - leftFields.addAll(view.getXAxis()); - leftFields.addAll(view.getExtStack()); - leftFields.addAll(view.getYAxis()); - var leftOriginData = leftCalcResult.getOriginData(); - var leftTable = ChartDataBuild.transTableNormal(leftFields, view, leftOriginData, desensitizationList); - mergeAssistField(leftCalcResult.getDynamicAssistFields(), leftCalcResult.getAssistData()); - var leftData = new HashMap(leftTable); - leftData.putAll(leftCalcResult.getData()); - leftData.put("dynamicAssistLines", leftCalcResult.getDynamicAssistFields()); - - var rightCalcResult = (ChartCalcDataResult) calcResult.getData().get("right"); - var rightFields = new ArrayList(); - rightFields.addAll(view.getXAxis()); - rightFields.addAll(view.getExtBubble()); - rightFields.addAll(view.getYAxisExt()); - var rightOriginData = rightCalcResult.getOriginData(); - var rightTable = ChartDataBuild.transTableNormal(rightFields, view, rightOriginData, desensitizationList); - mergeAssistField(rightCalcResult.getDynamicAssistFields(), rightCalcResult.getAssistData()); - var rightData = new HashMap(rightTable); - rightData.putAll(rightCalcResult.getData()); - rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields()); - - var allFields = (List) filterResult.getContext().get("allFields"); - // 构建结果 - Map chartData = new TreeMap<>(); - chartData.put("left", leftData); - chartData.put("right", rightData); - - var drillFilters = filterResult.getFilterList().stream().filter(f -> f.getFilterType() == 1).collect(Collectors.toList()); - var isDrill = CollectionUtils.isNotEmpty(drillFilters); - view.setDrillFilters(drillFilters); - view.setDrill(isDrill); - view.setSql(leftCalcResult.getQuerySql()); - view.setData(chartData); - return view; - } } diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index 310d17870f..e55f69e960 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -104,6 +104,8 @@ public class ChartDataManage { DEException.throwException(ResultCode.DATA_IS_WRONG.code(), Translator.get("i18n_chart_not_handler") + ": " + view.getRender() + "," + view.getType()); } + var dillAxis = new ArrayList(); + DatasetGroupInfoDTO table = datasetGroupManage.getDatasetGroupInfoDTO(view.getTableId(), null); if (table == null) { DEException.throwException(ResultCode.DATA_IS_WRONG.code(), Translator.get("i18n_no_ds")); @@ -290,6 +292,7 @@ public class ChartDataManage { if (!fields.contains(dim.getId())) { viewField.setSource(FieldSource.DRILL); xAxis.add(viewField); + dillAxis.add(viewField); fields.add(dim.getId()); } if (i == drillRequestList.size() - 1) { @@ -298,13 +301,19 @@ public class ChartDataManage { viewField.setSource(FieldSource.DRILL); nextDrillField.setSort(getDrillSort(xAxis, drill.get(0))); xAxis.add(nextDrillField); + dillAxis.add(nextDrillField); fields.add(nextDrillField.getId()); + } else { + dillAxis.add(nextDrillField); } } } } } } + + formatResult.getContext().put("dillAxis", dillAxis); + //转义特殊字符 extFilterList = extFilterList.stream().peek(ele -> { if (ObjectUtils.isNotEmpty(ele.getValue())) { diff --git a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/AxisFormatResult.java b/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/AxisFormatResult.java index 523b9d0257..befd3b5cfb 100644 --- a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/AxisFormatResult.java +++ b/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/AxisFormatResult.java @@ -2,12 +2,14 @@ package io.dataease.extensions.view.dto; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; import java.util.Map; @Data @AllArgsConstructor +@NoArgsConstructor public class AxisFormatResult { private Map> axisMap; private Map context;