diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java index 22bdc2fed3..59fa541b89 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableNormalHandler.java @@ -4,11 +4,14 @@ 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.ExtWhere2Str; 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; @@ -16,9 +19,11 @@ import io.dataease.extensions.datasource.provider.Provider; import io.dataease.extensions.view.dto.*; import io.dataease.extensions.view.util.ChartDataUtil; import io.dataease.extensions.view.util.FieldUtil; +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; @@ -110,7 +115,7 @@ public class TableNormalHandler extends DefaultChartHandler { var tablePageMode = (String) filterResult.getContext().get("tablePageMode"); var totalPageSql = "SELECT COUNT(*) FROM (" + SQLProvider.createQuerySQLNoSort(sqlMeta, true, view) + ") COUNT_TEMP"; - if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase(tablePageMode, "page")) { + if (StringUtils.equalsIgnoreCase(tablePageMode, "page")) { totalPageSql = provider.rebuildSQL(totalPageSql, sqlMeta, crossDs, dsMap); datasourceRequest.setQuery(totalPageSql); datasourceRequest.setTotalPageFlag(true); @@ -131,7 +136,6 @@ public class TableNormalHandler extends DefaultChartHandler { List data = (List) provider.fetchResultField(datasourceRequest).get("data"); //自定义排序 data = ChartDataUtil.resultCustomSort(xAxis, yAxis, view.getSortPriority(), data); - var yoyFiltered = filterResult.getContext().get("yoyFiltered") != null; if (yoyFiltered) { // 这里没加分页,因为加了分页参数可能会把原始数据挤出去 @@ -208,6 +212,56 @@ public class TableNormalHandler extends DefaultChartHandler { } catch (Exception e) { e.printStackTrace(); } + // 自定义汇总 + var basicStyle = (Map) 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(); + var seriesList = JsonUtil.parseList(JsonUtil.toJSONString(fieldList).toString(), new TypeReference>(){}); + seriesList.forEach(field -> { + if (!BooleanUtils.isTrue(field.getShow()) || !"custom".equalsIgnoreCase(field.getSummary())) { + return; + } + if (StringUtils.isBlank(field.getOriginName())) { + 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(); + // 清空维度值,获取完结果再设置回去 + sqlMeta.setXFields(Collections.emptyList()); + List 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) provider.fetchResultField(customSumReq).get("data"); + if (CollectionUtils.isNotEmpty(customSumData)) { + var customSumResult = new HashMap(); + // 只取第一行结果 + var customSumArr = customSumData.get(0); + for (int i = 0; i < customSumArr.length; i++) { + if (customCalcFields.get(i) != null) { + customSumResult.put(customCalcFields.get(i).getField(), Double.valueOf(customSumArr[i])); + } + } + result.put("customSumResult", customSumResult); + } + sqlMeta.setXFields(xFields); + } + } + } return calcResult; } } diff --git a/core/core-frontend/src/models/chart/chart-attr.d.ts b/core/core-frontend/src/models/chart/chart-attr.d.ts index ed1380f494..65cfa5e8d9 100644 --- a/core/core-frontend/src/models/chart/chart-attr.d.ts +++ b/core/core-frontend/src/models/chart/chart-attr.d.ts @@ -306,6 +306,7 @@ declare interface ChartBasicStyle { show: boolean field: string summary: string + originName?: string }> /** * 符号地图符号大小最小值 diff --git a/core/core-frontend/src/models/chart/chart.d.ts b/core/core-frontend/src/models/chart/chart.d.ts index 544d413060..81f9aff462 100644 --- a/core/core-frontend/src/models/chart/chart.d.ts +++ b/core/core-frontend/src/models/chart/chart.d.ts @@ -33,6 +33,7 @@ declare interface Chart { tableRow: [] } customCalc: any + customSumResult?: Record } xAxis?: Axis[] xAxisExt?: Axis[] diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue index d0b2e5d59d..4b0d35df0e 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue @@ -9,7 +9,6 @@ import YAxisSelector from '@/views/chart/components/editor/editor-style/componen import DualYAxisSelector from '@/views/chart/components/editor/editor-style/components/DualYAxisSelector.vue' import TitleSelector from '@/views/chart/components/editor/editor-style/components/TitleSelector.vue' import LegendSelector from '@/views/chart/components/editor/editor-style/components/LegendSelector.vue' -import SummarySelector from '@/views/chart/components/editor/editor-style/components/SummarySelector.vue' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { storeToRefs } from 'pinia' import CollapseSwitchItem from '@/components/collapse-switch-item/src/CollapseSwitchItem.vue' @@ -22,6 +21,7 @@ import BackgroundOverallCommon from '@/components/visualization/component-backgr import TableHeaderSelector from '@/views/chart/components/editor/editor-style/components/table/TableHeaderSelector.vue' import TableCellSelector from '@/views/chart/components/editor/editor-style/components/table/TableCellSelector.vue' import TableTotalSelector from '@/views/chart/components/editor/editor-style/components/table/TableTotalSelector.vue' +import SummarySelector from '@/views/chart/components/editor/editor-style/components/table/SummarySelector.vue' import MiscStyleSelector from '@/views/chart/components/editor/editor-style/components/MiscStyleSelector.vue' import IndicatorValueSelector from '@/views/chart/components/editor/editor-style/components/IndicatorValueSelector.vue' import IndicatorNameSelector from '@/views/chart/components/editor/editor-style/components/IndicatorNameSelector.vue' diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/SummarySelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/table/SummarySelector.vue similarity index 65% rename from core/core-frontend/src/views/chart/components/editor/editor-style/components/SummarySelector.vue rename to core/core-frontend/src/views/chart/components/editor/editor-style/components/table/SummarySelector.vue index 5a8878151c..61d87a3c71 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/SummarySelector.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/table/SummarySelector.vue @@ -1,10 +1,12 @@