Merge pull request #13122 from dataease/pr@dev-v2@fix_dynamic_assist_line
fix(图表): 修复部分数据源无法展示动态辅助线的问题 #13114
This commit is contained in:
commit
a92d6daf1a
@ -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";
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user