fix: 优化导入逻辑

This commit is contained in:
tangwei 2026-04-29 19:03:07 +08:00
parent d4469cb894
commit a8521c554c
3 changed files with 123 additions and 52 deletions

View File

@ -530,37 +530,33 @@ public class FishDraftDataController {
private void validateAndNormalizeData(FishDraftData data, FishImportResult.FishImportRow importRow, private void validateAndNormalizeData(FishDraftData data, FishImportResult.FishImportRow importRow,
List<String> warnings) { List<String> warnings) {
if (data.getStnm() == null || data.getStnm().isEmpty()) { if (data.getStcd() == null || data.getStcd().isEmpty()) {
warnings.add("stcd"); warnings.add("stcd");
} else { } else {
String stcd = fishImportService.resolveFpssCode(data.getStnm().trim()); String stcd = fishImportService.resolveFpssCode(data.getStcd(),data.getStnm());
if (stcd == null) { if (stcd == null) {
warnings.add("stcd"); warnings.add("stcd");
} else {
data.setStcd(stcd);
} }
} }
if (data.getEnnm() != null && !data.getEnnm().isEmpty()) { if (data.getRstcd() != null && !data.getRstcd().isEmpty()) {
String stationCode = fishImportService.resolveStationCode(data.getEnnm().trim()); String stationCode = fishImportService.resolveStationCode(data.getRstcd(),data.getEnnm());
if (stationCode == null) { if (stationCode == null) {
warnings.add("rstcd"); warnings.add("rstcd");
} else {
data.setRstcd(stationCode);
} }
}else{
warnings.add("rstcd");
} }
if (data.getBaseName() != null && !data.getBaseName().isEmpty()) { if (data.getBaseId() != null && !data.getBaseId().isEmpty()) {
String baseId = fishImportService.resolveBaseCode(data.getBaseName().trim()); String baseId = fishImportService.resolveBaseCode(data.getBaseId(),data.getBaseName());
if (baseId == null) { if (baseId == null) {
warnings.add("baseId"); warnings.add("baseId");
} else {
data.setBaseId(baseId);
} }
} }
if (data.getRvcd() != null && !data.getRvcd().isEmpty()) { 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) { if (rvcd == null) {
warnings.add("rvcd"); warnings.add("rvcd");
} }
@ -573,18 +569,12 @@ public class FishDraftDataController {
if (data.getFtp() == null || data.getFtp().isEmpty()) { if (data.getFtp() == null || data.getFtp().isEmpty()) {
warnings.add("ftp"); warnings.add("ftp");
} else { } else {
String ftpCode = fishImportService.resolveFishDictCode(data.getFtp().trim()); String ftpCode = fishImportService.resolveFishDictCode(data.getFtp(),data.getFtpName());
if (ftpCode == null) { if (ftpCode == null) {
warnings.add("ftp"); warnings.add("ftp");
} else {
data.setFtp(ftpCode);
} }
} }
if (data.getFsz() != null) {
data.setFsz(data.getFsz().trim());
}
if (data.getFcnt() == null) { if (data.getFcnt() == null) {
warnings.add("fcnt"); warnings.add("fcnt");
} }
@ -603,8 +593,6 @@ public class FishDraftDataController {
String direction = fishImportService.resolveDirection(data.getDirection().trim(), importRow); String direction = fishImportService.resolveDirection(data.getDirection().trim(), importRow);
if (direction == null) { if (direction == null) {
warnings.add("direction"); warnings.add("direction");
} else {
data.setDirection(direction);
} }
} }
@ -614,14 +602,12 @@ public class FishDraftDataController {
String isfs = fishImportService.resolveIsfs(String.valueOf(data.getIsfs()), importRow); String isfs = fishImportService.resolveIsfs(String.valueOf(data.getIsfs()), importRow);
if (isfs == null) { if (isfs == null) {
warnings.add("isfs"); warnings.add("isfs");
} else {
data.setIsfs("1".equals(isfs) ? 1 : 0);
} }
} }
if (data.getSourceType() != null && !data.getSourceType().isEmpty()) { // if (data.getSourceType() != null && !data.getSourceType().isEmpty()) {
data.setSourceType(fishImportService.parseSourceType(data.getSourceType().trim())); // data.setSourceType(fishImportService.parseSourceType(data.getSourceType().trim()));
} // }
} }
@PostMapping("/validateAndMatchRow") @PostMapping("/validateAndMatchRow")

View File

