feat(视图): 色彩地图增加标记功能

This commit is contained in:
fit2cloud-chenyw
2022-12-15 14:01:28 +08:00
parent acd771cfd0
commit 4fa41d8676
60 changed files with 2534 additions and 18 deletions

View File

@@ -558,6 +558,12 @@ public class ChartViewService {
return data;
}
public Boolean containDetailField(ChartViewDTO view) {
List<String> detailFieldViewTypes = new ArrayList<>();
detailFieldViewTypes.add("map");
return detailFieldViewTypes.contains(view.getType());
}
public ChartViewDTO calcData(ChartViewDTO view, ChartExtRequest chartExtRequest, boolean cache) throws Exception {
ChartViewDTO chartViewDTO = new ChartViewDTO();
if (ObjectUtils.isEmpty(view)) {
@@ -906,6 +912,9 @@ public class ChartViewService {
pageInfo.setGoPage(chartExtRequest.getGoPage());
pageInfo.setPageSize(chartExtRequest.getPageSize());
List<ChartViewFieldDTO> detailFieldList = new ArrayList<>();
String detailFieldSql = null;
List<String[]> detailData = new ArrayList<>();
//如果不是插件视图 走原生逻辑
if (table.getMode() == 0) {// 直连
if (ObjectUtils.isEmpty(ds)) {
@@ -931,6 +940,11 @@ public class ChartViewService {
totalPageSql = qp.getResultCount(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
} else {
querySql = qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
detailFieldList.addAll(xAxis);
detailFieldList.addAll(viewFields);
detailFieldSql = qp.getSQLWithPage(true, dataTableInfoDTO.getTable(), detailFieldList, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
}
}
} else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.SQL.name())) {
String sql = dataTableInfoDTO.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())) : dataTableInfoDTO.getSql();
@@ -994,6 +1008,11 @@ public class ChartViewService {
logger.info(datasourceAssistRequest.getQuery());
assistData = datasourceProvider.getData(datasourceAssistRequest);
}
if (StringUtils.isNotBlank(detailFieldSql)) {
datasourceRequest.setQuery(detailFieldSql);
detailData = datasourceProvider.getData(datasourceRequest);
}
} else if (table.getMode() == 1) {// 抽取
// 连接doris构建doris数据源查询
datasourceRequest.setDatasource(ds);
@@ -1200,6 +1219,9 @@ public class ChartViewService {
}
// table组件明细表也用于导出数据
Map<String, Object> mapTableNormal = ChartDataBuild.transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList);
if (CollectionUtils.isNotEmpty(detailData)) {
mapTableNormal = ChartDataBuild.transTableNormalWithDetail(xAxis, yAxis, data, detailFieldList, detailData, desensitizationList);
}
chartViewDTO = uniteViewResult(datasourceRequest.getQuery(), mapChart, mapTableNormal, view, isDrill, drillFilters, dynamicAssistFields, assistData);
chartViewDTO.setTotalPage(totalPage);
chartViewDTO.setTotalItems(totalItems);

View File

@@ -1,5 +1,6 @@
package io.dataease.service.chart.util;
import cn.hutool.core.util.ArrayUtil;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.dto.chart.*;
import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO;
@@ -952,6 +953,46 @@ public class ChartDataBuild {
return transTableNormal(fields, view, data, desensitizationList);
}
public static Map<String, Object> transTableNormalWithDetail(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<String[]> data, List<ChartViewFieldDTO> detailFields, List<String[]> detailData, Map<String, ColumnPermissionItem> desensitizationList) {
int detailIndex = xAxis.size();
List<ChartViewFieldDTO> realDetailFields = detailFields.subList(detailIndex, detailFields.size());
List<ChartViewFieldDTO> fields = new ArrayList<>();
if (CollectionUtils.isNotEmpty(xAxis))
fields.addAll(xAxis);
if (CollectionUtils.isNotEmpty(yAxis))
fields.addAll(yAxis);
Map<String, Object> map = transTableNormal(fields, null, data, desensitizationList);
List<Map<String, Object>> tableRow = (List<Map<String, Object>>) map.get("tableRow");
final int xEndIndex = detailIndex;
Map<String, List<String[]>> groupDataList = detailData.stream().collect(Collectors.groupingBy(item -> ArrayUtil.join(ArrayUtil.sub(item, 0, xEndIndex), "-de-", "(", ")")));
tableRow.forEach(row -> {
String key = xAxis.stream().map(x -> row.get(x.getDataeaseName()).toString()).collect(Collectors.joining("-de-", "(", ")"));
List<String[]> detailFieldValueList = groupDataList.get(key);
List<Map<String, Object>> detailValueMapList = detailFieldValueList.stream().map((detailArr -> {
Map<String, Object> temp = new HashMap<>();
for (int i = 0; i < realDetailFields.size(); i++) {
ChartViewFieldDTO realDetailField = realDetailFields.get(i);
temp.put(realDetailField.getDataeaseName(), detailArr[detailIndex + i]);
}
return temp;
})).collect(Collectors.toList());
row.put("details", detailValueMapList);
});
ChartViewFieldDTO detailFieldDTO = new ChartViewFieldDTO();
detailFieldDTO.setId("DataEase-Detail");
detailFieldDTO.setName("detail");
detailFieldDTO.setDataeaseName("detail");
fields.add(detailFieldDTO);
map.put("fields", fields);
map.put("detailFields", realDetailFields);
map.put("tableRow", tableRow);
return map;
}
// 表格
public static Map<String, Object> transTableNormal(Map<String, List<ChartViewFieldDTO>> fieldMap, ChartViewWithBLOBs view, List<String[]> data, Map<String, ColumnPermissionItem> desensitizationList) {