From 21f922a5f4739a66ef388924e235b4be21de927f Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Fri, 30 Jan 2026 17:32:39 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EA=B5=AD=EC=9C=A0=EC=9D=B8=20=EC=96=B4?= =?UTF-8?q?=EC=A0=9C=EC=99=84=EB=A3=8C=EB=90=9C=20=EB=9D=BC=EB=B2=A8?= =?UTF-8?q?=EC=A0=84=EC=86=A1,=20=EC=A0=84=EC=86=A1=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EB=90=9C=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gukyuin/GukYuinApiController.java | 10 ++ .../gukyuin/dto/ChngDetectMastDto.java | 16 +++ .../cd/kamcoback/gukyuin/dto/GukYuinDto.java | 9 ++ .../gukyuin/service/GukYuinApiService.java | 6 + .../postgres/core/GukYuinCoreService.java | 7 ++ .../postgres/core/GukYuinJobCoreService.java | 15 ++- .../MapSheetAnalDataInferenceGeomEntity.java | 3 + .../gukyuin/GukYuinRepositoryCustom.java | 13 ++- .../gukyuin/GukYuinRepositoryImpl.java | 106 ++++++++++++++++-- .../service/GukYuinApiJobService.java | 74 ++++++++---- 10 files changed, 226 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java index dd6efcf7..19f0783f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java @@ -6,6 +6,7 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ChnDetectMastReqDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ChngDetectMastSearchDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResReturn; import com.kamco.cd.kamcoback.gukyuin.dto.DetectMastDto.Basic; import com.kamco.cd.kamcoback.gukyuin.dto.DetectMastDto.DetectMastReq; @@ -19,6 +20,8 @@ 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 jakarta.validation.Valid; +import java.time.LocalDate; +import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -249,4 +252,11 @@ public class GukYuinApiController { UUID uuid) { return ApiResponseDto.ok(gukYuinApiService.connectChnMastRegist(uuid)); } + + @Operation(summary = "라벨 전송 완료 리스트", description = "라벨 전송 완료 리스트") + @GetMapping("/label/send-list") + public ApiResponseDto> findLabelingCompleteSendList( + @Parameter(description = "어제 날짜", example = "2026-01-29") LocalDate yesterday) { + return ApiResponseDto.ok(gukYuinApiService.findLabelingCompleteSendList(yesterday)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java index 772448c7..a124ac66 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/ChngDetectMastDto.java @@ -1,6 +1,7 @@ package com.kamco.cd.kamcoback.gukyuin.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.ZonedDateTime; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; @@ -200,4 +201,19 @@ public class ChngDetectMastDto { private String uid; private String chnDtctMstId; } + + @Schema(name = "LabelSendDto", description = "라벨링 전송한 목록") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class LabelSendDto { + + private String chnDtctObjtId; + private String labelerId; + private ZonedDateTime labelerWorkDttm; + private String reviewerId; + private ZonedDateTime reviewerWorkDttm; + private ZonedDateTime labelSendDttm; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java index 652a00fc..f196184b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinDto.java @@ -60,4 +60,13 @@ public class GukYuinDto { private String uid; private String applyStatus; } + + @Getter + @Setter + @AllArgsConstructor + public static class GeomUidDto { + + private Long geoUid; + private String resultUid; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java index de37d45e..7214279b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/service/GukYuinApiService.java @@ -13,6 +13,7 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ResultContDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ResultPnuDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ChnDetectMastReqDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResReturn; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GukYuinLinkFacts; @@ -24,6 +25,7 @@ import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.postgres.core.GukYuinCoreService; import com.kamco.cd.kamcoback.postgres.entity.AuditLogEntity; import com.kamco.cd.kamcoback.postgres.repository.log.AuditLogRepository; +import java.time.LocalDate; import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -393,4 +395,8 @@ public class GukYuinApiService { return new ResponseObj(ApiResponseCode.OK, ""); } + + public List findLabelingCompleteSendList(LocalDate yesterday) { + return gukyuinCoreService.findLabelingCompleteSendList(yesterday); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java index 4a924f01..759972c3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinCoreService.java @@ -1,10 +1,13 @@ package com.kamco.cd.kamcoback.postgres.core; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GukYuinLinkFacts; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.postgres.repository.Inference.MapSheetLearnRepository; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinRepository; +import java.time.LocalDate; +import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -57,4 +60,8 @@ public class GukYuinCoreService { public void updateAnalInferenceApplyDttm(Basic registRes) { gukYuinRepository.updateAnalInferenceApplyDttm(registRes); } + + public List findLabelingCompleteSendList(LocalDate yesterday) { + return gukYuinRepository.findLabelingCompleteSendList(yesterday); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java index 8c234dab..9346f9a9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java @@ -1,6 +1,7 @@ package com.kamco.cd.kamcoback.postgres.core; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinRepository; import java.util.List; @@ -19,11 +20,19 @@ public class GukYuinJobCoreService { gukYuinRepository.updateGukYuinApplyStateComplete(id, status); } - public List findGukyuinApplyStatusUidList(GukYuinStatus gukYuinStatus) { + public List findGukyuinApplyStatusUidList(List gukYuinStatus) { return gukYuinRepository.findGukyuinApplyStatusUidList(gukYuinStatus); } - public void upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { - gukYuinRepository.upsertMapSheetDataAnalGeomPnu(chnDtctObjtId, pnuList); + public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { + return gukYuinRepository.upsertMapSheetDataAnalGeomPnu(chnDtctObjtId, pnuList); + } + + public List findYesterdayLabelingCompleteList() { + return gukYuinRepository.findYesterdayLabelingCompleteList(); + } + + public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { + gukYuinRepository.updateAnalDataInferenceGeomSendDttm(geoUid); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java index 203028b8..e03c8c76 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java @@ -156,6 +156,9 @@ public class MapSheetAnalDataInferenceGeomEntity { @JoinColumn(name = "map_5k_id", referencedColumnName = "fid") private MapInkx5kEntity map5k; + @Column(name = "label_send_dttm") + private ZonedDateTime labelSendDttm; + public InferenceDetailDto.DetailListEntity toEntity() { DetectionClassification classification = DetectionClassification.fromString(classBeforeCd); Clazzes comparedClazz = new Clazzes(classification, classBeforeProb); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java index ced7c08c..25d5ad41 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryCustom.java @@ -1,9 +1,12 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import java.time.LocalDate; import java.util.List; import java.util.UUID; @@ -21,13 +24,19 @@ public interface GukYuinRepositoryCustom { void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status); - List findGukyuinApplyStatusUidList(GukYuinStatus gukYuinStatus); + List findGukyuinApplyStatusUidList(List gukYuinStatus); - void upsertMapSheetDataAnalGeomPnu(String uid, String[] pnuList); + long upsertMapSheetDataAnalGeomPnu(String uid, String[] pnuList); LearnInfo findMapSheetLearnInfo(UUID uuid); Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy); void updateAnalInferenceApplyDttm(Basic registRes); + + List findYesterdayLabelingCompleteList(); + + void updateAnalDataInferenceGeomSendDttm(Long geoUid); + + List findLabelingCompleteSendList(LocalDate yesterday); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java index 281b5f70..51503a7a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinRepositoryImpl.java @@ -1,21 +1,28 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; +import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.transaction.Transactional; +import java.time.LocalDate; +import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; import java.util.UUID; @@ -89,7 +96,7 @@ public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom { } @Override - public List findGukyuinApplyStatusUidList(GukYuinStatus status) { + public List findGukyuinApplyStatusUidList(List status) { return queryFactory .select( Projections.constructor( @@ -98,12 +105,12 @@ public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom { mapSheetLearnEntity.uid, mapSheetLearnEntity.chnDtctMstId)) .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.applyStatus.eq(status.getId())) + .where(mapSheetLearnEntity.applyStatus.in(status)) .fetch(); } @Override - public void upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { + public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { long length = pnuList.length; queryFactory .update(mapSheetAnalDataInferenceGeomEntity) @@ -118,13 +125,19 @@ public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom { .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) .fetchOne(); - for (int i = 0; i < length; i++) { - queryFactory - .insert(pnuEntity) - .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) - .values(geoUid, pnuList[i], ZonedDateTime.now()) - .execute(); + long succCnt = 0; + for (String pnu : pnuList) { + long result = + queryFactory + .insert(pnuEntity) + .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) + .values(geoUid, pnu, ZonedDateTime.now()) + .execute(); + if (result > 0) { + succCnt++; + } } + return succCnt; } @Override @@ -178,6 +191,81 @@ public class GukYuinRepositoryImpl implements GukYuinRepositoryCustom { .execute(); } + @Override + public List findYesterdayLabelingCompleteList() { + ZoneId zone = ZoneId.of("Asia/Seoul"); + ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); + ZonedDateTime yesterdayStart = todayStart.minusDays(1); + + BooleanExpression isYesterday = + labelingAssignmentEntity + .inspectStatDttm + .goe(yesterdayStart) + .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart)); + + return queryFactory + .select( + Projections.constructor( + GeomUidDto.class, + labelingAssignmentEntity.inferenceGeomUid, + mapSheetAnalDataInferenceGeomEntity.resultUid)) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .innerJoin(mapSheetAnalInferenceEntity) + .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) + .innerJoin(mapSheetLearnEntity) + .on( + mapSheetAnalInferenceEntity.learnId.eq(mapSheetLearnEntity.id), + mapSheetLearnEntity.applyStatus.in( + GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_COMPLETED.getId())) + .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) + .fetch(); + } + + @Override + public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.labelSendDttm, ZonedDateTime.now()) + .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(geoUid)) + .execute(); + } + + @Override + public List findLabelingCompleteSendList(LocalDate yesterday) { + + ZoneId zone = ZoneId.of("Asia/Seoul"); + ZonedDateTime from = yesterday.atStartOfDay(zone); + ZonedDateTime to = from.plusDays(1); + + BooleanExpression isYesterday = + labelingAssignmentEntity + .inspectStatDttm + .goe(from) + .and(labelingAssignmentEntity.inspectStatDttm.lt(to)); + + return queryFactory + .select( + Projections.constructor( + LabelSendDto.class, + mapSheetAnalDataInferenceGeomEntity.resultUid, + labelingAssignmentEntity.workerUid, + labelingAssignmentEntity.workStatDttm, + labelingAssignmentEntity.inspectorUid, + labelingAssignmentEntity.inspectStatDttm, + mapSheetAnalDataInferenceGeomEntity.labelSendDttm)) + .from(labelingAssignmentEntity) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on( + labelingAssignmentEntity.inferenceGeomUid.eq( + mapSheetAnalDataInferenceGeomEntity.geoUid)) + .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) + .fetch(); + } + @Override @Transactional public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiJobService.java index c537ce90..d47290ad 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiJobService.java @@ -5,6 +5,7 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectContDto.ResultContDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.gukyuin.service.GukYuinApiService; import com.kamco.cd.kamcoback.postgres.core.GukYuinJobCoreService; @@ -35,14 +36,16 @@ public class GukYuinApiJobService { return "local".equalsIgnoreCase(profile); } - @Scheduled(cron = "0 * * * * *") // 0 0/10 * * * * + /** 국유인 연동 후, 100% 되었는지 확인하는 스케줄링 매 10분마다 호출 */ + @Scheduled(cron = "0 0/10 * * * *") public void findGukYuinMastCompleteYn() { - // if (isLocalProfile()) { - // return; - // } + if (isLocalProfile()) { + return; + } List list = - gukYuinJobCoreService.findGukyuinApplyStatusUidList(GukYuinStatus.IN_PROGRESS); + gukYuinJobCoreService.findGukyuinApplyStatusUidList( + List.of(GukYuinStatus.IN_PROGRESS.getId())); if (list.isEmpty()) { return; } @@ -70,6 +73,7 @@ public class GukYuinApiJobService { } } + /** 국유인 등록 완료 후, 탐지객체 조회해서 PNU 업데이트 하는 스케줄링 하루 1번 새벽 1시에 실행 */ @Scheduled(cron = "0 0 1 * * *") public void findGukYuinContListPnuUpdate() { if (isLocalProfile()) { @@ -77,16 +81,22 @@ public class GukYuinApiJobService { } List list = - gukYuinJobCoreService.findGukyuinApplyStatusUidList(GukYuinStatus.GUK_COMPLETED); + gukYuinJobCoreService.findGukyuinApplyStatusUidList( + List.of(GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_FAILED.getId())); if (list.isEmpty()) { return; } for (LearnKeyDto dto : list) { try { - processUid(dto.getChnDtctMstId(), dto.getUid()); - gukYuinJobCoreService.updateGukYuinApplyStateComplete( - dto.getId(), GukYuinStatus.PNU_COMPLETED); + long succCnt = processUid(dto.getChnDtctMstId(), dto.getUid()); + if (succCnt > 0) { + gukYuinJobCoreService.updateGukYuinApplyStateComplete( + dto.getId(), GukYuinStatus.PNU_COMPLETED); + } else { + gukYuinJobCoreService.updateGukYuinApplyStateComplete( + dto.getId(), GukYuinStatus.PNU_FAILED); + } } catch (Exception e) { log.error("[GUKYUIN] failed uid={}", dto.getUid(), e); gukYuinJobCoreService.updateGukYuinApplyStateComplete( @@ -95,16 +105,17 @@ public class GukYuinApiJobService { } } - private void processUid(String chnDtctMstId, String uid) { + private long processUid(String chnDtctMstId, String uid) { + long succCnt = 0; ResultDto result = gukYuinApiService.detail(chnDtctMstId); if (result == null || result.getResult() == null || result.getResult().isEmpty()) { - return; + return succCnt; } ChngDetectMastDto.Basic basic = result.getResult().get(0); String chnDtctCnt = basic.getChnDtctCnt(); if (chnDtctCnt == null || chnDtctCnt.isEmpty()) { - return; + return succCnt; } // page 계산 @@ -113,24 +124,49 @@ public class GukYuinApiJobService { int totalPages = (totalCount + pageSize - 1) / pageSize; for (int page = 0; page < totalPages; page++) { - processPage(uid, page, pageSize); + succCnt += processPage(uid, page, pageSize); } + + return succCnt; } - private void processPage(String uid, int page, int pageSize) { + private long processPage(String uid, int page, int pageSize) { + long result = 0; ResultContDto cont = gukYuinApiService.findChnContList(uid, page, pageSize); if (cont == null || cont.getResult().isEmpty()) { - return; // 외부 API 이상 방어 + return result; // 외부 API 이상 방어 } // pnuList 업데이트 + for (ChngDetectContDto.ContBasic contBasic : cont.getResult()) { - if (contBasic.getPnuList() == null) { - return; + if (contBasic.getPnuList() == null || contBasic.getChnDtctObjtId() == null) { + return 0; } - gukYuinJobCoreService.upsertMapSheetDataAnalGeomPnu( - contBasic.getChnDtctObjtId(), contBasic.getPnuList()); + long upsertCnt = + gukYuinJobCoreService.upsertMapSheetDataAnalGeomPnu( + contBasic.getChnDtctObjtId(), contBasic.getPnuList()); + result += upsertCnt; + } + + return result; + } + + /** 어제 라벨링 검수 완료된 것 -> 국유인에 전송 */ + @Scheduled(cron = "0 0 1 * * *") + public void findLabelingCompleteSend() { + + List list = gukYuinJobCoreService.findYesterdayLabelingCompleteList(); + if (list.isEmpty()) { + return; + } + + for (GeomUidDto dto : list) { + gukYuinApiService.updateChnDtctObjtLabelingYn(dto.getResultUid(), "Y"); + + // inference_geom 에 label_send_dttm 업데이트 하기 + gukYuinJobCoreService.updateAnalDataInferenceGeomSendDttm(dto.getGeoUid()); } } } -- 2.49.1 From ff7654baa790235f15a721cdc42f99a90557ae44 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 30 Jan 2026 17:43:27 +0900 Subject: [PATCH 2/2] =?UTF-8?q?RestTemplateConfig=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kamco/cd/kamcoback/layer/service/WmtsService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/layer/service/WmtsService.java b/src/main/java/com/kamco/cd/kamcoback/layer/service/WmtsService.java index d085cd99..757ef1b0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/layer/service/WmtsService.java +++ b/src/main/java/com/kamco/cd/kamcoback/layer/service/WmtsService.java @@ -382,13 +382,16 @@ public class WmtsService { WmtsLayerInfo.TileMatric tileMatric = new WmtsLayerInfo.TileMatric(); // TileMatrix 정보 추출 - tileMatric.setIdentifier(getChildValue(node, "Identifier")); tileMatric.setScaleDenominator(getChildValue(node, "ScaleDenominator")); tileMatric.setTopLeftCorner(getChildValue(node, "TopLeftCorner")); + tileMatric.setIdentifier(getChildValue(node, "Identifier")); + + /* 미사용 정보 주석처리함 tileMatric.setTileWidth(getChildValue(node, "TileWidth")); tileMatric.setTileHeight(getChildValue(node, "TileHeight")); tileMatric.setMatrixWidth(getChildValue(node, "MatrixWidth")); tileMatric.setMatrixHeight(getChildValue(node, "MatrixHeight")); + */ allMatrices.add(tileMatric); } -- 2.49.1