Skip to content

Commit 9c81a72

Browse files
ziyujiahaoxuwei-fit2cloud
authored andcommitted
fix: 修复app应用中包括excel自定义数据集时没有自动替换自定义sql中的表名问题
1 parent 03b18db commit 9c81a72

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.baomidou.mybatisplus.core.metadata.IPage;
55
import com.fasterxml.jackson.core.type.TypeReference;
66
import io.dataease.api.dataset.union.DatasetGroupInfoDTO;
7+
import io.dataease.api.dataset.union.DatasetTableInfoDTO;
78
import io.dataease.api.dataset.union.UnionDTO;
89
import io.dataease.api.template.dto.TemplateManageFileDTO;
910
import io.dataease.api.template.dto.VisualizationTemplateExtendDataDTO;
@@ -38,6 +39,7 @@
3839
import io.dataease.datasource.provider.ExcelUtils;
3940
import io.dataease.datasource.server.DatasourceServer;
4041
import io.dataease.exception.DEException;
42+
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
4143
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
4244
import io.dataease.extensions.view.dto.ChartViewDTO;
4345
import io.dataease.i18n.Translator;
@@ -257,11 +259,12 @@ public String saveCanvas(DataVisualizationBaseRequest request) throws Exception
257259
Map<Long, Long> datasourceIdMap = new HashMap<>();
258260
Map<Long, Map<String, String>> dsTableNamesMap = new HashMap<>();
259261
List<Long> newDatasourceId = new ArrayList<>();
262+
List<Long> excelDatasourceId = new ArrayList<>();
263+
Map<String, String> excelTableNamesMap = new HashMap<>();
260264
if (appData != null) {
261265
isAppSave = true;
262266
try {
263267
List<AppCoreDatasourceVO> appCoreDatasourceVO = appData.getDatasourceInfo();
264-
265268
// app 数据源 excel 表名映射
266269
appCoreDatasourceVO.forEach(datasourceOld -> {
267270
newDatasourceId.add(datasourceOld.getSystemDatasourceId());
@@ -283,6 +286,7 @@ public String saveCanvas(DataVisualizationBaseRequest request) throws Exception
283286
if (StringUtils.isNotEmpty(datasourceNew.getConfiguration())) {
284287
if (datasourceNew.getType().equals(DatasourceConfiguration.DatasourceType.Excel.name())) {
285288
dsTableNamesMap.put(datasourceNew.getId(), ExcelUtils.getTableNamesMap(datasourceNew.getType(), datasourceNew.getConfiguration()));
289+
excelDatasourceId.add(datasourceNew.getId());
286290
} else if (datasourceNew.getType().contains(DatasourceConfiguration.DatasourceType.API.name())) {
287291
dsTableNamesMap.put(datasourceNew.getId(), (Map<String, String>) datasourceServer.invokeMethod(datasourceNew.getType(), "getTableNamesMap", String.class, datasourceNew.getConfiguration()));
288292
}
@@ -375,6 +379,7 @@ public String saveCanvas(DataVisualizationBaseRequest request) throws Exception
375379
appDsTableNamesMap.forEach((keyName, valueName) -> {
376380
if (MapUtils.isNotEmpty(systemDsTableNamesMap) && StringUtils.isNotEmpty(systemDsTableNamesMap.get(keyName))) {
377381
dsGroup.setInfo(dsGroup.getInfo().replaceAll(valueName, systemDsTableNamesMap.get(keyName)));
382+
excelTableNamesMap.put(valueName, systemDsTableNamesMap.get(keyName));
378383
} else {
379384
dsGroup.setInfo(dsGroup.getInfo().replaceAll(valueName, "excel_can_not_find"));
380385
}
@@ -393,6 +398,7 @@ public String saveCanvas(DataVisualizationBaseRequest request) throws Exception
393398
}
394399
datasetSQLManage.mergeDatasetCrossDefault(dsGroup);
395400
}
401+
excelAdaptor(dsGroup,excelTableNamesMap,excelDatasourceId);
396402
datasetGroupManage.innerSave(dsGroup);
397403
});
398404

@@ -481,6 +487,26 @@ public String saveCanvas(DataVisualizationBaseRequest request) throws Exception
481487
return newDvId.toString();
482488
}
483489

490+
private void excelAdaptor(DatasetGroupInfoDTO dsInfo,Map<String, String> excelTableNamesMap ,List<Long> excelDsId) {
491+
List<UnionDTO> unionDTOList = JsonUtil.parseList(dsInfo.getInfo(), new TypeReference<>() {
492+
});
493+
if(CollectionUtils.isNotEmpty(excelDsId) && MapUtils.isNotEmpty(excelTableNamesMap)){
494+
for(UnionDTO unionDTO : unionDTOList) {
495+
DatasetTableDTO tableDTO =unionDTO.getCurrentDs();
496+
if(excelDsId.contains(tableDTO.getDatasourceId())){
497+
DatasetTableInfoDTO infoDTO = JsonUtil.parseObject(tableDTO.getInfo(), DatasetTableInfoDTO.class);
498+
String s = new String(Base64.getDecoder().decode(infoDTO.getSql()));
499+
excelTableNamesMap.forEach((key, value) -> {
500+
infoDTO.setSql(Base64.getEncoder().encodeToString(s.replaceAll(key, value).getBytes()));
501+
});
502+
tableDTO.setInfo((String)JsonUtil.toJSONString(infoDTO));
503+
}
504+
505+
}
506+
}
507+
dsInfo.setInfo((String)JsonUtil.toJSONString(unionDTOList));
508+
}
509+
484510
@Override
485511
public String appCanvasNameCheck(DataVisualizationBaseRequest request) throws Exception {
486512
Long datasetFolderPid = request.getDatasetFolderPid();

0 commit comments

Comments
 (0)