diff --git a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java index cc53f4f..9fac2b2 100644 --- a/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/data/controller/FishDraftDataController.java @@ -530,37 +530,33 @@ public class FishDraftDataController { private void validateAndNormalizeData(FishDraftData data, FishImportResult.FishImportRow importRow, List warnings) { - if (data.getStnm() == null || data.getStnm().isEmpty()) { + if (data.getStcd() == null || data.getStcd().isEmpty()) { warnings.add("stcd"); } else { - String stcd = fishImportService.resolveFpssCode(data.getStnm().trim()); + String stcd = fishImportService.resolveFpssCode(data.getStcd(),data.getStnm()); if (stcd == null) { warnings.add("stcd"); - } else { - data.setStcd(stcd); } } - if (data.getEnnm() != null && !data.getEnnm().isEmpty()) { - String stationCode = fishImportService.resolveStationCode(data.getEnnm().trim()); + if (data.getRstcd() != null && !data.getRstcd().isEmpty()) { + String stationCode = fishImportService.resolveStationCode(data.getRstcd(),data.getEnnm()); if (stationCode == null) { warnings.add("rstcd"); - } else { - data.setRstcd(stationCode); } + }else{ + warnings.add("rstcd"); } - if (data.getBaseName() != null && !data.getBaseName().isEmpty()) { - String baseId = fishImportService.resolveBaseCode(data.getBaseName().trim()); + if (data.getBaseId() != null && !data.getBaseId().isEmpty()) { + String baseId = fishImportService.resolveBaseCode(data.getBaseId(),data.getBaseName()); if (baseId == null) { warnings.add("baseId"); - } else { - data.setBaseId(baseId); } } if (data.getRvcd() != null && !data.getRvcd().isEmpty()) { - String rvcd = fishImportService.resolveRiverCode(data.getRvcd().trim()); + String rvcd = fishImportService.resolveRiverCode(data.getRvcd(),data.getRvcd()); if (rvcd == null) { warnings.add("rvcd"); } @@ -573,18 +569,12 @@ public class FishDraftDataController { if (data.getFtp() == null || data.getFtp().isEmpty()) { warnings.add("ftp"); } else { - String ftpCode = fishImportService.resolveFishDictCode(data.getFtp().trim()); + String ftpCode = fishImportService.resolveFishDictCode(data.getFtp(),data.getFtpName()); if (ftpCode == null) { warnings.add("ftp"); - } else { - data.setFtp(ftpCode); } } - if (data.getFsz() != null) { - data.setFsz(data.getFsz().trim()); - } - if (data.getFcnt() == null) { warnings.add("fcnt"); } @@ -603,8 +593,6 @@ public class FishDraftDataController { String direction = fishImportService.resolveDirection(data.getDirection().trim(), importRow); if (direction == null) { warnings.add("direction"); - } else { - data.setDirection(direction); } } @@ -614,14 +602,12 @@ public class FishDraftDataController { String isfs = fishImportService.resolveIsfs(String.valueOf(data.getIsfs()), importRow); if (isfs == null) { warnings.add("isfs"); - } else { - data.setIsfs("1".equals(isfs) ? 1 : 0); } } - if (data.getSourceType() != null && !data.getSourceType().isEmpty()) { - data.setSourceType(fishImportService.parseSourceType(data.getSourceType().trim())); - } +// if (data.getSourceType() != null && !data.getSourceType().isEmpty()) { +// data.setSourceType(fishImportService.parseSourceType(data.getSourceType().trim())); +// } } @PostMapping("/validateAndMatchRow") diff --git a/backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java b/backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java index b77fe66..cff4b05 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java +++ b/backend/src/main/java/com/yfd/platform/data/service/IFishImportService.java @@ -23,20 +23,17 @@ public interface IFishImportService { String resolveFpssCode(String name); - String resolveStationCode(String code,String stationName); - - String resolveFpssCode(String code,String name); - String resolveFishDictCode(String name); - String resolveFishDictCode(String code,String name); - String resolveBaseCode(String baseName); - String resolveBaseCode(String code,String baseName); - String resolveRiverCode(String riverName); + String resolveStationCode(String code,String stationName); + + String resolveFpssCode(String code,String name); + String resolveFishDictCode(String code,String name); + String resolveBaseCode(String code,String baseName); String resolveRiverCode(String code,String riverName); String resolveDirection(String direction, FishImportResult.FishImportRow importRow); diff --git a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java b/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java index cee4c0a..44d58e0 100644 --- a/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/data/service/impl/FishImportServiceImpl.java @@ -61,11 +61,16 @@ public class FishImportServiceImpl implements IFishImportService { private static final Map EXCEL_COLUMN_INDEX_MAPPING = new LinkedHashMap<>(); private static final Map STATION_NAME_CACHE = new LinkedHashMap<>(); + private static final Map STATION_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map BASE_NAME_CACHE = new LinkedHashMap<>(); + private static final Map BASE_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map RIVER_NAME_CACHE = new LinkedHashMap<>(); + private static final Map RIVER_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map FISH_DICT_CACHE = new LinkedHashMap<>(); + private static final Map FISH_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map FPSS_BH_CACHE = new LinkedHashMap<>(); + private static final Map FPSS_CODE_TO_NAME_CACHE = new LinkedHashMap<>(); private static final Map ISFS_DICT_CACHE = new LinkedHashMap<>(); private static final String DICT_CODE_FISH = "FISH_TYPE"; @@ -376,7 +381,10 @@ public class FishImportServiceImpl implements IFishImportService { STATION_NAME_CACHE.put(station.getEnnm().trim().toLowerCase(), station.getStcd()); } if (StringUtils.hasText(station.getStcd())) { - STATION_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getStcd()); +// STATION_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getStcd()); + if (StringUtils.hasText(station.getEnnm())) { + STATION_CODE_TO_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getEnnm().trim().toLowerCase()); + } } } } @@ -388,7 +396,10 @@ public class FishImportServiceImpl implements IFishImportService { BASE_NAME_CACHE.put(base.getBasename().trim().toLowerCase(), base.getBaseid()); } if (StringUtils.hasText(base.getBaseid())) { - BASE_NAME_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBaseid()); +// BASE_NAME_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBaseid()); + if (StringUtils.hasText(base.getBasename())) { + BASE_CODE_TO_NAME_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBasename().trim().toLowerCase()); + } } } } @@ -400,7 +411,10 @@ public class FishImportServiceImpl implements IFishImportService { RIVER_NAME_CACHE.put(river.getRvnm().trim().toLowerCase(), river.getRvcd()); } if (StringUtils.hasText(river.getRvcd())) { - RIVER_NAME_CACHE.put(river.getRvcd().trim().toLowerCase(), river.getRvcd()); +// RIVER_NAME_CACHE.put(river.getRvcd().trim().toLowerCase(), river.getRvcd()); + if (StringUtils.hasText(river.getRvnm())) { + RIVER_CODE_TO_NAME_CACHE.put(river.getRvcd().trim().toLowerCase(), river.getRvnm().trim().toLowerCase()); + } } } } @@ -412,7 +426,10 @@ public class FishImportServiceImpl implements IFishImportService { FISH_DICT_CACHE.put(fishDictoryB.getName().trim().toLowerCase(), fishDictoryB.getCode()); } if (StringUtils.hasText(fishDictoryB.getCode())) { - FISH_DICT_CACHE.put(fishDictoryB.getCode().trim().toLowerCase(), fishDictoryB.getCode()); +// FISH_DICT_CACHE.put(fishDictoryB.getCode().trim().toLowerCase(), fishDictoryB.getCode()); + if (StringUtils.hasText(fishDictoryB.getName())) { + FISH_CODE_TO_NAME_CACHE.put(fishDictoryB.getCode().trim().toLowerCase(), fishDictoryB.getName().trim().toLowerCase()); + } } } } @@ -424,7 +441,10 @@ public class FishImportServiceImpl implements IFishImportService { FPSS_BH_CACHE.put(sdFpssBH.getStnm().trim().toLowerCase(), sdFpssBH.getStcd()); } if (StringUtils.hasText(sdFpssBH.getStcd())) { - FPSS_BH_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getStcd()); +// FPSS_BH_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getStcd()); + if (StringUtils.hasText(sdFpssBH.getStnm())) { + FPSS_CODE_TO_NAME_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getStnm().trim().toLowerCase()); + } } } } @@ -466,24 +486,44 @@ public class FishImportServiceImpl implements IFishImportService { @Override public String resolveStationCode(String code, String stationName) { - if (stationName == null) { + if (code == null && stationName == null) { return null; } - String lowerName = stationName.toLowerCase().trim(); - if (STATION_NAME_CACHE.containsKey(lowerName)) { - return STATION_NAME_CACHE.get(lowerName); - } - for (Map.Entry entry : STATION_NAME_CACHE.entrySet()) { - if (entry.getKey().contains(lowerName)) { - return entry.getValue(); + loadStationAndBaseCache(); + String lowerCode = code != null ? code.trim().toLowerCase() : null; + String lowerName = stationName != null ? stationName.trim().toLowerCase() : null; + if (lowerCode != null && lowerName != null) { + String cachedName = STATION_CODE_TO_NAME_CACHE.get(lowerCode); + if (cachedName != null && cachedName.equals(lowerName)) { + return code.trim(); } } + String resultByName = resolveStationCode(stationName); + if (resultByName != null && resultByName.equalsIgnoreCase(code)) { + return resultByName; + } return null; } @Override public String resolveFpssCode(String code, String name) { - return ""; + if (code == null && name == null) { + return null; + } + loadStationAndBaseCache(); + String lowerCode = code != null ? code.trim().toLowerCase() : null; + String lowerName = name != null ? name.trim().toLowerCase() : null; + if (lowerCode != null && lowerName != null) { + String cachedName = FPSS_CODE_TO_NAME_CACHE.get(lowerCode); + if (cachedName != null && cachedName.equals(lowerName)) { + return code.trim(); + } + } + String resultByName = resolveFpssCode(name); + if (resultByName != null && resultByName.equalsIgnoreCase(code)) { + return resultByName; + } + return null; } public String resolveFishDictCode(String name) { @@ -504,7 +544,23 @@ public class FishImportServiceImpl implements IFishImportService { @Override public String resolveFishDictCode(String code, String name) { - return ""; + if (code == null && name == null) { + return null; + } + loadStationAndBaseCache(); + String lowerCode = code != null ? code.trim().toLowerCase() : null; + String lowerName = name != null ? name.trim().toLowerCase() : null; + if (lowerCode != null && lowerName != null) { + String cachedName = FISH_CODE_TO_NAME_CACHE.get(lowerCode); + if (cachedName != null && cachedName.equals(lowerName)) { + return code.trim(); + } + } + String resultByName = resolveFishDictCode(name); + if (resultByName != null && resultByName.equalsIgnoreCase(code)) { + return resultByName; + } + return null; } public String resolveBaseCode(String baseName) { @@ -525,7 +581,23 @@ public class FishImportServiceImpl implements IFishImportService { @Override public String resolveBaseCode(String code, String baseName) { - return ""; + if (code == null && baseName == null) { + return null; + } + loadStationAndBaseCache(); + String lowerCode = code != null ? code.trim().toLowerCase() : null; + String lowerName = baseName != null ? baseName.trim().toLowerCase() : null; + if (lowerCode != null && lowerName != null) { + String cachedName = BASE_CODE_TO_NAME_CACHE.get(lowerCode); + if (cachedName != null && cachedName.equals(lowerName)) { + return code.trim(); + } + } + String resultByName = resolveBaseCode(baseName); + if (resultByName != null && resultByName.equalsIgnoreCase(code)) { + return resultByName; + } + return null; } public String resolveRiverCode(String riverName) { @@ -546,7 +618,23 @@ public class FishImportServiceImpl implements IFishImportService { @Override public String resolveRiverCode(String code, String riverName) { - return ""; + if (code == null && riverName == null) { + return null; + } + loadStationAndBaseCache(); + String lowerCode = code != null ? code.trim().toLowerCase() : null; + String lowerName = riverName != null ? riverName.trim().toLowerCase() : null; + if (lowerCode != null && lowerName != null) { + String cachedName = RIVER_CODE_TO_NAME_CACHE.get(lowerCode); + if (cachedName != null && cachedName.equals(lowerName)) { + return code.trim(); + } + } + String resultByName = resolveRiverCode(riverName); + if (resultByName != null && resultByName.equalsIgnoreCase(code)) { + return resultByName; + } + return null; } private String validateFishType(String fishName, FishImportResult.FishImportRow importRow) {