변화탐지 기획안에 맞게 수정, 학습데이터현황 쿼리 수정

This commit is contained in:
2026-01-19 21:46:31 +09:00
parent 9dcc4dcf98
commit aa6d0fe7b2
7 changed files with 269 additions and 64 deletions

View File

@@ -2,6 +2,8 @@ package com.kamco.cd.kamcoback.changedetection;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
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; import com.kamco.cd.kamcoback.changedetection.service.ChangeDetectionService;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
@@ -10,6 +12,7 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import java.util.List; import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -46,20 +49,36 @@ public class ChangeDetectionApiController {
@Operation(summary = "변화탐지 분류별 건수", description = "변화탐지 분류별 건수") @Operation(summary = "변화탐지 분류별 건수", description = "변화탐지 분류별 건수")
@GetMapping("/class-count") @GetMapping("/class-count")
public ApiResponseDto<List<ChangeDetectionDto.CountDto>> getChangeDetectionClassCount( public ApiResponseDto<List<ChangeDetectionDto.CountDto>> getChangeDetectionClassCount(
@Parameter(description = "변화탐지 년도(차수) /year-list 의 analUid", example = "53") @RequestParam @Parameter(
Long id, description = "변화탐지 년도(차수) /year-list 의 uuid",
@Parameter(description = "탐지된 도엽번호", example = "34602060") @RequestParam String mapSheetNum) { example = "8584e8d4-53b3-4582-bde2-28a81495a626")
return ApiResponseDto.ok(changeDetectionService.getChangeDetectionClassCount(id, mapSheetNum)); @RequestParam
UUID uuid,
@Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
@RequestParam(defaultValue = "MAPSHEET")
DetectSearchType type,
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
@RequestParam(defaultValue = "SCALE_50K")
MapScaleType scale,
@Parameter(description = "탐지된 도엽번호", example = "35905") @RequestParam String mapSheetNum) {
return ApiResponseDto.ok(
changeDetectionService.getChangeDetectionClassCount(type, scale, uuid, mapSheetNum));
} }
@Operation(summary = "변화탐지 COG Url", description = "변화탐지 COG Url") @Operation(summary = "변화탐지 COG Url", description = "변화탐지 COG Url")
@GetMapping("/cog-url") @GetMapping("/cog-url")
public ApiResponseDto<ChangeDetectionDto.CogUrlDto> getChangeDetectionCogUrl( public ApiResponseDto<ChangeDetectionDto.CogUrlDto> getChangeDetectionCogUrl(
@Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
@RequestParam(defaultValue = "MAPSHEET")
DetectSearchType type,
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
@RequestParam(defaultValue = "SCALE_50K")
MapScaleType scale,
@Parameter(description = "이전 년도", example = "2023") @RequestParam Integer beforeYear, @Parameter(description = "이전 년도", example = "2023") @RequestParam Integer beforeYear,
@Parameter(description = "이후 년도", example = "2024") @RequestParam Integer afterYear, @Parameter(description = "이후 년도", example = "2024") @RequestParam Integer afterYear,
@Parameter(description = "도엽번호(5k)", example = "35905086") @RequestParam String mapSheetNum) { @Parameter(description = "도엽번호(5k)", example = "35905086") @RequestParam String mapSheetNum) {
ChangeDetectionDto.CogUrlReq req = ChangeDetectionDto.CogUrlReq req =
new ChangeDetectionDto.CogUrlReq(beforeYear, afterYear, mapSheetNum); new ChangeDetectionDto.CogUrlReq(beforeYear, afterYear, mapSheetNum, type, scale);
return ApiResponseDto.ok(changeDetectionService.getChangeDetectionCogUrl(req)); return ApiResponseDto.ok(changeDetectionService.getChangeDetectionCogUrl(req));
} }
@@ -72,25 +91,54 @@ public class ChangeDetectionApiController {
@Operation(summary = "변화탐지 탐지된 도엽 목록", description = "변화탐지 탐지된 도엽 목록") @Operation(summary = "변화탐지 탐지된 도엽 목록", description = "변화탐지 탐지된 도엽 목록")
@GetMapping("/map-list") @GetMapping("/map-list")
public ApiResponseDto<List<ChangeDetectionDto.MapSheetList>> getChangeDetectionMapSheetList( public ApiResponseDto<List<ChangeDetectionDto.MapSheetList>> getChangeDetectionMapSheetList(
@Parameter(description = "엽목록 그룹id", example = "1") @RequestParam Long analUid) { @Parameter(description = "곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
return ApiResponseDto.ok(changeDetectionService.getChangeDetectionMapSheetList(analUid)); @RequestParam(defaultValue = "MAPSHEET")
DetectSearchType type,
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
@RequestParam(defaultValue = "SCALE_50K")
MapScaleType scale,
@Parameter(
description = "변화탐지 년도(차수) /year-list 의 uuid",
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
@RequestParam
UUID uuid) {
return ApiResponseDto.ok(
changeDetectionService.getChangeDetectionMapSheetList(type, scale, uuid));
} }
@Operation(summary = "변화탐지 결과 Polygon", description = "변화탐지 결과 Polygon") @Operation(summary = "변화탐지 결과 Polygon", description = "변화탐지 결과 Polygon")
@GetMapping("/polygon") @GetMapping("/polygon")
public ApiResponseDto<ChangeDetectionDto.PolygonFeatureList> getChangeDetectionPolygonList( public ApiResponseDto<ChangeDetectionDto.PolygonFeatureList> getChangeDetectionPolygonList(
@Parameter(description = "년도목록 id", example = "53") @RequestParam Long analUid, @Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
@Parameter(description = "도엽번호", example = "35905086") @RequestParam String mapSheetNum) { @RequestParam(defaultValue = "MAPSHEET")
DetectSearchType type,
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
@RequestParam(defaultValue = "SCALE_50K")
MapScaleType scale,
@Parameter(
description = "변화탐지 년도(차수) /year-list 의 uuid",
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
UUID uuid,
@Parameter(description = "도엽번호", example = "34607") @RequestParam String mapSheetNum) {
return ApiResponseDto.ok( return ApiResponseDto.ok(
changeDetectionService.getChangeDetectionPolygonList(analUid, mapSheetNum)); changeDetectionService.getChangeDetectionPolygonList(type, scale, uuid, mapSheetNum));
} }
@Operation(summary = "변화탐지 결과 Point", description = "변화탐지 결과 Point") @Operation(summary = "변화탐지 결과 Point", description = "변화탐지 결과 Point")
@GetMapping("/point") @GetMapping("/point")
public ApiResponseDto<ChangeDetectionDto.PointFeatureList> getChangeDetectionPointList( public ApiResponseDto<ChangeDetectionDto.PointFeatureList> getChangeDetectionPointList(
@Parameter(description = "년도목록 id", example = "53") @RequestParam Long analUid, @Parameter(description = "도곽/일반(MAPSHEET/ADDRESS) 검색 타입", required = true)
@Parameter(description = "도엽번호", example = "35905086") @RequestParam String mapSheetNum) { @RequestParam(defaultValue = "MAPSHEET")
DetectSearchType type,
@Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true)
@RequestParam(defaultValue = "SCALE_50K")
MapScaleType scale,
@Parameter(
description = "변화탐지 년도(차수) /year-list 의 uuid",
example = "8584e8d4-53b3-4582-bde2-28a81495a626")
UUID uuid,
@Parameter(description = "도엽번호", example = "34607") @RequestParam String mapSheetNum) {
return ApiResponseDto.ok( return ApiResponseDto.ok(
changeDetectionService.getChangeDetectionPointList(analUid, mapSheetNum)); changeDetectionService.getChangeDetectionPointList(type, scale, uuid, mapSheetNum));
} }
} }

View File

@@ -1,8 +1,11 @@
package com.kamco.cd.kamcoback.changedetection.dto; package com.kamco.cd.kamcoback.changedetection.dto;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose;
import com.kamco.cd.kamcoback.common.utils.enums.EnumType;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List; import java.util.List;
import java.util.UUID;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -11,6 +14,46 @@ import org.locationtech.jts.geom.Geometry;
public class ChangeDetectionDto { public class ChangeDetectionDto {
@CodeExpose
@Getter
@AllArgsConstructor
public enum DetectSearchType implements EnumType {
MAPSHEET("도곽"),
ADDRESS("주소");
private String desc;
@Override
public String getId() {
return name();
}
@Override
public String getText() {
return desc;
}
}
@CodeExpose
@Getter
@AllArgsConstructor
public enum MapScaleType implements EnumType {
SCALE_5K("1:5000"),
SCALE_50K("1:50000");
private String desc;
@Override
public String getId() {
return name();
}
@Override
public String getText() {
return desc;
}
}
@Schema(name = "TestDto", description = "테스트용") @Schema(name = "TestDto", description = "테스트용")
@Getter @Getter
@Setter @Setter
@@ -46,6 +89,8 @@ public class ChangeDetectionDto {
private Integer beforeYear; private Integer beforeYear;
private Integer afterYear; private Integer afterYear;
private String mapSheetNum; private String mapSheetNum;
private DetectSearchType type;
private MapScaleType scale;
} }
@Schema(name = "CogUrlDto", description = "COG Url 정보") @Schema(name = "CogUrlDto", description = "COG Url 정보")
@@ -79,6 +124,7 @@ public class ChangeDetectionDto {
@AllArgsConstructor @AllArgsConstructor
public static class AnalYearList { public static class AnalYearList {
private UUID uuid;
private Long analUid; private Long analUid;
private String analTitle; private String analTitle;
private Integer beforeYear; private Integer beforeYear;

View File

@@ -2,8 +2,11 @@ package com.kamco.cd.kamcoback.changedetection.service;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
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; import com.kamco.cd.kamcoback.postgres.core.ChangeDetectionCoreService;
import java.util.List; import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -22,8 +25,16 @@ public class ChangeDetectionService {
} }
public List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount( public List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount(
Long id, String mapSheetNum) { DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum) {
return changeDetectionCoreService.getChangeDetectionClassCount(id, mapSheetNum); switch (type) {
case MAPSHEET -> {
return changeDetectionCoreService.getChangeDetectionClassCount(scale, uuid, mapSheetNum);
}
case ADDRESS -> {
return List.of(); // TODO: 일반 주소 검색 로직 확인 후 작업 필요
}
default -> throw new IllegalArgumentException("Unsupported type: " + type);
}
} }
public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) { public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) {
@@ -35,18 +46,47 @@ public class ChangeDetectionService {
} }
public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList( public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
Long analUid, String mapSheetNum) { DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum) {
switch (type) {
return changeDetectionCoreService.getChangeDetectionPolygonList(analUid, mapSheetNum); case MAPSHEET -> {
return changeDetectionCoreService.getChangeDetectionPolygonList(scale, uuid, mapSheetNum);
}
case ADDRESS -> {
return new ChangeDetectionDto.PolygonFeatureList(); // TODO: 일반 주소 검색 로직 확인 후 작업 필요
}
default -> throw new IllegalArgumentException("Unsupported type: " + type);
}
} }
// Geometry 객체 순환 참조 문제로 캐싱 불가 // Geometry 객체 순환 참조 문제로 캐싱 불가
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList( public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
Long analUid, String mapSheetNum) { DetectSearchType type, MapScaleType scale, UUID uuid, String mapSheetNum) {
return changeDetectionCoreService.getChangeDetectionPointList(analUid, mapSheetNum);
switch (type) {
case MAPSHEET -> {
return changeDetectionCoreService.getChangeDetectionPointList(scale, uuid, mapSheetNum);
}
case ADDRESS -> {
return new ChangeDetectionDto.PointFeatureList(); // TODO: 일반 주소 검색 로직 확인 후 작업 필요
}
default -> throw new IllegalArgumentException("Unsupported type: " + type);
}
} }
public List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(Long analUid) { public List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(
return changeDetectionCoreService.getChangeDetectionMapSheetList(analUid); DetectSearchType type, MapScaleType scale, UUID uuid) {
switch (type) {
case MAPSHEET -> {
return switch (scale) {
case SCALE_5K -> changeDetectionCoreService.getChangeDetectionMapSheetList(uuid);
case SCALE_50K -> changeDetectionCoreService.getChangeDetectionMapSheet50kList(uuid);
default -> throw new IllegalArgumentException("Unsupported scale: " + scale);
};
}
case ADDRESS -> {
return List.of(); // TODO: 일반 주소 검색 로직 확인 후 작업 필요
}
default -> throw new IllegalArgumentException("Unsupported type: " + type);
}
} }
} }

