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) {
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";

View File

@ -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<String> fieldNames = sheet.getFields().stream().map(TableField::getName).collect(Collectors.toList());
List<String> fieldTypes = sheet.getFields().stream().map(TableField::getFieldType).collect(Collectors.toList());
Collections.sort(fieldNames);
Collections.sort(fieldTypes);
List<TableField> newTableFields = sheet.getFields();
newTableFields.sort((o1, o2) -> {
return o1.getName().compareTo(o2.getName());
});
datasourceRequest.setTable(datasetTableDTO.getTableName());
List<String> oldFieldNames = ExcelUtils.getTableFields(datasourceRequest).stream().map(TableField::getName).collect(Collectors.toList());
List<String> 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<TableField> 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<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) {
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
return suffix.equalsIgnoreCase("csv");