From 283b2f7a7d32aee46fbf148821b9b8b6381a4861 Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Tue, 1 Apr 2025 11:04:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=AD=90=E5=BC=B9=E5=9B=BE=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E7=9B=AE=E6=A0=87=E5=80=BC=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=BC=98=E5=8C=96=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/bar/BulletGraphHandler.java | 77 +++++++++++++++++++ .../components/bullet/BulletRangeSelector.vue | 3 + .../bullet/BulletTargetSelector.vue | 4 +- .../js/panel/charts/bar/bullet-graph.ts | 6 +- 4 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BulletGraphHandler.java diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BulletGraphHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BulletGraphHandler.java new file mode 100644 index 0000000000..c658938561 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BulletGraphHandler.java @@ -0,0 +1,77 @@ +package io.dataease.chart.charts.impl.bar; + +import io.dataease.chart.charts.impl.YoyChartHandler; +import io.dataease.chart.utils.ChartDataBuild; +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 lombok.Getter; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class BulletGraphHandler extends YoyChartHandler { + @Getter + private String type = "bullet-graph"; + + @Override + public AxisFormatResult formatAxis(ChartViewDTO view) { + var result = super.formatAxis(view); + var yAxis = result.getAxisMap().get(ChartAxis.yAxis); + yAxis.addAll(view.getYAxisExt()); + yAxis.addAll(view.getExtBubble()); + yAxis.addAll(view.getExtTooltip()); + result.getAxisMap().put(ChartAxis.yAxis, yAxis); + result.getAxisMap().put(ChartAxis.yAxisExt, view.getYAxisExt()); + result.getAxisMap().put(ChartAxis.extBubble, view.getExtBubble()); + result.getAxisMap().put(ChartAxis.extTooltip, view.getExtTooltip()); + return result; + } + + @Override + public Map buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List data) { + boolean isDrill = filterResult + .getFilterList() + .stream() + .anyMatch(ele -> ele.getFilterType() == 1); + var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); + var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); + return ChartDataBuild.transChartData(xAxis, yAxis, view, data, isDrill); + } + @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()); + } + var result = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider); + try { + //如果有同环比过滤,应该用原始sql + var originSql = result.getQuerySql(); + var dynamicAssistFields = getDynamicAssistFields(view); + var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); + var assistFields = getAssistFields(dynamicAssistFields, yAxis); + if (CollectionUtils.isNotEmpty(assistFields)) { + var req = new DatasourceRequest(); + req.setDsList(dsMap); + var assistSql = assistSQL(originSql, assistFields, dsMap); + req.setQuery(assistSql); + logger.debug("calcite assistSql sql: " + assistSql); + var assistData = (List) provider.fetchResultField(req).get("data"); + result.setAssistData(assistData); + result.setDynamicAssistFields(dynamicAssistFields); + } + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + +} diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletRangeSelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletRangeSelector.vue index c081e65525..ad94e9e9c1 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletRangeSelector.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletRangeSelector.vue @@ -58,6 +58,9 @@ const changeStyle = (prop?) => { emit('onMiscChange', { data: { bullet: { ...state.bulletForm } }, requestData: true }, prop) } const changeRangeNumber = () => { + if (state.bulletForm.bar.ranges.fixedRangeNumber === null) { + state.bulletForm.bar.ranges.fixedRangeNumber = 1 + } if (state.rangeList.length > state.bulletForm.bar.ranges.fixedRangeNumber) { state.rangeList = state.rangeList.slice(0, state.bulletForm.bar.ranges.fixedRangeNumber) } else { diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletTargetSelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletTargetSelector.vue index 36255b16e2..60e9da1820 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletTargetSelector.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/bullet/BulletTargetSelector.vue @@ -46,6 +46,9 @@ watch( { deep: true } ) const changeStyle = (prop?) => { + if (state.bulletForm.bar.target.value === null) { + state.bulletForm.bar.target.value = 1 + } emit('onMiscChange', { data: { bullet: { ...state.bulletForm } }, requestData: true }, prop) } @@ -142,7 +145,6 @@ onMounted(() => { :effect="props.themes" v-model="state.bulletForm.bar.target.value" :min="1" - :max="100" size="small" controls-position="right" @change="changeStyle('bar.target.value')" diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bullet-graph.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bullet-graph.ts index 033d6120af..b8be6e7890 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bullet-graph.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bullet-graph.ts @@ -130,14 +130,14 @@ export class BulletGraph extends G2PlotChartView { // 处理自定义区间 const { bullet } = parseJson(chart.customAttr).misc if (bullet.bar.ranges.showType === 'fixed') { - const customRange = bullet.bar.ranges.fixedRange?.map(item => item.fixedRangeValue) || [] + const customRange = bullet.bar.ranges.fixedRange?.map(item => item.fixedRangeValue) || [0] result.forEach(item => (item.ranges = customRange)) } else { result.forEach(item => (item.ranges = item.originalRanges)) } // 处理自定义目标值 if (bullet.bar.target.showType === 'fixed') { - const customTarget = bullet.bar.target.value + const customTarget = bullet.bar.target.value || 0 result.forEach(item => (item.target = customTarget)) } else { result.forEach(item => (item.target = item.originalTarget)) @@ -336,7 +336,7 @@ export class BulletGraph extends G2PlotChartView { ) } } else { - bullet.bar.ranges.fixedRange.forEach(item => { + bullet.bar.ranges.fixedRange?.forEach(item => { items.push( createLegendItem( item.name,