추론 run 수정
This commit is contained in:
@@ -7,6 +7,7 @@ import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter.ImageFeature;
|
||||
import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter.Scene;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.DetectOption;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetFallbackYearDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListCompareDto;
|
||||
@@ -24,6 +25,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -31,6 +33,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@@ -309,6 +312,95 @@ public class MapSheetMngCoreService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 년도별로 추론 실행에 필요한 geojson 파일 생성
|
||||
*
|
||||
* @param yearDtos
|
||||
* @param yyyy
|
||||
* @param mapSheetScope
|
||||
* @param detectOption
|
||||
* @return
|
||||
*/
|
||||
public Scene getSceneInference(
|
||||
List<MapSheetFallbackYearDto> yearDtos,
|
||||
String yyyy,
|
||||
String mapSheetScope,
|
||||
String detectOption) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
boolean isAll = MapSheetScope.ALL.getId().equals(mapSheetScope);
|
||||
|
||||
String optionSuffix = "";
|
||||
if (DetectOption.EXCL.getId().equals(detectOption)) {
|
||||
optionSuffix = "_EXCL";
|
||||
} else if (DetectOption.PREV.getId().equals(detectOption)) {
|
||||
optionSuffix = "_PREV";
|
||||
}
|
||||
|
||||
// 1) 경로/파일명 결정
|
||||
String targetDir =
|
||||
"local".equals(activeEnv) ? System.getProperty("user.home") + "/geojson" : inferenceDir;
|
||||
|
||||
String filename =
|
||||
isAll
|
||||
? String.format("%s_%s_ALL%s.geojson", yyyy, activeEnv, optionSuffix)
|
||||
: String.format("%s_%s%s.geojson", yyyy, activeEnv, optionSuffix);
|
||||
|
||||
Path outputPath = Paths.get(targetDir, filename);
|
||||
|
||||
// 3) 데이터 조회
|
||||
Map<Integer, List<MapSheetFallbackYearDto>> groupedByYear =
|
||||
yearDtos.stream().collect(Collectors.groupingBy(MapSheetFallbackYearDto::getMngYyyy));
|
||||
|
||||
List<ImageFeature> sceneInference = new ArrayList<>();
|
||||
|
||||
// 년도별로 루프 돌리기
|
||||
for (Map.Entry<Integer, List<MapSheetFallbackYearDto>> entry : groupedByYear.entrySet()) {
|
||||
|
||||
Integer compareYear = entry.getKey();
|
||||
List<MapSheetFallbackYearDto> listByYear = entry.getValue();
|
||||
|
||||
// 도엽번호만 추출
|
||||
List<String> sheetNums =
|
||||
listByYear.stream().map(MapSheetFallbackYearDto::getMapSheetNum).toList();
|
||||
|
||||
List<ImageFeature> tempSceneInference =
|
||||
mapSheetMngRepository.getSceneInference(compareYear.toString(), sheetNums);
|
||||
tempSceneInference.addAll(sceneInference);
|
||||
}
|
||||
|
||||
if (sceneInference == null || sceneInference.isEmpty()) {
|
||||
log.warn("NOT_FOUND_TARGET_YEAR: yyyy={}, isAll={}, scenesSize={}", yyyy, isAll, 0);
|
||||
throw new CustomApiException("NOT_FOUND_TARGET_YEAR", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
// 4) 파일 생성
|
||||
try {
|
||||
log.info("create Directories outputPath: {}", outputPath);
|
||||
log.info(
|
||||
"activeEnv={}, inferenceDir={}, targetDir={}, filename={}",
|
||||
activeEnv,
|
||||
inferenceDir,
|
||||
targetDir,
|
||||
filename);
|
||||
log.info("outputPath={}, parent={}", outputPath.toAbsolutePath(), outputPath.getParent());
|
||||
Files.createDirectories(outputPath.getParent());
|
||||
|
||||
new GeoJsonFileWriter()
|
||||
.exportToFile(sceneInference, "scene_inference_" + yyyy, 5186, outputPath.toString());
|
||||
log.info("GeoJsonFileWriter: {}", "scene_inference_" + yyyy);
|
||||
Scene scene = new Scene();
|
||||
scene.setFeatures(sceneInference);
|
||||
scene.setFilePath(outputPath.toString());
|
||||
|
||||
return scene;
|
||||
|
||||
} catch (IOException e) {
|
||||
log.error(
|
||||
"FAIL_CREATE_MAP_SHEET_FILE: yyyy={}, isAll={}, path={}", yyyy, isAll, outputPath, e);
|
||||
throw new CustomApiException("INTERNAL_SERVER_ERROR", HttpStatus.INTERNAL_SERVER_ERROR, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 변화탐지 실행 가능 기준 년도 조회
|
||||
*
|
||||
@@ -343,8 +435,24 @@ public class MapSheetMngCoreService {
|
||||
return mapSheetMngYearRepository.findByHstMapSheetCompareList(mngYyyy, mapId);
|
||||
}
|
||||
|
||||
public List<String> getMapSheetMngHst(Integer year) {
|
||||
public List<String> getMapSheetNumByHst(Integer year) {
|
||||
List<MapSheetMngHstEntity> entity = mapSheetMngRepository.getMapSheetMngHst(year);
|
||||
return entity.stream().map(MapSheetMngHstEntity::getMapSheetNum).toList();
|
||||
}
|
||||
|
||||
public List<MapSheetFallbackYearDto> getMapSheetNumDtoByHst(Integer year) {
|
||||
List<MapSheetMngHstEntity> entity = mapSheetMngRepository.getMapSheetMngHst(year);
|
||||
return entity.stream()
|
||||
.map(
|
||||
e ->
|
||||
new MapSheetFallbackYearDto(
|
||||
e.getMapSheetNum(), e.getMngYyyy() // 조회 기준 연도
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
public List<MapSheetFallbackYearDto> findFallbackCompareYearByMapSheets(
|
||||
Integer year, List<String> mapIds) {
|
||||
return mapSheetMngRepository.findFallbackCompareYearByMapSheets(year, mapIds);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.postgres.repository.mapsheet;
|
||||
|
||||
import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter.ImageFeature;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetFallbackYearDto;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.AddReq;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListDto;
|
||||
@@ -82,4 +83,7 @@ public interface MapSheetMngRepositoryCustom {
|
||||
void insertMapSheetMngTile(@Valid AddReq addReq);
|
||||
|
||||
List<MapSheetMngHstEntity> getMapSheetMngHst(Integer year);
|
||||
|
||||
List<MapSheetFallbackYearDto> findFallbackCompareYearByMapSheets(
|
||||
Integer year, List<String> mapIds);
|
||||
}
|
||||
|
||||
@@ -5,12 +5,14 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngEntity.mapSheet
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngFileEntity.mapSheetMngFileEntity;
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngHstEntity.mapSheetMngHstEntity;
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngTileEntity.mapSheetMngTileEntity;
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngYearYnEntity.mapSheetMngYearYnEntity;
|
||||
import static com.kamco.cd.kamcoback.postgres.entity.QYearEntity.yearEntity;
|
||||
import static com.querydsl.core.types.dsl.Expressions.nullExpression;
|
||||
|
||||
import com.kamco.cd.kamcoback.common.enums.CommonUseStatus;
|
||||
import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter.ImageFeature;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetFallbackYearDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
|
||||
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.AddReq;
|
||||
@@ -1119,4 +1121,24 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport
|
||||
.and(mapSheetMngFileEntity.fileExt.eq("tif")))
|
||||
.fetch();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MapSheetFallbackYearDto> findFallbackCompareYearByMapSheets(
|
||||
Integer year, List<String> mapIds) {
|
||||
BooleanBuilder builder = new BooleanBuilder();
|
||||
builder.and(mapSheetMngYearYnEntity.id.mapSheetNum.in(mapIds));
|
||||
builder.and(mapSheetMngYearYnEntity.id.mngYyyy.lt(year));
|
||||
builder.and(mapSheetMngYearYnEntity.yn.eq("Y"));
|
||||
|
||||
return queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
MapSheetFallbackYearDto.class,
|
||||
mapSheetMngYearYnEntity.id.mapSheetNum,
|
||||
mapSheetMngYearYnEntity.id.mngYyyy.max()))
|
||||
.from(mapSheetMngYearYnEntity)
|
||||
.where(builder)
|
||||
.groupBy(mapSheetMngYearYnEntity.id.mapSheetNum)
|
||||
.fetch();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user