Merge pull request #10617 from dataease/pr@dev-v2@refactor_view_plugin

refactor(图表): 图表插件改造
This commit is contained in:
wisonic-s 2024-06-29 20:34:13 +08:00 committed by GitHub
commit 36f914278f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
83 changed files with 501 additions and 1406 deletions

View File

@ -1,19 +0,0 @@
package io.dataease.chart.charts;
import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Map;
public abstract class AbstractChartHandler {
public static Logger logger = LoggerFactory.getLogger(AbstractChartHandler.class);
public abstract <T> T formatAxis(ChartViewDTO view);
public abstract <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult);
public abstract <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider);
public abstract ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult);
}

View File

@ -1,6 +1,7 @@
package io.dataease.chart.charts;
import io.dataease.chart.charts.impl.DefaultChartHandler;
import io.dataease.extensions.view.plugin.AbstractChartPlugin;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@ -12,13 +13,13 @@ public class ChartHandlerManager {
@Lazy
@Resource
private DefaultChartHandler defaultChartHandler;
private static final ConcurrentHashMap<String, AbstractChartHandler> CHART_HANDLER_MAP = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<String, AbstractChartPlugin> CHART_HANDLER_MAP = new ConcurrentHashMap<>();
public void registerChartHandler(String render, String type, AbstractChartHandler chartHandler) {
public void registerChartHandler(String render, String type, AbstractChartPlugin chartHandler) {
CHART_HANDLER_MAP.put(render + "-" + type, chartHandler);
}
public AbstractChartHandler getChartHandler(String render, String type) {
public AbstractChartPlugin getChartHandler(String render, String type) {
var handler = CHART_HANDLER_MAP.get(render + "-" + type);
if (handler == null) {
return defaultChartHandler;

View File

@ -1,23 +1,24 @@
package io.dataease.chart.charts.impl;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.chart.charts.AbstractChartHandler;
import io.dataease.chart.charts.ChartHandlerManager;
import io.dataease.chart.constant.ChartConstants;
import io.dataease.chart.manage.ChartDataManage;
import io.dataease.chart.manage.ChartViewManege;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.dataset.manage.DatasetTableFieldManage;
import io.dataease.dataset.utils.SqlUtils;
import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.engine.constant.SQLConstants;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.plugin.AbstractChartPlugin;
import io.dataease.extensions.view.util.ChartDataUtil;
import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.utils.BeanUtils;
@ -28,6 +29,8 @@ import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
@ -37,7 +40,8 @@ import java.util.*;
import java.util.stream.Collectors;
@Component
public class DefaultChartHandler extends AbstractChartHandler {
public class DefaultChartHandler extends AbstractChartPlugin {
public static Logger logger = LoggerFactory.getLogger(ChartDataManage.class);
@Resource
protected ChartHandlerManager chartHandlerManager;
@Resource
@ -66,7 +70,7 @@ public class DefaultChartHandler extends AbstractChartHandler {
}
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
return (T) new CustomFilterResult(filterList, formatResult.getContext());
}
@ -82,7 +86,7 @@ public class DefaultChartHandler extends AbstractChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
@ -94,8 +98,7 @@ public class DefaultChartHandler extends AbstractChartHandler {
datasourceRequest.setDsList(dsMap);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
var allFields = getAllChartFields(view);
filterResult.getContext().put("allFields", allFields);
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap);
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap);
String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
@ -120,6 +123,7 @@ public class DefaultChartHandler extends AbstractChartHandler {
@Override
public ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult) {
var desensitizationList = (Map<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
// 如果是表格导出查询 则在此处直接就可以返回
@ -130,39 +134,25 @@ public class DefaultChartHandler extends AbstractChartHandler {
view.setData(sourceInfo);
return view;
}
// 构建结果
Map<String, Object> map = new TreeMap<>();
// 图表组件可再扩展
Map<String, Object> mapTableNormal = ChartDataBuild.transTableNormal(xAxis, yAxis, view, calcResult.getOriginData(), extStack, desensitizationList);
var drillFilters = filterResult.getFilterList().stream().filter(f -> f.getFilterType() == 1).collect(Collectors.toList());
var isDrill = CollectionUtils.isNotEmpty(drillFilters);
ChartViewDTO chartViewDTO = uniteViewResult(calcResult.getQuerySql(), calcResult.getData(), mapTableNormal, view, isDrill, drillFilters, calcResult.getDynamicAssistFields(), calcResult.getAssistData());
return chartViewDTO;
// 构建结果
Map<String, Object> dataMap = new HashMap<>();
dataMap.putAll(calcResult.getData());
dataMap.putAll(mapTableNormal);
dataMap.put("sourceFields", allFields);
mergeAssistField(calcResult.getDynamicAssistFields(), calcResult.getAssistData());
dataMap.put("dynamicAssistLines", calcResult.getDynamicAssistFields());
view.setData(dataMap);
view.setSql(Base64.getEncoder().encodeToString(calcResult.getQuerySql().getBytes()));
view.setDrill(isDrill);
view.setDrillFilters(drillFilters);
return view;
}
public ChartViewDTO uniteViewResult(String sql, Map<String, Object> chartData, Map<String, Object> tableData, ChartViewDTO view, Boolean isDrill, List<ChartExtFilterDTO> drillFilters, List<ChartSeniorAssistDTO> dynamicAssistFields, List<String[]> assistData) {
Map<String, Object> map = new HashMap<>();
map.putAll(chartData);
map.putAll(tableData);
// get all fields
List<ChartViewFieldDTO> allFields = getAllChartFields(view);
map.put("sourceFields", allFields);
// merge assist result
mergeAssistField(dynamicAssistFields, assistData);
map.put("dynamicAssistLines", dynamicAssistFields);
ChartViewDTO dto = new ChartViewDTO();
BeanUtils.copyBean(dto, view);
dto.setData(map);
dto.setSql(java.util.Base64.getEncoder().encodeToString(sql.getBytes()));
dto.setDrill(isDrill);
dto.setDrillFilters(drillFilters);
return dto;
}
protected void mergeAssistField(List<ChartSeniorAssistDTO> dynamicAssistFields, List<String[]> assistData) {
if (ObjectUtils.isEmpty(assistData)) {
return;
@ -176,17 +166,6 @@ public class DefaultChartHandler extends AbstractChartHandler {
}
}
protected List<ChartViewFieldDTO> getAllChartFields(ChartViewDTO view) {
// get all fields
Map<String, List<ChartViewFieldDTO>> stringListMap = chartViewManege.listByDQ(view.getTableId(), view.getId(), view);
List<ChartViewFieldDTO> dimensionList = stringListMap.get("dimensionList");
List<ChartViewFieldDTO> quotaList = stringListMap.get("quotaList");
List<ChartViewFieldDTO> allFields = new ArrayList<>();
allFields.addAll(dimensionList);
allFields.addAll(quotaList);
return allFields.stream().filter(ele -> ele.getId() != -1L).collect(Collectors.toList());
}
protected List<ChartSeniorAssistDTO> getDynamicAssistFields(ChartViewDTO view) {
List<ChartSeniorAssistDTO> list = new ArrayList<>();

View File

@ -3,12 +3,12 @@ package io.dataease.chart.charts.impl;
import com.fasterxml.jackson.core.type.TypeReference;
import io.dataease.dataset.utils.SqlUtils;
import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.engine.sql.SQLProvider;
import io.dataease.engine.trans.ExtWhere2Str;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.FieldUtil;
@ -25,7 +25,7 @@ import java.util.Map;
*/
public class YoyChartHandler extends DefaultChartHandler {
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
String originFilterJson = (String) JsonUtil.toJSONString(filterList);
// 如果设置了同环比的指标字段设置了过滤器那就需要把该过滤器的时间往前回调一年
@ -66,7 +66,7 @@ public class YoyChartHandler extends DefaultChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {

View File

@ -1,10 +1,10 @@
package io.dataease.chart.charts.impl.bar;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.datasource.provider.CalciteProvider;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import org.apache.commons.collections4.CollectionUtils;
@ -35,7 +35,7 @@ public class BarHandler extends YoyChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {

View File

@ -1,16 +1,16 @@
package io.dataease.chart.charts.impl.bar;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.view.dto.*;
import lombok.Getter;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
public class GroupBarHandler extends BarHandler {
@ -32,7 +32,7 @@ public class GroupBarHandler extends BarHandler {
}
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
var result = super.customFilter(view, filterList, formatResult);
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);

View File

@ -2,7 +2,7 @@ package io.dataease.chart.charts.impl.bar;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
@ -76,7 +76,7 @@ public class RangeBarHandler extends YoyChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
sqlMeta.setChartType(this.type);
return super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
}

View File

@ -32,7 +32,7 @@ public class StackBarHandler extends BarHandler {
return result;
}
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
var result = super.customFilter(view, filterList, formatResult);
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);

View File

@ -38,7 +38,7 @@ public class StackGroupBarHandler extends BarHandler {
}
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
var result = super.customFilter(view, filterList, formatResult);
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);
@ -52,7 +52,6 @@ public class StackGroupBarHandler extends BarHandler {
.stream()
.filter(ele -> ele.getSource() != FieldSource.DRILL)
.collect(Collectors.toList());
List<ChartExtFilterDTO> drillFilters = new ArrayList<>();
ArrayList<ChartViewFieldDTO> fieldsToFilter = new ArrayList<>();
var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt);
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);

View File

@ -2,10 +2,9 @@ package io.dataease.chart.charts.impl.line;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.datasource.provider.CalciteProvider;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
@ -49,14 +48,12 @@ public class LineHandler extends YoyChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
dsList.add(next.getValue().getType());
}
boolean needOrder = Utils.isNeedOrder(dsList);
boolean crossDs = Utils.isCrossDs(dsMap);
var result = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
try {
//如果有同环比过滤,应该用原始sql

View File

@ -2,10 +2,10 @@ package io.dataease.chart.charts.impl.line;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.datasource.provider.CalciteProvider;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
@ -52,7 +52,7 @@ public class StackAreaHandler extends YoyChartHandler {
}
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
var result = super.customFilter(view, filterList, formatResult);
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);
@ -81,7 +81,7 @@ public class StackAreaHandler extends YoyChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {

View File

@ -1,16 +1,15 @@
package io.dataease.chart.charts.impl.map;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.chart.charts.impl.GroupChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.dataset.utils.SqlUtils;
import io.dataease.datasource.provider.CalciteProvider;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.ChartDataUtil;
@ -21,11 +20,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Component
@ -54,7 +49,7 @@ public class SymbolicMapHandler extends GroupChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
@ -66,8 +61,7 @@ public class SymbolicMapHandler extends GroupChartHandler {
datasourceRequest.setDsList(dsMap);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
var allFields = getAllChartFields(view);
filterResult.getContext().put("allFields", allFields);
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap);
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap);
String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
@ -109,6 +103,7 @@ public class SymbolicMapHandler extends GroupChartHandler {
@Override
public ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult) {
var desensitizationList = (Map<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
// 如果是表格导出查询 则在此处直接就可以返回
@ -123,6 +118,17 @@ public class SymbolicMapHandler extends GroupChartHandler {
Map<String, Object> mapTableNormal = calcResult.getData();
var drillFilters = filterResult.getFilterList().stream().filter(f -> f.getFilterType() == 1).collect(Collectors.toList());
var isDrill = CollectionUtils.isNotEmpty(drillFilters);
return uniteViewResult(calcResult.getQuerySql(), calcResult.getData(), mapTableNormal, view, isDrill, drillFilters, calcResult.getDynamicAssistFields(), calcResult.getAssistData());
// 构建结果
Map<String, Object> dataMap = new TreeMap<>();
dataMap.putAll(calcResult.getData());
dataMap.putAll(mapTableNormal);
dataMap.put("sourceFields", allFields);
mergeAssistField(calcResult.getDynamicAssistFields(), calcResult.getAssistData());
dataMap.put("dynamicAssistLines", calcResult.getDynamicAssistFields());
view.setData(dataMap);
view.setSql(Base64.getEncoder().encodeToString(calcResult.getQuerySql().getBytes()));
view.setDrill(isDrill);
view.setDrillFilters(drillFilters);
return view;
}
}

View File

@ -1,6 +1,5 @@
package io.dataease.chart.charts.impl.mix;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.extensions.view.dto.*;
import lombok.Getter;

View File

@ -1,12 +1,11 @@
package io.dataease.chart.charts.impl.mix;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.datasource.provider.CalciteProvider;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
@ -64,7 +63,7 @@ public class MixHandler extends YoyChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
//计算左轴, 包含 xAxis, yAxis
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
@ -162,7 +161,6 @@ public class MixHandler extends YoyChartHandler {
rightData.putAll(rightCalcResult.getData());
rightData.put("dynamicAssistLines", rightCalcResult.getDynamicAssistFields());
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
// 构建结果
Map<String, Object> chartData = new TreeMap<>();
chartData.put("left", leftData);

View File

@ -1,6 +1,5 @@
package io.dataease.chart.charts.impl.mix;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.extensions.view.dto.*;
import lombok.Getter;

View File

@ -1,4 +1,4 @@
package io.dataease.chart.charts.impl.numberic;
package io.dataease.chart.charts.impl.numeric;
import io.dataease.extensions.view.dto.AxisFormatResult;
import io.dataease.extensions.view.dto.ChartAxis;
@ -15,7 +15,7 @@ import java.util.List;
import java.util.Map;
@Component
public class GaugeHandler extends NumbericChartHandler {
public class GaugeHandler extends NumericalChartHandler {
@Getter
private String type = "gauge";
@Resource

View File

@ -1,11 +1,10 @@
package io.dataease.chart.charts.impl.numberic;
package io.dataease.chart.charts.impl.numeric;
import io.dataease.chart.charts.impl.DefaultChartHandler;
import lombok.Getter;
import org.springframework.stereotype.Component;
@Component
public class IndicatorHandler extends NumbericChartHandler {
public class IndicatorHandler extends NumericalChartHandler {
@Getter
private String render = "custom";
@Getter

View File

@ -1,4 +1,4 @@
package io.dataease.chart.charts.impl.numberic;
package io.dataease.chart.charts.impl.numeric;
import io.dataease.extensions.view.dto.AxisFormatResult;
import io.dataease.extensions.view.dto.ChartAxis;
@ -13,7 +13,7 @@ import java.util.List;
import java.util.Map;
@Component
public class LiquidHandler extends NumbericChartHandler {
public class LiquidHandler extends NumericalChartHandler {
@Getter
private String type = "liquid";

View File

@ -1,15 +1,16 @@
package io.dataease.chart.charts.impl.numberic;
package io.dataease.chart.charts.impl.numeric;
import io.dataease.chart.charts.impl.DefaultChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.dataset.utils.SqlUtils;
import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.engine.sql.SQLProvider;
import io.dataease.engine.trans.Quota2SQLObj;
import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.FieldUtil;
@ -22,9 +23,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class NumbericChartHandler extends DefaultChartHandler {
public class NumericalChartHandler extends DefaultChartHandler {
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
@ -36,7 +37,7 @@ public class NumbericChartHandler extends DefaultChartHandler {
datasourceRequest.setDsList(dsMap);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
var allFields = getAllChartFields(view);
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap);
String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
querySql = SqlUtils.rebuildSQL(querySql, sqlMeta, crossDs, dsMap);

View File

@ -3,12 +3,12 @@ package io.dataease.chart.charts.impl.table;
import io.dataease.api.chart.dto.PageInfo;
import io.dataease.chart.charts.impl.DefaultChartHandler;
import io.dataease.dataset.utils.SqlUtils;
import io.dataease.datasource.provider.CalciteProvider;
import io.dataease.engine.sql.SQLProvider;
import io.dataease.engine.trans.Dimension2SQLObj;
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.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.ChartDataUtil;
@ -35,7 +35,7 @@ public class TableInfoHandler extends DefaultChartHandler {
}
@Override
public <T extends CustomFilterResult, K extends AxisFormatResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, K formatResult) {
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
var chartExtRequest = view.getChartExtRequest();
Map<String, Object> mapAttr = view.getCustomAttr();
Map<String, Object> mapSize = (Map<String, Object>) mapAttr.get("basicStyle");
@ -66,7 +66,7 @@ public class TableInfoHandler extends DefaultChartHandler {
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, CalciteProvider provider) {
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var chartExtRequest = view.getChartExtRequest();
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
@ -78,7 +78,7 @@ public class TableInfoHandler extends DefaultChartHandler {
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDsList(dsMap);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var allFields = getAllChartFields(view);
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
PageInfo pageInfo = new PageInfo();
pageInfo.setGoPage(chartExtRequest.getGoPage());
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {

View File

@ -1,10 +1,10 @@
package io.dataease.chart.manage;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.filter.FilterTreeItem;
import io.dataease.extensions.view.filter.FilterTreeObj;
import io.dataease.dataset.dao.auto.entity.CoreDatasetTableField;
import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableFieldMapper;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.engine.utils.SQLUtils;
import io.dataease.utils.BeanUtils;
import jakarta.annotation.Resource;

View File

@ -3,7 +3,7 @@ package io.dataease.chart.manage;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.dataease.api.chart.dto.*;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.filter.FilterTreeObj;
import io.dataease.api.chart.vo.ViewSelectorVO;

View File

@ -1,9 +1,7 @@
package io.dataease.chart.utils;
import io.dataease.api.chart.dto.*;
import io.dataease.extensions.view.dto.ChartDimensionDTO;
import io.dataease.extensions.view.dto.ChartViewDTO;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
import io.dataease.extensions.view.dto.*;
import io.dataease.i18n.Lang;
import io.dataease.i18n.Translator;
import io.dataease.utils.IDUtils;
@ -1383,7 +1381,7 @@ public class ChartDataBuild {
axisChartDataDTO.setName(xField.toString());
List<ChartDimensionDTO> dimensionList = new ArrayList<>();
List<ChartQuotaDTO> quotaList = new ArrayList<>();
List<io.dataease.extensions.view.dto.ChartQuotaDTO> quotaList = new ArrayList<>();
for (int j = 0; j < xAxis.size(); j++) {
ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO();

View File

@ -1,6 +1,5 @@
package io.dataease.dataset.manage;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.api.chart.dto.DeSortField;
import io.dataease.api.dataset.dto.BaseTreeNodeDTO;
import io.dataease.api.dataset.dto.EnumValueRequest;
@ -31,13 +30,11 @@ import io.dataease.engine.trans.*;
import io.dataease.engine.utils.SQLUtils;
import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.dto.TableField;
import io.dataease.extensions.datasource.dto.*;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
import io.dataease.extensions.view.dto.ChartExtRequest;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.ColumnPermissionItem;
import io.dataease.extensions.view.dto.SqlVariableDetails;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.i18n.Translator;

View File

@ -20,8 +20,8 @@ import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.SqlVariableDetails;
import io.dataease.i18n.Translator;
import io.dataease.license.config.XpackInteract;

View File

@ -1,6 +1,7 @@
package io.dataease.dataset.manage;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
import io.dataease.extensions.view.dto.ChartExtRequest;
@ -18,7 +19,6 @@ import io.dataease.dataset.utils.TableUtils;
import io.dataease.datasource.dao.auto.entity.CoreDatasource;
import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper;
import io.dataease.datasource.manage.EngineManage;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.exception.DEException;

View File

@ -1,7 +1,6 @@
package io.dataease.dataset.manage;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.dataset.dao.auto.entity.CoreDatasetTableField;
import io.dataease.dataset.dao.auto.mapper.CoreDatasetGroupMapper;
import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableFieldMapper;
@ -11,7 +10,8 @@ import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.func.FunctionConstant;
import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.ColumnPermissionItem;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.i18n.Translator;
import io.dataease.utils.AuthUtils;

View File

@ -2,8 +2,6 @@ package io.dataease.dataset.manage;
import com.fasterxml.jackson.core.type.TypeReference;
import io.dataease.api.chart.dto.ColumnPermissionItem;
import io.dataease.api.chart.dto.ColumnPermissions;
import io.dataease.api.permissions.dataset.api.ColumnPermissionsApi;
import io.dataease.api.permissions.dataset.api.RowPermissionsApi;
import io.dataease.api.permissions.dataset.dto.*;
@ -11,9 +9,11 @@ import io.dataease.api.permissions.user.vo.UserFormVO;
import io.dataease.api.permissions.variable.dto.SysVariableValueDto;
import io.dataease.api.permissions.variable.dto.SysVariableValueItem;
import io.dataease.constant.ColumnPermissionConstants;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.ColumnPermissionItem;
import io.dataease.extensions.view.dto.ColumnPermissions;
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeItem;
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.utils.AuthUtils;
import io.dataease.utils.JsonUtil;
import jakarta.annotation.Resource;

View File

@ -7,7 +7,7 @@ import io.dataease.api.dataset.dto.PreviewSqlDTO;
import io.dataease.api.dataset.union.DatasetGroupInfoDTO;
import io.dataease.dataset.manage.DatasetDataManage;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.utils.LogUtil;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;

View File

@ -6,7 +6,7 @@ import io.dataease.api.dataset.engine.SQLFunctionDTO;
import io.dataease.api.dataset.engine.SQLFunctionsEnum;
import io.dataease.dataset.manage.DatasetDataManage;
import io.dataease.dataset.manage.DatasetTableFieldManage;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

View File

@ -5,7 +5,7 @@ import io.dataease.extensions.view.filter.FilterTreeItem;
import io.dataease.extensions.view.filter.FilterTreeObj;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;

View File

@ -4,7 +4,7 @@ import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;

View File

@ -4,7 +4,7 @@ import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;

View File

@ -3,7 +3,7 @@ package io.dataease.engine.trans;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;

View File

@ -4,7 +4,7 @@ import io.dataease.api.chart.dto.DeSortField;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;

View File

@ -4,7 +4,7 @@ import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;

View File

@ -6,7 +6,7 @@ import io.dataease.extensions.view.model.SQLObj;
import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO;
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeItem;
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeObj;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.engine.constant.SqlPlaceholderConstants;

View File

@ -5,8 +5,8 @@ import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.model.SQLObj;
import io.dataease.i18n.Translator;
import org.apache.commons.lang3.ObjectUtils;

View File

@ -2,7 +2,7 @@ package io.dataease.visualization.dao.ext.mapper;
import io.dataease.api.visualization.dto.LinkageInfoDTO;
import io.dataease.api.visualization.dto.VisualizationLinkageDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.visualization.dao.auto.entity.VisualizationLinkage;
import io.dataease.visualization.dao.auto.entity.VisualizationLinkageField;
import org.apache.ibatis.annotations.Mapper;

View File

@ -9,7 +9,7 @@ import io.dataease.api.visualization.response.VisualizationLinkJumpBaseResponse;
import io.dataease.api.visualization.vo.VisualizationViewTableVO;
import io.dataease.chart.dao.auto.entity.CoreChartView;
import io.dataease.chart.dao.auto.mapper.CoreChartViewMapper;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.utils.AuthUtils;
import io.dataease.utils.BeanUtils;
import io.dataease.utils.IDUtils;

View File

@ -36,6 +36,7 @@ i18n_not_full=Full join not support.
i18n_field_circular_ref=Field has Circular Reference
i18n_chart_not_handler=Cannot handle chart:
i18n_chart_delete=Chart is not exists
i18n_no_ds=Dataset is deleted or no permission
i18n_datasource_delete=Datasource is deleted

View File

@ -47,6 +47,7 @@ i18n_not_full=\u5F53\u524D\u6570\u636E\u6E90\u4E0D\u652F\u6301\u5168\u8FDE\u63A5
i18n_field_circular_ref=\u5B57\u6BB5\u5B58\u5728\u5FAA\u73AF\u5F15\u7528
i18n_chart_not_handler=\u65E0\u6CD5\u5904\u7406\u8BE5\u56FE\u8868\u7C7B\u578B
i18n_chart_delete=\u56FE\u8868\u4E0D\u5B58\u5728
i18n_no_ds=\u6570\u636E\u96C6\u4E0D\u5B58\u5728\u6216\u6CA1\u6709\u6743\u9650
i18n_datasource_delete=\u6570\u636E\u6E90\u4E0D\u5B58\u5728

View File

@ -17,7 +17,7 @@ i18n_menu.datasource=\u6578\u64DA\u6E90
i18n_menu.user=\u7528\u6236\u7BA1\u7406
i18n_menu.org=\u7D44\u7E54\u7BA1\u7406
i18n_menu.auth=\u6B0A\u9650\u914D\u7F6E
i18n_menu.sysVariable=\u7cfb\u7edf\u53d8\u91cf
i18n_menu.sysVariable=\u7CFB\u7EDF\u53D8\u91CF
i18n_field_name_repeat=\u5177\u6709\u91CD\u8907\u7684\u6B04\u4F4D\u540D\u7A31\uFF1A
i18n_pid_not_eq_id=\u79FB\u52D5\u76EE\u6A19\u4E0D\u80FD\u662F\u81EA\u5DF1\u6216\u5B50\u76EE\u9304
i18n_ds_name_exists=\u8A72\u5206\u7D44\u4E0B\u540D\u7A31\u91CD\u5FA9
@ -33,10 +33,11 @@ i18n_table_duplicate=\u76F8\u540C\u7BC0\u9EDE\u9700\u91CD\u65B0\u62D6\u5165\u624
i18n_no_column_permission=\u6C92\u6709\u5217\u6B0A\u9650
i18n_fetch_error=SQL\u57F7\u884C\u5931\u6557\uFF0C\u8ACB\u6AA2\u67E5\u8868\u3001\u5B57\u6BB5\u3001\u95DC\u806F\u95DC\u7CFB\u7B49\u4FE1\u606F\u662F\u5426\u6B63\u78BA\u4E26\u91CD\u65B0\u7DE8\u8F2F\u3002
i18n_no_datasource_permission=\u65E0\u6570\u636E\u6E90\u8BBF\u95EE\u6743\u9650
i18n_not_full=\u7576\u524d\u6578\u64da\u6e90\u4e0d\u652f\u6301\u5168\u9023\u63a5
i18n_not_full=\u7576\u524D\u6578\u64DA\u6E90\u4E0D\u652F\u6301\u5168\u9023\u63A5
i18n_field_circular_ref=\u5B57\u6BB5\u5B58\u5728\u5FAA\u74B0\u5F15\u7528
i18n_chart_not_handler=\u7121\u6CD5\u8655\u7406\u8A72\u5716\u8868\u985E\u578B
i18n_chart_delete=\u8996\u5716\u4E0D\u5B58\u5728
i18n_no_ds=\u6578\u64DA\u96C6\u4E0D\u5B58\u5728\u6216\u6C92\u6709\u6B0A\u9650
i18n_datasource_delete=\u6578\u64DA\u6E90\u4E0D\u5B58\u5728

View File

@ -379,7 +379,7 @@
<result column="table_id" property="tableId"/>
<result column="type" property="type"/>
<result column="render" property="render"/>
<collection property="tableFields" ofType="io.dataease.extensions.view.dto.DatasetTableFieldDTO">
<collection property="tableFields" ofType="io.dataease.extensions.datasource.dto.DatasetTableFieldDTO">
<result column="field_id" jdbcType="VARCHAR" property="id"/>
<result column="origin_name" jdbcType="VARCHAR" property="originName"/>
<result column="field_name" jdbcType="VARCHAR" property="name"/>

View File

@ -53,7 +53,7 @@
<result column="type" jdbcType="VARCHAR" property="type"/>
<result column="dv_id" jdbcType="BIGINT" property="dvId"/>
<collection property="tableFields"
ofType="io.dataease.extensions.view.dto.DatasetTableFieldDTO">
ofType="io.dataease.extensions.datasource.dto.DatasetTableFieldDTO">
<result column="field_id" jdbcType="BIGINT" property="id"/>
<result column="origin_name" jdbcType="VARCHAR" property="originName"/>
<result column="field_name" jdbcType="VARCHAR" property="name"/>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.dataease.visualization.dao.ext.mapper.ExtVisualizationLinkageMapper">
<resultMap id="TableFieldMap" type="io.dataease.extensions.view.dto.DatasetTableFieldDTO">
<resultMap id="TableFieldMap" type="io.dataease.extensions.datasource.dto.DatasetTableFieldDTO">
<result column="id" jdbcType="BIGINT" property="id"/>
<result column="table_id" jdbcType="BIGINT" property="datasetTableId"/>
<result column="origin_name" jdbcType="VARCHAR" property="originName"/>
@ -17,7 +17,7 @@
<result column="targetViewName" jdbcType="VARCHAR" property="targetViewName"/>
<result column="sourceViewId" jdbcType="BIGINT" property="sourceViewId"/>
<result column="linkageActive" property="linkageActive"/>
<collection property="targetViewFields" ofType="io.dataease.extensions.view.dto.DatasetTableFieldDTO" column="table_id"
<collection property="targetViewFields" ofType="io.dataease.extensions.datasource.dto.DatasetTableFieldDTO" column="table_id"
select="queryTableField">
</collection>
<collection property="linkageFields" ofType="io.dataease.api.visualization.vo.VisualizationLinkageFieldVO">

View File

@ -94,7 +94,16 @@ const groupActiveChange = category => {
:class="props.type === chartInfo.value ? 'item-active' : ''"
:data-id="'UserView&' + chartInfo.value"
>
<Icon class-name="item-top-icon" :name="chartInfo.icon" />
<Icon
class-name="item-top-icon"
v-if="chartInfo['isPlugin']"
:static-content="chartInfo.icon"
/>
<Icon
v-else
class-name="item-top-icon"
:name="chartInfo.icon + (props.themes === 'dark' ? '-dark' : '')"
/>
</div>
<div class="item-bottom">
<span>{{ chartInfo.title }}</span>

View File

@ -10,7 +10,9 @@ import {
onBeforeMount,
provide,
h,
unref
unref,
getCurrentInstance,
onMounted
} from 'vue'
import Icon from '@/components/icon-custom/src/Icon.vue'
import type { FormInstance, FormRules } from 'element-plus-secondary'
@ -559,7 +561,7 @@ const showAggregate = computed<boolean>(() => {
const addAxis = (e, axis: AxisType) => {
recordSnapshotInfo('calcData')
const axisSpec = chartViewInstance.value.axisConfig[axis]
const axisSpec = chartViewInstance.value?.axisConfig[axis]
if (!axisSpec) {
return
}
@ -761,9 +763,7 @@ const calcData = (view, resetDrill = false, updateQuery = '') => {
})
}
}
const updateChartDataTest = arg => {
updateChartData(arg)
}
const updateChartData = view => {
curComponent.value['state'] = 'ready'
calcData(view, true, 'updateQuery')
@ -780,6 +780,18 @@ const onAreaChange = val => {
}
const onTypeChange = (render, type) => {
const viewConf = getViewConfig(type)
console.log(view.value)
if (viewConf.isPlugin) {
view.value.plugin = {
isPlugin: true,
staticMap: viewConf.staticMap
}
view.value.isPlugin = true
} else {
view.value.isPlugin = false
delete view.value.plugin
}
view.value.render = render
view.value.type = type
emitter.emit('chart-type-change')
@ -1568,6 +1580,16 @@ const deleteChartFieldItem = id => {
fieldLoading.value = false
})
}
const callMethod = (method, ...args) => {
editorInstance?.setupState[method](...args)
}
let editorInstance = null
onMounted(() => {
editorInstance = getCurrentInstance()
console.log(editorInstance)
})
</script>
<template>
@ -1621,7 +1643,8 @@ const deleteChartFieldItem = id => {
:dimension="state.dimension"
:quota="state.quota"
:themes="themes"
@update-chart-data-test="updateChartDataTest"
:emitter="emitter"
:call-method="callMethod"
/>
<el-tabs
v-else

View File

@ -1,6 +1,6 @@
package io.dataease.api.chart.dto;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
@Data

View File

@ -1,6 +1,7 @@
package io.dataease.api.chart.dto;
import io.dataease.extensions.view.dto.ChartDimensionDTO;
import io.dataease.extensions.view.dto.ChartQuotaDTO;
import lombok.Data;
import java.util.List;

View File

@ -6,7 +6,7 @@ import io.dataease.api.dataset.dto.EnumValueRequest;
import io.dataease.api.dataset.dto.PreviewSqlDTO;
import io.dataease.api.dataset.union.DatasetGroupInfoDTO;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.PostMapping;

View File

@ -3,7 +3,7 @@ package io.dataease.api.dataset;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.api.dataset.dto.MultFieldValuesRequest;
import io.dataease.api.dataset.engine.SQLFunctionDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;

View File

@ -2,7 +2,7 @@ package io.dataease.api.dataset.union;
import io.dataease.api.chart.dto.DeSortField;
import io.dataease.api.dataset.dto.DatasetNodeDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.util.List;

View File

@ -1,7 +1,7 @@
package io.dataease.api.dataset.union;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.io.Serializable;

View File

@ -1,6 +1,6 @@
package io.dataease.api.dataset.union;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.io.Serializable;

View File

@ -5,7 +5,7 @@ import io.dataease.api.visualization.dto.VisualizationComponentDTO;
import io.dataease.api.visualization.dto.VisualizationLinkJumpDTO;
import io.dataease.api.visualization.request.VisualizationLinkJumpBaseRequest;
import io.dataease.api.visualization.response.VisualizationLinkJumpBaseResponse;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;

View File

@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.dataease.api.visualization.vo.VisualizationLinkageFieldVO;
import io.dataease.api.visualization.vo.VisualizationLinkageVO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.util.ArrayList;

View File

@ -1,8 +1,8 @@
package io.dataease.api.visualization.dto;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.ChartViewDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.util.List;

View File

@ -2,7 +2,7 @@ package io.dataease.api.visualization.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.util.List;

View File

@ -130,12 +130,6 @@
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.dataease</groupId>
<artifactId>extensions-datasource</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -16,12 +16,5 @@
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.dataease</groupId>
<artifactId>extensions-view</artifactId>
<version>${dataease.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -2,7 +2,6 @@ package io.dataease.extensions.datasource.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package io.dataease.extensions.view.dto;
package io.dataease.extensions.datasource.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

View File

@ -11,10 +11,17 @@
<artifactId>extensions-view</artifactId>
<dependencies>
<dependency>
<groupId>io.dataease</groupId>
<artifactId>extensions-datasource</artifactId>
<version>${dataease.version}</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
</project>

View File

@ -1,6 +1,5 @@
package io.dataease.api.chart.dto;
package io.dataease.extensions.view.dto;
import io.dataease.extensions.view.dto.ChartDimensionDTO;
import lombok.Data;
import java.math.BigDecimal;

View File

@ -1,6 +1,5 @@
package io.dataease.api.chart.dto;
package io.dataease.extensions.view.dto;
import io.dataease.extensions.view.dto.ChartDimensionDTO;
import lombok.Data;
import java.math.BigDecimal;

View File

@ -1,6 +1,5 @@
package io.dataease.extensions.view.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.List;

View File

@ -1,6 +1,7 @@
package io.dataease.extensions.view.dto;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.util.List;

View File

@ -1,5 +1,6 @@
package io.dataease.extensions.view.dto;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.util.List;

View File

@ -1,4 +1,4 @@
package io.dataease.api.chart.dto;
package io.dataease.extensions.view.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

View File

@ -1,5 +1,6 @@
package io.dataease.extensions.view.dto;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package io.dataease.api.chart.dto;
package io.dataease.extensions.view.dto;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package io.dataease.api.chart.dto;
package io.dataease.extensions.view.dto;
import lombok.Data;

View File

@ -3,6 +3,7 @@ package io.dataease.extensions.view.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.io.Serializable;

View File

@ -1,4 +1,4 @@
package io.dataease.api.chart.dto;
package io.dataease.extensions.view.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

View File

@ -1,7 +1,7 @@
package io.dataease.extensions.view.factory;
import io.dataease.exception.DEException;
import io.dataease.extensions.view.template.PluginsChartTemplate;
import io.dataease.extensions.view.plugin.AbstractChartPlugin;
import io.dataease.extensions.view.vo.XpackPluginsViewVO;
import io.dataease.license.utils.LicenseUtil;
import io.dataease.license.utils.LogUtil;
@ -13,16 +13,16 @@ import java.util.concurrent.ConcurrentHashMap;
public class PluginsChartFactory {
private static final Map<String, PluginsChartTemplate> templateMap = new ConcurrentHashMap<>();
private static final Map<String, AbstractChartPlugin> templateMap = new ConcurrentHashMap<>();
public static PluginsChartTemplate getInstance(String render, String type) {
public static AbstractChartPlugin getInstance(String render, String type) {
if (!LicenseUtil.licenseValid()) DEException.throwException("插件功能只对企业版本可用!");
String key = render + "_" + type;
return templateMap.get(key);
}
public static void loadTemplate(String render, String type, PluginsChartTemplate template) {
public static void loadPlugin(String render, String type, AbstractChartPlugin template) {
if (!LicenseUtil.licenseValid()) DEException.throwException("插件功能只对企业版本可用!");
String key = render + "_" + type;
if (templateMap.containsKey(key)) return;
@ -38,6 +38,6 @@ public class PluginsChartFactory {
public static List<XpackPluginsViewVO> getViewConfigList() {
if (!LicenseUtil.licenseValid()) DEException.throwException("插件功能只对企业版本可用!");
return templateMap.values().stream().map(PluginsChartTemplate::getConfig).toList();
return templateMap.values().stream().map(AbstractChartPlugin::getConfig).toList();
}
}

View File

@ -2,7 +2,7 @@ package io.dataease.extensions.view.filter;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import lombok.Data;
import java.io.Serializable;

View File

@ -0,0 +1,82 @@
package io.dataease.extensions.view.plugin;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.factory.PluginsChartFactory;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.vo.XpackPluginsViewVO;
import io.dataease.license.utils.JsonUtil;
import io.dataease.plugins.template.DataEasePlugin;
import io.dataease.plugins.vo.DataEasePluginVO;
import java.util.List;
import java.util.Map;
public abstract class AbstractChartPlugin implements DataEasePlugin {
@Override
public void loadPlugin() {
XpackPluginsViewVO viewConfig = getConfig();
PluginsChartFactory.loadPlugin(viewConfig.getRender(), viewConfig.getCategory(), this);
}
public XpackPluginsViewVO getConfig() {
DataEasePluginVO pluginInfo = null;
try {
pluginInfo = getPluginInfo();
} catch (Exception e) {
DEException.throwException(e);
}
String config = pluginInfo.getConfig();
XpackPluginsViewVO vo = JsonUtil.parseObject(config, XpackPluginsViewVO.class);
vo.setIcon(pluginInfo.getIcon());
return vo;
}
/**
* 处理视图需要用到的轴字段大部分图表都聚合成两个字段X Y
*
* @param view 视图对象
* @param <T> 泛化的返回类型可继承
* @return 处理后的轴和过程变量变量放到整个流程上下文中
*/
public abstract <T extends AxisFormatResult> T formatAxis(ChartViewDTO view);
/**
* 处理视图的过滤条件包括联动跳转过滤外部参数下钻等等
* DE 本身有标准的处理流程将所有的条件处理成统一的过滤列表如果有额外的条件需要处理可在这边操作例如子维度下钻
*
* @param view 视图对象
* @param filterList DE 标准化处理后的过滤条件列表
* @param formatResult 处理后的轴和过程变量变量放到整个流程上下文中
* @param <T> 泛化的返回类型可继承
* @return 处理后的过滤条件列表和过程变量变量放到整个流程上下文中
*/
public abstract <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult);
/**
* 计算视图的最终结果,各个参数使用方式可参考主工程
*
* @param view 视图对象
* @param formatResult 轴字段处理结果
* @param filterResult 过滤条件处理结果
* @param sqlMap SQL
* @param sqlMeta SQL元数据用于生成最终SQL
* @param provider 数据源查询工具
* @param <T> 泛化的过滤列表和上面一致
* @return 视图数据计算结果
*/
public abstract <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider);
/**
* 构建视图将计算结果处理成最终视图
* @param view 原视图对象
* @param calcResult 计算结果
* @param formatResult 轴字段处理结果
* @param filterResult 过滤条件处理结果
* @return 返回前端的视图建议数据放在 data 过滤条件放在 filter 其他字段可自行添加可参考主工程
*/
public abstract ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult);
}

View File

@ -1,46 +0,0 @@
package io.dataease.extensions.view.template;
import io.dataease.exception.DEException;
import io.dataease.extensions.view.dto.ChartViewDTO;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.factory.PluginsChartFactory;
import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.vo.XpackPluginsViewVO;
import io.dataease.license.utils.JsonUtil;
import io.dataease.plugins.template.DataEasePlugin;
import io.dataease.plugins.vo.DataEasePluginVO;
import java.util.List;
import java.util.Map;
public abstract class PluginsChartTemplate implements DataEasePlugin {
@Override
public void loadPlugin() {
XpackPluginsViewVO viewConfig = getConfig();
PluginsChartFactory.loadTemplate(viewConfig.getRender(), viewConfig.getCategory(), this);
}
public XpackPluginsViewVO getConfig() {
DataEasePluginVO pluginInfo = null;
try {
pluginInfo = getPluginInfo();
} catch (Exception e) {
DEException.throwException(e);
}
String config = pluginInfo.getConfig();
XpackPluginsViewVO vo = JsonUtil.parseObject(config, XpackPluginsViewVO.class);
vo.setIcon(pluginInfo.getIcon());
return vo;
}
public abstract Map<String, List<ChartViewFieldDTO>> formatChartAxis(ChartViewDTO view);
public abstract ChartViewDTO calcResult(SQLMeta sqlMeta, List<ChartViewFieldDTO> xaxis, List<ChartViewFieldDTO> yaxis,
List<DatasetTableFieldDTO> allFields, boolean crossDs, Map<Long, String> dsTypeMap);
}

View File

@ -1,9 +1,11 @@
package io.dataease.extensions.view.util;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
import io.dataease.extensions.view.dto.*;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
public class ChartDataUtil {
@ -84,4 +86,175 @@ public class ChartDataUtil {
res.addAll(subArr);
return res;
}
public static Map<String, Object> transTableNormal(List<ChartViewFieldDTO> fields, ChartViewDTO view, List<String[]> data, Map<String, ColumnPermissionItem> desensitizationList) {
Map<String, Object> map = new TreeMap<>();
List<Map<String, Object>> tableRow = new ArrayList<>();
data.forEach(ele -> {
Map<String, Object> d = new HashMap<>();
for (int i = 0; i < fields.size(); i++) {
if (ObjectUtils.isNotEmpty(desensitizationList.keySet()) && desensitizationList.keySet().contains(fields.get(i).getDataeaseName())) {
d.put(fields.get(i).getDataeaseName(), desensitizationValue(desensitizationList.get(fields.get(i).getDataeaseName()), String.valueOf(ele[i])));
continue;
}
if (i == ele.length) break;
ChartViewFieldDTO chartViewFieldDTO = fields.get(i);
if (chartViewFieldDTO.getDeType() == 0 || chartViewFieldDTO.getDeType() == 1 || chartViewFieldDTO.getDeType() == 5) {
d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? "" : ele[i]);
} else if (chartViewFieldDTO.getDeType() == 2 || chartViewFieldDTO.getDeType() == 3 || chartViewFieldDTO.getDeType() == 4) {
d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? null : new BigDecimal(ele[i]).setScale(8, RoundingMode.HALF_UP));
}
}
tableRow.add(d);
});
map.put("fields", fields);
map.put("tableRow", tableRow);
return map;
}
public static String desensitizationValue(ColumnPermissionItem columnPermissionItem, String originStr) {
String desensitizationStr = "";
if (!columnPermissionItem.getDesensitizationRule().getBuiltInRule().toString().equalsIgnoreCase("custom")) {
switch (columnPermissionItem.getDesensitizationRule().getBuiltInRule()) {
case CompleteDesensitization:
desensitizationStr = ColumnPermissionItem.CompleteDesensitization;
break;
case KeepMiddleThreeCharacters:
if (StringUtils.isEmpty(originStr) || originStr.length() < 4) {
desensitizationStr = ColumnPermissionItem.KeepMiddleThreeCharacters;
} else {
desensitizationStr = "***" + StringUtils.substring(originStr, originStr.length() / 2 - 1, originStr.length() / 2 + 2) + "***";
}
break;
case KeepFirstAndLastThreeCharacters:
if (StringUtils.isEmpty(originStr) || originStr.length() < 7) {
desensitizationStr = ColumnPermissionItem.KeepFirstAndLastThreeCharacters;
} else {
desensitizationStr = StringUtils.substring(originStr, 0, 3) + "***" + StringUtils.substring(originStr, originStr.length() - 3, originStr.length());
}
break;
default:
break;
}
} else {
switch (columnPermissionItem.getDesensitizationRule().getCustomBuiltInRule()) {
case RetainBeforeMAndAfterN:
if (StringUtils.isEmpty(originStr) || originStr.length() < columnPermissionItem.getDesensitizationRule().getM() + columnPermissionItem.getDesensitizationRule().getN()) {
desensitizationStr = String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getM(), "X")) + "***" + String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getN(), "X"));
} else {
desensitizationStr = StringUtils.substring(originStr, 0, columnPermissionItem.getDesensitizationRule().getM()) + "***" + StringUtils.substring(originStr, originStr.length() - columnPermissionItem.getDesensitizationRule().getN(), originStr.length());
}
break;
case RetainMToN:
if (columnPermissionItem.getDesensitizationRule().getM() > columnPermissionItem.getDesensitizationRule().getN()) {
desensitizationStr = "*** ***";
break;
}
if (StringUtils.isEmpty(originStr) || originStr.length() < columnPermissionItem.getDesensitizationRule().getM()) {
desensitizationStr = "*** ***";
break;
}
if (columnPermissionItem.getDesensitizationRule().getM() == 1) {
desensitizationStr = StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, columnPermissionItem.getDesensitizationRule().getN()) + "***";
break;
} else {
desensitizationStr = "***" + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, columnPermissionItem.getDesensitizationRule().getN()) + "***";
break;
}
default:
break;
}
}
return desensitizationStr;
}
public static Map<String, Object> transChartData(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewDTO view, List<String[]> data, boolean isDrill) {
Map<String, Object> map = new HashMap<>();
List<AxisChartDataAntVDTO> dataList = new ArrayList<>();
for (int i1 = 0; i1 < data.size(); i1++) {
String[] row = data.get(i1);
StringBuilder a = new StringBuilder();
if (isDrill) {
a.append(row[xAxis.size() - 1]);
} else {
for (int i = 0; i < xAxis.size(); i++) {
if (i == xAxis.size() - 1) {
a.append(row[i]);
} else {
a.append(row[i]).append("\n");
}
}
}
// yAxis最后的数据对应extLabel和extTooltip将他们从yAxis中去掉同时转换成动态值
int size = xAxis.size() + yAxis.size();
int extSize = view.getExtLabel().size() + view.getExtTooltip().size();
for (int i = xAxis.size(); i < size - extSize; i++) {
AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO();
axisChartDataDTO.setField(a.toString());
axisChartDataDTO.setName(a.toString());
List<ChartDimensionDTO> dimensionList = new ArrayList<>();
List<ChartQuotaDTO> quotaList = new ArrayList<>();
for (int j = 0; j < xAxis.size(); j++) {
ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO();
chartDimensionDTO.setId(xAxis.get(j).getId());
chartDimensionDTO.setValue(row[j]);
dimensionList.add(chartDimensionDTO);
}
axisChartDataDTO.setDimensionList(dimensionList);
int j = i - xAxis.size();
ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO();
chartQuotaDTO.setId(yAxis.get(j).getId());
quotaList.add(chartQuotaDTO);
axisChartDataDTO.setQuotaList(quotaList);
try {
axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i]));
} catch (Exception e) {
axisChartDataDTO.setValue(new BigDecimal(0));
}
axisChartDataDTO.setCategory(StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName()));
buildDynamicValue(view, axisChartDataDTO, row, size, extSize);
dataList.add(axisChartDataDTO);
}
}
map.put("data", dataList);
return map;
}
// 计算动态标签和提示
private static void buildDynamicValue(ChartViewDTO view, AxisChartDataAntVDTO axisChartDataDTO, String[] row, int size, int extSize) {
List<DynamicValueDTO> dynamicLabelValue = new ArrayList<>();
List<DynamicValueDTO> dynamicTooltipValue = new ArrayList<>();
// 计算动态标签和提示
if (ObjectUtils.isNotEmpty(view.getExtLabel())) {
for (int ii = 0; ii < view.getExtLabel().size(); ii++) {
DynamicValueDTO valueDTO = new DynamicValueDTO();
ChartViewFieldDTO chartViewFieldDTO = view.getExtLabel().get(ii);
BigDecimal value = StringUtils.isEmpty(row[ii + (size - extSize)]) ? null : new BigDecimal(row[ii + (size - extSize)]);
valueDTO.setFieldId(chartViewFieldDTO.getId());
valueDTO.setValue(value);
dynamicLabelValue.add(valueDTO);
}
}
if (ObjectUtils.isNotEmpty(view.getExtTooltip())) {
for (int ii = 0; ii < view.getExtTooltip().size(); ii++) {
DynamicValueDTO valueDTO = new DynamicValueDTO();
ChartViewFieldDTO chartViewFieldDTO = view.getExtTooltip().get(ii);
BigDecimal value = StringUtils.isEmpty(row[ii + (size - extSize) + view.getExtLabel().size()]) ? null : new BigDecimal(row[ii + (size - extSize) + view.getExtLabel().size()]);
valueDTO.setFieldId(chartViewFieldDTO.getId());
valueDTO.setValue(value);
dynamicTooltipValue.add(valueDTO);
}
}
axisChartDataDTO.setDynamicLabelValue(dynamicLabelValue);
axisChartDataDTO.setDynamicTooltipValue(dynamicTooltipValue);
}
}

View File

@ -1,7 +1,7 @@
package io.dataease.extensions.view.util;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.view.dto.ChartViewFieldBaseDTO;
import io.dataease.extensions.view.dto.DatasetTableFieldDTO;
import org.springframework.beans.BeanUtils;
import java.util.List;

View File

@ -0,0 +1,24 @@
package io.dataease.extensions.view.util;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import org.apache.commons.lang3.ObjectUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Utils {
public static boolean isNeedOrder(List<String> dsList) {
String[] list = {"sqlServer", "db2", "impala"};
List<String> strings = Arrays.asList(list);
List<String> collect = strings.stream().filter(dsList::contains).collect(Collectors.toList());
return ObjectUtils.isNotEmpty(collect);
}
public static boolean isCrossDs(Map<Long, DatasourceSchemaDTO> dsMap) {
return dsMap.size() != 1;
}
}