From 501cdfe53cb420449daf49db6047ce0187014614 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Thu, 12 Mar 2026 00:14:36 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=84=ED=96=89=EC=A4=91=20+=20FINISH?= =?UTF-8?q?=EC=9D=B8=EB=8D=B0=20=EA=B2=80=EC=88=98=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EA=B0=80=20=EB=A7=88=EC=A7=80=EB=A7=89=20zip=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=99=84=EB=A3=8C=EC=9D=BC=EC=9E=90=EB=B3=B4?= =?UTF-8?q?=EB=8B=A4=20=EB=92=A4=EC=97=90=20=EC=9D=BC=EC=96=B4=EB=82=9C=20?= =?UTF-8?q?=EA=B1=B4=EB=8F=84=20=ED=8F=AC=ED=95=A8=EB=90=98=EA=B2=8C=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 --- kamco-make-dataset-generation/README.md | 7 +++-- .../batch/LaunchChildJobsTasklet.java | 4 +-- .../TrainingDataReviewJobRepository.java | 26 ++++++++++++++++--- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/kamco-make-dataset-generation/README.md b/kamco-make-dataset-generation/README.md index f2760d2..1b5f5bb 100644 --- a/kamco-make-dataset-generation/README.md +++ b/kamco-make-dataset-generation/README.md @@ -45,9 +45,8 @@ exportGeoJsonJob (Parent Job) ``` **실행 조건:** -- `tb_map_sheet_anal_inference` 테이블의 `anal_state = 'ING'` (진행 중) -- 검수 완료(`COMPLETE`) 건수가 1개 이상 존재 -- `all_cnt != file_cnt` (아직 파일 생성이 완료되지 않은 경우) +- `tb_map_sheet_anal_inference.anal_state = 'ING'` 이고 검수 완료(`COMPLETE`) 건수가 1개 이상인 건 +- 또는 `tb_map_sheet_anal_inference.anal_state = 'FINISH'` 이면서 `batch_step_history` 에서 `step_name = 'zipResponseStep'`, `status = 'SUCCESS'` 인 마지막 ZIP 완료 시각보다 더 늦게 검수 완료(`COMPLETE`) 된 건이 있는 건 --- @@ -179,7 +178,7 @@ CREATE TABLE public.batch_step_history ( **처리 과정:** 1. `findCompletedAnalMapSheetList()`: 검수 완료된 도엽 목록 조회 2. 각 도엽별로: - - `findCompletedYesterdayLabelingList()`: 어제까지 검수 완료된 데이터 조회 + - `findCompletedYesterdayLabelingList()`: 배치 실행일 0시 이전까지 검수 완료된 데이터 조회 - GeoJSON Feature 생성 - `/dataset/request/{resultUid}/{filename}.geojson` 저장 - `updateLearnDataGeomFileCreateYn()`: DB에 파일 생성 완료 플래그 업데이트 diff --git a/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/batch/LaunchChildJobsTasklet.java b/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/batch/LaunchChildJobsTasklet.java index c395f35..047172a 100644 --- a/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/batch/LaunchChildJobsTasklet.java +++ b/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/batch/LaunchChildJobsTasklet.java @@ -100,8 +100,8 @@ public class LaunchChildJobsTasklet implements Tasklet { log.info("========================================"); // Step 1: 진행 중인 분석 회차 목록 조회 - log.info("[Step 1/3] 진행 중인 분석 회차 목록 조회 중..."); - log.info(" - 조회 조건: anal_state='ING' AND complete_cnt > 0"); + log.info("[Step 1/3] 처리 대상 분석 회차 목록 조회 중..."); + log.info(" - 조회 조건: anal_state='ING' 이거나, FINISH 상태에서 마지막 ZIP 완료 이후 새 COMPLETE 발생"); List analList = repository.findAnalCntInfoList(); diff --git a/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/repository/TrainingDataReviewJobRepository.java b/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/repository/TrainingDataReviewJobRepository.java index b14bdb1..52a844c 100644 --- a/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/repository/TrainingDataReviewJobRepository.java +++ b/kamco-make-dataset-generation/src/main/java/com/kamco/cd/geojsonscheduler/repository/TrainingDataReviewJobRepository.java @@ -23,6 +23,16 @@ public class TrainingDataReviewJobRepository { public List findAnalCntInfoList() { String sql = """ + WITH latest_zip_history AS ( + SELECT + anal_uid, + result_uid, + MAX(completed_dttm) AS zip_completed_dttm + FROM public.batch_step_history + WHERE step_name = 'zipResponseStep' + AND status = 'SUCCESS' + GROUP BY anal_uid, result_uid + ) SELECT la.anal_uid, msl.uid AS result_uid, @@ -30,11 +40,21 @@ public class TrainingDataReviewJobRepository { SUM(CASE WHEN la.inspect_state = 'COMPLETE' THEN 1 ELSE 0 END) AS complete_cnt, SUM(CASE WHEN mslg.file_create_yn = true THEN 1 ELSE 0 END) AS file_cnt FROM tb_labeling_assignment la - INNER JOIN tb_map_sheet_anal_inference msai ON la.anal_uid = msai.anal_uid AND msai.anal_state = 'ING' + INNER JOIN tb_map_sheet_anal_inference msai ON la.anal_uid = msai.anal_uid LEFT JOIN tb_map_sheet_learn msl ON msai.learn_id = msl.id + LEFT JOIN latest_zip_history lzh + ON lzh.anal_uid = la.anal_uid + AND lzh.result_uid = msl.uid LEFT JOIN tb_map_sheet_learn_data_geom mslg ON la.inference_geom_uid = mslg.geo_uid - GROUP BY la.anal_uid, msl.uid + WHERE msai.anal_state = 'ING' + OR (msai.anal_state = 'FINISH' AND lzh.zip_completed_dttm IS NOT NULL) + GROUP BY la.anal_uid, msl.uid, msai.anal_state, lzh.zip_completed_dttm HAVING SUM(CASE WHEN la.inspect_state = 'COMPLETE' THEN 1 ELSE 0 END) > 0 + AND ( + msai.anal_state = 'ING' + OR MAX(CASE WHEN la.inspect_state = 'COMPLETE' THEN la.inspect_stat_dttm END) + > lzh.zip_completed_dttm + ) """; return jdbcTemplate.query( sql, @@ -124,4 +144,4 @@ public class TrainingDataReviewJobRepository { + ")"; jdbcTemplate.update(sql, geoUids.toArray()); } -} \ No newline at end of file +}