View File

@@ -4,10 +4,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
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.enums.DetectionClassification;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity;
import com.kamco.cd.kamcoback.postgres.repository.changedetection.ChangeDetectionRepository; import com.kamco.cd.kamcoback.postgres.repository.changedetection.ChangeDetectionRepository;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
@@ -53,9 +56,9 @@ public class ChangeDetectionCoreService {
} }
public List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount( public List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount(
Long id, String mapSheetNum) { MapScaleType scale, UUID uuid, String mapSheetNum) {
List<ChangeDetectionDto.CountDto> list = List<ChangeDetectionDto.CountDto> list =
changeDetectionRepository.getChangeDetectionClassCount(id, mapSheetNum); changeDetectionRepository.getChangeDetectionClassCount(scale, uuid, mapSheetNum);
return list.stream() return list.stream()
.map( .map(
@@ -77,25 +80,20 @@ public class ChangeDetectionCoreService {
} }
public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList( public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
Long analUid, String mapSheetNum) { MapScaleType scale, UUID uuid, String mapSheetNum) {
return changeDetectionRepository.getChangeDetectionPolygonList(analUid, mapSheetNum); return changeDetectionRepository.getChangeDetectionPolygonList(scale, uuid, mapSheetNum);
} }
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList( public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
Long analUid, String mapSheetNum) { MapScaleType scale, UUID uuid, String mapSheetNum) {
return changeDetectionRepository.getChangeDetectionPointList(analUid, mapSheetNum); return changeDetectionRepository.getChangeDetectionPointList(scale, uuid, mapSheetNum);
} }
public List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(Long analUid) { public List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(UUID uuid) {
List<ChangeDetectionDto.MapSheetList> list = return changeDetectionRepository.getChangeDetectionMapSheetList(uuid);
changeDetectionRepository.getChangeDetectionMapSheetList(analUid); }
return list.stream()
.map( public List<MapSheetList> getChangeDetectionMapSheet50kList(UUID uuid) {
s -> { return changeDetectionRepository.getChangeDetectionMapSheet50kList(uuid);
String name = s.getMapSheetName();
s.setAlias(name + s.getMapSheetNum().substring(5, 8));
return s;
})
.collect(Collectors.toList());
} }
} }

