From c8464310d22aa797c9139eec82ee0b2964609efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 16 Dec 2025 13:47:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(credit):=20=E6=94=B9=E8=BF=9B=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E5=B9=B6=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E7=A9=BA=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在尝试导入时增加对空行的过滤处理 - 添加 filterEmptyRows 方法以移除完全空白的导入行 - 扩展 fallback 导入逻辑至三种表头情况 - 移除对唯一标识字段非空的强制校验 - 提升导入稳定性与容错能力 --- .../controller/CreditUserController.java | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gxwebsoft/credit/controller/CreditUserController.java b/src/main/java/com/gxwebsoft/credit/controller/CreditUserController.java index 934d804..5cf321d 100644 --- a/src/main/java/com/gxwebsoft/credit/controller/CreditUserController.java +++ b/src/main/java/com/gxwebsoft/credit/controller/CreditUserController.java @@ -146,13 +146,16 @@ public class CreditUserController extends BaseController { int successCount = 0; try { - List list = tryImport(file, 1, 1); + List 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 filterEmptyRows(List 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实体 */