From 70e01a2044000518af490d161e2801ac10c16528 Mon Sep 17 00:00:00 2001 From: teddy Date: Mon, 23 Feb 2026 19:59:15 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B3=80=ED=99=94=EC=A7=80=EB=8F=84=20uuid=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChangeDetectionApiController.java | 28 +++++++++++++++++++ .../dto/ChangeDetectionDto.java | 14 ++++++++++ .../service/ChangeDetectionService.java | 5 ++++ .../core/ChangeDetectionCoreService.java | 9 ++++++ .../ChangeDetectionRepositoryCustom.java | 4 +++ .../ChangeDetectionRepositoryImpl.java | 25 +++++++++++++++++ 6 files changed, 85 insertions(+) diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java index e674655f..b81441b1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java @@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.changedetection; import com.fasterxml.jackson.databind.JsonNode; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; +import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.ChangeDetectionMapDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.DetectSearchType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType; import com.kamco.cd.kamcoback.changedetection.service.ChangeDetectionService; @@ -146,4 +147,31 @@ public class ChangeDetectionApiController { return ApiResponseDto.ok( changeDetectionService.getChangeDetectionPointList(type, scale, uuid, mapSheetNum)); } + + @Operation(summary = "변화지도 uuid 조회", description = "변화지도 uuid 조회 API") + @GetMapping("/map") + public ApiResponseDto getChangeDetection( + @Parameter(description = "기준년도", required = true) @RequestParam(defaultValue = "2022") + Integer stddYear, + @Parameter(description = "비교년도", required = true) @RequestParam(defaultValue = "2023") + Integer cprsnYear, + @Parameter(description = "변화탐지 객체 id 32자리") @RequestParam(defaultValue = "", required = false) + String cdObjectId, + @Parameter(description = "변화탐지 객체 ids 32자리") + @RequestParam(defaultValue = "", required = false) + List cdObjectIds, + @Parameter(description = "변화탐지 회차별 id 32자리") + @RequestParam(defaultValue = "", required = false) + String chnDtctId, + @Parameter(description = "pnu") @RequestParam(defaultValue = "", required = false) + String pnu) { + ChangeDetectionMapDto req = new ChangeDetectionMapDto(); + req.setCompareYyyy(stddYear); + req.setTargetYyyy(cprsnYear); + req.setCdObjectId(cdObjectId); + req.setCdObjectIds(cdObjectIds); + req.setChnDtctId(chnDtctId); + req.setPnu(pnu); + return ApiResponseDto.ok(changeDetectionService.getChangeDetectionUuid(req)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java index a82113bf..8295d811 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java @@ -251,4 +251,18 @@ public class ChangeDetectionDto { private String afterClass; // 비교 분류 private Double cdProb; // 탐지 정확도 } + + @Schema(name = "ChangeDetectionMapDto", description = "변화지도 팝업 검색조건") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class ChangeDetectionMapDto { + private Integer compareYyyy; + private Integer targetYyyy; + private String cdObjectId; + private List cdObjectIds; + private String chnDtctId; + private String pnu; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java index 444e2d4d..92ef7162 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/service/ChangeDetectionService.java @@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.changedetection.service; import com.fasterxml.jackson.databind.JsonNode; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; +import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.ChangeDetectionMapDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.DetectSearchType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType; import com.kamco.cd.kamcoback.postgres.core.ChangeDetectionCoreService; @@ -89,4 +90,8 @@ public class ChangeDetectionService { default -> throw new IllegalArgumentException("Unsupported type: " + type); } } + + public UUID getChangeDetectionUuid(ChangeDetectionMapDto req) { + return changeDetectionCoreService.getChangeDetectionUuid(req); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java index d9612056..e4732ea1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/ChangeDetectionCoreService.java @@ -4,9 +4,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; +import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.ChangeDetectionMapDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList; import com.kamco.cd.kamcoback.common.enums.DetectionClassification; +import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; import com.kamco.cd.kamcoback.postgres.repository.changedetection.ChangeDetectionRepository; import java.util.List; @@ -15,6 +17,7 @@ import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @@ -96,4 +99,10 @@ public class ChangeDetectionCoreService { public List getChangeDetectionMapSheet50kList(UUID uuid) { return changeDetectionRepository.getChangeDetectionMapSheet50kList(uuid); } + + public UUID getChangeDetectionUuid(ChangeDetectionMapDto req) { + return changeDetectionRepository + .getChangeDetectionUuid(req) + .orElseThrow(() -> new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryCustom.java index 3edf367c..a36152b4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryCustom.java @@ -1,9 +1,11 @@ package com.kamco.cd.kamcoback.postgres.repository.changedetection; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; +import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.ChangeDetectionMapDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList; import java.util.List; +import java.util.Optional; import java.util.UUID; public interface ChangeDetectionRepositoryCustom { @@ -28,4 +30,6 @@ public interface ChangeDetectionRepositoryCustom { List getChangeDetectionMapSheetList(UUID uuid); List getChangeDetectionMapSheet50kList(UUID uuid); + + Optional getChangeDetectionUuid(ChangeDetectionMapDto req); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java index 8ecec7a0..5decdebd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java @@ -13,6 +13,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; +import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.ChangeDetectionMapDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.DetectSearchType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList; @@ -21,6 +22,7 @@ import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntit import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceEntity; import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity; import com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity; +import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.CaseBuilder; @@ -30,10 +32,13 @@ import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; +import org.springframework.stereotype.Repository; +@Repository public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport implements ChangeDetectionRepositoryCustom { @@ -371,4 +376,24 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) .otherwise(""); } + + @Override + public Optional getChangeDetectionUuid(ChangeDetectionMapDto req) { + BooleanBuilder builder = new BooleanBuilder(); + builder.and(mapSheetAnalInferenceEntity.stage.isNotNull()); + builder.and(mapSheetAnalInferenceEntity.compareYyyy.eq(req.getCompareYyyy())); + builder.and(mapSheetAnalInferenceEntity.targetYyyy.eq(req.getTargetYyyy())); + + return Optional.ofNullable( + queryFactory + .select(mapSheetAnalInferenceEntity.uuid) + .from(mapSheetAnalInferenceEntity) + .innerJoin(mapSheetAnalDataInferenceEntity) + .on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid)) + .where(builder) + .groupBy(mapSheetAnalInferenceEntity.uuid, mapSheetAnalInferenceEntity.stage) + .orderBy(mapSheetAnalInferenceEntity.stage.desc()) + .limit(1) + .fetchOne()); + } }