Merge pull request #13122 from dataease/pr@dev-v2@fix_dynamic_assist_line

fix(图表): 修复部分数据源无法展示动态辅助线的问题 #13114
This commit is contained in:
Junjun 2024-11-05 14:07:30 +08:00 committed by GitHub
commit a92d6daf1a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 58 additions and 22 deletions

View File

@ -11,16 +11,20 @@ import io.dataease.engine.sql.SQLProvider;
import io.dataease.engine.trans.Dimension2SQLObj; import io.dataease.engine.trans.Dimension2SQLObj;
import io.dataease.engine.trans.Quota2SQLObj; import io.dataease.engine.trans.Quota2SQLObj;
import io.dataease.engine.utils.Utils; import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.api.PluginManageApi; import io.dataease.extensions.datasource.api.PluginManageApi;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO; import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceRequest; import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO; import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.model.SQLMeta; import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider; import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
import io.dataease.extensions.datasource.vo.XpackPluginsDatasourceVO;
import io.dataease.extensions.view.dto.*; import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.plugin.AbstractChartPlugin; import io.dataease.extensions.view.plugin.AbstractChartPlugin;
import io.dataease.extensions.view.util.ChartDataUtil; import io.dataease.extensions.view.util.ChartDataUtil;
import io.dataease.extensions.view.util.FieldUtil; import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.license.utils.LicenseUtil;
import io.dataease.utils.BeanUtils; import io.dataease.utils.BeanUtils;
import io.dataease.utils.JsonUtil; import io.dataease.utils.JsonUtil;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
@ -364,14 +368,45 @@ public class DefaultChartHandler extends AbstractChartPlugin {
return conditionField; return conditionField;
} }
protected String assistSQL(String sql, List<ChartViewFieldDTO> assistFields) { protected String assistSQL(String sql, List<ChartViewFieldDTO> assistFields, Map<Long, DatasourceSchemaDTO> dsMap) {
// get datasource prefix and suffix
String dsType = dsMap.entrySet().iterator().next().getValue().getType();
String prefix = "";
String suffix = "";
if (Arrays.stream(DatasourceConfiguration.DatasourceType.values()).map(DatasourceConfiguration.DatasourceType::getType).toList().contains(dsType)) {
DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(dsType);
prefix = datasourceType.getPrefix();
suffix = datasourceType.getSuffix();
} else {
if (LicenseUtil.licenseValid()) {
List<XpackPluginsDatasourceVO> xpackPluginsDatasourceVOS = pluginManage.queryPluginDs();
List<XpackPluginsDatasourceVO> list = xpackPluginsDatasourceVOS.stream().filter(ele -> StringUtils.equals(ele.getType(), dsType)).toList();
if (ObjectUtils.isNotEmpty(list)) {
XpackPluginsDatasourceVO first = list.getFirst();
prefix = first.getPrefix();
suffix = first.getSuffix();
} else {
DEException.throwException("当前数据源插件不存在");
}
}
}
boolean crossDs = Utils.isCrossDs(dsMap);
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < assistFields.size(); i++) { for (int i = 0; i < assistFields.size(); i++) {
ChartViewFieldDTO dto = assistFields.get(i); ChartViewFieldDTO dto = assistFields.get(i);
if (i == (assistFields.size() - 1)) { if (crossDs) {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + ")"); if (i == (assistFields.size() - 1)) {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + ")");
} else {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + "),");
}
} else { } else {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + "),"); if (i == (assistFields.size() - 1)) {
stringBuilder.append(dto.getSummary() + "(" + prefix + dto.getOriginName() + suffix + ")");
} else {
stringBuilder.append(dto.getSummary() + "(" + prefix + dto.getOriginName() + suffix + "),");
}
} }
} }
return "SELECT " + stringBuilder + " FROM (" + sql + ") tmp"; return "SELECT " + stringBuilder + " FROM (" + sql + ") tmp";

View File

@ -53,7 +53,7 @@ public class BarHandler extends YoyChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql); logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");

View File

@ -64,7 +64,7 @@ public class LineHandler extends YoyChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql); logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");

View File

@ -100,7 +100,7 @@ public class StackAreaHandler extends YoyChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assist sql: " + assistSql); logger.debug("calcite assist sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");

View File

@ -92,7 +92,7 @@ public class MixHandler extends YoyChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql); logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
@ -144,7 +144,7 @@ public class MixHandler extends YoyChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
rightResult.setAssistData(assistData); rightResult.setAssistData(assistData);

View File

@ -154,7 +154,7 @@ public class TableInfoHandler extends DefaultChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(querySql, assistFields); var assistSql = assistSQL(querySql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql); logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");

View File

@ -34,7 +34,7 @@ public class TableNormalHandler extends YoyChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql); logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");

View File

