From 41b227de3f929f683bfaa7494caeb3a2bcc33dbd Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Thu, 5 Feb 2026 15:09:27 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B5=AD=EC=9C=A0=EC=9D=B8=20API=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gukyuin/GukYuinApiController.java | 6 +- .../gukyuin/service/GukYuinApiService.java | 6 +- .../GukYuinLabelJobRepositoryImpl.java | 10 ++- .../GukYuinStbltJobRepositoryImpl.java | 63 +++++-------------- .../service/GukYuinApiLabelJobService.java | 11 ++-- .../service/GukYuinApiPnuJobService.java | 9 ++- .../service/GukYuinApiStatusJobService.java | 9 ++- .../service/GukYuinApiStbltJobService.java | 19 ++++-- 8 files changed, 58 insertions(+), 75 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 94d6bfa6..37048e0b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java @@ -305,8 +305,10 @@ public class GukYuinApiController { @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) public ApiResponseDto findRlbDtctList( - @PathVariable String chnDtctId) { - return ApiResponseDto.ok(gukYuinApiService.findRlbDtctList(chnDtctId)); + @PathVariable String chnDtctId, + @Parameter(description = "날짜(기본은 어제 날짜)") @RequestParam(defaultValue = "20260205") + String yyyymmdd) { + return ApiResponseDto.ok(gukYuinApiService.findRlbDtctList(chnDtctId, yyyymmdd)); } @Operation(summary = "탐지객체 적합여부 조회 (객체별 조회)", description = "탐지객체 적합여부 조회 (객체별 조회)") 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 f3d3fa65..71d97d12 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 @@ -518,7 +518,7 @@ public class GukYuinApiService { return result.body(); } - public ChngDetectMastDto.RlbDtctDto findRlbDtctList(String chnDtctId) { + public ChngDetectMastDto.RlbDtctDto findRlbDtctList(String chnDtctId, String yyyymmdd) { String url = gukyuinCdiUrl @@ -527,7 +527,9 @@ public class GukYuinApiService { + "?reqIp=" + myip + "&reqEpno=" - + userUtil.getEmployeeNo(); + + userUtil.getEmployeeNo() + + "&yyyymmdd=" + + yyyymmdd; ExternalCallResult result = externalHttpClient.call( diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java index 966f824e..246e85fa 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java @@ -30,13 +30,19 @@ public class GukYuinLabelJobRepositoryImpl implements GukYuinLabelJobRepositoryC public List findYesterdayLabelingCompleteList() { ZoneId zone = ZoneId.of("Asia/Seoul"); ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); + ZonedDateTime tomorrowStart = todayStart.plusDays(1); ZonedDateTime yesterdayStart = todayStart.minusDays(1); + // BooleanExpression isYesterday = + // labelingAssignmentEntity + // .inspectStatDttm + // .goe(yesterdayStart) + // .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart)); BooleanExpression isYesterday = labelingAssignmentEntity .inspectStatDttm - .goe(yesterdayStart) - .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart)); + .goe(todayStart) + .and(labelingAssignmentEntity.inspectStatDttm.lt(tomorrowStart)); return queryFactory .select( diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java index 70ffc049..302d812f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java @@ -6,6 +6,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntit 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.common.enums.ImageryFitStatus; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; @@ -15,6 +16,7 @@ import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; +import java.time.ZonedDateTime; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -64,54 +66,21 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC PnuEntity pnuEt = queryFactory .selectFrom(pnuEntity) - .where(pnuEntity.pnu.eq(stbltDto.getPnu()), pnuEntity.chnDtctObjtId.eq(resultUid)) - .fetchOne(); - if (pnuEt != null) { - // update - queryFactory - .update(pnuEntity) - .set(pnuEntity.pnuDtctId, stbltDto.getPnuDtctId()) - .set(pnuEntity.lrmSyncYmd, stbltDto.getLrmSyncYmd()) - .set(pnuEntity.pnuSyncYmd, stbltDto.getPnuSyncYmd()) - .set(pnuEntity.mpqdNo, stbltDto.getMpqdNo()) - .set(pnuEntity.cprsYr, stbltDto.getCprsYr()) - .set(pnuEntity.crtrYr, stbltDto.getCrtrYr()) - .set(pnuEntity.chnDtctId, stbltDto.getChnDtctId()) - .set(pnuEntity.chnDtctMstId, stbltDto.getChnDtctMstId()) - .set(pnuEntity.chnDtctObjtId, stbltDto.getChnDtctObjtId()) - .set(pnuEntity.chnDtctContId, stbltDto.getChnDtctContId()) - .set(pnuEntity.chnCd, stbltDto.getChnCd()) - .set(pnuEntity.chnDtctProb, stbltDto.getChnDtctProb()) - .set(pnuEntity.bfClsCd, stbltDto.getBfClsCd()) - .set(pnuEntity.bfClsProb, stbltDto.getBfClsProb()) - .set(pnuEntity.afClsCd, stbltDto.getAfClsCd()) - .set(pnuEntity.afClsProb, stbltDto.getAfClsProb()) - .set(pnuEntity.pnuSqms, stbltDto.getPnuSqms()) - .set(pnuEntity.pnuDtctSqms, stbltDto.getPnuDtctSqms()) - .set(pnuEntity.chnDtctSqms, stbltDto.getChnDtctSqms()) - .set(pnuEntity.stbltYn, stbltDto.getStbltYn()) - .set(pnuEntity.incyCd, stbltDto.getIncyCd()) - .set(pnuEntity.incyRsnCont, stbltDto.getIncyRsnCont()) - .where( - pnuEntity.geo.geoUid.eq(geomEntity.getGeoUid()), - pnuEntity.chnDtctObjtId.eq(resultUid)) - .execute(); - } else { - // insert - } - } - // queryFactory - // .update(mapSheetAnalDataInferenceGeomEntity) - // .set( - // mapSheetAnalDataInferenceGeomEntity.fitState, - // stbltDto.getStbltYn().equals("Y") ? ImageryFitStatus.FIT.getId() : - // ImageryFitStatus.UNFIT.getId()) - // .set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now()) - // .set(mapSheetAnalDataInferenceGeomEntity.lockYn, stbltDto.getLockYn()) - // .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid)) - // .execute(); + .where(pnuEntity.chnDtctObjtId.eq(resultUid)) + .fetchFirst(); - // TODO + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set( + mapSheetAnalDataInferenceGeomEntity.fitState, + pnuEt.getStbltYn().equals("Y") + ? ImageryFitStatus.UNFIT.getId() + : ImageryFitStatus.FIT.getId()) // 적합여부가 Y 이면 부적합인 것, N 이면 적합한 것이라고 함 + .set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now()) + .set(mapSheetAnalDataInferenceGeomEntity.lockYn, stbltDto.getLockYn()) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid)) + .execute(); + } } @Override diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java index d419e524..1f904ceb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java @@ -8,7 +8,6 @@ import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Log4j2 @@ -32,11 +31,11 @@ public class GukYuinApiLabelJobService { } /** 어제 라벨링 검수 완료된 것 -> 국유인에 전송 */ - @Scheduled(cron = "0 0 2 * * *") + // @Scheduled(cron = "0 0 2 * * *") public void findLabelingCompleteSend() { - if (isLocalProfile()) { - return; - } + // if (isLocalProfile()) { + // return; + // } List list = gukYuinLabelJobCoreService.findYesterdayLabelingCompleteList(); if (list.isEmpty()) { @@ -44,7 +43,7 @@ public class GukYuinApiLabelJobService { } for (GeomUidDto gto : list) { - ChngDetectContDto.ResultPnuDto dto = + ChngDetectContDto.ResultLabelDto dto = gukYuinApiService.updateChnDtctObjtLabelingYn(gto.getResultUid(), "Y"); if (dto.getSuccess()) { // inference_geom 에 label_send_dttm 업데이트 하기 diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java index 75119916..b0e4990c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java @@ -12,7 +12,6 @@ import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Log4j2 @@ -36,11 +35,11 @@ public class GukYuinApiPnuJobService { } /** 국유인 등록 완료 후, 탐지객체 조회해서 PNU 업데이트 하는 스케줄링 하루 1번 새벽 1시에 실행 */ - @Scheduled(cron = "0 * * * * *") // 0 0 1 * * * + // @Scheduled(cron = "0 0/10 * * * *") // 0 0 1 * * * public void findGukYuinContListPnuUpdate() { - if (isLocalProfile()) { - return; - } + // if (isLocalProfile()) { + // return; + // } List list = gukYuinPnuJobCoreService.findGukyuinApplyStatusUidList( diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStatusJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStatusJobService.java index 86da2d0e..7b8da6f9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStatusJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStatusJobService.java @@ -9,7 +9,6 @@ import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Log4j2 @@ -33,11 +32,11 @@ public class GukYuinApiStatusJobService { } /** 국유인 연동 후, 100% 되었는지 확인하는 스케줄링 매 10분마다 호출 */ - @Scheduled(cron = "0 0/10 * * * *") // 0 0/10 * * * * + // @Scheduled(cron = "0 0/10 * * * *") // 0 0/10 * * * * public void findGukYuinMastCompleteYn() { - if (isLocalProfile()) { - return; - } + // if (isLocalProfile()) { + // return; + // } List list = gukYuinJobCoreService.findGukyuinApplyStatusUidList( diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java index e491c32d..9eb72a92 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java @@ -6,11 +6,13 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.gukyuin.service.GukYuinApiService; import com.kamco.cd.kamcoback.postgres.core.GukYuinStbltJobCoreService; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Log4j2 @@ -34,11 +36,11 @@ public class GukYuinApiStbltJobService { } /** 국유인 연동 후, 실태조사 적합여부 확인하여 update */ - @Scheduled(cron = "0 * * * * *") // 0 0 3 * * * + // @Scheduled(cron = "0 * * * * *") // 0 0 3 * * * public void findGukYuinEligibleForSurvey() { - if (isLocalProfile()) { - return; - } + // if (isLocalProfile()) { + // return; + // } List list = gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList( @@ -49,7 +51,12 @@ public class GukYuinApiStbltJobService { for (LearnKeyDto dto : list) { try { - RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid()); + String today = + LocalDate.now(ZoneId.of("Asia/Seoul")).format(DateTimeFormatter.ofPattern("yyyyMMdd")); + // String yesterday = + // LocalDate.now(ZoneId.of("Asia/Seoul")).minusDays(1).format(DateTimeFormatter.ofPattern("yyyyMMdd")); + RlbDtctDto result = + gukYuinApiService.findRlbDtctList(dto.getUid(), today); // todo : test 다 끝내고 어제로 바꿔야 함 if (result == null || result.getResult() == null || result.getResult().isEmpty()) { log.warn("[GUKYUIN] empty result chnDtctMstId={}", dto.getChnDtctMstId());