fix: 修复excel 数据类型判断错误

This commit is contained in:
taojinlong 2024-08-26 12:44:30 +08:00
parent d2ccad7261
commit f781cc25fd
2 changed files with 42 additions and 12 deletions

View File

@ -311,9 +311,6 @@ public class ExcelUtils {
if (StringUtils.isEmpty(value) || value.length() > 19) { if (StringUtils.isEmpty(value) || value.length() > 19) {
return "TEXT"; return "TEXT";
} }
if (value.length() > 1 && value.startsWith("0")) {
return "TEXT";
}
String regex = "^\\d+(\\.\\d+)?$"; String regex = "^\\d+(\\.\\d+)?$";
if (!value.matches(regex)) { if (!value.matches(regex)) {
return "TEXT"; return "TEXT";
@ -322,6 +319,9 @@ public class ExcelUtils {
Double d = Double.valueOf(value); Double d = Double.valueOf(value);
double eps = 1e-10; double eps = 1e-10;
if (d - Math.floor(d) < eps) { if (d - Math.floor(d) < eps) {
if (value.length() > 1 && value.startsWith("0")) {
return "TEXT";
}
return "LONG"; return "LONG";
} else { } else {
return "DOUBLE"; return "DOUBLE";

View File

@ -853,16 +853,18 @@ public class DatasourceServer implements DatasourceApi {
for (ExcelSheetData sheet : excelFileData.getSheets()) { for (ExcelSheetData sheet : excelFileData.getSheets()) {
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) { for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName()) || isCsv(file.getOriginalFilename())) { if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName()) || isCsv(file.getOriginalFilename())) {
List<String> fieldNames = sheet.getFields().stream().map(TableField::getName).collect(Collectors.toList()); List<TableField> newTableFields = sheet.getFields();
List<String> fieldTypes = sheet.getFields().stream().map(TableField::getFieldType).collect(Collectors.toList()); newTableFields.sort((o1, o2) -> {
Collections.sort(fieldNames); return o1.getName().compareTo(o2.getName());
Collections.sort(fieldTypes); });
datasourceRequest.setTable(datasetTableDTO.getTableName()); datasourceRequest.setTable(datasetTableDTO.getTableName());
List<String> oldFieldNames = ExcelUtils.getTableFields(datasourceRequest).stream().map(TableField::getName).collect(Collectors.toList()); List<TableField> oldTableFields = ExcelUtils.getTableFields(datasourceRequest);
List<String> oldFieldTypes = ExcelUtils.getTableFields(datasourceRequest).stream().map(TableField::getFieldType).collect(Collectors.toList()); oldTableFields.sort((o1, o2) -> {
Collections.sort(oldFieldNames); return o1.getName().compareTo(o2.getName());
Collections.sort(oldFieldTypes); });
if (fieldNames.equals(oldFieldNames) && fieldTypes.equals(oldFieldTypes)) {
if (isEqual(newTableFields, oldTableFields)) {
sheet.setDeTableName(datasetTableDTO.getTableName()); sheet.setDeTableName(datasetTableDTO.getTableName());
excelSheetDataList.add(sheet); excelSheetDataList.add(sheet);
} }
@ -888,6 +890,34 @@ public class DatasourceServer implements DatasourceApi {
return excelFileData; return excelFileData;
} }
private boolean isEqual(List<TableField> newTableFields, List<TableField> 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) { private boolean isCsv(String fileName) {
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
return suffix.equalsIgnoreCase("csv"); return suffix.equalsIgnoreCase("csv");