From b918ad14c4fb64a32d498b8afc75b62c075290c9 Mon Sep 17 00:00:00 2001 From: DanielLee <198891672+sanghyeonhd@users.noreply.github.com> Date: Wed, 14 Jan 2026 09:42:08 +0900 Subject: [PATCH 01/11] Rviewer add --- .../cd/kamcoback/config/SecurityConfig.java | 3 +- .../core/TrainingDataLabelCoreService.java | 10 + .../core/TrainingDataReviewCoreService.java | 92 + .../TrainingDataLabelRepositoryCustom.java | 6 + .../TrainingDataLabelRepositoryImpl.java | 168 +- .../TrainingDataReviewRepository.java | 7 + .../TrainingDataReviewRepositoryCustom.java | 40 + .../TrainingDataReviewRepositoryImpl.java | 842 ++ .../TrainingDataLabelApiController.java | 159 + .../TrainingDataReviewApiController.java | 343 + .../dto/TrainingDataLabelDto.java | 134 +- .../dto/TrainingDataReviewDto.java | 533 + .../service/TrainingDataLabelService.java | 27 + .../service/TrainingDataReviewService.java | 119 + src/main/resources/application-local.yml | 2 +- .../migration/dump-kamco_cds-202601132249.sql | 10540 ++++++++++++++++ 16 files changed, 13017 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewCoreService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepository.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryCustom.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataReviewDto.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataReviewService.java create mode 100644 src/main/resources/db/migration/dump-kamco_cds-202601132249.sql diff --git a/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java b/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java index fb0de652..591d0efa 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/SecurityConfig.java @@ -90,7 +90,8 @@ public class SecurityConfig { "/api/user/**", "/api/my/menus", "/api/common-code/**", - "/api/training-data/label/**") + "/api/training-data/label/**", + "/api/training-data/review/**") .authenticated() .anyRequest() .access(menuAuthorizationManager) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelCoreService.java index c3e32aa0..d1904e6f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelCoreService.java @@ -1,6 +1,7 @@ package com.kamco.cd.kamcoback.postgres.core; import com.kamco.cd.kamcoback.postgres.repository.trainingdata.TrainingDataLabelRepository; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.GeoFeatureRequest.Properties; @@ -79,4 +80,13 @@ public class TrainingDataLabelCoreService { public DefaultPaging getDefaultPagingNumber(String userId, Integer size, String assignmentUid) { return trainingDataLabelRepository.getDefaultPagingNumber(userId, size, assignmentUid); } + + public void saveNewPolygon(TrainingDataLabelDto.NewPolygonRequest request) { + trainingDataLabelRepository.saveNewPolygon(request); + } + + public TrainingDataLabelDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear) { + return trainingDataLabelRepository.getCogImageUrl(mapSheetNum, beforeYear, afterYear); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewCoreService.java new file mode 100644 index 00000000..d6fe650b --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewCoreService.java @@ -0,0 +1,92 @@ +package com.kamco.cd.kamcoback.postgres.core; + +import com.kamco.cd.kamcoback.postgres.repository.trainingdata.TrainingDataReviewRepository; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.GeoFeatureRequest.Properties; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewGeometryInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewListDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.SummaryRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.searchReq; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.locationtech.jts.geom.Geometry; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TrainingDataReviewCoreService { + + private final TrainingDataReviewRepository trainingDataReviewRepository; + + public Page findReviewAssignedList(searchReq searchReq, String userId) { + return trainingDataReviewRepository.findReviewAssignedList(searchReq, userId); + } + + public ReviewGeometryInfo findReviewAssignedGeom(String operatorUid) { + return trainingDataReviewRepository.findReviewAssignedGeom(operatorUid); + } + + public Long findReviewOperatorGeoUid(String operatorUid) { + return trainingDataReviewRepository.findReviewOperatorGeoUid(operatorUid); + } + + public void updateReviewStateOperator(String operatorUid, String status, String memo) { + trainingDataReviewRepository.updateReviewStateOperator(operatorUid, status, memo); + } + + public void updateReviewExceptState(Long inferenceGeomUid, String status) { + trainingDataReviewRepository.updateReviewExceptState(inferenceGeomUid, status); + } + + public void updateReviewPolygonClass( + Long inferenceGeomUid, Geometry geometry, Properties properties, String status) { + trainingDataReviewRepository.updateReviewPolygonClass( + inferenceGeomUid, geometry, properties, status); + } + + /** + * 검수자별 작업 통계 조회 + * + * @param userId 검수자 사번 + * @return 전체/미작업/Today 건수 + */ + public SummaryRes getSummary(String userId) { + try { + System.out.println("[CoreService] getSummary called with userId: " + userId); + SummaryRes result = trainingDataReviewRepository.getSummary(userId); + System.out.println("[CoreService] getSummary result: " + result); + return result; + } catch (Exception e) { + System.err.println("[CoreService] getSummary ERROR: " + e.getMessage()); + e.printStackTrace(); + // 예외 발생 시에도 빈 통계 반환 + return SummaryRes.builder().totalCnt(0L).undoneCnt(0L).todayCnt(0L).build(); + } + } + + /** + * 검수 작업 상세 정보 조회 + * + * @param operatorUid 검수 작업 ID + * @return 변화탐지정보 + 실태조사결과정보 + */ + public DetailRes getDetail(UUID operatorUid) { + return trainingDataReviewRepository.getDetail(operatorUid); + } + + public DefaultPaging getDefaultPagingNumber(String userId, Integer size, String operatorUid) { + return trainingDataReviewRepository.getDefaultPagingNumber(userId, size, operatorUid); + } + + public void saveNewPolygon(TrainingDataReviewDto.NewPolygonRequest request) { + trainingDataReviewRepository.saveNewPolygon(request); + } + + public TrainingDataReviewDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear) { + return trainingDataReviewRepository.getCogImageUrl(mapSheetNum, beforeYear, afterYear); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryCustom.java index e215afdd..3c37c4f8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryCustom.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.postgres.repository.trainingdata; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.GeoFeatureRequest.Properties; @@ -31,4 +32,9 @@ public interface TrainingDataLabelRepositoryCustom { DetailRes getDetail(UUID assignmentUid); DefaultPaging getDefaultPagingNumber(String userId, Integer size, String assignmentUid); + + void saveNewPolygon(TrainingDataLabelDto.NewPolygonRequest request); + + TrainingDataLabelDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java index 8eccbfcd..daf56651 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.ChangeDetectionInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.ClassificationInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; @@ -519,8 +520,8 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport } } - // 7. 라벨링 저장한 Geometry를 GeoJSON으로 변환 - LearnDataGeometry learnData = + // 7. 라벨링 저장한 Geometry들을 GeoJSON으로 변환 (여러 개 가능) + List learnDataList = queryFactory .select( Projections.constructor( @@ -536,7 +537,7 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport .where( mapSheetLearnDataGeomEntity.geoUid.eq( mapSheetAnalDataInferenceGeomEntityEntity.getGeoUid())) - .fetchOne(); + .fetch(); // fetchOne() -> fetch()로 변경 return DetailRes.builder() .assignmentUid(assignmentUid) @@ -546,7 +547,7 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport .beforeCogUrl(beforeCogUrl) .afterCogUrl(afterCogUrl) .mapBox(mapBbox) - .learnGeometry(learnData) + .learnGeometries(learnDataList) // learnGeometry -> learnGeometries .build(); } catch (Exception e) { @@ -624,6 +625,165 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport return DefaultPaging.builder().page(page).assignmentUid(firstAssignedUid).build(); } + @Override + public void saveNewPolygon(TrainingDataLabelDto.NewPolygonRequest request) { + try { + if (request.getFeatures() == null || request.getFeatures().isEmpty()) { + throw new RuntimeException("No polygons to save"); + } + + System.out.println( + "Saving " + + request.getFeatures().size() + + " new polygon(s) for mapSheetNum: " + + request.getMapSheetNum()); + + int savedCount = 0; + for (TrainingDataLabelDto.NewPolygonRequest.PolygonFeature feature : request.getFeatures()) { + try { + // 1. map_sheet_anal_data_inference_geom 테이블에 새 polygon 삽입 + queryFactory + .insert(mapSheetAnalDataInferenceGeomEntity) + .columns( + mapSheetAnalDataInferenceGeomEntity.geom, + mapSheetAnalDataInferenceGeomEntity.compareYyyy, + mapSheetAnalDataInferenceGeomEntity.targetYyyy, + mapSheetAnalDataInferenceGeomEntity.classBeforeCd, + mapSheetAnalDataInferenceGeomEntity.classAfterCd, + mapSheetAnalDataInferenceGeomEntity.createdDttm, + mapSheetAnalDataInferenceGeomEntity.updatedDttm, + mapSheetAnalDataInferenceGeomEntity.labelState) + .values( + feature.getGeometry(), + request.getCompareYyyy(), + request.getTargetYyyy(), + feature.getProperties().getBeforeClass().toLowerCase(), + feature.getProperties().getAfterClass().toLowerCase(), + ZonedDateTime.now(), + ZonedDateTime.now(), + "DONE") + .execute(); + + // 2. 생성된 geoUid 조회 + Long geoUid = + queryFactory + .select(mapSheetAnalDataInferenceGeomEntity.geoUid) + .from(mapSheetAnalDataInferenceGeomEntity) + .where( + mapSheetAnalDataInferenceGeomEntity.geom.eq(feature.getGeometry()), + mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(request.getCompareYyyy()), + mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(request.getTargetYyyy())) + .orderBy(mapSheetAnalDataInferenceGeomEntity.geoUid.desc()) + .fetchFirst(); + + if (geoUid == null) { + System.err.println("Failed to get geo_uid for polygon #" + (savedCount + 1)); + continue; + } + + // 3. learn_data_geom 테이블에도 삽입 + queryFactory + .insert(mapSheetLearnDataGeomEntity) + .columns( + mapSheetLearnDataGeomEntity.geoUid, + mapSheetLearnDataGeomEntity.afterYyyy, + mapSheetLearnDataGeomEntity.beforeYyyy, + mapSheetLearnDataGeomEntity.classAfterCd, + mapSheetLearnDataGeomEntity.classBeforeCd, + mapSheetLearnDataGeomEntity.geom, + mapSheetLearnDataGeomEntity.createdDate, + mapSheetLearnDataGeomEntity.modifiedDate) + .values( + geoUid, + request.getTargetYyyy(), + request.getCompareYyyy(), + feature.getProperties().getAfterClass().toLowerCase(), + feature.getProperties().getBeforeClass().toLowerCase(), + feature.getGeometry(), + ZonedDateTime.now(), + ZonedDateTime.now()) + .execute(); + + savedCount++; + System.out.println( + "Successfully saved polygon #" + savedCount + " with geo_uid: " + geoUid); + + } catch (Exception e) { + System.err.println("Error saving polygon #" + (savedCount + 1) + ": " + e.getMessage()); + // 개별 polygon 저장 실패해도 계속 진행 + } + } + + if (savedCount == 0) { + throw new RuntimeException("Failed to save any polygons"); + } + + System.out.println( + "Successfully saved " + savedCount + "/" + request.getFeatures().size() + " polygon(s)"); + + } catch (Exception e) { + System.err.println("saveNewPolygon Error: " + e.getMessage()); + e.printStackTrace(); + throw new RuntimeException("Failed to save new polygons", e); + } + } + + @Override + public TrainingDataLabelDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear) { + try { + // beforeYear COG URL 조회 + String beforeCogUrl = + queryFactory + .select( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .from(imageryEntity) + .where(imageryEntity.scene5k.eq(mapSheetNum), imageryEntity.year.eq(beforeYear)) + .fetchFirst(); + + // afterYear COG URL 조회 + String afterCogUrl = + queryFactory + .select( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .from(imageryEntity) + .where(imageryEntity.scene5k.eq(mapSheetNum), imageryEntity.year.eq(afterYear)) + .fetchFirst(); + + if (beforeCogUrl == null && afterCogUrl == null) { + throw new RuntimeException( + "COG images not found for mapSheetNum: " + + mapSheetNum + + ", years: " + + beforeYear + + ", " + + afterYear); + } + + return TrainingDataLabelDto.CogImageResponse.builder() + .beforeCogUrl(beforeCogUrl != null ? beforeCogUrl : "") + .afterCogUrl(afterCogUrl != null ? afterCogUrl : "") + .beforeYear(beforeYear) + .afterYear(afterYear) + .mapSheetNum(mapSheetNum) + .build(); + + } catch (Exception e) { + System.err.println("getCogImageUrl Error: " + e.getMessage()); + e.printStackTrace(); + throw new RuntimeException( + "Failed to get COG image URLs for mapSheetNum: " + + mapSheetNum + + ", years: " + + beforeYear + + ", " + + afterYear, + e); + } + } + private StringExpression makeCogUrl(NumberPath year) { return new CaseBuilder() .when(imageryEntity.year.eq(year)) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepository.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepository.java new file mode 100644 index 00000000..64f4df63 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepository.java @@ -0,0 +1,7 @@ +package com.kamco.cd.kamcoback.postgres.repository.trainingdata; + +import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TrainingDataReviewRepository + extends JpaRepository, TrainingDataReviewRepositoryCustom {} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryCustom.java new file mode 100644 index 00000000..741035f5 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryCustom.java @@ -0,0 +1,40 @@ +package com.kamco.cd.kamcoback.postgres.repository.trainingdata; + +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.GeoFeatureRequest.Properties; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewGeometryInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewListDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.SummaryRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.searchReq; +import java.util.UUID; +import org.locationtech.jts.geom.Geometry; +import org.springframework.data.domain.Page; + +public interface TrainingDataReviewRepositoryCustom { + + Page findReviewAssignedList(searchReq searchReq, String userId); + + ReviewGeometryInfo findReviewAssignedGeom(String operatorUid); + + Long findReviewOperatorGeoUid(String operatorUid); + + void updateReviewStateOperator(String operatorUid, String status, String memo); + + void updateReviewExceptState(Long inferenceGeomUid, String status); + + void updateReviewPolygonClass( + Long inferenceGeomUid, Geometry geometry, Properties properties, String status); + + SummaryRes getSummary(String userId); + + DetailRes getDetail(UUID operatorUid); + + DefaultPaging getDefaultPagingNumber(String userId, Integer size, String operatorUid); + + void saveNewPolygon(TrainingDataReviewDto.NewPolygonRequest request); + + TrainingDataReviewDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear); +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java new file mode 100644 index 00000000..7a25d32e --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java @@ -0,0 +1,842 @@ +package com.kamco.cd.kamcoback.postgres.repository.trainingdata; + +import static com.kamco.cd.kamcoback.postgres.entity.QImageryEntity.imageryEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnDataGeomEntity.mapSheetLearnDataGeomEntity; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; +import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; +import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ChangeDetectionInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ClassificationInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.GeoFeatureRequest.Properties; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.InferenceDataGeometry; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.InferenceDataGeometry.InferenceProperties; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.InspectionResultInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.LearnDataGeometry; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.LearnDataGeometry.LearnProperties; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewGeometryInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewListDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.SummaryRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.searchReq; +import com.querydsl.core.Tuple; +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.Expressions; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityNotFoundException; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import lombok.extern.slf4j.Slf4j; +import org.locationtech.jts.geom.Geometry; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; + +@Slf4j +public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport + implements TrainingDataReviewRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + public TrainingDataReviewRepositoryImpl(JPAQueryFactory queryFactory) { + super(LabelingAssignmentEntity.class); + this.queryFactory = queryFactory; + } + + @Override + public Page findReviewAssignedList(searchReq searchReq, String userId) { + + // 완료된 검수는 오늘만, 나머지는 전체 조회 + LocalDate today = LocalDate.now(ZoneId.of("Asia/Seoul")); + ZonedDateTime start = today.atStartOfDay(ZoneId.of("Asia/Seoul")); + ZonedDateTime end = start.plusDays(1); + + BooleanExpression doneToday = + labelingAssignmentEntity + .inspectState + .eq(InspectState.COMPLETE.getId()) + .and(labelingAssignmentEntity.inspectStatDttm.goe(start)) + .and(labelingAssignmentEntity.inspectStatDttm.lt(end)); + + BooleanExpression unconfirmOrExcept = + labelingAssignmentEntity.inspectState.in( + InspectState.EXCEPT.getId(), InspectState.UNCONFIRM.getId()); + + BooleanExpression dayStateCondition = doneToday.or(unconfirmOrExcept); + + Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize()); + List list = + queryFactory + .select( + Projections.constructor( + ReviewListDto.class, + labelingAssignmentEntity.assignmentUid, + labelingAssignmentEntity.inferenceGeomUid, + labelingAssignmentEntity.inspectorUid, + labelingAssignmentEntity.inspectState, + labelingAssignmentEntity.assignGroupId, + mapInkx5kEntity.mapidNm, + mapSheetAnalDataInferenceGeomEntity.pnu)) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .innerJoin(mapInkx5kEntity) + .on(labelingAssignmentEntity.assignGroupId.eq(mapInkx5kEntity.mapidcdNo)) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + dayStateCondition, + labelingAssignmentEntity.workState.eq("DONE")) // 라벨링 완료된 것만 검수 대상 + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy( + labelingAssignmentEntity.createdDate.asc(), + labelingAssignmentEntity.inferenceGeomUid.asc()) + .fetch(); + + Long count = + Optional.ofNullable( + queryFactory + .select(labelingAssignmentEntity.assignmentUid.count()) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .innerJoin(mapInkx5kEntity) + .on(labelingAssignmentEntity.assignGroupId.eq(mapInkx5kEntity.mapidcdNo)) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + dayStateCondition, + labelingAssignmentEntity.workState.eq("DONE")) + .fetchOne()) + .orElse(0L); + + return new PageImpl<>(list, pageable, count); + } + + @Override + public ReviewGeometryInfo findReviewAssignedGeom(String operatorUid) { + return queryFactory + .select( + Projections.constructor( + ReviewGeometryInfo.class, + labelingAssignmentEntity.assignmentUid, + labelingAssignmentEntity.inferenceGeomUid, + Expressions.stringTemplate( + "ST_AsGeoJSON({0})", mapSheetAnalDataInferenceGeomEntity.geom), + makeCogUrl(mapSheetAnalDataInferenceGeomEntity.compareYyyy) + .max() + .as("beforeCogUrl"), + makeCogUrl(mapSheetAnalDataInferenceGeomEntity.targetYyyy).max().as("afterCogUrl"), + Expressions.stringTemplate("ST_AsGeoJSON({0})", mapInkx5kEntity.geom))) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .innerJoin(mapInkx5kEntity) + .on(labelingAssignmentEntity.assignGroupId.eq(mapInkx5kEntity.mapidcdNo)) + .leftJoin(imageryEntity) + .on( + imageryEntity + .scene5k + .eq(labelingAssignmentEntity.assignGroupId) + .and( + imageryEntity + .year + .eq(mapSheetAnalDataInferenceGeomEntity.compareYyyy) + .or(imageryEntity.year.eq(mapSheetAnalDataInferenceGeomEntity.targetYyyy)))) + .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(operatorUid))) + .groupBy( + labelingAssignmentEntity.assignmentUid, + labelingAssignmentEntity.inferenceGeomUid, + labelingAssignmentEntity.inspectorUid, + labelingAssignmentEntity.inspectState, + labelingAssignmentEntity.assignGroupId, + mapInkx5kEntity.mapidNm, + mapSheetAnalDataInferenceGeomEntity.pnu, + mapSheetAnalDataInferenceGeomEntity.geom, + mapInkx5kEntity.geom) + .fetchOne(); + } + + @Override + public Long findReviewOperatorGeoUid(String operatorUid) { + return queryFactory + .select(labelingAssignmentEntity.inferenceGeomUid) + .from(labelingAssignmentEntity) + .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(operatorUid))) + .fetchOne(); + } + + @Override + public void updateReviewStateOperator(String operatorUid, String status, String memo) { + queryFactory + .update(labelingAssignmentEntity) + .set(labelingAssignmentEntity.inspectState, status) + .set(labelingAssignmentEntity.inspectStatDttm, ZonedDateTime.now()) + .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(operatorUid))) + .execute(); + } + + @Override + public void updateReviewExceptState(Long inferenceGeomUid, String status) { + // 검수 제외 시 assignment 테이블만 업데이트 + // (inference_geom 테이블에는 inspect_state 컬럼이 없음) + } + + @Override + public void updateReviewPolygonClass( + Long inferenceGeomUid, Geometry geometry, Properties properties, String status) { + // inference_geom 테이블 정보 가져오기 + MapSheetAnalDataInferenceGeomEntity entity = + queryFactory + .selectFrom(mapSheetAnalDataInferenceGeomEntity) + .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(inferenceGeomUid)) + .fetchOne(); + + if (Objects.isNull(entity)) { + throw new EntityNotFoundException( + "MapSheetAnalDataInferenceGeomEntity not found for inferenceGeomUid: " + + inferenceGeomUid); + } + + // learn_data_geom 업데이트 또는 insert (검수 완료된 폴리곤 수정) + Long existingLearnGeomUid = + queryFactory + .select(mapSheetLearnDataGeomEntity.geoUid) + .from(mapSheetLearnDataGeomEntity) + .where(mapSheetLearnDataGeomEntity.geoUid.eq(inferenceGeomUid)) + .fetchOne(); + + if (existingLearnGeomUid != null) { + // 기존 데이터 업데이트 + queryFactory + .update(mapSheetLearnDataGeomEntity) + .set(mapSheetLearnDataGeomEntity.classAfterCd, properties.getAfterClass().toLowerCase()) + .set(mapSheetLearnDataGeomEntity.classBeforeCd, properties.getBeforeClass().toLowerCase()) + .set(mapSheetLearnDataGeomEntity.geom, geometry) + .set(mapSheetLearnDataGeomEntity.modifiedDate, ZonedDateTime.now()) + .where(mapSheetLearnDataGeomEntity.geoUid.eq(inferenceGeomUid)) + .execute(); + } else { + // 새로운 데이터 insert + queryFactory + .insert(mapSheetLearnDataGeomEntity) + .columns( + mapSheetLearnDataGeomEntity.geoUid, + mapSheetLearnDataGeomEntity.afterYyyy, + mapSheetLearnDataGeomEntity.beforeYyyy, + mapSheetLearnDataGeomEntity.classAfterCd, + mapSheetLearnDataGeomEntity.classBeforeCd, + mapSheetLearnDataGeomEntity.geom, + mapSheetLearnDataGeomEntity.createdDate, + mapSheetLearnDataGeomEntity.modifiedDate) + .values( + inferenceGeomUid, + entity.getTargetYyyy(), + entity.getCompareYyyy(), + properties.getAfterClass().toLowerCase(), + properties.getBeforeClass().toLowerCase(), + geometry, + ZonedDateTime.now(), + ZonedDateTime.now()) + .execute(); + } + } + + @Override + public SummaryRes getSummary(String userId) { + // 기본값 설정 + Long totalCnt = 0L; + Long undoneCnt = 0L; + Long todayCnt = 0L; + + try { + System.out.println("=== getSummary START (Review) ==="); + System.out.println("userId: " + userId); + + // 1. 전체 배정 건수 (라벨링 완료된 것만) + try { + Long result = + queryFactory + .select(labelingAssignmentEntity.count()) + .from(labelingAssignmentEntity) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + labelingAssignmentEntity.workState.eq("DONE")) + .fetchOne(); + + totalCnt = (result != null) ? result : 0L; + System.out.println("totalCnt: " + totalCnt); + } catch (Exception e) { + System.err.println( + "totalCnt query error: " + e.getClass().getName() + " - " + e.getMessage()); + if (e.getCause() != null) { + System.err.println("Caused by: " + e.getCause().getMessage()); + } + totalCnt = 0L; + } + + // 2. 미작업 건수 (UNCONFIRM 상태) + try { + Long result = + queryFactory + .select(labelingAssignmentEntity.count()) + .from(labelingAssignmentEntity) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + labelingAssignmentEntity.workState.eq("DONE"), + labelingAssignmentEntity.inspectState.eq("UNCONFIRM")) + .fetchOne(); + + undoneCnt = (result != null) ? result : 0L; + System.out.println("undoneCnt: " + undoneCnt); + } catch (Exception e) { + System.err.println( + "undoneCnt query error: " + e.getClass().getName() + " - " + e.getMessage()); + if (e.getCause() != null) { + System.err.println("Caused by: " + e.getCause().getMessage()); + } + undoneCnt = 0L; + } + + // 3. 오늘 완료 건수 + try { + // 오늘 날짜의 시작과 끝 시간 계산 + ZonedDateTime startOfToday = LocalDate.now().atStartOfDay(java.time.ZoneId.systemDefault()); + ZonedDateTime endOfToday = startOfToday.plusDays(1); + System.out.println("startOfToday: " + startOfToday); + System.out.println("endOfToday: " + endOfToday); + + Long result = + queryFactory + .select(labelingAssignmentEntity.count()) + .from(labelingAssignmentEntity) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + labelingAssignmentEntity.inspectState.eq("COMPLETE"), + labelingAssignmentEntity.inspectStatDttm.isNotNull(), + labelingAssignmentEntity.inspectStatDttm.goe(startOfToday), + labelingAssignmentEntity.inspectStatDttm.lt(endOfToday)) + .fetchOne(); + + todayCnt = (result != null) ? result : 0L; + System.out.println("todayCnt: " + todayCnt); + } catch (Exception e) { + System.err.println( + "todayCnt query error: " + e.getClass().getName() + " - " + e.getMessage()); + if (e.getCause() != null) { + System.err.println("Caused by: " + e.getCause().getMessage()); + } + todayCnt = 0L; + } + + System.out.println("=== getSummary END (Review) ==="); + System.out.println( + "Final result - totalCnt: " + + totalCnt + + ", undoneCnt: " + + undoneCnt + + ", todayCnt: " + + todayCnt); + + } catch (Exception e) { + // 최상위 예외 처리 + System.err.println("=== getSummary OUTER ERROR (Review) ==="); + System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage()); + if (e.getCause() != null) { + System.err.println("Caused by: " + e.getCause().getMessage()); + } + e.printStackTrace(); + } + + // 항상 정상 응답 반환 (예외를 throw하지 않음) + return SummaryRes.builder().totalCnt(totalCnt).undoneCnt(undoneCnt).todayCnt(todayCnt).build(); + } + + @Override + public DetailRes getDetail(UUID operatorUid) { + try { + // 1. 작업 배정 정보 조회 + var assignment = + queryFactory + .selectFrom(labelingAssignmentEntity) + .where(labelingAssignmentEntity.assignmentUid.eq(operatorUid)) + .fetchOne(); + + if (assignment == null) { + throw new RuntimeException("Assignment not found: " + operatorUid); + } + + // 2. 추론 결과 정보 조회 + var mapSheetAnalDataInferenceGeomEntityEntity = + queryFactory + .selectFrom(mapSheetAnalDataInferenceGeomEntity) + .where( + mapSheetAnalDataInferenceGeomEntity.geoUid.eq( + assignment.toDto().getInferenceGeomUid())) + .fetchOne(); + + if (mapSheetAnalDataInferenceGeomEntityEntity == null) { + throw new RuntimeException( + "Inference geometry not found: " + assignment.toDto().getInferenceGeomUid()); + } + + // 3. 도엽 정보 조회 + var mapSheetEntity = + queryFactory + .selectFrom(mapInkx5kEntity) + .where(mapInkx5kEntity.mapidcdNo.eq(assignment.toDto().getAssignGroupId())) + .fetchOne(); + + // 4. COG URL 조회 - imagery만 사용 + String beforeCogUrl = ""; + String afterCogUrl = ""; + + try { + var beforeImagery = + queryFactory + .select( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .from(imageryEntity) + .where( + imageryEntity.scene5k.eq(assignment.toDto().getAssignGroupId()), + imageryEntity.year.eq( + mapSheetAnalDataInferenceGeomEntityEntity.getCompareYyyy())) + .fetchFirst(); + beforeCogUrl = beforeImagery != null ? beforeImagery : ""; + + var afterImagery = + queryFactory + .select( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .from(imageryEntity) + .where( + imageryEntity.scene5k.eq(assignment.toDto().getAssignGroupId()), + imageryEntity.year.eq( + mapSheetAnalDataInferenceGeomEntityEntity.getTargetYyyy())) + .fetchFirst(); + afterCogUrl = afterImagery != null ? afterImagery : ""; + } catch (Exception e) { + System.err.println("COG URL retrieval error: " + e.getMessage()); + // COG URL 조회 실패 시 빈 문자열 유지 + } + + // 5. DTO 생성 + var changeDetectionInfo = + ChangeDetectionInfo.builder() + .mapSheetInfo(mapSheetEntity != null ? mapSheetEntity.getMapidNm() : "") + .detectionYear( + (mapSheetAnalDataInferenceGeomEntityEntity.getCompareYyyy() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getCompareYyyy() + : 0) + + "-" + + (mapSheetAnalDataInferenceGeomEntityEntity.getTargetYyyy() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getTargetYyyy() + : 0)) + .beforeClass( + ClassificationInfo.builder() + .classification( + mapSheetAnalDataInferenceGeomEntityEntity.getClassBeforeCd() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getClassBeforeCd() + : "") + .probability( + mapSheetAnalDataInferenceGeomEntityEntity.getClassBeforeProb() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getClassBeforeProb() + : 0.0) + .build()) + .afterClass( + ClassificationInfo.builder() + .classification( + mapSheetAnalDataInferenceGeomEntityEntity.getClassAfterCd() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getClassAfterCd() + : "") + .probability( + mapSheetAnalDataInferenceGeomEntityEntity.getClassAfterProb() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getClassAfterProb() + : 0.0) + .build()) + .area( + mapSheetAnalDataInferenceGeomEntityEntity.getArea() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getArea() + : 0.0) + .detectionAccuracy( + mapSheetAnalDataInferenceGeomEntityEntity.getCdProb() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getCdProb() + : 0.0) + .pnu( + mapSheetAnalDataInferenceGeomEntityEntity.getPnu() != null + ? mapSheetAnalDataInferenceGeomEntityEntity.getPnu() + : 0L) + .build(); + + var inspectionResultInfo = + InspectionResultInfo.builder() + .verificationResult(convertInspectState(assignment.toDto().getInspectState())) + .inappropriateReason("") + .memo("") + .build(); + + // 6. Geometry를 GeoJSON으로 변환 + InferenceDataGeometry inferData = + queryFactory + .select( + Projections.constructor( + InferenceDataGeometry.class, + Expressions.stringTemplate("{0}", "Feature"), + Expressions.stringTemplate( + "ST_AsGeoJSON({0})", mapSheetAnalDataInferenceGeomEntity.geom), + Projections.constructor( + InferenceProperties.class, + mapSheetAnalDataInferenceGeomEntity.classBeforeCd, + mapSheetAnalDataInferenceGeomEntity.classAfterCd))) + .from(mapSheetAnalDataInferenceGeomEntity) + .where( + mapSheetAnalDataInferenceGeomEntity.geoUid.eq( + mapSheetAnalDataInferenceGeomEntityEntity.getGeoUid())) + .fetchOne(); + + // 도엽 bbox json으로 가져오기 + JsonNode mapBbox = null; + if (mapSheetEntity.getGeom() != null) { + try { + String bboxString = + queryFactory + .select(Expressions.stringTemplate("ST_AsGeoJSON({0})", mapInkx5kEntity.geom)) + .from(mapInkx5kEntity) + .where(mapInkx5kEntity.mapidcdNo.eq(assignment.toDto().getAssignGroupId())) + .fetchOne(); + if (bboxString != null) { + ObjectMapper mapper = new ObjectMapper(); + mapBbox = mapper.readTree(bboxString); + } + } catch (Exception e) { + throw new RuntimeException("GeoJSON parsing error: " + e.getMessage()); + } + } + + // 7. 라벨링 저장한 Geometry들을 GeoJSON으로 변환 (여러 개 가능) + List learnDataList = + queryFactory + .select( + Projections.constructor( + LearnDataGeometry.class, + Expressions.stringTemplate("{0}", "Feature"), + Expressions.stringTemplate( + "ST_AsGeoJSON({0})", mapSheetLearnDataGeomEntity.geom), + Projections.constructor( + LearnProperties.class, + mapSheetLearnDataGeomEntity.classBeforeCd, + mapSheetLearnDataGeomEntity.classAfterCd))) + .from(mapSheetLearnDataGeomEntity) + .where( + mapSheetLearnDataGeomEntity.geoUid.eq( + mapSheetAnalDataInferenceGeomEntityEntity.getGeoUid())) + .fetch(); // fetchOne() -> fetch()로 변경 + + return DetailRes.builder() + .operatorUid(operatorUid) + .changeDetectionInfo(changeDetectionInfo) + .inspectionResultInfo(inspectionResultInfo) + .geom(inferData) + .beforeCogUrl(beforeCogUrl) + .afterCogUrl(afterCogUrl) + .mapBox(mapBbox) + .learnGeometries(learnDataList) // learnGeometry -> learnGeometries + .build(); + + } catch (Exception e) { + System.err.println("getDetail Error: " + e.getMessage()); + e.printStackTrace(); + throw new RuntimeException("Failed to get detail for operatorUid: " + operatorUid, e); + } + } + + @Override + public DefaultPaging getDefaultPagingNumber(String userId, Integer size, String operatorUid) { + + ZoneId KST = ZoneId.of("Asia/Seoul"); + ZonedDateTime todayStart = ZonedDateTime.now(KST).toLocalDate().atStartOfDay(KST); + ZonedDateTime todayEnd = todayStart.plusDays(1); + + BooleanExpression doneToday = + labelingAssignmentEntity + .inspectState + .eq(InspectState.COMPLETE.getId()) + .and(labelingAssignmentEntity.inspectStatDttm.goe(todayStart)) + .and(labelingAssignmentEntity.inspectStatDttm.lt(todayEnd)); + + BooleanExpression unconfirmOrExcept = + labelingAssignmentEntity.inspectState.in( + InspectState.EXCEPT.getId(), InspectState.UNCONFIRM.getId()); + + BooleanExpression stateCondition = doneToday.or(unconfirmOrExcept); + + Tuple firstAssigned = + queryFactory + .select( + labelingAssignmentEntity.assignmentUid, + labelingAssignmentEntity.createdDate, + labelingAssignmentEntity.inferenceGeomUid) + .from(labelingAssignmentEntity) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + labelingAssignmentEntity.workState.eq("DONE"), + stateCondition, + operatorUid == null + ? labelingAssignmentEntity.inspectState.eq(InspectState.UNCONFIRM.getId()) + : labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(operatorUid))) + .orderBy( + labelingAssignmentEntity.createdDate.asc(), + labelingAssignmentEntity.inferenceGeomUid.asc()) + .limit(1) + .fetchOne(); + + if (firstAssigned == null) { + return DefaultPaging.builder().page(0).operatorUid(null).build(); + } + + UUID firstAssignedUid = firstAssigned.get(labelingAssignmentEntity.assignmentUid); + ZonedDateTime createdDttm = firstAssigned.get(labelingAssignmentEntity.createdDate); + Long inferenceGeomUid = firstAssigned.get(labelingAssignmentEntity.inferenceGeomUid); + + BooleanExpression beforeCondition = + labelingAssignmentEntity + .createdDate + .lt(createdDttm) + .or( + labelingAssignmentEntity + .createdDate + .eq(createdDttm) + .and(labelingAssignmentEntity.inferenceGeomUid.lt(inferenceGeomUid))); + + Long beforeCnt = + queryFactory + .select(labelingAssignmentEntity.count()) + .from(labelingAssignmentEntity) + .where( + labelingAssignmentEntity.inspectorUid.eq(userId), + labelingAssignmentEntity.workState.eq("DONE"), + beforeCondition.and(stateCondition)) + .fetchOne(); + + int page = (int) (beforeCnt / size); // 기본 사이즈 20 + return DefaultPaging.builder().page(page).operatorUid(firstAssignedUid).build(); + } + + @Override + public void saveNewPolygon(TrainingDataReviewDto.NewPolygonRequest request) { + try { + if (request.getFeatures() == null || request.getFeatures().isEmpty()) { + throw new RuntimeException("No polygons to save"); + } + + System.out.println( + "Saving " + + request.getFeatures().size() + + " new polygon(s) for mapSheetNum: " + + request.getMapSheetNum()); + + int savedCount = 0; + for (TrainingDataReviewDto.NewPolygonRequest.PolygonFeature feature : request.getFeatures()) { + try { + // 1. map_sheet_anal_data_inference_geom 테이블에 새 polygon 삽입 + queryFactory + .insert(mapSheetAnalDataInferenceGeomEntity) + .columns( + mapSheetAnalDataInferenceGeomEntity.geom, + mapSheetAnalDataInferenceGeomEntity.compareYyyy, + mapSheetAnalDataInferenceGeomEntity.targetYyyy, + mapSheetAnalDataInferenceGeomEntity.classBeforeCd, + mapSheetAnalDataInferenceGeomEntity.classAfterCd, + mapSheetAnalDataInferenceGeomEntity.createdDttm, + mapSheetAnalDataInferenceGeomEntity.updatedDttm, + mapSheetAnalDataInferenceGeomEntity.labelState) + .values( + feature.getGeometry(), + request.getCompareYyyy(), + request.getTargetYyyy(), + feature.getProperties().getBeforeClass().toLowerCase(), + feature.getProperties().getAfterClass().toLowerCase(), + ZonedDateTime.now(), + ZonedDateTime.now(), + "DONE") + .execute(); + + // 2. 생성된 geoUid 조회 + Long geoUid = + queryFactory + .select(mapSheetAnalDataInferenceGeomEntity.geoUid) + .from(mapSheetAnalDataInferenceGeomEntity) + .where( + mapSheetAnalDataInferenceGeomEntity.geom.eq(feature.getGeometry()), + mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(request.getCompareYyyy()), + mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(request.getTargetYyyy())) + .orderBy(mapSheetAnalDataInferenceGeomEntity.geoUid.desc()) + .fetchFirst(); + + if (geoUid == null) { + System.err.println("Failed to get geo_uid for polygon #" + (savedCount + 1)); + continue; + } + + // 3. learn_data_geom 테이블에도 삽입 + queryFactory + .insert(mapSheetLearnDataGeomEntity) + .columns( + mapSheetLearnDataGeomEntity.geoUid, + mapSheetLearnDataGeomEntity.afterYyyy, + mapSheetLearnDataGeomEntity.beforeYyyy, + mapSheetLearnDataGeomEntity.classAfterCd, + mapSheetLearnDataGeomEntity.classBeforeCd, + mapSheetLearnDataGeomEntity.geom, + mapSheetLearnDataGeomEntity.createdDate, + mapSheetLearnDataGeomEntity.modifiedDate) + .values( + geoUid, + request.getTargetYyyy(), + request.getCompareYyyy(), + feature.getProperties().getAfterClass().toLowerCase(), + feature.getProperties().getBeforeClass().toLowerCase(), + feature.getGeometry(), + ZonedDateTime.now(), + ZonedDateTime.now()) + .execute(); + + savedCount++; + System.out.println( + "Successfully saved polygon #" + savedCount + " with geo_uid: " + geoUid); + + } catch (Exception e) { + System.err.println("Error saving polygon #" + (savedCount + 1) + ": " + e.getMessage()); + // 개별 polygon 저장 실패해도 계속 진행 + } + } + + if (savedCount == 0) { + throw new RuntimeException("Failed to save any polygons"); + } + + System.out.println( + "Successfully saved " + savedCount + "/" + request.getFeatures().size() + " polygon(s)"); + + } catch (Exception e) { + System.err.println("saveNewPolygon Error: " + e.getMessage()); + e.printStackTrace(); + throw new RuntimeException("Failed to save new polygons", e); + } + } + + @Override + public TrainingDataReviewDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear) { + try { + // beforeYear COG URL 조회 + String beforeCogUrl = + queryFactory + .select( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .from(imageryEntity) + .where(imageryEntity.scene5k.eq(mapSheetNum), imageryEntity.year.eq(beforeYear)) + .fetchFirst(); + + // afterYear COG URL 조회 + String afterCogUrl = + queryFactory + .select( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .from(imageryEntity) + .where(imageryEntity.scene5k.eq(mapSheetNum), imageryEntity.year.eq(afterYear)) + .fetchFirst(); + + if (beforeCogUrl == null && afterCogUrl == null) { + throw new RuntimeException( + "COG images not found for mapSheetNum: " + + mapSheetNum + + ", years: " + + beforeYear + + ", " + + afterYear); + } + + return TrainingDataReviewDto.CogImageResponse.builder() + .beforeCogUrl(beforeCogUrl != null ? beforeCogUrl : "") + .afterCogUrl(afterCogUrl != null ? afterCogUrl : "") + .beforeYear(beforeYear) + .afterYear(afterYear) + .mapSheetNum(mapSheetNum) + .build(); + + } catch (Exception e) { + System.err.println("getCogImageUrl Error: " + e.getMessage()); + e.printStackTrace(); + throw new RuntimeException( + "Failed to get COG image URLs for mapSheetNum: " + + mapSheetNum + + ", years: " + + beforeYear + + ", " + + afterYear, + e); + } + } + + private StringExpression makeCogUrl(NumberPath year) { + return new CaseBuilder() + .when(imageryEntity.year.eq(year)) + .then( + Expressions.stringTemplate( + "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) + .otherwise(""); + } + + private BooleanExpression statusInInspectState(String status) { + if (Objects.isNull(status)) { + return null; + } + + String[] arrStatus = status.split(","); + return labelingAssignmentEntity.inspectState.in(arrStatus); + } + + private String convertInspectState(String inspectState) { + if (inspectState == null) { + return "미확인"; + } + switch (inspectState) { + case "UNCONFIRM": + return "미확인"; + case "EXCEPT": + return "제외"; + case "COMPLETE": + return "완료"; + default: + return "미확인"; + } + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java index 62dad56b..e08df44a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java @@ -182,4 +182,163 @@ public class TrainingDataLabelApiController { return ApiResponseDto.ok( trainingDataLabelService.getDefaultPagingNumber(userId, size, assignmentUid)); } + + @Operation( + summary = "새로운 polygon(들) 추가 저장", + description = "탐지결과 외 새로운 polygon을 추가로 저장합니다. 단일 또는 여러 개를 저장할 수 있습니다.") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "저장 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseObj.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/new-polygon") + public ApiResponseDto saveNewPolygon( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "새로운 polygon 저장 요청", + required = true, + content = + @Content( + mediaType = "application/json", + schema = + @Schema(implementation = TrainingDataLabelDto.NewPolygonRequest.class), + examples = { + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "1개 polygon 저장", + value = + """ + { + "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + } + ] + } + """), + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "3개 polygon 저장", + value = + """ + { + "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.665, 34.590], + [126.664, 34.589], + [126.666, 34.591], + [126.665, 34.590] + ] + ] + }, + "properties": { + "beforeClass": "FOREST", + "afterClass": "BUILDING" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.667, 34.592], + [126.666, 34.591], + [126.668, 34.593], + [126.667, 34.592] + ] + ] + }, + "properties": { + "beforeClass": "FARMLAND", + "afterClass": "SOLAR_PANEL" + } + } + ] + } + """) + })) + @RequestBody + TrainingDataLabelDto.NewPolygonRequest request) { + return ApiResponseDto.okObject(trainingDataLabelService.saveNewPolygon(request)); + } + + + @Operation(summary = "COG 이미지 URL 조회", description = "변화 전/후 COG 이미지 URL을 함께 조회합니다") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = + @Schema(implementation = TrainingDataLabelDto.CogImageResponse.class))), + @ApiResponse(responseCode = "404", description = "이미지를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/cog-image") + public ApiResponseDto getCogImageUrl( + @Parameter(description = "도엽번호", required = true, example = "35905086") @RequestParam + String mapSheetNum, + @Parameter(description = "변화 전 년도", required = true, example = "2023") @RequestParam + Integer beforeYear, + @Parameter(description = "변화 후 년도", required = true, example = "2024") @RequestParam + Integer afterYear) { + return ApiResponseDto.ok( + trainingDataLabelService.getCogImageUrl(mapSheetNum, beforeYear, afterYear)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java new file mode 100644 index 00000000..e206b1a3 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java @@ -0,0 +1,343 @@ +package com.kamco.cd.kamcoback.trainingdata; + +import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewGeometryInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewListDto; +import com.kamco.cd.kamcoback.trainingdata.service.TrainingDataReviewService; +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "라벨링 툴 > 검수자", description = "라벨링 툴 > 검수자 API") +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/training-data/review") +public class TrainingDataReviewApiController { + + private final TrainingDataReviewService trainingDataReviewService; + + @Operation(summary = "목록 조회", description = "검수 할당 목록 조회") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = CommonCodeDto.Basic.class))), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping + public ApiResponseDto> findReviewAssignedList( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "20") int size, + @RequestParam(defaultValue = "01022223333") String userId) { + TrainingDataReviewDto.searchReq searchReq = new TrainingDataReviewDto.searchReq(page, size, ""); + return ApiResponseDto.ok(trainingDataReviewService.findReviewAssignedList(searchReq, userId)); + } + + @Hidden + @Operation(summary = "상세 Geometry 조회", description = "검수 할당 상세 Geometry 조회") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = CommonCodeDto.Basic.class))), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/geom-info") + public ApiResponseDto findReviewAssignedGeom( + @RequestParam(defaultValue = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") String operatorUid) { + return ApiResponseDto.ok(trainingDataReviewService.findReviewAssignedGeom(operatorUid)); + } + + @Operation(summary = "검수 결과 저장", description = "검수 결과 저장") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = CommonCodeDto.Basic.class))), + @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping + public ApiResponseDto saveReviewFeature( + @RequestBody TrainingDataReviewDto.GeoFeatureRequest request) { + return ApiResponseDto.okObject(trainingDataReviewService.saveReviewFeature(request)); + } + + @Operation(summary = "작업 통계 조회", description = "검수자의 작업 현황 통계를 조회합니다. (전체/미작업/Today 건수)") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = TrainingDataReviewDto.SummaryRes.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/summary") + public ApiResponseDto getSummary( + @io.swagger.v3.oas.annotations.Parameter( + description = "검수자 사번", + required = true, + example = "01022223333") + @RequestParam + String userId) { + try { + System.out.println("[Controller] getSummary called with userId: " + userId); + TrainingDataReviewDto.SummaryRes result = trainingDataReviewService.getSummary(userId); + System.out.println("[Controller] getSummary result: " + result); + return ApiResponseDto.ok(result); + } catch (Exception e) { + System.err.println("[Controller] getSummary ERROR: " + e.getMessage()); + e.printStackTrace(); + // 예외 발생 시에도 빈 통계 반환 + return ApiResponseDto.ok( + TrainingDataReviewDto.SummaryRes.builder() + .totalCnt(0L) + .undoneCnt(0L) + .todayCnt(0L) + .build()); + } + } + + @Operation(summary = "변화탐지정보 및 실태조사결과 조회", description = "선택한 작업의 변화탐지정보 및 실태조사결과를 조회합니다.") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = TrainingDataReviewDto.DetailRes.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), + @ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/detail") + public ApiResponseDto getDetail( + @io.swagger.v3.oas.annotations.Parameter( + description = "검수 작업 ID (UUID)", + required = true, + example = "93c56be8-0246-4b22-b976-2476549733cc") + @RequestParam + java.util.UUID operatorUid) { + return ApiResponseDto.ok(trainingDataReviewService.getDetail(operatorUid)); + } + + @Operation(summary = "검수자 기본 page number 제공", description = "검수자 기본 page number 제공") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = TrainingDataReviewDto.DetailRes.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), + @ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/default-page") + public ApiResponseDto getDefaultPagingNumber( + @Parameter(description = "사번", example = "01022223333") @RequestParam String userId, + @Parameter(description = "페이징 사이즈", example = "20") @RequestParam(defaultValue = "20") + Integer size, + @Parameter(description = "개별 UUID", example = "79bcdbbe-6ed4-4caa-b4a4-22f3cf2f9d25") + @RequestParam(required = false) + String operatorUid) { + return ApiResponseDto.ok( + trainingDataReviewService.getDefaultPagingNumber(userId, size, operatorUid)); + } + + @Operation( + summary = "새로운 polygon(들) 추가 저장", + description = "탐지결과 외 새로운 polygon을 추가로 저장합니다. 단일 또는 여러 개를 저장할 수 있습니다.") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "저장 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = ResponseObj.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/new-polygon") + public ApiResponseDto saveNewPolygon( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "새로운 polygon 저장 요청", + required = true, + content = + @Content( + mediaType = "application/json", + schema = + @Schema(implementation = TrainingDataReviewDto.NewPolygonRequest.class), + examples = { + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "1개 polygon 저장", + value = + """ + { + "operatorUid": "93c56be8-0246-4b22-b976-2476549733cc", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + } + ] + } + """), + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "3개 polygon 저장", + value = + """ + { + "operatorUid": "93c56be8-0246-4b22-b976-2476549733cc", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.665, 34.590], + [126.664, 34.589], + [126.666, 34.591], + [126.665, 34.590] + ] + ] + }, + "properties": { + "beforeClass": "FOREST", + "afterClass": "BUILDING" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.667, 34.592], + [126.666, 34.591], + [126.668, 34.593], + [126.667, 34.592] + ] + ] + }, + "properties": { + "beforeClass": "FARMLAND", + "afterClass": "SOLAR_PANEL" + } + } + ] + } + """) + })) + @RequestBody + TrainingDataReviewDto.NewPolygonRequest request) { + return ApiResponseDto.okObject(trainingDataReviewService.saveNewPolygon(request)); + } + + @Operation(summary = "COG 이미지 URL 조회", description = "변화 전/후 COG 이미지 URL을 함께 조회합니다") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = + @Schema(implementation = TrainingDataReviewDto.CogImageResponse.class))), + @ApiResponse(responseCode = "404", description = "이미지를 찾을 수 없음", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/cog-image") + public ApiResponseDto getCogImageUrl( + @Parameter(description = "도엽번호", required = true, example = "35905086") @RequestParam + String mapSheetNum, + @Parameter(description = "변화 전 년도", required = true, example = "2023") @RequestParam + Integer beforeYear, + @Parameter(description = "변화 후 년도", required = true, example = "2024") @RequestParam + Integer afterYear) { + return ApiResponseDto.ok( + trainingDataReviewService.getCogImageUrl(mapSheetNum, beforeYear, afterYear)); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java index 8671e324..83b5f13d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataLabelDto.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.node.ObjectNode; import com.kamco.cd.kamcoback.common.utils.geometry.GeometryDeserializer; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; import java.util.UUID; import lombok.AllArgsConstructor; import lombok.Builder; @@ -298,8 +299,8 @@ public class TrainingDataLabelDto { @Schema(description = "도엽 bbox") private JsonNode mapBox; - @Schema(description = "라벨링 툴에서 그린 폴리곤") - private LearnDataGeometry learnGeometry; + @Schema(description = "라벨링 툴에서 그린 폴리곤들 (여러 개 가능)") + private List learnGeometries; } @Schema(name = "ChangeDetectionInfo", description = "변화탐지정보") @@ -394,4 +395,133 @@ public class TrainingDataLabelDto { private int page; private UUID assignmentUid; } + + @Schema(name = "NewPolygonRequest", description = "새로운 polygon(들) 추가 저장") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class NewPolygonRequest { + + @Schema(description = "assignmentUid", example = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") + private String assignmentUid; + + @Schema(description = "anal_uid", example = "1") + private Long analUid; + + @Schema(description = "map_sheet_num (도엽번호)", example = "NI52-3-13-1") + private String mapSheetNum; + + @Schema(description = "compare_yyyy (변화 전 년도)", example = "2022") + private Integer compareYyyy; + + @Schema(description = "target_yyyy (변화 후 년도)", example = "2023") + private Integer targetYyyy; + + @Schema(description = "새로 그린 polygon 리스트") + private List features; + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class PolygonFeature { + + @Schema(description = "type", example = "Feature") + private String type; + + @JsonDeserialize(using = GeometryDeserializer.class) + @Schema( + description = "polygon geometry", + example = + """ + { + "type": "Polygon", + "coordinates": [ + [ + [ + 126.66292461969202, + 34.58785236216609 + ], + [ + 126.66263801099049, + 34.58740117447532 + ], + [ + 126.66293668521236, + 34.5873904146878 + ], + [ + 126.66312820122245, + 34.587841464427825 + ], + [ + 126.66289124481979, + 34.58786048381633 + ], + [ + 126.66292461969202, + 34.58785236216609 + ] + ] + ] + } + """) + private Geometry geometry; + + @Schema(description = "polygon properties") + private PolygonProperties properties; + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class PolygonProperties { + + @Schema(description = "beforeClass", example = "WASTE") + private String beforeClass; + + @Schema(description = "afterClass", example = "LAND") + private String afterClass; + } + } + } + + @Schema(name = "CogImageRequest", description = "COG 이미지 조회 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class CogImageRequest { + + @Schema(description = "map_sheet_num (도엽번호)", example = "NI52-3-13-1", required = true) + private String mapSheetNum; + + @Schema(description = "year (년도)", example = "2022", required = true) + private Integer year; + } + + @Schema(name = "CogImageResponse", description = "COG 이미지 URL 응답") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CogImageResponse { + + @Schema(description = "변화 전 COG 이미지 URL") + private String beforeCogUrl; + + @Schema(description = "변화 후 COG 이미지 URL") + private String afterCogUrl; + + @Schema(description = "변화 전 년도") + private Integer beforeYear; + + @Schema(description = "변화 후 년도") + private Integer afterYear; + + @Schema(description = "도엽번호") + private String mapSheetNum; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataReviewDto.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataReviewDto.java new file mode 100644 index 00000000..a82b7c53 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/dto/TrainingDataReviewDto.java @@ -0,0 +1,533 @@ +package com.kamco.cd.kamcoback.trainingdata.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.kamco.cd.kamcoback.common.utils.geometry.GeometryDeserializer; +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; +import java.util.UUID; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.locationtech.jts.geom.Geometry; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; + +public class TrainingDataReviewDto { + + @Schema(name = "ReviewListDto", description = "ReviewListDto") + @Getter + @Setter + @NoArgsConstructor + public static class ReviewListDto { + + private UUID operatorUid; + private Long inferenceGeomUid; + private String inspectorUid; + private String inspectState; + private String mapSheetNum; + private String mapIdNm; + private Long pnu; + + public ReviewListDto( + UUID operatorUid, + Long inferenceGeomUid, + String inspectorUid, + String inspectState, + String mapSheetNum, + String mapIdNm, + Long pnu) { + this.operatorUid = operatorUid; + this.inferenceGeomUid = inferenceGeomUid; + this.inspectorUid = inspectorUid; + this.inspectState = inspectState; + this.mapSheetNum = mapSheetNum; + this.mapIdNm = mapIdNm; + this.pnu = pnu; + } + } + + @Schema(name = "ReviewGeometryInfo", description = "ReviewGeometryInfo") + @Getter + @Setter + @NoArgsConstructor + public static class ReviewGeometryInfo { + + private UUID operatorUid; + private Long inferenceGeomUid; + @JsonIgnore private String geomData; // json string + private JsonNode geom; + private String beforeCogUrl; + private String afterCogUrl; + @JsonIgnore private String mapBboxString; // json string + private JsonNode mapBbox; + + public ReviewGeometryInfo( + UUID operatorUid, + Long inferenceGeomUid, + String geomData, + String beforeCogUrl, + String afterCogUrl, + String mapBboxString) { + this.operatorUid = operatorUid; + this.inferenceGeomUid = inferenceGeomUid; + this.beforeCogUrl = beforeCogUrl; + this.afterCogUrl = afterCogUrl; + + ObjectMapper mapper = new ObjectMapper(); + JsonNode geomJson; + JsonNode mapBboxJson; + try { + geomJson = mapper.readTree(geomData); + mapBboxJson = mapper.readTree(mapBboxString); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + this.geom = geomJson; + this.mapBbox = mapBboxJson; + } + } + + @Schema(name = "GeoFeatureRequest", description = "검수 결과 저장") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class GeoFeatureRequest { + + @Schema(description = "operatorUid", example = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") + private String operatorUid; + + @Schema(description = "type", example = "Feature") + private String type; + + @JsonDeserialize(using = GeometryDeserializer.class) + @Schema( + description = "검수 결과 polygon", + example = + """ + { + "type": "Polygon", + "coordinates": [ + [ + [ + 126.66292461969202, + 34.58785236216609 + ], + [ + 126.66263801099049, + 34.58740117447532 + ], + [ + 126.66293668521236, + 34.5873904146878 + ], + [ + 126.66312820122245, + 34.587841464427825 + ], + [ + 126.66289124481979, + 34.58786048381633 + ], + [ + 126.66292461969202, + 34.58785236216609 + ] + ] + ] + } + """) + private Geometry geometry; + + private Properties properties; + + @Getter + public static class Properties { + + @Schema(description = "beforeClass", example = "WASTE") + private String beforeClass; + + @Schema(description = "afterClass", example = "LAND") + private String afterClass; + + @Schema(description = "inspectState", example = "COMPLETE") + private String inspectState; + + @Schema(description = "inspectMemo", example = "검수 완료") + private String inspectMemo; + } + } + + @Schema(name = "InferenceDataGeometry", description = "InferenceDataGeometry") + @Getter + @Setter + @NoArgsConstructor + public static class InferenceDataGeometry { + + private String type; + @JsonIgnore private String learnGeomString; + private JsonNode geometry; + private InferenceProperties properties; + + public InferenceDataGeometry( + String type, String learnGeomString, InferenceProperties properties) { + this.type = type; + this.properties = properties; + ObjectMapper mapper = new ObjectMapper(); + JsonNode inferenceJson; + try { + inferenceJson = mapper.readTree(learnGeomString); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + this.geometry = inferenceJson; + + if (inferenceJson.isObject()) { + ((ObjectNode) inferenceJson).remove("crs"); + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class InferenceProperties { + + @Schema(description = "beforeClass", example = "WASTE") + private String beforeClass; + + @Schema(description = "afterClass", example = "LAND") + private String afterClass; + } + } + + @Schema(name = "LearnDataGeometry", description = "LearnDataGeometry") + @Getter + @Setter + @NoArgsConstructor + public static class LearnDataGeometry { + + private String type; + @JsonIgnore private String learnGeomString; + private JsonNode geometry; + private LearnProperties properties; + + public LearnDataGeometry(String type, String learnGeomString, LearnProperties properties) { + this.type = type; + this.properties = properties; + ObjectMapper mapper = new ObjectMapper(); + JsonNode learnJson; + try { + learnJson = mapper.readTree(learnGeomString); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + this.geometry = learnJson; + + if (learnJson.isObject()) { + ((ObjectNode) learnJson).remove("crs"); + } + } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class LearnProperties { + + @Schema(description = "beforeClass", example = "WASTE") + private String beforeClass; + + @Schema(description = "afterClass", example = "LAND") + private String afterClass; + } + } + + @Schema(name = "searchReq", description = "검색 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class searchReq { + + // 페이징 파라미터 + private int page = 0; + private int size = 20; + private String sort; + + public Pageable toPageable() { + if (sort != null && !sort.isEmpty()) { + String[] sortParams = sort.split(","); + String property = sortParams[0]; + Sort.Direction direction = + sortParams.length > 1 ? Sort.Direction.fromString(sortParams[1]) : Sort.Direction.ASC; + return PageRequest.of(page, size, Sort.by(direction, property)); + } + return PageRequest.of(page, size); + } + } + + @Schema(name = "DetailRes", description = "객체 상세 정보 응답") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class DetailRes { + + @Schema(description = "검수 작업 ID") + private UUID operatorUid; + + @Schema(description = "변화탐지정보") + private ChangeDetectionInfo changeDetectionInfo; + + @Schema(description = "실태조사결과정보") + private InspectionResultInfo inspectionResultInfo; + + @Schema(description = "Geometry (GeoJSON)") + private InferenceDataGeometry geom; + + @Schema(description = "변화 전 COG 이미지 URL") + private String beforeCogUrl; + + @Schema(description = "변화 후 COG 이미지 URL") + private String afterCogUrl; + + @Schema(description = "도엽 bbox") + private JsonNode mapBox; + + @Schema(description = "검수 시 추가/수정한 폴리곤들 (여러 개 가능)") + private List learnGeometries; + } + + @Schema(name = "ChangeDetectionInfo", description = "변화탐지정보") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ChangeDetectionInfo { + + @Schema(description = "도엽번호정보", example = "남해") + private String mapSheetInfo; + + @Schema(description = "변화탐지연도", example = "2022-2023") + private String detectionYear; + + @Schema(description = "변화 전 분류 정보") + private ClassificationInfo beforeClass; + + @Schema(description = "변화 후 분류 정보") + private ClassificationInfo afterClass; + + @Schema(description = "면적 (㎡)", example = "179.52") + private Double area; + + @Schema(description = "탐지정확도 (%)", example = "84.8") + private Double detectionAccuracy; + + @Schema(description = "PNU (필지고유번호)", example = "36221202306020") + private Long pnu; + } + + @Schema(name = "ClassificationInfo", description = "분류정보") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ClassificationInfo { + + @Schema(description = "분류", example = "일반토지") + private String classification; + + @Schema(description = "확률", example = "80.0") + private Double probability; + } + + @Schema(name = "InspectionResultInfo", description = "실태조사결과정보") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class InspectionResultInfo { + + @Schema(description = "검증결과 (미확인/제외/완료)", example = "미확인") + private String verificationResult; + + @Schema(description = "부적합사유") + private String inappropriateReason; + + @Schema(description = "메모") + private String memo; + } + + @Schema(name = "SummaryRes", description = "작업 통계 응답") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class SummaryRes { + + @Schema(description = "전체 배정 건수", example = "8901") + private Long totalCnt; + + @Schema(description = "미작업 건수 (UNCONFIRM 상태)", example = "7211") + private Long undoneCnt; + + @Schema(description = "오늘 완료 건수", example = "0") + private Long todayCnt; + } + + @Schema(name = "DefaultPaging", description = "페이징 기본 number, uuid 전달") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class DefaultPaging { + + private int page; + private UUID operatorUid; + } + + @Schema(name = "NewPolygonRequest", description = "새로운 polygon(들) 추가 저장") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class NewPolygonRequest { + + @Schema(description = "operatorUid", example = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") + private String operatorUid; + + @Schema(description = "anal_uid", example = "53") + private Long analUid; + + @Schema(description = "map_sheet_num (도엽번호)", example = "35905086") + private String mapSheetNum; + + @Schema(description = "compare_yyyy (변화 전 년도)", example = "2023") + private Integer compareYyyy; + + @Schema(description = "target_yyyy (변화 후 년도)", example = "2024") + private Integer targetYyyy; + + @Schema(description = "새로 그린 polygon 리스트") + private List features; + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class PolygonFeature { + + @Schema(description = "type", example = "Feature") + private String type; + + @JsonDeserialize(using = GeometryDeserializer.class) + @Schema( + description = "polygon geometry", + example = + """ + { + "type": "Polygon", + "coordinates": [ + [ + [ + 126.66292461969202, + 34.58785236216609 + ], + [ + 126.66263801099049, + 34.58740117447532 + ], + [ + 126.66293668521236, + 34.5873904146878 + ], + [ + 126.66312820122245, + 34.587841464427825 + ], + [ + 126.66289124481979, + 34.58786048381633 + ], + [ + 126.66292461969202, + 34.58785236216609 + ] + ] + ] + } + """) + private Geometry geometry; + + @Schema(description = "polygon properties") + private PolygonProperties properties; + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class PolygonProperties { + + @Schema(description = "beforeClass", example = "WASTE") + private String beforeClass; + + @Schema(description = "afterClass", example = "LAND") + private String afterClass; + } + } + } + + @Schema(name = "CogImageRequest", description = "COG 이미지 조회 요청") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class CogImageRequest { + + @Schema(description = "map_sheet_num (도엽번호)", example = "NI52-3-13-1", required = true) + private String mapSheetNum; + + @Schema(description = "year (년도)", example = "2022", required = true) + private Integer year; + } + + @Schema(name = "CogImageResponse", description = "COG 이미지 URL 응답") + @Getter + @Setter + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class CogImageResponse { + + @Schema(description = "변화 전 COG 이미지 URL") + private String beforeCogUrl; + + @Schema(description = "변화 후 COG 이미지 URL") + private String afterCogUrl; + + @Schema(description = "변화 전 년도") + private Integer beforeYear; + + @Schema(description = "변화 후 년도") + private Integer afterYear; + + @Schema(description = "도엽번호") + private String mapSheetNum; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataLabelService.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataLabelService.java index f2d7b9ab..159e3d2a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataLabelService.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataLabelService.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.trainingdata.service; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; import com.kamco.cd.kamcoback.postgres.core.TrainingDataLabelCoreService; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.GeoFeatureRequest; @@ -87,4 +88,30 @@ public class TrainingDataLabelService { public DefaultPaging getDefaultPagingNumber(String userId, Integer size, String assignmentUid) { return trainingDataLabelCoreService.getDefaultPagingNumber(userId, size, assignmentUid); } + + /** + * 새로운 polygon(들) 추가 저장 + * + * @param request 새 polygon 정보 (여러 개 가능) + * @return 응답 메시지 + */ + @Transactional + public ResponseObj saveNewPolygon(TrainingDataLabelDto.NewPolygonRequest request) { + trainingDataLabelCoreService.saveNewPolygon(request); + int count = request.getFeatures() != null ? request.getFeatures().size() : 0; + return new ResponseObj(ApiResponseCode.OK, count + "개의 polygon이 저장되었습니다."); + } + + /** + * COG 이미지 URL 조회 (변화 전/후) + * + * @param mapSheetNum 도엽번호 + * @param beforeYear 변화 전 년도 + * @param afterYear 변화 후 년도 + * @return 변화 전/후 COG 이미지 URL + */ + public TrainingDataLabelDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear) { + return trainingDataLabelCoreService.getCogImageUrl(mapSheetNum, beforeYear, afterYear); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataReviewService.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataReviewService.java new file mode 100644 index 00000000..067fea66 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/service/TrainingDataReviewService.java @@ -0,0 +1,119 @@ +package com.kamco.cd.kamcoback.trainingdata.service; + +import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; +import com.kamco.cd.kamcoback.postgres.core.TrainingDataReviewCoreService; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.GeoFeatureRequest; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewGeometryInfo; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewListDto; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.SummaryRes; +import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.searchReq; +import jakarta.transaction.Transactional; +import java.util.UUID; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class TrainingDataReviewService { + + private final TrainingDataReviewCoreService trainingDataReviewCoreService; + + public TrainingDataReviewService(TrainingDataReviewCoreService trainingDataReviewCoreService) { + this.trainingDataReviewCoreService = trainingDataReviewCoreService; + } + + public Page findReviewAssignedList(searchReq searchReq, String userId) { + return trainingDataReviewCoreService.findReviewAssignedList(searchReq, userId); + } + + public ReviewGeometryInfo findReviewAssignedGeom(String operatorUid) { + return trainingDataReviewCoreService.findReviewAssignedGeom(operatorUid); + } + + @Transactional + public ResponseObj saveReviewFeature(GeoFeatureRequest request) { + String status = ""; + String operatorUid = request.getOperatorUid(); + Long inferenceGeomUid = trainingDataReviewCoreService.findReviewOperatorGeoUid(operatorUid); + + if (request.getGeometry() == null || request.getGeometry().isEmpty()) { + // EXCEPT 상태만 업데이트 + status = "EXCEPT"; + trainingDataReviewCoreService.updateReviewStateOperator( + operatorUid, status, request.getProperties().getInspectMemo()); + trainingDataReviewCoreService.updateReviewExceptState(inferenceGeomUid, status); + } else { + status = "COMPLETE"; + trainingDataReviewCoreService.updateReviewStateOperator( + operatorUid, status, request.getProperties().getInspectMemo()); + trainingDataReviewCoreService.updateReviewPolygonClass( + inferenceGeomUid, request.getGeometry(), request.getProperties(), status); + } + return new ResponseObj(ApiResponseCode.OK, "저장되었습니다."); + } + + /** + * 검수자별 작업 통계 조회 + * + * @param userId 검수자 사번 + * @return 전체/미작업/Today 건수 + */ + public SummaryRes getSummary(String userId) { + try { + System.out.println("[Service] getSummary called with userId: " + userId); + SummaryRes result = trainingDataReviewCoreService.getSummary(userId); + System.out.println("[Service] getSummary result: " + result); + return result; + } catch (Exception e) { + System.err.println("[Service] getSummary ERROR: " + e.getMessage()); + e.printStackTrace(); + // 예외 발생 시에도 빈 통계 반환 + return SummaryRes.builder().totalCnt(0L).undoneCnt(0L).todayCnt(0L).build(); + } + } + + /** + * 검수 작업 상세 정보 조회 + * + * @param operatorUid 검수 작업 ID + * @return 변화탐지정보 + 실태조사결과정보 + */ + public DetailRes getDetail(UUID operatorUid) { + return trainingDataReviewCoreService.getDetail(operatorUid); + } + + public DefaultPaging getDefaultPagingNumber(String userId, Integer size, String operatorUid) { + return trainingDataReviewCoreService.getDefaultPagingNumber(userId, size, operatorUid); + } + + /** + * 새로운 polygon(들) 추가 저장 + * + * @param request 새 polygon 정보 (여러 개 가능) + * @return 응답 메시지 + */ + @Transactional + public ResponseObj saveNewPolygon(TrainingDataReviewDto.NewPolygonRequest request) { + trainingDataReviewCoreService.saveNewPolygon(request); + int count = request.getFeatures() != null ? request.getFeatures().size() : 0; + return new ResponseObj(ApiResponseCode.OK, count + "개의 polygon이 저장되었습니다."); + } + + /** + * COG 이미지 URL 조회 (변화 전/후) + * + * @param mapSheetNum 도엽번호 + * @param beforeYear 변화 전 년도 + * @param afterYear 변화 후 년도 + * @return 변화 전/후 COG 이미지 URL + */ + public TrainingDataReviewDto.CogImageResponse getCogImageUrl( + String mapSheetNum, Integer beforeYear, Integer afterYear) { + return trainingDataReviewCoreService.getCogImageUrl(mapSheetNum, beforeYear, afterYear); + } +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 369ed2c4..f23245c9 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -6,7 +6,7 @@ spring: jpa: show-sql: false hibernate: - ddl-auto: validate # 로컬만 완화(시킬려면 update으로 변경) + ddl-auto: update # 로컬만 완화(시킬려면 update으로 변경) properties: hibernate: default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지 diff --git a/src/main/resources/db/migration/dump-kamco_cds-202601132249.sql b/src/main/resources/db/migration/dump-kamco_cds-202601132249.sql new file mode 100644 index 00000000..b3535698 --- /dev/null +++ b/src/main/resources/db/migration/dump-kamco_cds-202601132249.sql @@ -0,0 +1,10540 @@ +-- +-- PostgreSQL database dump +-- + +\restrict o7JveaMl3BOBWLIUfXrrvlHh4CDykDyey2eRm6Q7nfSa2cPgfQjV2lpA0Ds4zGu + +-- Dumped from database version 18.1 +-- Dumped by pg_dump version 18.1 + +-- Started on 2026-01-13 22:49:37 KST + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- TOC entry 10 (class 2615 OID 46475) +-- Name: topology; Type: SCHEMA; Schema: -; Owner: kamco_cds +-- + +CREATE SCHEMA topology; + + +ALTER SCHEMA topology OWNER TO kamco_cds; + +-- +-- TOC entry 5628 (class 0 OID 0) +-- Dependencies: 10 +-- Name: SCHEMA topology; Type: COMMENT; Schema: -; Owner: kamco_cds +-- + +COMMENT ON SCHEMA topology IS 'PostGIS Topology schema'; + + +-- +-- TOC entry 2 (class 3079 OID 46476) +-- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public; + + +-- +-- TOC entry 5629 (class 0 OID 0) +-- Dependencies: 2 +-- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions'; + + +-- +-- TOC entry 3 (class 3079 OID 46514) +-- Name: postgis; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public; + + +-- +-- TOC entry 5630 (class 0 OID 0) +-- Dependencies: 3 +-- Name: EXTENSION postgis; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION postgis IS 'PostGIS geometry and geography spatial types and functions'; + + +-- +-- TOC entry 4 (class 3079 OID 47596) +-- Name: postgis_topology; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS postgis_topology WITH SCHEMA topology; + + +-- +-- TOC entry 5631 (class 0 OID 0) +-- Dependencies: 4 +-- Name: EXTENSION postgis_topology; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION postgis_topology IS 'PostGIS topology spatial types and functions'; + + +-- +-- TOC entry 5 (class 3079 OID 47783) +-- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public; + + +-- +-- TOC entry 5632 (class 0 OID 0) +-- Dependencies: 5 +-- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; + + +-- +-- TOC entry 427 (class 1255 OID 47794) +-- Name: fn_code_name(character varying, character varying); Type: FUNCTION; Schema: public; Owner: kamco_cds +-- + +CREATE FUNCTION public.fn_code_name(p_parent_code_cd character varying, p_child_code_cd character varying) RETURNS text + LANGUAGE plpgsql + AS $$ +DECLARE + v_child_name TEXT; +BEGIN + SELECT child.cd_nm + INTO v_child_name + FROM tb_cm_cd child + JOIN tb_cm_cd parent + ON child.parent_id = parent.code_id + AND parent.code_cd = p_parent_code_cd + WHERE child.code_cd = p_child_code_cd + LIMIT 1; + + RETURN v_child_name; +END; +$$; + + +ALTER FUNCTION public.fn_code_name(p_parent_code_cd character varying, p_child_code_cd character varying) OWNER TO kamco_cds; + +-- +-- TOC entry 1018 (class 1255 OID 47795) +-- Name: fn_codenm_to_misc(bigint, character varying); Type: FUNCTION; Schema: public; Owner: kamco_cds +-- + +CREATE FUNCTION public.fn_codenm_to_misc(p_parent_code_cd bigint, p_misc_cd character varying) RETURNS text + LANGUAGE plpgsql + AS $$ +DECLARE + v_code_name TEXT; +BEGIN + SELECT cd_nm INTO v_code_name + FROM tb_cm_cd + WHERE parent_id = p_parent_code_cd + AND misc_cd = p_misc_cd + LIMIT 1; + + RETURN v_code_name; +END; +$$; + + +ALTER FUNCTION public.fn_codenm_to_misc(p_parent_code_cd bigint, p_misc_cd character varying) OWNER TO kamco_cds; + +-- +-- TOC entry 394 (class 1255 OID 47796) +-- Name: fn_codenm_to_misc(character varying, character varying); Type: FUNCTION; Schema: public; Owner: kamco_cds +-- + +CREATE FUNCTION public.fn_codenm_to_misc(p_parent_code_cd character varying, p_misc_cd character varying) RETURNS text + LANGUAGE plpgsql + AS $$ +DECLARE + v_code_name TEXT; +BEGIN + SELECT cd_nm INTO v_code_name + FROM tb_cm_cd + WHERE parent_id = p_parent_code_cd + AND misc_cd = p_misc_cd + LIMIT 1; + + RETURN v_code_name; +END; +$$; + + +ALTER FUNCTION public.fn_codenm_to_misc(p_parent_code_cd character varying, p_misc_cd character varying) OWNER TO kamco_cds; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- TOC entry 259 (class 1259 OID 72111) +-- Name: demo_learning_analysis_scene_item; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.demo_learning_analysis_scene_item ( + group_item_id bigint NOT NULL, + group_id bigint NOT NULL, + fid bigint NOT NULL, + created_dttm timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.demo_learning_analysis_scene_item OWNER TO kamco_cds; + +-- +-- TOC entry 5633 (class 0 OID 0) +-- Dependencies: 259 +-- Name: TABLE demo_learning_analysis_scene_item; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.demo_learning_analysis_scene_item IS '그룹과 tb_map_inkx_5k 항목을 연결하는 테이블'; + + +-- +-- TOC entry 5634 (class 0 OID 0) +-- Dependencies: 259 +-- Name: COLUMN demo_learning_analysis_scene_item.group_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.demo_learning_analysis_scene_item.group_id IS '연결된 그룹 ID'; + + +-- +-- TOC entry 5635 (class 0 OID 0) +-- Dependencies: 259 +-- Name: COLUMN demo_learning_analysis_scene_item.fid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.demo_learning_analysis_scene_item.fid IS 'tb_map_inkx_5k 테이블의 항목 ID'; + + +-- +-- TOC entry 260 (class 1259 OID 72118) +-- Name: demo_learning_analysis_scene_item_group_item_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.demo_learning_analysis_scene_item_group_item_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.demo_learning_analysis_scene_item_group_item_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5636 (class 0 OID 0) +-- Dependencies: 260 +-- Name: demo_learning_analysis_scene_item_group_item_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.demo_learning_analysis_scene_item_group_item_id_seq OWNED BY public.demo_learning_analysis_scene_item.group_item_id; + + +-- +-- TOC entry 261 (class 1259 OID 72119) +-- Name: demo_learning_analysis_scene_list; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.demo_learning_analysis_scene_list ( + group_id bigint NOT NULL, + group_name character varying(255), + description text, + created_dttm timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.demo_learning_analysis_scene_list OWNER TO kamco_cds; + +-- +-- TOC entry 5637 (class 0 OID 0) +-- Dependencies: 261 +-- Name: TABLE demo_learning_analysis_scene_list; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.demo_learning_analysis_scene_list IS 'tb_map_inkx_5k의 항목들을 묶어놓은 그룹의 정의 리스트'; + + +-- +-- TOC entry 5638 (class 0 OID 0) +-- Dependencies: 261 +-- Name: COLUMN demo_learning_analysis_scene_list.group_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.demo_learning_analysis_scene_list.group_id IS '그룹의 고유 식별자'; + + +-- +-- TOC entry 5639 (class 0 OID 0) +-- Dependencies: 261 +-- Name: COLUMN demo_learning_analysis_scene_list.group_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.demo_learning_analysis_scene_list.group_name IS '그룹 이름 (예: 서울그룹, 서울경기그룹)'; + + +-- +-- TOC entry 262 (class 1259 OID 72126) +-- Name: demo_learning_analysis_scene_list_group_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.demo_learning_analysis_scene_list_group_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.demo_learning_analysis_scene_list_group_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5640 (class 0 OID 0) +-- Dependencies: 262 +-- Name: demo_learning_analysis_scene_list_group_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.demo_learning_analysis_scene_list_group_id_seq OWNED BY public.demo_learning_analysis_scene_list.group_id; + + +-- +-- TOC entry 263 (class 1259 OID 72127) +-- Name: demo_learning_analysis_summary; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.demo_learning_analysis_summary ( + id bigint NOT NULL, + uuid uuid DEFAULT gen_random_uuid(), + name character varying(100), + analysis_status character varying(100), + created_dttm timestamp with time zone DEFAULT now(), + updated_dttm timestamp with time zone DEFAULT now(), + scene_list_id bigint, + before_year integer, + after_year integer, + model_version character varying(10) +); + + +ALTER TABLE public.demo_learning_analysis_summary OWNER TO kamco_cds; + +-- +-- TOC entry 264 (class 1259 OID 72134) +-- Name: demo_learning_analysis_summary_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.demo_learning_analysis_summary_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.demo_learning_analysis_summary_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5641 (class 0 OID 0) +-- Dependencies: 264 +-- Name: demo_learning_analysis_summary_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.demo_learning_analysis_summary_id_seq OWNED BY public.demo_learning_analysis_summary.id; + + +-- +-- TOC entry 235 (class 1259 OID 47821) +-- Name: seq_detect_mast_id; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.seq_detect_mast_id + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.seq_detect_mast_id OWNER TO kamco_cds; + +-- +-- TOC entry 5642 (class 0 OID 0) +-- Dependencies: 235 +-- Name: SEQUENCE seq_detect_mast_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON SEQUENCE public.seq_detect_mast_id IS 'detect_mast 테이블용 시퀀스'; + + +-- +-- TOC entry 265 (class 1259 OID 72135) +-- Name: detect_mast; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.detect_mast ( + dtct_mst_id bigint DEFAULT nextval('public.seq_detect_mast_id'::regclass) NOT NULL, + dtct_mst_uuid uuid DEFAULT gen_random_uuid() NOT NULL, + cprs_bf_yr character varying(4) NOT NULL, + cprs_ad_yr character varying(4) NOT NULL, + dtct_sno integer NOT NULL, + path_nm text NOT NULL, + feature_id character varying(50), + crt_epno character varying(30) NOT NULL, + crt_ip character varying(45) NOT NULL, + crt_dttm timestamp with time zone DEFAULT now() NOT NULL, + chg_epno character varying(30), + chg_ip character varying(45), + chg_dttm timestamp with time zone +); + + +ALTER TABLE public.detect_mast OWNER TO kamco_cds; + +-- +-- TOC entry 5643 (class 0 OID 0) +-- Dependencies: 265 +-- Name: TABLE detect_mast; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.detect_mast IS '변화 탐지 마스터 정보 이노펨 mockup 테이블'; + + +-- +-- TOC entry 5644 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.dtct_mst_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.dtct_mst_id IS '변화 탐지 마스터 ID (시퀀스)'; + + +-- +-- TOC entry 5645 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.dtct_mst_uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.dtct_mst_uuid IS '변화 탐지 마스터 UUID'; + + +-- +-- TOC entry 5646 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.cprs_bf_yr; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.cprs_bf_yr IS '비교 전 연도'; + + +-- +-- TOC entry 5647 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.cprs_ad_yr; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.cprs_ad_yr IS '비교 후 연도'; + + +-- +-- TOC entry 5648 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.dtct_sno; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.dtct_sno IS '탐지 순번'; + + +-- +-- TOC entry 5649 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.path_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.path_nm IS '결과 파일 경로명'; + + +-- +-- TOC entry 5650 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.feature_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.feature_id IS 'Feature 식별자'; + + +-- +-- TOC entry 5651 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.crt_epno; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.crt_epno IS '생성자 사번'; + + +-- +-- TOC entry 5652 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.crt_ip; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.crt_ip IS '생성자 IP'; + + +-- +-- TOC entry 5653 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.crt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.crt_dttm IS '생성 일시'; + + +-- +-- TOC entry 5654 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.chg_epno; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.chg_epno IS '수정자 사번'; + + +-- +-- TOC entry 5655 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.chg_ip; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.chg_ip IS '수정자 IP'; + + +-- +-- TOC entry 5656 (class 0 OID 0) +-- Dependencies: 265 +-- Name: COLUMN detect_mast.chg_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast.chg_dttm IS '수정 일시'; + + +-- +-- TOC entry 258 (class 1259 OID 61611) +-- Name: seq_detect_mast_pnu_id; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.seq_detect_mast_pnu_id + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.seq_detect_mast_pnu_id OWNER TO kamco_cds; + +-- +-- TOC entry 266 (class 1259 OID 72152) +-- Name: detect_mast_pnu; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.detect_mast_pnu ( + dtct_mst_pnu_id bigint DEFAULT nextval('public.seq_detect_mast_pnu_id'::regclass) NOT NULL, + detect_mast_pnu_uuid uuid DEFAULT gen_random_uuid() NOT NULL, + dtct_mst_id bigint NOT NULL, + pnu character varying(4) NOT NULL, + polygon text +); + + +ALTER TABLE public.detect_mast_pnu OWNER TO kamco_cds; + +-- +-- TOC entry 5657 (class 0 OID 0) +-- Dependencies: 266 +-- Name: TABLE detect_mast_pnu; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.detect_mast_pnu IS '변화 탐지 pnu 정보 이노펨 mockup 테이블'; + + +-- +-- TOC entry 5658 (class 0 OID 0) +-- Dependencies: 266 +-- Name: COLUMN detect_mast_pnu.dtct_mst_pnu_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast_pnu.dtct_mst_pnu_id IS ' ID (시퀀스)'; + + +-- +-- TOC entry 5659 (class 0 OID 0) +-- Dependencies: 266 +-- Name: COLUMN detect_mast_pnu.detect_mast_pnu_uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast_pnu.detect_mast_pnu_uuid IS ' UUID'; + + +-- +-- TOC entry 5660 (class 0 OID 0) +-- Dependencies: 266 +-- Name: COLUMN detect_mast_pnu.dtct_mst_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast_pnu.dtct_mst_id IS '변화탐지 마스터 id'; + + +-- +-- TOC entry 5661 (class 0 OID 0) +-- Dependencies: 266 +-- Name: COLUMN detect_mast_pnu.pnu; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast_pnu.pnu IS 'pnu'; + + +-- +-- TOC entry 5662 (class 0 OID 0) +-- Dependencies: 266 +-- Name: COLUMN detect_mast_pnu.polygon; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.detect_mast_pnu.polygon IS 'polygon'; + + +-- +-- TOC entry 267 (class 1259 OID 72163) +-- Name: gpu_metrics; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.gpu_metrics ( + id integer NOT NULL, + "timestamp" timestamp with time zone DEFAULT now() NOT NULL, + server_name text NOT NULL, + gpu_util real, + gpu_mem_used real, + gpu_mem_total real, + uuid uuid DEFAULT gen_random_uuid() NOT NULL +); + + +ALTER TABLE public.gpu_metrics OWNER TO kamco_cds; + +-- +-- TOC entry 5663 (class 0 OID 0) +-- Dependencies: 267 +-- Name: TABLE gpu_metrics; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.gpu_metrics IS 'GPU 자원 사용량 메트릭'; + + +-- +-- TOC entry 5664 (class 0 OID 0) +-- Dependencies: 267 +-- Name: COLUMN gpu_metrics.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.gpu_metrics.id IS '메트릭 ID (PK)'; + + +-- +-- TOC entry 5665 (class 0 OID 0) +-- Dependencies: 267 +-- Name: COLUMN gpu_metrics."timestamp"; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.gpu_metrics."timestamp" IS '수집 시간'; + + +-- +-- TOC entry 5666 (class 0 OID 0) +-- Dependencies: 267 +-- Name: COLUMN gpu_metrics.server_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.gpu_metrics.server_name IS '서버 명칭'; + + +-- +-- TOC entry 5667 (class 0 OID 0) +-- Dependencies: 267 +-- Name: COLUMN gpu_metrics.gpu_util; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.gpu_metrics.gpu_util IS 'GPU 사용률 (%)'; + + +-- +-- TOC entry 5668 (class 0 OID 0) +-- Dependencies: 267 +-- Name: COLUMN gpu_metrics.gpu_mem_used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.gpu_metrics.gpu_mem_used IS 'GPU 메모리 사용량 (MB/GB)'; + + +-- +-- TOC entry 5669 (class 0 OID 0) +-- Dependencies: 267 +-- Name: COLUMN gpu_metrics.gpu_mem_total; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.gpu_metrics.gpu_mem_total IS 'GPU 전체 메모리 용량'; + + +-- +-- TOC entry 268 (class 1259 OID 72174) +-- Name: gpu_metrics_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.gpu_metrics_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.gpu_metrics_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5670 (class 0 OID 0) +-- Dependencies: 268 +-- Name: gpu_metrics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.gpu_metrics_id_seq OWNED BY public.gpu_metrics.id; + + +-- +-- TOC entry 269 (class 1259 OID 72175) +-- Name: imagery; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.imagery ( + id bigint NOT NULL, + uuid uuid DEFAULT gen_random_uuid(), + year integer, + scene_50k character varying(5), + scene_5k character varying(8), + scene_id_50k integer, + scene_id_5k integer, + created_date timestamp with time zone DEFAULT now(), + middle_path character varying(400), + cog_middle_path character varying(400), + filename character varying(1000), + cog_filename character varying(1000) +); + + +ALTER TABLE public.imagery OWNER TO kamco_cds; + +-- +-- TOC entry 5671 (class 0 OID 0) +-- Dependencies: 269 +-- Name: TABLE imagery; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.imagery IS '항공 및 위성 영상 메타데이터 관리'; + + +-- +-- TOC entry 5672 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.id IS '영상 ID (PK)'; + + +-- +-- TOC entry 5673 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.uuid IS '영상 UUID'; + + +-- +-- TOC entry 5674 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.year IS '촬영 및 제작 연도'; + + +-- +-- TOC entry 5675 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.scene_50k; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.scene_50k IS '5만 도엽 번호'; + + +-- +-- TOC entry 5676 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.scene_5k; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.scene_5k IS '5천 도엽 번호'; + + +-- +-- TOC entry 5677 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.scene_id_50k; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.scene_id_50k IS '5만 도엽 식별자'; + + +-- +-- TOC entry 5678 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.scene_id_5k; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.scene_id_5k IS '5천 도엽 식별자'; + + +-- +-- TOC entry 5679 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.created_date; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.created_date IS '등록 일시'; + + +-- +-- TOC entry 5680 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.middle_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.middle_path IS '영상 중간 경로'; + + +-- +-- TOC entry 5681 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.cog_middle_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.cog_middle_path IS 'COG(Cloud Optimized GeoTIFF) 경로'; + + +-- +-- TOC entry 5682 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.filename; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.filename IS '영상 파일명'; + + +-- +-- TOC entry 5683 (class 0 OID 0) +-- Dependencies: 269 +-- Name: COLUMN imagery.cog_filename; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.imagery.cog_filename IS 'Cloud Optimized GeoTIFF 파일명'; + + +-- +-- TOC entry 270 (class 1259 OID 72183) +-- Name: imagery_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.imagery_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.imagery_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5684 (class 0 OID 0) +-- Dependencies: 270 +-- Name: imagery_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.imagery_id_seq OWNED BY public.imagery.id; + + +-- +-- TOC entry 271 (class 1259 OID 72184) +-- Name: inference_results; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.inference_results ( + uid bigint NOT NULL, + uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL, + stage integer, + cd_prob real, + input1 integer, + input2 integer, + map_id bigint, + before_class character varying(20), + before_probability real, + after_class character varying(20), + after_probability real, + geometry public.geometry(Polygon,5186) NOT NULL, + area double precision GENERATED ALWAYS AS (public.st_area(geometry)) STORED, + created_dttm timestamp with time zone DEFAULT now() NOT NULL, + updated_dttm timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.inference_results OWNER TO kamco_cds; + +-- +-- TOC entry 5685 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.uid IS 'Auto-incrementing primary key'; + + +-- +-- TOC entry 5686 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.uuid IS 'Universally unique identifier'; + + +-- +-- TOC entry 5687 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.stage; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.stage IS 'Processing pipeline version (e.g., v4)'; + + +-- +-- TOC entry 5688 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.cd_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.cd_prob IS 'Change detection probability (0-100)'; + + +-- +-- TOC entry 5689 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.input1; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.input1 IS 'First temporal input (year)'; + + +-- +-- TOC entry 5690 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.input2; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.input2 IS 'Second temporal input (year)'; + + +-- +-- TOC entry 5691 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.map_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.map_id IS 'Reference to map tile or cadastral parcel'; + + +-- +-- TOC entry 5692 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.before_class; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.before_class IS 'Land use class before change'; + + +-- +-- TOC entry 5693 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.before_probability; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.before_probability IS 'Classification confidence before change'; + + +-- +-- TOC entry 5694 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.after_class; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.after_class IS 'Land use class after change'; + + +-- +-- TOC entry 5695 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.after_probability; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.after_probability IS 'Classification confidence after change'; + + +-- +-- TOC entry 5696 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.geometry; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.geometry IS 'Polygon geometry in EPSG:5186'; + + +-- +-- TOC entry 5697 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.area; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.area IS 'Calculated area in square meters'; + + +-- +-- TOC entry 5698 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.created_dttm IS 'Record creation timestamp'; + + +-- +-- TOC entry 5699 (class 0 OID 0) +-- Dependencies: 271 +-- Name: COLUMN inference_results.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results.updated_dttm IS 'Last modification timestamp'; + + +-- +-- TOC entry 272 (class 1259 OID 72198) +-- Name: inference_results_noor; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.inference_results_noor ( + uid bigint NOT NULL, + uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL, + stage integer, + cd_prob real, + input1 integer, + input2 integer, + map_id bigint, + before_class character varying(20), + before_probability real, + after_class character varying(20), + after_probability real, + geometry public.geometry(Polygon,5186) NOT NULL, + area double precision GENERATED ALWAYS AS (public.st_area(geometry)) STORED, + created_dttm timestamp with time zone DEFAULT now() NOT NULL, + updated_dttm timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.inference_results_noor OWNER TO kamco_cds; + +-- +-- TOC entry 5700 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.uid IS 'Auto-incrementing primary key'; + + +-- +-- TOC entry 5701 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.uuid IS 'Universally unique identifier'; + + +-- +-- TOC entry 5702 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.stage; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.stage IS 'Processing pipeline version (e.g., v4)'; + + +-- +-- TOC entry 5703 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.cd_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.cd_prob IS 'Change detection probability (0-100)'; + + +-- +-- TOC entry 5704 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.input1; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.input1 IS 'First temporal input (year)'; + + +-- +-- TOC entry 5705 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.input2; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.input2 IS 'Second temporal input (year)'; + + +-- +-- TOC entry 5706 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.map_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.map_id IS 'Reference to map tile or cadastral parcel'; + + +-- +-- TOC entry 5707 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.before_class; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.before_class IS 'Land use class before change'; + + +-- +-- TOC entry 5708 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.before_probability; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.before_probability IS 'Classification confidence before change'; + + +-- +-- TOC entry 5709 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.after_class; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.after_class IS 'Land use class after change'; + + +-- +-- TOC entry 5710 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.after_probability; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.after_probability IS 'Classification confidence after change'; + + +-- +-- TOC entry 5711 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.geometry; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.geometry IS 'Polygon geometry in EPSG:5186'; + + +-- +-- TOC entry 5712 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.area; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.area IS 'Calculated area in square meters'; + + +-- +-- TOC entry 5713 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.created_dttm IS 'Record creation timestamp'; + + +-- +-- TOC entry 5714 (class 0 OID 0) +-- Dependencies: 272 +-- Name: COLUMN inference_results_noor.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_noor.updated_dttm IS 'Last modification timestamp'; + + +-- +-- TOC entry 273 (class 1259 OID 72212) +-- Name: inference_results_noor_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.inference_results_noor_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.inference_results_noor_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5715 (class 0 OID 0) +-- Dependencies: 273 +-- Name: inference_results_noor_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.inference_results_noor_uid_seq OWNED BY public.inference_results_noor.uid; + + +-- +-- TOC entry 274 (class 1259 OID 72213) +-- Name: inference_results_testing; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.inference_results_testing ( + geometry public.geometry(Polygon,5186), + probability double precision, + before_year bigint, + after_year bigint, + map_id text, + source_1 text, + source_2 text, + model_version text, + cls_model_path text, + cls_model_version text, + cd_model_type text, + id bigint, + model_name text, + batch_id bigint, + area double precision, + cd_prob double precision, + before_c text, + before_p double precision, + after_c text, + after_p double precision, + input1 bigint, + input2 bigint, + uid uuid DEFAULT public.uuid_generate_v4() NOT NULL, + seq bigint NOT NULL, + created_date timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.inference_results_testing OWNER TO kamco_cds; + +-- +-- TOC entry 5716 (class 0 OID 0) +-- Dependencies: 274 +-- Name: TABLE inference_results_testing; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.inference_results_testing IS 'AI 추론 결과 테스트용 임시 데이터'; + + +-- +-- TOC entry 5717 (class 0 OID 0) +-- Dependencies: 274 +-- Name: COLUMN inference_results_testing.probability; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_testing.probability IS '추론 확률'; + + +-- +-- TOC entry 5718 (class 0 OID 0) +-- Dependencies: 274 +-- Name: COLUMN inference_results_testing.before_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_testing.before_year IS '이전 시점 연도'; + + +-- +-- TOC entry 5719 (class 0 OID 0) +-- Dependencies: 274 +-- Name: COLUMN inference_results_testing.after_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_testing.after_year IS '이후 시점 연도'; + + +-- +-- TOC entry 5720 (class 0 OID 0) +-- Dependencies: 274 +-- Name: COLUMN inference_results_testing.model_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_testing.model_name IS '모델명'; + + +-- +-- TOC entry 5721 (class 0 OID 0) +-- Dependencies: 274 +-- Name: COLUMN inference_results_testing.area; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_testing.area IS '탐지 지역 면적'; + + +-- +-- TOC entry 5722 (class 0 OID 0) +-- Dependencies: 274 +-- Name: COLUMN inference_results_testing.cd_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.inference_results_testing.cd_prob IS '변화탐지(Change Detection) 확률'; + + +-- +-- TOC entry 275 (class 1259 OID 72222) +-- Name: inference_results_testing_seq_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.inference_results_testing_seq_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.inference_results_testing_seq_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5723 (class 0 OID 0) +-- Dependencies: 275 +-- Name: inference_results_testing_seq_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.inference_results_testing_seq_seq OWNED BY public.inference_results_testing.seq; + + +-- +-- TOC entry 276 (class 1259 OID 72223) +-- Name: inference_results_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.inference_results_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.inference_results_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5724 (class 0 OID 0) +-- Dependencies: 276 +-- Name: inference_results_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.inference_results_uid_seq OWNED BY public.inference_results.uid; + + +-- +-- TOC entry 236 (class 1259 OID 47897) +-- Name: inference_sample_test_2021_2022; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.inference_sample_test_2021_2022 ( + id integer, + geom public.geometry(Polygon,5186), + original_fid bigint, + area_meters character varying, + data_category character varying, + before_year character varying, + after_year character varying, + map_id character varying, + source_1 character varying, + source_2 character varying, + probability character varying, + class_id character varying, + score character varying, + dissolved_geom public.geometry, + dissolved_area double precision +); + + +ALTER TABLE public.inference_sample_test_2021_2022 OWNER TO kamco_cds; + +-- +-- TOC entry 237 (class 1259 OID 47902) +-- Name: inference_sample_test_2021_2022_intermediate; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.inference_sample_test_2021_2022_intermediate ( + id integer NOT NULL, + geom public.geometry(Polygon,5186), + original_fid bigint, + area_meters character varying, + data_category character varying, + before_year character varying, + after_year character varying, + map_id character varying, + source_1 character varying, + source_2 character varying, + probability character varying, + class_id character varying, + score character varying +); + + +ALTER TABLE public.inference_sample_test_2021_2022_intermediate OWNER TO kamco_cds; + +-- +-- TOC entry 238 (class 1259 OID 47908) +-- Name: inference_sample_test_2021_2022_intermediate_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.inference_sample_test_2021_2022_intermediate_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.inference_sample_test_2021_2022_intermediate_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5725 (class 0 OID 0) +-- Dependencies: 238 +-- Name: inference_sample_test_2021_2022_intermediate_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.inference_sample_test_2021_2022_intermediate_id_seq OWNED BY public.inference_sample_test_2021_2022_intermediate.id; + + +-- +-- TOC entry 277 (class 1259 OID 72224) +-- Name: overlapped_areas_roi; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.overlapped_areas_roi ( + id integer NOT NULL, + geom public.geometry(Polygon,5186), + fid bigint, + left_id integer, + right_id integer +); + + +ALTER TABLE public.overlapped_areas_roi OWNER TO kamco_cds; + +-- +-- TOC entry 5726 (class 0 OID 0) +-- Dependencies: 277 +-- Name: TABLE overlapped_areas_roi; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.overlapped_areas_roi IS '관심지역(ROI) 간의 중첩된 공간 정보 및 면적'; + + +-- +-- TOC entry 5727 (class 0 OID 0) +-- Dependencies: 277 +-- Name: COLUMN overlapped_areas_roi.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.overlapped_areas_roi.id IS '식별자 (PK)'; + + +-- +-- TOC entry 5728 (class 0 OID 0) +-- Dependencies: 277 +-- Name: COLUMN overlapped_areas_roi.geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.overlapped_areas_roi.geom IS '중첩 지역 폴리곤 (EPSG:5186)'; + + +-- +-- TOC entry 5729 (class 0 OID 0) +-- Dependencies: 277 +-- Name: COLUMN overlapped_areas_roi.fid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.overlapped_areas_roi.fid IS '원본 피처 ID'; + + +-- +-- TOC entry 5730 (class 0 OID 0) +-- Dependencies: 277 +-- Name: COLUMN overlapped_areas_roi.left_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.overlapped_areas_roi.left_id IS '중첩 비교 왼쪽 데이터 ID'; + + +-- +-- TOC entry 5731 (class 0 OID 0) +-- Dependencies: 277 +-- Name: COLUMN overlapped_areas_roi.right_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.overlapped_areas_roi.right_id IS '중첩 비교 오른쪽 데이터 ID'; + + +-- +-- TOC entry 278 (class 1259 OID 72230) +-- Name: overlapped_areas_roi_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.overlapped_areas_roi_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.overlapped_areas_roi_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5732 (class 0 OID 0) +-- Dependencies: 278 +-- Name: overlapped_areas_roi_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.overlapped_areas_roi_id_seq OWNED BY public.overlapped_areas_roi.id; + + +-- +-- TOC entry 279 (class 1259 OID 72231) +-- Name: system_metrics; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.system_metrics ( + id integer NOT NULL, + "timestamp" timestamp with time zone NOT NULL, + server_name text NOT NULL, + cpu_user real, + cpu_system real, + cpu_iowait real, + cpu_idle real, + kbmemfree bigint, + kbmemused bigint, + memused real, + uuid uuid DEFAULT gen_random_uuid() NOT NULL +); + + +ALTER TABLE public.system_metrics OWNER TO kamco_cds; + +-- +-- TOC entry 5733 (class 0 OID 0) +-- Dependencies: 279 +-- Name: TABLE system_metrics; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.system_metrics IS '시스템(CPU/MEM) 자원 사용량 메트릭'; + + +-- +-- TOC entry 5734 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.id IS '메트릭 ID (PK)'; + + +-- +-- TOC entry 5735 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics."timestamp"; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics."timestamp" IS '수집 시간'; + + +-- +-- TOC entry 5736 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.server_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.server_name IS '서버 명칭'; + + +-- +-- TOC entry 5737 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.cpu_user; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.cpu_user IS '사용자 CPU 사용률'; + + +-- +-- TOC entry 5738 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.cpu_system; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.cpu_system IS '시스템 CPU 사용률'; + + +-- +-- TOC entry 5739 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.cpu_iowait; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.cpu_iowait IS '입출력 대기 CPU 비율'; + + +-- +-- TOC entry 5740 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.cpu_idle; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.cpu_idle IS '유휴 CPU 비율'; + + +-- +-- TOC entry 5741 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.kbmemfree; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.kbmemfree IS '여유 메모리 (KB)'; + + +-- +-- TOC entry 5742 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.kbmemused; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.kbmemused IS '사용 메모리 (KB)'; + + +-- +-- TOC entry 5743 (class 0 OID 0) +-- Dependencies: 279 +-- Name: COLUMN system_metrics.memused; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.system_metrics.memused IS '메모리 사용률 (%)'; + + +-- +-- TOC entry 280 (class 1259 OID 72241) +-- Name: system_metrics_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.system_metrics_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.system_metrics_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5744 (class 0 OID 0) +-- Dependencies: 280 +-- Name: system_metrics_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.system_metrics_id_seq OWNED BY public.system_metrics.id; + + +-- +-- TOC entry 281 (class 1259 OID 72242) +-- Name: tb_animal; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_animal ( + uid bigint NOT NULL, + uuid uuid NOT NULL, + category character varying(255), + species character varying(255), + name character varying(255) NOT NULL, + is_deleted boolean DEFAULT false NOT NULL, + created_dttm timestamp with time zone NOT NULL, + updated_dttm timestamp with time zone NOT NULL, + zoo_id bigint +); + + +ALTER TABLE public.tb_animal OWNER TO kamco_cds; + +-- +-- TOC entry 5745 (class 0 OID 0) +-- Dependencies: 281 +-- Name: TABLE tb_animal; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_animal IS '동물원 동물 정보'; + + +-- +-- TOC entry 5746 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.uid IS '고유 식별자 (PK)'; + + +-- +-- TOC entry 5747 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.uuid IS 'UUID (Unique)'; + + +-- +-- TOC entry 5748 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.category; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.category IS '구분 (MAMMALS, BIRDS, FISH,AMPHIBIANS,REPTILES,INSECTS, INVERTEBRATES )'; + + +-- +-- TOC entry 5749 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.species; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.species IS '동물 종'; + + +-- +-- TOC entry 5750 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.name IS '동물 이름'; + + +-- +-- TOC entry 5751 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.is_deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.is_deleted IS '삭제 여부'; + + +-- +-- TOC entry 5752 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.created_dttm IS '생성일시'; + + +-- +-- TOC entry 5753 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 5754 (class 0 OID 0) +-- Dependencies: 281 +-- Name: COLUMN tb_animal.zoo_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_animal.zoo_id IS '동물원 ID (FK)'; + + +-- +-- TOC entry 282 (class 1259 OID 72254) +-- Name: tb_animal_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_animal_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_animal_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5755 (class 0 OID 0) +-- Dependencies: 282 +-- Name: tb_animal_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_animal_uid_seq OWNED BY public.tb_animal.uid; + + +-- +-- TOC entry 239 (class 1259 OID 47938) +-- Name: tb_audit_log_audit_log_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_audit_log_audit_log_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_audit_log_audit_log_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 283 (class 1259 OID 72255) +-- Name: tb_audit_log; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_audit_log ( + audit_log_uid bigint DEFAULT nextval('public.tb_audit_log_audit_log_uid_seq'::regclass) NOT NULL, + user_uid bigint, + event_type character varying(255) NOT NULL, + event_status character varying(255) NOT NULL, + menu_uid character varying(255), + ip_address character varying(255), + description text, + created_dttm timestamp with time zone DEFAULT now(), + error_log_uid bigint, + request_body character varying(255), + request_uri character varying(255) +); + + +ALTER TABLE public.tb_audit_log OWNER TO kamco_cds; + +-- +-- TOC entry 5756 (class 0 OID 0) +-- Dependencies: 283 +-- Name: TABLE tb_audit_log; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_audit_log IS '사용자 행위 감사 로그 (UI_CDSS_LM_01)'; + + +-- +-- TOC entry 5757 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.audit_log_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.audit_log_uid IS '감사 로그 UID (PK)'; + + +-- +-- TOC entry 5758 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.user_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.user_uid IS '행위자 UID (FK)'; + + +-- +-- TOC entry 5759 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.event_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.event_type IS '행위유형 (CREATE, READ,UPDATE,DELETE,DOWNLOAD,PRINT)'; + + +-- +-- TOC entry 5760 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.event_status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.event_status IS '이벤트 상태 (SUCCESS, FAIL)'; + + +-- +-- TOC entry 5761 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.menu_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.menu_uid IS '메뉴 UID'; + + +-- +-- TOC entry 5762 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.ip_address; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.ip_address IS 'IP 주소'; + + +-- +-- TOC entry 5763 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.description; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.description IS '상세 내용'; + + +-- +-- TOC entry 5764 (class 0 OID 0) +-- Dependencies: 283 +-- Name: COLUMN tb_audit_log.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_audit_log.created_dttm IS '발생 일시'; + + +-- +-- TOC entry 284 (class 1259 OID 72265) +-- Name: tb_auth_token; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_auth_token ( + token_id bigint NOT NULL, + user_uid bigint NOT NULL, + refresh_token text NOT NULL, + access_token text, + expires_at timestamp with time zone NOT NULL, + last_used_at timestamp with time zone DEFAULT now(), + device_info character varying(100), + ip_address character varying(45), + revoked boolean DEFAULT false, + created_at timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.tb_auth_token OWNER TO kamco_cds; + +-- +-- TOC entry 5765 (class 0 OID 0) +-- Dependencies: 284 +-- Name: TABLE tb_auth_token; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_auth_token IS '사용자 인증 및 리프레시 토큰 관리'; + + +-- +-- TOC entry 5766 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.token_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.token_id IS '토큰 ID (PK)'; + + +-- +-- TOC entry 5767 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.user_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.user_uid IS '사용자 식별키 (FK)'; + + +-- +-- TOC entry 5768 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.refresh_token; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.refresh_token IS '리프레시 토큰 값'; + + +-- +-- TOC entry 5769 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.access_token; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.access_token IS '액세스 토큰 값'; + + +-- +-- TOC entry 5770 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.expires_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.expires_at IS '만료 일시'; + + +-- +-- TOC entry 5771 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.last_used_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.last_used_at IS '마지막 사용 일시'; + + +-- +-- TOC entry 5772 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.device_info; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.device_info IS '접속 기기 정보'; + + +-- +-- TOC entry 5773 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.ip_address; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.ip_address IS '접속 IP 주소'; + + +-- +-- TOC entry 5774 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.revoked; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.revoked IS '토큰 폐기 여부'; + + +-- +-- TOC entry 5775 (class 0 OID 0) +-- Dependencies: 284 +-- Name: COLUMN tb_auth_token.created_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_auth_token.created_at IS '토큰 생성 일시'; + + +-- +-- TOC entry 285 (class 1259 OID 72277) +-- Name: tb_auth_token_token_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_auth_token_token_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_auth_token_token_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5776 (class 0 OID 0) +-- Dependencies: 285 +-- Name: tb_auth_token_token_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_auth_token_token_id_seq OWNED BY public.tb_auth_token.token_id; + + +-- +-- TOC entry 286 (class 1259 OID 72278) +-- Name: tb_cm_cd; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_cm_cd ( + code_id bigint NOT NULL, + code_cd character varying(255), + cd_ct character varying(255), + cd_nm character varying(255), + cd_odr integer, + used boolean DEFAULT true, + deleted boolean DEFAULT false NOT NULL, + parent_id bigint, + created_dttm timestamp with time zone, + updated_dttm timestamp with time zone, + created_uid bigint, + updated_uid bigint, + props1 character varying(255), + props2 character varying(255), + props3 character varying(255), + deleted_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_cm_cd OWNER TO kamco_cds; + +-- +-- TOC entry 5777 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.code_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.code_id IS '코드 아이디'; + + +-- +-- TOC entry 5778 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.code_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.code_cd IS '코드'; + + +-- +-- TOC entry 5779 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.cd_ct; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.cd_ct IS '설명'; + + +-- +-- TOC entry 5780 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.cd_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.cd_nm IS '코드명'; + + +-- +-- TOC entry 5781 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.cd_odr; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.cd_odr IS '순서'; + + +-- +-- TOC entry 5782 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.used IS '사용여부'; + + +-- +-- TOC entry 5783 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.deleted IS '삭제여부'; + + +-- +-- TOC entry 5784 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.parent_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.parent_id IS '상위 코드 아이디'; + + +-- +-- TOC entry 5785 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.created_dttm IS '저장일시'; + + +-- +-- TOC entry 5786 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 5787 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.created_uid IS '등록자'; + + +-- +-- TOC entry 5788 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.updated_uid IS '수정자'; + + +-- +-- TOC entry 5789 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.props1; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.props1 IS '비고1'; + + +-- +-- TOC entry 5790 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.props2; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.props2 IS '비고2'; + + +-- +-- TOC entry 5791 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.props3; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.props3 IS '비고3'; + + +-- +-- TOC entry 5792 (class 0 OID 0) +-- Dependencies: 286 +-- Name: COLUMN tb_cm_cd.deleted_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_cm_cd.deleted_dttm IS '삭제일시'; + + +-- +-- TOC entry 287 (class 1259 OID 72287) +-- Name: tb_cm_cd_code_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE public.tb_cm_cd ALTER COLUMN code_id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.tb_cm_cd_code_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- TOC entry 240 (class 1259 OID 47972) +-- Name: tb_data_mapinfo_cd_code_id; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_data_mapinfo_cd_code_id + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_data_mapinfo_cd_code_id OWNER TO kamco_cds; + +-- +-- TOC entry 288 (class 1259 OID 72288) +-- Name: tb_data_mapinfo_cd; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_data_mapinfo_cd ( + code_id bigint DEFAULT nextval('public.tb_data_mapinfo_cd_code_id'::regclass) NOT NULL, + code_cd character varying(255) DEFAULT NULL::character varying, + cd_ct character varying(255) DEFAULT NULL::character varying, + cd_nm character varying(255) DEFAULT NULL::character varying, + cd_odr integer, + used boolean, + deleted boolean NOT NULL, + parent_id bigint, + sys_cd_id bigint, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +ALTER TABLE public.tb_data_mapinfo_cd OWNER TO kamco_cds; + +-- +-- TOC entry 5793 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.code_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.code_id IS '코드 아이디'; + + +-- +-- TOC entry 5794 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.code_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.code_cd IS '코드'; + + +-- +-- TOC entry 5795 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.cd_ct; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.cd_ct IS '설명'; + + +-- +-- TOC entry 5796 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.cd_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.cd_nm IS '코드명'; + + +-- +-- TOC entry 5797 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.cd_odr; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.cd_odr IS '순서'; + + +-- +-- TOC entry 5798 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.used IS '사용여부'; + + +-- +-- TOC entry 5799 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.deleted IS '삭제여부'; + + +-- +-- TOC entry 5800 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.parent_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.parent_id IS '상위 코드 아이디'; + + +-- +-- TOC entry 5801 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.sys_cd_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.sys_cd_id IS '시스템 코드 아이디'; + + +-- +-- TOC entry 5802 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.created_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.created_at IS '저장일시'; + + +-- +-- TOC entry 5803 (class 0 OID 0) +-- Dependencies: 288 +-- Name: COLUMN tb_data_mapinfo_cd.updated_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_mapinfo_cd.updated_at IS '수정일시'; + + +-- +-- TOC entry 241 (class 1259 OID 47984) +-- Name: tb_data_object_class_cd_code_id; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_data_object_class_cd_code_id + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_data_object_class_cd_code_id OWNER TO kamco_cds; + +-- +-- TOC entry 289 (class 1259 OID 72299) +-- Name: tb_data_object_class_cd; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_data_object_class_cd ( + code_id bigint DEFAULT nextval('public.tb_data_object_class_cd_code_id'::regclass) NOT NULL, + code_cd character varying(255) DEFAULT NULL::character varying, + cd_ct character varying(255) DEFAULT NULL::character varying, + cd_nm character varying(255) DEFAULT NULL::character varying, + cd_odr integer, + used boolean, + deleted boolean NOT NULL, + parent_id bigint, + sys_cd_id bigint, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +ALTER TABLE public.tb_data_object_class_cd OWNER TO kamco_cds; + +-- +-- TOC entry 5804 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.code_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.code_id IS '코드 아이디'; + + +-- +-- TOC entry 5805 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.code_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.code_cd IS '코드'; + + +-- +-- TOC entry 5806 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.cd_ct; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.cd_ct IS '설명'; + + +-- +-- TOC entry 5807 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.cd_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.cd_nm IS '코드명'; + + +-- +-- TOC entry 5808 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.cd_odr; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.cd_odr IS '순서'; + + +-- +-- TOC entry 5809 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.used IS '사용여부'; + + +-- +-- TOC entry 5810 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.deleted IS '삭제여부'; + + +-- +-- TOC entry 5811 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.parent_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.parent_id IS '상위 코드 아이디'; + + +-- +-- TOC entry 5812 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.sys_cd_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.sys_cd_id IS '시스템 코드 아이디'; + + +-- +-- TOC entry 5813 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.created_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.created_at IS '저장일시'; + + +-- +-- TOC entry 5814 (class 0 OID 0) +-- Dependencies: 289 +-- Name: COLUMN tb_data_object_class_cd.updated_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_object_class_cd.updated_at IS '수정일시'; + + +-- +-- TOC entry 242 (class 1259 OID 47996) +-- Name: tb_data_year_cd_code_id; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_data_year_cd_code_id + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_data_year_cd_code_id OWNER TO kamco_cds; + +-- +-- TOC entry 290 (class 1259 OID 72310) +-- Name: tb_data_year_cd; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_data_year_cd ( + code_id bigint DEFAULT nextval('public.tb_data_year_cd_code_id'::regclass) NOT NULL, + code_cd character varying(255) DEFAULT NULL::character varying, + cd_ct character varying(255) DEFAULT NULL::character varying, + cd_nm character varying(255) DEFAULT NULL::character varying, + cd_odr integer, + used boolean, + deleted boolean NOT NULL, + parent_id bigint, + sys_cd_id bigint, + created_at timestamp without time zone, + updated_at timestamp without time zone +); + + +ALTER TABLE public.tb_data_year_cd OWNER TO kamco_cds; + +-- +-- TOC entry 5815 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.code_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.code_id IS '코드 아이디'; + + +-- +-- TOC entry 5816 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.code_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.code_cd IS '코드'; + + +-- +-- TOC entry 5817 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.cd_ct; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.cd_ct IS '설명'; + + +-- +-- TOC entry 5818 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.cd_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.cd_nm IS '코드명'; + + +-- +-- TOC entry 5819 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.cd_odr; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.cd_odr IS '순서'; + + +-- +-- TOC entry 5820 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.used IS '사용여부'; + + +-- +-- TOC entry 5821 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.deleted IS '삭제여부'; + + +-- +-- TOC entry 5822 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.parent_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.parent_id IS '상위 코드 아이디'; + + +-- +-- TOC entry 5823 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.sys_cd_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.sys_cd_id IS '시스템 코드 아이디'; + + +-- +-- TOC entry 5824 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.created_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.created_at IS '저장일시'; + + +-- +-- TOC entry 5825 (class 0 OID 0) +-- Dependencies: 290 +-- Name: COLUMN tb_data_year_cd.updated_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_data_year_cd.updated_at IS '수정일시'; + + +-- +-- TOC entry 243 (class 1259 OID 48008) +-- Name: tb_error_log_error_log_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_error_log_error_log_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_error_log_error_log_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 291 (class 1259 OID 72321) +-- Name: tb_error_log; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_error_log ( + error_log_uid bigint DEFAULT nextval('public.tb_error_log_error_log_uid_seq'::regclass) NOT NULL, + request_id character varying(255), + error_type character varying(255), + error_level character varying(255), + error_code character varying(255), + error_message character varying(255), + stack_trace text, + handler_uid bigint, + handled_dttm timestamp with time zone, + created_dttm timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.tb_error_log OWNER TO kamco_cds; + +-- +-- TOC entry 5826 (class 0 OID 0) +-- Dependencies: 291 +-- Name: TABLE tb_error_log; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_error_log IS '시스템 에러 로그 (UI_CDSS_LM_02)'; + + +-- +-- TOC entry 5827 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.error_log_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.error_log_uid IS '에러 로그 UID (PK)'; + + +-- +-- TOC entry 5828 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.request_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.request_id IS '요청 ID'; + + +-- +-- TOC entry 5829 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.error_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.error_type IS '에러 구분 (e.g., 다운로드, 프로세싱)'; + + +-- +-- TOC entry 5830 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.error_level; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.error_level IS '에러 레벨 (e.g., 1, 2)'; + + +-- +-- TOC entry 5831 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.error_code; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.error_code IS '에러 코드'; + + +-- +-- TOC entry 5832 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.error_message; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.error_message IS '에러 메시지'; + + +-- +-- TOC entry 5833 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.stack_trace; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.stack_trace IS '스택 트레이스'; + + +-- +-- TOC entry 5834 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.handler_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.handler_uid IS '처리자 UID (FK)'; + + +-- +-- TOC entry 5835 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.handled_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.handled_dttm IS '처리 일시'; + + +-- +-- TOC entry 5836 (class 0 OID 0) +-- Dependencies: 291 +-- Name: COLUMN tb_error_log.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_error_log.created_dttm IS '발생 일시'; + + +-- +-- TOC entry 292 (class 1259 OID 72329) +-- Name: tb_labeling_assignment; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_labeling_assignment ( + assignment_uid uuid DEFAULT gen_random_uuid() NOT NULL, + inference_geom_uid bigint NOT NULL, + worker_uid character varying(50), + inspector_uid character varying(50), + work_state character varying(20) DEFAULT 'WAIT'::character varying, + stagnation_yn character(1) DEFAULT 'N'::bpchar, + skip_reason character varying(255), + inspect_memo text, + assign_group_id character varying(50), + learn_geom_uid bigint, + created_dttm timestamp with time zone DEFAULT now() NOT NULL, + updated_dttm timestamp with time zone DEFAULT now(), + anal_uid bigint, + inspect_state character varying(20), + work_stat_dttm timestamp with time zone, + inspect_stat_dttm timestamp with time zone, + pnu bigint, + last_work_dttm timestamp without time zone +); + + +ALTER TABLE public.tb_labeling_assignment OWNER TO kamco_cds; + +-- +-- TOC entry 5837 (class 0 OID 0) +-- Dependencies: 292 +-- Name: TABLE tb_labeling_assignment; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_labeling_assignment IS '학습데이터 라벨링 작업 할당 및 상태 관리 테이블'; + + +-- +-- TOC entry 5838 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.assignment_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.assignment_uid IS '할당 고유 식별자 (PK)'; + + +-- +-- TOC entry 5839 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.inference_geom_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.inference_geom_uid IS '원본 추론 데이터 고유 식별자 (tb_map_sheet_anal_data_inference_geom.geo_uid 참조)'; + + +-- +-- TOC entry 5840 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.worker_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.worker_uid IS '담당 라벨러 ID (작업자)'; + + +-- +-- TOC entry 5841 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.inspector_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.inspector_uid IS '담당 검수자 ID'; + + +-- +-- TOC entry 5842 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.work_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.work_state IS '작업 진행 상태 (WAIT:대기, LABEL_ING:라벨링중, LABEL_FIN:완료, TEST_ING:검수중, DONE:최종승인, SKIP:스킵)'; + + +-- +-- TOC entry 5843 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.stagnation_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.stagnation_yn IS '작업 정체 여부 (Y: 정체 발생, N: 정상 진행)'; + + +-- +-- TOC entry 5844 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.skip_reason; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.skip_reason IS '스킵 사유'; + + +-- +-- TOC entry 5845 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.inspect_memo; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.inspect_memo IS '검증 메모'; + + +-- +-- TOC entry 5846 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.assign_group_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.assign_group_id IS '일괄 배분 그룹 ID (도엽번호 또는 작업차수 단위 묶음)'; + + +-- +-- TOC entry 5847 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.learn_geom_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.learn_geom_uid IS '작업자가 새로 그린 학습 데이터 식별자 (tb_map_sheet_learn_data_geom.geo_uid 매핑)'; + + +-- +-- TOC entry 5848 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.created_dttm IS '데이터 배정 일시'; + + +-- +-- TOC entry 5849 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.updated_dttm IS '최종 상태 변경 일시 (정체 감지 로직의 기준값)'; + + +-- +-- TOC entry 5850 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.anal_uid IS '추론 회차 uid'; + + +-- +-- TOC entry 5851 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.inspect_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.inspect_state IS '검수상태'; + + +-- +-- TOC entry 5852 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.work_stat_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.work_stat_dttm IS '라벨상태변경일'; + + +-- +-- TOC entry 5853 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.inspect_stat_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.inspect_stat_dttm IS '검수상태변경일'; + + +-- +-- TOC entry 5854 (class 0 OID 0) +-- Dependencies: 292 +-- Name: COLUMN tb_labeling_assignment.last_work_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_assignment.last_work_dttm IS '최종 작업 시간'; + + +-- +-- TOC entry 293 (class 1259 OID 72342) +-- Name: tb_labeling_inspector; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_labeling_inspector ( + operator_uid uuid DEFAULT gen_random_uuid() NOT NULL, + anal_uid bigint NOT NULL, + inspector_uid character varying(50), + created_dttm timestamp with time zone DEFAULT now() NOT NULL, + updated_dttm timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.tb_labeling_inspector OWNER TO kamco_cds; + +-- +-- TOC entry 5855 (class 0 OID 0) +-- Dependencies: 293 +-- Name: TABLE tb_labeling_inspector; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_labeling_inspector IS '라벨링 작업 할당된 검수자 테이블'; + + +-- +-- TOC entry 5856 (class 0 OID 0) +-- Dependencies: 293 +-- Name: COLUMN tb_labeling_inspector.operator_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_inspector.operator_uid IS '할당 고유 식별자 (PK)'; + + +-- +-- TOC entry 5857 (class 0 OID 0) +-- Dependencies: 293 +-- Name: COLUMN tb_labeling_inspector.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_inspector.anal_uid IS '추론 회차 uid'; + + +-- +-- TOC entry 5858 (class 0 OID 0) +-- Dependencies: 293 +-- Name: COLUMN tb_labeling_inspector.inspector_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_inspector.inspector_uid IS '담당 검수자 ID'; + + +-- +-- TOC entry 5859 (class 0 OID 0) +-- Dependencies: 293 +-- Name: COLUMN tb_labeling_inspector.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_inspector.created_dttm IS '데이터 배정 일시'; + + +-- +-- TOC entry 5860 (class 0 OID 0) +-- Dependencies: 293 +-- Name: COLUMN tb_labeling_inspector.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_inspector.updated_dttm IS '최종 상태 변경 일시 (정체 감지 로직의 기준값)'; + + +-- +-- TOC entry 294 (class 1259 OID 72351) +-- Name: tb_labeling_labeler; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_labeling_labeler ( + lb_usr_uid uuid DEFAULT gen_random_uuid() NOT NULL, + anal_uid bigint NOT NULL, + worker_uid character varying(50), + allocate_cnt bigint, + deleted boolean DEFAULT false, + re_allocate_yn boolean, + re_allocate_cnt bigint, + re_allocate_worker_uid character varying(50), + created_dttm timestamp with time zone DEFAULT now() NOT NULL, + updated_dttm timestamp with time zone DEFAULT now() +); + + +ALTER TABLE public.tb_labeling_labeler OWNER TO kamco_cds; + +-- +-- TOC entry 5861 (class 0 OID 0) +-- Dependencies: 294 +-- Name: TABLE tb_labeling_labeler; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_labeling_labeler IS '라벨링 작업 할당된 라벨러 테이블'; + + +-- +-- TOC entry 5862 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.lb_usr_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.lb_usr_uid IS '할당 고유 식별자 (PK)'; + + +-- +-- TOC entry 5863 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.anal_uid IS '추론 회차 uid'; + + +-- +-- TOC entry 5864 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.worker_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.worker_uid IS '담당 라벨러 ID'; + + +-- +-- TOC entry 5865 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.allocate_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.allocate_cnt IS '할당량 count'; + + +-- +-- TOC entry 5866 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.deleted IS '삭제여부'; + + +-- +-- TOC entry 5867 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.re_allocate_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.re_allocate_yn IS '재할당여부'; + + +-- +-- TOC entry 5868 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.re_allocate_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.re_allocate_cnt IS '재할당 수량'; + + +-- +-- TOC entry 5869 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.re_allocate_worker_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.re_allocate_worker_uid IS '재할당 대상 사번'; + + +-- +-- TOC entry 5870 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.created_dttm IS '등록일시'; + + +-- +-- TOC entry 5871 (class 0 OID 0) +-- Dependencies: 294 +-- Name: COLUMN tb_labeling_labeler.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_labeling_labeler.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 295 (class 1259 OID 72361) +-- Name: tb_log; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_log ( + log_id bigint NOT NULL, + sys_cd_id bigint, + menu_id bigint, + event_type character varying(50), + event_params json, + accnt_id bigint, + event_started_at timestamp with time zone, + event_ended_at timestamp with time zone, + event_status character varying(50), + error_code integer, + error_level character varying(50), + error_name character varying(50), + error_message character varying(255), + error_detail text, + created_dttm timestamp with time zone, + updated_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_log OWNER TO kamco_cds; + +-- +-- TOC entry 5872 (class 0 OID 0) +-- Dependencies: 295 +-- Name: TABLE tb_log; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_log IS '시스템 상세 이벤트 및 행위 로그'; + + +-- +-- TOC entry 5873 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.log_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.log_id IS '로그 식별자 (PK)'; + + +-- +-- TOC entry 5874 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.sys_cd_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.sys_cd_id IS '시스템 코드 ID'; + + +-- +-- TOC entry 5875 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.menu_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.menu_id IS '메뉴 식별자'; + + +-- +-- TOC entry 5876 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.event_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.event_type IS '이벤트 유형 (LOGIN, SEARCH, API_CALL 등)'; + + +-- +-- TOC entry 5877 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.event_params; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.event_params IS '이벤트 발생 시 전달된 파라미터 (JSON)'; + + +-- +-- TOC entry 5878 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.accnt_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.accnt_id IS '계정 식별자'; + + +-- +-- TOC entry 5879 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.event_started_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.event_started_at IS '이벤트 시작 일시'; + + +-- +-- TOC entry 5880 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.event_ended_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.event_ended_at IS '이벤트 종료 일시'; + + +-- +-- TOC entry 5881 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.event_status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.event_status IS '이벤트 상태 (SUCCESS, FAIL)'; + + +-- +-- TOC entry 5882 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.error_code; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.error_code IS '에러 코드'; + + +-- +-- TOC entry 5883 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.error_level; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.error_level IS '에러 레벨'; + + +-- +-- TOC entry 5884 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.error_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.error_name IS '에러 명칭'; + + +-- +-- TOC entry 5885 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.error_message; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.error_message IS '에러 메시지'; + + +-- +-- TOC entry 5886 (class 0 OID 0) +-- Dependencies: 295 +-- Name: COLUMN tb_log.error_detail; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_log.error_detail IS '에러 상세 정보 (Stack Trace 등)'; + + +-- +-- TOC entry 296 (class 1259 OID 72367) +-- Name: tb_log_log_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE public.tb_log ALTER COLUMN log_id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.tb_log_log_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- TOC entry 297 (class 1259 OID 72368) +-- Name: tb_map_inkx_50k; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_inkx_50k ( + fid integer NOT NULL, + mapidcd_no character varying(12), + mapid_nm character varying(100), + mapid_no character varying(100), + geom public.geometry(Polygon,4326), + created_dttm timestamp with time zone, + updated_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_map_inkx_50k OWNER TO kamco_cds; + +-- +-- TOC entry 5887 (class 0 OID 0) +-- Dependencies: 297 +-- Name: TABLE tb_map_inkx_50k; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_inkx_50k IS '1:50,000 수치지도 도엽 인덱스'; + + +-- +-- TOC entry 5888 (class 0 OID 0) +-- Dependencies: 297 +-- Name: COLUMN tb_map_inkx_50k.fid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_50k.fid IS '피처 식별자 (PK)'; + + +-- +-- TOC entry 5889 (class 0 OID 0) +-- Dependencies: 297 +-- Name: COLUMN tb_map_inkx_50k.mapidcd_no; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_50k.mapidcd_no IS '도엽 코드 번호'; + + +-- +-- TOC entry 5890 (class 0 OID 0) +-- Dependencies: 297 +-- Name: COLUMN tb_map_inkx_50k.mapid_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_50k.mapid_nm IS '도엽 명칭'; + + +-- +-- TOC entry 5891 (class 0 OID 0) +-- Dependencies: 297 +-- Name: COLUMN tb_map_inkx_50k.mapid_no; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_50k.mapid_no IS '도엽 번호'; + + +-- +-- TOC entry 5892 (class 0 OID 0) +-- Dependencies: 297 +-- Name: COLUMN tb_map_inkx_50k.geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_50k.geom IS '공간 기하 정보 (Polygon, EPSG:4326)'; + + +-- +-- TOC entry 298 (class 1259 OID 72374) +-- Name: tb_map_inkx_50k_fid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_inkx_50k_fid_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_inkx_50k_fid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5893 (class 0 OID 0) +-- Dependencies: 298 +-- Name: tb_map_inkx_50k_fid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_map_inkx_50k_fid_seq OWNED BY public.tb_map_inkx_50k.fid; + + +-- +-- TOC entry 299 (class 1259 OID 72375) +-- Name: tb_map_inkx_5k; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_inkx_5k ( + fid integer NOT NULL, + mapidcd_no character varying(12), + mapid_nm character varying(100), + geom public.geometry(Polygon,4326), + fid_k50 integer, + use_inference character varying(20), + created_dttm timestamp with time zone, + updated_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_map_inkx_5k OWNER TO kamco_cds; + +-- +-- TOC entry 5894 (class 0 OID 0) +-- Dependencies: 299 +-- Name: COLUMN tb_map_inkx_5k.fid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_5k.fid IS '피처 식별자 (PK)'; + + +-- +-- TOC entry 5895 (class 0 OID 0) +-- Dependencies: 299 +-- Name: COLUMN tb_map_inkx_5k.mapidcd_no; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_5k.mapidcd_no IS '도엽 코드 번호'; + + +-- +-- TOC entry 5896 (class 0 OID 0) +-- Dependencies: 299 +-- Name: COLUMN tb_map_inkx_5k.mapid_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_5k.mapid_nm IS '도엽 명칭'; + + +-- +-- TOC entry 5897 (class 0 OID 0) +-- Dependencies: 299 +-- Name: COLUMN tb_map_inkx_5k.geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_5k.geom IS '공간 기하 정보 (Polygon, EPSG:4326)'; + + +-- +-- TOC entry 5898 (class 0 OID 0) +-- Dependencies: 299 +-- Name: COLUMN tb_map_inkx_5k.fid_k50; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_5k.fid_k50 IS '상위 5만 도엽(tb_map_inkx_50k) 연결 ID'; + + +-- +-- TOC entry 5899 (class 0 OID 0) +-- Dependencies: 299 +-- Name: COLUMN tb_map_inkx_5k.use_inference; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_inkx_5k.use_inference IS '제외처리'; + + +-- +-- TOC entry 300 (class 1259 OID 72381) +-- Name: tb_map_inkx_5k_fid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_inkx_5k_fid_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_inkx_5k_fid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5900 (class 0 OID 0) +-- Dependencies: 300 +-- Name: tb_map_inkx_5k_fid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_map_inkx_5k_fid_seq OWNED BY public.tb_map_inkx_5k.fid; + + +-- +-- TOC entry 244 (class 1259 OID 48038) +-- Name: tb_map_sheet_anal_anal_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_anal_anal_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_anal_anal_uid OWNER TO kamco_cds; + +-- +-- TOC entry 245 (class 1259 OID 48049) +-- Name: tb_map_sheet_anal_data_data_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_anal_data_data_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_anal_data_data_uid OWNER TO kamco_cds; + +-- +-- TOC entry 301 (class 1259 OID 72382) +-- Name: tb_map_sheet_anal_data_inference; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_anal_data_inference ( + data_uid bigint NOT NULL, + data_name character varying(128), + data_path character varying(255), + data_type character varying(128), + data_crs_type character varying(128), + data_crs_type_name character varying(255), + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint, + compare_yyyy integer, + target_yyyy integer, + data_json text, + data_state character varying(20) DEFAULT '0'::character varying, + data_state_dttm timestamp with time zone DEFAULT now(), + anal_strt_dttm timestamp with time zone, + anal_end_dttm timestamp with time zone, + anal_sec bigint DEFAULT 0, + anal_state character varying(20), + anal_uid bigint, + map_sheet_num bigint, + detecting_cnt bigint DEFAULT 0, + pnu bigint DEFAULT 0, + down_state character varying(20), + down_state_dttm timestamp with time zone, + fit_state character varying(20), + fit_state_dttm timestamp with time zone, + labeler_uid bigint, + label_state character varying(20) DEFAULT NULL::character varying, + label_state_dttm timestamp with time zone, + tester_uid bigint, + test_state character varying(20), + test_state_dttm timestamp with time zone, + fit_state_cmmnt text, + ref_map_sheet_num bigint, + stage integer, + file_created_yn boolean DEFAULT false, + m1 character varying(100), + m2 character varying(100), + m3 character varying(100), + file_created_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_map_sheet_anal_data_inference OWNER TO kamco_cds; + +-- +-- TOC entry 5901 (class 0 OID 0) +-- Dependencies: 301 +-- Name: TABLE tb_map_sheet_anal_data_inference; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_anal_data_inference IS '분석데이터 정보 (학습데이터)'; + + +-- +-- TOC entry 5902 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_uid IS '식별키'; + + +-- +-- TOC entry 5903 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_name IS '데이타명'; + + +-- +-- TOC entry 5904 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_path IS '경로'; + + +-- +-- TOC entry 5905 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_type IS '타입'; + + +-- +-- TOC entry 5906 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_crs_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_crs_type IS 'CRS타입'; + + +-- +-- TOC entry 5907 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_crs_type_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_crs_type_name IS 'CRS타입명'; + + +-- +-- TOC entry 5908 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.created_dttm IS '등록일'; + + +-- +-- TOC entry 5909 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.created_uid IS '등록자'; + + +-- +-- TOC entry 5910 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.updated_dttm IS '수정일'; + + +-- +-- TOC entry 5911 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.updated_uid IS '수정자'; + + +-- +-- TOC entry 5912 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.compare_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.compare_yyyy IS '비교년도'; + + +-- +-- TOC entry 5913 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.target_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.target_yyyy IS '기준년도'; + + +-- +-- TOC entry 5914 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_json; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_json IS 'json전체'; + + +-- +-- TOC entry 5915 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_state IS '처리상태'; + + +-- +-- TOC entry 5916 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.data_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.data_state_dttm IS '데이터처리일'; + + +-- +-- TOC entry 5917 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.anal_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.anal_strt_dttm IS '분석시작일'; + + +-- +-- TOC entry 5918 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.anal_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.anal_end_dttm IS '분석종료일'; + + +-- +-- TOC entry 5919 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.anal_sec; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.anal_sec IS '분석소요초'; + + +-- +-- TOC entry 5920 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.anal_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.anal_state IS '분석상태'; + + +-- +-- TOC entry 5921 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.anal_uid IS '분석식별키'; + + +-- +-- TOC entry 5922 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 5923 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.detecting_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.detecting_cnt IS '변화탐지건수'; + + +-- +-- TOC entry 5924 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.pnu; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.pnu IS 'pnu'; + + +-- +-- TOC entry 5925 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.down_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.down_state IS '다운로드상태'; + + +-- +-- TOC entry 5926 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.down_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.down_state_dttm IS '다운로드일시'; + + +-- +-- TOC entry 5927 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.fit_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.fit_state IS '적합상태'; + + +-- +-- TOC entry 5928 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.fit_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.fit_state_dttm IS '적합상태일시'; + + +-- +-- TOC entry 5929 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.labeler_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.labeler_uid IS '라벨링담당자'; + + +-- +-- TOC entry 5930 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.label_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.label_state IS '라벨링상태'; + + +-- +-- TOC entry 5931 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.label_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.label_state_dttm IS '라벨링일시'; + + +-- +-- TOC entry 5932 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.tester_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.tester_uid IS '검수자'; + + +-- +-- TOC entry 5933 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.test_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.test_state IS '검수상태'; + + +-- +-- TOC entry 5934 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.test_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.test_state_dttm IS '검수상태일시'; + + +-- +-- TOC entry 5935 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.fit_state_cmmnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.fit_state_cmmnt IS '적합상태사유'; + + +-- +-- TOC entry 5936 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.ref_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.ref_map_sheet_num IS '참조도엽번호'; + + +-- +-- TOC entry 5937 (class 0 OID 0) +-- Dependencies: 301 +-- Name: COLUMN tb_map_sheet_anal_data_inference.file_created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference.file_created_dttm IS '파일 생성일시'; + + +-- +-- TOC entry 302 (class 1259 OID 72397) +-- Name: tb_map_sheet_anal_data_inference_data_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_anal_data_inference_data_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_anal_data_inference_data_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 5938 (class 0 OID 0) +-- Dependencies: 302 +-- Name: tb_map_sheet_anal_data_inference_data_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_map_sheet_anal_data_inference_data_uid_seq OWNED BY public.tb_map_sheet_anal_data_inference.data_uid; + + +-- +-- TOC entry 303 (class 1259 OID 72398) +-- Name: tb_map_sheet_anal_data_inference_geom; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_anal_data_inference_geom ( + geo_uid bigint NOT NULL, + cd_prob double precision, + class_before_cd character varying(40), + class_before_prob double precision, + class_after_cd character varying(40), + class_after_prob double precision, + map_sheet_num bigint, + ref_map_sheet_num bigint, + compare_yyyy integer, + target_yyyy integer, + area double precision, + geom public.geometry, + before_geom public.geometry, + geom_center public.geometry, + geo_type character varying(100), + data_uid bigint, + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint, + geom_cnt bigint DEFAULT 0, + pnu bigint DEFAULT 0, + fit_state character varying(20) DEFAULT '0'::character varying, + fit_state_dttm timestamp with time zone DEFAULT now(), + fit_state_cmmnt text, + labeler_uid bigint, + label_state character varying(20), + label_state_dttm timestamp with time zone DEFAULT now(), + tester_uid bigint, + test_state character varying(20), + test_state_dttm timestamp with time zone DEFAULT now(), + map_5k_id bigint, + uuid uuid DEFAULT public.uuid_generate_v4(), + stage integer, + file_created_yn boolean DEFAULT false, + file_created_dttm timestamp with time zone, + pass_yn boolean, + pass_yn_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_map_sheet_anal_data_inference_geom OWNER TO kamco_cds; + +-- +-- TOC entry 5939 (class 0 OID 0) +-- Dependencies: 303 +-- Name: TABLE tb_map_sheet_anal_data_inference_geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_anal_data_inference_geom IS '분석데이터 GEOM 정보 (학습데이터)'; + + +-- +-- TOC entry 5940 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.geo_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.geo_uid IS '식별키'; + + +-- +-- TOC entry 5941 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.cd_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.cd_prob IS '정확도'; + + +-- +-- TOC entry 5942 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.class_before_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.class_before_cd IS '이전class명'; + + +-- +-- TOC entry 5943 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.class_before_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.class_before_prob IS '이전class정확도'; + + +-- +-- TOC entry 5944 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.class_after_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.class_after_cd IS '이후class코드'; + + +-- +-- TOC entry 5945 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.class_after_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.class_after_prob IS '이후class정확도'; + + +-- +-- TOC entry 5946 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 5947 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.ref_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.ref_map_sheet_num IS '참조(부모)도엽번호'; + + +-- +-- TOC entry 5948 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.compare_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.compare_yyyy IS '이전년도'; + + +-- +-- TOC entry 5949 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.target_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.target_yyyy IS '이후년도'; + + +-- +-- TOC entry 5950 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.area; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.area IS '면적'; + + +-- +-- TOC entry 5951 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.geom IS 'geometry정보'; + + +-- +-- TOC entry 5952 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.geom_center; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.geom_center IS '폴리곤중앙값'; + + +-- +-- TOC entry 5953 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.geo_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.geo_type IS '타입'; + + +-- +-- TOC entry 5954 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.data_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.data_uid IS '데이터식별키'; + + +-- +-- TOC entry 5955 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.created_dttm IS '등록일'; + + +-- +-- TOC entry 5956 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.created_uid IS '등록자'; + + +-- +-- TOC entry 5957 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.updated_dttm IS '수정일'; + + +-- +-- TOC entry 5958 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.updated_uid IS '수정자'; + + +-- +-- TOC entry 5959 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.geom_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.geom_cnt IS 'geometry건수'; + + +-- +-- TOC entry 5960 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.pnu; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.pnu IS 'pnu'; + + +-- +-- TOC entry 5961 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.fit_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.fit_state IS '적합상태'; + + +-- +-- TOC entry 5962 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.fit_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.fit_state_dttm IS '적합상태일시'; + + +-- +-- TOC entry 5963 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.fit_state_cmmnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.fit_state_cmmnt IS '적합상태사유'; + + +-- +-- TOC entry 5964 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.labeler_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.labeler_uid IS '라벨'; + + +-- +-- TOC entry 5965 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.label_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.label_state IS '라벨링상태'; + + +-- +-- TOC entry 5966 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.label_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.label_state_dttm IS '라벨링상태일시'; + + +-- +-- TOC entry 5967 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.tester_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.tester_uid IS '검수자'; + + +-- +-- TOC entry 5968 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.test_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.test_state IS '검수상태'; + + +-- +-- TOC entry 5969 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.test_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.test_state_dttm IS '검수일'; + + +-- +-- TOC entry 5970 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.file_created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.file_created_dttm IS '파일 생성 일시'; + + +-- +-- TOC entry 5971 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.pass_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.pass_yn IS '적합여부 (true: 적합, false: 부적합)'; + + +-- +-- TOC entry 5972 (class 0 OID 0) +-- Dependencies: 303 +-- Name: COLUMN tb_map_sheet_anal_data_inference_geom.pass_yn_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_data_inference_geom.pass_yn_dttm IS '적합여부 등록일시'; + + +-- +-- TOC entry 304 (class 1259 OID 72414) +-- Name: tb_map_sheet_anal_data_inference_geom_geo_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE public.tb_map_sheet_anal_data_inference_geom ALTER COLUMN geo_uid ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.tb_map_sheet_anal_data_inference_geom_geo_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- TOC entry 247 (class 1259 OID 48124) +-- Name: tb_map_sheet_anal_inference_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_anal_inference_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_anal_inference_uid OWNER TO kamco_cds; + +-- +-- TOC entry 305 (class 1259 OID 72415) +-- Name: tb_map_sheet_anal_inference; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_anal_inference ( + anal_uid bigint DEFAULT nextval('public.tb_map_sheet_anal_inference_uid'::regclass) NOT NULL, + compare_yyyy integer, + target_yyyy integer, + model_uid bigint, + server_ids character varying(100), + anal_strt_dttm timestamp with time zone, + anal_end_dttm timestamp with time zone, + anal_sec bigint, + anal_state character varying(20), + gukyuin_used character varying(20), + accuracy double precision, + result_url character varying(255), + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint, + anal_title character varying(255), + detecting_cnt bigint, + anal_pred_sec bigint, + model_ver_uid bigint, + hyper_params json, + tranning_rate double precision[], + validation_rate double precision[], + test_rate character varying, + detecting_description character varying(128), + base_map_sheet_num character varying(12), + uuid uuid DEFAULT gen_random_uuid(), + model_m1_ver character varying(50), + model_m2_ver character varying(50), + model_m3_ver character varying(50), + anal_target_type character varying(20), + gukyuin_apply_dttm timestamp with time zone, + detection_data_option character varying(20), + stage integer, + labeling_closed_yn character varying(1) DEFAULT 'N'::character varying, + inspection_closed_yn character varying(1) DEFAULT 'N'::character varying +); + + +ALTER TABLE public.tb_map_sheet_anal_inference OWNER TO kamco_cds; + +-- +-- TOC entry 5973 (class 0 OID 0) +-- Dependencies: 305 +-- Name: TABLE tb_map_sheet_anal_inference; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_anal_inference IS '분석현황 (학습 데이터)'; + + +-- +-- TOC entry 5974 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_uid IS '식별키'; + + +-- +-- TOC entry 5975 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.compare_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.compare_yyyy IS '비교년도'; + + +-- +-- TOC entry 5976 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.target_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.target_yyyy IS '기준년도'; + + +-- +-- TOC entry 5977 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.model_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.model_uid IS '모델식별키'; + + +-- +-- TOC entry 5978 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.server_ids; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.server_ids IS '서버ID'; + + +-- +-- TOC entry 5979 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_strt_dttm IS '분석시작일'; + + +-- +-- TOC entry 5980 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_end_dttm IS '분석종료일'; + + +-- +-- TOC entry 5981 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_sec; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_sec IS '소요초'; + + +-- +-- TOC entry 5982 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_state IS '분석상태'; + + +-- +-- TOC entry 5983 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.gukyuin_used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.gukyuin_used IS '국유인반영여부'; + + +-- +-- TOC entry 5984 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.accuracy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.accuracy IS '정확도'; + + +-- +-- TOC entry 5985 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.result_url; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.result_url IS '결과URL'; + + +-- +-- TOC entry 5986 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.created_dttm IS '등록일'; + + +-- +-- TOC entry 5987 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.created_uid IS '등록자'; + + +-- +-- TOC entry 5988 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.updated_dttm IS '수정일'; + + +-- +-- TOC entry 5989 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.updated_uid IS '수정자'; + + +-- +-- TOC entry 5990 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_title; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_title IS '제목'; + + +-- +-- TOC entry 5991 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.detecting_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.detecting_cnt IS '탐지건수'; + + +-- +-- TOC entry 5992 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_pred_sec; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_pred_sec IS '예상소요초'; + + +-- +-- TOC entry 5993 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.model_ver_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.model_ver_uid IS '모델버전식별키'; + + +-- +-- TOC entry 5994 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.hyper_params; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.hyper_params IS '하이퍼파라메터'; + + +-- +-- TOC entry 5995 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.tranning_rate; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.tranning_rate IS 'tranning비율'; + + +-- +-- TOC entry 5996 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.validation_rate; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.validation_rate IS 'validation비율'; + + +-- +-- TOC entry 5997 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.test_rate; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.test_rate IS '테스트비율'; + + +-- +-- TOC entry 5998 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.detecting_description; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.detecting_description IS '변화탐지설명'; + + +-- +-- TOC entry 5999 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.base_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.base_map_sheet_num IS '기본도엽번호(5k)'; + + +-- +-- TOC entry 6000 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.uuid IS 'UUID'; + + +-- +-- TOC entry 6001 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.model_m1_ver; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.model_m1_ver IS '모델M1버전'; + + +-- +-- TOC entry 6002 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.model_m2_ver; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.model_m2_ver IS '모델M2버전'; + + +-- +-- TOC entry 6003 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.model_m3_ver; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.model_m3_ver IS '모델M3버전'; + + +-- +-- TOC entry 6004 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.anal_target_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.anal_target_type IS '분석대상도엽(ALL/PART)'; + + +-- +-- TOC entry 6005 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.gukyuin_apply_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.gukyuin_apply_dttm IS '국유인 반영일시'; + + +-- +-- TOC entry 6006 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.stage; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.stage IS '회차'; + + +-- +-- TOC entry 6007 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.labeling_closed_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.labeling_closed_yn IS '라벨링 종료 여부 (Y: 종료, N: 진행중)'; + + +-- +-- TOC entry 6008 (class 0 OID 0) +-- Dependencies: 305 +-- Name: COLUMN tb_map_sheet_anal_inference.inspection_closed_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_inference.inspection_closed_yn IS '검수 종료 여부 (Y: 종료, N: 진행중)'; + + +-- +-- TOC entry 306 (class 1259 OID 72427) +-- Name: tb_map_sheet_anal_sttc; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_anal_sttc ( + compare_yyyy integer NOT NULL, + target_yyyy integer NOT NULL, + map_sheet_num bigint NOT NULL, + class_before_cnt bigint, + class_after_cnt bigint, + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint, + ref_map_sheet_num bigint NOT NULL, + data_uid bigint NOT NULL, + class_before_cd character varying(30) DEFAULT NULL::character varying NOT NULL, + class_after_cd character varying(30) DEFAULT NULL::character varying NOT NULL, + anal_uid bigint, + class_after_prob_avg double precision +); + + +ALTER TABLE public.tb_map_sheet_anal_sttc OWNER TO kamco_cds; + +-- +-- TOC entry 6009 (class 0 OID 0) +-- Dependencies: 306 +-- Name: TABLE tb_map_sheet_anal_sttc; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_anal_sttc IS '분석결과집계현황'; + + +-- +-- TOC entry 6010 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.compare_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.compare_yyyy IS '비교년도'; + + +-- +-- TOC entry 6011 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.target_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.target_yyyy IS '기준년도'; + + +-- +-- TOC entry 6012 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 6013 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.class_before_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.class_before_cnt IS '이전class수'; + + +-- +-- TOC entry 6014 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.class_after_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.class_after_cnt IS '이후class수'; + + +-- +-- TOC entry 6015 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.created_dttm IS '등록일'; + + +-- +-- TOC entry 6016 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.created_uid IS '등록자'; + + +-- +-- TOC entry 6017 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.updated_dttm IS '수정일'; + + +-- +-- TOC entry 6018 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.updated_uid IS '수정자'; + + +-- +-- TOC entry 6019 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.ref_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.ref_map_sheet_num IS '참조(부모)도엽번호'; + + +-- +-- TOC entry 6020 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.data_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.data_uid IS '분석테이터 식별키'; + + +-- +-- TOC entry 6021 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.class_before_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.class_before_cd IS '이전class코드(영문)'; + + +-- +-- TOC entry 6022 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.class_after_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.class_after_cd IS '이후class코드(영문)'; + + +-- +-- TOC entry 6023 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.anal_uid IS '분석현황식별키'; + + +-- +-- TOC entry 6024 (class 0 OID 0) +-- Dependencies: 306 +-- Name: COLUMN tb_map_sheet_anal_sttc.class_after_prob_avg; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_sttc.class_after_prob_avg IS '정확도평균'; + + +-- +-- TOC entry 307 (class 1259 OID 72441) +-- Name: tb_map_sheet_anal_target_data; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_anal_target_data ( + target_uid bigint NOT NULL, + anal_uid bigint, + data_uid bigint +); + + +ALTER TABLE public.tb_map_sheet_anal_target_data OWNER TO kamco_cds; + +-- +-- TOC entry 6025 (class 0 OID 0) +-- Dependencies: 307 +-- Name: TABLE tb_map_sheet_anal_target_data; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_anal_target_data IS '분석실행데이터'; + + +-- +-- TOC entry 6026 (class 0 OID 0) +-- Dependencies: 307 +-- Name: COLUMN tb_map_sheet_anal_target_data.target_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_target_data.target_uid IS '식별키'; + + +-- +-- TOC entry 6027 (class 0 OID 0) +-- Dependencies: 307 +-- Name: COLUMN tb_map_sheet_anal_target_data.anal_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_target_data.anal_uid IS '분석현황식별키'; + + +-- +-- TOC entry 6028 (class 0 OID 0) +-- Dependencies: 307 +-- Name: COLUMN tb_map_sheet_anal_target_data.data_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_anal_target_data.data_uid IS '데이터식별키'; + + +-- +-- TOC entry 345 (class 1259 OID 74981) +-- Name: tb_map_sheet_learn; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_learn ( + id bigint NOT NULL, + uuid uuid DEFAULT gen_random_uuid(), + title character varying(200) NOT NULL, + status character varying(10), + m1_model_uuid uuid, + m2_model_uuid uuid, + m3_model_uuid uuid, + compare_yyyy integer, + target_yyyy integer, + detect_option character varying(20), + map_sheet_scope character varying(20), + detecting_cnt bigint, + infer_start_dttm timestamp with time zone, + infer_end_dttm timestamp with time zone, + elapsed_time timestamp with time zone, + apply_yn boolean, + apply_dttm timestamp with time zone, + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint, + map_sheet_cnt character varying(100) +); + + +ALTER TABLE public.tb_map_sheet_learn OWNER TO kamco_cds; + +-- +-- TOC entry 6029 (class 0 OID 0) +-- Dependencies: 345 +-- Name: TABLE tb_map_sheet_learn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_learn IS '추론관리 목록'; + + +-- +-- TOC entry 6030 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.id IS '식별키'; + + +-- +-- TOC entry 6031 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.uuid IS 'UUID'; + + +-- +-- TOC entry 6032 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.title; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.title IS '제목'; + + +-- +-- TOC entry 6033 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.status IS '상태'; + + +-- +-- TOC entry 6034 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.m1_model_uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.m1_model_uuid IS '모델1 식별키'; + + +-- +-- TOC entry 6035 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.m2_model_uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.m2_model_uuid IS '모델2 식별키'; + + +-- +-- TOC entry 6036 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.m3_model_uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.m3_model_uuid IS '모델3 식별키'; + + +-- +-- TOC entry 6037 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.compare_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.compare_yyyy IS '비교년도'; + + +-- +-- TOC entry 6038 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.target_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.target_yyyy IS '기준년도'; + + +-- +-- TOC entry 6039 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.detect_option; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.detect_option IS '탐지 데이터 옵션 - EXCL 추론제외, PREV 이전 년도 도엽 사용 '; + + +-- +-- TOC entry 6040 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.map_sheet_scope; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.map_sheet_scope IS '분석대상 도엽 - ALL 전체, PART 부분'; + + +-- +-- TOC entry 6041 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.detecting_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.detecting_cnt IS '탐지건수'; + + +-- +-- TOC entry 6042 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.infer_start_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.infer_start_dttm IS '변화탐지 추론 기간 시작일시'; + + +-- +-- TOC entry 6043 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.infer_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.infer_end_dttm IS '변화탐지 추론 기간 종료일시'; + + +-- +-- TOC entry 6044 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.elapsed_time; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.elapsed_time IS '소요시간'; + + +-- +-- TOC entry 6045 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.apply_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.apply_yn IS '반영여부'; + + +-- +-- TOC entry 6046 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.apply_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.apply_dttm IS '반영일시'; + + +-- +-- TOC entry 6047 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.created_dttm IS '등록일시'; + + +-- +-- TOC entry 6048 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.created_uid IS '등록자'; + + +-- +-- TOC entry 6049 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 6050 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.updated_uid IS '수정자'; + + +-- +-- TOC entry 6051 (class 0 OID 0) +-- Dependencies: 345 +-- Name: COLUMN tb_map_sheet_learn.map_sheet_cnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn.map_sheet_cnt IS '분석 도엽 (화성 외 38건)'; + + +-- +-- TOC entry 346 (class 1259 OID 74992) +-- Name: tb_map_sheet_learn_5k; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_learn_5k ( + id bigint NOT NULL, + learn_id bigint NOT NULL, + map_sheet_num bigint NOT NULL, + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint +); + + +ALTER TABLE public.tb_map_sheet_learn_5k OWNER TO kamco_cds; + +-- +-- TOC entry 6052 (class 0 OID 0) +-- Dependencies: 346 +-- Name: TABLE tb_map_sheet_learn_5k; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_learn_5k IS '변화탐지 실행 정보 입력 5k도엽 정보'; + + +-- +-- TOC entry 6053 (class 0 OID 0) +-- Dependencies: 346 +-- Name: COLUMN tb_map_sheet_learn_5k.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_5k.id IS '식별키'; + + +-- +-- TOC entry 6054 (class 0 OID 0) +-- Dependencies: 346 +-- Name: COLUMN tb_map_sheet_learn_5k.learn_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_5k.learn_id IS 'tb_map_sheet_learn 테이블 id'; + + +-- +-- TOC entry 6055 (class 0 OID 0) +-- Dependencies: 346 +-- Name: COLUMN tb_map_sheet_learn_5k.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_5k.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 6056 (class 0 OID 0) +-- Dependencies: 346 +-- Name: COLUMN tb_map_sheet_learn_5k.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_5k.created_dttm IS '등록일시'; + + +-- +-- TOC entry 6057 (class 0 OID 0) +-- Dependencies: 346 +-- Name: COLUMN tb_map_sheet_learn_5k.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_5k.created_uid IS '등록자'; + + +-- +-- TOC entry 343 (class 1259 OID 74979) +-- Name: tb_map_sheet_learn_5k_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_learn_5k_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_learn_5k_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6058 (class 0 OID 0) +-- Dependencies: 343 +-- Name: tb_map_sheet_learn_5k_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_map_sheet_learn_5k_seq OWNED BY public.tb_map_sheet_learn_5k.id; + + +-- +-- TOC entry 308 (class 1259 OID 72465) +-- Name: tb_map_sheet_learn_data; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_learn_data ( + data_uid bigint NOT NULL, + anal_end_dttm timestamp with time zone, + anal_map_sheet character varying(255), + anal_sec bigint, + anal_state character varying(20), + anal_strt_dttm timestamp with time zone, + compare_yyyy integer, + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + data_crs_type character varying(128), + data_crs_type_name character varying(255), + data_json json, + data_name character varying(128), + data_path character varying(255), + data_state character varying(20), + data_state_dttm timestamp with time zone DEFAULT now(), + data_title character varying(255), + data_type character varying(128), + data_yyyy integer, + gukuin_used character varying(20), + gukuin_used_dttm timestamp with time zone, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint +); + + +ALTER TABLE public.tb_map_sheet_learn_data OWNER TO kamco_cds; + +-- +-- TOC entry 6059 (class 0 OID 0) +-- Dependencies: 308 +-- Name: TABLE tb_map_sheet_learn_data; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_learn_data IS '분석데이터 (AI 추론 데이터)'; + + +-- +-- TOC entry 6060 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_uid IS '데이터 식별자 (PK)'; + + +-- +-- TOC entry 6061 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.anal_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.anal_end_dttm IS '분석 종료 일시'; + + +-- +-- TOC entry 6062 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.anal_map_sheet; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.anal_map_sheet IS '분석 대상 도엽 목록'; + + +-- +-- TOC entry 6063 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.anal_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.anal_state IS '분석 진행 상태'; + + +-- +-- TOC entry 6064 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.anal_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.anal_strt_dttm IS '분석 시작 일시'; + + +-- +-- TOC entry 6065 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.compare_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.compare_yyyy IS '비교 기준 연도'; + + +-- +-- TOC entry 6066 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.created_dttm IS '최초 등록 일시'; + + +-- +-- TOC entry 6067 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.created_uid IS '등록자 식별키'; + + +-- +-- TOC entry 6068 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_crs_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_crs_type IS '좌표계 유형 (EPSG 코드 등)'; + + +-- +-- TOC entry 6069 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_crs_type_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_crs_type_name IS '좌표계 명칭'; + + +-- +-- TOC entry 6070 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_json; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_json IS '분석 설정 및 결과 JSON'; + + +-- +-- TOC entry 6071 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_name IS '데이터 명칭'; + + +-- +-- TOC entry 6072 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_path IS '데이터 저장 경로'; + + +-- +-- TOC entry 6073 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_state IS '데이터 처리 상태'; + + +-- +-- TOC entry 6074 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_state_dttm IS '데이터 상태 변경 일시'; + + +-- +-- TOC entry 6075 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_title; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_title IS '데이터 제목'; + + +-- +-- TOC entry 6076 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_type IS '데이터 유형 (AI_INFERENCE 등)'; + + +-- +-- TOC entry 6077 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.data_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.data_yyyy IS '데이터 대상 연도'; + + +-- +-- TOC entry 6078 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.gukuin_used; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.gukuin_used IS '국유인(Gukuin) 시스템 반영 여부'; + + +-- +-- TOC entry 6079 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.gukuin_used_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.gukuin_used_dttm IS '국유인 시스템 반영 일시'; + + +-- +-- TOC entry 6080 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.updated_dttm IS '최종 수정 일시'; + + +-- +-- TOC entry 6081 (class 0 OID 0) +-- Dependencies: 308 +-- Name: COLUMN tb_map_sheet_learn_data.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data.updated_uid IS '수정자 식별키'; + + +-- +-- TOC entry 248 (class 1259 OID 48162) +-- Name: tb_map_sheet_learn_data_data_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_learn_data_data_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_learn_data_data_uid OWNER TO kamco_cds; + +-- +-- TOC entry 309 (class 1259 OID 72474) +-- Name: tb_map_sheet_learn_data_geom; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_learn_data_geom ( + geo_uid bigint NOT NULL, + after_yyyy integer, + area double precision, + before_yyyy integer, + cd_prob double precision, + class_after_cd character varying(100), + class_after_prob double precision, + class_before_cd character varying(100), + class_before_prob double precision, + created_dttm timestamp with time zone, + created_uid bigint, + data_uid bigint, + geo_type character varying(100), + map_sheet_num bigint, + updated_dttm timestamp with time zone, + updated_uid bigint, + geom public.geometry(Polygon,5186), + label_status_cd character varying(20) DEFAULT 'WAIT'::character varying, + survey_result_cd character varying(20), + failure_reason_cd character varying(20), + history_jsonb jsonb DEFAULT '[]'::jsonb +); + + +ALTER TABLE public.tb_map_sheet_learn_data_geom OWNER TO kamco_cds; + +-- +-- TOC entry 6082 (class 0 OID 0) +-- Dependencies: 309 +-- Name: TABLE tb_map_sheet_learn_data_geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_learn_data_geom IS '라벨링 툴에서 그린 폴리곤 저장'; + + +-- +-- TOC entry 6083 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.geo_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.geo_uid IS '공간 데이터 식별자 (PK)'; + + +-- +-- TOC entry 6084 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.after_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.after_yyyy IS '변화 후 연도'; + + +-- +-- TOC entry 6085 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.area; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.area IS '탐지 면적 (제곱미터)'; + + +-- +-- TOC entry 6086 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.before_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.before_yyyy IS '변화 전 연도'; + + +-- +-- TOC entry 6087 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.cd_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.cd_prob IS '변화 탐지(Change Detection) 확률'; + + +-- +-- TOC entry 6088 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.class_after_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.class_after_cd IS '변화 후 지목/분류명'; + + +-- +-- TOC entry 6089 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.class_after_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.class_after_prob IS '변화 후 분류 신뢰도'; + + +-- +-- TOC entry 6090 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.class_before_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.class_before_cd IS '변화 전 지목/분류명'; + + +-- +-- TOC entry 6091 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.class_before_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.class_before_prob IS '변화 전 분류 신뢰도'; + + +-- +-- TOC entry 6092 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.created_dttm IS '등록 일시'; + + +-- +-- TOC entry 6093 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.created_uid IS '등록자 식별키'; + + +-- +-- TOC entry 6094 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.data_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.data_uid IS '부모 데이터 식별자 (FK: tb_map_sheet_learn_data)'; + + +-- +-- TOC entry 6095 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.geo_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.geo_type IS '지형지물 유형'; + + +-- +-- TOC entry 6096 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.map_sheet_num IS '도엽 번호'; + + +-- +-- TOC entry 6097 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.updated_dttm IS '수정 일시'; + + +-- +-- TOC entry 6098 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.updated_uid IS '수정자 식별키'; + + +-- +-- TOC entry 6099 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.geom; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.geom IS '탐지 결과 폴리곤 (Geometry, EPSG:5186)'; + + +-- +-- TOC entry 6100 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.label_status_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.label_status_cd IS '제작상태 (WAIT:미확인, DONE:완료, EXCLUDE:제외)'; + + +-- +-- TOC entry 6101 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.survey_result_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.survey_result_cd IS '실태조사 검증결과 코드'; + + +-- +-- TOC entry 6102 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.failure_reason_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.failure_reason_cd IS '부적합 사유 코드'; + + +-- +-- TOC entry 6103 (class 0 OID 0) +-- Dependencies: 309 +-- Name: COLUMN tb_map_sheet_learn_data_geom.history_jsonb; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_learn_data_geom.history_jsonb IS '작업 및 검수 수정 이력 데이터 (JSON 배열)'; + + +-- +-- TOC entry 246 (class 1259 OID 48065) +-- Name: tb_map_sheet_learn_data_geom_geom_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_learn_data_geom_geom_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_learn_data_geom_geom_uid OWNER TO kamco_cds; + +-- +-- TOC entry 342 (class 1259 OID 74978) +-- Name: tb_map_sheet_learn_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_learn_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_learn_uid OWNER TO kamco_cds; + +-- +-- TOC entry 6104 (class 0 OID 0) +-- Dependencies: 342 +-- Name: tb_map_sheet_learn_uid; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_map_sheet_learn_uid OWNED BY public.tb_map_sheet_learn.id; + + +-- +-- TOC entry 310 (class 1259 OID 72482) +-- Name: tb_map_sheet_mng; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_mng ( + mng_yyyy integer NOT NULL, + mng_state character varying(20) DEFAULT 'NOTYET'::character varying, + sync_state character varying(20) DEFAULT 'NOTYET'::character varying, + mng_state_dttm timestamp with time zone DEFAULT now(), + sync_state_dttm timestamp with time zone DEFAULT now(), + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT now(), + updated_uid bigint, + mng_path character varying(255) DEFAULT 'NULL::character varying'::character varying, + sync_check_state character varying(20) DEFAULT 'NOTYET'::character varying, + sync_strt_dttm timestamp with time zone, + sync_end_dttm timestamp with time zone, + sync_check_strt_dttm timestamp with time zone, + sync_check_end_dttm timestamp with time zone +); + + +ALTER TABLE public.tb_map_sheet_mng OWNER TO kamco_cds; + +-- +-- TOC entry 6105 (class 0 OID 0) +-- Dependencies: 310 +-- Name: TABLE tb_map_sheet_mng; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_mng IS '영상관리상태정보'; + + +-- +-- TOC entry 6106 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.mng_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.mng_yyyy IS '년도'; + + +-- +-- TOC entry 6107 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.mng_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.mng_state IS '업로드(작업)상태'; + + +-- +-- TOC entry 6108 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_state IS '동기화상태'; + + +-- +-- TOC entry 6109 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.mng_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.mng_state_dttm IS '업로드상태일시'; + + +-- +-- TOC entry 6110 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_state_dttm IS '동기화상태일시'; + + +-- +-- TOC entry 6111 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.created_dttm IS '등록일시'; + + +-- +-- TOC entry 6112 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.created_uid IS '등록자'; + + +-- +-- TOC entry 6113 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 6114 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.updated_uid IS '수정자'; + + +-- +-- TOC entry 6115 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.mng_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.mng_path IS '관리경로'; + + +-- +-- TOC entry 6116 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_check_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_check_state IS '싱크데이터체크상태'; + + +-- +-- TOC entry 6117 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_strt_dttm IS '동기화시작일'; + + +-- +-- TOC entry 6118 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_end_dttm IS '동기화종료일'; + + +-- +-- TOC entry 6119 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_check_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_check_strt_dttm IS '동기화데이터체크시작일'; + + +-- +-- TOC entry 6120 (class 0 OID 0) +-- Dependencies: 310 +-- Name: COLUMN tb_map_sheet_mng.sync_check_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng.sync_check_end_dttm IS '동기화데이터체크종료일'; + + +-- +-- TOC entry 311 (class 1259 OID 72494) +-- Name: tb_map_sheet_mng_files; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_mng_files ( + file_uid bigint NOT NULL, + mng_yyyy integer NOT NULL, + map_sheet_num character varying(20) NOT NULL, + ref_map_sheet_num character varying(20), + file_path character varying(255), + file_name character varying(100), + file_ext character varying(20), + hst_uid bigint, + file_size bigint, + file_state character varying(20), + file_del boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.tb_map_sheet_mng_files OWNER TO kamco_cds; + +-- +-- TOC entry 6121 (class 0 OID 0) +-- Dependencies: 311 +-- Name: TABLE tb_map_sheet_mng_files; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_mng_files IS '영상관리파일'; + + +-- +-- TOC entry 6122 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_uid IS '식별키'; + + +-- +-- TOC entry 6123 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.mng_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.mng_yyyy IS '관리년도'; + + +-- +-- TOC entry 6124 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 6125 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.ref_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.ref_map_sheet_num IS '도엽참조(부모)번호'; + + +-- +-- TOC entry 6126 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_path IS '경로'; + + +-- +-- TOC entry 6127 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_name IS '파일명'; + + +-- +-- TOC entry 6128 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_ext; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_ext IS '파일확장자'; + + +-- +-- TOC entry 6129 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.hst_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.hst_uid IS '관리내역식별키'; + + +-- +-- TOC entry 6130 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_size; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_size IS '파일용량'; + + +-- +-- TOC entry 6131 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_state IS '파일상태'; + + +-- +-- TOC entry 6132 (class 0 OID 0) +-- Dependencies: 311 +-- Name: COLUMN tb_map_sheet_mng_files.file_del; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_files.file_del IS '파일삭제'; + + +-- +-- TOC entry 312 (class 1259 OID 72502) +-- Name: tb_map_sheet_mng_files_file_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_mng_files_file_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_mng_files_file_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6133 (class 0 OID 0) +-- Dependencies: 312 +-- Name: tb_map_sheet_mng_files_file_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_map_sheet_mng_files_file_uid_seq OWNED BY public.tb_map_sheet_mng_files.file_uid; + + +-- +-- TOC entry 249 (class 1259 OID 48190) +-- Name: tb_map_sheet_mng_hst_hst_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_map_sheet_mng_hst_hst_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_map_sheet_mng_hst_hst_uid OWNER TO kamco_cds; + +-- +-- TOC entry 313 (class 1259 OID 72503) +-- Name: tb_map_sheet_mng_hst; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_mng_hst ( + hst_uid bigint DEFAULT nextval('public.tb_map_sheet_mng_hst_hst_uid'::regclass) NOT NULL, + mng_yyyy integer, + map_sheet_code integer, + map_sheet_num character varying(20), + map_sheet_name character varying(100) DEFAULT 'NULL::character varying'::character varying, + map_sheet_code_src integer, + scale_ratio integer, + data_state character varying(20) DEFAULT 'NOTYET'::character varying, + data_state_dttm timestamp with time zone DEFAULT '2025-12-12 16:26:49.460175+09'::timestamp with time zone, + use_inference character varying(20) DEFAULT NULL::character varying, + use_inference_dttm timestamp with time zone DEFAULT '2025-12-12 16:26:49.460175+09'::timestamp with time zone, + map_sheet_path character varying(255), + ref_map_sheet_num character varying(20), + created_dttm timestamp with time zone DEFAULT '2025-12-12 16:26:49.460175+09'::timestamp with time zone, + created_uid bigint, + updated_dttm timestamp with time zone DEFAULT '2025-12-12 16:26:49.460175+09'::timestamp with time zone, + updated_uid bigint, + sync_state character varying(20) DEFAULT 'NOTYET'::character varying, + sync_check_state character varying(20) DEFAULT 'NOTYET'::character varying, + sync_strt_dttm timestamp with time zone, + sync_end_dttm timestamp with time zone, + sync_check_strt_dttm timestamp with time zone, + sync_check_end_dttm timestamp with time zone, + tif_size_bytes bigint, + tfw_size_bytes bigint, + total_size_bytes bigint, + sync_tif_file_name character varying(100), + sync_tfw_file_name character varying(100), + sync_check_tif_file_name character varying(100), + sync_check_tfw_file_name character varying(100) +); + + +ALTER TABLE public.tb_map_sheet_mng_hst OWNER TO kamco_cds; + +-- +-- TOC entry 6134 (class 0 OID 0) +-- Dependencies: 313 +-- Name: TABLE tb_map_sheet_mng_hst; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_mng_hst IS '영상관리이력'; + + +-- +-- TOC entry 6135 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.hst_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.hst_uid IS '식별키'; + + +-- +-- TOC entry 6136 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.mng_yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.mng_yyyy IS '년도'; + + +-- +-- TOC entry 6137 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.map_sheet_code; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.map_sheet_code IS '도엽코드'; + + +-- +-- TOC entry 6138 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 6139 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.map_sheet_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.map_sheet_name IS '도엽명'; + + +-- +-- TOC entry 6140 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.map_sheet_code_src; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.map_sheet_code_src IS '원천도엽코드'; + + +-- +-- TOC entry 6141 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.scale_ratio; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.scale_ratio IS '도엽비율'; + + +-- +-- TOC entry 6142 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.data_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.data_state IS '데이터상태(정상,데이터없음)'; + + +-- +-- TOC entry 6143 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.data_state_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.data_state_dttm IS '상태일시'; + + +-- +-- TOC entry 6144 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.use_inference; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.use_inference IS '추론제외(여,부)'; + + +-- +-- TOC entry 6145 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.use_inference_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.use_inference_dttm IS '추론제외일시'; + + +-- +-- TOC entry 6146 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.map_sheet_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.map_sheet_path IS '도엽경로'; + + +-- +-- TOC entry 6147 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.ref_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.ref_map_sheet_num IS '참조(부모)도엽번호'; + + +-- +-- TOC entry 6148 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.created_dttm IS '등록일시'; + + +-- +-- TOC entry 6149 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.created_uid IS '등록자'; + + +-- +-- TOC entry 6150 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 6151 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.updated_uid IS '수정자'; + + +-- +-- TOC entry 6152 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_state IS '동기화상태'; + + +-- +-- TOC entry 6153 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_check_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_check_state IS '동기화데이터체크상태'; + + +-- +-- TOC entry 6154 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_strt_dttm IS '동기화시작일'; + + +-- +-- TOC entry 6155 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_end_dttm IS '동기화종료일'; + + +-- +-- TOC entry 6156 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_check_strt_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_check_strt_dttm IS '동기화데이터체크시작일'; + + +-- +-- TOC entry 6157 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_check_end_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_check_end_dttm IS '동기화데이터체크종료일'; + + +-- +-- TOC entry 6158 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_tif_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_tif_file_name IS 'tif싱크파일명'; + + +-- +-- TOC entry 6159 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_tfw_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_tfw_file_name IS 'tfw싱크파일경로'; + + +-- +-- TOC entry 6160 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_check_tif_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_check_tif_file_name IS 'tif처리파일명'; + + +-- +-- TOC entry 6161 (class 0 OID 0) +-- Dependencies: 313 +-- Name: COLUMN tb_map_sheet_mng_hst.sync_check_tfw_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_mng_hst.sync_check_tfw_file_name IS 'tfw처리파일명'; + + +-- +-- TOC entry 314 (class 1259 OID 72519) +-- Name: tb_map_sheet_years_map; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_map_sheet_years_map ( + map_sheet_num character varying(30) NOT NULL, + ref_map_sheet_num character varying(20), + map_years text, + lvl integer, + max_year integer, + min_year integer +); + + +ALTER TABLE public.tb_map_sheet_years_map OWNER TO kamco_cds; + +-- +-- TOC entry 6162 (class 0 OID 0) +-- Dependencies: 314 +-- Name: TABLE tb_map_sheet_years_map; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_map_sheet_years_map IS '도엽별비교가능년도'; + + +-- +-- TOC entry 6163 (class 0 OID 0) +-- Dependencies: 314 +-- Name: COLUMN tb_map_sheet_years_map.map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_years_map.map_sheet_num IS '도엽번호'; + + +-- +-- TOC entry 6164 (class 0 OID 0) +-- Dependencies: 314 +-- Name: COLUMN tb_map_sheet_years_map.ref_map_sheet_num; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_years_map.ref_map_sheet_num IS '참조도엽번호'; + + +-- +-- TOC entry 6165 (class 0 OID 0) +-- Dependencies: 314 +-- Name: COLUMN tb_map_sheet_years_map.map_years; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_years_map.map_years IS '매핑가능년도(배열)'; + + +-- +-- TOC entry 6166 (class 0 OID 0) +-- Dependencies: 314 +-- Name: COLUMN tb_map_sheet_years_map.max_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_years_map.max_year IS '년도최근'; + + +-- +-- TOC entry 6167 (class 0 OID 0) +-- Dependencies: 314 +-- Name: COLUMN tb_map_sheet_years_map.min_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_map_sheet_years_map.min_year IS '년도(최소)'; + + +-- +-- TOC entry 315 (class 1259 OID 72525) +-- Name: tb_member; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_member ( + id bigint NOT NULL, + uuid uuid DEFAULT gen_random_uuid() NOT NULL, + user_role character varying(50) NOT NULL, + user_id character varying(50) NOT NULL, + employee_no character varying(50) NOT NULL, + name character varying(100) NOT NULL, + password character varying(255) NOT NULL, + status character varying(20) DEFAULT 'INACTIVE'::character varying, + created_dttm timestamp with time zone DEFAULT now() NOT NULL, + updated_dttm timestamp with time zone DEFAULT now(), + first_login_dttm timestamp with time zone, + last_login_dttm timestamp with time zone, + login_fail_count bigint DEFAULT 0, + rgstr_uid bigint, + updtr_uid bigint, + status_chg_dttm timestamp with time zone, + pwd_reset_yn boolean +); + + +ALTER TABLE public.tb_member OWNER TO kamco_cds; + +-- +-- TOC entry 6168 (class 0 OID 0) +-- Dependencies: 315 +-- Name: TABLE tb_member; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_member IS '시스템 회원 관리 정보'; + + +-- +-- TOC entry 6169 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.id IS '회원 고유 식별자 (PK)'; + + +-- +-- TOC entry 6170 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.uuid IS '회원 UUID'; + + +-- +-- TOC entry 6171 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.user_role; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.user_role IS '사용자 권한 그룹'; + + +-- +-- TOC entry 6172 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.user_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.user_id IS '로그인 ID'; + + +-- +-- TOC entry 6173 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.employee_no; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.employee_no IS '사번'; + + +-- +-- TOC entry 6174 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.name IS '성명'; + + +-- +-- TOC entry 6175 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.password; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.password IS '암호화된 비밀번호'; + + +-- +-- TOC entry 6176 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.status IS '계정 상태 (ACTIVE, INACTIVE 등)'; + + +-- +-- TOC entry 6177 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.created_dttm IS '계정 생성 일시'; + + +-- +-- TOC entry 6178 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.updated_dttm IS '계정 수정 일시'; + + +-- +-- TOC entry 6179 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.first_login_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.first_login_dttm IS '최인 로그인'; + + +-- +-- TOC entry 6180 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.last_login_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.last_login_dttm IS '최종 로그인'; + + +-- +-- TOC entry 6181 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.login_fail_count; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.login_fail_count IS '로그인 실패 카운트'; + + +-- +-- TOC entry 6182 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.rgstr_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.rgstr_uid IS '등록자'; + + +-- +-- TOC entry 6183 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.updtr_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.updtr_uid IS '수정자'; + + +-- +-- TOC entry 6184 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.status_chg_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.status_chg_dttm IS '상태 변경일'; + + +-- +-- TOC entry 6185 (class 0 OID 0) +-- Dependencies: 315 +-- Name: COLUMN tb_member.pwd_reset_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_member.pwd_reset_yn IS '패스워드 변경 여부'; + + +-- +-- TOC entry 316 (class 1259 OID 72543) +-- Name: tb_member_copy; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_member_copy ( + id bigint, + uuid uuid, + user_role character varying(50), + user_id character varying(50), + employee_no character varying(50), + name character varying(100), + password character varying(255), + status character varying(20), + created_dttm timestamp with time zone, + updated_dttm timestamp with time zone, + first_login_dttm timestamp with time zone, + last_login_dttm timestamp with time zone, + login_fail_count bigint, + rgstr_uid bigint, + updtr_uid bigint, + status_chg_dttm timestamp with time zone, + pwd_reset_yn boolean +); + + +ALTER TABLE public.tb_member_copy OWNER TO kamco_cds; + +-- +-- TOC entry 317 (class 1259 OID 72548) +-- Name: tb_member_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_member_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_member_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6186 (class 0 OID 0) +-- Dependencies: 317 +-- Name: tb_member_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_member_id_seq OWNED BY public.tb_member.id; + + +-- +-- TOC entry 318 (class 1259 OID 72549) +-- Name: tb_menu; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_menu ( + menu_uid character varying(255) NOT NULL, + menu_nm character varying(255) DEFAULT 'NULL::character varying'::character varying, + menu_url character varying(255) DEFAULT 'NULL::character varying'::character varying, + description character varying(255) DEFAULT 'NULL::character varying'::character varying, + parent_menu_uid character varying(255), + menu_order bigint, + is_use boolean DEFAULT true NOT NULL, + deleted boolean DEFAULT false NOT NULL, + created_dttm timestamp with time zone DEFAULT '2025-11-18 10:36:43.426102+09'::timestamp with time zone, + updated_dttm timestamp with time zone DEFAULT '2025-11-18 10:36:43.47076+09'::timestamp with time zone, + created_uid bigint, + updated_uid bigint +); + + +ALTER TABLE public.tb_menu OWNER TO kamco_cds; + +-- +-- TOC entry 6187 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.menu_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.menu_uid IS '메뉴아이디'; + + +-- +-- TOC entry 6188 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.menu_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.menu_nm IS '메뉴명'; + + +-- +-- TOC entry 6189 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.menu_url; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.menu_url IS '메뉴URL'; + + +-- +-- TOC entry 6190 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.description; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.description IS '설명'; + + +-- +-- TOC entry 6191 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.parent_menu_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.parent_menu_uid IS '부모메뉴아이디'; + + +-- +-- TOC entry 6192 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.menu_order; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.menu_order IS '순서정렬'; + + +-- +-- TOC entry 6193 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.is_use; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.is_use IS '사용여부'; + + +-- +-- TOC entry 6194 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.deleted IS '삭제여부'; + + +-- +-- TOC entry 6195 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.created_dttm IS '등록일시'; + + +-- +-- TOC entry 6196 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 6197 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.created_uid IS '등록자uid'; + + +-- +-- TOC entry 6198 (class 0 OID 0) +-- Dependencies: 318 +-- Name: COLUMN tb_menu.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu.updated_uid IS '수정자uid'; + + +-- +-- TOC entry 250 (class 1259 OID 48241) +-- Name: tb_menu_mapp_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_menu_mapp_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_menu_mapp_seq OWNER TO kamco_cds; + +-- +-- TOC entry 319 (class 1259 OID 72564) +-- Name: tb_menu_mapp; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_menu_mapp ( + mapp_uid bigint DEFAULT nextval('public.tb_menu_mapp_seq'::regclass) NOT NULL, + menu_uid character varying(255) NOT NULL, + deleted boolean DEFAULT false NOT NULL, + role_code character varying(50) +); + + +ALTER TABLE public.tb_menu_mapp OWNER TO kamco_cds; + +-- +-- TOC entry 6199 (class 0 OID 0) +-- Dependencies: 319 +-- Name: COLUMN tb_menu_mapp.mapp_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu_mapp.mapp_uid IS '식별키'; + + +-- +-- TOC entry 6200 (class 0 OID 0) +-- Dependencies: 319 +-- Name: COLUMN tb_menu_mapp.menu_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu_mapp.menu_uid IS '메뉴식별키'; + + +-- +-- TOC entry 6201 (class 0 OID 0) +-- Dependencies: 319 +-- Name: COLUMN tb_menu_mapp.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_menu_mapp.deleted IS '삭제여부'; + + +-- +-- TOC entry 251 (class 1259 OID 48250) +-- Name: tb_model_deploy_hst_deploy_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_model_deploy_hst_deploy_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_model_deploy_hst_deploy_uid OWNER TO kamco_cds; + +-- +-- TOC entry 320 (class 1259 OID 72572) +-- Name: tb_model_deploy_hst; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_model_deploy_hst ( + deploy_uid bigint DEFAULT nextval('public.tb_model_deploy_hst_deploy_uid'::regclass) NOT NULL, + model_uid bigint, + server_id bigint, + deploy_state character varying(20), + deploy_dttm timestamp with time zone, + created_dttm timestamp with time zone, + created_uid bigint, + updated_dttm timestamp with time zone, + updated_uid bigint, + model_ver_uid bigint +); + + +ALTER TABLE public.tb_model_deploy_hst OWNER TO kamco_cds; + +-- +-- TOC entry 6202 (class 0 OID 0) +-- Dependencies: 320 +-- Name: TABLE tb_model_deploy_hst; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_model_deploy_hst IS '모델배포이력'; + + +-- +-- TOC entry 6203 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.deploy_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.deploy_uid IS '식별키'; + + +-- +-- TOC entry 6204 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.model_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.model_uid IS '모델식별키'; + + +-- +-- TOC entry 6205 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.server_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.server_id IS '서버ID'; + + +-- +-- TOC entry 6206 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.deploy_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.deploy_state IS '배포상태'; + + +-- +-- TOC entry 6207 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.deploy_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.deploy_dttm IS '배포일'; + + +-- +-- TOC entry 6208 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.created_dttm IS '등록일시'; + + +-- +-- TOC entry 6209 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.created_uid IS '등록자'; + + +-- +-- TOC entry 6210 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 6211 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.updated_uid IS '수정자'; + + +-- +-- TOC entry 6212 (class 0 OID 0) +-- Dependencies: 320 +-- Name: COLUMN tb_model_deploy_hst.model_ver_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_deploy_hst.model_ver_uid IS '모델버전uid'; + + +-- +-- TOC entry 321 (class 1259 OID 72577) +-- Name: tb_model_mng; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_model_mng ( + model_uid bigint NOT NULL, + model_ver character varying(50) NOT NULL, + create_complete_dttm timestamp with time zone DEFAULT now(), + recent_use_dttm timestamp with time zone, + deleted boolean DEFAULT false NOT NULL, + created_uid bigint, + updated_uid bigint, + created_dttm timestamp with time zone DEFAULT now(), + updated_dttm timestamp with time zone, + model_type character varying(10), + file_path character varying(255), + file_name character varying(100), + memo character varying(255), + uuid uuid, + cd_model_path character varying(155), + cd_model_file_name character varying(155), + cd_model_config_path character varying(155), + cd_model_config_file_name character varying(155), + cls_model_path character varying(155), + cls_model_file_name character varying(155), + cls_model_version character varying(100), + priority double precision DEFAULT 0 +); + + +ALTER TABLE public.tb_model_mng OWNER TO kamco_cds; + +-- +-- TOC entry 6213 (class 0 OID 0) +-- Dependencies: 321 +-- Name: TABLE tb_model_mng; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_model_mng IS '추론 서버 AI 모델 관리 마스터'; + + +-- +-- TOC entry 6214 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.model_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.model_uid IS '모델 식별자 (PK)'; + + +-- +-- TOC entry 6215 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.model_ver; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.model_ver IS '모델 버전 명칭 (M1, M2, M3 등)'; + + +-- +-- TOC entry 6216 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.create_complete_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.create_complete_dttm IS '모델 생성 완료 일시'; + + +-- +-- TOC entry 6217 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.recent_use_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.recent_use_dttm IS '최근 모델 사용(추론) 일시'; + + +-- +-- TOC entry 6218 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.deleted IS '삭제 여부 (false: 정상, true: 삭제)'; + + +-- +-- TOC entry 6219 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.created_uid IS '등록자 식별키'; + + +-- +-- TOC entry 6220 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.updated_uid IS '수정자 식별키'; + + +-- +-- TOC entry 6221 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.created_dttm IS '데이터 등록 일시'; + + +-- +-- TOC entry 6222 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.updated_dttm IS '데이터 수정 일시'; + + +-- +-- TOC entry 6223 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.model_type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.model_type IS '모델 유형 (예: CD-변화탐지, CLS-분류)'; + + +-- +-- TOC entry 6224 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.file_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.file_path IS '서버 내 모델 파일 저장 경로'; + + +-- +-- TOC entry 6225 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.file_name IS '저장된 모델 파일명'; + + +-- +-- TOC entry 6226 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.memo; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.memo IS '모델 관련 비고 및 메모'; + + +-- +-- TOC entry 6227 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.uuid IS 'uuid'; + + +-- +-- TOC entry 6228 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cd_model_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cd_model_path IS '모델경로'; + + +-- +-- TOC entry 6229 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cd_model_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cd_model_file_name IS '모델파일명'; + + +-- +-- TOC entry 6230 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cd_model_config_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cd_model_config_path IS '모델config경로'; + + +-- +-- TOC entry 6231 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cd_model_config_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cd_model_config_file_name IS '모델config파일명'; + + +-- +-- TOC entry 6232 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cls_model_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cls_model_path IS 'cls모델경로'; + + +-- +-- TOC entry 6233 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cls_model_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cls_model_file_name IS 'cls모델파일명'; + + +-- +-- TOC entry 6234 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.cls_model_version; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.cls_model_version IS 'cls모델버전'; + + +-- +-- TOC entry 6235 (class 0 OID 0) +-- Dependencies: 321 +-- Name: COLUMN tb_model_mng.priority; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_mng.priority IS 'priority'; + + +-- +-- TOC entry 322 (class 1259 OID 72589) +-- Name: tb_model_mng_bak; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_model_mng_bak ( + model_uid bigint, + model_nm character varying(100), + model_cate character varying(64), + model_path character varying(255), + created_dttm timestamp with time zone, + created_uid bigint, + updated_dttm timestamp with time zone, + updated_uid bigint, + model_cntnt text, + bbone_ver character varying(20) +); + + +ALTER TABLE public.tb_model_mng_bak OWNER TO kamco_cds; + +-- +-- TOC entry 252 (class 1259 OID 48271) +-- Name: tb_model_mng_model_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_model_mng_model_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_model_mng_model_uid OWNER TO kamco_cds; + +-- +-- TOC entry 323 (class 1259 OID 72594) +-- Name: tb_model_mng_model_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_model_mng_model_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_model_mng_model_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6236 (class 0 OID 0) +-- Dependencies: 323 +-- Name: tb_model_mng_model_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_model_mng_model_uid_seq OWNED BY public.tb_model_mng.model_uid; + + +-- +-- TOC entry 349 (class 1259 OID 75016) +-- Name: tb_model_result_metric; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_model_result_metric ( + metric_uid bigint NOT NULL, + model_uid bigint, + model_ver_uid bigint, + metrics jsonb, + f1_score double precision DEFAULT 0, + "precision" double precision DEFAULT 0, + recall double precision DEFAULT 0, + loss double precision DEFAULT 0, + iou double precision DEFAULT 0, + created_dttm timestamp with time zone DEFAULT now(), + updated_dttm timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.tb_model_result_metric OWNER TO kamco_cds; + +-- +-- TOC entry 6237 (class 0 OID 0) +-- Dependencies: 349 +-- Name: TABLE tb_model_result_metric; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_model_result_metric IS '학습성능지표'; + + +-- +-- TOC entry 6238 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.metric_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.metric_uid IS '메트릭 ID (PK)'; + + +-- +-- TOC entry 6239 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.model_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.model_uid IS '모델 ID'; + + +-- +-- TOC entry 6240 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.model_ver_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.model_ver_uid IS '모델버전 ID'; + + +-- +-- TOC entry 6241 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.metrics; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.metrics IS '전체 메트릭'; + + +-- +-- TOC entry 6242 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.f1_score; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.f1_score IS 'F1-Score'; + + +-- +-- TOC entry 6243 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric."precision"; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric."precision" IS 'Precision'; + + +-- +-- TOC entry 6244 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.recall; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.recall IS 'Recall'; + + +-- +-- TOC entry 6245 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.loss; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.loss IS 'Loss'; + + +-- +-- TOC entry 6246 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.iou; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.iou IS 'IoU'; + + +-- +-- TOC entry 6247 (class 0 OID 0) +-- Dependencies: 349 +-- Name: COLUMN tb_model_result_metric.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_result_metric.created_dttm IS '등록일'; + + +-- +-- TOC entry 348 (class 1259 OID 75015) +-- Name: tb_model_result_metric_metric_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_model_result_metric_metric_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_model_result_metric_metric_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6248 (class 0 OID 0) +-- Dependencies: 348 +-- Name: tb_model_result_metric_metric_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_model_result_metric_metric_uid_seq OWNED BY public.tb_model_result_metric.metric_uid; + + +-- +-- TOC entry 253 (class 1259 OID 48281) +-- Name: tb_model_ver_model_ver_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_model_ver_model_ver_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_model_ver_model_ver_uid OWNER TO kamco_cds; + +-- +-- TOC entry 324 (class 1259 OID 72598) +-- Name: tb_model_ver; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_model_ver ( + model_ver_uid bigint DEFAULT nextval('public.tb_model_ver_model_ver_uid'::regclass) NOT NULL, + model_uid bigint NOT NULL, + model_cate character varying(64), + model_ver character varying(64), + used_state character varying(20), + model_state character varying(20), + quality_prob double precision, + deploy_state character varying(20), + model_path character varying(255), + created_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_dttm timestamp with time zone, + updated_uid bigint, + deleted boolean, + leaning_rate double precision[], + batch_size double precision[], + dropout_rate double precision[], + number_of_filters double precision[], + best_state character varying(20), + copy_state character varying(20), + hyper_params json, + ver_cntnt text +); + + +ALTER TABLE public.tb_model_ver OWNER TO kamco_cds; + +-- +-- TOC entry 6249 (class 0 OID 0) +-- Dependencies: 324 +-- Name: TABLE tb_model_ver; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_model_ver IS '모델관리버전정보'; + + +-- +-- TOC entry 6250 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.model_ver_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.model_ver_uid IS '식별키'; + + +-- +-- TOC entry 6251 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.model_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.model_uid IS '모델식별키'; + + +-- +-- TOC entry 6252 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.model_cate; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.model_cate IS '분류'; + + +-- +-- TOC entry 6253 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.model_ver; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.model_ver IS '모델버전'; + + +-- +-- TOC entry 6254 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.used_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.used_state IS '사용상태'; + + +-- +-- TOC entry 6255 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.model_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.model_state IS '모델상태'; + + +-- +-- TOC entry 6256 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.quality_prob; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.quality_prob IS '모델정확도'; + + +-- +-- TOC entry 6257 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.deploy_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.deploy_state IS '배포상태'; + + +-- +-- TOC entry 6258 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.model_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.model_path IS '모델경로'; + + +-- +-- TOC entry 6259 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.created_dttm IS '등록일'; + + +-- +-- TOC entry 6260 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.created_uid IS '등록자'; + + +-- +-- TOC entry 6261 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.updated_dttm IS '수정일'; + + +-- +-- TOC entry 6262 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.updated_uid IS '수정자'; + + +-- +-- TOC entry 6263 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.deleted IS '삭제여부'; + + +-- +-- TOC entry 6264 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.leaning_rate; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.leaning_rate IS '학습률'; + + +-- +-- TOC entry 6265 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.batch_size; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.batch_size IS '배치크기'; + + +-- +-- TOC entry 6266 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.dropout_rate; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.dropout_rate IS '드롭아웃비율'; + + +-- +-- TOC entry 6267 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.number_of_filters; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.number_of_filters IS 'CNN레이어필터수'; + + +-- +-- TOC entry 6268 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.best_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.best_state IS 'best상태'; + + +-- +-- TOC entry 6269 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.copy_state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.copy_state IS '이관대상'; + + +-- +-- TOC entry 6270 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.hyper_params; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.hyper_params IS '하이퍼파라메터JSON'; + + +-- +-- TOC entry 6271 (class 0 OID 0) +-- Dependencies: 324 +-- Name: COLUMN tb_model_ver.ver_cntnt; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_model_ver.ver_cntnt IS '내용설명'; + + +-- +-- TOC entry 347 (class 1259 OID 75007) +-- Name: tb_pnu; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_pnu ( + id bigint NOT NULL, + geom_uuid uuid, + pnu character(19), + created_dttm timestamp with time zone, + created_uid bigint, + del_yn boolean DEFAULT false +); + + +ALTER TABLE public.tb_pnu OWNER TO kamco_cds; + +-- +-- TOC entry 6272 (class 0 OID 0) +-- Dependencies: 347 +-- Name: TABLE tb_pnu; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_pnu IS 'GEOM PNU 정보'; + + +-- +-- TOC entry 6273 (class 0 OID 0) +-- Dependencies: 347 +-- Name: COLUMN tb_pnu.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_pnu.id IS '식별키'; + + +-- +-- TOC entry 6274 (class 0 OID 0) +-- Dependencies: 347 +-- Name: COLUMN tb_pnu.geom_uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_pnu.geom_uuid IS 'geom uuid'; + + +-- +-- TOC entry 6275 (class 0 OID 0) +-- Dependencies: 347 +-- Name: COLUMN tb_pnu.pnu; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_pnu.pnu IS 'pnu'; + + +-- +-- TOC entry 6276 (class 0 OID 0) +-- Dependencies: 347 +-- Name: COLUMN tb_pnu.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_pnu.created_dttm IS '생성일시'; + + +-- +-- TOC entry 6277 (class 0 OID 0) +-- Dependencies: 347 +-- Name: COLUMN tb_pnu.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_pnu.created_uid IS '생성자'; + + +-- +-- TOC entry 6278 (class 0 OID 0) +-- Dependencies: 347 +-- Name: COLUMN tb_pnu.del_yn; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_pnu.del_yn IS '삭제여부'; + + +-- +-- TOC entry 344 (class 1259 OID 74980) +-- Name: tb_pnu_uid; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_pnu_uid + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_pnu_uid OWNER TO kamco_cds; + +-- +-- TOC entry 6279 (class 0 OID 0) +-- Dependencies: 344 +-- Name: tb_pnu_uid; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_pnu_uid OWNED BY public.tb_pnu.id; + + +-- +-- TOC entry 254 (class 1259 OID 48291) +-- Name: tb_server_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_server_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_server_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 325 (class 1259 OID 72610) +-- Name: tb_server; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_server ( + id bigint DEFAULT nextval('public.tb_server_id_seq'::regclass) NOT NULL, + name character varying(255) NOT NULL, + description character varying(255), + type character varying(255) NOT NULL, + url character varying(255) NOT NULL, + username character varying(255), + password character varying(255), + created_at timestamp with time zone, + updated_at timestamp with time zone, + status character varying(100), + cpu_usage real +); + + +ALTER TABLE public.tb_server OWNER TO kamco_cds; + +-- +-- TOC entry 6280 (class 0 OID 0) +-- Dependencies: 325 +-- Name: TABLE tb_server; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_server IS '관리 대상 서버 목록 (k-water 원본)'; + + +-- +-- TOC entry 6281 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.id IS '서버 ID (PK)'; + + +-- +-- TOC entry 6282 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.name IS '서버명 (e.g., AI서버1)'; + + +-- +-- TOC entry 6283 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.description; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.description IS '설명'; + + +-- +-- TOC entry 6284 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.type; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.type IS '서버 유형'; + + +-- +-- TOC entry 6285 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.url; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.url IS '서버 URL'; + + +-- +-- TOC entry 6286 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.username; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.username IS '이름'; + + +-- +-- TOC entry 6287 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.password; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.password IS '패스워드'; + + +-- +-- TOC entry 6288 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.created_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.created_at IS '생성 일시'; + + +-- +-- TOC entry 6289 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.updated_at; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.updated_at IS '수정 일시'; + + +-- +-- TOC entry 6290 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.status IS '현재 작업 상태 (e.g., 경주35901 분석중...)'; + + +-- +-- TOC entry 6291 (class 0 OID 0) +-- Dependencies: 325 +-- Name: COLUMN tb_server.cpu_usage; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_server.cpu_usage IS '서버 사용률 (%)'; + + +-- +-- TOC entry 326 (class 1259 OID 72620) +-- Name: tb_sys_cd; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_sys_cd ( + sys_cd_id bigint NOT NULL, + sys_cd_cd character varying(255), + sys_cd_nm character varying(255), + deleted boolean NOT NULL +); + + +ALTER TABLE public.tb_sys_cd OWNER TO kamco_cds; + +-- +-- TOC entry 6292 (class 0 OID 0) +-- Dependencies: 326 +-- Name: TABLE tb_sys_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_sys_cd IS '시스템 공통 코드 그룹 마스터'; + + +-- +-- TOC entry 6293 (class 0 OID 0) +-- Dependencies: 326 +-- Name: COLUMN tb_sys_cd.sys_cd_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_sys_cd.sys_cd_id IS '시스템 코드 ID (PK)'; + + +-- +-- TOC entry 6294 (class 0 OID 0) +-- Dependencies: 326 +-- Name: COLUMN tb_sys_cd.sys_cd_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_sys_cd.sys_cd_cd IS '시스템 코드'; + + +-- +-- TOC entry 6295 (class 0 OID 0) +-- Dependencies: 326 +-- Name: COLUMN tb_sys_cd.sys_cd_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_sys_cd.sys_cd_nm IS '시스템 코드 명칭'; + + +-- +-- TOC entry 6296 (class 0 OID 0) +-- Dependencies: 326 +-- Name: COLUMN tb_sys_cd.deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_sys_cd.deleted IS '삭제 여부'; + + +-- +-- TOC entry 327 (class 1259 OID 72627) +-- Name: tb_sys_cd_sys_cd_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE public.tb_sys_cd ALTER COLUMN sys_cd_id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.tb_sys_cd_sys_cd_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + +-- +-- TOC entry 328 (class 1259 OID 72628) +-- Name: tb_test_tree_map; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_test_tree_map ( + mng_yyyy integer, + map_sheet_num character varying(20), + uid bigint NOT NULL +); + + +ALTER TABLE public.tb_test_tree_map OWNER TO kamco_cds; + +-- +-- TOC entry 329 (class 1259 OID 72632) +-- Name: tb_test_tree_map_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_test_tree_map_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_test_tree_map_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6297 (class 0 OID 0) +-- Dependencies: 329 +-- Name: tb_test_tree_map_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_test_tree_map_uid_seq OWNED BY public.tb_test_tree_map.uid; + + +-- +-- TOC entry 330 (class 1259 OID 72633) +-- Name: tb_upload_session; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_upload_session ( + upload_id character varying(100) NOT NULL, + completed_dttm timestamp(6) with time zone, + created_dttm timestamp(6) with time zone DEFAULT now() NOT NULL, + dataset_id bigint, + error_message text, + file_name character varying(255), + file_size bigint DEFAULT 0, + final_path character varying(500), + status character varying(20), + temp_path character varying(500), + chunk_total_index integer, + updated_dttm timestamp(6) with time zone DEFAULT now() NOT NULL, + chunk_index integer, + upload_divi character varying(50), + file_hash character varying(300), + total_chunks integer, + uploaded_chunks integer, + uuid uuid DEFAULT public.uuid_generate_v4() NOT NULL +); + + +ALTER TABLE public.tb_upload_session OWNER TO kamco_cds; + +-- +-- TOC entry 6298 (class 0 OID 0) +-- Dependencies: 330 +-- Name: TABLE tb_upload_session; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_upload_session IS '파일 업로드 세션'; + + +-- +-- TOC entry 6299 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.upload_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.upload_id IS '업로드 ID'; + + +-- +-- TOC entry 6300 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.completed_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.completed_dttm IS '완료 일시'; + + +-- +-- TOC entry 6301 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.created_dttm IS '생성 일시'; + + +-- +-- TOC entry 6302 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.dataset_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.dataset_id IS '데이터셋 ID'; + + +-- +-- TOC entry 6303 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.error_message; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.error_message IS '에러 메시지'; + + +-- +-- TOC entry 6304 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.file_name IS '파일명'; + + +-- +-- TOC entry 6305 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.file_size; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.file_size IS '파일 크기'; + + +-- +-- TOC entry 6306 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.final_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.final_path IS '최종 경로'; + + +-- +-- TOC entry 6307 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.status IS '상태'; + + +-- +-- TOC entry 6308 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.temp_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.temp_path IS '임시 경로'; + + +-- +-- TOC entry 6309 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.chunk_total_index; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.chunk_total_index IS '전체 청크 수'; + + +-- +-- TOC entry 6310 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.updated_dttm IS '수정 일시'; + + +-- +-- TOC entry 6311 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.chunk_index; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.chunk_index IS '업로드된 청크 수'; + + +-- +-- TOC entry 6312 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.upload_divi; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.upload_divi IS '업로드구분'; + + +-- +-- TOC entry 6313 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.file_hash; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.file_hash IS '파일해쉬'; + + +-- +-- TOC entry 6314 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.total_chunks; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.total_chunks IS '전체 청크 수'; + + +-- +-- TOC entry 6315 (class 0 OID 0) +-- Dependencies: 330 +-- Name: COLUMN tb_upload_session.uploaded_chunks; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_upload_session.uploaded_chunks IS '업로드 완료된 청크 수'; + + +-- +-- TOC entry 255 (class 1259 OID 48310) +-- Name: tb_user_user_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_user_user_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 + CYCLE; + + +ALTER SEQUENCE public.tb_user_user_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 331 (class 1259 OID 72646) +-- Name: tb_user; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_user ( + user_uid bigint DEFAULT nextval('public.tb_user_user_uid_seq'::regclass) NOT NULL, + user_nm character varying(255) NOT NULL, + user_id character varying(255) NOT NULL, + user_pw character varying(255) NOT NULL, + state character varying(255) DEFAULT 'ACTIVE'::character varying NOT NULL, + date_withdrawal timestamp with time zone, + created_dttm timestamp with time zone DEFAULT '2025-11-12 15:30:41.660246+09'::timestamp with time zone, + updated_dttm timestamp with time zone DEFAULT '2025-11-12 15:30:41.660246+09'::timestamp with time zone, + created_uid bigint, + updated_uid bigint, + user_email character varying(255), + user_auth character varying(20) NOT NULL, + emp_id character varying(255) NOT NULL +); + + +ALTER TABLE public.tb_user OWNER TO kamco_cds; + +-- +-- TOC entry 6316 (class 0 OID 0) +-- Dependencies: 331 +-- Name: TABLE tb_user; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_user IS '사용자정보'; + + +-- +-- TOC entry 6317 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.user_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.user_uid IS 'tb_user 테이블 PK'; + + +-- +-- TOC entry 6318 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.user_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.user_nm IS '사용자명'; + + +-- +-- TOC entry 6319 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.user_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.user_id IS '사용자ID'; + + +-- +-- TOC entry 6320 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.user_pw; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.user_pw IS '패스워드'; + + +-- +-- TOC entry 6321 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.state; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.state IS 'ACTIVE : 정상, LOCKED : 잠김, EXPIRED : 만료, WITHDRAWAL : 탈퇴'; + + +-- +-- TOC entry 6322 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.date_withdrawal; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.date_withdrawal IS '탈퇴일자 (계정상태가 WITHDRAWAL인 경우)'; + + +-- +-- TOC entry 6323 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.created_dttm IS '등록일'; + + +-- +-- TOC entry 6324 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.updated_dttm IS '최근 변경일'; + + +-- +-- TOC entry 6325 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.created_uid IS '등록자식별키'; + + +-- +-- TOC entry 6326 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.updated_uid IS '수정자식별키'; + + +-- +-- TOC entry 6327 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.user_email; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.user_email IS '이메일'; + + +-- +-- TOC entry 6328 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.user_auth; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.user_auth IS '권한(admin,label,check)'; + + +-- +-- TOC entry 6329 (class 0 OID 0) +-- Dependencies: 331 +-- Name: COLUMN tb_user.emp_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user.emp_id IS '사번'; + + +-- +-- TOC entry 256 (class 1259 OID 48327) +-- Name: tb_user_layer_user_layer_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_user_layer_user_layer_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_user_layer_user_layer_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 332 (class 1259 OID 72662) +-- Name: tb_user_layer; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_user_layer ( + user_layer_uid bigint DEFAULT nextval('public.tb_user_layer_user_layer_uid_seq'::regclass) NOT NULL, + user_layer_group_uid bigint NOT NULL, + layer_cd character varying(100), + layer_nm character varying(255) NOT NULL, + service_nm character varying(100), + service_url text, + min_level integer, + max_level integer, + opacity double precision DEFAULT 1.0, + is_visible boolean DEFAULT true, + is_history_layer boolean DEFAULT false, + sort_order integer DEFAULT 0, + is_selectable boolean DEFAULT true, + is_color_configurable boolean DEFAULT false, + is_opacity_configurable boolean DEFAULT true, + is_label_configurable boolean DEFAULT false, + layer_index integer, + is_use boolean DEFAULT true, + boundary_box character varying(255), + epsg character varying(50), + is_border_area boolean DEFAULT false, + created_dttm timestamp with time zone DEFAULT now(), + updated_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_uid bigint +); + + +ALTER TABLE public.tb_user_layer OWNER TO kamco_cds; + +-- +-- TOC entry 6330 (class 0 OID 0) +-- Dependencies: 332 +-- Name: TABLE tb_user_layer; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_user_layer IS '국유iN 사용자 레이어 상세 설정 (UI_GUKU_CD_01_04, _08, _09). 사용자가 설정한 개별 레이어 상세 정보.'; + + +-- +-- TOC entry 6331 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.user_layer_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.user_layer_uid IS '사용자 레이어 UID (PK)'; + + +-- +-- TOC entry 6332 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.user_layer_group_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.user_layer_group_uid IS '사용자 레이어 그룹 UID (FK)'; + + +-- +-- TOC entry 6333 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.layer_cd; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.layer_cd IS '레이어 코드 (e.g., Arial2023)'; + + +-- +-- TOC entry 6334 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.layer_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.layer_nm IS '레이어명 (e.g., 국토지리정보원 2023)'; + + +-- +-- TOC entry 6335 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.service_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.service_nm IS 'Service명 (e.g., TMS, WMS, WFS)'; + + +-- +-- TOC entry 6336 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.service_url; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.service_url IS 'Service URL'; + + +-- +-- TOC entry 6337 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.min_level; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.min_level IS '최소 표시 레벨'; + + +-- +-- TOC entry 6338 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.max_level; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.max_level IS '최대 표시 레벨'; + + +-- +-- TOC entry 6339 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.opacity; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.opacity IS '레이어 투명도 (0.0 ~ 1.0)'; + + +-- +-- TOC entry 6340 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_visible; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_visible IS '레이어 보기 여부 (Y/N)'; + + +-- +-- TOC entry 6341 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_history_layer; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_history_layer IS '이력 여부 (Y/N)'; + + +-- +-- TOC entry 6342 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.sort_order; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.sort_order IS '레이어 정렬 순번'; + + +-- +-- TOC entry 6343 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_selectable; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_selectable IS '레이어 선택 가능 여부 (Y/N)'; + + +-- +-- TOC entry 6344 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_color_configurable; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_color_configurable IS '레이어 색상 설정 가능 여부 (Y/N)'; + + +-- +-- TOC entry 6345 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_opacity_configurable; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_opacity_configurable IS '레이어 투명도 조정 가능 여부 (Y/N)'; + + +-- +-- TOC entry 6346 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_label_configurable; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_label_configurable IS '레이어 라벨 설정 가능 여부 (Y/N)'; + + +-- +-- TOC entry 6347 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.layer_index; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.layer_index IS '레이어 인덱스 지수'; + + +-- +-- TOC entry 6348 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_use; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_use IS '사용 여부 (Y/N)'; + + +-- +-- TOC entry 6349 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.boundary_box; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.boundary_box IS 'Boundary 좌표 (Text)'; + + +-- +-- TOC entry 6350 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.epsg; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.epsg IS '좌표계 (e.g., EPSG:5181)'; + + +-- +-- TOC entry 6351 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.is_border_area; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.is_border_area IS '접경 지역 여부 (Y/N)'; + + +-- +-- TOC entry 6352 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.created_dttm IS '생성 일시'; + + +-- +-- TOC entry 6353 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.updated_dttm IS '수정 일시'; + + +-- +-- TOC entry 6354 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.created_uid IS '생성자 UID (tb_user.user_uid)'; + + +-- +-- TOC entry 6355 (class 0 OID 0) +-- Dependencies: 332 +-- Name: COLUMN tb_user_layer.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer.updated_uid IS '수정자 UID (tb_user.user_uid)'; + + +-- +-- TOC entry 257 (class 1259 OID 48349) +-- Name: tb_user_layer_group_user_layer_group_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_user_layer_group_user_layer_group_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_user_layer_group_user_layer_group_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 333 (class 1259 OID 72683) +-- Name: tb_user_layer_group; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_user_layer_group ( + user_layer_group_uid bigint DEFAULT nextval('public.tb_user_layer_group_user_layer_group_uid_seq'::regclass) NOT NULL, + user_uid bigint NOT NULL, + group_nm character varying(255) NOT NULL, + sort_order integer DEFAULT 0, + is_group_visible boolean DEFAULT true, + is_single_choice boolean DEFAULT false, + is_registerable boolean DEFAULT false, + is_use boolean DEFAULT true, + created_dttm timestamp with time zone DEFAULT now(), + updated_dttm timestamp with time zone DEFAULT now(), + created_uid bigint, + updated_uid bigint +); + + +ALTER TABLE public.tb_user_layer_group OWNER TO kamco_cds; + +-- +-- TOC entry 6356 (class 0 OID 0) +-- Dependencies: 333 +-- Name: TABLE tb_user_layer_group; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_user_layer_group IS '국유iN 사용자 레이어 그룹 설정'; + + +-- +-- TOC entry 6357 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.user_layer_group_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.user_layer_group_uid IS '사용자 레이어 그룹 UID (PK)'; + + +-- +-- TOC entry 6358 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.user_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.user_uid IS '설정 소유자 UID (tb_user.user_uid)'; + + +-- +-- TOC entry 6359 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.group_nm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.group_nm IS '레이어 그룹명'; + + +-- +-- TOC entry 6360 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.sort_order; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.sort_order IS '정렬 순서'; + + +-- +-- TOC entry 6361 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.is_group_visible; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.is_group_visible IS '그룹 보기 여부 (Y/N)'; + + +-- +-- TOC entry 6362 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.is_single_choice; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.is_single_choice IS '단일 선택 여부 (Y/N)'; + + +-- +-- TOC entry 6363 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.is_registerable; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.is_registerable IS '등록 가능 여부 (Y/N)'; + + +-- +-- TOC entry 6364 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.is_use; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.is_use IS '사용 여부 (Y/N)'; + + +-- +-- TOC entry 6365 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.created_dttm IS '생성 일시'; + + +-- +-- TOC entry 6366 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.updated_dttm IS '수정 일시'; + + +-- +-- TOC entry 6367 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.created_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.created_uid IS '생성자 UID (tb_user.user_uid)'; + + +-- +-- TOC entry 6368 (class 0 OID 0) +-- Dependencies: 333 +-- Name: COLUMN tb_user_layer_group.updated_uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_user_layer_group.updated_uid IS '수정자 UID (tb_user.user_uid)'; + + +-- +-- TOC entry 334 (class 1259 OID 72697) +-- Name: tb_year; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_year ( + yyyy integer NOT NULL, + status character varying(20) +); + + +ALTER TABLE public.tb_year OWNER TO kamco_cds; + +-- +-- TOC entry 6369 (class 0 OID 0) +-- Dependencies: 334 +-- Name: TABLE tb_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_year IS '기준년도'; + + +-- +-- TOC entry 6370 (class 0 OID 0) +-- Dependencies: 334 +-- Name: COLUMN tb_year.yyyy; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_year.yyyy IS '년도'; + + +-- +-- TOC entry 6371 (class 0 OID 0) +-- Dependencies: 334 +-- Name: COLUMN tb_year.status; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_year.status IS '상태'; + + +-- +-- TOC entry 335 (class 1259 OID 72701) +-- Name: tb_zoo; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.tb_zoo ( + uid bigint NOT NULL, + uuid uuid NOT NULL, + name character varying(200) NOT NULL, + location character varying(300), + description text, + is_deleted boolean DEFAULT false NOT NULL, + created_dttm timestamp with time zone NOT NULL, + updated_dttm timestamp with time zone NOT NULL +); + + +ALTER TABLE public.tb_zoo OWNER TO kamco_cds; + +-- +-- TOC entry 6372 (class 0 OID 0) +-- Dependencies: 335 +-- Name: TABLE tb_zoo; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.tb_zoo IS '동물원 정보'; + + +-- +-- TOC entry 6373 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.uid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.uid IS '고유 식별자 (PK)'; + + +-- +-- TOC entry 6374 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.uuid IS 'UUID (Unique)'; + + +-- +-- TOC entry 6375 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.name IS '동물원 이름'; + + +-- +-- TOC entry 6376 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.location; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.location IS '위치'; + + +-- +-- TOC entry 6377 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.description; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.description IS '설명'; + + +-- +-- TOC entry 6378 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.is_deleted; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.is_deleted IS '삭제 여부'; + + +-- +-- TOC entry 6379 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.created_dttm IS '생성일시'; + + +-- +-- TOC entry 6380 (class 0 OID 0) +-- Dependencies: 335 +-- Name: COLUMN tb_zoo.updated_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.tb_zoo.updated_dttm IS '수정일시'; + + +-- +-- TOC entry 336 (class 1259 OID 72713) +-- Name: tb_zoo_uid_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.tb_zoo_uid_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.tb_zoo_uid_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6381 (class 0 OID 0) +-- Dependencies: 336 +-- Name: tb_zoo_uid_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.tb_zoo_uid_seq OWNED BY public.tb_zoo.uid; + + +-- +-- TOC entry 337 (class 1259 OID 72714) +-- Name: test01; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.test01 ( + id bigint NOT NULL +); + + +ALTER TABLE public.test01 OWNER TO kamco_cds; + +-- +-- TOC entry 338 (class 1259 OID 72718) +-- Name: test01_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.test01_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.test01_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6382 (class 0 OID 0) +-- Dependencies: 338 +-- Name: test01_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.test01_id_seq OWNED BY public.test01.id; + + +-- +-- TOC entry 339 (class 1259 OID 72719) +-- Name: users; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.users ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + name text NOT NULL +); + + +ALTER TABLE public.users OWNER TO kamco_cds; + +-- +-- TOC entry 340 (class 1259 OID 72727) +-- Name: yearly_sheet_map; Type: TABLE; Schema: public; Owner: kamco_cds +-- + +CREATE TABLE public.yearly_sheet_map ( + id bigint NOT NULL, + uuid uuid DEFAULT gen_random_uuid() NOT NULL, + group_no integer, + scene_id character varying(12) NOT NULL, + before_year integer NOT NULL, + target_year integer NOT NULL, + before_map_path character varying(255) NOT NULL, + before_map_file_name character varying(100) NOT NULL, + after_map_path character varying(255) NOT NULL, + after_map_file_name character varying(100) NOT NULL, + created_dttm timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.yearly_sheet_map OWNER TO kamco_cds; + +-- +-- TOC entry 6383 (class 0 OID 0) +-- Dependencies: 340 +-- Name: TABLE yearly_sheet_map; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON TABLE public.yearly_sheet_map IS '연도별 분석 대상 도엽 및 영상 경로 매핑'; + + +-- +-- TOC entry 6384 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.id IS '매핑 식별자 (PK)'; + + +-- +-- TOC entry 6385 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.uuid; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.uuid IS '매핑 UUID'; + + +-- +-- TOC entry 6386 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.group_no; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.group_no IS '도엽 그룹 번호'; + + +-- +-- TOC entry 6387 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.scene_id; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.scene_id IS '장면(Scene) 식별자'; + + +-- +-- TOC entry 6388 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.before_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.before_year IS '비교 전 시점 연도'; + + +-- +-- TOC entry 6389 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.target_year; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.target_year IS '비교 후 시점 연도'; + + +-- +-- TOC entry 6390 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.before_map_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.before_map_path IS '이전 영상 저장 경로'; + + +-- +-- TOC entry 6391 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.before_map_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.before_map_file_name IS '이전 연도 파일명'; + + +-- +-- TOC entry 6392 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.after_map_path; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.after_map_path IS '현재 영상 저장 경로'; + + +-- +-- TOC entry 6393 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.after_map_file_name; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.after_map_file_name IS '대상 연도 파일명'; + + +-- +-- TOC entry 6394 (class 0 OID 0) +-- Dependencies: 340 +-- Name: COLUMN yearly_sheet_map.created_dttm; Type: COMMENT; Schema: public; Owner: kamco_cds +-- + +COMMENT ON COLUMN public.yearly_sheet_map.created_dttm IS '등록 일시'; + + +-- +-- TOC entry 341 (class 1259 OID 72744) +-- Name: yearly_sheet_map_id_seq; Type: SEQUENCE; Schema: public; Owner: kamco_cds +-- + +CREATE SEQUENCE public.yearly_sheet_map_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER SEQUENCE public.yearly_sheet_map_id_seq OWNER TO kamco_cds; + +-- +-- TOC entry 6395 (class 0 OID 0) +-- Dependencies: 341 +-- Name: yearly_sheet_map_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: kamco_cds +-- + +ALTER SEQUENCE public.yearly_sheet_map_id_seq OWNED BY public.yearly_sheet_map.id; + + +-- +-- TOC entry 5078 (class 2604 OID 72745) +-- Name: demo_learning_analysis_scene_item group_item_id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_item ALTER COLUMN group_item_id SET DEFAULT nextval('public.demo_learning_analysis_scene_item_group_item_id_seq'::regclass); + + +-- +-- TOC entry 5080 (class 2604 OID 72746) +-- Name: demo_learning_analysis_scene_list group_id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_list ALTER COLUMN group_id SET DEFAULT nextval('public.demo_learning_analysis_scene_list_group_id_seq'::regclass); + + +-- +-- TOC entry 5082 (class 2604 OID 72747) +-- Name: demo_learning_analysis_summary id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_summary ALTER COLUMN id SET DEFAULT nextval('public.demo_learning_analysis_summary_id_seq'::regclass); + + +-- +-- TOC entry 5091 (class 2604 OID 72748) +-- Name: gpu_metrics id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.gpu_metrics ALTER COLUMN id SET DEFAULT nextval('public.gpu_metrics_id_seq'::regclass); + + +-- +-- TOC entry 5094 (class 2604 OID 72749) +-- Name: imagery id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.imagery ALTER COLUMN id SET DEFAULT nextval('public.imagery_id_seq'::regclass); + + +-- +-- TOC entry 5097 (class 2604 OID 72750) +-- Name: inference_results uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.inference_results ALTER COLUMN uid SET DEFAULT nextval('public.inference_results_uid_seq'::regclass); + + +-- +-- TOC entry 5102 (class 2604 OID 72751) +-- Name: inference_results_noor uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.inference_results_noor ALTER COLUMN uid SET DEFAULT nextval('public.inference_results_noor_uid_seq'::regclass); + + +-- +-- TOC entry 5108 (class 2604 OID 72752) +-- Name: inference_results_testing seq; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.inference_results_testing ALTER COLUMN seq SET DEFAULT nextval('public.inference_results_testing_seq_seq'::regclass); + + +-- +-- TOC entry 5077 (class 2604 OID 48420) +-- Name: inference_sample_test_2021_2022_intermediate id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.inference_sample_test_2021_2022_intermediate ALTER COLUMN id SET DEFAULT nextval('public.inference_sample_test_2021_2022_intermediate_id_seq'::regclass); + + +-- +-- TOC entry 5110 (class 2604 OID 72753) +-- Name: overlapped_areas_roi id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.overlapped_areas_roi ALTER COLUMN id SET DEFAULT nextval('public.overlapped_areas_roi_id_seq'::regclass); + + +-- +-- TOC entry 5111 (class 2604 OID 72754) +-- Name: system_metrics id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.system_metrics ALTER COLUMN id SET DEFAULT nextval('public.system_metrics_id_seq'::regclass); + + +-- +-- TOC entry 5113 (class 2604 OID 72755) +-- Name: tb_animal uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_animal ALTER COLUMN uid SET DEFAULT nextval('public.tb_animal_uid_seq'::regclass); + + +-- +-- TOC entry 5117 (class 2604 OID 72756) +-- Name: tb_auth_token token_id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_auth_token ALTER COLUMN token_id SET DEFAULT nextval('public.tb_auth_token_token_id_seq'::regclass); + + +-- +-- TOC entry 5149 (class 2604 OID 72757) +-- Name: tb_map_inkx_50k fid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_inkx_50k ALTER COLUMN fid SET DEFAULT nextval('public.tb_map_inkx_50k_fid_seq'::regclass); + + +-- +-- TOC entry 5150 (class 2604 OID 72758) +-- Name: tb_map_inkx_5k fid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_inkx_5k ALTER COLUMN fid SET DEFAULT nextval('public.tb_map_inkx_5k_fid_seq'::regclass); + + +-- +-- TOC entry 5151 (class 2604 OID 72759) +-- Name: tb_map_sheet_anal_data_inference data_uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_data_inference ALTER COLUMN data_uid SET DEFAULT nextval('public.tb_map_sheet_anal_data_inference_data_uid_seq'::regclass); + + +-- +-- TOC entry 5267 (class 2604 OID 74984) +-- Name: tb_map_sheet_learn id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn ALTER COLUMN id SET DEFAULT nextval('public.tb_map_sheet_learn_uid'::regclass); + + +-- +-- TOC entry 5271 (class 2604 OID 74995) +-- Name: tb_map_sheet_learn_5k id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn_5k ALTER COLUMN id SET DEFAULT nextval('public.tb_map_sheet_learn_5k_seq'::regclass); + + +-- +-- TOC entry 5194 (class 2604 OID 72760) +-- Name: tb_map_sheet_mng_files file_uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_mng_files ALTER COLUMN file_uid SET DEFAULT nextval('public.tb_map_sheet_mng_files_file_uid_seq'::regclass); + + +-- +-- TOC entry 5206 (class 2604 OID 72761) +-- Name: tb_member id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_member ALTER COLUMN id SET DEFAULT nextval('public.tb_member_id_seq'::regclass); + + +-- +-- TOC entry 5222 (class 2604 OID 72762) +-- Name: tb_model_mng model_uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_model_mng ALTER COLUMN model_uid SET DEFAULT nextval('public.tb_model_mng_model_uid_seq'::regclass); + + +-- +-- TOC entry 5275 (class 2604 OID 75019) +-- Name: tb_model_result_metric metric_uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_model_result_metric ALTER COLUMN metric_uid SET DEFAULT nextval('public.tb_model_result_metric_metric_uid_seq'::regclass); + + +-- +-- TOC entry 5273 (class 2604 OID 75010) +-- Name: tb_pnu id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_pnu ALTER COLUMN id SET DEFAULT nextval('public.tb_pnu_uid'::regclass); + + +-- +-- TOC entry 5230 (class 2604 OID 72763) +-- Name: tb_test_tree_map uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_test_tree_map ALTER COLUMN uid SET DEFAULT nextval('public.tb_test_tree_map_uid_seq'::regclass); + + +-- +-- TOC entry 5260 (class 2604 OID 72764) +-- Name: tb_zoo uid; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_zoo ALTER COLUMN uid SET DEFAULT nextval('public.tb_zoo_uid_seq'::regclass); + + +-- +-- TOC entry 5262 (class 2604 OID 72765) +-- Name: test01 id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.test01 ALTER COLUMN id SET DEFAULT nextval('public.test01_id_seq'::regclass); + + +-- +-- TOC entry 5264 (class 2604 OID 72766) +-- Name: yearly_sheet_map id; Type: DEFAULT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.yearly_sheet_map ALTER COLUMN id SET DEFAULT nextval('public.yearly_sheet_map_id_seq'::regclass); + + +-- +-- TOC entry 5366 (class 2606 OID 74711) +-- Name: tb_map_sheet_anal_data_inference PK_tb_map_sheet_anal_data_inference; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_data_inference + ADD CONSTRAINT "PK_tb_map_sheet_anal_data_inference" PRIMARY KEY (data_uid); + + +-- +-- TOC entry 5377 (class 2606 OID 74713) +-- Name: tb_map_sheet_anal_inference PK_tb_map_sheet_anal_inference; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_inference + ADD CONSTRAINT "PK_tb_map_sheet_anal_inference" PRIMARY KEY (anal_uid); + + +-- +-- TOC entry 5379 (class 2606 OID 74715) +-- Name: tb_map_sheet_anal_target_data PK_tb_map_sheet_anal_target_data; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_target_data + ADD CONSTRAINT "PK_tb_map_sheet_anal_target_data" PRIMARY KEY (target_uid); + + +-- +-- TOC entry 5456 (class 2606 OID 74991) +-- Name: tb_map_sheet_learn PK_tb_map_sheet_learn; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn + ADD CONSTRAINT "PK_tb_map_sheet_learn" PRIMARY KEY (id); + + +-- +-- TOC entry 5458 (class 2606 OID 75001) +-- Name: tb_map_sheet_learn_5k PK_tb_map_sheet_learn_5k; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn_5k + ADD CONSTRAINT "PK_tb_map_sheet_learn_5k" PRIMARY KEY (id); + + +-- +-- TOC entry 5393 (class 2606 OID 74721) +-- Name: tb_map_sheet_mng PK_tb_map_sheet_mng; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_mng + ADD CONSTRAINT "PK_tb_map_sheet_mng" PRIMARY KEY (mng_yyyy); + + +-- +-- TOC entry 5419 (class 2606 OID 74723) +-- Name: tb_model_deploy_hst PK_tb_model_deploy_hst; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_model_deploy_hst + ADD CONSTRAINT "PK_tb_model_deploy_hst" PRIMARY KEY (deploy_uid); + + +-- +-- TOC entry 5460 (class 2606 OID 75014) +-- Name: tb_pnu PK_tb_pnu; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_pnu + ADD CONSTRAINT "PK_tb_pnu" PRIMARY KEY (id); + + +-- +-- TOC entry 5299 (class 2606 OID 74725) +-- Name: demo_learning_analysis_scene_item demo_learning_analysis_scene_item_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_item + ADD CONSTRAINT demo_learning_analysis_scene_item_pkey PRIMARY KEY (group_item_id); + + +-- +-- TOC entry 5305 (class 2606 OID 74727) +-- Name: demo_learning_analysis_scene_list demo_learning_analysis_scene_list_group_name_key; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_list + ADD CONSTRAINT demo_learning_analysis_scene_list_group_name_key UNIQUE (group_name); + + +-- +-- TOC entry 5307 (class 2606 OID 74729) +-- Name: demo_learning_analysis_scene_list demo_learning_analysis_scene_list_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_list + ADD CONSTRAINT demo_learning_analysis_scene_list_pkey PRIMARY KEY (group_id); + + +-- +-- TOC entry 5309 (class 2606 OID 74731) +-- Name: demo_learning_analysis_summary demo_learning_analysis_summary_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_summary + ADD CONSTRAINT demo_learning_analysis_summary_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5315 (class 2606 OID 74733) +-- Name: gpu_metrics gpu_metrics_pk; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.gpu_metrics + ADD CONSTRAINT gpu_metrics_pk PRIMARY KEY (uuid); + + +-- +-- TOC entry 5317 (class 2606 OID 74735) +-- Name: imagery imagery_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.imagery + ADD CONSTRAINT imagery_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5321 (class 2606 OID 74737) +-- Name: inference_results_noor inference_results_noor_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.inference_results_noor + ADD CONSTRAINT inference_results_noor_pkey PRIMARY KEY (uid); + + +-- +-- TOC entry 5296 (class 2606 OID 61449) +-- Name: inference_sample_test_2021_2022_intermediate inference_sample_test_2021_2022_intermediate_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.inference_sample_test_2021_2022_intermediate + ADD CONSTRAINT inference_sample_test_2021_2022_intermediate_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5324 (class 2606 OID 74739) +-- Name: overlapped_areas_roi overlapped_areas_roi_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.overlapped_areas_roi + ADD CONSTRAINT overlapped_areas_roi_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5311 (class 2606 OID 74741) +-- Name: detect_mast pk_detect_mast; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.detect_mast + ADD CONSTRAINT pk_detect_mast PRIMARY KEY (dtct_mst_id); + + +-- +-- TOC entry 5427 (class 2606 OID 74743) +-- Name: tb_sys_cd pk_t_sys_cd; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_sys_cd + ADD CONSTRAINT pk_t_sys_cd PRIMARY KEY (sys_cd_id); + + +-- +-- TOC entry 5352 (class 2606 OID 74745) +-- Name: tb_labeling_assignment pk_tb_labeling_assignment; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_labeling_assignment + ADD CONSTRAINT pk_tb_labeling_assignment PRIMARY KEY (assignment_uid); + + +-- +-- TOC entry 5355 (class 2606 OID 74747) +-- Name: tb_labeling_inspector pk_tb_labeling_inspector; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_labeling_inspector + ADD CONSTRAINT pk_tb_labeling_inspector PRIMARY KEY (operator_uid); + + +-- +-- TOC entry 5359 (class 2606 OID 74749) +-- Name: tb_labeling_labeler pk_tb_labeling_labeler; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_labeling_labeler + ADD CONSTRAINT pk_tb_labeling_labeler PRIMARY KEY (lb_usr_uid); + + +-- +-- TOC entry 5421 (class 2606 OID 74751) +-- Name: tb_model_mng pk_tb_model_mng; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_model_mng + ADD CONSTRAINT pk_tb_model_mng PRIMARY KEY (model_uid); + + +-- +-- TOC entry 5326 (class 2606 OID 74753) +-- Name: system_metrics system_metrics_pk; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.system_metrics + ADD CONSTRAINT system_metrics_pk PRIMARY KEY (uuid); + + +-- +-- TOC entry 5334 (class 2606 OID 74755) +-- Name: tb_auth_token tb_auth_token_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_auth_token + ADD CONSTRAINT tb_auth_token_pkey PRIMARY KEY (token_id); + + +-- +-- TOC entry 5338 (class 2606 OID 74757) +-- Name: tb_cm_cd tb_cm_cd_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_cm_cd + ADD CONSTRAINT tb_cm_cd_pkey PRIMARY KEY (code_id); + + +-- +-- TOC entry 5340 (class 2606 OID 74759) +-- Name: tb_data_mapinfo_cd tb_data_mapinfo_cd_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_data_mapinfo_cd + ADD CONSTRAINT tb_data_mapinfo_cd_pkey PRIMARY KEY (code_id); + + +-- +-- TOC entry 5342 (class 2606 OID 74761) +-- Name: tb_data_object_class_cd tb_data_object_class_cd_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_data_object_class_cd + ADD CONSTRAINT tb_data_object_class_cd_pkey PRIMARY KEY (code_id); + + +-- +-- TOC entry 5344 (class 2606 OID 74763) +-- Name: tb_data_year_cd tb_data_year_cd_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_data_year_cd + ADD CONSTRAINT tb_data_year_cd_pkey PRIMARY KEY (code_id); + + +-- +-- TOC entry 5364 (class 2606 OID 74765) +-- Name: tb_map_inkx_5k tb_map_inkx_5k_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_inkx_5k + ADD CONSTRAINT tb_map_inkx_5k_pkey PRIMARY KEY (fid); + + +-- +-- TOC entry 5373 (class 2606 OID 74767) +-- Name: tb_map_sheet_anal_data_inference_geom tb_map_sheet_anal_data_inference_geom_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_data_inference_geom + ADD CONSTRAINT tb_map_sheet_anal_data_inference_geom_pkey PRIMARY KEY (geo_uid); + + +-- +-- TOC entry 5375 (class 2606 OID 74769) +-- Name: tb_map_sheet_anal_data_inference_geom tb_map_sheet_anal_data_inference_geom_uuid_key; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_data_inference_geom + ADD CONSTRAINT tb_map_sheet_anal_data_inference_geom_uuid_key UNIQUE (uuid); + + +-- +-- TOC entry 5391 (class 2606 OID 74771) +-- Name: tb_map_sheet_learn_data_geom tb_map_sheet_learn_data_geom_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn_data_geom + ADD CONSTRAINT tb_map_sheet_learn_data_geom_pkey PRIMARY KEY (geo_uid); + + +-- +-- TOC entry 5384 (class 2606 OID 74773) +-- Name: tb_map_sheet_learn_data tb_map_sheet_learn_data_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn_data + ADD CONSTRAINT tb_map_sheet_learn_data_pkey PRIMARY KEY (data_uid); + + +-- +-- TOC entry 5395 (class 2606 OID 74775) +-- Name: tb_map_sheet_mng_files tb_map_sheet_mng_files_pk; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_mng_files + ADD CONSTRAINT tb_map_sheet_mng_files_pk PRIMARY KEY (file_uid); + + +-- +-- TOC entry 5397 (class 2606 OID 74777) +-- Name: tb_map_sheet_mng_hst tb_map_sheet_mng_hst2_pkey1; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_mng_hst + ADD CONSTRAINT tb_map_sheet_mng_hst2_pkey1 PRIMARY KEY (hst_uid); + + +-- +-- TOC entry 5399 (class 2606 OID 74779) +-- Name: tb_map_sheet_mng_hst tb_map_sheet_mng_hst_unique; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_mng_hst + ADD CONSTRAINT tb_map_sheet_mng_hst_unique UNIQUE (mng_yyyy, map_sheet_num); + + +-- +-- TOC entry 5401 (class 2606 OID 74781) +-- Name: tb_map_sheet_years_map tb_mapsheet_years_map_pk; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_years_map + ADD CONSTRAINT tb_mapsheet_years_map_pk PRIMARY KEY (map_sheet_num); + + +-- +-- TOC entry 5403 (class 2606 OID 74783) +-- Name: tb_member tb_member_employee_no; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_member + ADD CONSTRAINT tb_member_employee_no UNIQUE (employee_no); + + +-- +-- TOC entry 5405 (class 2606 OID 74785) +-- Name: tb_member tb_member_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_member + ADD CONSTRAINT tb_member_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5407 (class 2606 OID 74787) +-- Name: tb_member tb_member_unique; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_member + ADD CONSTRAINT tb_member_unique UNIQUE (employee_no); + + +-- +-- TOC entry 5409 (class 2606 OID 74789) +-- Name: tb_member tb_member_user_id; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_member + ADD CONSTRAINT tb_member_user_id UNIQUE (user_id); + + +-- +-- TOC entry 5415 (class 2606 OID 74791) +-- Name: tb_menu_mapp tb_menu_mapp_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_menu_mapp + ADD CONSTRAINT tb_menu_mapp_pkey PRIMARY KEY (mapp_uid); + + +-- +-- TOC entry 5413 (class 2606 OID 74793) +-- Name: tb_menu tb_menu_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_menu + ADD CONSTRAINT tb_menu_pkey PRIMARY KEY (menu_uid); + + +-- +-- TOC entry 5462 (class 2606 OID 75032) +-- Name: tb_model_result_metric tb_model_result_metric_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_model_result_metric + ADD CONSTRAINT tb_model_result_metric_pkey PRIMARY KEY (metric_uid); + + +-- +-- TOC entry 5423 (class 2606 OID 74795) +-- Name: tb_model_ver tb_model_ver_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_model_ver + ADD CONSTRAINT tb_model_ver_pkey PRIMARY KEY (model_ver_uid); + + +-- +-- TOC entry 5425 (class 2606 OID 74797) +-- Name: tb_server tb_server_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_server + ADD CONSTRAINT tb_server_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5429 (class 2606 OID 74799) +-- Name: tb_upload_session tb_upload_session_pk; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_upload_session + ADD CONSTRAINT tb_upload_session_pk PRIMARY KEY (upload_id); + + +-- +-- TOC entry 5431 (class 2606 OID 74801) +-- Name: tb_upload_session tb_upload_session_unique; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_upload_session + ADD CONSTRAINT tb_upload_session_unique UNIQUE (uuid); + + +-- +-- TOC entry 5439 (class 2606 OID 74803) +-- Name: tb_user_layer_group tb_user_layer_group_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_user_layer_group + ADD CONSTRAINT tb_user_layer_group_pkey PRIMARY KEY (user_layer_group_uid); + + +-- +-- TOC entry 5437 (class 2606 OID 74805) +-- Name: tb_user_layer tb_user_layer_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_user_layer + ADD CONSTRAINT tb_user_layer_pkey PRIMARY KEY (user_layer_uid); + + +-- +-- TOC entry 5433 (class 2606 OID 74807) +-- Name: tb_user tb_user_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_user + ADD CONSTRAINT tb_user_pkey PRIMARY KEY (user_uid); + + +-- +-- TOC entry 5441 (class 2606 OID 74809) +-- Name: tb_year tb_year_pk; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_year + ADD CONSTRAINT tb_year_pk PRIMARY KEY (yyyy); + + +-- +-- TOC entry 5446 (class 2606 OID 74811) +-- Name: tb_zoo tb_zoo_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_zoo + ADD CONSTRAINT tb_zoo_pkey PRIMARY KEY (uid); + + +-- +-- TOC entry 5448 (class 2606 OID 74813) +-- Name: tb_zoo tb_zoo_uuid_key; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_zoo + ADD CONSTRAINT tb_zoo_uuid_key UNIQUE (uuid); + + +-- +-- TOC entry 5313 (class 2606 OID 74815) +-- Name: detect_mast uk_detect_mast_uuid; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.detect_mast + ADD CONSTRAINT uk_detect_mast_uuid UNIQUE (dtct_mst_uuid); + + +-- +-- TOC entry 5319 (class 2606 OID 74817) +-- Name: imagery unique_year_scene; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.imagery + ADD CONSTRAINT unique_year_scene UNIQUE (year, scene_5k); + + +-- +-- TOC entry 5336 (class 2606 OID 74819) +-- Name: tb_auth_token uq_auth_token; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_auth_token + ADD CONSTRAINT uq_auth_token UNIQUE (user_uid, refresh_token); + + +-- +-- TOC entry 5303 (class 2606 OID 74821) +-- Name: demo_learning_analysis_scene_item uq_group_fid; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_item + ADD CONSTRAINT uq_group_fid UNIQUE (group_id, fid); + + +-- +-- TOC entry 5411 (class 2606 OID 74823) +-- Name: tb_member uq_member_uuid; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_member + ADD CONSTRAINT uq_member_uuid UNIQUE (uuid); + + +-- +-- TOC entry 5368 (class 2606 OID 74825) +-- Name: tb_map_sheet_anal_data_inference uq_tb_map_sheet_anal_data_inference; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_anal_data_inference + ADD CONSTRAINT uq_tb_map_sheet_anal_data_inference UNIQUE (stage, compare_yyyy, target_yyyy, map_sheet_num); + + +-- +-- TOC entry 5417 (class 2606 OID 74827) +-- Name: tb_menu_mapp uq_tb_menu_mapp_role_menu; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_menu_mapp + ADD CONSTRAINT uq_tb_menu_mapp_role_menu UNIQUE (role_code, menu_uid); + + +-- +-- TOC entry 5450 (class 2606 OID 74829) +-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5435 (class 2606 OID 74831) +-- Name: tb_user ux_tb_user_user_id; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_user + ADD CONSTRAINT ux_tb_user_user_id UNIQUE (user_id); + + +-- +-- TOC entry 5452 (class 2606 OID 74833) +-- Name: yearly_sheet_map yearly_sheet_map_pkey; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.yearly_sheet_map + ADD CONSTRAINT yearly_sheet_map_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 5454 (class 2606 OID 74835) +-- Name: yearly_sheet_map yearly_sheet_map_uuid_key; Type: CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.yearly_sheet_map + ADD CONSTRAINT yearly_sheet_map_uuid_key UNIQUE (uuid); + + +-- +-- TOC entry 5370 (class 1259 OID 74836) +-- Name: idx_anal_data_inference_uid_key; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_anal_data_inference_uid_key ON public.tb_map_sheet_anal_data_inference_geom USING btree (data_uid, map_sheet_num); + + +-- +-- TOC entry 5371 (class 1259 OID 74837) +-- Name: idx_anal_data_inference_yyyy_stage; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_anal_data_inference_yyyy_stage ON public.tb_map_sheet_anal_data_inference_geom USING btree (compare_yyyy, target_yyyy, stage); + + +-- +-- TOC entry 5300 (class 1259 OID 74838) +-- Name: idx_analysis_scene_item_fid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_analysis_scene_item_fid ON public.demo_learning_analysis_scene_item USING btree (fid); + + +-- +-- TOC entry 5301 (class 1259 OID 74839) +-- Name: idx_analysis_scene_item_group_id; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_analysis_scene_item_group_id ON public.demo_learning_analysis_scene_item USING btree (group_id); + + +-- +-- TOC entry 5327 (class 1259 OID 74840) +-- Name: idx_animal_category; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_animal_category ON public.tb_animal USING btree (category); + + +-- +-- TOC entry 5328 (class 1259 OID 74841) +-- Name: idx_animal_is_deleted; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_animal_is_deleted ON public.tb_animal USING btree (is_deleted); + + +-- +-- TOC entry 5329 (class 1259 OID 74842) +-- Name: idx_animal_name; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_animal_name ON public.tb_animal USING btree (name); + + +-- +-- TOC entry 5330 (class 1259 OID 74843) +-- Name: idx_animal_species; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_animal_species ON public.tb_animal USING btree (species); + + +-- +-- TOC entry 5331 (class 1259 OID 74844) +-- Name: idx_animal_uuid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_animal_uuid ON public.tb_animal USING btree (uuid); + + +-- +-- TOC entry 5332 (class 1259 OID 74845) +-- Name: idx_animal_zoo_id; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_animal_zoo_id ON public.tb_animal USING btree (zoo_id); + + +-- +-- TOC entry 5294 (class 1259 OID 61552) +-- Name: idx_inf_inter_geom; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_inf_inter_geom ON public.inference_sample_test_2021_2022_intermediate USING gist (geom); + +ALTER TABLE public.inference_sample_test_2021_2022_intermediate CLUSTER ON idx_inf_inter_geom; + + +-- +-- TOC entry 5345 (class 1259 OID 74846) +-- Name: idx_labeling_assignment_geo_uid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_labeling_assignment_geo_uid ON public.tb_labeling_assignment USING btree (inference_geom_uid); + + +-- +-- TOC entry 5346 (class 1259 OID 74847) +-- Name: idx_labeling_assignment_inspector; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_labeling_assignment_inspector ON public.tb_labeling_assignment USING btree (inspector_uid, work_state); + + +-- +-- TOC entry 5347 (class 1259 OID 74848) +-- Name: idx_labeling_assignment_worker; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_labeling_assignment_worker ON public.tb_labeling_assignment USING btree (worker_uid, work_state, created_dttm); + + +-- +-- TOC entry 5353 (class 1259 OID 74849) +-- Name: idx_labeling_inspector_uid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_labeling_inspector_uid ON public.tb_labeling_inspector USING btree (inspector_uid); + + +-- +-- TOC entry 5356 (class 1259 OID 74850) +-- Name: idx_labeling_labeler_anal; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_labeling_labeler_anal ON public.tb_labeling_labeler USING btree (anal_uid); + + +-- +-- TOC entry 5357 (class 1259 OID 74851) +-- Name: idx_labeling_labeler_uid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_labeling_labeler_uid ON public.tb_labeling_labeler USING btree (worker_uid); + + +-- +-- TOC entry 5385 (class 1259 OID 74852) +-- Name: idx_learn_data_geom_spatial; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_learn_data_geom_spatial ON public.tb_map_sheet_learn_data_geom USING gist (geom); + + +-- +-- TOC entry 5386 (class 1259 OID 74853) +-- Name: idx_learn_data_geom_status; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_learn_data_geom_status ON public.tb_map_sheet_learn_data_geom USING btree (label_status_cd); + + +-- +-- TOC entry 5322 (class 1259 OID 74854) +-- Name: idx_overlapped_roi_geom; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_overlapped_roi_geom ON public.overlapped_areas_roi USING gist (geom); + +ALTER TABLE public.overlapped_areas_roi CLUSTER ON idx_overlapped_roi_geom; + + +-- +-- TOC entry 5348 (class 1259 OID 74855) +-- Name: idx_tb_labeling_assignment_anal; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_labeling_assignment_anal ON public.tb_labeling_assignment USING btree (anal_uid); + + +-- +-- TOC entry 5349 (class 1259 OID 74856) +-- Name: idx_tb_labeling_assignment_anal_worker; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_labeling_assignment_anal_worker ON public.tb_labeling_assignment USING btree (anal_uid, worker_uid); + + +-- +-- TOC entry 5350 (class 1259 OID 74857) +-- Name: idx_tb_labeling_assignment_anal_workstate; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_labeling_assignment_anal_workstate ON public.tb_labeling_assignment USING btree (anal_uid, work_state); + + +-- +-- TOC entry 5361 (class 1259 OID 74858) +-- Name: idx_tb_map_inkx_5k_fid_k50; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_inkx_5k_fid_k50 ON public.tb_map_inkx_5k USING btree (fid_k50); + + +-- +-- TOC entry 5380 (class 1259 OID 74859) +-- Name: idx_tb_map_sheet_learn_data_anal_state; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_sheet_learn_data_anal_state ON public.tb_map_sheet_learn_data USING btree (anal_state); + + +-- +-- TOC entry 5381 (class 1259 OID 74860) +-- Name: idx_tb_map_sheet_learn_data_data_path; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_sheet_learn_data_data_path ON public.tb_map_sheet_learn_data USING btree (data_path); + + +-- +-- TOC entry 5382 (class 1259 OID 74861) +-- Name: idx_tb_map_sheet_learn_data_data_state; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_sheet_learn_data_data_state ON public.tb_map_sheet_learn_data USING btree (data_state); + + +-- +-- TOC entry 5387 (class 1259 OID 74862) +-- Name: idx_tb_map_sheet_learn_data_geom_data_uid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_sheet_learn_data_geom_data_uid ON public.tb_map_sheet_learn_data_geom USING btree (data_uid); + + +-- +-- TOC entry 5388 (class 1259 OID 74863) +-- Name: idx_tb_map_sheet_learn_data_geom_geo_type; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_sheet_learn_data_geom_geo_type ON public.tb_map_sheet_learn_data_geom USING btree (geo_type); + + +-- +-- TOC entry 5389 (class 1259 OID 74864) +-- Name: idx_tb_map_sheet_learn_data_geom_spatial; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_tb_map_sheet_learn_data_geom_spatial ON public.tb_map_sheet_learn_data_geom USING gist (geom); + + +-- +-- TOC entry 5442 (class 1259 OID 74865) +-- Name: idx_zoo_is_deleted; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_zoo_is_deleted ON public.tb_zoo USING btree (is_deleted); + + +-- +-- TOC entry 5443 (class 1259 OID 74866) +-- Name: idx_zoo_name; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_zoo_name ON public.tb_zoo USING btree (name); + + +-- +-- TOC entry 5444 (class 1259 OID 74867) +-- Name: idx_zoo_uuid; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX idx_zoo_uuid ON public.tb_zoo USING btree (uuid); + + +-- +-- TOC entry 5297 (class 1259 OID 61577) +-- Name: sidx_inference_sample_test_2021_2022_intermediate_geom; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX sidx_inference_sample_test_2021_2022_intermediate_geom ON public.inference_sample_test_2021_2022_intermediate USING gist (geom); + + +-- +-- TOC entry 5360 (class 1259 OID 74868) +-- Name: tb_map_inkx_50k_geom_geom_idx; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX tb_map_inkx_50k_geom_geom_idx ON public.tb_map_inkx_50k USING gist (geom); + + +-- +-- TOC entry 5362 (class 1259 OID 74869) +-- Name: tb_map_inkx_5k_geom_geom_idx; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE INDEX tb_map_inkx_5k_geom_geom_idx ON public.tb_map_inkx_5k USING gist (geom); + + +-- +-- TOC entry 5369 (class 1259 OID 74870) +-- Name: uq_tb_map_sheet_anal_data_inference_group; Type: INDEX; Schema: public; Owner: kamco_cds +-- + +CREATE UNIQUE INDEX uq_tb_map_sheet_anal_data_inference_group ON public.tb_map_sheet_anal_data_inference USING btree (stage, compare_yyyy, target_yyyy, map_sheet_num); + + +-- +-- TOC entry 5469 (class 2606 OID 74871) +-- Name: tb_menu_mapp FK_tb_menu_mapp_tb_menu; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_menu_mapp + ADD CONSTRAINT "FK_tb_menu_mapp_tb_menu" FOREIGN KEY (menu_uid) REFERENCES public.tb_menu(menu_uid); + + +-- +-- TOC entry 5465 (class 2606 OID 74876) +-- Name: tb_animal fk_animal_zoo; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_animal + ADD CONSTRAINT fk_animal_zoo FOREIGN KEY (zoo_id) REFERENCES public.tb_zoo(uid) ON DELETE SET NULL; + + +-- +-- TOC entry 5466 (class 2606 OID 74881) +-- Name: tb_labeling_assignment fk_assign_to_inference; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_labeling_assignment + ADD CONSTRAINT fk_assign_to_inference FOREIGN KEY (inference_geom_uid) REFERENCES public.tb_map_sheet_anal_data_inference_geom(geo_uid) ON DELETE CASCADE; + + +-- +-- TOC entry 5463 (class 2606 OID 74886) +-- Name: demo_learning_analysis_scene_item fk_demo_learning_analysis_scene_item_fid; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_item + ADD CONSTRAINT fk_demo_learning_analysis_scene_item_fid FOREIGN KEY (fid) REFERENCES public.tb_map_inkx_5k(fid) ON DELETE CASCADE; + + +-- +-- TOC entry 5464 (class 2606 OID 74891) +-- Name: demo_learning_analysis_scene_item fk_demo_learning_analysis_scene_item_group; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.demo_learning_analysis_scene_item + ADD CONSTRAINT fk_demo_learning_analysis_scene_item_group FOREIGN KEY (group_id) REFERENCES public.demo_learning_analysis_scene_list(group_id) ON DELETE CASCADE; + + +-- +-- TOC entry 5467 (class 2606 OID 74896) +-- Name: tb_map_sheet_learn_data_geom fk_learn_data_geom_data_uid; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn_data_geom + ADD CONSTRAINT fk_learn_data_geom_data_uid FOREIGN KEY (data_uid) REFERENCES public.tb_map_sheet_learn_data(data_uid) ON DELETE CASCADE; + + +-- +-- TOC entry 5470 (class 2606 OID 75002) +-- Name: tb_map_sheet_learn_5k fk_tb_map_sheet_learn_5k_learn; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_map_sheet_learn_5k + ADD CONSTRAINT fk_tb_map_sheet_learn_5k_learn FOREIGN KEY (learn_id) REFERENCES public.tb_map_sheet_learn(id) ON DELETE CASCADE; + + +-- +-- TOC entry 5468 (class 2606 OID 74906) +-- Name: tb_menu fksw914diut87r7lfykekc7xm2a; Type: FK CONSTRAINT; Schema: public; Owner: kamco_cds +-- + +ALTER TABLE ONLY public.tb_menu + ADD CONSTRAINT fksw914diut87r7lfykekc7xm2a FOREIGN KEY (parent_menu_uid) REFERENCES public.tb_menu(menu_uid); + + +-- Completed on 2026-01-13 22:49:37 KST + +-- +-- PostgreSQL database dump complete +-- + +\unrestrict o7JveaMl3BOBWLIUfXrrvlHh4CDykDyey2eRm6Q7nfSa2cPgfQjV2lpA0Ds4zGu + From 5120793933b53986fd193436d59501a3c08cd14d Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 14 Jan 2026 09:59:46 +0900 Subject: [PATCH 02/11] =?UTF-8?q?=EB=9D=BC=EB=B2=A8=EB=A7=81=20=ED=88=B4?= =?UTF-8?q?=20API=20=EC=84=A4=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrainingDataLabelApiController.java | 187 +++++++++--------- .../TrainingDataReviewApiController.java | 186 ++++++++--------- 2 files changed, 186 insertions(+), 187 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java index e08df44a..3bc98ff1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java @@ -157,7 +157,7 @@ public class TrainingDataLabelApiController { return ApiResponseDto.ok(trainingDataLabelService.getDetail(assignmentUid)); } - @Operation(summary = "라벨러 기본 page number 제공", description = "라벨러 기본 page number 제공") + @Operation(summary = "라벨러 목록 기본정보제공", description = "라벨러 목록 기본정보제공") @ApiResponses( value = { @ApiResponse( @@ -213,109 +213,108 @@ public class TrainingDataLabelApiController { name = "1개 polygon 저장", value = """ - { - "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", - "analUid": 53, - "mapSheetNum": "35905086", - "compareYyyy": 2023, - "targetYyyy": 2024, - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.663, 34.588], - [126.662, 34.587], - [126.664, 34.589], - [126.663, 34.588] - ] - ] - }, - "properties": { - "beforeClass": "WASTE", - "afterClass": "LAND" - } - } - ] - } - """), + { + "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + } + ] + } + """), @io.swagger.v3.oas.annotations.media.ExampleObject( name = "3개 polygon 저장", value = """ - { - "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", - "analUid": 53, - "mapSheetNum": "35905086", - "compareYyyy": 2023, - "targetYyyy": 2024, - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.663, 34.588], - [126.662, 34.587], - [126.664, 34.589], - [126.663, 34.588] - ] - ] - }, - "properties": { - "beforeClass": "WASTE", - "afterClass": "LAND" - } - }, - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.665, 34.590], - [126.664, 34.589], - [126.666, 34.591], - [126.665, 34.590] - ] - ] - }, - "properties": { - "beforeClass": "FOREST", - "afterClass": "BUILDING" - } - }, - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.667, 34.592], - [126.666, 34.591], - [126.668, 34.593], - [126.667, 34.592] - ] - ] - }, - "properties": { - "beforeClass": "FARMLAND", - "afterClass": "SOLAR_PANEL" - } - } - ] - } - """) + { + "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.665, 34.590], + [126.664, 34.589], + [126.666, 34.591], + [126.665, 34.590] + ] + ] + }, + "properties": { + "beforeClass": "FOREST", + "afterClass": "BUILDING" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.667, 34.592], + [126.666, 34.591], + [126.668, 34.593], + [126.667, 34.592] + ] + ] + }, + "properties": { + "beforeClass": "FARMLAND", + "afterClass": "SOLAR_PANEL" + } + } + ] + } + """) })) @RequestBody TrainingDataLabelDto.NewPolygonRequest request) { return ApiResponseDto.okObject(trainingDataLabelService.saveNewPolygon(request)); } - @Operation(summary = "COG 이미지 URL 조회", description = "변화 전/후 COG 이미지 URL을 함께 조회합니다") @ApiResponses( value = { diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java index e206b1a3..8febf996 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java @@ -157,7 +157,7 @@ public class TrainingDataReviewApiController { return ApiResponseDto.ok(trainingDataReviewService.getDetail(operatorUid)); } - @Operation(summary = "검수자 기본 page number 제공", description = "검수자 기본 page number 제공") + @Operation(summary = "검수자 목록 기본정보제공", description = "검수자 목록 기본정보제공") @ApiResponses( value = { @ApiResponse( @@ -213,102 +213,102 @@ public class TrainingDataReviewApiController { name = "1개 polygon 저장", value = """ - { - "operatorUid": "93c56be8-0246-4b22-b976-2476549733cc", - "analUid": 53, - "mapSheetNum": "35905086", - "compareYyyy": 2023, - "targetYyyy": 2024, - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.663, 34.588], - [126.662, 34.587], - [126.664, 34.589], - [126.663, 34.588] - ] - ] - }, - "properties": { - "beforeClass": "WASTE", - "afterClass": "LAND" - } - } - ] - } - """), + { + "operatorUid": "93c56be8-0246-4b22-b976-2476549733cc", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + } + ] + } + """), @io.swagger.v3.oas.annotations.media.ExampleObject( name = "3개 polygon 저장", value = """ - { - "operatorUid": "93c56be8-0246-4b22-b976-2476549733cc", - "analUid": 53, - "mapSheetNum": "35905086", - "compareYyyy": 2023, - "targetYyyy": 2024, - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.663, 34.588], - [126.662, 34.587], - [126.664, 34.589], - [126.663, 34.588] - ] - ] - }, - "properties": { - "beforeClass": "WASTE", - "afterClass": "LAND" - } - }, - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.665, 34.590], - [126.664, 34.589], - [126.666, 34.591], - [126.665, 34.590] - ] - ] - }, - "properties": { - "beforeClass": "FOREST", - "afterClass": "BUILDING" - } - }, - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [126.667, 34.592], - [126.666, 34.591], - [126.668, 34.593], - [126.667, 34.592] - ] - ] - }, - "properties": { - "beforeClass": "FARMLAND", - "afterClass": "SOLAR_PANEL" - } - } - ] - } - """) + { + "operatorUid": "93c56be8-0246-4b22-b976-2476549733cc", + "analUid": 53, + "mapSheetNum": "35905086", + "compareYyyy": 2023, + "targetYyyy": 2024, + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.663, 34.588], + [126.662, 34.587], + [126.664, 34.589], + [126.663, 34.588] + ] + ] + }, + "properties": { + "beforeClass": "WASTE", + "afterClass": "LAND" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.665, 34.590], + [126.664, 34.589], + [126.666, 34.591], + [126.665, 34.590] + ] + ] + }, + "properties": { + "beforeClass": "FOREST", + "afterClass": "BUILDING" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [126.667, 34.592], + [126.666, 34.591], + [126.668, 34.593], + [126.667, 34.592] + ] + ] + }, + "properties": { + "beforeClass": "FARMLAND", + "afterClass": "SOLAR_PANEL" + } + } + ] + } + """) })) @RequestBody TrainingDataReviewDto.NewPolygonRequest request) { From dab6be68f8fb10ad858cd0e648a2c32854c7a28a Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 14 Jan 2026 11:45:01 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[KC-148]=20=ED=95=99=EC=8A=B5=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EA=B4=80=EB=A6=AC=20>=20=EB=AA=A9=EB=A1=9D?= =?UTF-8?q?=20=ED=95=AD=EB=AA=A9=20=EC=B6=94=EA=B0=80=20(=EA=B8=B0?= =?UTF-8?q?=ED=9A=8D=EC=95=88=20=EC=88=98=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../label/LabelAllocateApiController.java | 22 +++++++++---------- .../cd/kamcoback/label/dto/LabelWorkDto.java | 4 ++++ .../label/LabelWorkRepositoryImpl.java | 21 +++++++++++++++++- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java index 31bd064e..c5df481c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java @@ -259,32 +259,32 @@ public class LabelAllocateApiController { name = "라벨링 종료", value = """ - {"closedType": "LABELING", "closedYn": "Y"} - """), + {"closedType": "LABELING", "closedYn": "Y"} + """), @io.swagger.v3.oas.annotations.media.ExampleObject( name = "검수 종료", value = """ - {"closedType": "INSPECTION", "closedYn": "Y"} - """), + {"closedType": "INSPECTION", "closedYn": "Y"} + """), @io.swagger.v3.oas.annotations.media.ExampleObject( name = "라벨링 재개", value = """ - {"closedType": "LABELING", "closedYn": "N"} - """), + {"closedType": "LABELING", "closedYn": "N"} + """), @io.swagger.v3.oas.annotations.media.ExampleObject( name = "검수 재개", value = """ - {"closedType": "INSPECTION", "closedYn": "N"} - """), + {"closedType": "INSPECTION", "closedYn": "N"} + """), @io.swagger.v3.oas.annotations.media.ExampleObject( - name = "특정 프로젝트 라벨링 종료", + name = "특정 프로젝트 라벨링 전체 종료", value = """ - {"uuid": "f97dc186-e6d3-4645-9737-3173dde8dc64", "closedType": "LABELING", "closedYn": "Y"} - """) + {"uuid": "f97dc186-e6d3-4645-9737-3173dde8dc64", "closedType": "INSPECTION", "closedYn": "Y"} + """) })) @RequestBody @Valid diff --git a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java index 11baac75..761567d1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelWorkDto.java @@ -58,6 +58,10 @@ public class LabelWorkDto { private String labelingClosedYn; private String inspectionClosedYn; + private Long inspectorCompleteTotCnt; + private Long inspectorRemainCnt; + private ZonedDateTime projectCloseDttm; + @JsonProperty("detectYear") public String getDetectYear() { if (compareYyyy == null || targetYyyy == null) { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java index 50bcd45b..2c5e3485 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.postgres.repository.label; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; import com.kamco.cd.kamcoback.label.dto.LabelWorkDto; import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelWorkMng; @@ -204,7 +205,25 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom { // totalAssignmentCnt: 총 배정 건수 (서브쿼리) totalAssignmentCntSubQuery, mapSheetAnalInferenceEntity.labelingClosedYn, - mapSheetAnalInferenceEntity.inspectionClosedYn)) + mapSheetAnalInferenceEntity.inspectionClosedYn, + new CaseBuilder() + .when( + mapSheetAnalDataInferenceGeomEntity.testState.eq( + InspectState.COMPLETE.getId())) + .then(1L) + .otherwise(0L) + .sum(), + new CaseBuilder() + .when( + mapSheetAnalDataInferenceGeomEntity.testState.eq( + InspectState.UNCONFIRM.getId())) + .then(1L) + .otherwise(0L) + .sum(), + new CaseBuilder() + .when(mapSheetAnalInferenceEntity.inspectionClosedYn.eq("Y")) + .then(mapSheetAnalInferenceEntity.updatedDttm) + .otherwise((ZonedDateTime) null))) .from(mapSheetAnalInferenceEntity) .innerJoin(mapSheetAnalDataInferenceEntity) .on(whereSubDataBuilder) From 767bea7da50ca406ccd41b64dd110de6053070c5 Mon Sep 17 00:00:00 2001 From: DanielLee <198891672+sanghyeonhd@users.noreply.github.com> Date: Wed, 14 Jan 2026 11:57:49 +0900 Subject: [PATCH 04/11] =?UTF-8?q?Detail=20=EB=8B=A4=EC=A4=91=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C,=20ploygon=20=EB=8B=A4=EC=A4=91=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrainingDataLabelRepositoryImpl.java | 24 ++- .../TrainingDataReviewRepositoryImpl.java | 24 ++- .../TrainingDataLabelApiController.java | 158 +++++++++++++++++- .../TrainingDataReviewApiController.java | 158 +++++++++++++++++- 4 files changed, 350 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java index daf56651..9a0b3f34 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataLabelRepositoryImpl.java @@ -638,6 +638,16 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport + " new polygon(s) for mapSheetNum: " + request.getMapSheetNum()); + // mapSheetNum을 Long으로 변환 + Long mapSheetNumLong = null; + try { + if (request.getMapSheetNum() != null && !request.getMapSheetNum().isEmpty()) { + mapSheetNumLong = Long.parseLong(request.getMapSheetNum()); + } + } catch (NumberFormatException e) { + System.err.println("Invalid mapSheetNum format: " + request.getMapSheetNum()); + } + int savedCount = 0; for (TrainingDataLabelDto.NewPolygonRequest.PolygonFeature feature : request.getFeatures()) { try { @@ -650,6 +660,8 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport mapSheetAnalDataInferenceGeomEntity.targetYyyy, mapSheetAnalDataInferenceGeomEntity.classBeforeCd, mapSheetAnalDataInferenceGeomEntity.classAfterCd, + mapSheetAnalDataInferenceGeomEntity.dataUid, + mapSheetAnalDataInferenceGeomEntity.mapSheetNum, mapSheetAnalDataInferenceGeomEntity.createdDttm, mapSheetAnalDataInferenceGeomEntity.updatedDttm, mapSheetAnalDataInferenceGeomEntity.labelState) @@ -659,20 +671,25 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport request.getTargetYyyy(), feature.getProperties().getBeforeClass().toLowerCase(), feature.getProperties().getAfterClass().toLowerCase(), + request.getAnalUid(), + mapSheetNumLong, ZonedDateTime.now(), ZonedDateTime.now(), "DONE") .execute(); - // 2. 생성된 geoUid 조회 + // 2. 생성된 geoUid 조회 (가장 최근에 삽입된 레코드) Long geoUid = queryFactory .select(mapSheetAnalDataInferenceGeomEntity.geoUid) .from(mapSheetAnalDataInferenceGeomEntity) .where( - mapSheetAnalDataInferenceGeomEntity.geom.eq(feature.getGeometry()), mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(request.getCompareYyyy()), - mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(request.getTargetYyyy())) + mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(request.getTargetYyyy()), + mapSheetAnalDataInferenceGeomEntity.classBeforeCd.eq( + feature.getProperties().getBeforeClass().toLowerCase()), + mapSheetAnalDataInferenceGeomEntity.classAfterCd.eq( + feature.getProperties().getAfterClass().toLowerCase())) .orderBy(mapSheetAnalDataInferenceGeomEntity.geoUid.desc()) .fetchFirst(); @@ -710,6 +727,7 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport } catch (Exception e) { System.err.println("Error saving polygon #" + (savedCount + 1) + ": " + e.getMessage()); + e.printStackTrace(); // 개별 polygon 저장 실패해도 계속 진행 } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java index 7a25d32e..fd3e8e4c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/trainingdata/TrainingDataReviewRepositoryImpl.java @@ -660,6 +660,16 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport + " new polygon(s) for mapSheetNum: " + request.getMapSheetNum()); + // mapSheetNum을 Long으로 변환 + Long mapSheetNumLong = null; + try { + if (request.getMapSheetNum() != null && !request.getMapSheetNum().isEmpty()) { + mapSheetNumLong = Long.parseLong(request.getMapSheetNum()); + } + } catch (NumberFormatException e) { + System.err.println("Invalid mapSheetNum format: " + request.getMapSheetNum()); + } + int savedCount = 0; for (TrainingDataReviewDto.NewPolygonRequest.PolygonFeature feature : request.getFeatures()) { try { @@ -672,6 +682,8 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport mapSheetAnalDataInferenceGeomEntity.targetYyyy, mapSheetAnalDataInferenceGeomEntity.classBeforeCd, mapSheetAnalDataInferenceGeomEntity.classAfterCd, + mapSheetAnalDataInferenceGeomEntity.dataUid, + mapSheetAnalDataInferenceGeomEntity.mapSheetNum, mapSheetAnalDataInferenceGeomEntity.createdDttm, mapSheetAnalDataInferenceGeomEntity.updatedDttm, mapSheetAnalDataInferenceGeomEntity.labelState) @@ -681,20 +693,25 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport request.getTargetYyyy(), feature.getProperties().getBeforeClass().toLowerCase(), feature.getProperties().getAfterClass().toLowerCase(), + request.getAnalUid(), + mapSheetNumLong, ZonedDateTime.now(), ZonedDateTime.now(), "DONE") .execute(); - // 2. 생성된 geoUid 조회 + // 2. 생성된 geoUid 조회 (가장 최근에 삽입된 레코드) Long geoUid = queryFactory .select(mapSheetAnalDataInferenceGeomEntity.geoUid) .from(mapSheetAnalDataInferenceGeomEntity) .where( - mapSheetAnalDataInferenceGeomEntity.geom.eq(feature.getGeometry()), mapSheetAnalDataInferenceGeomEntity.compareYyyy.eq(request.getCompareYyyy()), - mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(request.getTargetYyyy())) + mapSheetAnalDataInferenceGeomEntity.targetYyyy.eq(request.getTargetYyyy()), + mapSheetAnalDataInferenceGeomEntity.classBeforeCd.eq( + feature.getProperties().getBeforeClass().toLowerCase()), + mapSheetAnalDataInferenceGeomEntity.classAfterCd.eq( + feature.getProperties().getAfterClass().toLowerCase())) .orderBy(mapSheetAnalDataInferenceGeomEntity.geoUid.desc()) .fetchFirst(); @@ -732,6 +749,7 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport } catch (Exception e) { System.err.println("Error saving polygon #" + (savedCount + 1) + ": " + e.getMessage()); + e.printStackTrace(); // 개별 polygon 저장 실패해도 계속 진행 } } diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java index 3bc98ff1..76f6b710 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataLabelApiController.java @@ -132,7 +132,9 @@ public class TrainingDataLabelApiController { } } - @Operation(summary = "변화탐지정보 및 실태조사결과 조회", description = "선택한 작업의 변화탐지정보 및 실태조사결과를 조회합니다.") + @Operation( + summary = "변화탐지정보 및 실태조사결과 조회", + description = "선택한 작업의 변화탐지정보 및 실태조사결과를 조회합니다. 저장된 여러 개의 polygon을 조회할 수 있습니다.") @ApiResponses( value = { @ApiResponse( @@ -141,7 +143,155 @@ public class TrainingDataLabelApiController { content = @Content( mediaType = "application/json", - schema = @Schema(implementation = TrainingDataLabelDto.DetailRes.class))), + schema = @Schema(implementation = TrainingDataLabelDto.DetailRes.class), + examples = { + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "단일 polygon 조회", + description = "1개의 polygon이 저장된 경우 응답 예시", + value = + """ + { + "code": "OK", + "message": null, + "data": { + "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "changeDetectionInfo": { + "mapSheetInfo": "NI52-3-13-1", + "detectionYear": "2023-2024", + "beforeClass": { + "classification": "waste", + "probability": 0.95 + }, + "afterClass": { + "classification": "land", + "probability": 0.98 + }, + "area": 1250.5, + "detectionAccuracy": 0.96, + "pnu": 1234567890 + }, + "inspectionResultInfo": { + "verificationResult": "완료", + "inappropriateReason": "" + }, + "geom": { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + }, + "beforeCogUrl": "https://storage.example.com/cog/2023/NI52-3-13-1.tif", + "afterCogUrl": "https://storage.example.com/cog/2024/NI52-3-13-1.tif", + "mapBox": { + "type": "Polygon", + "coordinates": [[[126.65, 34.58], [126.67, 34.58], [126.67, 34.60], [126.65, 34.60], [126.65, 34.58]]] + }, + "learnGeometries": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + } + ] + } + } + """), + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "여러 polygon 조회", + description = "3개의 polygon이 저장된 경우 응답 예시", + value = + """ + { + "code": "OK", + "message": null, + "data": { + "assignmentUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "changeDetectionInfo": { + "mapSheetInfo": "NI52-3-13-1", + "detectionYear": "2023-2024", + "beforeClass": { + "classification": "waste", + "probability": 0.95 + }, + "afterClass": { + "classification": "land", + "probability": 0.98 + }, + "area": 1250.5, + "detectionAccuracy": 0.96, + "pnu": 1234567890 + }, + "inspectionResultInfo": { + "verificationResult": "완료", + "inappropriateReason": "" + }, + "geom": { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + }, + "beforeCogUrl": "https://storage.example.com/cog/2023/NI52-3-13-1.tif", + "afterCogUrl": "https://storage.example.com/cog/2024/NI52-3-13-1.tif", + "mapBox": { + "type": "Polygon", + "coordinates": [[[126.65, 34.58], [126.67, 34.58], [126.67, 34.60], [126.65, 34.60], [126.65, 34.58]]] + }, + "learnGeometries": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.665, 34.585], [126.664, 34.584], [126.666, 34.586], [126.665, 34.585]]] + }, + "properties": { + "beforeClass": "forest", + "afterClass": "building" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.660, 34.590], [126.659, 34.589], [126.661, 34.591], [126.660, 34.590]]] + }, + "properties": { + "beforeClass": "grassland", + "afterClass": "concrete" + } + } + ] + } + } + """) + })), @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), @ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) @@ -151,8 +301,8 @@ public class TrainingDataLabelApiController { @io.swagger.v3.oas.annotations.Parameter( description = "작업 배정 ID (UUID)", required = true, - example = "93c56be8-0246-4b22-b976-2476549733cc") - @RequestParam + example = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") + @RequestParam(defaultValue = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") java.util.UUID assignmentUid) { return ApiResponseDto.ok(trainingDataLabelService.getDetail(assignmentUid)); } diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java index 8febf996..2b26ef3b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java @@ -132,7 +132,9 @@ public class TrainingDataReviewApiController { } } - @Operation(summary = "변화탐지정보 및 실태조사결과 조회", description = "선택한 작업의 변화탐지정보 및 실태조사결과를 조회합니다.") + @Operation( + summary = "변화탐지정보 및 실태조사결과 조회", + description = "선택한 작업의 변화탐지정보 및 실태조사결과를 조회합니다. 저장된 여러 개의 polygon을 조회할 수 있습니다.") @ApiResponses( value = { @ApiResponse( @@ -141,7 +143,155 @@ public class TrainingDataReviewApiController { content = @Content( mediaType = "application/json", - schema = @Schema(implementation = TrainingDataReviewDto.DetailRes.class))), + schema = @Schema(implementation = TrainingDataReviewDto.DetailRes.class), + examples = { + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "단일 polygon 조회", + description = "1개의 polygon이 저장된 경우 응답 예시", + value = + """ + { + "code": "OK", + "message": null, + "data": { + "operatorUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "changeDetectionInfo": { + "mapSheetInfo": "NI52-3-13-1", + "detectionYear": "2023-2024", + "beforeClass": { + "classification": "waste", + "probability": 0.95 + }, + "afterClass": { + "classification": "land", + "probability": 0.98 + }, + "area": 1250.5, + "detectionAccuracy": 0.96, + "pnu": 1234567890 + }, + "inspectionResultInfo": { + "verificationResult": "완료", + "inappropriateReason": "" + }, + "geom": { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + }, + "beforeCogUrl": "https://storage.example.com/cog/2023/NI52-3-13-1.tif", + "afterCogUrl": "https://storage.example.com/cog/2024/NI52-3-13-1.tif", + "mapBox": { + "type": "Polygon", + "coordinates": [[[126.65, 34.58], [126.67, 34.58], [126.67, 34.60], [126.65, 34.60], [126.65, 34.58]]] + }, + "learnGeometries": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + } + ] + } + } + """), + @io.swagger.v3.oas.annotations.media.ExampleObject( + name = "여러 polygon 조회", + description = "3개의 polygon이 저장된 경우 응답 예시", + value = + """ + { + "code": "OK", + "message": null, + "data": { + "operatorUid": "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02", + "changeDetectionInfo": { + "mapSheetInfo": "NI52-3-13-1", + "detectionYear": "2023-2024", + "beforeClass": { + "classification": "waste", + "probability": 0.95 + }, + "afterClass": { + "classification": "land", + "probability": 0.98 + }, + "area": 1250.5, + "detectionAccuracy": 0.96, + "pnu": 1234567890 + }, + "inspectionResultInfo": { + "verificationResult": "완료", + "inappropriateReason": "" + }, + "geom": { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + }, + "beforeCogUrl": "https://storage.example.com/cog/2023/NI52-3-13-1.tif", + "afterCogUrl": "https://storage.example.com/cog/2024/NI52-3-13-1.tif", + "mapBox": { + "type": "Polygon", + "coordinates": [[[126.65, 34.58], [126.67, 34.58], [126.67, 34.60], [126.65, 34.60], [126.65, 34.58]]] + }, + "learnGeometries": [ + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.663, 34.588], [126.662, 34.587], [126.664, 34.589], [126.663, 34.588]]] + }, + "properties": { + "beforeClass": "waste", + "afterClass": "land" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.665, 34.585], [126.664, 34.584], [126.666, 34.586], [126.665, 34.585]]] + }, + "properties": { + "beforeClass": "forest", + "afterClass": "building" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [[[126.660, 34.590], [126.659, 34.589], [126.661, 34.591], [126.660, 34.590]]] + }, + "properties": { + "beforeClass": "grassland", + "afterClass": "concrete" + } + } + ] + } + } + """) + })), @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content), @ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) @@ -151,8 +301,8 @@ public class TrainingDataReviewApiController { @io.swagger.v3.oas.annotations.Parameter( description = "검수 작업 ID (UUID)", required = true, - example = "93c56be8-0246-4b22-b976-2476549733cc") - @RequestParam + example = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") + @RequestParam(defaultValue = "4f9ebc8b-6635-4177-b42f-7efc9c7b4c02") java.util.UUID operatorUid) { return ApiResponseDto.ok(trainingDataReviewService.getDetail(operatorUid)); } From 91b09a917edebb9dbed0208e5779974c0138db96 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 14 Jan 2026 14:20:13 +0900 Subject: [PATCH 05/11] =?UTF-8?q?=ED=95=99=EC=8A=B5=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EA=B4=80=EB=A6=AC=20>=20=EC=9E=91=EC=97=85=EC=9D=B4?= =?UTF-8?q?=EB=A0=A5=20=EC=A7=84=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../label/LabelAllocateApiController.java | 18 +++ .../kamcoback/label/dto/LabelAllocateDto.java | 21 ++++ .../label/service/LabelAllocateService.java | 10 ++ .../core/LabelAllocateCoreService.java | 10 ++ .../label/LabelAllocateRepositoryCustom.java | 6 + .../label/LabelAllocateRepositoryImpl.java | 104 ++++++++++++++++++ 6 files changed, 169 insertions(+) diff --git a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java index c5df481c..6745a735 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/LabelAllocateApiController.java @@ -5,6 +5,7 @@ import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InferenceDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.WorkHistoryDto; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.UpdateClosedRequest; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkerListResponse; import com.kamco.cd.kamcoback.label.service.LabelAllocateService; @@ -302,4 +303,21 @@ public class LabelAllocateApiController { return ApiResponseDto.okObject( new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, statusMessage)); } + + @Operation(summary = "라벨링작업 관리 > 상세 > 작업이력", description = "라벨링작업 관리 > 상세 > 작업이력") + @GetMapping("/work-history-list") + public ApiResponseDto> findWorkHistoryList( + @RequestParam(defaultValue = "0", required = true) int page, + @RequestParam(defaultValue = "20", required = true) int size, + @Parameter(description = "사번", required = true, example = "123456") @RequestParam + String userId, + @Schema( + allowableValues = {"LABELER", "REVIEWER"}, + defaultValue = "LABELER") + @Parameter(description = "라벨러/검수자(LABELER/REVIEWER)", required = true) + @RequestParam + String type) { + LabelAllocateDto.searchReq searchReq = new LabelAllocateDto.searchReq(page, size, ""); + return ApiResponseDto.ok(labelAllocateService.findWorkHistoryList(searchReq, userId, type)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java index a945e5f0..be15d446 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java @@ -314,4 +314,25 @@ public class LabelAllocateDto { private Long totalCnt; private List moveUserList; } + + @Schema(name = "WorkHistoryDto", description = "WorkHistoryDto") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class WorkHistoryDto { + + private Integer rowNum; + private String changeDetectionYear; + private Long stage; + private ZonedDateTime gukyuinApplyDttm; + private Long assignedCnt; + private Long completeCnt; + private Long skipCnt; + private Long remainCnt; + // private String status; + private Double percent; + private ZonedDateTime createdDttm; + private ZonedDateTime projectCloseDttm; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java b/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java index e4fa63df..4a8b5502 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/service/LabelAllocateService.java @@ -10,6 +10,8 @@ import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveInfo; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.TargetUser; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.UserList; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.WorkHistoryDto; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.searchReq; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.ProjectInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkProgressInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkerListResponse; @@ -250,4 +252,12 @@ public class LabelAllocateService { labelAllocateCoreService.updateClosedYnByUuid(targetUuid, closedType, closedYn); } + + public Page findWorkHistoryList(searchReq searchReq, String userId, String type) { + if (type.equals("LABELER")) { + return labelAllocateCoreService.workLabelHistoryList(searchReq, userId); + } else { + return labelAllocateCoreService.workReviewerHistoryList(searchReq, userId); + } + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/LabelAllocateCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/LabelAllocateCoreService.java index 86c165e9..fd6e985e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/LabelAllocateCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/LabelAllocateCoreService.java @@ -7,6 +7,7 @@ import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveInfo; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.UserList; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.WorkHistoryDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.searchReq; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.ProjectInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkProgressInfo; @@ -145,4 +146,13 @@ public class LabelAllocateCoreService { public void updateClosedYnByUuid(String uuid, String closedType, String closedYn) { labelAllocateRepository.updateClosedYnByUuid(uuid, closedType, closedYn); } + + public Page workLabelHistoryList( + LabelAllocateDto.searchReq searchReq, String userId) { + return labelAllocateRepository.workLabelHistoryList(searchReq, userId); + } + + public Page workReviewerHistoryList(searchReq searchReq, String userId) { + return labelAllocateRepository.workReviewerHistoryList(searchReq, userId); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryCustom.java index 5980da85..a43df4e1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryCustom.java @@ -7,6 +7,8 @@ import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveInfo; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.UserList; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.WorkHistoryDto; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.searchReq; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.ProjectInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkProgressInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkerStatistics; @@ -86,4 +88,8 @@ public interface LabelAllocateRepositoryCustom { // 프로젝트 종료 여부 업데이트 (uuid 기반) void updateClosedYnByUuid(String uuid, String closedType, String closedYn); + + Page workLabelHistoryList(LabelAllocateDto.searchReq searchReq, String userId); + + Page workReviewerHistoryList(searchReq searchReq, String userId); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java index 8bd68ed1..7d34b4de 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java @@ -18,6 +18,8 @@ import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveInfo; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveUserList; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.UserList; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.WorkHistoryDto; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.searchReq; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.ProjectInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkProgressInfo; import com.kamco.cd.kamcoback.label.dto.WorkerStatsDto.WorkerStatistics; @@ -32,6 +34,7 @@ import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityNotFoundException; @@ -1457,4 +1460,105 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto em.flush(); em.clear(); } + + public Page workLabelHistoryList( + LabelAllocateDto.searchReq searchReq, String userId) { + + NumberExpression totalCnt = labelingAssignmentEntity.assignmentUid.count(); + + NumberExpression assignedCnt = + new CaseBuilder() + .when(labelingAssignmentEntity.workState.eq(LabelState.ASSIGNED.getId())) + .then(1L) + .otherwise((Long) null) + .count(); + + NumberExpression skipCnt = + new CaseBuilder() + .when(labelingAssignmentEntity.workState.eq(LabelState.SKIP.getId())) + .then(1L) + .otherwise((Long) null) + .count(); + + NumberExpression completeCnt = + new CaseBuilder() + .when(labelingAssignmentEntity.workState.eq(LabelState.DONE.getId())) + .then(1L) + .otherwise((Long) null) + .count(); + + NumberExpression percent = + new CaseBuilder() + .when(completeCnt.eq(0L)) + .then(0.0) + .otherwise( + Expressions.numberTemplate( + Double.class, + "round({0} / {1}, 2)", + completeCnt, + labelingAssignmentEntity.count())); + + Pageable pageable = searchReq.toPageable(); + List list = + queryFactory + .select( + Projections.constructor( + WorkHistoryDto.class, + Expressions.numberTemplate( + Integer.class, + "row_number() over(order by {0} desc)", + labelingAssignmentEntity.analUid), + Expressions.stringTemplate( + "concat({0}, '-', {1})", + mapSheetAnalInferenceEntity.compareYyyy, + mapSheetAnalInferenceEntity.targetYyyy), + mapSheetAnalInferenceEntity.stage, + mapSheetAnalInferenceEntity.gukyuinApplyDttm, + assignedCnt, + completeCnt, + skipCnt, + skipCnt, + // status, + percent, + mapSheetAnalInferenceEntity.createdDttm, + new CaseBuilder() + .when(mapSheetAnalInferenceEntity.inspectionClosedYn.eq("Y")) + .then(mapSheetAnalInferenceEntity.updatedDttm) + .otherwise((ZonedDateTime) null))) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalInferenceEntity) + .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) + .where( + labelingAssignmentEntity.analUid.in( + JPAExpressions.select(labelingAssignmentEntity.analUid) + .from(labelingAssignmentEntity) + .where(labelingAssignmentEntity.workerUid.eq(userId)) + .groupBy(labelingAssignmentEntity.analUid))) + .orderBy(percent.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + Long countQuery = + queryFactory + .select(mapSheetAnalInferenceEntity.id.count()) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalInferenceEntity) + .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) + .where( + labelingAssignmentEntity.analUid.in( + JPAExpressions.select(labelingAssignmentEntity.analUid) + .from(labelingAssignmentEntity) + .where(labelingAssignmentEntity.workerUid.eq(userId)) + .groupBy(labelingAssignmentEntity.analUid))) + .fetchOne(); + + return new PageImpl<>(list, pageable, countQuery); + } + + @Override + public Page workReviewerHistoryList(searchReq searchReq, String userId) { + + return null; + } } From 57438830c669061a2827cae9a9894cc98b2d4ae6 Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 14 Jan 2026 14:25:14 +0900 Subject: [PATCH 06/11] =?UTF-8?q?[KC-103]=20=EC=B6=94=EB=A1=A0=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89=20=EC=A1=B0=EA=B1=B4=20=EB=B3=80=EA=B2=BD,=20exceptio?= =?UTF-8?q?n=20=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kamcoback/config/api/ApiResponseDto.java | 4 + .../inference/dto/InferenceResultDto.java | 7 +- .../service/InferenceResultService.java | 235 ++++++++++-------- .../mapsheet/dto/MapSheetMngDto.java | 2 + .../core/InferenceResultCoreService.java | 104 ++++---- .../postgres/core/MapSheetMngCoreService.java | 94 ++++--- .../entity/MapSheetLearn5kEntity.java | 6 + .../postgres/entity/MapSheetLearnEntity.java | 3 + .../MapSheetLearnRepositoryCustom.java | 2 + .../MapSheetLearnRepositoryImpl.java | 22 ++ .../mapsheet/MapSheetMngRepositoryCustom.java | 3 +- .../mapsheet/MapSheetMngRepositoryImpl.java | 62 ++++- .../scene/MapInkx5kRepositoryCustom.java | 3 - .../scene/MapInkx5kRepositoryImpl.java | 13 - 14 files changed, 359 insertions(+), 201 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java b/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java index 827b606e..c32c958e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/config/api/ApiResponseDto.java @@ -173,6 +173,10 @@ public class ApiResponseDto { + "To reset your password again, please submit a new request through \"Forgot" + " Password.\""), PAYLOAD_TOO_LARGE("업로드 용량 제한을 초과했습니다."), + NOT_FOUND_TARGET_YEAR("기준년도 도엽을 찾을 수 없습니다."), + NOT_FOUND_COMPARE_YEAR("비교년도 도엽을 찾을 수 없습니다."), + FAIL_SAVE_MAP_SHEET("도엽 저장 중 오류가 발생했습니다."), + FAIL_CREATE_MAP_SHEET_FILE("도엽 설정파일 생성 중 오류가 발생했습니다."), ; // @formatter:on private final String message; diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index cccbfe71..fecbb7e1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -181,12 +181,9 @@ public class InferenceResultDto { message = "탐지 데이터 옵션은 '추론제외', '이전 년도 도엽 사용' 만 사용 가능합니다.") private String detectOption; - @Schema( - description = "5k 도협 번호 목록", - example = - "[{\"mapSheetNum\":33605099,\"mapSheetName\":\"비양도\"},{\"mapSheetNum\":33605100,\"mapSheetName\":\"비양도\"},{\"mapSheetNum\":33606059,\"mapSheetName\":\"한림\"}]") + @Schema(description = "5k 도협 번호 목록", example = "[33605,33606, 33610, 34802, 35603, 35611]") @NotNull - private List mapSheetNum; + private List mapSheetNum; } @Getter diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index be9483a9..617b8bbc 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.inference.service; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.common.exception.CustomApiException; @@ -14,7 +15,6 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.DetectOption; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; -import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.SaveInferenceAiDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Status; @@ -26,10 +26,10 @@ import com.kamco.cd.kamcoback.model.dto.ModelMngDto.Basic; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import com.kamco.cd.kamcoback.postgres.core.MapSheetMngCoreService; import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService; -import jakarta.persistence.EntityNotFoundException; import jakarta.validation.constraints.NotNull; import java.time.ZonedDateTime; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -57,6 +57,7 @@ public class InferenceResultService { private final MapSheetMngCoreService mapSheetMngCoreService; private final ModelMngCoreService modelMngCoreService; private final ExternalHttpClient externalHttpClient; + private final ObjectMapper objectMapper; @Value("${inference.url}") private String inferenceUrl; @@ -91,34 +92,107 @@ public class InferenceResultService { @Transactional public UUID saveInferenceInfo(InferenceResultDto.RegReq req) { - // 분석대상 도엽이 전체일때 - if (MapSheetScope.ALL.getId().equals(req.getMapSheetScope())) { + // 변화탐지 실행 가능 기준 년도 조회 + List targetList = mapSheetMngCoreService.getHstMapSheetList(req); - // 기준년도 조회 - List targetList = mapSheetMngCoreService.getHstMapSheetList(req.getTargetYyyy()); - req.setMapSheetNum(createdMngDto(req, targetList)); - - } else { - // 부분 - - List mapTargetIds = new ArrayList<>(); - req.getMapSheetNum().forEach(dto -> mapTargetIds.add(dto.getMapSheetNum())); - - // 기준년도 조회 - List targetList = - mapSheetMngCoreService.getHstMapSheetList(req.getTargetYyyy(), mapTargetIds); - req.setMapSheetNum(createdMngDto(req, targetList)); + if (targetList.isEmpty()) { + throw new CustomApiException("NOT_FOUND_TARGET_YEAR", HttpStatus.NOT_FOUND); } - if (req.getMapSheetNum().isEmpty()) { - throw new EntityNotFoundException("분석 대상 정보가 부족합니다."); + List mapTargetIds = new ArrayList<>(); + for (MngListDto target : targetList) { + mapTargetIds.add(target.getMapSheetNum()); } - // 추론 테이블 저장 - UUID uuid = inferenceResultCoreService.saveInferenceInfo(req); + // 변화탐지 실행 가능 비교년도 조회 + List compareList = + mapSheetMngCoreService.getByHstMapSheetCompareList(req.getCompareYyyy(), mapTargetIds); - // 추론 실행 API 호출 - startInference(req, uuid); + if (compareList.isEmpty()) { + throw new CustomApiException("NOT_FOUND_COMPARE_YEAR", HttpStatus.NOT_FOUND); + } + + List> totalNumList = new ArrayList<>(); + + if (DetectOption.EXCL.getId().equals(req.getDetectOption())) { + // "추론제외" 일때 전년도 이전 값이 있어도 전년도 도엽이 없으면 비교 안함 + for (MngListCompareDto dto : compareList) { + if (Objects.equals(dto.getBeforeYear(), req.getCompareYyyy())) { + Map map = new HashMap<>(); + map.put("beforeYear", dto.getBeforeYear()); + map.put("mapSheetNum", dto.getMapSheetNum()); + totalNumList.add(map); + } + } + } else if (DetectOption.PREV.getId().equals(req.getDetectOption())) { + // "이전 년도 도엽 사용" 이면 전년도 이전 도엽도 사용 + for (MngListCompareDto dto : compareList) { + if (dto.getBeforeYear() != 0) { + Map map = new HashMap<>(); + map.put("beforeYear", dto.getBeforeYear()); + map.put("mapSheetNum", dto.getMapSheetNum()); + totalNumList.add(map); + } + } + } + + if (totalNumList.isEmpty()) { + throw new CustomApiException("NOT_FOUND_COMPARE_YEAR", HttpStatus.NOT_FOUND); + } + + for (MngListDto target : targetList) { + for (Map map : totalNumList) { + if (target.getMapSheetNum().equals(map.get("mapSheetNum").toString())) { + target.setBeforeYear(map.get("beforeYear").toString()); + target.setIsSuccess(true); + } + } + } + + // 목록 및 추론 대상 도엽정보 저장 + UUID uuid = inferenceResultCoreService.saveInferenceInfo(req, targetList); + + // 추론에 필요한 geojson 파일 생성 + List mapSheetNumList = + targetList.stream() + .filter(t -> Boolean.TRUE.equals(t.getIsSuccess())) + .map(MngListDto::getMapSheetNum) + .toList(); + + // 비교년도 geojson 파일 생성하여 경로 받기 + String modelComparePath = + getSceneInference( + String.valueOf(req.getCompareYyyy()), mapSheetNumList, req.getMapSheetScope()); + + // 기준년도 geojson 파일 생성하여 경로 받기 + String modelTargetPath = + getSceneInference( + String.valueOf(req.getTargetYyyy()), mapSheetNumList, req.getMapSheetScope()); + + // ai 서버에 전달할 파라미터 생성 + pred_requests_areas predRequestsAreas = new pred_requests_areas(); + predRequestsAreas.setInput1_year(req.getCompareYyyy()); + predRequestsAreas.setInput2_year(req.getTargetYyyy()); + predRequestsAreas.setInput1_scene_path(modelComparePath); + predRequestsAreas.setInput2_scene_path(modelTargetPath); + + InferenceSendDto m1 = this.getModelInfo(req.getModel1Uuid()); + m1.setPred_requests_areas(predRequestsAreas); + + // ai 추론 실행 api 호출 + Long batchId = ensureAccepted(m1); + + // ai 추론 실행후 응답값 update + SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto(); + saveInferenceAiDto.setUuid(uuid); + saveInferenceAiDto.setBatchId(batchId); + saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId()); + saveInferenceAiDto.setType("M1"); + saveInferenceAiDto.setInferStartDttm(ZonedDateTime.now()); + saveInferenceAiDto.setModelComparePath(modelComparePath); + saveInferenceAiDto.setModelTargetPath(modelTargetPath); + saveInferenceAiDto.setModelStartDttm(ZonedDateTime.now()); + inferenceResultCoreService.update(saveInferenceAiDto); return uuid; } @@ -185,104 +259,67 @@ public class InferenceResultService { return mapSheetNum; } - /** - * 추론 실행 API 호출 - * - * @param req - */ - private void startInference(InferenceResultDto.RegReq req, UUID uuid) { - - List mapSheetNum = req.getMapSheetNum(); - List mapSheetNumList = new ArrayList<>(); - - for (MapSheetNumDto mapSheetDto : mapSheetNum) { - mapSheetNumList.add(mapSheetDto.getMapSheetNum()); - } - - String modelComparePath = - getSceneInference(String.valueOf(req.getCompareYyyy()), mapSheetNumList); - String modelTargetPath = - getSceneInference(String.valueOf(req.getTargetYyyy()), mapSheetNumList); - - pred_requests_areas predRequestsAreas = new pred_requests_areas(); - predRequestsAreas.setInput1_year(req.getCompareYyyy()); - predRequestsAreas.setInput2_year(req.getTargetYyyy()); - predRequestsAreas.setInput1_scene_path(modelComparePath); - predRequestsAreas.setInput2_scene_path(modelTargetPath); - - InferenceSendDto m1 = this.getModelInfo(req.getModel1Uuid()); - InferenceSendDto m2 = this.getModelInfo(req.getModel2Uuid()); - InferenceSendDto m3 = this.getModelInfo(req.getModel3Uuid()); - - m1.setPred_requests_areas(predRequestsAreas); - m2.setPred_requests_areas(predRequestsAreas); - m3.setPred_requests_areas(predRequestsAreas); - - Long batchId = this.ensureAccepted(m1); - - SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto(); - saveInferenceAiDto.setUuid(uuid); - saveInferenceAiDto.setBatchId(batchId); - saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId()); - saveInferenceAiDto.setType("M1"); - saveInferenceAiDto.setInferStartDttm(ZonedDateTime.now()); - saveInferenceAiDto.setModelComparePath(modelComparePath); - saveInferenceAiDto.setModelTargetPath(modelTargetPath); - saveInferenceAiDto.setModelStartDttm(ZonedDateTime.now()); - inferenceResultCoreService.update(saveInferenceAiDto); - } - /** * 추론 AI API 호출 * * @param dto */ private Long ensureAccepted(InferenceSendDto dto) { - log.info("dto null? {}", dto == null); - ObjectMapper om = new ObjectMapper(); - try { - log.info("dto json={}", om.writeValueAsString(dto)); - } catch (Exception e) { - log.error(e.getMessage()); + + if (dto == null) { + log.warn("not InferenceSendDto dto"); + throw new CustomApiException("BAD_REQUEST", HttpStatus.BAD_REQUEST); } - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + // 1) 요청 로그 (debug 권장) + try { + log.debug("Inference request dto={}", objectMapper.writeValueAsString(dto)); + } catch (JsonProcessingException e) { + log.warn("Failed to serialize inference dto", e); + } - // TODO 추후 삭제 + // 2) local 환경 임시 처리 (NPE 방어) if ("local".equals(profile)) { + if (dto.getPred_requests_areas() == null) { + throw new IllegalStateException("pred_requests_areas is null"); + } dto.getPred_requests_areas().setInput1_scene_path("/kamco-nfs/requests/2023_local.geojson"); dto.getPred_requests_areas().setInput2_scene_path("/kamco-nfs/requests/2024_local.geojson"); } + // 3) HTTP 호출 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + ExternalCallResult result = externalHttpClient.call(inferenceUrl, HttpMethod.POST, dto, headers, String.class); - int status = result.statusCode(); - String body = result.body(); - - if (status < 200 || status >= 300) { + if (result.statusCode() < 200 || result.statusCode() >= 300) { + log.error("Inference API failed. status={}, body={}", result.statusCode(), result.body()); throw new CustomApiException("BAD_GATEWAY", HttpStatus.BAD_GATEWAY); } - Long batchId = 0L; - + // 4) 응답 파싱 try { List> list = - om.readValue(body, new TypeReference>>() {}); + objectMapper.readValue(result.body(), new TypeReference<>() {}); - Integer batchIdInt = (Integer) list.get(0).get("batch_id"); - batchId = batchIdInt.longValue(); if (list.isEmpty()) { throw new IllegalStateException("Inference response is empty"); } - } catch (Exception e) { - log.error(e.getMessage()); - } + Object batchIdObj = list.get(0).get("batch_id"); + if (batchIdObj == null) { + throw new IllegalStateException("batch_id not found in response"); + } - return batchId; + return Long.valueOf(batchIdObj.toString()); + + } catch (Exception e) { + log.error("Failed to parse inference response. body={}", result.body(), e); + throw new CustomApiException("INVALID_INFERENCE_RESPONSE", HttpStatus.BAD_GATEWAY); + } } /** @@ -335,11 +372,13 @@ public class InferenceResultService { /** * geojson 파일 생성 * - * @param yyyy - * @param mapSheetNums + * @param yyyy 영상관리 파일별 년도 + * @param mapSheetNums 5k 도엽 번호 리스트 + * @param mapSheetScope EXCL : 추론제외, PREV 이전 년도 도엽 사용 + * @return */ - private String getSceneInference(String yyyy, List mapSheetNums) { - return mapSheetMngCoreService.getSceneInference(yyyy, mapSheetNums); + private String getSceneInference(String yyyy, List mapSheetNums, String mapSheetScope) { + return mapSheetMngCoreService.getSceneInference(yyyy, mapSheetNums, mapSheetScope); } /** diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java index deba4b38..d560e19d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java @@ -427,6 +427,8 @@ public class MapSheetMngDto { private int mngYyyy; private String mapSheetNum; private String mapSheetName; + private String beforeYear; + private Boolean isSuccess; } @Schema(name = "MngListDto", description = "영상파일내역 검색 목록") diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index e2b5bdf3..a7347cdd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -1,6 +1,6 @@ package com.kamco.cd.kamcoback.postgres.core; -import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; +import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.common.utils.UserUtil; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard; @@ -10,9 +10,9 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceProgressDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; -import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.SaveInferenceAiDto; +import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListDto; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; @@ -28,14 +28,17 @@ import jakarta.validation.constraints.NotNull; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.UUID; import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.dao.DataAccessException; import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service +@Log4j2 @RequiredArgsConstructor public class InferenceResultCoreService { @@ -63,17 +66,26 @@ public class InferenceResultCoreService { * * @param req */ - public UUID saveInferenceInfo(InferenceResultDto.RegReq req) { + public UUID saveInferenceInfo(InferenceResultDto.RegReq req, List targetList) { + String firstMapSheetName = null; + String mapSheetName = ""; + int detectingCnt = 0; - String mapSheetName = - req.getMapSheetNum().get(0).getMapSheetName() - + " 외 " - + (req.getMapSheetNum().size() - 1) - + "건"; + for (MngListDto dto : targetList) { + if (Boolean.TRUE.equals(dto.getIsSuccess())) { + if (detectingCnt == 0) { + firstMapSheetName = dto.getMapSheetName(); + } + detectingCnt++; + } + } - if (req.getMapSheetNum().size() == 1) { - mapSheetName = - req.getMapSheetNum().get(0).getMapSheetName() + " " + req.getMapSheetNum().size() + "건"; + if (detectingCnt == 0) { + mapSheetName = ""; + } else if (detectingCnt == 1) { + mapSheetName = firstMapSheetName + " 1건"; + } else { + mapSheetName = firstMapSheetName + " 외 " + (detectingCnt - 1) + "건"; } MapSheetLearnEntity mapSheetLearnEntity = new MapSheetLearnEntity(); @@ -87,7 +99,9 @@ public class InferenceResultCoreService { mapSheetLearnEntity.setDetectOption(req.getDetectOption()); mapSheetLearnEntity.setCreatedUid(userUtil.getId()); mapSheetLearnEntity.setMapSheetCnt(mapSheetName); - mapSheetLearnEntity.setDetectingCnt((long) req.getMapSheetNum().size()); + mapSheetLearnEntity.setDetectingCnt((long) detectingCnt); + mapSheetLearnEntity.setStage( + mapSheetLearnRepository.getLearnStage(req.getCompareYyyy(), req.getTargetYyyy())); // learn 테이블 저장 MapSheetLearnEntity savedLearn = mapSheetLearnRepository.save(mapSheetLearnEntity); @@ -95,14 +109,16 @@ public class InferenceResultCoreService { final int CHUNK = 1000; List buffer = new ArrayList<>(CHUNK); - // learn 도엽 저장 - for (MapSheetNumDto mapSheetNum : req.getMapSheetNum()) { - MapSheetLearn5kEntity e = new MapSheetLearn5kEntity(); - e.setLearn(savedLearn); - e.setMapSheetNum(Long.parseLong(mapSheetNum.getMapSheetNum())); - e.setCreatedUid(userUtil.getId()); - buffer.add(e); + // learn 도엽별 저장 + for (MngListDto mngDto : targetList) { + MapSheetLearn5kEntity entity = new MapSheetLearn5kEntity(); + entity.setLearn(savedLearn); + entity.setMapSheetNum(Long.parseLong(mngDto.getMapSheetNum())); + entity.setBeforeYear(Integer.valueOf(mngDto.getBeforeYear())); + entity.setIsSuccess(mngDto.getIsSuccess() != null && mngDto.getIsSuccess()); + entity.setCreatedUid(userUtil.getId()); + buffer.add(entity); if (buffer.size() == CHUNK) { flushChunk(buffer); buffer.clear(); @@ -117,33 +133,24 @@ public class InferenceResultCoreService { return savedLearn.getUuid(); } + /** + * 도엽별 저장 + * + * @param buffer + */ private void flushChunk(List buffer) { - // 청크 번호 추출 in 조건 만들기 - List chunkNums = - buffer.stream().map(e -> String.valueOf(e.getMapSheetNum())).distinct().toList(); - - // 추론 제외 - List usedEntities = - mapInkx5kRepository.findByMapSheetNumInAndUseInference(chunkNums, CommonUseStatus.USE); - - // TODO 추론 제외 했으면 파일 있는지도 확인 해야함 - // 조회 결과에서 번호만 Set으로 - Set usedSet = - usedEntities.stream() - .map(MapInkx5kEntity::getMapidcdNo) - .collect(java.util.stream.Collectors.toSet()); - - // 필터 후 저장 - List toSave = - buffer.stream().filter(e -> usedSet.contains(String.valueOf(e.getMapSheetNum()))).toList(); - - if (!toSave.isEmpty()) { - mapSheetLearn5kRepository.saveAll(toSave); - mapSheetLearn5kRepository.flush(); + try { + if (!buffer.isEmpty()) { + mapSheetLearn5kRepository.saveAll(buffer); + mapSheetLearn5kRepository.flush(); + } + } catch (DataAccessException e) { + log.error("FAIL_SAVE_MAP_SHEET(도엽 저장 중 오류가 발생했습니다.): bufferSize={}", buffer.size(), e); + throw new CustomApiException("FAIL_SAVE_MAP_SHEET", HttpStatus.INTERNAL_SERVER_ERROR); + } finally { + entityManager.clear(); } - - entityManager.clear(); } /****/ @@ -354,4 +361,13 @@ public class InferenceResultCoreService { public UUID getProcessing() { return mapSheetLearnRepository.getProcessing(); } + + /** + * @param compareYear 비교년도 + * @param targetYear 기준년도 + * @return + */ + public Integer getLearnStage(Integer compareYear, Integer targetYear) { + return mapSheetLearnRepository.getLearnStage(compareYear, targetYear); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java index 1868dd16..cf56f24d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MapSheetMngCoreService.java @@ -1,7 +1,10 @@ package com.kamco.cd.kamcoback.postgres.core; +import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.common.geometry.GeoJsonFileWriter; 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.MapSheetScope; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListCompareDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListDto; @@ -14,6 +17,7 @@ import jakarta.persistence.EntityNotFoundException; import jakarta.validation.Valid; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.List; @@ -23,6 +27,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -206,49 +211,82 @@ public class MapSheetMngCoreService { } } - public String getSceneInference(String yyyy, List scenes) { - String outputPath = ""; + /** + * 추론 실행에 필요한 geojson 파일 생성 + * + * @param yyyy 영상관리 파일별 년도 + * @param scenes 5k 도엽 번호 리스트 + * @param mapSheetScope EXCL : 추론제외, PREV 이전 년도 도엽 사용 + * @return + */ + public String getSceneInference(String yyyy, List scenes, String mapSheetScope) { - try { - List sceneInference = mapSheetMngRepository.getSceneInference(yyyy, scenes); + boolean isAll = MapSheetScope.ALL.getId().equals(mapSheetScope); - if (sceneInference == null || sceneInference.isEmpty()) { - log.warn("No scene data found for year: {}", yyyy); - return outputPath; - } + // 1) 경로/파일명 결정 + String targetDir = + "local".equals(activeEnv) ? System.getProperty("user.home") + "/geojson" : inferenceDir; - if (activeEnv.equals("local")) { - inferenceDir = System.getProperty("user.home") + "/geojson"; - } - String filename = String.format("%s_%s.geojson", yyyy, activeEnv); - outputPath = Paths.get(inferenceDir, filename).toString(); + String filename = + isAll + ? String.format("%s_%s_ALL.geojson", yyyy, activeEnv) + : String.format("%s_%s.geojson", yyyy, activeEnv); - // 디렉토리가 없으면 생성 - Files.createDirectories(Paths.get(inferenceDir)); + Path outputPath = Paths.get(targetDir, filename); - // GeoJSON 파일 생성 (EPSG:5186 - Korea 2000 / Central Belt 2010) - GeoJsonFileWriter writer = new GeoJsonFileWriter(); - writer.exportToFile(sceneInference, "scene_inference_" + yyyy, 5186, outputPath); - - log.info("GeoJSON file created successfully: {}", outputPath); - log.info("Total features exported: {}", sceneInference.size()); - - } catch (IOException e) { - log.error("Failed to create GeoJSON file for year: {}", yyyy, e); - throw new RuntimeException("GeoJSON 파일 생성 실패: " + e.getMessage(), e); + // 2) ALL일 때만 재사용 + if (isAll && Files.exists(outputPath)) { + return outputPath.toString(); } - return outputPath; + // 3) 데이터 조회 (파일 없을 때만) + List sceneInference = mapSheetMngRepository.getSceneInference(yyyy, scenes); + if (sceneInference == null || sceneInference.isEmpty()) { + log.warn( + "NOT_FOUND_TARGET_YEAR: yyyy={}, isAll={}, scenesSize={}", + yyyy, + isAll, + scenes == null ? 0 : scenes.size()); + throw new CustomApiException("NOT_FOUND_TARGET_YEAR", HttpStatus.NOT_FOUND); + } + + // 4) 파일 생성 + try { + Files.createDirectories(outputPath.getParent()); + + new GeoJsonFileWriter() + .exportToFile(sceneInference, "scene_inference_" + yyyy, 5186, outputPath.toString()); + + return outputPath.toString(); + + } catch (IOException e) { + log.error( + "FAIL_CREATE_MAP_SHEET_FILE: yyyy={}, isAll={}, path={}", yyyy, isAll, outputPath, e); + throw new CustomApiException("FAIL_CREATE_MAP_SHEET_FILE", HttpStatus.INTERNAL_SERVER_ERROR); + } } - public List getHstMapSheetList(int mngYyyy) { - return mapSheetMngRepository.findByHstMapSheetTargetList(mngYyyy); + /** + * 변화탐지 실행 가능 기준 년도 조회 + * + * @param req + * @return + */ + public List getHstMapSheetList(InferenceResultDto.RegReq req) { + return mapSheetMngRepository.findByHstMapSheetTargetList(req); } public List getHstMapSheetList(int mngYyyy, List mapIds) { return mapSheetMngRepository.findByHstMapSheetTargetList(mngYyyy, mapIds); } + /** + * 변화탐지 실행 가능 비교년도 조회 + * + * @param mngYyyy + * @param mapId + * @return + */ public List getByHstMapSheetCompareList(int mngYyyy, List mapId) { return mapSheetMngRepository.findByHstMapSheetCompareList(mngYyyy, mapId); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearn5kEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearn5kEntity.java index 8c44ef8a..56dc4d4e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearn5kEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearn5kEntity.java @@ -48,4 +48,10 @@ public class MapSheetLearn5kEntity { @Column(name = "created_uid") private Long createdUid; + + @Column(name = "befroe_year") + private Integer beforeYear; + + @Column(name = "is_success") + private Boolean isSuccess; } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java index 26fe8129..4606ba34 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java @@ -142,6 +142,9 @@ public class MapSheetLearnEntity { @Column(name = "m3_model_end_dttm") private ZonedDateTime m3ModelEndDttm; + @Column(name = "stage") + private Integer stage; + public InferenceResultDto.ResultList toDto() { return new InferenceResultDto.ResultList( this.uuid, diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java index 074a868f..3a5e4dd4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java @@ -25,4 +25,6 @@ public interface MapSheetLearnRepositoryCustom { InferenceStatusDetailDto getInferenceStatus(UUID uuid); UUID getProcessing(); + + Integer getLearnStage(Integer compareYear, Integer targetYear); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index 4b04fbcc..be97f06e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -239,4 +239,26 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto .where(mapSheetLearnEntity.status.eq("IN_PROGRESS")) .fetchOne(); } + + @Override + public Integer getLearnStage(Integer compareYear, Integer targetYear) { + MapSheetLearnEntity entity = new MapSheetLearnEntity(); + entity.setCompareYyyy(compareYear); + entity.setTargetYyyy(targetYear); + + Integer stage = + queryFactory + .select(mapSheetLearnEntity.stage) + .from(mapSheetLearnEntity) + .where( + mapSheetLearnEntity + .compareYyyy + .eq(compareYear) + .and(mapSheetLearnEntity.targetYyyy.eq(targetYear))) + .orderBy(mapSheetLearnEntity.stage.desc()) + .limit(1) + .fetchOne(); + + return stage == null ? 1 : stage + 1; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java index 669f81f0..3d30f371 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryCustom.java @@ -1,6 +1,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.mapsheet.dto.MapSheetMngDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListCompareDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListDto; @@ -61,7 +62,7 @@ public interface MapSheetMngRepositoryCustom { List findByHstUidMapSheetFileList(Long hstUid); - List findByHstMapSheetTargetList(int mngYyyy); + List findByHstMapSheetTargetList(InferenceResultDto.RegReq req); List findByHstMapSheetTargetList(int mngYyyy, List mapIds); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java index 3405e344..8f1a74f6 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java @@ -5,8 +5,11 @@ 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.QYearEntity.yearEntity; +import static com.querydsl.core.types.dsl.Expressions.nullExpression; 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.MapSheetScope; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListCompareDto; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListDto; @@ -478,23 +481,57 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport return foundContent; } + /** + * 기준년도 추론 실행 가능 도엽 조회 + * + * @param req + * @return + */ @Override - public List findByHstMapSheetTargetList(int mngYyyy) { + public List findByHstMapSheetTargetList(InferenceResultDto.RegReq req) { + BooleanBuilder whereBuilder = new BooleanBuilder(); + + whereBuilder.and(mapSheetMngHstEntity.dataState.eq("DONE")); + whereBuilder.and( + mapSheetMngHstEntity + .syncState + .eq("DONE") + .or(mapSheetMngHstEntity.syncCheckState.eq("DONE"))); + whereBuilder.and(mapSheetMngHstEntity.useInference.eq("USE")); + + whereBuilder.and(mapSheetMngHstEntity.mngYyyy.eq(req.getTargetYyyy())); + + BooleanBuilder likeBuilder = new BooleanBuilder(); + + if (MapSheetScope.PART.getId().equals(req.getMapSheetScope())) { + List list = req.getMapSheetNum(); + if (list == null || list.isEmpty()) { + return List.of(); + } + + for (String prefix : list) { + if (prefix == null || prefix.isBlank()) { + continue; + } + likeBuilder.or(mapSheetMngHstEntity.mapSheetNum.like(prefix.trim() + "%")); + } + } + + if (likeBuilder.hasValue()) { + whereBuilder.and(likeBuilder); + } + return queryFactory .select( Projections.constructor( MngListDto.class, mapSheetMngHstEntity.mngYyyy, mapSheetMngHstEntity.mapSheetNum, - mapSheetMngHstEntity.mapSheetName)) + mapSheetMngHstEntity.mapSheetName, + nullExpression(String.class), + nullExpression(Boolean.class))) .from(mapSheetMngHstEntity) - .where( - mapSheetMngHstEntity - .mngYyyy - .eq(mngYyyy) - .and(mapSheetMngHstEntity.dataState.eq("DONE")) - .and(mapSheetMngHstEntity.syncState.eq("DONE")) - .and(mapSheetMngHstEntity.useInference.eq("USE"))) + .where(whereBuilder) .fetch(); } @@ -519,6 +556,13 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport .fetch(); } + /** + * 변화탐지 실행 가능 비교년도 조회 + * + * @param mngYyyy + * @param mapIds + * @return + */ @Override public List findByHstMapSheetCompareList(int mngYyyy, List mapIds) { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java index 8abf7e6d..ee971c5c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java @@ -22,7 +22,4 @@ public interface MapInkx5kRepositoryCustom { Page getSceneListByPage( CommonUseStatus useInference, String searchVal, searchReq searchReq); - - List findByMapSheetNumInAndUseInference( - List mapSheetNums, CommonUseStatus use); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java index f7903d79..11d1badb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java @@ -129,19 +129,6 @@ public class MapInkx5kRepositoryImpl extends QuerydslRepositorySupport return new PageImpl<>(content, pageable, count); } - @Override - public List findByMapSheetNumInAndUseInference( - List mapSheetNums, CommonUseStatus use) { - if (mapSheetNums == null || mapSheetNums.isEmpty()) { - return List.of(); - } - - return queryFactory - .selectFrom(mapInkx5kEntity) - .where(mapInkx5kEntity.mapidcdNo.in(mapSheetNums), mapInkx5kEntity.useInference.eq(use)) - .fetch(); - } - private BooleanExpression searchUseInference(CommonUseStatus useInference) { if (Objects.isNull(useInference)) { return null; From 642a761a7a5f1dc6cd6b3b444760a153baae7569 Mon Sep 17 00:00:00 2001 From: DanielLee <198891672+sanghyeonhd@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:42:44 +0900 Subject: [PATCH 07/11] =?UTF-8?q?=EB=9D=BC=EB=B2=A8=EB=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=9D=B4=EB=A0=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../label/LabelAllocateRepositoryImpl.java | 185 +++++++++++++----- 1 file changed, 133 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java index 7d34b4de..685a8217 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java @@ -1466,13 +1466,6 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto NumberExpression totalCnt = labelingAssignmentEntity.assignmentUid.count(); - NumberExpression assignedCnt = - new CaseBuilder() - .when(labelingAssignmentEntity.workState.eq(LabelState.ASSIGNED.getId())) - .then(1L) - .otherwise((Long) null) - .count(); - NumberExpression skipCnt = new CaseBuilder() .when(labelingAssignmentEntity.workState.eq(LabelState.SKIP.getId())) @@ -1487,78 +1480,166 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto .otherwise((Long) null) .count(); - NumberExpression percent = - new CaseBuilder() - .when(completeCnt.eq(0L)) - .then(0.0) - .otherwise( - Expressions.numberTemplate( - Double.class, - "round({0} / {1}, 2)", - completeCnt, - labelingAssignmentEntity.count())); - Pageable pageable = searchReq.toPageable(); List list = queryFactory .select( - Projections.constructor( + Projections.bean( WorkHistoryDto.class, - Expressions.numberTemplate( - Integer.class, - "row_number() over(order by {0} desc)", - labelingAssignmentEntity.analUid), Expressions.stringTemplate( - "concat({0}, '-', {1})", - mapSheetAnalInferenceEntity.compareYyyy, - mapSheetAnalInferenceEntity.targetYyyy), - mapSheetAnalInferenceEntity.stage, - mapSheetAnalInferenceEntity.gukyuinApplyDttm, - assignedCnt, - completeCnt, - skipCnt, - skipCnt, - // status, - percent, - mapSheetAnalInferenceEntity.createdDttm, + "concat({0}, '-', {1})", + mapSheetAnalInferenceEntity.compareYyyy, + mapSheetAnalInferenceEntity.targetYyyy) + .as("changeDetectionYear"), + mapSheetAnalInferenceEntity.stage.longValue().as("stage"), + mapSheetAnalInferenceEntity.gukyuinApplyDttm.as("gukyuinApplyDttm"), + totalCnt.as("assignedCnt"), + completeCnt.as("completeCnt"), + skipCnt.as("skipCnt"), + mapSheetAnalInferenceEntity.createdDttm.as("createdDttm"), new CaseBuilder() .when(mapSheetAnalInferenceEntity.inspectionClosedYn.eq("Y")) .then(mapSheetAnalInferenceEntity.updatedDttm) - .otherwise((ZonedDateTime) null))) + .otherwise((ZonedDateTime) null) + .as("projectCloseDttm"))) .from(labelingAssignmentEntity) .innerJoin(mapSheetAnalInferenceEntity) .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) - .where( - labelingAssignmentEntity.analUid.in( - JPAExpressions.select(labelingAssignmentEntity.analUid) - .from(labelingAssignmentEntity) - .where(labelingAssignmentEntity.workerUid.eq(userId)) - .groupBy(labelingAssignmentEntity.analUid))) - .orderBy(percent.desc()) + .where(labelingAssignmentEntity.workerUid.eq(userId)) + .groupBy( + mapSheetAnalInferenceEntity.id, + mapSheetAnalInferenceEntity.compareYyyy, + mapSheetAnalInferenceEntity.targetYyyy, + mapSheetAnalInferenceEntity.stage, + mapSheetAnalInferenceEntity.gukyuinApplyDttm, + mapSheetAnalInferenceEntity.createdDttm, + mapSheetAnalInferenceEntity.inspectionClosedYn, + mapSheetAnalInferenceEntity.updatedDttm) + .orderBy(mapSheetAnalInferenceEntity.id.desc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); + // rowNum과 remainCnt, percent를 Java에서 계산 + int startRow = (int) pageable.getOffset() + 1; + for (int i = 0; i < list.size(); i++) { + WorkHistoryDto dto = list.get(i); + dto.setRowNum(startRow + i); + + // remainCnt 계산 + Long assigned = dto.getAssignedCnt() != null ? dto.getAssignedCnt() : 0L; + Long complete = dto.getCompleteCnt() != null ? dto.getCompleteCnt() : 0L; + Long skip = dto.getSkipCnt() != null ? dto.getSkipCnt() : 0L; + dto.setRemainCnt(assigned - complete - skip); + + // percent 계산 + if (assigned > 0) { + dto.setPercent(Math.round((double) complete / assigned * 100.0 * 100.0) / 100.0); + } else { + dto.setPercent(0.0); + } + } + Long countQuery = queryFactory - .select(mapSheetAnalInferenceEntity.id.count()) + .select(mapSheetAnalInferenceEntity.id.countDistinct()) .from(labelingAssignmentEntity) .innerJoin(mapSheetAnalInferenceEntity) .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) - .where( - labelingAssignmentEntity.analUid.in( - JPAExpressions.select(labelingAssignmentEntity.analUid) - .from(labelingAssignmentEntity) - .where(labelingAssignmentEntity.workerUid.eq(userId)) - .groupBy(labelingAssignmentEntity.analUid))) + .where(labelingAssignmentEntity.workerUid.eq(userId)) .fetchOne(); - return new PageImpl<>(list, pageable, countQuery); + return new PageImpl<>(list, pageable, countQuery != null ? countQuery : 0L); } @Override public Page workReviewerHistoryList(searchReq searchReq, String userId) { - return null; + NumberExpression totalCnt = labelingAssignmentEntity.assignmentUid.count(); + + NumberExpression skipCnt = + new CaseBuilder() + .when(labelingAssignmentEntity.inspectState.eq(InspectState.EXCEPT.getId())) + .then(1L) + .otherwise((Long) null) + .count(); + + NumberExpression completeCnt = + new CaseBuilder() + .when(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId())) + .then(1L) + .otherwise((Long) null) + .count(); + + Pageable pageable = searchReq.toPageable(); + List list = + queryFactory + .select( + Projections.bean( + WorkHistoryDto.class, + Expressions.stringTemplate( + "concat({0}, '-', {1})", + mapSheetAnalInferenceEntity.compareYyyy, + mapSheetAnalInferenceEntity.targetYyyy) + .as("changeDetectionYear"), + mapSheetAnalInferenceEntity.stage.longValue().as("stage"), + mapSheetAnalInferenceEntity.gukyuinApplyDttm.as("gukyuinApplyDttm"), + totalCnt.as("assignedCnt"), + completeCnt.as("completeCnt"), + skipCnt.as("skipCnt"), + mapSheetAnalInferenceEntity.createdDttm.as("createdDttm"), + new CaseBuilder() + .when(mapSheetAnalInferenceEntity.inspectionClosedYn.eq("Y")) + .then(mapSheetAnalInferenceEntity.updatedDttm) + .otherwise((ZonedDateTime) null) + .as("projectCloseDttm"))) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalInferenceEntity) + .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) + .where(labelingAssignmentEntity.inspectorUid.eq(userId)) + .groupBy( + mapSheetAnalInferenceEntity.id, + mapSheetAnalInferenceEntity.compareYyyy, + mapSheetAnalInferenceEntity.targetYyyy, + mapSheetAnalInferenceEntity.stage, + mapSheetAnalInferenceEntity.gukyuinApplyDttm, + mapSheetAnalInferenceEntity.createdDttm, + mapSheetAnalInferenceEntity.inspectionClosedYn, + mapSheetAnalInferenceEntity.updatedDttm) + .orderBy(mapSheetAnalInferenceEntity.id.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + + // rowNum과 remainCnt, percent를 Java에서 계산 + int startRow = (int) pageable.getOffset() + 1; + for (int i = 0; i < list.size(); i++) { + WorkHistoryDto dto = list.get(i); + dto.setRowNum(startRow + i); + + // remainCnt 계산 + Long assigned = dto.getAssignedCnt() != null ? dto.getAssignedCnt() : 0L; + Long complete = dto.getCompleteCnt() != null ? dto.getCompleteCnt() : 0L; + Long skip = dto.getSkipCnt() != null ? dto.getSkipCnt() : 0L; + dto.setRemainCnt(assigned - complete - skip); + + // percent 계산 + if (assigned > 0) { + dto.setPercent(Math.round((double) complete / assigned * 100.0 * 100.0) / 100.0); + } else { + dto.setPercent(0.0); + } + } + + Long countQuery = + queryFactory + .select(mapSheetAnalInferenceEntity.id.countDistinct()) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalInferenceEntity) + .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) + .where(labelingAssignmentEntity.inspectorUid.eq(userId)) + .fetchOne(); + + return new PageImpl<>(list, pageable, countQuery != null ? countQuery : 0L); } } From 326591c4bd336c2e75b25c82240c1d03594914b2 Mon Sep 17 00:00:00 2001 From: teddy Date: Wed, 14 Jan 2026 14:49:13 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[KC-103]=20entity=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../postgres/entity/MapSheetLearnEntity.java | 75 ++++++++++++++----- 1 file changed, 58 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java index 4606ba34..c21cf6e8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java @@ -106,15 +106,6 @@ public class MapSheetLearnEntity { @Column(name = "running_model_type") private String runningModelType; - @Column(name = "m1_model_batch_id") - private Long m1ModelBatchId; - - @Column(name = "m2_model_batch_id") - private Long m2ModelBatchId; - - @Column(name = "m3_model_batch_id") - private Long m3ModelBatchId; - @Column(name = "detect_end_cnt") private Long detectEndCnt; @@ -124,26 +115,76 @@ public class MapSheetLearnEntity { @Column(name = "model_target_path") private String modelTargetPath; + @Column(name = "stage") + private Integer stage; + + /* ===================== M1 ===================== */ + + @Column(name = "m1_model_batch_id") + private Long m1ModelBatchId; + @Column(name = "m1_model_start_dttm") private ZonedDateTime m1ModelStartDttm; - @Column(name = "m2_model_start_dttm") - private ZonedDateTime m2ModelStartDttm; - - @Column(name = "m3_model_start_dttm") - private ZonedDateTime m3ModelStartDttm; - @Column(name = "m1_model_end_dttm") private ZonedDateTime m1ModelEndDttm; + @Column(name = "m1_pending_jobs", nullable = false) + private int m1PendingJobs = 0; + + @Column(name = "m1_running_jobs", nullable = false) + private int m1RunningJobs = 0; + + @Column(name = "m1_completed_jobs", nullable = false) + private int m1CompletedJobs = 0; + + @Column(name = "m1_failed_jobs", nullable = false) + private int m1FailedJobs = 0; + + /* ===================== M2 ===================== */ + + @Column(name = "m2_model_batch_id") + private Long m2ModelBatchId; + + @Column(name = "m2_model_start_dttm") + private ZonedDateTime m2ModelStartDttm; + @Column(name = "m2_model_end_dttm") private ZonedDateTime m2ModelEndDttm; + @Column(name = "m2_pending_jobs", nullable = false) + private int m2PendingJobs = 0; + + @Column(name = "m2_running_jobs", nullable = false) + private int m2RunningJobs = 0; + + @Column(name = "m2_completed_jobs", nullable = false) + private int m2CompletedJobs = 0; + + @Column(name = "m2_failed_jobs", nullable = false) + private int m2FailedJobs = 0; + + /* ===================== M3 ===================== */ + @Column(name = "m3_model_batch_id") + private Long m3ModelBatchId; + + @Column(name = "m3_model_start_dttm") + private ZonedDateTime m3ModelStartDttm; + @Column(name = "m3_model_end_dttm") private ZonedDateTime m3ModelEndDttm; - @Column(name = "stage") - private Integer stage; + @Column(name = "m3_pending_jobs", nullable = false) + private int m3PendingJobs = 0; + + @Column(name = "m3_running_jobs", nullable = false) + private int m3RunningJobs = 0; + + @Column(name = "m3_completed_jobs", nullable = false) + private int m3CompletedJobs = 0; + + @Column(name = "m3_failed_jobs", nullable = false) + private int m3FailedJobs = 0; public InferenceResultDto.ResultList toDto() { return new InferenceResultDto.ResultList( From 5599889ac04ec48899ae4c650006044302040a00 Mon Sep 17 00:00:00 2001 From: DanielLee <198891672+sanghyeonhd@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:01:38 +0900 Subject: [PATCH 09/11] =?UTF-8?q?=EB=9D=BC=EB=B2=A8=EB=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=9D=B4=EB=A0=A5=20=EC=88=98=EC=A0=95,=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kamcoback/label/dto/LabelAllocateDto.java | 25 +++++++++++- .../label/LabelAllocateRepositoryImpl.java | 38 +++++++++++++++++-- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java index be15d446..9f0663e8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/label/dto/LabelAllocateDto.java @@ -322,17 +322,40 @@ public class LabelAllocateDto { @AllArgsConstructor public static class WorkHistoryDto { + @Schema(description = "행 번호") private Integer rowNum; + + @Schema(description = "변화탐지년도", example = "2021-2022") private String changeDetectionYear; + + @Schema(description = "국유IN 회차") private Long stage; + + @Schema(description = "반영일") private ZonedDateTime gukyuinApplyDttm; + + @Schema(description = "할당건수") private Long assignedCnt; + + @Schema(description = "완료건수") private Long completeCnt; + + @Schema(description = "Skip건수") private Long skipCnt; + + @Schema(description = "잔여건수") private Long remainCnt; - // private String status; + + @Schema(description = "상태 (진행중/완료)") + private String status; + + @Schema(description = "진행률 (%)") private Double percent; + + @Schema(description = "작업기간 시작일") private ZonedDateTime createdDttm; + + @Schema(description = "작업기간 종료일") private ZonedDateTime projectCloseDttm; } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java index 685a8217..358e9f4f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java @@ -1515,12 +1515,20 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto mapSheetAnalInferenceEntity.createdDttm, mapSheetAnalInferenceEntity.inspectionClosedYn, mapSheetAnalInferenceEntity.updatedDttm) - .orderBy(mapSheetAnalInferenceEntity.id.desc()) + .orderBy( + // 진행중인 작업이 최상단 (remainCnt > 0) + new CaseBuilder() + .when(totalCnt.subtract(completeCnt).subtract(skipCnt).gt(0L)) + .then(0) + .otherwise(1) + .asc(), + // 최신 작업순 (반영일 기준) + mapSheetAnalInferenceEntity.gukyuinApplyDttm.desc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); - // rowNum과 remainCnt, percent를 Java에서 계산 + // rowNum, remainCnt, percent, status를 Java에서 계산 int startRow = (int) pageable.getOffset() + 1; for (int i = 0; i < list.size(); i++) { WorkHistoryDto dto = list.get(i); @@ -1538,6 +1546,13 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto } else { dto.setPercent(0.0); } + + // status 계산 (잔여건수가 0이고 진행률이 100%면 "완료", 아니면 "진행중") + if (dto.getRemainCnt() == 0 && dto.getPercent() >= 100.0) { + dto.setStatus("완료"); + } else { + dto.setStatus("진행중"); + } } Long countQuery = @@ -1606,12 +1621,20 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto mapSheetAnalInferenceEntity.createdDttm, mapSheetAnalInferenceEntity.inspectionClosedYn, mapSheetAnalInferenceEntity.updatedDttm) - .orderBy(mapSheetAnalInferenceEntity.id.desc()) + .orderBy( + // 진행중인 작업이 최상단 (remainCnt > 0) + new CaseBuilder() + .when(totalCnt.subtract(completeCnt).subtract(skipCnt).gt(0L)) + .then(0) + .otherwise(1) + .asc(), + // 최신 작업순 (반영일 기준) + mapSheetAnalInferenceEntity.gukyuinApplyDttm.desc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); - // rowNum과 remainCnt, percent를 Java에서 계산 + // rowNum, remainCnt, percent, status를 Java에서 계산 int startRow = (int) pageable.getOffset() + 1; for (int i = 0; i < list.size(); i++) { WorkHistoryDto dto = list.get(i); @@ -1629,6 +1652,13 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto } else { dto.setPercent(0.0); } + + // status 계산 (잔여건수가 0이고 진행률이 100%면 "완료", 아니면 "진행중") + if (dto.getRemainCnt() == 0 && dto.getPercent() >= 100.0) { + dto.setStatus("완료"); + } else { + dto.setStatus("진행중"); + } } Long countQuery = From af428423c912e7b8aa87c420a342649d0dde5698 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 14 Jan 2026 15:14:36 +0900 Subject: [PATCH 10/11] =?UTF-8?q?=EC=B6=94=EB=A1=A0=EA=B2=B0=EA=B3=BC=20>?= =?UTF-8?q?=20=EA=B8=B0=EB=B3=B8=EC=A0=95=EB=B3=B4=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InferenceResultApiController.java | 22 ++ .../inference/dto/InferenceDetailDto.java | 177 +++++++---- .../service/InferenceResultService.java | 5 + .../core/InferenceResultCoreService.java | 5 + .../MapSheetLearnRepositoryCustom.java | 3 + .../MapSheetLearnRepositoryImpl.java | 289 ++++++++++-------- 6 files changed, 314 insertions(+), 187 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java index 9f339b70..99fe158d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -1,6 +1,7 @@ package com.kamco.cd.kamcoback.inference; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; @@ -285,4 +286,25 @@ public class InferenceResultApiController { return ApiResponseDto.ok(inferenceResultService.getInferenceStatus(uuid)); } + + @Operation(summary = "추론결과 기본정보", description = "추론결과 기본정보") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = InferenceDetailDto.AnalResSummary.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/infer-result-info") + public ApiResponseDto getInferenceResultInfo( + @Parameter(description = "회차 uuid", example = "932fbd72-2e8e-4a49-b189-09046787f9d1") + @RequestParam + String uuid) { + return ApiResponseDto.ok(inferenceResultService.getInferenceResultInfo(uuid)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java index 31fedefb..fcffc19c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.common.enums.DetectionClassification; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.Duration; import java.time.ZonedDateTime; import java.util.List; import java.util.UUID; @@ -29,20 +30,22 @@ public class InferenceDetailDto { private String dataName; private Long mapSheepNum; private Long detectingCnt; - @JsonFormatDttm private ZonedDateTime analStrtDttm; - @JsonFormatDttm private ZonedDateTime analEndDttm; + @JsonFormatDttm + private ZonedDateTime analStrtDttm; + @JsonFormatDttm + private ZonedDateTime analEndDttm; private Long analSec; private String analState; public Basic( - Long id, - String dataName, - Long mapSheepNum, - Long detectingCnt, - ZonedDateTime analStrtDttm, - ZonedDateTime analEndDttm, - Long analSec, - String analState) { + Long id, + String dataName, + Long mapSheepNum, + Long detectingCnt, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + String analState) { this.id = id; this.dataName = dataName; this.mapSheepNum = mapSheepNum; @@ -61,8 +64,10 @@ public class InferenceDetailDto { private Long id; private String analTitle; private Long detectingCnt; - @JsonFormatDttm private ZonedDateTime analStrtDttm; - @JsonFormatDttm private ZonedDateTime analEndDttm; + @JsonFormatDttm + private ZonedDateTime analStrtDttm; + @JsonFormatDttm + private ZonedDateTime analEndDttm; private Long analSec; private Long analPredSec; private String analState; @@ -70,16 +75,16 @@ public class InferenceDetailDto { private String gukyuinUsed; public AnalResList( - Long id, - String analTitle, - Long detectingCnt, - ZonedDateTime analStrtDttm, - ZonedDateTime analEndDttm, - Long analSec, - Long analPredSec, - String analState, - String analStateNm, - String gukyuinUsed) { + Long id, + String analTitle, + Long detectingCnt, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + Long analPredSec, + String analState, + String analStateNm, + String gukyuinUsed) { this.id = id; this.analTitle = analTitle; this.detectingCnt = detectingCnt; @@ -102,8 +107,10 @@ public class InferenceDetailDto { private String modelInfo; private Integer targetYyyy; private Integer compareYyyy; - @JsonFormatDttm private ZonedDateTime analStrtDttm; - @JsonFormatDttm private ZonedDateTime analEndDttm; + @JsonFormatDttm + private ZonedDateTime analStrtDttm; + @JsonFormatDttm + private ZonedDateTime analEndDttm; private Long analSec; private Long analPredSec; private String resultUrl; @@ -113,20 +120,20 @@ public class InferenceDetailDto { private String analStateNm; public AnalResSummary( - Long id, - String analTitle, - String modelInfo, - Integer targetYyyy, - Integer compareYyyy, - ZonedDateTime analStrtDttm, - ZonedDateTime analEndDttm, - Long analSec, - Long analPredSec, - String resultUrl, - Long detectingCnt, - Double accuracy, - String analState, - String analStateNm) { + Long id, + String analTitle, + String modelInfo, + Integer targetYyyy, + Integer compareYyyy, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + Long analPredSec, + String resultUrl, + Long detectingCnt, + Double accuracy, + String analState, + String analStateNm) { this.id = id; this.analTitle = analTitle; this.modelInfo = modelInfo; @@ -183,16 +190,17 @@ public class InferenceDetailDto { private Clazzes target; private MapSheet mapSheet; private Coordinate center; - @JsonFormatDttm private ZonedDateTime updatedDttm; + @JsonFormatDttm + private ZonedDateTime updatedDttm; public DetailListEntity( - UUID uuid, - Double detectionScore, - Clazzes compare, - Clazzes target, - MapSheet mapSheet, - Coordinate center, - ZonedDateTime updatedDttm) { + UUID uuid, + Double detectionScore, + Clazzes compare, + Clazzes target, + MapSheet mapSheet, + Coordinate center, + ZonedDateTime updatedDttm) { this.code = new Uid(uuid); this.detectionScore = detectionScore; this.compare = compare; @@ -233,7 +241,8 @@ public class InferenceDetailDto { private String code; private String name; - @JsonIgnore private Double score; + @JsonIgnore + private Double score; public Clazz(String code, Double score) { this.code = code; @@ -300,21 +309,23 @@ public class InferenceDetailDto { String classAfterName; Double classAfterProb; Long mapSheetNum; - @JsonIgnore String gemoStr; - @JsonIgnore String geomCenterStr; + @JsonIgnore + String gemoStr; + @JsonIgnore + String geomCenterStr; JsonNode gemo; JsonNode geomCenter; public Geom( - Integer compareYyyy, - Integer targetYyyy, - String classBeforeCd, - Double classBeforeProb, - String classAfterCd, - Double classAfterProb, - Long mapSheetNum, - String gemoStr, - String geomCenterStr) { + Integer compareYyyy, + Integer targetYyyy, + String classBeforeCd, + Double classBeforeProb, + String classAfterCd, + Double classAfterProb, + Long mapSheetNum, + String gemoStr, + String geomCenterStr) { this.compareYyyy = compareYyyy; this.targetYyyy = targetYyyy; this.classBeforeCd = classBeforeCd; @@ -385,7 +396,7 @@ public class InferenceDetailDto { String[] sortParams = sort.split(","); String property = sortParams[0]; Sort.Direction direction = - sortParams.length > 1 ? Sort.Direction.fromString(sortParams[1]) : Sort.Direction.ASC; + sortParams.length > 1 ? Sort.Direction.fromString(sortParams[1]) : Sort.Direction.ASC; return PageRequest.of(page, size, Sort.by(direction, property)); } return PageRequest.of(page, size); @@ -409,4 +420,52 @@ public class InferenceDetailDto { private UUID m2ModelUuid; private UUID m3ModelUuid; } + + @Schema(name = "AnalResultInfo", description = "추론결과 기본정보") + @Getter + @AllArgsConstructor + @NoArgsConstructor + public static class AnalResultInfo { + + private String analTitle; + private String modelVer1; + private String modelVer2; + private String modelVer3; + private Integer compareYyyy; + private Integer targetYyyy; + private String detectOption; + private String mapSheetScope; + @JsonFormatDttm + private ZonedDateTime inferStartDttm; + @JsonFormatDttm + private ZonedDateTime inferEndDttm; + + private Duration elapsedDuration; + + public AnalResultInfo(String analTitle, + String modelVer1, + String modelVer2, + String modelVer3, + Integer compareYyyy, + Integer targetYyyy, + String detectOption, + String mapSheetScope, + ZonedDateTime inferStartDttm, + ZonedDateTime inferEndDttm + ) { + this.analTitle = analTitle; + this.modelVer1 = modelVer1; + this.modelVer2 = modelVer2; + this.modelVer3 = modelVer3; + this.compareYyyy = compareYyyy; + this.targetYyyy = targetYyyy; + this.detectOption = detectOption; + this.mapSheetScope = mapSheetScope; + this.inferStartDttm = inferStartDttm; + this.inferEndDttm = inferEndDttm; + this.elapsedDuration = (inferStartDttm != null && inferEndDttm != null) + ? Duration.between(inferStartDttm, inferEndDttm) + : null; + } + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index 617b8bbc..19ba493c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -7,6 +7,7 @@ import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient; import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.AnalResultInfo; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Detail; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; @@ -480,4 +481,8 @@ public class InferenceResultService { return dto; } + + public AnalResultInfo getInferenceResultInfo(String uuid) { + return inferenceResultCoreService.getInferenceResultInfo(uuid); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index a7347cdd..1f1489ba 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.postgres.core; import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.common.utils.UserUtil; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.AnalResultInfo; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.InferenceBatchSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; @@ -370,4 +371,8 @@ public class InferenceResultCoreService { public Integer getLearnStage(Integer compareYear, Integer targetYear) { return mapSheetLearnRepository.getLearnStage(compareYear, targetYear); } + + public AnalResultInfo getInferenceResultInfo(String uuid) { + return mapSheetLearnRepository.getInferenceResultInfo(uuid); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java index 3a5e4dd4..5e8ec142 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.AnalResultInfo; import com.kamco.cd.kamcoback.inference.dto.InferenceProgressDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; @@ -27,4 +28,6 @@ public interface MapSheetLearnRepositoryCustom { UUID getProcessing(); Integer getLearnStage(Integer compareYear, Integer targetYear); + + AnalResultInfo getInferenceResultInfo(String uuid); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index be97f06e..29945e13 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -5,6 +5,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapShe import static com.kamco.cd.kamcoback.postgres.entity.QSystemMetricEntity.systemMetricEntity; import com.kamco.cd.kamcoback.common.utils.DateRange; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.AnalResultInfo; import com.kamco.cd.kamcoback.inference.dto.InferenceProgressDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; @@ -40,7 +41,7 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto BooleanBuilder builder = new BooleanBuilder(); NumberExpression statusOrder = - new CaseBuilder().when(mapSheetLearnEntity.status.eq("Y")).then(0).otherwise(1); + new CaseBuilder().when(mapSheetLearnEntity.status.eq("Y")).then(0).otherwise(1); // 국유인 반영 여부 if (StringUtils.isNotBlank(req.getApplyYn())) { @@ -54,10 +55,10 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto // 국유인 반영일 if (req.getStrtDttm() != null && req.getEndDttm() != null) { builder.and( - mapSheetLearnEntity - .applyDttm - .goe(DateRange.start(req.getStrtDttm())) - .and(mapSheetLearnEntity.applyDttm.lt(DateRange.end(req.getEndDttm())))); + mapSheetLearnEntity + .applyDttm + .goe(DateRange.start(req.getStrtDttm())) + .and(mapSheetLearnEntity.applyDttm.lt(DateRange.end(req.getEndDttm())))); } // 제목 @@ -66,21 +67,21 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto } List content = - queryFactory - .select(mapSheetLearnEntity) - .from(mapSheetLearnEntity) - .where(builder) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(mapSheetLearnEntity.id.desc()) - .fetch(); + queryFactory + .select(mapSheetLearnEntity) + .from(mapSheetLearnEntity) + .where(builder) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(mapSheetLearnEntity.id.desc()) + .fetch(); Long total = - queryFactory - .select(mapSheetLearnEntity.count()) - .from(mapSheetLearnEntity) - .where(builder) - .fetchOne(); + queryFactory + .select(mapSheetLearnEntity.count()) + .from(mapSheetLearnEntity) + .where(builder) + .fetchOne(); return new PageImpl<>(content, pageable, total == null ? 0L : total); } @@ -88,10 +89,10 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto @Override public Optional getInferenceResultByUuid(UUID uuid) { return Optional.ofNullable( - queryFactory - .selectFrom(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne()); + queryFactory + .selectFrom(mapSheetLearnEntity) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne()); } @Override @@ -100,41 +101,41 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto BooleanBuilder builder = new BooleanBuilder(); List latestIds = - queryFactory - .select(systemMetricEntity.id1.max()) - .from(systemMetricEntity) - .groupBy(systemMetricEntity.serverName) - .fetch(); + queryFactory + .select(systemMetricEntity.id1.max()) + .from(systemMetricEntity) + .groupBy(systemMetricEntity.serverName) + .fetch(); List latestGpuIds = - queryFactory - .select(gpuMetricEntity.id1.max()) - .from(gpuMetricEntity) - .groupBy(gpuMetricEntity.serverName) - .fetch(); + queryFactory + .select(gpuMetricEntity.id1.max()) + .from(gpuMetricEntity) + .groupBy(gpuMetricEntity.serverName) + .fetch(); List foundContent = - queryFactory - .select( - Projections.constructor( - InferenceServerStatusDto.class, - systemMetricEntity.serverName, - systemMetricEntity.cpuUser, - systemMetricEntity.cpuSystem, - systemMetricEntity.memused, - systemMetricEntity.kbmemused, - gpuMetricEntity.gpuUtil)) - .from(systemMetricEntity) - .leftJoin(gpuMetricEntity) - .on( - gpuMetricEntity - .id1 - .in(latestGpuIds) - .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) - .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 - .orderBy(systemMetricEntity.serverName.asc()) - .limit(4) - .fetch(); + queryFactory + .select( + Projections.constructor( + InferenceServerStatusDto.class, + systemMetricEntity.serverName, + systemMetricEntity.cpuUser, + systemMetricEntity.cpuSystem, + systemMetricEntity.memused, + systemMetricEntity.kbmemused, + gpuMetricEntity.gpuUtil)) + .from(systemMetricEntity) + .leftJoin(gpuMetricEntity) + .on( + gpuMetricEntity + .id1 + .in(latestGpuIds) + .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) + .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 + .orderBy(systemMetricEntity.serverName.asc()) + .limit(4) + .fetch(); return foundContent; } @@ -142,11 +143,11 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto @Override public Optional getInferenceResultByStatus(String status) { return Optional.ofNullable( - queryFactory - .selectFrom(mapSheetLearnEntity) - .where(mapSheetLearnEntity.status.eq(status)) - .limit(1) - .fetchOne()); + queryFactory + .selectFrom(mapSheetLearnEntity) + .where(mapSheetLearnEntity.status.eq(status)) + .limit(1) + .fetchOne()); } @Override @@ -159,37 +160,37 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto QModelMngEntity m3Model = new QModelMngEntity("m3Model"); InferenceStatusDetailDto foundContent = - queryFactory - .select( - Projections.constructor( - InferenceStatusDetailDto.class, - mapSheetLearnEntity.title, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.detectOption, - mapSheetLearnEntity.mapSheetScope, - mapSheetLearnEntity.inferStartDttm, - mapSheetLearnEntity.inferEndDttm, - mapSheetLearnEntity.detectingCnt, - mapSheetLearnEntity.detectEndCnt, - mapSheetLearnEntity.m1ModelStartDttm, - mapSheetLearnEntity.m1ModelEndDttm, - mapSheetLearnEntity.m2ModelStartDttm, - mapSheetLearnEntity.m2ModelEndDttm, - mapSheetLearnEntity.m3ModelStartDttm, - mapSheetLearnEntity.m3ModelEndDttm, - m1Model.modelVer.as("model1Ver"), - m2Model.modelVer.as("model2Ver"), - m3Model.modelVer.as("model3Ver"))) - .from(mapSheetLearnEntity) - .leftJoin(m1Model) - .on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) - .leftJoin(m2Model) - .on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) - .leftJoin(m3Model) - .on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne(); + queryFactory + .select( + Projections.constructor( + InferenceStatusDetailDto.class, + mapSheetLearnEntity.title, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.inferStartDttm, + mapSheetLearnEntity.inferEndDttm, + mapSheetLearnEntity.detectingCnt, + mapSheetLearnEntity.detectEndCnt, + mapSheetLearnEntity.m1ModelStartDttm, + mapSheetLearnEntity.m1ModelEndDttm, + mapSheetLearnEntity.m2ModelStartDttm, + mapSheetLearnEntity.m2ModelEndDttm, + mapSheetLearnEntity.m3ModelStartDttm, + mapSheetLearnEntity.m3ModelEndDttm, + m1Model.modelVer.as("model1Ver"), + m2Model.modelVer.as("model2Ver"), + m3Model.modelVer.as("model3Ver"))) + .from(mapSheetLearnEntity) + .leftJoin(m1Model) + .on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) + .leftJoin(m2Model) + .on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) + .leftJoin(m3Model) + .on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne(); return foundContent; } @@ -200,30 +201,30 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto QModelMngEntity model = new QModelMngEntity("model"); InferenceProgressDto dto = - queryFactory - .select( - Projections.constructor( - InferenceProgressDto.class, - Projections.constructor( - InferenceProgressDto.pred_requests_areas.class, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.modelComparePath, - mapSheetLearnEntity.modelTargetPath), - model.modelVer.as("modelVer"), - model.cdModelPath.as("cdModelPath"), - model.cdModelFileName.as("cdModelFileName"), - model.cdModelConfigPath.as("cdModelConfigPath"), - model.cdModelConfigFileName.as("cdModelConfigFileName"), - model.clsModelPath, - model.clsModelFileName, - model.clsModelVersion, - model.priority)) - .from(mapSheetLearnEntity) - .join(model) - .on(model.uuid.eq(modelUuid)) - .where(mapSheetLearnEntity.id.eq(id)) - .fetchOne(); + queryFactory + .select( + Projections.constructor( + InferenceProgressDto.class, + Projections.constructor( + InferenceProgressDto.pred_requests_areas.class, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.modelComparePath, + mapSheetLearnEntity.modelTargetPath), + model.modelVer.as("modelVer"), + model.cdModelPath.as("cdModelPath"), + model.cdModelFileName.as("cdModelFileName"), + model.cdModelConfigPath.as("cdModelConfigPath"), + model.cdModelConfigFileName.as("cdModelConfigFileName"), + model.clsModelPath, + model.clsModelFileName, + model.clsModelVersion, + model.priority)) + .from(mapSheetLearnEntity) + .join(model) + .on(model.uuid.eq(modelUuid)) + .where(mapSheetLearnEntity.id.eq(id)) + .fetchOne(); return dto; } @@ -234,10 +235,10 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto */ public UUID getProcessing() { return queryFactory - .select(mapSheetLearnEntity.uuid) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.status.eq("IN_PROGRESS")) - .fetchOne(); + .select(mapSheetLearnEntity.uuid) + .from(mapSheetLearnEntity) + .where(mapSheetLearnEntity.status.eq("IN_PROGRESS")) + .fetchOne(); } @Override @@ -247,18 +248,50 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto entity.setTargetYyyy(targetYear); Integer stage = - queryFactory - .select(mapSheetLearnEntity.stage) - .from(mapSheetLearnEntity) - .where( - mapSheetLearnEntity - .compareYyyy - .eq(compareYear) - .and(mapSheetLearnEntity.targetYyyy.eq(targetYear))) - .orderBy(mapSheetLearnEntity.stage.desc()) - .limit(1) - .fetchOne(); + queryFactory + .select(mapSheetLearnEntity.stage) + .from(mapSheetLearnEntity) + .where( + mapSheetLearnEntity + .compareYyyy + .eq(compareYear) + .and(mapSheetLearnEntity.targetYyyy.eq(targetYear))) + .orderBy(mapSheetLearnEntity.stage.desc()) + .limit(1) + .fetchOne(); return stage == null ? 1 : stage + 1; } + + @Override + public AnalResultInfo getInferenceResultInfo(String uuid) { + QModelMngEntity m1 = new QModelMngEntity("m1"); + QModelMngEntity m2 = new QModelMngEntity("m2"); + QModelMngEntity m3 = new QModelMngEntity("m3"); + + return queryFactory + .select( + Projections.constructor( + AnalResultInfo.class, + mapSheetLearnEntity.title, + m1.modelVer, + m2.modelVer, + m3.modelVer, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.inferStartDttm, + mapSheetLearnEntity.inferEndDttm + ) + ) + .from(mapSheetLearnEntity) + .leftJoin(m1) + .on(mapSheetLearnEntity.m1ModelUuid.eq(m1.uuid)) + .leftJoin(m2) + .on(mapSheetLearnEntity.m2ModelUuid.eq(m2.uuid)) + .leftJoin(m3) + .on(mapSheetLearnEntity.m3ModelUuid.eq(m3.uuid)) + .where(mapSheetLearnEntity.uuid.eq(UUID.fromString(uuid))).fetchOne(); + } } From 50b8585c76c21b3a5bf3b35e46fa4a5e6737024d Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 14 Jan 2026 15:15:11 +0900 Subject: [PATCH 11/11] spotless --- .../inference/dto/InferenceDetailDto.java | 163 +++++----- .../MapSheetLearnRepositoryImpl.java | 301 +++++++++--------- .../label/LabelAllocateRepositoryImpl.java | 1 - 3 files changed, 226 insertions(+), 239 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java index fcffc19c..88a844de 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java @@ -30,22 +30,20 @@ public class InferenceDetailDto { private String dataName; private Long mapSheepNum; private Long detectingCnt; - @JsonFormatDttm - private ZonedDateTime analStrtDttm; - @JsonFormatDttm - private ZonedDateTime analEndDttm; + @JsonFormatDttm private ZonedDateTime analStrtDttm; + @JsonFormatDttm private ZonedDateTime analEndDttm; private Long analSec; private String analState; public Basic( - Long id, - String dataName, - Long mapSheepNum, - Long detectingCnt, - ZonedDateTime analStrtDttm, - ZonedDateTime analEndDttm, - Long analSec, - String analState) { + Long id, + String dataName, + Long mapSheepNum, + Long detectingCnt, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + String analState) { this.id = id; this.dataName = dataName; this.mapSheepNum = mapSheepNum; @@ -64,10 +62,8 @@ public class InferenceDetailDto { private Long id; private String analTitle; private Long detectingCnt; - @JsonFormatDttm - private ZonedDateTime analStrtDttm; - @JsonFormatDttm - private ZonedDateTime analEndDttm; + @JsonFormatDttm private ZonedDateTime analStrtDttm; + @JsonFormatDttm private ZonedDateTime analEndDttm; private Long analSec; private Long analPredSec; private String analState; @@ -75,16 +71,16 @@ public class InferenceDetailDto { private String gukyuinUsed; public AnalResList( - Long id, - String analTitle, - Long detectingCnt, - ZonedDateTime analStrtDttm, - ZonedDateTime analEndDttm, - Long analSec, - Long analPredSec, - String analState, - String analStateNm, - String gukyuinUsed) { + Long id, + String analTitle, + Long detectingCnt, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + Long analPredSec, + String analState, + String analStateNm, + String gukyuinUsed) { this.id = id; this.analTitle = analTitle; this.detectingCnt = detectingCnt; @@ -107,10 +103,8 @@ public class InferenceDetailDto { private String modelInfo; private Integer targetYyyy; private Integer compareYyyy; - @JsonFormatDttm - private ZonedDateTime analStrtDttm; - @JsonFormatDttm - private ZonedDateTime analEndDttm; + @JsonFormatDttm private ZonedDateTime analStrtDttm; + @JsonFormatDttm private ZonedDateTime analEndDttm; private Long analSec; private Long analPredSec; private String resultUrl; @@ -120,20 +114,20 @@ public class InferenceDetailDto { private String analStateNm; public AnalResSummary( - Long id, - String analTitle, - String modelInfo, - Integer targetYyyy, - Integer compareYyyy, - ZonedDateTime analStrtDttm, - ZonedDateTime analEndDttm, - Long analSec, - Long analPredSec, - String resultUrl, - Long detectingCnt, - Double accuracy, - String analState, - String analStateNm) { + Long id, + String analTitle, + String modelInfo, + Integer targetYyyy, + Integer compareYyyy, + ZonedDateTime analStrtDttm, + ZonedDateTime analEndDttm, + Long analSec, + Long analPredSec, + String resultUrl, + Long detectingCnt, + Double accuracy, + String analState, + String analStateNm) { this.id = id; this.analTitle = analTitle; this.modelInfo = modelInfo; @@ -190,17 +184,16 @@ public class InferenceDetailDto { private Clazzes target; private MapSheet mapSheet; private Coordinate center; - @JsonFormatDttm - private ZonedDateTime updatedDttm; + @JsonFormatDttm private ZonedDateTime updatedDttm; public DetailListEntity( - UUID uuid, - Double detectionScore, - Clazzes compare, - Clazzes target, - MapSheet mapSheet, - Coordinate center, - ZonedDateTime updatedDttm) { + UUID uuid, + Double detectionScore, + Clazzes compare, + Clazzes target, + MapSheet mapSheet, + Coordinate center, + ZonedDateTime updatedDttm) { this.code = new Uid(uuid); this.detectionScore = detectionScore; this.compare = compare; @@ -241,8 +234,7 @@ public class InferenceDetailDto { private String code; private String name; - @JsonIgnore - private Double score; + @JsonIgnore private Double score; public Clazz(String code, Double score) { this.code = code; @@ -309,23 +301,21 @@ public class InferenceDetailDto { String classAfterName; Double classAfterProb; Long mapSheetNum; - @JsonIgnore - String gemoStr; - @JsonIgnore - String geomCenterStr; + @JsonIgnore String gemoStr; + @JsonIgnore String geomCenterStr; JsonNode gemo; JsonNode geomCenter; public Geom( - Integer compareYyyy, - Integer targetYyyy, - String classBeforeCd, - Double classBeforeProb, - String classAfterCd, - Double classAfterProb, - Long mapSheetNum, - String gemoStr, - String geomCenterStr) { + Integer compareYyyy, + Integer targetYyyy, + String classBeforeCd, + Double classBeforeProb, + String classAfterCd, + Double classAfterProb, + Long mapSheetNum, + String gemoStr, + String geomCenterStr) { this.compareYyyy = compareYyyy; this.targetYyyy = targetYyyy; this.classBeforeCd = classBeforeCd; @@ -396,7 +386,7 @@ public class InferenceDetailDto { String[] sortParams = sort.split(","); String property = sortParams[0]; Sort.Direction direction = - sortParams.length > 1 ? Sort.Direction.fromString(sortParams[1]) : Sort.Direction.ASC; + sortParams.length > 1 ? Sort.Direction.fromString(sortParams[1]) : Sort.Direction.ASC; return PageRequest.of(page, size, Sort.by(direction, property)); } return PageRequest.of(page, size); @@ -435,24 +425,22 @@ public class InferenceDetailDto { private Integer targetYyyy; private String detectOption; private String mapSheetScope; - @JsonFormatDttm - private ZonedDateTime inferStartDttm; - @JsonFormatDttm - private ZonedDateTime inferEndDttm; + @JsonFormatDttm private ZonedDateTime inferStartDttm; + @JsonFormatDttm private ZonedDateTime inferEndDttm; private Duration elapsedDuration; - public AnalResultInfo(String analTitle, - String modelVer1, - String modelVer2, - String modelVer3, - Integer compareYyyy, - Integer targetYyyy, - String detectOption, - String mapSheetScope, - ZonedDateTime inferStartDttm, - ZonedDateTime inferEndDttm - ) { + public AnalResultInfo( + String analTitle, + String modelVer1, + String modelVer2, + String modelVer3, + Integer compareYyyy, + Integer targetYyyy, + String detectOption, + String mapSheetScope, + ZonedDateTime inferStartDttm, + ZonedDateTime inferEndDttm) { this.analTitle = analTitle; this.modelVer1 = modelVer1; this.modelVer2 = modelVer2; @@ -463,9 +451,10 @@ public class InferenceDetailDto { this.mapSheetScope = mapSheetScope; this.inferStartDttm = inferStartDttm; this.inferEndDttm = inferEndDttm; - this.elapsedDuration = (inferStartDttm != null && inferEndDttm != null) - ? Duration.between(inferStartDttm, inferEndDttm) - : null; + this.elapsedDuration = + (inferStartDttm != null && inferEndDttm != null) + ? Duration.between(inferStartDttm, inferEndDttm) + : null; } } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index 29945e13..2c471fee 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -41,7 +41,7 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto BooleanBuilder builder = new BooleanBuilder(); NumberExpression statusOrder = - new CaseBuilder().when(mapSheetLearnEntity.status.eq("Y")).then(0).otherwise(1); + new CaseBuilder().when(mapSheetLearnEntity.status.eq("Y")).then(0).otherwise(1); // 국유인 반영 여부 if (StringUtils.isNotBlank(req.getApplyYn())) { @@ -55,10 +55,10 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto // 국유인 반영일 if (req.getStrtDttm() != null && req.getEndDttm() != null) { builder.and( - mapSheetLearnEntity - .applyDttm - .goe(DateRange.start(req.getStrtDttm())) - .and(mapSheetLearnEntity.applyDttm.lt(DateRange.end(req.getEndDttm())))); + mapSheetLearnEntity + .applyDttm + .goe(DateRange.start(req.getStrtDttm())) + .and(mapSheetLearnEntity.applyDttm.lt(DateRange.end(req.getEndDttm())))); } // 제목 @@ -67,21 +67,21 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto } List content = - queryFactory - .select(mapSheetLearnEntity) - .from(mapSheetLearnEntity) - .where(builder) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .orderBy(mapSheetLearnEntity.id.desc()) - .fetch(); + queryFactory + .select(mapSheetLearnEntity) + .from(mapSheetLearnEntity) + .where(builder) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .orderBy(mapSheetLearnEntity.id.desc()) + .fetch(); Long total = - queryFactory - .select(mapSheetLearnEntity.count()) - .from(mapSheetLearnEntity) - .where(builder) - .fetchOne(); + queryFactory + .select(mapSheetLearnEntity.count()) + .from(mapSheetLearnEntity) + .where(builder) + .fetchOne(); return new PageImpl<>(content, pageable, total == null ? 0L : total); } @@ -89,10 +89,10 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto @Override public Optional getInferenceResultByUuid(UUID uuid) { return Optional.ofNullable( - queryFactory - .selectFrom(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne()); + queryFactory + .selectFrom(mapSheetLearnEntity) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne()); } @Override @@ -101,41 +101,41 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto BooleanBuilder builder = new BooleanBuilder(); List latestIds = - queryFactory - .select(systemMetricEntity.id1.max()) - .from(systemMetricEntity) - .groupBy(systemMetricEntity.serverName) - .fetch(); + queryFactory + .select(systemMetricEntity.id1.max()) + .from(systemMetricEntity) + .groupBy(systemMetricEntity.serverName) + .fetch(); List latestGpuIds = - queryFactory - .select(gpuMetricEntity.id1.max()) - .from(gpuMetricEntity) - .groupBy(gpuMetricEntity.serverName) - .fetch(); + queryFactory + .select(gpuMetricEntity.id1.max()) + .from(gpuMetricEntity) + .groupBy(gpuMetricEntity.serverName) + .fetch(); List foundContent = - queryFactory - .select( - Projections.constructor( - InferenceServerStatusDto.class, - systemMetricEntity.serverName, - systemMetricEntity.cpuUser, - systemMetricEntity.cpuSystem, - systemMetricEntity.memused, - systemMetricEntity.kbmemused, - gpuMetricEntity.gpuUtil)) - .from(systemMetricEntity) - .leftJoin(gpuMetricEntity) - .on( - gpuMetricEntity - .id1 - .in(latestGpuIds) - .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) - .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 - .orderBy(systemMetricEntity.serverName.asc()) - .limit(4) - .fetch(); + queryFactory + .select( + Projections.constructor( + InferenceServerStatusDto.class, + systemMetricEntity.serverName, + systemMetricEntity.cpuUser, + systemMetricEntity.cpuSystem, + systemMetricEntity.memused, + systemMetricEntity.kbmemused, + gpuMetricEntity.gpuUtil)) + .from(systemMetricEntity) + .leftJoin(gpuMetricEntity) + .on( + gpuMetricEntity + .id1 + .in(latestGpuIds) + .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) + .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 + .orderBy(systemMetricEntity.serverName.asc()) + .limit(4) + .fetch(); return foundContent; } @@ -143,11 +143,11 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto @Override public Optional getInferenceResultByStatus(String status) { return Optional.ofNullable( - queryFactory - .selectFrom(mapSheetLearnEntity) - .where(mapSheetLearnEntity.status.eq(status)) - .limit(1) - .fetchOne()); + queryFactory + .selectFrom(mapSheetLearnEntity) + .where(mapSheetLearnEntity.status.eq(status)) + .limit(1) + .fetchOne()); } @Override @@ -160,37 +160,37 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto QModelMngEntity m3Model = new QModelMngEntity("m3Model"); InferenceStatusDetailDto foundContent = - queryFactory - .select( - Projections.constructor( - InferenceStatusDetailDto.class, - mapSheetLearnEntity.title, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.detectOption, - mapSheetLearnEntity.mapSheetScope, - mapSheetLearnEntity.inferStartDttm, - mapSheetLearnEntity.inferEndDttm, - mapSheetLearnEntity.detectingCnt, - mapSheetLearnEntity.detectEndCnt, - mapSheetLearnEntity.m1ModelStartDttm, - mapSheetLearnEntity.m1ModelEndDttm, - mapSheetLearnEntity.m2ModelStartDttm, - mapSheetLearnEntity.m2ModelEndDttm, - mapSheetLearnEntity.m3ModelStartDttm, - mapSheetLearnEntity.m3ModelEndDttm, - m1Model.modelVer.as("model1Ver"), - m2Model.modelVer.as("model2Ver"), - m3Model.modelVer.as("model3Ver"))) - .from(mapSheetLearnEntity) - .leftJoin(m1Model) - .on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) - .leftJoin(m2Model) - .on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) - .leftJoin(m3Model) - .on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne(); + queryFactory + .select( + Projections.constructor( + InferenceStatusDetailDto.class, + mapSheetLearnEntity.title, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.inferStartDttm, + mapSheetLearnEntity.inferEndDttm, + mapSheetLearnEntity.detectingCnt, + mapSheetLearnEntity.detectEndCnt, + mapSheetLearnEntity.m1ModelStartDttm, + mapSheetLearnEntity.m1ModelEndDttm, + mapSheetLearnEntity.m2ModelStartDttm, + mapSheetLearnEntity.m2ModelEndDttm, + mapSheetLearnEntity.m3ModelStartDttm, + mapSheetLearnEntity.m3ModelEndDttm, + m1Model.modelVer.as("model1Ver"), + m2Model.modelVer.as("model2Ver"), + m3Model.modelVer.as("model3Ver"))) + .from(mapSheetLearnEntity) + .leftJoin(m1Model) + .on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) + .leftJoin(m2Model) + .on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) + .leftJoin(m3Model) + .on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne(); return foundContent; } @@ -201,30 +201,30 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto QModelMngEntity model = new QModelMngEntity("model"); InferenceProgressDto dto = - queryFactory - .select( - Projections.constructor( - InferenceProgressDto.class, - Projections.constructor( - InferenceProgressDto.pred_requests_areas.class, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.modelComparePath, - mapSheetLearnEntity.modelTargetPath), - model.modelVer.as("modelVer"), - model.cdModelPath.as("cdModelPath"), - model.cdModelFileName.as("cdModelFileName"), - model.cdModelConfigPath.as("cdModelConfigPath"), - model.cdModelConfigFileName.as("cdModelConfigFileName"), - model.clsModelPath, - model.clsModelFileName, - model.clsModelVersion, - model.priority)) - .from(mapSheetLearnEntity) - .join(model) - .on(model.uuid.eq(modelUuid)) - .where(mapSheetLearnEntity.id.eq(id)) - .fetchOne(); + queryFactory + .select( + Projections.constructor( + InferenceProgressDto.class, + Projections.constructor( + InferenceProgressDto.pred_requests_areas.class, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.modelComparePath, + mapSheetLearnEntity.modelTargetPath), + model.modelVer.as("modelVer"), + model.cdModelPath.as("cdModelPath"), + model.cdModelFileName.as("cdModelFileName"), + model.cdModelConfigPath.as("cdModelConfigPath"), + model.cdModelConfigFileName.as("cdModelConfigFileName"), + model.clsModelPath, + model.clsModelFileName, + model.clsModelVersion, + model.priority)) + .from(mapSheetLearnEntity) + .join(model) + .on(model.uuid.eq(modelUuid)) + .where(mapSheetLearnEntity.id.eq(id)) + .fetchOne(); return dto; } @@ -235,10 +235,10 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto */ public UUID getProcessing() { return queryFactory - .select(mapSheetLearnEntity.uuid) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.status.eq("IN_PROGRESS")) - .fetchOne(); + .select(mapSheetLearnEntity.uuid) + .from(mapSheetLearnEntity) + .where(mapSheetLearnEntity.status.eq("IN_PROGRESS")) + .fetchOne(); } @Override @@ -248,17 +248,17 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto entity.setTargetYyyy(targetYear); Integer stage = - queryFactory - .select(mapSheetLearnEntity.stage) - .from(mapSheetLearnEntity) - .where( - mapSheetLearnEntity - .compareYyyy - .eq(compareYear) - .and(mapSheetLearnEntity.targetYyyy.eq(targetYear))) - .orderBy(mapSheetLearnEntity.stage.desc()) - .limit(1) - .fetchOne(); + queryFactory + .select(mapSheetLearnEntity.stage) + .from(mapSheetLearnEntity) + .where( + mapSheetLearnEntity + .compareYyyy + .eq(compareYear) + .and(mapSheetLearnEntity.targetYyyy.eq(targetYear))) + .orderBy(mapSheetLearnEntity.stage.desc()) + .limit(1) + .fetchOne(); return stage == null ? 1 : stage + 1; } @@ -270,28 +270,27 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto QModelMngEntity m3 = new QModelMngEntity("m3"); return queryFactory - .select( - Projections.constructor( - AnalResultInfo.class, - mapSheetLearnEntity.title, - m1.modelVer, - m2.modelVer, - m3.modelVer, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.detectOption, - mapSheetLearnEntity.mapSheetScope, - mapSheetLearnEntity.inferStartDttm, - mapSheetLearnEntity.inferEndDttm - ) - ) - .from(mapSheetLearnEntity) - .leftJoin(m1) - .on(mapSheetLearnEntity.m1ModelUuid.eq(m1.uuid)) - .leftJoin(m2) - .on(mapSheetLearnEntity.m2ModelUuid.eq(m2.uuid)) - .leftJoin(m3) - .on(mapSheetLearnEntity.m3ModelUuid.eq(m3.uuid)) - .where(mapSheetLearnEntity.uuid.eq(UUID.fromString(uuid))).fetchOne(); + .select( + Projections.constructor( + AnalResultInfo.class, + mapSheetLearnEntity.title, + m1.modelVer, + m2.modelVer, + m3.modelVer, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.inferStartDttm, + mapSheetLearnEntity.inferEndDttm)) + .from(mapSheetLearnEntity) + .leftJoin(m1) + .on(mapSheetLearnEntity.m1ModelUuid.eq(m1.uuid)) + .leftJoin(m2) + .on(mapSheetLearnEntity.m2ModelUuid.eq(m2.uuid)) + .leftJoin(m3) + .on(mapSheetLearnEntity.m3ModelUuid.eq(m3.uuid)) + .where(mapSheetLearnEntity.uuid.eq(UUID.fromString(uuid))) + .fetchOne(); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java index 358e9f4f..97f7e375 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelAllocateRepositoryImpl.java @@ -34,7 +34,6 @@ import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.StringExpression; -import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityNotFoundException;