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