@ -33,7 +33,7 @@ public class TablePivotHandler extends GroupChartHandler {
@Override @Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) { public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
T result = super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider); T result = super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
Map<String, Object> customCalc = calcCustomExpr(view, filterResult, sqlMap, sqlMeta, provider); Map<String, Object> customCalc = calcCustomExpr(view, filterResult, sqlMap, sqlMeta, provider);
result.getData().put("customCalc", customCalc); result.getData().put("customCalc", customCalc);
try { try {
@ -45,7 +45,7 @@ public class TablePivotHandler extends GroupChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) { if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest(); var req = new DatasourceRequest();
req.setDsList(dsMap); req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields); var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql); req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql); logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data"); var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
@ -98,7 +98,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>(); var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("rowSubTotal", tmpData); dataMap.put("rowSubTotal", tmpData);
for (int i = 0; i < rowAxis.size(); i++) { for (int i = 0; i < rowAxis.size(); i++) {
if ( i == rowAxis.size() - 1) { if (i == rowAxis.size() - 1) {
break; break;
} }
var xAxis = new ArrayList<>(colAxis); var xAxis = new ArrayList<>(colAxis);
@ -137,7 +137,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>(); var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("colSubTotal", tmpData); dataMap.put("colSubTotal", tmpData);
for (int i = 0; i < colAxis.size(); i++) { for (int i = 0; i < colAxis.size(); i++) {
if ( i == colAxis.size() - 1) { if (i == colAxis.size() - 1) {
break; break;
} }
var xAxis = new ArrayList<>(rowAxis); var xAxis = new ArrayList<>(rowAxis);
@ -181,7 +181,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>(); var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("colSubInRowTotal", tmpData); dataMap.put("colSubInRowTotal", tmpData);
for (int i = 0; i < colAxis.size(); i++) { for (int i = 0; i < colAxis.size(); i++) {
if ( i == colAxis.size() - 1) { if (i == colAxis.size() - 1) {
break; break;
} }
var xAxis = colAxis.subList(0, i + 1); var xAxis = colAxis.subList(0, i + 1);
@ -202,7 +202,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>(); var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("rowSubInColTotal", tmpData); dataMap.put("rowSubInColTotal", tmpData);
for (int i = 0; i < rowAxis.size(); i++) { for (int i = 0; i < rowAxis.size(); i++) {
if ( i == rowAxis.size() - 1) { if (i == rowAxis.size() - 1) {
break; break;
} }
var xAxis = rowAxis.subList(0, i + 1); var xAxis = rowAxis.subList(0, i + 1);
@ -223,7 +223,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<List<Map<String, Object>>>(); var tmpData = new ArrayList<List<Map<String, Object>>>();
dataMap.put("rowSubInColSub", tmpData); dataMap.put("rowSubInColSub", tmpData);
for (int i = 0; i < rowAxis.size(); i++) { for (int i = 0; i < rowAxis.size(); i++) {
if ( i == rowAxis.size() - 1) { if (i == rowAxis.size() - 1) {
break; break;
} }
var tmpList = new ArrayList<Map<String, Object>>(); var tmpList = new ArrayList<Map<String, Object>>();
@ -231,7 +231,7 @@ public class TablePivotHandler extends GroupChartHandler {
var subRow = rowAxis.subList(0, i + 1); var subRow = rowAxis.subList(0, i + 1);
var xAxis = new ArrayList<>(subRow); var xAxis = new ArrayList<>(subRow);
for (int j = 0; j < colAxis.size(); j++) { for (int j = 0; j < colAxis.size(); j++) {
if ( j == colAxis.size() - 1) { if (j == colAxis.size() - 1) {
break; break;
} }
var subCol = colAxis.subList(0, j + 1); var subCol = colAxis.subList(0, j + 1);
@ -284,8 +284,8 @@ public class TablePivotHandler extends GroupChartHandler {
} }
private Tuple2<String, List<String[]>> getData(SQLMeta sqlMeta, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, private Tuple2<String, List<String[]>> getData(SQLMeta sqlMeta, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis,
List<ChartViewFieldDTO> allFields, boolean crossDs, Map<Long, DatasourceSchemaDTO> dsMap, List<ChartViewFieldDTO> allFields, boolean crossDs, Map<Long, DatasourceSchemaDTO> dsMap,
ChartViewDTO view, Provider provider, boolean needOrder) { ChartViewDTO view, Provider provider, boolean needOrder) {
DatasourceRequest datasourceRequest = new DatasourceRequest(); DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDsList(dsMap); datasourceRequest.setDsList(dsMap);
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage); Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage);
@ -298,6 +298,7 @@ public class TablePivotHandler extends GroupChartHandler {
nullToBlank(data); nullToBlank(data);
return Tuples.of(querySql, data); return Tuples.of(querySql, data);
} }
private void nullToBlank(List<String[]> data) { private void nullToBlank(List<String[]> data) {
data.forEach(r -> { data.forEach(r -> {
for (int i = 0; i < r.length; i++) { for (int i = 0; i < r.length; i++) {
@ -315,7 +316,7 @@ public class TablePivotHandler extends GroupChartHandler {
if (!quotaIds.contains(totalCfg.getDataeaseName())) { if (!quotaIds.contains(totalCfg.getDataeaseName())) {
continue; continue;
} }
if (StringUtils.equalsIgnoreCase(totalCfg.getAggregation(), "CUSTOM")){ if (StringUtils.equalsIgnoreCase(totalCfg.getAggregation(), "CUSTOM")) {
var field = new ChartViewFieldDTO(); var field = new ChartViewFieldDTO();
field.setDeType(DeTypeConstants.DE_FLOAT); field.setDeType(DeTypeConstants.DE_FLOAT);
BeanUtils.copyBean(field, totalCfg); BeanUtils.copyBean(field, totalCfg);