From f99144eccc6176b7f0bffc924fb39f4276fe68a2 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Wed, 4 Mar 2026 23:00:46 +0900 Subject: [PATCH] =?UTF-8?q?pnu=20cnt=20update=20=EC=88=98=EB=8F=99?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GukYuinPnuCntUpdateJobCoreService.java | 26 +++++++++ .../GukYuinPnuCntUpdateJobRepository.java | 7 +++ ...ukYuinPnuCntUpdateJobRepositoryCustom.java | 8 +++ .../GukYuinPnuCntUpdateJobRepositoryImpl.java | 58 +++++++++++++++++++ .../scheduler/SchedulerApiController.java | 9 +++ .../GukYuinApiPnuCntUpdateJobService.java | 24 ++++++++ 6 files changed, 132 insertions(+) create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuCntUpdateJobCoreService.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepository.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryCustom.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryImpl.java create mode 100644 src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuCntUpdateJobService.java diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuCntUpdateJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuCntUpdateJobCoreService.java new file mode 100644 index 00000000..bba0bedf --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuCntUpdateJobCoreService.java @@ -0,0 +1,26 @@ +package com.kamco.cd.kamcoback.postgres.core; + +import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinPnuCntUpdateJobRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class GukYuinPnuCntUpdateJobCoreService { + + private final GukYuinPnuCntUpdateJobRepository gukYuinPnuCntUpdateRepository; + + public GukYuinPnuCntUpdateJobCoreService( + GukYuinPnuCntUpdateJobRepository gukYuinPnuCntUpdateRepository) { + this.gukYuinPnuCntUpdateRepository = gukYuinPnuCntUpdateRepository; + } + + @Transactional + public int updateGukYuinContListPnuUpdateCnt(String uid) { + return gukYuinPnuCntUpdateRepository.updateGukYuinContListPnuUpdateCnt(uid); + } + + @Transactional + public void updateGukYuinApplyStatus(String uid, String status) { + gukYuinPnuCntUpdateRepository.updateGukYuinApplyStatus(uid, status); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepository.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepository.java new file mode 100644 index 00000000..ad093963 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepository.java @@ -0,0 +1,7 @@ +package com.kamco.cd.kamcoback.postgres.repository.gukyuin; + +import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface GukYuinPnuCntUpdateJobRepository + extends JpaRepository, GukYuinPnuCntUpdateJobRepositoryCustom {} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryCustom.java new file mode 100644 index 00000000..c7a6c8cd --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryCustom.java @@ -0,0 +1,8 @@ +package com.kamco.cd.kamcoback.postgres.repository.gukyuin; + +public interface GukYuinPnuCntUpdateJobRepositoryCustom { + + int updateGukYuinContListPnuUpdateCnt(String uid); + + void updateGukYuinApplyStatus(String uid, String status); +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryImpl.java new file mode 100644 index 00000000..f3649a7f --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuCntUpdateJobRepositoryImpl.java @@ -0,0 +1,58 @@ +package com.kamco.cd.kamcoback.postgres.repository.gukyuin; + +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import java.time.ZonedDateTime; +import lombok.RequiredArgsConstructor; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class GukYuinPnuCntUpdateJobRepositoryImpl + implements GukYuinPnuCntUpdateJobRepositoryCustom { + + private final JPAQueryFactory queryFactory; + private final JdbcTemplate jdbcTemplate; + @PersistenceContext private EntityManager em; + + @Override + public int updateGukYuinContListPnuUpdateCnt(String uid) { + String sql = + """ + WITH target_geo AS ( + SELECT DISTINCT g.geo_uid + FROM tb_map_sheet_anal_data_inference_geom g + JOIN tb_map_sheet_anal_data_inference d ON d.data_uid = g.data_uid + JOIN tb_map_sheet_anal_inference i ON i.anal_uid = d.anal_uid + JOIN tb_map_sheet_learn l ON l.id = i.learn_id + WHERE l.uid = ? + ), + pnu_cnt AS ( + SELECT p.geo_uid, COUNT(*)::int AS cnt + FROM tb_pnu p + JOIN target_geo t ON t.geo_uid = p.geo_uid + GROUP BY p.geo_uid + ) + UPDATE tb_map_sheet_anal_data_inference_geom geo + SET pnu = pnu_cnt.cnt + FROM pnu_cnt + WHERE geo.geo_uid = pnu_cnt.geo_uid + """; + + return jdbcTemplate.update(sql, uid); + } + + @Override + public void updateGukYuinApplyStatus(String uid, String status) { + queryFactory + .update(mapSheetLearnEntity) + .set(mapSheetLearnEntity.applyStatus, status) + .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) + .where(mapSheetLearnEntity.uid.eq(uid)) + .execute(); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/SchedulerApiController.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/SchedulerApiController.java index 65c4169d..760fc672 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/SchedulerApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/SchedulerApiController.java @@ -6,6 +6,7 @@ import com.kamco.cd.kamcoback.gukyuin.service.GukYuinApiService; import com.kamco.cd.kamcoback.inference.dto.InferenceResultShpDto; import com.kamco.cd.kamcoback.inference.service.InferenceResultShpService; import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiLabelJobService; +import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiPnuCntUpdateJobService; import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiPnuJobService; import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiStatusJobService; import com.kamco.cd.kamcoback.scheduler.service.GukYuinApiStbltJobService; @@ -49,6 +50,7 @@ public class SchedulerApiController { private final MapSheetMngFileJobController mapSheetMngFileJobController; private final InferenceResultShpService inferenceResultShpService; private final GukYuinApiService gukYuinApiService; + private final GukYuinApiPnuCntUpdateJobService gukYuinApiPnuCntUpdateJobService; @Operation(summary = "국유인 탐지객체 조회 PNU 업데이트 스케줄링", description = "국유인 탐지객체 조회 PNU 업데이트 스케줄링") @GetMapping("/gukyuin/pnu") @@ -184,4 +186,11 @@ public class SchedulerApiController { @PathVariable String uid, @PathVariable int updateCnt) { return ApiResponseDto.ok(gukYuinApiService.updateStbltRandomData(uid, updateCnt)); } + + @Operation(summary = "pnu 연동 이후 pnu cnt, 상태 업데이트", description = "pnu 연동 이후 pnu cnt, 상태 업데이트") + @GetMapping("/gukyuin/pnu-cnt/{uid}") + public ApiResponseDto updateGukYuinContListPnuUpdateCnt(@PathVariable String uid) { + gukYuinApiPnuCntUpdateJobService.updateGukYuinContListPnuUpdateCnt(uid); + return ApiResponseDto.ok(null); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuCntUpdateJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuCntUpdateJobService.java new file mode 100644 index 00000000..49112ae3 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuCntUpdateJobService.java @@ -0,0 +1,24 @@ +package com.kamco.cd.kamcoback.scheduler.service; + +import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; +import com.kamco.cd.kamcoback.postgres.core.GukYuinPnuCntUpdateJobCoreService; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +@Log4j2 +@Service +@RequiredArgsConstructor +public class GukYuinApiPnuCntUpdateJobService { + + private final GukYuinPnuCntUpdateJobCoreService gukYuinPnuCntUpdateJobCoreService; + + public void updateGukYuinContListPnuUpdateCnt(String uid) { + int execCnt = gukYuinPnuCntUpdateJobCoreService.updateGukYuinContListPnuUpdateCnt(uid); + + if (execCnt > 0) { + gukYuinPnuCntUpdateJobCoreService.updateGukYuinApplyStatus( + uid, GukYuinStatus.PNU_COMPLETED.getId()); + } + } +}