forked from github/dataease
fix(图表): 修复柱线组合图不能钻取的问题
This commit is contained in:
parent
49ecc44f46
commit
da310e2f01
@ -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<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
|
||||
var leftCalcResult = (ChartCalcDataResult) calcResult.getData().get("left");
|
||||
var leftFields = new ArrayList<ChartViewFieldDTO>();
|
||||
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<String, Object>(leftTable);
|
||||
leftData.putAll(leftCalcResult.getData());
|
||||
leftData.put("dynamicAssistLines", leftCalcResult.getDynamicAssistFields());
|
||||
|
||||
var rightCalcResult = (ChartCalcDataResult) calcResult.getData().get("right");
|
||||
var rightFields = new ArrayList<ChartViewFieldDTO>();
|
||||
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<String, Object>(rightTable);
|
||||
rightData.putAll(rightCalcResult.getData());
|
||||
rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields());
|
||||
|
||||
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
|
||||
// 构建结果
|
||||
Map<String, Object> 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;
|
||||
}
|
||||
}
|
||||
|
@ -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<ChartAxis, List<ChartViewFieldDTO>>();
|
||||
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<ChartViewFieldDTO>) 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<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
|
||||
var leftCalcResult = (ChartCalcDataResult) calcResult.getData().get("left");
|
||||
var leftFields = new ArrayList<ChartViewFieldDTO>();
|
||||
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<ChartViewFieldDTO>();
|
||||
rightFields.addAll(view.getXAxis());
|
||||
rightFields.addAll(view.getExtBubble());
|
||||
rightFields.addAll(view.getYAxisExt());
|
||||
|
||||
var subAxisMap = (HashMap<ChartAxis, List<ChartViewFieldDTO>>) 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<String, Object>(rightTable);
|
||||
rightData.putAll(rightCalcResult.getData());
|
||||
rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields());
|
||||
|
@ -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<ChartViewFieldDTO>) 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<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
|
||||
var leftCalcResult = (ChartCalcDataResult) calcResult.getData().get("left");
|
||||
var leftFields = new ArrayList<ChartViewFieldDTO>();
|
||||
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<String, Object>(leftTable);
|
||||
leftData.putAll(leftCalcResult.getData());
|
||||
leftData.put("dynamicAssistLines", leftCalcResult.getDynamicAssistFields());
|
||||
|
||||
var rightCalcResult = (ChartCalcDataResult) calcResult.getData().get("right");
|
||||
var rightFields = new ArrayList<ChartViewFieldDTO>();
|
||||
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<String, Object>(rightTable);
|
||||
rightData.putAll(rightCalcResult.getData());
|
||||
rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields());
|
||||
|
||||
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
|
||||
// 构建结果
|
||||
Map<String, Object> 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;
|
||||
}
|
||||
}
|
||||
|
@ -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<ChartViewFieldDTO>();
|
||||
|
||||
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())) {
|
||||
|
@ -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<ChartAxis, List<ChartViewFieldDTO>> axisMap;
|
||||
private Map<String, Object> context;
|
||||
|
Loading…
Reference in New Issue
Block a user