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 35391d74..b946c6ab 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -272,14 +272,14 @@ public class InferenceResultApiController { content = @Content( mediaType = "application/json", - schema = @Schema(implementation = Page.class))), + schema = @Schema(implementation = InferenceStatusDetailDto.class))), @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @GetMapping("/status/{uuid}") public ApiResponseDto getInferenceStatus( @io.swagger.v3.oas.annotations.parameters.RequestBody( - description = "추론진행현왕 요청 정보", + description = "추론 진행현황 정보", required = true) @PathVariable UUID uuid) { diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index cdfc5f0b..128baa9a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -8,7 +8,6 @@ import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import java.time.Duration; import java.time.LocalDate; import java.time.ZonedDateTime; import java.util.Arrays; @@ -234,140 +233,179 @@ public class InferenceResultDto { @Getter @Setter @NoArgsConstructor - @AllArgsConstructor + @Schema(name = "InferenceStatusDetailDto", description = "추론(변화탐지) 진행상태") public static class InferenceStatusDetailDto { + @Schema(description = "탐지대상 도엽수") + private Long detectingCnt; + + @Schema(description = "모델1 분석 대기") + private Integer m1PendingJobs; + + @Schema(description = "모델2 분석 대기") + private Integer m2PendingJobs; + + @Schema(description = "모델3 분석 대기") + private Integer m3PendingJobs; + + @Schema(description = "모델1 분석 완료") + private Integer m1CompletedJobs; + + @Schema(description = "모델2 분석 완료") + private Integer m2CompletedJobs; + + @Schema(description = "모델3 분석 완료") + private Integer m3CompletedJobs; + + @Schema(description = "모델1 분석 실패") + private Integer m1FailedJobs; + + @Schema(description = "모델2 분석 실패") + private Integer m2FailedJobs; + + @Schema(description = "모델3 분석 실패") + private Integer m3FailedJobs; + + @Schema(description = "모델1 사용시간 시작일시") + @JsonFormatDttm + ZonedDateTime m1ModelStartDttm; + + @Schema(description = "모델2 사용시간 시작일시") + @JsonFormatDttm + ZonedDateTime m2ModelStartDttm; + + @Schema(description = "모델3 사용시간 시작일시") + @JsonFormatDttm + ZonedDateTime m3ModelStartDttm; + + @Schema(description = "모델1 사용시간 종료일시") + @JsonFormatDttm + ZonedDateTime m1ModelEndDttm; + + @Schema(description = "모델2 사용시간 종료일시") + @JsonFormatDttm + ZonedDateTime m2ModelEndDttm; + + @Schema(description = "모델3 사용시간 종료일시") + @JsonFormatDttm + ZonedDateTime m3ModelEndDttm; + + @Schema(description = "변화탐지 제목") private String title; + + @Schema(description = "비교년도") private Integer compareYyyy; + + @Schema(description = "기준년도") private Integer targetYyyy; + + @Schema(description = "회차") + private Integer stage; + + @Schema(description = "변화탐지 시작") + @JsonFormatDttm + private ZonedDateTime inferStartDttm; + + @Schema(description = "변화탐지 종료") + @JsonFormatDttm + private ZonedDateTime inferEndDttm; + + @Schema(description = "변화탐지 옵션") private String detectOption; + + @Schema(description = "분석도엽") private String mapSheetScope; - @JsonFormatDttm private ZonedDateTime inferStartDttm; - @JsonFormatDttm private ZonedDateTime inferEndDttm; - private Long detectingCnt = 0L; - private Long detectingEndCnt = 0L; - @JsonFormatDttm private ZonedDateTime m1ModelStartDttm; - @JsonFormatDttm private ZonedDateTime m1ModelEndDttm; - @JsonFormatDttm private ZonedDateTime m2ModelStartDttm; - @JsonFormatDttm private ZonedDateTime m2ModelEndDttm; - @JsonFormatDttm private ZonedDateTime m3ModelStartDttm; - @JsonFormatDttm private ZonedDateTime m3ModelEndDttm; + @Schema(description = "모델1 버전") + private String modelVer1; - private String model1Ver; - private String model2Ver; - private String model3Ver; - private String usedServerName; - private String model1VerStatus = "PROCCESING"; - private String model1VerStatusName = "진행중"; - private String model2VerStatus = "PROCCESING"; - private String model2VerStatusName = "진행중"; - private String model3VerStatus = "PROCCESING"; - private String model3VerStatusName = "진행중"; + @Schema(description = "모델2 버전") + private String modelVer2; + + @Schema(description = "모델3 버전") + private String modelVer3; public InferenceStatusDetailDto( + Long detectingCnt, + Integer m1PendingJobs, + Integer m2PendingJobs, + Integer m3PendingJobs, + Integer m1CompletedJobs, + Integer m2CompletedJobs, + Integer m3CompletedJobs, + Integer m1FailedJobs, + Integer m2FailedJobs, + Integer m3FailedJobs, + ZonedDateTime m1ModelStartDttm, + ZonedDateTime m2ModelStartDttm, + ZonedDateTime m3ModelStartDttm, + ZonedDateTime m1ModelEndDttm, + ZonedDateTime m2ModelEndDttm, + ZonedDateTime m3ModelEndDttm, String title, Integer compareYyyy, Integer targetYyyy, - String detectOption, - String mapSheetScope, + Integer stage, ZonedDateTime inferStartDttm, ZonedDateTime inferEndDttm, - Long detectingCnt, - Long detectingEndCnt, - ZonedDateTime m1ModelStartDttm, - ZonedDateTime m1ModelEndDttm, - ZonedDateTime m2ModelStartDttm, - ZonedDateTime m2ModelEndDttm, - ZonedDateTime m3ModelStartDttm, - ZonedDateTime m3ModelEndDttm, - String model1Ver, - String model2Ver, - String model3Ver) { + String detectOption, + String mapSheetScope, + String modelVer1, + String modelVer2, + String modelVer3) { + this.detectingCnt = detectingCnt; + this.m1PendingJobs = m1PendingJobs; + this.m2PendingJobs = m2PendingJobs; + this.m3PendingJobs = m3PendingJobs; + this.m1CompletedJobs = m1CompletedJobs; + this.m2CompletedJobs = m2CompletedJobs; + this.m3CompletedJobs = m3CompletedJobs; + this.m1FailedJobs = m1FailedJobs; + this.m2FailedJobs = m2FailedJobs; + this.m3FailedJobs = m3FailedJobs; + this.m1ModelStartDttm = m1ModelStartDttm; + this.m2ModelStartDttm = m2ModelStartDttm; + this.m3ModelStartDttm = m3ModelStartDttm; + this.m1ModelEndDttm = m1ModelEndDttm; + this.m2ModelEndDttm = m2ModelEndDttm; + this.m3ModelEndDttm = m3ModelEndDttm; this.title = title; this.compareYyyy = compareYyyy; this.targetYyyy = targetYyyy; - this.detectOption = detectOption; - this.mapSheetScope = mapSheetScope; + this.stage = stage; this.inferStartDttm = inferStartDttm; this.inferEndDttm = inferEndDttm; - this.detectingCnt = detectingCnt; - this.detectingEndCnt = detectingEndCnt; - this.m1ModelStartDttm = m1ModelStartDttm; - this.m1ModelEndDttm = m1ModelEndDttm; - this.m2ModelStartDttm = m2ModelStartDttm; - this.m2ModelEndDttm = m2ModelEndDttm; - this.m3ModelStartDttm = m3ModelStartDttm; - this.m3ModelEndDttm = m3ModelEndDttm; - this.model1Ver = model1Ver; - this.model2Ver = model2Ver; - this.model3Ver = model3Ver; - - if (this.detectingEndCnt == null) { - this.detectingEndCnt = 0L; - } + this.detectOption = detectOption; + this.mapSheetScope = mapSheetScope; + this.modelVer1 = modelVer1; + this.modelVer2 = modelVer2; + this.modelVer3 = modelVer3; } - public String getDetectOptionName() { - if (this.detectOption.equals("EXCL")) { - return "추론제외"; - } - return "이전 년도 도엽 사용"; + @JsonProperty("progress") + private int getProgress() { + long tiles = this.detectingCnt; // 도엽수 + int models = 3; // 모델 개수 + int completed = + this.m1CompletedJobs + + this.m2CompletedJobs + + this.m3CompletedJobs + + this.m1FailedJobs + + this.m2FailedJobs + + this.m3FailedJobs; // 완료수 + + long total = tiles * models; // 전체 작업량 + return (int) ((completed * 100L) / total); } - public String getMapSheetScopeName() { - if (this.mapSheetScope.equals("ALL")) { - return "전체"; - } - return "부분"; + @JsonProperty("detectOptionName") + private String getDetectOptionName() { + return DetectOption.getDescByCode(this.detectOption); } - public double getDetectingRate() { - if (this.detectingCnt == null || this.detectingCnt == 0L) { - return 0.0; - } - - if (this.detectingEndCnt == null) { - this.detectingEndCnt = 0L; - } - - return (double) (this.detectingEndCnt / this.detectingCnt) * 100.0; - } - - public String getM1Duration() { - if (this.m1ModelStartDttm == null || this.m1ModelEndDttm == null) { - return "00:00:00"; - } - Duration duration = Duration.between(m1ModelStartDttm, m1ModelEndDttm); - long hours = duration.toHours(); - long minutes = duration.toMinutesPart(); - long seconds = duration.toSecondsPart(); - - return String.format("%02d:%02d:%02d", hours, minutes, seconds); - } - - public String getM2Duration() { - if (this.m2ModelStartDttm == null || this.m2ModelEndDttm == null) { - return "00:00:00"; - } - Duration duration = Duration.between(this.m2ModelStartDttm, this.m2ModelEndDttm); - long hours = duration.toHours(); - long minutes = duration.toMinutesPart(); - long seconds = duration.toSecondsPart(); - - return String.format("%02d:%02d:%02d", hours, minutes, seconds); - } - - public String getM3Duration() { - if (this.m3ModelStartDttm == null || this.m3ModelEndDttm == null) { - return "00:00:00"; - } - Duration duration = Duration.between(this.m3ModelStartDttm, this.m3ModelEndDttm); - long hours = duration.toHours(); - long minutes = duration.toMinutesPart(); - long seconds = duration.toSecondsPart(); - - return String.format("%02d:%02d:%02d", hours, minutes, seconds); + @JsonProperty("mapSheetScopeName") + private String getMapSheetScope() { + return MapSheetScope.getDescByCode(this.mapSheetScope); } } @@ -453,6 +491,15 @@ public class InferenceResultDto { } } + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class InferenceStatusDetailDto2 { + + InferenceServerStatusDto serverStatus; + } + @Getter @Setter @AllArgsConstructor 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 9a768285..1af57e25 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 @@ -465,23 +465,14 @@ public class InferenceResultService { return inferenceResultCoreService.getInferenceServerStatusList(); } + /** + * 추론 진행 현황 상세 + * + * @param uuid + * @return + */ public InferenceStatusDetailDto getInferenceStatus(UUID uuid) { - - List servers = - inferenceResultCoreService.getInferenceServerStatusList(); - - String serverNames = ""; - for (InferenceServerStatusDto server : servers) { - if (serverNames.equals("")) { - serverNames = server.getServerName(); - } else { - serverNames = serverNames + "," + server.getServerName(); - } - } - InferenceStatusDetailDto dto = inferenceResultCoreService.getInferenceStatus(uuid); - dto.setUsedServerName(serverNames); - return dto; } 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 d9956e90..a78ff0b4 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 @@ -328,6 +328,11 @@ public class InferenceResultCoreService { } } + /** + * 서버 정보 조회 + * + * @return + */ public List getInferenceServerStatusList() { return mapSheetLearnRepository.getInferenceServerStatusList(); } 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 40d5a570..d58f9b53 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 @@ -161,6 +161,12 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto .fetchOne()); } + /** + * 추론 실행 진행 현황 + * + * @param uuid + * @return + */ @Override public InferenceStatusDetailDto getInferenceStatus(UUID uuid) { @@ -175,21 +181,30 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto .select( Projections.constructor( InferenceStatusDetailDto.class, + mapSheetLearnEntity.detectingCnt, + mapSheetLearnEntity.m1PendingJobs, + mapSheetLearnEntity.m2PendingJobs, + mapSheetLearnEntity.m3PendingJobs, + mapSheetLearnEntity.m1CompletedJobs, + mapSheetLearnEntity.m2CompletedJobs, + mapSheetLearnEntity.m3CompletedJobs, + mapSheetLearnEntity.m1FailedJobs, + mapSheetLearnEntity.m2FailedJobs, + mapSheetLearnEntity.m3FailedJobs, + mapSheetLearnEntity.m1ModelStartDttm, + mapSheetLearnEntity.m2ModelStartDttm, + mapSheetLearnEntity.m3ModelStartDttm, + mapSheetLearnEntity.m1ModelEndDttm, + mapSheetLearnEntity.m2ModelEndDttm, + mapSheetLearnEntity.m3ModelEndDttm, mapSheetLearnEntity.title, mapSheetLearnEntity.compareYyyy, mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.detectOption, - mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.stage, mapSheetLearnEntity.inferStartDttm, mapSheetLearnEntity.inferEndDttm, - mapSheetLearnEntity.detectingCnt, - mapSheetLearnEntity.detectEndCnt, - mapSheetLearnEntity.m1ModelStartDttm, - mapSheetLearnEntity.m1ModelEndDttm, - mapSheetLearnEntity.m2ModelStartDttm, - mapSheetLearnEntity.m2ModelEndDttm, - mapSheetLearnEntity.m3ModelStartDttm, - mapSheetLearnEntity.m3ModelEndDttm, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, m1Model.modelVer.as("model1Ver"), m2Model.modelVer.as("model2Ver"), m3Model.modelVer.as("model3Ver")))