From d4b4ffc5e99f1a6c2f70eebafa089e0eeffca726 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Tue, 20 Jan 2026 10:55:40 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EB=B3=80=ED=99=94=ED=83=90=EC=A7=80=20COG?= =?UTF-8?q?=20URL=20API=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChangeDetectionApiController.java | 7 +++++- .../dto/ChangeDetectionDto.java | 1 + .../ChangeDetectionRepositoryImpl.java | 24 ++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java index be9cdeb0..e674655f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/ChangeDetectionApiController.java @@ -74,11 +74,16 @@ public class ChangeDetectionApiController { @Parameter(description = "5k/50k 구분(SCALE_5K/SCALE_50K))", required = true) @RequestParam(defaultValue = "SCALE_50K") MapScaleType scale, + @Parameter( + description = "변화탐지 년도(차수) /year-list 의 uuid", + example = "8584e8d4-53b3-4582-bde2-28a81495a626") + @RequestParam + UUID uuid, @Parameter(description = "이전 년도", example = "2023") @RequestParam Integer beforeYear, @Parameter(description = "이후 년도", example = "2024") @RequestParam Integer afterYear, @Parameter(description = "도엽번호(5k)", example = "35905086") @RequestParam String mapSheetNum) { ChangeDetectionDto.CogUrlReq req = - new ChangeDetectionDto.CogUrlReq(beforeYear, afterYear, mapSheetNum, type, scale); + new ChangeDetectionDto.CogUrlReq(uuid, beforeYear, afterYear, mapSheetNum, type, scale); return ApiResponseDto.ok(changeDetectionService.getChangeDetectionCogUrl(req)); } diff --git a/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java b/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java index fb5953f9..a82113bf 100644 --- a/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/changedetection/dto/ChangeDetectionDto.java @@ -86,6 +86,7 @@ public class ChangeDetectionDto { @AllArgsConstructor public static class CogUrlReq { + private UUID uuid; private Integer beforeYear; private Integer afterYear; private String mapSheetNum; diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java index 4c8191a7..890a5c4d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java @@ -12,6 +12,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto; +import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.DetectSearchType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapScaleType; import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto.MapSheetList; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; @@ -111,6 +112,26 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport @Override public ChangeDetectionDto.CogUrlDto getChangeDetectionCogUrl(ChangeDetectionDto.CogUrlReq req) { + String mapSheetNum = req.getMapSheetNum(); + + if (req.getType().equals(DetectSearchType.MAPSHEET) + && req.getScale().equals(MapScaleType.SCALE_50K)) { + mapSheetNum = + queryFactory + .select(mapSheetAnalDataInferenceEntity.mapSheetNum.stringValue()) + .from(mapSheetAnalInferenceEntity) + .innerJoin(mapSheetAnalDataInferenceEntity) + .on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid)) + .where( + mapSheetAnalInferenceEntity.uuid.eq(req.getUuid()), + mapSheetAnalDataInferenceEntity + .mapSheetNum + .stringValue() + .like("%" + req.getMapSheetNum() + "%")) + .orderBy(mapSheetAnalDataInferenceEntity.mapSheetNum.asc()) + .fetchFirst(); + } + ChangeDetectionDto.CogUrlData data = queryFactory .select( @@ -128,7 +149,7 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport .year .eq(req.getBeforeYear()) .or(imageryEntity.year.eq(req.getAfterYear())), - imageryEntity.scene5k.eq(req.getMapSheetNum())) + imageryEntity.scene5k.eq(mapSheetNum)) .groupBy(mapInkx5kEntity.geom) .fetchOne(); @@ -191,6 +212,7 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport .where( mapSheetAnalInferenceEntity.uuid.eq(uuid), mapScaleTypeAnalDataSearchExpression(scale, mapSheetNum)) + .orderBy(mapSheetAnalDataInferenceGeomEntity.mapSheetNum.asc()) .fetch(); ObjectMapper mapper = new ObjectMapper(); From 3e8fd8e6a14848d8898297d1dae007d0526db60b Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Tue, 20 Jan 2026 11:00:59 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EA=B2=80=EC=88=98=ED=95=A0=EB=8B=B9=20?= =?UTF-8?q?=EC=8B=9C,=20updated=5Fdttm=20=EB=8F=84=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/TrainingDataReviewJobRepositoryImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java index d7f22994..a4cf4f63 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java @@ -99,6 +99,7 @@ public class TrainingDataReviewJobRepositoryImpl extends QuerydslRepositorySuppo .update(labelingAssignmentEntity) .set(labelingAssignmentEntity.inspectorUid, reviewerId) .set(labelingAssignmentEntity.inspectState, InspectState.UNCONFIRM.getId()) + .set(labelingAssignmentEntity.modifiedDate, ZonedDateTime.now()) .where(labelingAssignmentEntity.assignmentUid.eq(assignmentUid)) .execute(); } @@ -115,6 +116,7 @@ public class TrainingDataReviewJobRepositoryImpl extends QuerydslRepositorySuppo .update(labelingAssignmentEntity) .set(labelingAssignmentEntity.inspectorUid, reviewerId) .set(labelingAssignmentEntity.inspectState, InspectState.UNCONFIRM.getId()) + .set(labelingAssignmentEntity.modifiedDate, ZonedDateTime.now()) .where(labelingAssignmentEntity.assignmentUid.in(assignmentUids)) .execute(); } From 2343a154dcc5051879765e59ad90628f53dd07f6 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Tue, 20 Jan 2026 11:21:48 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EB=B3=80=ED=99=94=ED=83=90=EC=A7=80=20?= =?UTF-8?q?=EB=8F=84=EC=97=BD50k=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20groupBy?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../changedetection/ChangeDetectionRepositoryImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java index 890a5c4d..7397864e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/changedetection/ChangeDetectionRepositoryImpl.java @@ -335,7 +335,8 @@ public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport .on(mapSheetAnalDataInferenceEntity.mapSheetNum.stringValue().eq(mapInkx5kEntity.mapidcdNo)) .innerJoin(mapInkx5kEntity.mapInkx50k, mapInkx50kEntity) .where(mapSheetAnalInferenceEntity.uuid.eq(uuid)) - .orderBy(mapInkx5kEntity.mapidcdNo.asc()) + .groupBy(mapInkx50kEntity.mapidcdNo, mapInkx50kEntity.mapidNm) + .orderBy(mapInkx50kEntity.mapidcdNo.asc()) .fetch(); } From 71de307ad7db240380fb8669b20e6e8dede6fd5b Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 20 Jan 2026 11:21:49 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EC=B6=94=EB=A1=A0=EC=A7=84=ED=96=89=20?= =?UTF-8?q?=EB=8F=84=EC=97=BD=20=EB=AA=A9=EB=A1=9D=20api=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InferenceResultApiController.java | 20 ++++++++++++++++ .../service/InferenceResultService.java | 10 ++++++++ .../core/InferenceResultCoreService.java | 10 ++++++++ .../MapSheetLearn5kRepositoryCustom.java | 2 ++ .../MapSheetLearn5kRepositoryImpl.java | 23 +++++++++++++++++++ 5 files changed, 65 insertions(+) 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 5ffd1496..e607e403 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -490,4 +490,24 @@ public class InferenceResultApiController { return ApiResponseDto.ok(inferenceResultService.getDownloadAudit(searchReq, downloadReq)); } + + @Operation(summary = "추론 실행중인 도엽 목록", description = "추론관리 실행중인 도엽명 5k 목록") + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiResponseDto.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping(value = "/running-map/{uuid}") + public ApiResponseDto> getInferenceRunMapName( + @Parameter(description = "uuid", example = "9d213416-0e9e-429a-b037-070e6a29946e") + @PathVariable + UUID uuid) { + return ApiResponseDto.ok(inferenceResultService.getInferenceRunMapId(uuid)); + } } 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 356242aa..29807785 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 @@ -595,4 +595,14 @@ public class InferenceResultService { AuditLogDto.searchReq searchReq, DownloadReq downloadReq) { return auditLogCoreService.findLogByAccount(searchReq, downloadReq); } + + /** + * 실행중인 추론 도엽명 목록 + * + * @param uuid uuid + * @return + */ + public List getInferenceRunMapId(UUID uuid) { + return inferenceResultCoreService.getInferenceRunMapId(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 a788bea1..db1dbf79 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 @@ -476,4 +476,14 @@ public class InferenceResultCoreService { dto.setUid(entity.getUid()); return dto; } + + /** + * 실행중인 추론 도엽명 목록 + * + * @param uuid 추론 실행중인 uuid + * @return + */ + public List getInferenceRunMapId(UUID uuid) { + return mapSheetLearn5kRepository.getInferenceRunMapId(uuid); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryCustom.java index c3783621..2b17132a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryCustom.java @@ -6,4 +6,6 @@ import java.util.UUID; public interface MapSheetLearn5kRepositoryCustom { void saveFail5k(UUID uuid, List failMapIds, String type); + + List getInferenceRunMapId(UUID uuid); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java index 437abf06..665a7979 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearn5kRepositoryImpl.java @@ -1,9 +1,11 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; +import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearn5kEntity.mapSheetLearn5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; import com.querydsl.core.types.dsl.BooleanPath; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import java.util.UUID; @@ -59,4 +61,25 @@ public class MapSheetLearn5kRepositoryImpl implements MapSheetLearn5kRepositoryC .and(mapSheetLearn5kEntity.mapSheetNum.in(failMapIds))) .execute(); } + + @Override + public List getInferenceRunMapId(UUID uuid) { + return queryFactory + .select(mapInkx5kEntity.mapidNm) + .from(mapSheetLearnEntity) + .innerJoin(mapSheetLearn5kEntity) + .on(mapSheetLearn5kEntity.learn.id.eq(mapSheetLearnEntity.id)) + .innerJoin(mapInkx5kEntity) + .on( + Expressions.booleanTemplate( + "function('regexp_match', {0}, '^[0-9]+$') is not null", + mapInkx5kEntity.mapidcdNo) + .and( + mapSheetLearn5kEntity.mapSheetNum.eq( + Expressions.numberTemplate( + Long.class, "cast({0} as long)", mapInkx5kEntity.mapidcdNo)))) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .groupBy(mapInkx5kEntity.mapidNm) + .fetch(); + } } From b28d95111f32cb6f2e24387f117fd205c84d02d6 Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 20 Jan 2026 11:44:12 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=EC=B6=94=EB=A1=A0=20=EA=B2=B0=EA=B3=BC=20g?= =?UTF-8?q?eom=20=ED=85=8C=EC=9D=B4=EB=B8=94=EC=A0=80=EC=9E=A5=20=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Inference/InferenceResultRepositoryImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java index 3d51412b..c2449f2b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultRepositoryImpl.java @@ -217,11 +217,15 @@ public class InferenceResultRepositoryImpl implements InferenceResultRepositoryC msl.m2_model_batch_id, msl.m3_model_batch_id ) - inner join tb_map_sheet_anal_data_inference msadi - on msadi.anal_uid = msl.anal_uid + INNER JOIN tb_map_sheet_anal_data_inference msadi + ON msadi.anal_uid = msl.anal_uid AND r.map_id ~ '^[0-9]+$' - AND r.map_id::bigint = msadi.map_sheet_num - where msl.anal_uid = :analUid + AND r.map_id::bigint = msadi.map_sheet_num + WHERE msl.anal_uid = :analUid + AND r.before_c is not null + AND r.before_p is not null + AND r.after_c is not null + AND r.after_p is not null ORDER BY r.uid, r.created_date DESC NULLS LAST ) x ON CONFLICT (result_uid) From f857ec0f256f25cacf4ff518accafb592e6dd559 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Tue, 20 Jan 2026 11:54:43 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=EA=B2=80=EC=88=98=ED=95=A0=20=EB=95=8C=20g?= =?UTF-8?q?eom=20=ED=85=8C=EC=9D=B4=EB=B8=94=EB=8F=84=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trainingdata/TrainingDataReviewRepositoryImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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 94358faf..cd3259fa 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 @@ -209,6 +209,15 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport @Override public void updateReviewPolygonClass( Long inferenceGeomUid, Geometry geometry, Properties properties, String status) { + + // inference_geom 테이블에 상태 업데이트 + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.testStateDttm, ZonedDateTime.now()) + .set(mapSheetAnalDataInferenceGeomEntity.testState, status) + .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(inferenceGeomUid)) + .execute(); + // inference_geom 테이블 정보 가져오기 MapSheetAnalDataInferenceGeomEntity entity = queryFactory From 91c5c0c116d887f5ebcd906ac4c28af5a2e1ef9a Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Tue, 20 Jan 2026 12:15:26 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=EA=B2=80=EC=88=98=ED=95=A0=EB=8B=B9=20?= =?UTF-8?q?=EC=8B=9C,=20geom=20=ED=85=8C=EC=9D=B4=EB=B8=94=EB=8F=84=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/TrainingDataReviewJobCoreService.java | 4 ++++ .../TrainingDataReviewJobRepositoryCustom.java | 2 ++ .../TrainingDataReviewJobRepositoryImpl.java | 11 +++++++++++ .../service/TrainingDataReviewJobService.java | 8 +++++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java index 5260f7af..bc47eeff 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java @@ -37,4 +37,8 @@ public class TrainingDataReviewJobCoreService { public void lockInspectors(Long analUid, List reviewerIds) { trainingDataReviewJobRepository.lockInspectors(analUid, reviewerIds); } + + public void updateGeomUidTestState(List geomUids) { + trainingDataReviewJobRepository.updateGeomUidTestState(geomUids); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java index f83b2f77..f3030013 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java @@ -16,4 +16,6 @@ public interface TrainingDataReviewJobRepositoryCustom { void assignReviewerBatch(List assignmentUids, String reviewerId); Tasks findAssignmentTask(String assignmentUid); + + void updateGeomUidTestState(List geomUids); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java index a4cf4f63..a7316cee 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java @@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.postgres.repository.scheduler; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingInspectorEntity.labelingInspectorEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; @@ -134,4 +135,14 @@ public class TrainingDataReviewJobRepositoryImpl extends QuerydslRepositorySuppo .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(assignmentUid))) .fetchOne(); } + + @Override + public void updateGeomUidTestState(List geomUids) { + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.testState, InspectState.UNCONFIRM.getId()) + .set(mapSheetAnalDataInferenceGeomEntity.updatedDttm, ZonedDateTime.now()) + .where(mapSheetAnalDataInferenceGeomEntity.geoUid.in(geomUids)) + .execute(); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java index 25bf791b..6b2dc85a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java @@ -80,8 +80,10 @@ public class TrainingDataReviewJobService { List assignmentUids = assignedTasks.stream().map(Tasks::getAssignmentUid).toList(); - trainingDataReviewJobCoreService.assignReviewerBatch(assignmentUids, reviewerId); + + List geomUids = assignedTasks.stream().map(Tasks::getInferenceUid).toList(); + trainingDataReviewJobCoreService.updateGeomUidTestState(geomUids); }); } } catch (Exception e) { @@ -127,5 +129,9 @@ public class TrainingDataReviewJobService { trainingDataReviewJobCoreService.lockInspectors(analUid, order); trainingDataReviewJobCoreService.assignReviewer(task.getAssignmentUid(), order.getFirst()); + + List geomUids = new ArrayList<>(); + geomUids.add(task.getInferenceUid()); + trainingDataReviewJobCoreService.updateGeomUidTestState(geomUids); } } From 1fc8552e2678a2dc4f71374c4fe42ddcf4fac1c7 Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 20 Jan 2026 14:22:51 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=EC=B6=94=EB=A1=A0=20=EA=B2=B0=EA=B3=BC=20g?= =?UTF-8?q?eom=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MapSheetLearnRepositoryImpl.java | 71 +++++++++---------- 1 file changed, 34 insertions(+), 37 deletions(-) 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 7c249633..48ba9e7f 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 @@ -24,6 +24,7 @@ import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; import com.kamco.cd.kamcoback.postgres.entity.QModelMngEntity; import com.querydsl.core.BooleanBuilder; 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.NumberExpression; @@ -360,42 +361,51 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto @Override public Page getInferenceGeomList(UUID uuid, SearchGeoReq searchGeoReq) { Pageable pageable = searchGeoReq.toPageable(); - BooleanBuilder builder = new BooleanBuilder(); + BooleanBuilder where = new BooleanBuilder(); - // analUid로 분석 정보 조회 + // 1) 분석 엔티티 조회 MapSheetLearnEntity analEntity = queryFactory .selectFrom(mapSheetLearnEntity) .where(mapSheetLearnEntity.uuid.eq(uuid)) .fetchOne(); - if (Objects.isNull(analEntity)) { + if (analEntity == null) { throw new CustomApiException("NOT_FOUND_DATA", HttpStatus.NOT_FOUND); } - // 추론결과 id - builder.and(mapSheetAnalInferenceEntity.learnId.eq(analEntity.getId())); + // 2) where 조건 + where.and(mapSheetAnalInferenceEntity.learnId.eq(analEntity.getId())); - // 기준년도 분류 - if (searchGeoReq.getTargetClass() != null && !searchGeoReq.getTargetClass().equals("")) { - builder.and( + if (searchGeoReq.getTargetClass() != null && !searchGeoReq.getTargetClass().isBlank()) { + where.and( mapSheetAnalDataInferenceGeomEntity.classAfterCd.eq( searchGeoReq.getTargetClass().toLowerCase())); } - // 비교년도 분류 - if (searchGeoReq.getCompareClass() != null && !searchGeoReq.getCompareClass().equals("")) { - builder.and( + if (searchGeoReq.getCompareClass() != null && !searchGeoReq.getCompareClass().isBlank()) { + where.and( mapSheetAnalDataInferenceGeomEntity.classBeforeCd.eq( searchGeoReq.getCompareClass().toLowerCase())); } - // 분석도엽 if (searchGeoReq.getMapSheetNum() != null) { - Long mapSheetNum = searchGeoReq.getMapSheetNum(); - builder.and(mapSheetAnalDataInferenceGeomEntity.mapSheetNum.like("%" + mapSheetNum + "%")); + // + // where.and(mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq(searchGeoReq.getMapSheetNum())); + where.and( + mapSheetAnalDataInferenceGeomEntity.mapSheetNum.like( + "%" + searchGeoReq.getMapSheetNum() + "%")); } + // 3) inkx 조인 조건: JPQL/HQL에서 '~' 불가 → function('regexp_match', ...) 사용 + BooleanExpression inkxIsNumeric = + Expressions.booleanTemplate( + "function('regexp_match', {0}, '^[0-9]+$') is not null", mapInkx5kEntity.mapidcdNo); + + NumberExpression inkxNoAsLong = + Expressions.numberTemplate(Long.class, "cast({0} as long)", mapInkx5kEntity.mapidcdNo); + + // 4) content List content = queryFactory .select( @@ -411,45 +421,32 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto mapSheetAnalDataInferenceGeomEntity.classAfterCd, mapSheetAnalDataInferenceGeomEntity.classAfterProb, mapSheetAnalDataInferenceGeomEntity.mapSheetNum, - mapInkx5kEntity.mapidNm - // Expressions.stringTemplate( - // "ST_AsGeoJSON({0})", - // mapSheetAnalDataInferenceGeomEntity.geom), - // Expressions.stringTemplate( - // "ST_AsGeoJSON({0})", - // mapSheetAnalDataInferenceGeomEntity.geomCenter) - )) + mapInkx5kEntity.mapidNm)) .from(mapSheetAnalInferenceEntity) .join(mapSheetAnalDataInferenceEntity) .on(mapSheetAnalDataInferenceEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) .join(mapSheetAnalDataInferenceGeomEntity) .on(mapSheetAnalDataInferenceGeomEntity.dataUid.eq(mapSheetAnalDataInferenceEntity.id)) .join(mapInkx5kEntity) - .on( - mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq( - Expressions.numberTemplate( - Long.class, "CAST({0} AS long)", mapInkx5kEntity.mapidcdNo))) - .where(builder) + .on(inkxIsNumeric.and(mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq(inkxNoAsLong))) + .where(where) + .orderBy(mapSheetAnalDataInferenceGeomEntity.geoUid.desc()) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); - long total = + // 5) total (조인 최소화 유지) + Long total = queryFactory - .select(mapSheetAnalDataInferenceGeomEntity.geoUid) + .select(mapSheetAnalDataInferenceGeomEntity.geoUid.count()) .from(mapSheetAnalInferenceEntity) .join(mapSheetAnalDataInferenceEntity) .on(mapSheetAnalDataInferenceEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) .join(mapSheetAnalDataInferenceGeomEntity) .on(mapSheetAnalDataInferenceGeomEntity.dataUid.eq(mapSheetAnalDataInferenceEntity.id)) - .join(mapInkx5kEntity) - .on( - mapSheetAnalDataInferenceGeomEntity.mapSheetNum.eq( - Expressions.numberTemplate( - Long.class, "CAST({0} AS long)", mapInkx5kEntity.mapidcdNo))) - .where(builder) - .fetchCount(); + .where(where) + .fetchOne(); - return new PageImpl<>(content, pageable, total); + return new PageImpl<>(content, pageable, total == null ? 0L : total); } }