diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java index b5b2c91e6c..a87effa721 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java @@ -58,6 +58,20 @@ public class ExcelUtils { return tableDescs; } + public static Map getTableNamesMap(String configration) throws DEException { + Map result = new HashMap<>(); + try { + JsonNode rootNode = objectMapper.readTree(configration); + for (int i = 0; i < rootNode.size(); i++) { + result.put(rootNode.get(i).get("tableName").asText(),rootNode.get(i).get("deTableName").asText()); + } + } catch (Exception e) { + DEException.throwException(e); + } + + return result; + } + public static String getFileName(CoreDatasource datasource) throws DEException { try { JsonNode rootNode = objectMapper.readTree(datasource.getConfiguration()); diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java index aa8e94470b..8e3cf2846c 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java @@ -14,8 +14,14 @@ import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableFieldMapper; import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableMapper; import io.dataease.dataset.manage.DatasetDataManage; import io.dataease.dataset.manage.DatasetGroupManage; +import io.dataease.datasource.dao.auto.entity.CoreDatasource; +import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.provider.ExcelUtils; 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.datasource.dto.DatasourceRequest; +import io.dataease.extensions.datasource.vo.DatasourceConfiguration; import io.dataease.extensions.view.dto.ChartViewDTO; import io.dataease.api.template.dto.TemplateManageFileDTO; import io.dataease.api.template.dto.VisualizationTemplateExtendDataDTO; @@ -56,6 +62,7 @@ import io.dataease.visualization.utils.VisualizationUtils; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -124,6 +131,8 @@ public class DataVisualizationServer implements DataVisualizationApi { @Resource private CoreDatasetTableFieldMapper coreDatasetTableFieldMapper; + @Autowired + private CoreDatasourceMapper coreDatasourceMapper; @Override public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) { @@ -183,9 +192,29 @@ public class DataVisualizationServer implements DataVisualizationApi { Map dsTableIdMap = new HashMap<>(); Map dsTableFieldsIdMap = new HashMap<>(); Map datasourceIdMap = new HashMap<>(); + Map> dsTableNamesMap = new HashMap<>(); + List newDatasourceId = new ArrayList<>(); if(appData != null){ isAppSave = true; try { + List appCoreDatasourceVO = appData.getDatasourceInfo(); + + // app 数据源 excel 表名映射 + appCoreDatasourceVO.forEach(datasourceOld ->{ + newDatasourceId.add(datasourceOld.getSystemDatasourceId()); + // Excel 数据表明映射 + if (StringUtils.isNotEmpty(datasourceOld.getConfiguration()) && datasourceOld.getType().equals(DatasourceConfiguration.DatasourceType.Excel.name())) { + dsTableNamesMap.put(datasourceOld.getId(),ExcelUtils.getTableNamesMap(datasourceOld.getConfiguration())); + } + }); + + List systemDatasource = coreDatasourceMapper.selectBatchIds(newDatasourceId); + systemDatasource.forEach(datasourceNew ->{ + // Excel 数据表明映射 + if (StringUtils.isNotEmpty(datasourceNew.getConfiguration()) && datasourceNew.getType().equals(DatasourceConfiguration.DatasourceType.Excel.name())) { + dsTableNamesMap.put(datasourceNew.getId(),ExcelUtils.getTableNamesMap(datasourceNew.getConfiguration())); + } + }); datasourceIdMap.putAll(appData.getDatasourceInfo().stream() .collect(Collectors.toMap(AppCoreDatasourceVO::getId, AppCoreDatasourceVO::getSystemDatasourceId))); Long datasetFolderPid = request.getDatasetFolderPid(); @@ -261,6 +290,21 @@ public class DataVisualizationServer implements DataVisualizationApi { dsTableFieldsIdMap.forEach((key,value) ->{ dsGroup.setInfo(dsGroup.getInfo().replaceAll(key.toString(),value.toString())); }); + + datasourceIdMap.forEach((key,value) ->{ + dsGroup.setInfo(dsGroup.getInfo().replaceAll(key.toString(),value.toString())); + //表名映射更新 + Map appDsTableNamesMap = dsTableNamesMap.get(key); + Map systemDsTableNamesMap = dsTableNamesMap.get(value); + + appDsTableNamesMap.forEach((keyName,valueName) ->{ + if(StringUtils.isNotEmpty(systemDsTableNamesMap.get(keyName))){ + dsGroup.setInfo(dsGroup.getInfo().replaceAll(valueName,systemDsTableNamesMap.get(keyName))); + } + }); + }); + + datasetGroupManage.innerSave(dsGroup); });