@ -23,20 +23,17 @@ public interface IFishImportService {
String resolveFpssCode(String name); String resolveFpssCode(String name);
String resolveStationCode(String code,String stationName);
String resolveFpssCode(String code,String name);
String resolveFishDictCode(String name); String resolveFishDictCode(String name);
String resolveFishDictCode(String code,String name);
String resolveBaseCode(String baseName); String resolveBaseCode(String baseName);
String resolveBaseCode(String code,String baseName);
String resolveRiverCode(String riverName); 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 resolveRiverCode(String code,String riverName);
String resolveDirection(String direction, FishImportResult.FishImportRow importRow); String resolveDirection(String direction, FishImportResult.FishImportRow importRow);

View File

@ -61,11 +61,16 @@ public class FishImportServiceImpl implements IFishImportService {
private static final Map<Integer, String> EXCEL_COLUMN_INDEX_MAPPING = new LinkedHashMap<>(); private static final Map<Integer, String> EXCEL_COLUMN_INDEX_MAPPING = new LinkedHashMap<>();
private static final Map<String, String> STATION_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> STATION_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> STATION_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> BASE_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> BASE_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> BASE_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> RIVER_NAME_CACHE = new LinkedHashMap<>(); private static final Map<String, String> RIVER_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> RIVER_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FISH_DICT_CACHE = new LinkedHashMap<>(); private static final Map<String, String> FISH_DICT_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FISH_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FPSS_BH_CACHE = new LinkedHashMap<>(); private static final Map<String, String> FPSS_BH_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FPSS_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> ISFS_DICT_CACHE = new LinkedHashMap<>(); private static final Map<String, String> ISFS_DICT_CACHE = new LinkedHashMap<>();
private static final String DICT_CODE_FISH = "FISH_TYPE"; 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()); STATION_NAME_CACHE.put(station.getEnnm().trim().toLowerCase(), station.getStcd());
} }
if (StringUtils.hasText(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()); BASE_NAME_CACHE.put(base.getBasename().trim().toLowerCase(), base.getBaseid());
} }
if (StringUtils.hasText(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()); RIVER_NAME_CACHE.put(river.getRvnm().trim().toLowerCase(), river.getRvcd());
} }
if (StringUtils.hasText(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()); FISH_DICT_CACHE.put(fishDictoryB.getName().trim().toLowerCase(), fishDictoryB.getCode());
} }
if (StringUtils.hasText(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()); FPSS_BH_CACHE.put(sdFpssBH.getStnm().trim().toLowerCase(), sdFpssBH.getStcd());
} }
if (StringUtils.hasText(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 @Override
public String resolveStationCode(String code, String stationName) { public String resolveStationCode(String code, String stationName) {
if (stationName == null) { if (code == null && stationName == null) {
return null; return null;
} }
String lowerName = stationName.toLowerCase().trim(); loadStationAndBaseCache();
if (STATION_NAME_CACHE.containsKey(lowerName)) { String lowerCode = code != null ? code.trim().toLowerCase() : null;
return STATION_NAME_CACHE.get(lowerName); String lowerName = stationName != null ? stationName.trim().toLowerCase() : null;
} if (lowerCode != null && lowerName != null) {
for (Map.Entry<String, String> entry : STATION_NAME_CACHE.entrySet()) { String cachedName = STATION_CODE_TO_NAME_CACHE.get(lowerCode);
if (entry.getKey().contains(lowerName)) { if (cachedName != null && cachedName.equals(lowerName)) {
return entry.getValue(); return code.trim();
} }
} }
String resultByName = resolveStationCode(stationName);
if (resultByName != null && resultByName.equalsIgnoreCase(code)) {
return resultByName;
}
return null; return null;
} }
@Override @Override
public String resolveFpssCode(String code, String name) { 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) { public String resolveFishDictCode(String name) {
@ -504,7 +544,23 @@ public class FishImportServiceImpl implements IFishImportService {
@Override @Override
public String resolveFishDictCode(String code, String name) { 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) { public String resolveBaseCode(String baseName) {
@ -525,7 +581,23 @@ public class FishImportServiceImpl implements IFishImportService {
@Override @Override
public String resolveBaseCode(String code, String baseName) { 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) { public String resolveRiverCode(String riverName) {
@ -546,7 +618,23 @@ public class FishImportServiceImpl implements IFishImportService {
@Override @Override
public String resolveRiverCode(String code, String riverName) { 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) { private String validateFishType(String fishName, FishImportResult.FishImportRow importRow) {