feat(credit): 改进用户导入功能并过滤空行

- 在尝试导入时增加对空行的过滤处理
- 添加 filterEmptyRows 方法以移除完全空白的导入行
- 扩展 fallback 导入逻辑至三种表头情况
- 移除对唯一标识字段非空的强制校验
- 提升导入稳定性与容错能力
This commit is contained in:
2025-12-16 13:47:44 +08:00
parent bd6868f8a3
commit c8464310d2

View File

@@ -146,13 +146,16 @@ public class CreditUserController extends BaseController {
int successCount = 0;
try {
List<CreditUserImportParam> list = tryImport(file, 1, 1);
List<CreditUserImportParam> list = filterEmptyRows(tryImport(file, 1, 1));
System.out.println("list = " + list);
if (CollectionUtils.isEmpty(list)) {
list = tryImport(file, 0, 1); // fallback无标题行只有表头
list = filterEmptyRows(tryImport(file, 0, 1)); // fallback无标题行只有表头
}
if (CollectionUtils.isEmpty(list)) {
list = tryImport(file, 0, 2); // fallback两行表头
list = filterEmptyRows(tryImport(file, 0, 2)); // fallback两行表头
}
if (CollectionUtils.isEmpty(list)) {
list = filterEmptyRows(tryImport(file, 0, 3)); // fallback三行表头
}
if (CollectionUtils.isEmpty(list)) {
return fail("未读取到数据,请确认模板表头与示例格式一致", null);
@@ -191,10 +194,6 @@ public class CreditUserController extends BaseController {
errorMessages.add("" + (i + 1) + "行:项目名称不能为空");
continue;
}
if (item.getCode() == null || item.getCode().trim().isEmpty()) {
errorMessages.add("" + (i + 1) + "行:唯一标识不能为空");
continue;
}
System.out.println("item = " + item);
if (creditUserService.save(item)) {
@@ -260,6 +259,35 @@ public class CreditUserController extends BaseController {
return ExcelImportUtil.importExcel(file.getInputStream(), CreditUserImportParam.class, importParams);
}
/**
* 过滤掉完全空白的导入行,避免空行导致导入失败
*/
private List<CreditUserImportParam> filterEmptyRows(List<CreditUserImportParam> rawList) {
if (CollectionUtils.isEmpty(rawList)) {
return rawList;
}
rawList.removeIf(this::isEmptyImportRow);
return rawList;
}
private boolean isEmptyImportRow(CreditUserImportParam param) {
if (param == null) {
return true;
}
return isBlank(param.getName())
&& isBlank(param.getCode())
&& isBlank(param.getRole())
&& isBlank(param.getInfoType())
&& isBlank(param.getAddress())
&& isBlank(param.getProcurementName())
&& isBlank(param.getWinningName())
&& isBlank(param.getWinningPrice());
}
private boolean isBlank(String value) {
return value == null || value.trim().isEmpty();
}
/**
* 将CreditUserImportParam转换为CreditUser实体
*/