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 f41ac59953..b8ae99d1ea 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 @@ -15,6 +15,7 @@ import io.dataease.api.ds.vo.ExcelSheetData; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.exception.DEException; import io.dataease.extensions.datasource.dto.DatasetTableDTO; +import io.dataease.extensions.datasource.dto.DatasourceDTO; import io.dataease.extensions.datasource.dto.DatasourceRequest; import io.dataease.extensions.datasource.dto.TableField; import io.dataease.utils.AuthUtils; @@ -40,6 +41,21 @@ public class ExcelUtils { private static TypeReference> TableFieldListTypeReference = new TypeReference>() { }; + private static TypeReference> sheets = new TypeReference>() { + }; + + public static void mergeSheets(CoreDatasource requestDatasource, DatasourceDTO sourceData) { + List newSheets = JsonUtil.parseList(requestDatasource.getConfiguration(), sheets); + List tableNames = newSheets.stream().map(ExcelSheetData::getDeTableName).collect(Collectors.toList()); + List oldSheets = JsonUtil.parseList(sourceData.getConfiguration(), sheets); + for (ExcelSheetData oldSheet : oldSheets) { + if (!tableNames.contains(oldSheet.getDeTableName())) { + newSheets.add(oldSheet); + } + } + requestDatasource.setConfiguration(JsonUtil.toJSONString(newSheets).toString()); + } + public static List getTables(DatasourceRequest datasourceRequest) throws DEException { List tableDescs = new ArrayList<>(); try { diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index 3e5a9c76cd..a94d55fe6f 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -404,7 +404,7 @@ public class DatasourceServer implements DatasourceApi { List tables = ExcelUtils.getTables(datasourceRequest).stream().map(DatasetTableDTO::getTableName).collect(Collectors.toList()); if (dataSourceDTO.getEditType() == 0) { toCreateTables = tables; - toDeleteTables = sourceTables; + toDeleteTables = sourceTables.stream().filter(s -> tables.contains(s)).collect(Collectors.toList()); for (String deleteTable : toDeleteTables) { try { datasourceSyncManage.dropEngineTable(deleteTable); @@ -422,6 +422,7 @@ public class DatasourceServer implements DatasourceApi { } datasourceSyncManage.extractExcelData(requestDatasource, "all_scope"); dataSourceManage.checkName(dataSourceDTO); + ExcelUtils.mergeSheets(requestDatasource, sourceData); dataSourceManage.innerEdit(requestDatasource); } else { datasourceSyncManage.extractExcelData(requestDatasource, "add_scope"); @@ -735,11 +736,15 @@ public class DatasourceServer implements DatasourceApi { } } + private static final Integer replace = 0; + private static final Integer append = 1; + public ExcelFileData excelUpload(@RequestParam("file") MultipartFile file, @RequestParam("id") long datasourceId, @RequestParam("editType") Integer editType) throws DEException { + CoreDatasource coreDatasource = datasourceMapper.selectById(datasourceId); + ExcelUtils excelUtils = new ExcelUtils(); ExcelFileData excelFileData = excelUtils.excelSaveAndParse(file); - if (editType == 1 || editType == 0) { //按照excel sheet 名称匹配 - CoreDatasource coreDatasource = datasourceMapper.selectById(datasourceId); + if (Objects.equals(editType, append)) { //按照excel sheet 名称匹配,替换:0;追加:1 if (coreDatasource != null) { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(transDTO(coreDatasource)); @@ -757,7 +762,6 @@ public class DatasourceServer implements DatasourceApi { oldTableFields.sort((o1, o2) -> { return o1.getName().compareTo(o2.getName()); }); - if (isEqual(newTableFields, oldTableFields)) { sheet.setDeTableName(datasetTableDTO.getTableName()); excelSheetDataList.add(sheet); @@ -770,8 +774,21 @@ public class DatasourceServer implements DatasourceApi { } excelFileData.setSheets(excelSheetDataList); } - } + } else { + if (coreDatasource != null) { + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(transDTO(coreDatasource)); + List datasetTableDTOS = ExcelUtils.getTables(datasourceRequest); + for (ExcelSheetData sheet : excelFileData.getSheets()) { + for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) { + if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName()) || isCsv(file.getOriginalFilename())) { + sheet.setDeTableName(datasetTableDTO.getTableName()); + } + } + } + } + } for (ExcelSheetData sheet : excelFileData.getSheets()) { for (int i = 0; i < sheet.getFields().size() - 1; i++) { for (int j = i + 1; j < sheet.getFields().size(); j++) {