View File

@@ -1,7 +1,10 @@
package com.kamco.cd.kamcoback.postgres.repository.changedetection; package com.kamco.cd.kamcoback.postgres.repository.changedetection;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
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.List;
import java.util.UUID;
public interface ChangeDetectionRepositoryCustom { public interface ChangeDetectionRepositoryCustom {
@@ -9,16 +12,20 @@ public interface ChangeDetectionRepositoryCustom {
List<String> findPolygonJson(); List<String> findPolygonJson();
List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount(Long id, String mapSheetNum); List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount(
MapScaleType scale, UUID uuid, String mapSheetNum);
ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req); ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req);
List<ChangeDetectionDto.AnalYearList> getChangeDetectionYearList(); List<ChangeDetectionDto.AnalYearList> getChangeDetectionYearList();
ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList( ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
Long analUid, String mapSheetNum); MapScaleType scale, UUID uuid, String mapSheetNum);
ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(Long analUid, String mapSheetNum); ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
MapScaleType scale, UUID uuid, String mapSheetNum);
List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(Long analUid); List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(UUID uuid);
List<MapSheetList> getChangeDetectionMapSheet50kList(UUID uuid);
} }

View File

@@ -1,7 +1,7 @@
package com.kamco.cd.kamcoback.postgres.repository.changedetection; package com.kamco.cd.kamcoback.postgres.repository.changedetection;
import static com.kamco.cd.kamcoback.postgres.entity.QDemoLearningAnalysisSceneItemEntity.demoLearningAnalysisSceneItemEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QImageryEntity.imageryEntity; import static com.kamco.cd.kamcoback.postgres.entity.QImageryEntity.imageryEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx50kEntity.mapInkx50kEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceEntity.mapSheetAnalDataInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceEntity.mapSheetAnalDataInferenceEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity;
@@ -12,14 +12,19 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity;
import com.querydsl.core.types.Projections; import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.CaseBuilder;
import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.StringExpression;
import com.querydsl.jpa.JPAExpressions;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
@@ -52,7 +57,7 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
@Override @Override
public List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount( public List<ChangeDetectionDto.CountDto> getChangeDetectionClassCount(
Long id, String mapSheetNum) { MapScaleType scale, UUID uuid, String mapSheetNum) {
return queryFactory return queryFactory
.select( .select(
Projections.constructor( Projections.constructor(
@@ -66,12 +71,44 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
.innerJoin(mapSheetAnalSttcEntity) .innerJoin(mapSheetAnalSttcEntity)
.on(mapSheetAnalSttcEntity.id.dataUid.eq(mapSheetAnalDataInferenceEntity.id)) .on(mapSheetAnalSttcEntity.id.dataUid.eq(mapSheetAnalDataInferenceEntity.id))
.where( .where(
mapSheetAnalInferenceEntity.id.eq(id), mapSheetAnalInferenceEntity.uuid.eq(uuid),
mapSheetAnalSttcEntity.id.mapSheetNum.eq(Long.valueOf(mapSheetNum))) mapScaleTypeSearchExpression(scale, mapSheetNum))
.groupBy(mapSheetAnalSttcEntity.id.classAfterCd) .groupBy(mapSheetAnalSttcEntity.id.classAfterCd)
.fetch(); .fetch();
} }
private BooleanExpression mapScaleTypeSearchExpression(MapScaleType scale, String mapSheetNum) {
if (scale.equals(MapScaleType.SCALE_5K)) {
return mapSheetAnalSttcEntity.id.mapSheetNum.eq(Long.valueOf(mapSheetNum));
} else {
return mapSheetAnalSttcEntity
.id
.mapSheetNum
.stringValue()
.in(
JPAExpressions.select(mapInkx5kEntity.mapidcdNo)
.from(mapInkx5kEntity)
.innerJoin(mapInkx5kEntity.mapInkx50k, mapInkx50kEntity)
.where(mapInkx50kEntity.mapidcdNo.eq(mapSheetNum)));
}
}
private BooleanExpression mapScaleTypeAnalDataSearchExpression(
MapScaleType scale, String mapSheetNum) {
if (scale.equals(MapScaleType.SCALE_5K)) {
return mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum));
} else {
return mapSheetAnalDataInferenceGeomEntity
.mapSheetNum
.stringValue()
.in(
JPAExpressions.select(mapInkx5kEntity.mapidcdNo)
.from(mapInkx5kEntity)
.innerJoin(mapInkx5kEntity.mapInkx50k, mapInkx50kEntity)
.where(mapInkx50kEntity.mapidcdNo.eq(mapSheetNum)));
}
}
@Override @Override
public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) { public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) {
ChangeDetectionDto.CogUrlData data = ChangeDetectionDto.CogUrlData data =
@@ -114,6 +151,7 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
.select( .select(
Projections.constructor( Projections.constructor(
ChangeDetectionDto.AnalYearList.class, ChangeDetectionDto.AnalYearList.class,
mapSheetAnalInferenceEntity.uuid,
mapSheetAnalInferenceEntity.id, mapSheetAnalInferenceEntity.id,
mapSheetAnalInferenceEntity.analTitle, mapSheetAnalInferenceEntity.analTitle,
mapSheetAnalInferenceEntity.compareYyyy.as("beforeYear"), mapSheetAnalInferenceEntity.compareYyyy.as("beforeYear"),
@@ -126,7 +164,7 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
@Override @Override
public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList( public ChangeDetectionDto.PolygonFeatureList getChangeDetectionPolygonList(
Long analUid, String mapSheetNum) { MapScaleType scale, UUID uuid, String mapSheetNum) {
List<ChangeDetectionDto.PolygonQueryData> list = List<ChangeDetectionDto.PolygonQueryData> list =
queryFactory queryFactory
@@ -151,8 +189,8 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
.innerJoin(mapSheetAnalInferenceEntity) .innerJoin(mapSheetAnalInferenceEntity)
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid)) .on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
.where( .where(
mapSheetAnalInferenceEntity.id.eq(analUid), mapSheetAnalInferenceEntity.uuid.eq(uuid),
mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum))) mapScaleTypeAnalDataSearchExpression(scale, mapSheetNum))
.fetch(); .fetch();
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
@@ -193,7 +231,7 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
@Override @Override
public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList( public ChangeDetectionDto.PointFeatureList getChangeDetectionPointList(
Long analUid, String mapSheetNum) { MapScaleType scale, UUID uuid, String mapSheetNum) {
List<ChangeDetectionDto.PointQueryData> list = List<ChangeDetectionDto.PointQueryData> list =
queryFactory queryFactory
.select( .select(
@@ -213,8 +251,8 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
.innerJoin(mapSheetAnalInferenceEntity) .innerJoin(mapSheetAnalInferenceEntity)
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid)) .on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
.where( .where(
mapSheetAnalInferenceEntity.id.eq(analUid), mapSheetAnalInferenceEntity.uuid.eq(uuid),
mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq(Long.valueOf(mapSheetNum))) mapScaleTypeAnalDataSearchExpression(scale, mapSheetNum))
.fetch(); .fetch();
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
@@ -239,20 +277,43 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
} }
@Override @Override
public List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(Long analUid) { public List<ChangeDetectionDto.MapSheetList> getChangeDetectionMapSheetList(UUID uuid) {
return queryFactory return queryFactory
.select( .select(
Projections.constructor( Projections.constructor(
ChangeDetectionDto.MapSheetList.class, ChangeDetectionDto.MapSheetList.class,
mapInkx5kEntity.mapidcdNo, mapInkx5kEntity.mapidcdNo,
mapInkx5kEntity.mapidNm, mapInkx5kEntity.mapidNm,
mapInkx5kEntity.mapidNm // alias 앞단 core에서 Expressions.stringTemplate(
)) "concat({0}, ' ', {1})", mapInkx5kEntity.mapidNm, mapInkx5kEntity.mapidcdNo)))
.from(demoLearningAnalysisSceneItemEntity) .from(mapSheetAnalInferenceEntity)
.innerJoin(mapSheetAnalDataInferenceEntity)
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
.innerJoin(mapInkx5kEntity) .innerJoin(mapInkx5kEntity)
.on(demoLearningAnalysisSceneItemEntity.fid.eq(mapInkx5kEntity.fid.longValue())) .on(mapSheetAnalDataInferenceEntity.mapSheetNum.stringValue().eq(mapInkx5kEntity.mapidcdNo))
.where(demoLearningAnalysisSceneItemEntity.groupId.eq(analUid)) .where(mapSheetAnalInferenceEntity.uuid.eq(uuid))
.orderBy(mapInkx5kEntity.mapidNm.asc(), mapInkx5kEntity.mapidcdNo.asc()) .orderBy(mapInkx5kEntity.mapidcdNo.asc())
.fetch();
}
@Override
public List<MapSheetList> getChangeDetectionMapSheet50kList(UUID uuid) {
return queryFactory
.select(
Projections.constructor(
ChangeDetectionDto.MapSheetList.class,
mapInkx50kEntity.mapidcdNo,
mapInkx50kEntity.mapidNm,
Expressions.stringTemplate(
"concat({0}, ' ', {1})", mapInkx50kEntity.mapidNm, mapInkx50kEntity.mapidcdNo)))
.from(mapSheetAnalInferenceEntity)
.innerJoin(mapSheetAnalDataInferenceEntity)
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
.innerJoin(mapInkx5kEntity)
.on(mapSheetAnalDataInferenceEntity.mapSheetNum.stringValue().eq(mapInkx5kEntity.mapidcdNo))
.innerJoin(mapInkx5kEntity.mapInkx50k, mapInkx50kEntity)
.where(mapSheetAnalInferenceEntity.uuid.eq(uuid))
.orderBy(mapInkx5kEntity.mapidcdNo.asc())
.fetch(); .fetch();
} }

View File

@@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.postgres.repository.label;
import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QLabelingInspectorEntity.labelingInspectorEntity; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingInspectorEntity.labelingInspectorEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QLabelingLabelerEntity.labelingLabelerEntity; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingLabelerEntity.labelingLabelerEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceEntity.mapSheetAnalDataInferenceEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity;
@@ -537,11 +538,15 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
labelingTargetCount = labelingTargetCount =
queryFactory queryFactory
.select(mapSheetAnalDataInferenceGeomEntity.geoUid.count()) .select(mapSheetAnalDataInferenceGeomEntity.geoUid.count())
.from(mapSheetAnalDataInferenceGeomEntity) .from(mapSheetAnalInferenceEntity)
.innerJoin(mapSheetAnalDataInferenceEntity)
.on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid))
.innerJoin(mapSheetAnalDataInferenceGeomEntity)
.on(
mapSheetAnalDataInferenceEntity.id.eq(
mapSheetAnalDataInferenceGeomEntity.dataUid))
.where( .where(
mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(analEntity.getCompareYyyy()), mapSheetAnalInferenceEntity.uuid.eq(targetUuid),
mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(analEntity.getTargetYyyy()),
mapSheetAnalDataInferenceGeomEntity.stage.eq(analEntity.getStage()),
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L), mapSheetAnalDataInferenceGeomEntity.pnu.gt(0L),
mapSheetAnalDataInferenceGeomEntity.passYn.isFalse()) mapSheetAnalDataInferenceGeomEntity.passYn.isFalse())
.fetchOne(); .fetchOne();