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,
List<String> 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")

View File

@ -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);

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<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_CODE_TO_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_CODE_TO_NAME_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 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<String, String> 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) {