추론 run 수정

This commit is contained in:
2026-02-25 22:50:38 +09:00
parent 70c28e0b54
commit 4863091406

View File

@@ -135,8 +135,10 @@ public class InferenceResultService {
* @return
*/
public UUID runExcl(InferenceResultDto.RegReq req) {
// target 도엽 조회
List<MngListDto> targetDtoList = mapSheetMngCoreService.getHstMapSheetList(req);
// target 리스트 추출 (null 제거 + 중복 제거)
List<String> targetList =
targetDtoList.stream()
.map(MngListDto::getMapSheetNum)
@@ -144,32 +146,46 @@ public class InferenceResultService {
.distinct()
.toList();
// compare 도엽번호 리스트 조회 (null 제거 + 중복 제거)
List<String> compareList =
mapSheetMngCoreService.getMapSheetNumByHst(req.getCompareYyyy()).stream()
.filter(Objects::nonNull)
.distinct()
.toList();
// compare 기준
Set<String> compareSet = new HashSet<>(compareList);
// target 기준으로 compare에 존재하는 도엽만 필터링
List<String> filteredTargetList = targetList.stream().filter(compareSet::contains).toList();
// 도엽 비교 로그 출력
logYearComparison(targetList, compareList, filteredTargetList);
// compare geojson 파일 생성
Scene compareScene =
getSceneInference(
req.getCompareYyyy().toString(),
filteredTargetList,
req.getMapSheetScope(),
req.getDetectOption());
req.getCompareYyyy().toString(), // 기준년도
filteredTargetList, // 교집합 도엽
req.getMapSheetScope(), // ALL / 부분
req.getDetectOption()); // EXCL / PREV
// target geojson 파일 생성
Scene targetScene =
getSceneInference(
req.getTargetYyyy().toString(),
filteredTargetList,
req.getTargetYyyy().toString(), // 대상년도
filteredTargetList, // 교집합 도엽
req.getMapSheetScope(),
req.getDetectOption());
return executeInference(req, targetDtoList, filteredTargetList, compareScene, targetScene);
// 추론 실행
return executeInference(
req,
targetDtoList, // 전체 target 목록
filteredTargetList, // 최종 추론 대상
compareScene, // compare geojson
targetScene // target geojson
);
}
/**
@@ -180,8 +196,10 @@ public class InferenceResultService {
*/
@Transactional
public UUID runPrev(InferenceResultDto.RegReq req) {
// target 목록 조회
List<MngListDto> targetDtoList = mapSheetMngCoreService.getHstMapSheetList(req);
// target 도엽번호 리스트 추출
List<String> targetList =
targetDtoList.stream()
.map(MngListDto::getMapSheetNum)
@@ -189,27 +207,35 @@ public class InferenceResultService {
.distinct()
.toList();
// target 포함 여부 판단
Set<String> targetSet = new HashSet<>(targetList);
// compare 목록 조회
List<MapSheetFallbackYearDto> compareDtoList =
new ArrayList<>(mapSheetMngCoreService.getMapSheetNumDtoByHst(req.getCompareYyyy()));
// compare 도엽번호 Set 구성
Set<String> compareSet =
compareDtoList.stream()
.map(MapSheetFallbackYearDto::getMapSheetNum)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// arget에는 있으나 compare에는 없는 도엽 추출
List<String> remainingTargetList =
targetList.stream().filter(s -> !compareSet.contains(s)).toList();
// fallback년도 도엽 조회
List<MapSheetFallbackYearDto> fallbackYearDtoList =
mapSheetMngCoreService.findFallbackCompareYearByMapSheets(
req.getTargetYyyy(), remainingTargetList);
req.getTargetYyyy(), // 대상년도 기준
remainingTargetList // compare에 없는 도엽들
);
// 기존 compare , fallback 합치기
compareDtoList.addAll(fallbackYearDtoList);
// mapSheetNum 기준 중복 제거(기존 compare 우선)
// mapSheetNum 기준 중복 제거 (기존 compare 우선 유지)
compareDtoList =
new ArrayList<>(
compareDtoList.stream()
@@ -218,49 +244,56 @@ public class InferenceResultService {
Collectors.toMap(
MapSheetFallbackYearDto::getMapSheetNum,
Function.identity(),
(existing, replacement) -> existing,
(existing, replacement) -> existing, // 기존 우선
LinkedHashMap::new))
.values());
// 최종 compare 도엽 Set 구성
Set<String> availableCompareSheets =
compareDtoList.stream()
.map(MapSheetFallbackYearDto::getMapSheetNum)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 최종 추론 대상 도엽
// target 중 compare(fallback)에 존재하는 도엽만 추출
List<String> filteredTargetList =
targetList.stream().filter(availableCompareSheets::contains).toList();
// compare only 계산 (target에는 없는 compare 도엽 수)
long compareOnlyCount =
compareDtoList.stream()
.map(MapSheetFallbackYearDto::getMapSheetNum)
.filter(s -> s != null && !targetSet.contains(s))
.count();
// 연도별 도엽 비교 로그 출력
log.info(
"""
===== MapSheet Year Comparison =====
target Total: {}
compare Total: {}
Intersection: {}
target Only (Excluded): {}
compare Only: {}
====================================
""",
targetList.size(),
compareDtoList.size(),
filteredTargetList.size(),
targetList.size() - filteredTargetList.size(),
compareOnlyCount);
===== MapSheet Year Comparison =====
target Total: {}
compare Total: {}
Intersection: {}
target Only (Excluded): {}
compare Only: {}
====================================
""",
targetList.size(), // target count
compareDtoList.size(), // compare count
filteredTargetList.size(), // target 기준으로 compare 비교하여 최종 추론할 도엽 count
targetList.size() - filteredTargetList.size(), // compare에 존재하지 않는 target 도엽 수
compareOnlyCount); // target 에 존재하지 않는 compare 도엽수
// compareDtoList도 filteredTargetList 기준으로 필터
// compareDtoList도 최종 교집합 기준으로 필터
Set<String> filteredTargetSet = new HashSet<>(filteredTargetList);
List<MapSheetFallbackYearDto> filteredCompareDtoList =
compareDtoList.stream()
.filter(d -> d.getMapSheetNum() != null)
.filter(d -> filteredTargetSet.contains(d.getMapSheetNum()))
.toList();
// compare 기준 geojson 생성 (년도 fallback 반영)
Scene compareScene =
getSceneInference(
filteredCompareDtoList,
@@ -268,6 +301,7 @@ public class InferenceResultService {
req.getMapSheetScope(),
req.getDetectOption());
// target 기준 geojson 생성
Scene targetScene =
getSceneInference(
req.getTargetYyyy().toString(),
@@ -275,6 +309,7 @@ public class InferenceResultService {
req.getMapSheetScope(),
req.getDetectOption());
// AI 추론 실행
return executeInference(req, targetDtoList, filteredTargetList, compareScene, targetScene);
}
@@ -355,11 +390,11 @@ public class InferenceResultService {
compare Only: {}
====================================
""",
targetList.size(),
compareList.size(),
filteredTargetList.size(),
targetList.size() - filteredTargetList.size(),
compareOnlyCount);
targetList.size(), // target count
compareList.size(), // compare count
filteredTargetList.size(), // target 기준으로 compare 비교하여 최종 추론할 도엽 count
targetList.size() - filteredTargetList.size(), // compare에 존재하지 않는 target 도엽 수
compareOnlyCount); // target 에 존재하지 않는 compare 도엽수
}
/**