fix: 优化导出问题

This commit is contained in:
tangwei 2026-04-30 11:38:27 +08:00
parent eafc151634
commit e84b3df57f
3 changed files with 82 additions and 9 deletions

View File

@ -29,6 +29,7 @@ import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -921,6 +922,20 @@ public class FishDraftDataController {
} }
} }
if (StringUtils.hasText(data.getBaseId()) && StringUtils.hasText(data.getRstcd())) {
if (!fishImportService.validateStationBelongsToBase(data.getRstcd(), data.getBaseId())) {
warnings.add("baseId");
warnings.add("rstcd");
}
}
if (StringUtils.hasText(data.getRstcd()) && StringUtils.hasText(data.getStcd())) {
if (!fishImportService.validateFpssBelongsToStation(data.getStcd(), data.getRstcd())) {
warnings.add("stcd");
warnings.add("rstcd");
}
}
// 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()));
// } // }

View File

@ -43,5 +43,9 @@ public interface IFishImportService {
String parseSourceType(String value); String parseSourceType(String value);
boolean validateStationBelongsToBase(String stationCode, String baseId);
boolean validateFpssBelongsToStation(String fpssCode, String stationCode);
void processAttachments(FishImportResult result, ZipFileUtil.ZipContent zipContent); void processAttachments(FishImportResult result, ZipFileUtil.ZipContent zipContent);
} }

View File

