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.Quota2SQLObj;
import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.api.PluginManageApi;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.model.SQLMeta;
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.plugin.AbstractChartPlugin;
import io.dataease.extensions.view.util.ChartDataUtil;
import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.license.utils.LicenseUtil;
import io.dataease.utils.BeanUtils;
import io.dataease.utils.JsonUtil;
import jakarta.annotation.PostConstruct;
@ -364,14 +368,45 @@ public class DefaultChartHandler extends AbstractChartPlugin {
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();
for (int i = 0; i < assistFields.size(); i++) {
ChartViewFieldDTO dto = assistFields.get(i);
if (i == (assistFields.size() - 1)) {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + ")");
if (crossDs) {
if (i == (assistFields.size() - 1)) {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + ")");
} else {
stringBuilder.append(dto.getSummary() + "(" + dto.getOriginName() + "),");
}
} 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";

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -33,7 +33,7 @@ public class TablePivotHandler extends GroupChartHandler {
@Override
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);
result.getData().put("customCalc", customCalc);
try {
@ -45,7 +45,7 @@ public class TablePivotHandler extends GroupChartHandler {
if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest();
req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields);
var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql);
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>>();
dataMap.put("rowSubTotal", tmpData);
for (int i = 0; i < rowAxis.size(); i++) {
if ( i == rowAxis.size() - 1) {
if (i == rowAxis.size() - 1) {
break;
}
var xAxis = new ArrayList<>(colAxis);
@ -137,7 +137,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("colSubTotal", tmpData);
for (int i = 0; i < colAxis.size(); i++) {
if ( i == colAxis.size() - 1) {
if (i == colAxis.size() - 1) {
break;
}
var xAxis = new ArrayList<>(rowAxis);
@ -181,7 +181,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("colSubInRowTotal", tmpData);
for (int i = 0; i < colAxis.size(); i++) {
if ( i == colAxis.size() - 1) {
if (i == colAxis.size() - 1) {
break;
}
var xAxis = colAxis.subList(0, i + 1);
@ -202,7 +202,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<Map<String, Object>>();
dataMap.put("rowSubInColTotal", tmpData);
for (int i = 0; i < rowAxis.size(); i++) {
if ( i == rowAxis.size() - 1) {
if (i == rowAxis.size() - 1) {
break;
}
var xAxis = rowAxis.subList(0, i + 1);
@ -223,7 +223,7 @@ public class TablePivotHandler extends GroupChartHandler {
var tmpData = new ArrayList<List<Map<String, Object>>>();
dataMap.put("rowSubInColSub", tmpData);
for (int i = 0; i < rowAxis.size(); i++) {
if ( i == rowAxis.size() - 1) {
if (i == rowAxis.size() - 1) {
break;
}
var tmpList = new ArrayList<Map<String, Object>>();
@ -231,7 +231,7 @@ public class TablePivotHandler extends GroupChartHandler {
var subRow = rowAxis.subList(0, i + 1);
var xAxis = new ArrayList<>(subRow);
for (int j = 0; j < colAxis.size(); j++) {
if ( j == colAxis.size() - 1) {
if (j == colAxis.size() - 1) {
break;
}
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,
List<ChartViewFieldDTO> allFields, boolean crossDs, Map<Long, DatasourceSchemaDTO> dsMap,
ChartViewDTO view, Provider provider, boolean needOrder) {
List<ChartViewFieldDTO> allFields, boolean crossDs, Map<Long, DatasourceSchemaDTO> dsMap,
ChartViewDTO view, Provider provider, boolean needOrder) {
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDsList(dsMap);
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);
return Tuples.of(querySql, data);
}
private void nullToBlank(List<String[]> data) {
data.forEach(r -> {
for (int i = 0; i < r.length; i++) {
@ -315,7 +316,7 @@ public class TablePivotHandler extends GroupChartHandler {
if (!quotaIds.contains(totalCfg.getDataeaseName())) {
continue;
}
if (StringUtils.equalsIgnoreCase(totalCfg.getAggregation(), "CUSTOM")){
if (StringUtils.equalsIgnoreCase(totalCfg.getAggregation(), "CUSTOM")) {
var field = new ChartViewFieldDTO();
field.setDeType(DeTypeConstants.DE_FLOAT);
BeanUtils.copyBean(field, totalCfg);