fix:【数据源】excel 数据源替换 excel 多个 sheet 都需要加载 #12329

This commit is contained in:
taojinlong 2024-10-28 17:24:01 +08:00
parent b565414c0d
commit be205ce43b
2 changed files with 38 additions and 5 deletions

View File

@ -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<List<TableField>> TableFieldListTypeReference = new TypeReference<List<TableField>>() {
};
private static TypeReference<List<ExcelSheetData>> sheets = new TypeReference<List<ExcelSheetData>>() {
};
public static void mergeSheets(CoreDatasource requestDatasource, DatasourceDTO sourceData) {
List<ExcelSheetData> newSheets = JsonUtil.parseList(requestDatasource.getConfiguration(), sheets);
List<String> tableNames = newSheets.stream().map(ExcelSheetData::getDeTableName).collect(Collectors.toList());
List<ExcelSheetData> 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<DatasetTableDTO> getTables(DatasourceRequest datasourceRequest) throws DEException {
List<DatasetTableDTO> tableDescs = new ArrayList<>();
try {

View File

@ -404,7 +404,7 @@ public class DatasourceServer implements DatasourceApi {
List<String> 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<DatasetTableDTO> 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++) {