From 086eb20e8d519c6228187219e456a51edcdfe754 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 27 Feb 2026 18:54:03 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=99=EC=8A=B5=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=20=EB=AA=A9=EB=A1=9D=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD,=20=EC=A3=BC=EC=84=9D=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/JwtAuthenticationFilter.java | 5 +- .../cd/kamcoback/auth/JwtTokenProvider.java | 3 ++ .../kamcoback/auth/RefreshTokenService.java | 18 +++++++ .../InferenceManualApiController.java | 35 ++++++++++++- .../InferenceResultShpApiController.java | 1 + .../service/InferenceManualService.java | 51 ++++++++++++++++--- .../cd/kamcoback/model/dto/ModelMngDto.java | 5 +- .../core/InferenceResultCoreService.java | 26 ++++++++++ .../postgres/core/ModelMngCoreService.java | 14 +++++ .../postgres/entity/ModelMngEntity.java | 3 +- ...ferenceResultsTestingRepositoryCustom.java | 15 ++++++ ...InferenceResultsTestingRepositoryImpl.java | 27 ++++++++++ .../MapSheetLearn5kRepositoryCustom.java | 30 +++++++++++ .../label/LabelWorkRepositoryImpl.java | 15 ++++++ .../model/ModelMngRepositoryCustom.java | 8 +++ .../model/ModelMngRepositoryImpl.java | 10 ++++ .../service/MapSheetInferenceJobService.java | 1 + 17 files changed, 256 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/JwtAuthenticationFilter.java b/src/main/java/com/kamco/cd/kamcoback/auth/JwtAuthenticationFilter.java index e6559ac4..dd43d230 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/JwtAuthenticationFilter.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/JwtAuthenticationFilter.java @@ -19,6 +19,7 @@ import org.springframework.web.filter.OncePerRequestFilter; public class JwtAuthenticationFilter extends OncePerRequestFilter { private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher(); + // JWT 필터를 타지 않게 할 URL 패턴들 private static final String[] EXCLUDE_PATHS = { "/api/auth/signin", "/api/auth/refresh", "/api/auth/logout", "/api/members/*/password" }; @@ -30,8 +31,10 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + // HTTP 요청 헤더에서 JWT 토큰 꺼내기 String token = resolveToken(request); + // JWT 토큰을 검증하고, 인증된 사용자로 SecurityContext에 등록 if (token != null && jwtTokenProvider.isValidToken(token)) { String username = jwtTokenProvider.getSubject(token); @@ -57,7 +60,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { return false; } - // /api/members/{memberId}/password + // HTTP 요청 헤더에서 JWT 토큰 꺼내기 private String resolveToken(HttpServletRequest request) { String bearer = request.getHeader("Authorization"); if (bearer != null && bearer.startsWith("Bearer ")) { diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/JwtTokenProvider.java b/src/main/java/com/kamco/cd/kamcoback/auth/JwtTokenProvider.java index 3c1b87df..d5579690 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/JwtTokenProvider.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/JwtTokenProvider.java @@ -11,6 +11,7 @@ import javax.crypto.SecretKey; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +/** 토큰 생성 */ @Component public class JwtTokenProvider { @@ -31,10 +32,12 @@ public class JwtTokenProvider { this.key = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)); } + // Access Token 생성 public String createAccessToken(String subject) { return createToken(subject, accessTokenValidityInMs); } + // Refresh Token 생성 public String createRefreshToken(String subject) { return createToken(subject, refreshTokenValidityInMs); } diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/RefreshTokenService.java b/src/main/java/com/kamco/cd/kamcoback/auth/RefreshTokenService.java index 79e02ce6..d4e09ca2 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/RefreshTokenService.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/RefreshTokenService.java @@ -6,6 +6,7 @@ import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; +/** redis token handler */ @Service @RequiredArgsConstructor public class RefreshTokenService { @@ -13,16 +14,33 @@ public class RefreshTokenService { private final StringRedisTemplate redisTemplate; private static final String PREFIX = "RT:"; + /** + * Refresh Token 저장 + * + * @param username 사용자 식별값 (보통 username or userId) + * @param refreshToken 발급된 Refresh Token + * @param ttlMillis 토큰 만료 시간 (밀리초 단위) + */ public void save(String username, String refreshToken, long ttlMillis) { ValueOperations ops = redisTemplate.opsForValue(); ops.set(PREFIX + username, refreshToken, Duration.ofMillis(ttlMillis)); } + /** + * Refresh Token 검증 + * + *

1. Redis에 저장된 값 조회 2. 클라이언트가 보낸 refreshToken과 비교 3. 동일하면 true + */ public boolean validate(String username, String refreshToken) { String stored = redisTemplate.opsForValue().get(PREFIX + username); return stored != null && stored.equals(refreshToken); } + /** + * Refresh Token 삭제 + * + *

로그아웃 시 호출 Redis에서 해당 사용자 토큰 제거 + */ public void delete(String username) { redisTemplate.delete(PREFIX + username); } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceManualApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceManualApiController.java index 8286de80..707c922a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceManualApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceManualApiController.java @@ -1,10 +1,43 @@ package com.kamco.cd.kamcoback.inference; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultShpDto; +import com.kamco.cd.kamcoback.inference.service.InferenceManualService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +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 java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +@Tag(name = "추론결과 데이터 생성", description = "추론결과 데이터 생성 API") @RestController @RequiredArgsConstructor @RequestMapping("/api/inference/manual") -public class InferenceManualApiController {} +public class InferenceManualApiController { + + private final InferenceManualService inferenceManualService; + + @Operation(summary = "추론 결과로 추론 목록 및 shp 생성", description = "추론 결과로 추론 목록 및 shp 생성") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "데이터 저장 성공", + content = + @Content( + mediaType = "application/json", + schema = + @Schema(implementation = InferenceResultShpDto.InferenceCntDto.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @PostMapping("/save") + public void saveTesting(List batchIds) { + inferenceManualService.saveResultsTesting(batchIds); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultShpApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultShpApiController.java index ed310a8f..8c478152 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultShpApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultShpApiController.java @@ -53,6 +53,7 @@ public class InferenceResultShpApiController { @PostMapping("/shp/{uuid}") public ApiResponseDto createShp( @Parameter(example = "feb2ec0b-a0f7-49ca-95e4-98b2231bdaae") @PathVariable UUID uuid) { + // shp 파일 수동생성 inferenceResultShpService.createShp(uuid); return ApiResponseDto.createOK(null); } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceManualService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceManualService.java index 2035fb20..71f90cf8 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceManualService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceManualService.java @@ -1,24 +1,61 @@ package com.kamco.cd.kamcoback.inference.service; +import com.kamco.cd.kamcoback.common.exception.CustomApiException; import com.kamco.cd.kamcoback.inference.dto.InferenceResultsTestingDto; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; +import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class InferenceManualService { private final InferenceResultCoreService inferenceResultCoreService; + private final ModelMngCoreService modelMngCoreService; - public void getResultsTesting(List batchIds) { - List resultList = - inferenceResultCoreService.getInferenceResults(batchIds); + public void saveResultsTesting(List batchIds) { + // 배치 id로 추론 결과 testing 테이블에서 조회 + List resultInfoList = + inferenceResultCoreService.getInferenceResultGroupList(batchIds); - if (resultList.isEmpty()) {} - - for (InferenceResultsTestingDto.Basic result : resultList) { - System.out.println(result); + if (resultInfoList.isEmpty()) { + throw new CustomApiException("NOT_FOUND", HttpStatus.NOT_FOUND); } + + // Long compareYear = resultInfoList.getFirst().getBeforeYear(); + // Long targetYear = resultInfoList.getFirst().getAfterYear(); + // String title = compareYear + "-" + targetYear + "변화탐지"; + // + // InferenceResultDto.RegReq inferenceDto = new InferenceResultDto.RegReq(); + // inferenceDto.setTitle(title); + // inferenceDto.setCompareYyyy(Integer.valueOf(compareYear)); + // inferenceDto.setTargetYyyy(targetYear); + // // 추론 기본정보 저장 + // for (InferenceResultsTestingDto.Basic result : resultInfoList) { + // + // if (result.getModelVersion().startsWith(ModelType.G1.getId()) || + // result.getModelVersion().startsWith("M1")) { + // ModelMngDto.Basic model = + // modelMngCoreService.findByModelVer(result.getModelVersion()); + // inferenceDto.setModel1Uuid(model.getUuid()); + // + // } else if (result.getModelVersion().startsWith("G2") || + // result.getModelVersion().startsWith("M2")) { + // ModelMngDto.Basic model = + // modelMngCoreService.findByModelVer(result.getModelVersion()); + // inferenceDto.setModel2Uuid(model.getUuid()); + // + // } else if (result.getModelVersion().startsWith("G3") || + // result.getModelVersion().startsWith("M3")) { + // ModelMngDto.Basic model = + // modelMngCoreService.findByModelVer(result.getModelVersion()); + // inferenceDto.setModel3Uuid(model.getUuid()); + // } + // + // System.out.println(result); + // } + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/model/dto/ModelMngDto.java b/src/main/java/com/kamco/cd/kamcoback/model/dto/ModelMngDto.java index 6cf752bc..2d76fd1f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/model/dto/ModelMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/model/dto/ModelMngDto.java @@ -67,6 +67,7 @@ public class ModelMngDto { private String clsModelVersion; private Double priority; private String memo; + private UUID uuid; public Basic( Long modelUid, @@ -89,7 +90,8 @@ public class ModelMngDto { String clsModelFileName, String clsModelVersion, double priority, - String memo) { + String memo, + UUID uuid) { this.modelUid = modelUid; this.modelVer = modelVer; this.createCompleteDttm = createCompleteDttm; @@ -111,6 +113,7 @@ public class ModelMngDto { this.clsModelVersion = clsModelVersion; this.priority = priority; this.memo = memo; + this.uuid = 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 fde336b7..2b922381 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 @@ -575,11 +575,37 @@ public class InferenceResultCoreService { return mapSheetLearn5kRepository.getInferenceRunMapId(uuid); } + /** + * 실패 처리되어야 할 목록 중에 아직 실패로 표시되지 않은 ID 조회 + * + * @param uuid 추론 uuid + * @param failMapIds AI API 연결하여 조회한 실패 job id + * @param type 모델 타입 + * @return job id + */ public List findFail5kList(UUID uuid, List failMapIds, String type) { return mapSheetLearn5kRepository.findFail5kList(uuid, failMapIds, type); } + /** + * 완료된 것으로 들어온 목록 중 실제로 존재하는 5k jobId 조회 + * + * @param uuid 추론 uuid + * @param completedIds AI API 연결하여 조회한 성공 job id + * @param type 모델 타입 + * @return job id + */ public List findCompleted5kList(UUID uuid, List completedIds, String type) { return mapSheetLearn5kRepository.findCompleted5kList(uuid, completedIds, type); } + + /** + * testing 테이블 결과로 기본정보 조회 + * + * @param batchIds batch id + * @return batch id, model ver, year 정보 + */ + public List getInferenceResultGroupList(List batchIds) { + return inferenceResultsTestingRepository.getInferenceResultGroupList(batchIds); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/ModelMngCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/ModelMngCoreService.java index f1ba67e6..f061d43b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/ModelMngCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/ModelMngCoreService.java @@ -109,4 +109,18 @@ public class ModelMngCoreService { .orElseThrow(() -> new EntityNotFoundException("모델 정보가 없습니다.")); return entity.toDto(); } + + /** + * 모델 버전명으로 조회 + * + * @param ver 모델버전 + * @return 모델정보 + */ + public ModelMngDto.Basic findByModelVer(String ver) { + ModelMngEntity entity = + modelMngRepository + .findByModelVer(ver) + .orElseThrow(() -> new EntityNotFoundException("모델 정보가 없습니다.")); + return entity.toDto(); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java index 516a963e..359e13ac 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/ModelMngEntity.java @@ -117,6 +117,7 @@ public class ModelMngEntity extends CommonDateEntity { this.clsModelFileName, this.clsModelVersion, this.priority, - this.memo); + this.memo, + this.uuid); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java index ee8e13fd..8c791aee 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryCustom.java @@ -1,10 +1,17 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultsTestingDto; import com.kamco.cd.kamcoback.postgres.entity.InferenceResultsTestingEntity; import java.util.List; public interface InferenceResultsTestingRepositoryCustom { + /** + * 추론 결과 조회 + * + * @param batchIds batch id + * @return 추론 결과 목록 + */ List getInferenceResultList(List batchIds); /** @@ -14,4 +21,12 @@ public interface InferenceResultsTestingRepositoryCustom { * @return batchIds 조회 count 수 */ Long getInferenceResultCnt(List batchIds); + + /** + * testing 테이블 결과로 기본정보 조회 + * + * @param batchIds batch id + * @return batch id, model ver, year 정보 + */ + List getInferenceResultGroupList(List batchIds); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryImpl.java index 2459d1c6..2964c43d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/InferenceResultsTestingRepositoryImpl.java @@ -2,7 +2,9 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; import static com.kamco.cd.kamcoback.postgres.entity.QInferenceResultsTestingEntity.inferenceResultsTestingEntity; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultsTestingDto; import com.kamco.cd.kamcoback.postgres.entity.InferenceResultsTestingEntity; +import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import lombok.RequiredArgsConstructor; @@ -47,4 +49,29 @@ public class InferenceResultsTestingRepositoryImpl return cnt == null ? 0L : cnt; } + + @Override + public List getInferenceResultGroupList(List batchIds) { + return queryFactory + .select( + Projections.constructor( + InferenceResultsTestingDto.Basic.class, + inferenceResultsTestingEntity.batchId, + inferenceResultsTestingEntity.modelVersion.max(), + inferenceResultsTestingEntity.beforeYear.max(), + inferenceResultsTestingEntity.afterYear.max())) + .from(inferenceResultsTestingEntity) + .where( + inferenceResultsTestingEntity + .batchId + .in(batchIds) + .and(inferenceResultsTestingEntity.afterC.isNotNull()) + .and(inferenceResultsTestingEntity.afterP.isNotNull())) + .groupBy( + inferenceResultsTestingEntity.batchId, + inferenceResultsTestingEntity.modelVersion, + inferenceResultsTestingEntity.beforeYear, + inferenceResultsTestingEntity.afterYear) + .fetch(); + } } 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 66eea8d8..a4d654b8 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,12 +6,42 @@ import java.util.UUID; public interface MapSheetLearn5kRepositoryCustom { + /** + * 추론 실행 실패 정보 저장 + * + * @param uuid 추론 uuid + * @param jobDto AI API에서 조회한 Job 정보 + * @param type 모델 타입 + */ void saveFail5k(UUID uuid, JobStatusDto jobDto, String type); + /** + * 추론 실행중인 Job id 저장 + * + * @param uuid 추론 uuid + * @param jobDto AI API에서 조회한 Job 정보 + * @param type 모델 타입 + */ void saveJobId(UUID uuid, JobStatusDto jobDto, String type); + /** + * 실패 처리되어야 할 목록 중에 아직 실패로 표시되지 않은 ID 조회 + * + * @param uuid 추론 uuid + * @param failIds AI API 연결하여 조회한 실패 job id + * @param type 모델 타입 + * @return 실패로 표시되지 않은 ID + */ List findFail5kList(UUID uuid, List failIds, String type); + /** + * 완료된 것으로 들어온 목록 중 실제로 존재하는 5k jobId 조회 + * + * @param uuid 추론 uuid + * @param completedIds AI API 연결하여 조회한 실패 job id + * @param type 모델 타입 + * @return 성공한 job id + */ List findCompleted5kList(UUID uuid, List completedIds, String type); /** diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java index f84ff0ba..9a578244 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/label/LabelWorkRepositoryImpl.java @@ -4,6 +4,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapShe import com.kamco.cd.kamcoback.common.enums.ImageryFitStatus; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; import com.kamco.cd.kamcoback.label.dto.LabelWorkDto; import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelWorkMng; @@ -166,6 +167,19 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom { .from(labelingAssignmentEntity) .where(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)); + /** 순서 ING 진행중 ASSIGNED 작업할당 PENDING 작업대기 FINISH 종료 */ + NumberExpression stateOrder = + new CaseBuilder() + .when(mapSheetAnalInferenceEntity.analState.eq(LabelMngState.ING.getId())) + .then(0) + .when(mapSheetAnalInferenceEntity.analState.eq(LabelMngState.ASSIGNED.getId())) + .then(1) + .when(mapSheetAnalInferenceEntity.analState.eq(LabelMngState.PENDING.getId())) + .then(2) + .when(mapSheetAnalInferenceEntity.analState.eq(LabelMngState.FINISH.getId())) + .then(3) + .otherwise(99); + List foundContent = queryFactory .select( @@ -251,6 +265,7 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom { mapSheetLearnEntity.uid, mapSheetLearnEntity.uuid) .orderBy( + stateOrder.asc(), mapSheetAnalInferenceEntity.targetYyyy.desc(), mapSheetAnalInferenceEntity.compareYyyy.desc(), mapSheetAnalInferenceEntity.stage.desc()) diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryCustom.java index 0e52cf46..9ac7333c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryCustom.java @@ -39,4 +39,12 @@ public interface ModelMngRepositoryCustom { Optional findByModelId(Long id); Optional findByModelId(UUID id); + + /** + * 버전명으로 모델 조회 + * + * @param ver 모델버전 + * @return 모델정보 + */ + Optional findByModelVer(String ver); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java index f6026c12..b3ad9d9c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/model/ModelMngRepositoryImpl.java @@ -246,4 +246,14 @@ public class ModelMngRepositoryImpl extends QuerydslRepositorySupport return Optional.ofNullable( queryFactory.selectFrom(modelMngEntity).where(modelMngEntity.uuid.eq(uuid)).fetchOne()); } + + @Override + public Optional findByModelVer(String ver) { + return Optional.ofNullable( + queryFactory + .selectFrom(modelMngEntity) + .where(modelMngEntity.modelVer.eq(ver)) + .limit(1) + .fetchOne()); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java index efb61f16..0ca6383d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java @@ -423,6 +423,7 @@ public class MapSheetInferenceJobService { .map(Long::valueOf) .toList(); + // 추론 실행 도엽별 정보 조회 List jobIds = inferenceResultCoreService.findFail5kList(uuid, failedIds, type); Set jobIdSet = new HashSet<>(jobIds);