feat/infer_dev_260211 #86

Merged
teddy merged 2 commits from feat/infer_dev_260211 into develop 2026-02-23 19:59:38 +09:00
6 changed files with 85 additions and 0 deletions

View File

@@ -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<UUID> 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<String> 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));
}
}

View File

@@ -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<String> cdObjectIds;
private String chnDtctId;
private String pnu;
}
}

View File

@@ -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);
}
}

View File

@@ -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<MapSheetList> 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));
}
}

View File

@@ -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<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(UUID uuid);
List<MapSheetList> getChangeDetectionMapSheet50kList(UUID uuid);
Optional<UUID> getChangeDetectionUuid(ChangeDetectionMapDto req);
}

View File

@@ -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<UUID> 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());
}
}