Merge pull request #11918 from dataease/pr@dev-v2@chart-symbolic-fix

fix(图表-符号地图): 修复符号地图查看数据时,总是会显示记录数的问题
This commit is contained in:
jianneng-fit2cloud 2024-09-02 18:01:57 +08:00 committed by GitHub
commit eb4b5adc3d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 22 deletions

View File

@ -38,20 +38,16 @@ public class SymbolicMapHandler extends GroupChartHandler {
@Override @Override
public AxisFormatResult formatAxis(ChartViewDTO view) { public AxisFormatResult formatAxis(ChartViewDTO view) {
var result = super.formatAxis(view); var result = super.formatAxis(view);
var yAxis = result.getAxisMap().get(ChartAxis.yAxis); result.getAxisMap().put(ChartAxis.extBubble, view.getExtBubble());
yAxis.addAll(view.getExtBubble());
return result; return result;
} }
private Map<String, Object> customBuildResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data, List<ChartViewFieldDTO> detailFields, List<String[]> detailData) { private Map<String, Object> customBuildResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data, List<ChartViewFieldDTO> detailFields, List<String[]> detailData) {
boolean isDrill = filterResult
.getFilterList()
.stream()
.anyMatch(ele -> ele.getFilterType() == 1);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
Map<String, Object> result = ChartDataBuild.transSymbolicMapNormalWithDetail(xAxis, yAxis, data, detailFields, detailData); Map<String, Object> result = ChartDataBuild.transSymbolicMapNormalWithDetail(xAxis, yAxis, extBubble, data, detailFields, detailData);
return result; return result;
} }
@ -67,15 +63,21 @@ public class SymbolicMapHandler extends GroupChartHandler {
DatasourceRequest datasourceRequest = new DatasourceRequest(); DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDsList(dsMap); datasourceRequest.setDsList(dsMap);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble);
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields"); var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
List<ChartViewFieldDTO> countField =chartViewManege.transFieldDTO(Collections.singletonList(chartViewManege.createCountField(view.getTableId())));
List<DatasetTableFieldDTO> datasetTableFieldDTOList = FieldUtil.transFields(allFields);
SQLMeta sqlMeta1 = new SQLMeta(); SQLMeta sqlMeta1 = new SQLMeta();
BeanUtils.copyBean(sqlMeta1, sqlMeta); BeanUtils.copyBean(sqlMeta1, sqlMeta);
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, datasetTableFieldDTOList, crossDs, dsMap, Utils.getParams(datasetTableFieldDTOList), view.getCalParams(), pluginManage);
List<ChartViewFieldDTO> yFields = new ArrayList<>(); List<ChartViewFieldDTO> yAxis = new ArrayList<>();
yFields.addAll(chartViewManege.transFieldDTO(Collections.singletonList(chartViewManege.createCountField(view.getTableId())))); if(!extBubble.isEmpty() && !"*".equals(extBubble.get(0).getDataeaseName())){
yAxis.addAll(yFields); yAxis.addAll(extBubble);
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); }
yAxis.addAll(countField);
datasetTableFieldDTOList.addAll(FieldUtil.transFields(countField));
formatResult.getAxisMap().put(ChartAxis.yAxis,countField);
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, datasetTableFieldDTOList, crossDs, dsMap, Utils.getParams(datasetTableFieldDTOList), view.getCalParams(), pluginManage);
String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap);
datasourceRequest.setQuery(querySql); datasourceRequest.setQuery(querySql);
@ -107,8 +109,6 @@ public class SymbolicMapHandler extends GroupChartHandler {
} }
//自定义排序 //自定义排序
data = ChartDataUtil.resultCustomSort(xAxis, data); data = ChartDataUtil.resultCustomSort(xAxis, data);
//快速计算
quickCalc(xAxis, yAxis, data);
//数据重组逻辑可重载 //数据重组逻辑可重载
var result = customBuildResult(view, formatResult, filterResult, data, detailFields, detailData); var result = customBuildResult(view, formatResult, filterResult, data, detailFields, detailData);
T calcResult = (T) new ChartCalcDataResult(); T calcResult = (T) new ChartCalcDataResult();
@ -116,6 +116,7 @@ public class SymbolicMapHandler extends GroupChartHandler {
calcResult.setContext(filterResult.getContext()); calcResult.setContext(filterResult.getContext());
calcResult.setQuerySql(querySql); calcResult.setQuerySql(querySql);
calcResult.setOriginData(data); calcResult.setOriginData(data);
formatResult.getAxisMap().put(ChartAxis.yAxis,new ArrayList<>());
return calcResult; return calcResult;
} }
@ -124,11 +125,11 @@ public class SymbolicMapHandler extends GroupChartHandler {
var desensitizationList = (Map<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList"); var desensitizationList = (Map<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields"); var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble);
// 如果是表格导出查询 则在此处直接就可以返回 // 如果是表格导出查询 则在此处直接就可以返回
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack); var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
if (view.getIsExcelExport()) { if (view.getIsExcelExport()) {
Map<String, Object> sourceInfo = ChartDataBuild.transTableNormal(xAxis, yAxis, view, calcResult.getOriginData(), extStack, desensitizationList); Map<String, Object> sourceInfo = ChartDataBuild.transTableNormal(xAxis, extBubble, view, calcResult.getOriginData(), extStack, desensitizationList);
sourceInfo.put("sourceData", calcResult.getOriginData()); sourceInfo.put("sourceData", calcResult.getOriginData());
view.setData(sourceInfo); view.setData(sourceInfo);
return view; return view;

View File

@ -1748,7 +1748,7 @@ public class ChartDataBuild {
} }
} }
public static Map<String, Object> transSymbolicMapNormalWithDetail(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<String[]> data, List<ChartViewFieldDTO> detailFields, List<String[]> detailData) { public static Map<String, Object> transSymbolicMapNormalWithDetail(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartViewFieldDTO> extBubble, List<String[]> data, List<ChartViewFieldDTO> detailFields, List<String[]> detailData) {
int detailIndex = xAxis.size(); int detailIndex = xAxis.size();
List<ChartViewFieldDTO> realDetailFields = detailFields.subList(detailIndex, detailFields.size()); List<ChartViewFieldDTO> realDetailFields = detailFields.subList(detailIndex, detailFields.size());
@ -1756,22 +1756,24 @@ public class ChartDataBuild {
List<ChartViewFieldDTO> fields = new ArrayList<>(); List<ChartViewFieldDTO> fields = new ArrayList<>();
if (ObjectUtils.isNotEmpty(xAxis)) if (ObjectUtils.isNotEmpty(xAxis))
fields.addAll(xAxis); fields.addAll(xAxis);
if (ObjectUtils.isNotEmpty(extBubble))
fields.addAll(extBubble);
if (ObjectUtils.isNotEmpty(yAxis)) if (ObjectUtils.isNotEmpty(yAxis))
fields.addAll(yAxis); fields.addAll(yAxis);
Map<String, Object> map = transTableNormal(fields, null, data, new HashMap<>()); Map<String, Object> map = transTableNormal(fields, null, data, new HashMap<>());
List<Map<String, Object>> tableRow = (List<Map<String, Object>>) map.get("tableRow"); List<Map<String, Object>> tableRow = (List<Map<String, Object>>) map.get("tableRow");
final int xEndIndex = detailIndex; final int xEndIndex = detailIndex;
Map<String, List<String[]>> groupDataList = detailData.stream().collect(Collectors.groupingBy(item -> "(" + StringUtils.join(ArrayUtils.subarray(item, 0, xEndIndex), ")-de-(") + ")")); Map<String, List<String[]>> groupDataList = detailData.stream().collect(Collectors.groupingBy(item -> "(" + StringUtils.join(ArrayUtils.subarray(item, 0, xEndIndex), ")-de-(") + ")"));
String extBubbleDataeaseName = ObjectUtils.isNotEmpty(extBubble)?extBubble.get(0).getDataeaseName():"";
tableRow.forEach(row -> { tableRow.forEach(row -> {
BigDecimal rowValue = new BigDecimal(row.get(yAxis.get(0).getDataeaseName()).toString()); 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-")); String key = xAxis.stream().map(x -> String.format(format, row.get(x.getDataeaseName()).toString())).collect(Collectors.joining("-de-"));
List<String[]> detailFieldValueList = groupDataList.get(key); List<String[]> detailFieldValueList = groupDataList.get(key);
List<Map<String, Object>> detailValueMapList = Optional.ofNullable(detailFieldValueList).orElse(new ArrayList<>()).stream().map((detailArr -> { List<Map<String, Object>> detailValueMapList = Optional.ofNullable(detailFieldValueList).orElse(new ArrayList<>()).stream().map((detailArr -> {
Map<String, Object> temp = new HashMap<>(); Map<String, Object> temp = new HashMap<>();
for (int i = 0; i < realDetailFields.size(); i++) { for (int i = 0; i < realDetailFields.size(); i++) {
ChartViewFieldDTO realDetailField = realDetailFields.get(i); ChartViewFieldDTO realDetailField = realDetailFields.get(i);
if(StringUtils.equalsIgnoreCase(yAxis.get(0).getDataeaseName(),realDetailField.getDataeaseName())){ if(StringUtils.equalsIgnoreCase(extBubbleDataeaseName,realDetailField.getDataeaseName())){
temp.put(realDetailField.getDataeaseName(), rowValue); temp.put(realDetailField.getDataeaseName(), rowValue);
}else{ }else{
temp.put(realDetailField.getDataeaseName(), detailArr[detailIndex + i]); temp.put(realDetailField.getDataeaseName(), detailArr[detailIndex + i]);
@ -1782,7 +1784,15 @@ public class ChartDataBuild {
//详情只要一个 //详情只要一个
row.put("details", !detailValueMapList.isEmpty() ?Collections.singletonList(detailValueMapList.getFirst()):detailValueMapList); row.put("details", !detailValueMapList.isEmpty() ?Collections.singletonList(detailValueMapList.getFirst()):detailValueMapList);
}); });
map.put("fields", fields); // 先过滤掉所有记录数字段
List<ChartViewFieldDTO> filterCountAxis = fields.stream()
.filter(item -> !StringUtils.equalsIgnoreCase(item.getDataeaseName(), "*"))
.collect(Collectors.toList());
// 如果气泡大小是记录数添加到字段列表中
if (ObjectUtils.isNotEmpty(extBubble) && "*".equals(extBubble.get(0).getDataeaseName())) {
filterCountAxis.addAll(yAxis);
}
map.put("fields", filterCountAxis);
map.put("detailFields", realDetailFields); map.put("detailFields", realDetailFields);
map.put("tableRow", tableRow); map.put("tableRow", tableRow);
return map; return map;