From 4863091406a63a98d6343dc027244d83c71c025c Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 25 Feb 2026 22:50:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B6=94=EB=A1=A0=20run=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/InferenceResultService.java | 93 +++++++++++++------ 1 file changed, 64 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index a8cfe00b..05a1d331 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -135,8 +135,10 @@ public class InferenceResultService { * @return */ public UUID runExcl(InferenceResultDto.RegReq req) { + // target 도엽 조회 List targetDtoList = mapSheetMngCoreService.getHstMapSheetList(req); + // target 리스트 추출 (null 제거 + 중복 제거) List targetList = targetDtoList.stream() .map(MngListDto::getMapSheetNum) @@ -144,32 +146,46 @@ public class InferenceResultService { .distinct() .toList(); + // compare 도엽번호 리스트 조회 (null 제거 + 중복 제거) List compareList = mapSheetMngCoreService.getMapSheetNumByHst(req.getCompareYyyy()).stream() .filter(Objects::nonNull) .distinct() .toList(); + // compare 기준 Set compareSet = new HashSet<>(compareList); + + // target 기준으로 compare에 존재하는 도엽만 필터링 List 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 targetDtoList = mapSheetMngCoreService.getHstMapSheetList(req); + // target 도엽번호 리스트 추출 List targetList = targetDtoList.stream() .map(MngListDto::getMapSheetNum) @@ -189,27 +207,35 @@ public class InferenceResultService { .distinct() .toList(); + // target 포함 여부 판단 Set targetSet = new HashSet<>(targetList); + // compare 목록 조회 List compareDtoList = new ArrayList<>(mapSheetMngCoreService.getMapSheetNumDtoByHst(req.getCompareYyyy())); + // compare 도엽번호 Set 구성 Set compareSet = compareDtoList.stream() .map(MapSheetFallbackYearDto::getMapSheetNum) .filter(Objects::nonNull) .collect(Collectors.toSet()); + // arget에는 있으나 compare에는 없는 도엽 추출 List remainingTargetList = targetList.stream().filter(s -> !compareSet.contains(s)).toList(); + // fallback년도 도엽 조회 List 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 availableCompareSheets = compareDtoList.stream() .map(MapSheetFallbackYearDto::getMapSheetNum) .filter(Objects::nonNull) .collect(Collectors.toSet()); + // 최종 추론 대상 도엽 + // target 중 compare(fallback)에 존재하는 도엽만 추출 List 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 filteredTargetSet = new HashSet<>(filteredTargetList); + List 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 도엽수 } /**