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 ca691ee612..e927b6dca8 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 @@ -311,9 +311,6 @@ public class ExcelUtils { if (StringUtils.isEmpty(value) || value.length() > 19) { return "TEXT"; } - if (value.length() > 1 && value.startsWith("0")) { - return "TEXT"; - } String regex = "^\\d+(\\.\\d+)?$"; if (!value.matches(regex)) { return "TEXT"; @@ -322,6 +319,9 @@ public class ExcelUtils { Double d = Double.valueOf(value); double eps = 1e-10; if (d - Math.floor(d) < eps) { + if (value.length() > 1 && value.startsWith("0")) { + return "TEXT"; + } return "LONG"; } else { return "DOUBLE"; 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 0b4d40699b..526687f3ef 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 @@ -853,16 +853,18 @@ public class DatasourceServer implements DatasourceApi { for (ExcelSheetData sheet : excelFileData.getSheets()) { for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) { if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName()) || isCsv(file.getOriginalFilename())) { - List fieldNames = sheet.getFields().stream().map(TableField::getName).collect(Collectors.toList()); - List fieldTypes = sheet.getFields().stream().map(TableField::getFieldType).collect(Collectors.toList()); - Collections.sort(fieldNames); - Collections.sort(fieldTypes); + List newTableFields = sheet.getFields(); + newTableFields.sort((o1, o2) -> { + return o1.getName().compareTo(o2.getName()); + }); + datasourceRequest.setTable(datasetTableDTO.getTableName()); - List oldFieldNames = ExcelUtils.getTableFields(datasourceRequest).stream().map(TableField::getName).collect(Collectors.toList()); - List oldFieldTypes = ExcelUtils.getTableFields(datasourceRequest).stream().map(TableField::getFieldType).collect(Collectors.toList()); - Collections.sort(oldFieldNames); - Collections.sort(oldFieldTypes); - if (fieldNames.equals(oldFieldNames) && fieldTypes.equals(oldFieldTypes)) { + List oldTableFields = ExcelUtils.getTableFields(datasourceRequest); + oldTableFields.sort((o1, o2) -> { + return o1.getName().compareTo(o2.getName()); + }); + + if (isEqual(newTableFields, oldTableFields)) { sheet.setDeTableName(datasetTableDTO.getTableName()); excelSheetDataList.add(sheet); } @@ -888,6 +890,34 @@ public class DatasourceServer implements DatasourceApi { return excelFileData; } + private boolean isEqual(List newTableFields, List oldTableFields) { + boolean isEqual = true; + if (CollectionUtils.isEmpty(newTableFields) || CollectionUtils.isEmpty(oldTableFields)) { + isEqual = false; + } + for (int i = 0; i < newTableFields.size(); i++) { + if (!newTableFields.get(i).getName().equals(oldTableFields.get(i).getName())) { + isEqual = false; + break; + } + if (!newTableFields.get(i).getFieldType().equals(oldTableFields.get(i).getFieldType())) { + if (oldTableFields.get(i).getFieldType().equals("TEXT")) { + continue; + } + if (oldTableFields.get(i).getFieldType().equals("DOUBLE")) { + if (newTableFields.get(i).getFieldType().equals("LONG")) { + continue; + } + } + isEqual = false; + break; + } + } + + return isEqual; + + } + private boolean isCsv(String fileName) { String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); return suffix.equalsIgnoreCase("csv");