diff --git a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java index 53771af..ced6bdf 100644 --- a/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java +++ b/blade-common/src/main/java/org/springblade/common/excel/ImportFailureExcelUtil.java @@ -95,6 +95,20 @@ public class ImportFailureExcelUtil { * @param excelClass 原导入 Excel 类型 */ public static void export(HttpServletResponse response, String fileName, String sheetName, List data, Class excelClass) { + exportFailureReasonOnly(response, fileName, sheetName, data, excelClass); + } + + /** + * 导出仅标红失败原因列的导入失败明细 + * + * @param response 响应 + * @param fileName 文件名 + * @param sheetName 工作表名 + * @param data 失败数据 + * @param excelClass 原导入 Excel 类型 + */ + public static void exportFailureReasonOnly(HttpServletResponse response, String fileName, String sheetName, + List data, Class excelClass) { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding(StandardCharsets.UTF_8.name()); String encodeFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8); @@ -104,7 +118,7 @@ public class ImportFailureExcelUtil { List> rows = buildRows(data, excelFields); try { FastExcel.write(response.getOutputStream()) - .registerWriteHandler(new ImportFailureCellStyleHandler(excelFields, rows)) + .registerWriteHandler(new ImportFailureCellStyleHandler(excelFields.size())) .head(head) .sheet(sheetName) .doWrite(rows); @@ -182,44 +196,15 @@ public class ImportFailureExcelUtil { throw new NoSuchFieldException(String.join(",", fieldNames)); } - private static String columnName(Field field) { - ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class); - String[] value = excelProperty.value(); - return value.length == 0 ? field.getName() : value[0]; - } - - private static String normalize(String value) { - return value == null ? "" : value.replaceAll("[\\s*_::,,。;;()()\\[\\]【】<>《》-]", "").toLowerCase(); - } - - private static List columnKeywords(Field field) { - String columnName = columnName(field); - List keywords = new ArrayList<>(); - keywords.add(columnName); - keywords.add(field.getName()); - keywords.addAll(Arrays.asList(columnName.replace("*", "").split("[//、()()\\s]+"))); - return keywords.stream() - .map(ImportFailureExcelUtil::normalize) - .filter(keyword -> keyword.length() >= 2) - .distinct() - .toList(); - } - private static class ImportFailureCellStyleHandler implements CellWriteHandler { - private final List> columnKeywords; - private final List> rows; private final int failureReasonColumnIndex; private final Map redStyleCache = new HashMap<>(); private final Map noWrapStyleCache = new HashMap<>(); private final Map columnWidthCache = new HashMap<>(); - private ImportFailureCellStyleHandler(List excelFields, List> rows) { - this.columnKeywords = excelFields.stream() - .map(ImportFailureExcelUtil::columnKeywords) - .toList(); - this.rows = rows; - this.failureReasonColumnIndex = excelFields.size(); + private ImportFailureCellStyleHandler(int failureReasonColumnIndex) { + this.failureReasonColumnIndex = failureReasonColumnIndex; } @Override @@ -237,25 +222,11 @@ public class ImportFailureExcelUtil { return; } adjustColumnWidth(cell); - if (relativeRowIndex == null || relativeRowIndex < 0 || relativeRowIndex >= rows.size()) { - return; - } - if (shouldMarkRed(relativeRowIndex, cell.getColumnIndex())) { + if (cell.getColumnIndex() == failureReasonColumnIndex) { markRed(cell); } } - private boolean shouldMarkRed(int rowIndex, int columnIndex) { - if (columnIndex == failureReasonColumnIndex) { - return true; - } - if (columnIndex < 0 || columnIndex >= columnKeywords.size()) { - return false; - } - String failureReason = normalize(String.valueOf(rows.get(rowIndex).get(failureReasonColumnIndex))); - return columnKeywords.get(columnIndex).stream().anyMatch(failureReason::contains); - } - private void markRed(Cell cell) { CellStyle currentStyle = cell.getCellStyle(); CellStyle redStyle = redStyleCache.computeIfAbsent(currentStyle.getIndex(), styleIndex -> { diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/AirportMaster.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/AirportMaster.java index c0caabf..acf9bbd 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/AirportMaster.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/AirportMaster.java @@ -25,6 +25,7 @@ */ package org.springblade.system.pojo.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; @@ -63,6 +64,7 @@ public class AirportMaster extends BaseEntity { * ICAO代码 */ @Schema(description = "ICAO代码") + @TableField(updateStrategy = FieldStrategy.ALWAYS) private String icaoCode; /** * 机场标准名称 diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/FeeItem.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/FeeItem.java index f3ef8b8..8b8e68c 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/FeeItem.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/pojo/entity/FeeItem.java @@ -25,6 +25,8 @@ */ package org.springblade.system.pojo.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -62,5 +64,11 @@ public class FeeItem extends BaseEntity { */ @Schema(description = "费用项代码") private String englishName; + /** + * 备注 + */ + @Schema(description = "备注") + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String remark; } diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java index af2b719..434c164 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java @@ -122,9 +122,11 @@ public class CustomerArchive extends TenantEntity { private String customerLevel; @Schema(description = "最大资金使用额度(万元)") + @TableField(updateStrategy = FieldStrategy.ALWAYS) private BigDecimal maxCreditLimit; @Schema(description = "申请总资金使用额度(万元)") + @TableField(updateStrategy = FieldStrategy.ALWAYS) private BigDecimal applyCreditLimit; @Schema(description = "备注") diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java index caf288f..108260e 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/AirportMasterController.java @@ -158,7 +158,7 @@ public class AirportMasterController extends BladeController { } List failureList = airportMasterService.importAirportMaster(ExcelUtil.read(file, AirportMasterExcel.class)); if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "空港机场主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, AirportMasterExcel.class); + org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "空港机场主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, AirportMasterExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java index a34396b..6e53caa 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/PortTerminalController.java @@ -77,7 +77,11 @@ public class PortTerminalController extends BladeController { private static final int DEFAULT_CURRENT = 1; private static final int DEFAULT_SIZE = 10; private static final int MAX_SIZE = 100; - private static final String SOURCE_INITIAL = "初始化导入"; + private static final String SOURCE_INITIAL = "初始化录入"; + private static final String SOURCE_INITIAL_IMPORT = "初始化导入"; + private static final String SOURCE_INITIAL_OLD = "初始导入"; + private static final String SOURCE_MANUAL = "手动录入"; + private static final String SOURCE_MANUAL_OLD = "手工导入"; private final IPortTerminalService portTerminalService; @@ -95,6 +99,7 @@ public class PortTerminalController extends BladeController { if (Func.isEmpty(detail)) { return R.fail("港口码头不存在"); } + detail.setDataSource(normalizeDataSource(detail.getDataSource())); return R.data(PortTerminalWrapper.build().entityVO(detail)); } @@ -150,7 +155,9 @@ public class PortTerminalController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "上级港口下拉数据源") public R> portSelect() { - return R.data(portTerminalService.selectEnabledPorts()); + List ports = portTerminalService.selectEnabledPorts(); + ports.forEach(port -> port.setDataSource(normalizeDataSource(port.getDataSource()))); + return R.data(ports); } /** @@ -169,7 +176,7 @@ public class PortTerminalController extends BladeController { } List failureList = portTerminalService.importPortTerminal(ExcelUtil.read(file, PortTerminalExcel.class)); if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "港口码头主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, PortTerminalExcel.class); + org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "港口码头主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, PortTerminalExcel.class); return null; } return R.success("操作成功"); @@ -237,10 +244,19 @@ public class PortTerminalController extends BladeController { return; } if (SOURCE_INITIAL.equals(value)) { - queryWrapper.in("data_source", SOURCE_INITIAL, "初始导入"); + queryWrapper.in("data_source", SOURCE_INITIAL, SOURCE_INITIAL_IMPORT, SOURCE_INITIAL_OLD); + } else if (SOURCE_MANUAL.equals(value)) { + queryWrapper.in("data_source", SOURCE_MANUAL, SOURCE_MANUAL_OLD); } else { queryWrapper.eq("data_source", value); } } + private String normalizeDataSource(String dataSource) { + if (SOURCE_INITIAL_IMPORT.equals(dataSource) || SOURCE_INITIAL_OLD.equals(dataSource)) { + return SOURCE_INITIAL; + } + return SOURCE_MANUAL_OLD.equals(dataSource) ? SOURCE_MANUAL : dataSource; + } + } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java index 011df66..67012f5 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RailwayStationController.java @@ -161,7 +161,7 @@ public class RailwayStationController extends BladeController { } List failureList = railwayStationService.importRailwayStation(ExcelUtil.read(file, RailwayStationExcel.class)); if (Func.isNotEmpty(failureList)) { - org.springblade.common.excel.ImportFailureExcelUtil.export(response, "铁路车站主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, RailwayStationExcel.class); + org.springblade.common.excel.ImportFailureExcelUtil.exportFailureReasonOnly(response, "铁路车站主数据导入失败明细" + DateUtil.time(), "导入失败明细", failureList, RailwayStationExcel.class); return null; } return R.success("操作成功"); diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/FeeItemMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/FeeItemMapper.xml index fadca0b..698956a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/FeeItemMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/FeeItemMapper.xml @@ -16,6 +16,7 @@ +