@ -60,6 +60,7 @@ public class FishImportServiceImpl implements IFishImportService {
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> STATION_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> STATION_TO_BASE_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> 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<>();
@ -69,6 +70,7 @@ public class FishImportServiceImpl implements IFishImportService {
private static final Map<String, String> FISH_CODE_TO_NAME_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> FPSS_CODE_TO_NAME_CACHE = new LinkedHashMap<>();
private static final Map<String, String> FPSS_TO_STATION_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";
@ -151,7 +153,6 @@ public class FishImportServiceImpl implements IFishImportService {
return result; return result;
} }
List<String> unrecognizedHeaders = new ArrayList<>();
Map<Integer, String> columnIndexMap = new HashMap<>(EXCEL_COLUMN_INDEX_MAPPING); Map<Integer, String> columnIndexMap = new HashMap<>(EXCEL_COLUMN_INDEX_MAPPING);
int totalRows = sheet.getLastRowNum(); int totalRows = sheet.getLastRowNum();
@ -171,9 +172,8 @@ public class FishImportServiceImpl implements IFishImportService {
result.setFailedCount(result.getFailedCount() + 1); result.setFailedCount(result.getFailedCount() + 1);
} }
} }
result.setSummary(String.format("共解析%d条数据失败%d条未识别字段%s", result.setSummary(String.format("共解析%d条数据失败%d条",
result.getSuccessCount(), result.getFailedCount(), result.getSuccessCount(), result.getFailedCount()));
unrecognizedHeaders.isEmpty() ? "" : String.join(", ", unrecognizedHeaders)));
return result; return result;
} }
@ -400,10 +400,41 @@ public class FishImportServiceImpl implements IFishImportService {
// importRow.getWarnings().add("字段[" + fieldName + "]解析异常: " + e.getMessage()); // importRow.getWarnings().add("字段[" + fieldName + "]解析异常: " + e.getMessage());
} }
} }
validateStationFpssRelation(data, importRow);
importRow.setData(data); importRow.setData(data);
return importRow; return importRow;
} }
private void validateStationFpssRelation(FishDraftData data, FishImportResult.FishImportRow importRow) {
loadStationAndBaseCache();
if (StringUtils.hasText(data.getBaseId()) && StringUtils.hasText(data.getRstcd())) {
if (!validateStationBelongsToBase(data.getRstcd(), data.getBaseId())) {
if (!importRow.getWarnings().contains("baseId")) {
importRow.getWarnings().add("baseId");
}
if (!importRow.getWarnings().contains("rstcd")) {
importRow.getWarnings().add("rstcd");
}
if (!importRow.getWarnings().contains("stcd")) {
importRow.getWarnings().add("stcd");
}
}
}
if (StringUtils.hasText(data.getRstcd()) && StringUtils.hasText(data.getStcd())) {
if (!validateFpssBelongsToStation(data.getStcd(), data.getRstcd())) {
if (!importRow.getWarnings().contains("baseId")) {
importRow.getWarnings().add("baseId");
}
if (!importRow.getWarnings().contains("stcd")) {
importRow.getWarnings().add("stcd");
}
if (!importRow.getWarnings().contains("rstcd")) {
importRow.getWarnings().add("rstcd");
}
}
}
}
private void loadStationAndBaseCache() { private void loadStationAndBaseCache() {
if (STATION_NAME_CACHE.isEmpty()) { if (STATION_NAME_CACHE.isEmpty()) {
List<SdEngInfoBH> stationList = engInfoBHMapper.selectList(null); List<SdEngInfoBH> stationList = engInfoBHMapper.selectList(null);
@ -412,10 +443,12 @@ 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());
if (StringUtils.hasText(station.getEnnm())) { if (StringUtils.hasText(station.getEnnm())) {
STATION_CODE_TO_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getEnnm().trim().toLowerCase()); STATION_CODE_TO_NAME_CACHE.put(station.getStcd().trim().toLowerCase(), station.getEnnm().trim().toLowerCase());
} }
if (StringUtils.hasText(station.getBaseId())) {
STATION_TO_BASE_CACHE.put(station.getStcd().trim().toLowerCase(), station.getBaseId());
}
} }
} }
} }
@ -427,7 +460,6 @@ 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());
if (StringUtils.hasText(base.getBasename())) { if (StringUtils.hasText(base.getBasename())) {
BASE_CODE_TO_NAME_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBasename().trim().toLowerCase()); BASE_CODE_TO_NAME_CACHE.put(base.getBaseid().trim().toLowerCase(), base.getBasename().trim().toLowerCase());
} }
@ -442,7 +474,6 @@ 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());
if (StringUtils.hasText(river.getRvnm())) { if (StringUtils.hasText(river.getRvnm())) {
RIVER_CODE_TO_NAME_CACHE.put(river.getRvcd().trim().toLowerCase(), river.getRvnm().trim().toLowerCase()); RIVER_CODE_TO_NAME_CACHE.put(river.getRvcd().trim().toLowerCase(), river.getRvnm().trim().toLowerCase());
} }
@ -457,7 +488,6 @@ 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());
if (StringUtils.hasText(fishDictoryB.getName())) { if (StringUtils.hasText(fishDictoryB.getName())) {
FISH_CODE_TO_NAME_CACHE.put(fishDictoryB.getCode().trim().toLowerCase(), fishDictoryB.getName().trim().toLowerCase()); FISH_CODE_TO_NAME_CACHE.put(fishDictoryB.getCode().trim().toLowerCase(), fishDictoryB.getName().trim().toLowerCase());
} }
@ -472,10 +502,12 @@ 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());
if (StringUtils.hasText(sdFpssBH.getStnm())) { if (StringUtils.hasText(sdFpssBH.getStnm())) {
FPSS_CODE_TO_NAME_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getStnm().trim().toLowerCase()); FPSS_CODE_TO_NAME_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getStnm().trim().toLowerCase());
} }
if (StringUtils.hasText(sdFpssBH.getRstcd())) {
FPSS_TO_STATION_CACHE.put(sdFpssBH.getStcd().trim().toLowerCase(), sdFpssBH.getRstcd());
}
} }
} }
} }
@ -667,6 +699,28 @@ public class FishImportServiceImpl implements IFishImportService {
return null; return null;
} }
@Override
public boolean validateStationBelongsToBase(String stationCode, String baseId) {
if (stationCode == null || baseId == null) {
return false;
}
loadStationAndBaseCache();
String stationLower = stationCode.trim().toLowerCase();
String cachedBaseId = STATION_TO_BASE_CACHE.get(stationLower);
return baseId.equalsIgnoreCase(cachedBaseId);
}
@Override
public boolean validateFpssBelongsToStation(String fpssCode, String stationCode) {
if (fpssCode == null || stationCode == null) {
return false;
}
loadStationAndBaseCache();
String fpssLower = fpssCode.trim().toLowerCase();
String cachedStationCode = FPSS_TO_STATION_CACHE.get(fpssLower);
return stationCode.equalsIgnoreCase(cachedStationCode);
}
private String validateFishType(String fishName, FishImportResult.FishImportRow importRow) { private String validateFishType(String fishName, FishImportResult.FishImportRow importRow) {
if (fishName == null) { if (fishName == null) {
return null; return null;