From f6086f6695c9e64d6b4d55b28520ce18e9b9fbf3 Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Mon, 12 Aug 2024 16:59:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=9B=BE=E8=A1=A8-=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E5=8D=A1):=20=E6=94=AF=E6=8C=81=E6=98=BE=E7=A4=BA=E5=90=8C?= =?UTF-8?q?=E7=8E=AF=E6=AF=94=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/numeric/IndicatorHandler.java | 50 +++++++++++++++++++ .../components/editor/drag-item/QuotaItem.vue | 1 - .../js/panel/charts/others/indicator.ts | 10 ++-- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java index ad2312e88e..11f1f01044 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java @@ -1,12 +1,62 @@ package io.dataease.chart.charts.impl.numeric; +import io.dataease.chart.utils.ChartDataBuild; +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.DatasourceRequest; +import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; +import io.dataease.extensions.datasource.model.SQLMeta; +import io.dataease.extensions.datasource.provider.Provider; +import io.dataease.extensions.view.dto.*; +import io.dataease.extensions.view.util.FieldUtil; import lombok.Getter; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + @Component public class IndicatorHandler extends NumericalChartHandler { @Getter private String render = "custom"; @Getter private String type = "indicator"; + + @Override + public T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map sqlMap, SQLMeta sqlMeta, Provider provider) { + var dsMap = (Map) sqlMap.get("dsMap"); + List dsList = new ArrayList<>(); + for (Map.Entry next : dsMap.entrySet()) { + dsList.add(next.getValue().getType()); + } + boolean needOrder = Utils.isNeedOrder(dsList); + boolean crossDs = Utils.isCrossDs(dsMap); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDsList(dsMap); + var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); + var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); + var allFields = (List) filterResult.getContext().get("allFields"); + Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); + String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); + querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap); + datasourceRequest.setQuery(querySql); + logger.debug("indicator chart sql: " + querySql); + List data = (List) provider.fetchResultField(datasourceRequest).get("data"); + boolean isdrill = filterResult + .getFilterList() + .stream() + .anyMatch(ele -> ele.getFilterType() == 1); + quickCalc(xAxis, yAxis, data); + Map result = ChartDataBuild.transNormalChartData(xAxis, yAxis, view, data, isdrill); + T calcResult = (T) new ChartCalcDataResult(); + calcResult.setData(result); + calcResult.setContext(filterResult.getContext()); + calcResult.setQuerySql(querySql); + calcResult.setOriginData(data); + return calcResult; + } } diff --git a/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue b/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue index 22b5e00eab..836f1bb5c9 100644 --- a/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue +++ b/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue @@ -118,7 +118,6 @@ const isEnableCompare = () => { // 暂时只支持类别轴/维度的时间类型字段 if ( t1.length > 0 && - chart.value.type !== 'indicator' && chart.value.type !== 'label' && chart.value.type !== 'gauge' && chart.value.type !== 'liquid' diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/indicator.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/indicator.ts index 22f8973a12..4749a37fda 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/indicator.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/indicator.ts @@ -51,12 +51,16 @@ export class IndicatorChartView extends AbstractChartView { ], 'function-cfg': ['emptyDataStrategy'] } - axis: AxisType[] = ['yAxis', 'filter'] + axis: AxisType[] = ['xAxis', 'yAxis', 'filter'] axisConfig: AxisConfig = { + xAxis: { + name: `日期 / ${t('chart.dimension')}`, + limit: 1, + type: 'd' + }, yAxis: { name: `${t('chart.quota')}`, - limit: 1, - type: 'q' + limit: 1 } } constructor() {