mirror of
https://github.com/dataease/dataease.git
synced 2026-05-15 05:22:13 +08:00
feat(图表): 明细表支持自定义汇总 #17539
This commit is contained in:
@@ -1,11 +1,16 @@
|
||||
package io.dataease.chart.charts.impl.table;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import io.dataease.api.chart.dto.PageInfo;
|
||||
import io.dataease.api.dataset.union.DatasetGroupInfoDTO;
|
||||
import io.dataease.chart.charts.impl.DefaultChartHandler;
|
||||
import io.dataease.constant.DeTypeConstants;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
import io.dataease.engine.sql.SQLProvider;
|
||||
import io.dataease.engine.trans.Dimension2SQLObj;
|
||||
import io.dataease.engine.trans.Quota2SQLObj;
|
||||
import io.dataease.engine.utils.Utils;
|
||||
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceRequest;
|
||||
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.extensions.datasource.model.SQLMeta;
|
||||
@@ -14,12 +19,16 @@ import io.dataease.extensions.view.dto.*;
|
||||
import io.dataease.extensions.view.util.ChartDataUtil;
|
||||
import io.dataease.extensions.view.util.FieldUtil;
|
||||
import io.dataease.utils.BeanUtils;
|
||||
import io.dataease.utils.IDUtils;
|
||||
import io.dataease.utils.JsonUtil;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -183,6 +192,67 @@ public class TableInfoHandler extends DefaultChartHandler {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// 自定义汇总
|
||||
var basicStyle = (Map<String, Object>) view.getCustomAttr().get("basicStyle");
|
||||
var showSummary = BooleanUtils.isTrue((Boolean) basicStyle.get("showSummary"));
|
||||
if (showSummary) {
|
||||
var fieldList = (List) basicStyle.get("seriesSummary");
|
||||
if (CollectionUtils.isNotEmpty(fieldList)) {
|
||||
var customCalcFields = new ArrayList<ChartViewFieldDTO>();
|
||||
var seriesList = JsonUtil.parseList(JsonUtil.toJSONString(fieldList).toString(), new TypeReference<List<ChartViewFieldDTO>>(){});
|
||||
var quotaIds = allFields.stream().map(DatasetTableFieldDTO::getDataeaseName).collect(Collectors.toSet());
|
||||
seriesList.forEach(field -> {
|
||||
if (!BooleanUtils.isTrue(field.getShow()) || !"custom".equalsIgnoreCase(field.getSummary())) {
|
||||
return;
|
||||
}
|
||||
if (StringUtils.isBlank(field.getOriginName())) {
|
||||
return;
|
||||
}
|
||||
if (!quotaIds.contains(field.getField())) {
|
||||
return;
|
||||
}
|
||||
field.setSummary("");
|
||||
field.setDeType(DeTypeConstants.DE_FLOAT);
|
||||
field.setId(IDUtils.snowID());
|
||||
field.setExtField(ExtFieldConstant.EXT_CALC);
|
||||
customCalcFields.add(field);
|
||||
});
|
||||
if (!customCalcFields.isEmpty()) {
|
||||
var xFields = sqlMeta.getXFields();
|
||||
var xOrder = sqlMeta.getXOrders();
|
||||
// 清空维度值,获取完结果再设置回去
|
||||
sqlMeta.setXFields(Collections.emptyList());
|
||||
sqlMeta.setXOrders(Collections.emptyList());
|
||||
List<DatasetTableFieldDTO> tmpList = FieldUtil.transFields(allFields);
|
||||
tmpList.addAll(customCalcFields);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, customCalcFields, tmpList, crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage);
|
||||
String customSumSql = SQLProvider.createQuerySQL(sqlMeta, false, !StringUtils.equalsIgnoreCase(dsMap.values().iterator().next().getType(), "es"), view);
|
||||
customSumSql = provider.rebuildSQL(customSumSql, sqlMeta, crossDs, dsMap);
|
||||
var customSumReq = new DatasourceRequest();
|
||||
customSumReq.setIsCross(crossDs);
|
||||
customSumReq.setDsList(dsMap);
|
||||
customSumReq.setQuery(customSumSql);
|
||||
var customSumData = (List<String[]>) provider.fetchResultField(customSumReq).get("data");
|
||||
if (CollectionUtils.isNotEmpty(customSumData)) {
|
||||
var customSumResult = new HashMap<String, BigDecimal>();
|
||||
// 只取第一行结果
|
||||
var customSumArr = customSumData.get(0);
|
||||
for (int i = 0; i < customSumArr.length; i++) {
|
||||
if (customCalcFields.get(i) != null && customSumArr[i] != null) {
|
||||
try {
|
||||
customSumResult.put(customCalcFields.get(i).getField(), new BigDecimal(customSumArr[i]));
|
||||
} catch (Exception e) {
|
||||
customSumResult.put(customCalcFields.get(i).getField(), new BigDecimal(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
result.put("customSumResult", customSumResult);
|
||||
}
|
||||
sqlMeta.setXFields(xFields);
|
||||
sqlMeta.setXOrders(xOrder);
|
||||
}
|
||||
}
|
||||
}
|
||||
return calcResult;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -522,7 +522,12 @@ export class TableInfo extends S2ChartView<TableSheet> {
|
||||
// 计算汇总加入到数据里,冻结最后一行
|
||||
s2Options.frozenTrailingRowCount = 1
|
||||
const axis = filter(xAxis, axis => [2, 3, 4].includes(axis.deType))
|
||||
const summaryObj = getSummaryRow(data, axis, basicStyle.seriesSummary) as any
|
||||
const summaryObj = getSummaryRow(
|
||||
data,
|
||||
axis,
|
||||
basicStyle.seriesSummary,
|
||||
chart.data.customSumResult
|
||||
) as any
|
||||
data.push(summaryObj)
|
||||
}
|
||||
const { mergeCells } = tableCell
|
||||
|
||||
Reference in New Issue
Block a user