diff --git a/src/main/java/com/gxwebsoft/credit/controller/CreditCourtAnnouncementController.java b/src/main/java/com/gxwebsoft/credit/controller/CreditCourtAnnouncementController.java index 01f984e..ef66aa6 100644 --- a/src/main/java/com/gxwebsoft/credit/controller/CreditCourtAnnouncementController.java +++ b/src/main/java/com/gxwebsoft/credit/controller/CreditCourtAnnouncementController.java @@ -410,11 +410,15 @@ public class CreditCourtAnnouncementController extends BaseController { ? param.getInvolvedAmount2() : param.getInvolvedAmount(); + String occurrenceTime = !ImportHelper.isBlank(param.getOccurrenceTime2()) + ? param.getOccurrenceTime2() + : param.getOccurrenceTime(); + entity.setDataType(dataType); entity.setPlaintiffAppellant(plaintiffAppellant); entity.setAppellee(param.getAppellee()); entity.setOtherPartiesThirdParty(otherPartiesThirdParty); - entity.setOccurrenceTime(param.getOccurrenceTime()); + entity.setOccurrenceTime(occurrenceTime); entity.setCaseNumber(param.getCaseNumber()); entity.setCauseOfAction(param.getCauseOfAction()); entity.setCourtName(param.getCourtName()); diff --git a/src/main/java/com/gxwebsoft/credit/controller/ExcelImportSupport.java b/src/main/java/com/gxwebsoft/credit/controller/ExcelImportSupport.java index eb1cb75..6f42476 100644 --- a/src/main/java/com/gxwebsoft/credit/controller/ExcelImportSupport.java +++ b/src/main/java/com/gxwebsoft/credit/controller/ExcelImportSupport.java @@ -15,6 +15,8 @@ import org.apache.poi.ss.usermodel.WorkbookFactory; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.Collections; import java.util.HashMap; @@ -267,7 +269,76 @@ public class ExcelImportSupport { importParams.setHeadRows(headRows); importParams.setStartSheetIndex(sheetIndex); importParams.setSheetNum(1); - return ExcelImportUtil.importExcel(file.getInputStream(), clazz, importParams); + + // Easypoi matches headers by exact string. Some upstream files contain extra spaces/tabs/newlines in header cells + // (e.g. "原告 / 上诉人" or "原告/上诉人\t"), which makes specific columns silently not mapped. + // Normalize header cells first to make imports robust. + try (InputStream is = file.getInputStream(); Workbook workbook = WorkbookFactory.create(is)) { + if (workbook.getNumberOfSheets() > sheetIndex) { + Sheet sheet = workbook.getSheetAt(sheetIndex); + if (sheet != null) { + normalizeHeaderCells(sheet, titleRows, headRows); + } + } + try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { + workbook.write(bos); + try (ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray())) { + return ExcelImportUtil.importExcel(bis, clazz, importParams); + } + } + } + } + + private static void normalizeHeaderCells(Sheet sheet, int titleRows, int headRows) { + if (sheet == null || headRows <= 0) { + return; + } + int headerStart = Math.max(titleRows, 0); + int headerEnd = headerStart + headRows - 1; + for (int r = headerStart; r <= headerEnd; r++) { + Row row = sheet.getRow(r); + if (row == null) { + continue; + } + short last = row.getLastCellNum(); + for (int c = 0; c < last; c++) { + Cell cell = row.getCell(c); + if (cell == null) { + continue; + } + + String text = null; + CellType type = cell.getCellType(); + if (type == CellType.STRING) { + text = cell.getStringCellValue(); + } else if (type == CellType.FORMULA && cell.getCachedFormulaResultType() == CellType.STRING) { + text = cell.getStringCellValue(); + } else { + continue; + } + + String normalized = normalizeHeaderText(text); + if (normalized != null && !normalized.equals(text)) { + cell.setCellValue(normalized); + } + } + } + } + + private static String normalizeHeaderText(String text) { + if (text == null) { + return null; + } + // Remove common invisible whitespace characters, including full-width space. + return text + .replace("/", "/") + .replace(" ", "") + .replace("\t", "") + .replace("\r", "") + .replace("\n", "") + .replace("\u00A0", "") + .replace(" ", "") + .trim(); } private static List filterEmptyRows(List rawList, Predicate emptyRowPredicate) { diff --git a/src/main/java/com/gxwebsoft/credit/param/CreditCourtAnnouncementImportParam.java b/src/main/java/com/gxwebsoft/credit/param/CreditCourtAnnouncementImportParam.java index 6a2422b..ffb47fc 100644 --- a/src/main/java/com/gxwebsoft/credit/param/CreditCourtAnnouncementImportParam.java +++ b/src/main/java/com/gxwebsoft/credit/param/CreditCourtAnnouncementImportParam.java @@ -54,6 +54,9 @@ public class CreditCourtAnnouncementImportParam implements Serializable { @Excel(name = "刊登日期") private String occurrenceTime; + @Excel(name = "发生时间") + private String occurrenceTime2; + @Excel(name = "备注") private String comments;