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 ba1119da..c5c50915 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 @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.inference.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import com.kamco.cd.kamcoback.common.utils.enums.EnumType; import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; @@ -8,6 +9,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.time.LocalDate; import java.time.ZonedDateTime; +import java.util.Arrays; import java.util.List; import java.util.UUID; import lombok.AllArgsConstructor; @@ -36,6 +38,11 @@ public class InferenceResultDto { @JsonFormatDttm private ZonedDateTime elapsedTime; private Boolean applyYn; @JsonFormatDttm private ZonedDateTime applyDttm; + + @JsonProperty("statusName") + public String statusName() { + return Status.getDescByCode(this.status); + } } /** 목록조회 검색 조건 dto */ @@ -101,6 +108,37 @@ public class InferenceResultDto { } } + @Getter + @AllArgsConstructor + public enum Status implements EnumType { + READY("대기"), + IN_PROGRESS("진행중"), + END("종료"), + ; + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + + public static Status fromCode(String code) { + return Arrays.stream(values()) + .filter(v -> v.name().equals(code)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("알 수 없는 상태 코드: " + code)); + } + + public static String getDescByCode(String code) { + return fromCode(code).getDesc(); + } + } + /** 변화탐지 실행 정보 저장 요청 정보 */ @Getter @Setter 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 e1f99c9a..10d7faa7 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 @@ -6,13 +6,16 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Detail; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto; import com.kamco.cd.kamcoback.model.dto.ModelMngDto.Basic; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import com.kamco.cd.kamcoback.postgres.core.MapSheetMngCoreService; import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq; import jakarta.validation.constraints.NotNull; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import lombok.RequiredArgsConstructor; @@ -57,7 +60,24 @@ public class InferenceResultService { */ @Transactional public UUID saveInferenceInfo(InferenceResultDto.RegReq req) { - UUID uuid = inferenceResultCoreService.saveInferenceInfo(req); + + // 전체일때 5k도협 가져오기 + if (MapSheetScope.ALL.getId().equals(req.getMapSheetScope())) { + Search5kReq mapReq = new Search5kReq(); + mapReq.setUseInference("USE"); + + List mapSheetIds = new ArrayList<>(); + inferenceResultCoreService + .findByMapidList(mapReq) + .forEach( + mapInkx5kEntity -> { + mapSheetIds.add(mapInkx5kEntity.getMapidcdNo()); + }); + req.setMapSheetNum(mapSheetIds); + System.out.println(mapSheetIds); + } + + // UUID uuid = inferenceResultCoreService.saveInferenceInfo(req); // TODO tif 없으면 전년도 파일 조회 쿼리 추가해야함 // TODO 도엽 개수를 target 기준으로 맞춰야함 @@ -72,7 +92,7 @@ public class InferenceResultService { // ensureAccepted(m2); // ensureAccepted(m3); - return uuid; + return null; } /** diff --git a/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java b/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java index d32059b7..efefe1a2 100644 --- a/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java +++ b/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java @@ -1,8 +1,11 @@ package com.kamco.cd.kamcoback.model.service; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.common.utils.FIleChecker; import com.kamco.cd.kamcoback.common.utils.FIleChecker.Basic; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; import com.kamco.cd.kamcoback.model.dto.ModelMngDto; import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelMetricAddReq; import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelUploadResDto; @@ -10,6 +13,8 @@ import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService; import com.kamco.cd.kamcoback.upload.dto.UploadDto; import com.kamco.cd.kamcoback.upload.service.UploadService; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.LocalDate; import java.util.List; import java.util.UUID; @@ -81,6 +86,29 @@ public class ModelMngService { modelMetricAddReq.setLoss(0); modelMetricAddReq.setIou(0); + ObjectMapper mapper = new ObjectMapper(); + String filePath = addReq.getClsModelPath() + addReq.getClsModelFileName(); + String dataJson = null; + try { + dataJson = Files.readString(Path.of(filePath)); + JsonNode node = mapper.readTree(dataJson); + + double f1_score = node.get("properties").get("f1_score").asDouble(); + double precision = node.get("properties").get("precision").asDouble(); + double recall = node.get("properties").get("recall").asDouble(); + double loss = node.get("properties").get("loss").asDouble(); + double iou = node.get("properties").get("iou").asDouble(); + + modelMetricAddReq.setF1Score(f1_score); + modelMetricAddReq.setPrecision(precision); + modelMetricAddReq.setRecall(recall); + modelMetricAddReq.setLoss(loss); + modelMetricAddReq.setIou(iou); + + } catch (IOException e) { + return new ApiResponseDto.ResponseObj(ApiResponseCode.NOT_FOUND, "JSON파일 오류"); + } + modelMngCoreService.insertModelResultMetric(modelMetricAddReq); return new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, "등록되었습니다."); @@ -121,7 +149,7 @@ public class ModelMngService { int endPos = 20; List files = - FIleChecker.getFilesFromAllDepth(dirPath, "*", "pth,py", 10, "name", startPos, endPos); + FIleChecker.getFilesFromAllDepth(dirPath, "*", "pth,py,json", 10, "name", startPos, endPos); for (Basic dto : files) { // 예: 파일명 출력 및 추가 작업 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 3545113a..e28de297 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 @@ -16,6 +16,8 @@ import com.kamco.cd.kamcoback.postgres.repository.Inference.MapSheetAnalDataInfe import com.kamco.cd.kamcoback.postgres.repository.Inference.MapSheetLearn5kRepository; import com.kamco.cd.kamcoback.postgres.repository.Inference.MapSheetLearnRepository; import com.kamco.cd.kamcoback.postgres.repository.scene.MapInkx5kRepository; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityNotFoundException; import jakarta.validation.constraints.NotNull; @@ -71,14 +73,6 @@ public class InferenceResultCoreService { // learn 테이블 저장 MapSheetLearnEntity savedLearn = mapSheetLearnRepository.save(mapSheetLearnEntity); - // if (req.getMapSheetScope().equals(MapSheetScope.ALL)) { - // List mapSheetIds = new ArrayList<>(); - // mapInkx5kRepository.findAll().forEach(mapInkx5kEntity -> { - // mapSheetIds.add(mapInkx5kEntity.getMapidcdNo()); - // }); - // req.setMapSheetNum(mapSheetIds); - // } - final int CHUNK = 1000; List buffer = new ArrayList<>(CHUNK); List mapSheetNumList = req.getMapSheetNum(); @@ -214,4 +208,8 @@ public class InferenceResultCoreService { .map(MapInkx5kEntity::toEntity) .toList(); } + + public List findByMapidList(Search5kReq req) { + return mapInkx5kRepository.findByMapidList(req); + } } 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 42231ee4..ab9e38fe 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 @@ -51,7 +51,7 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto // 제목 if (StringUtils.isNotBlank(req.getTitle())) { - builder.and(mapSheetLearnEntity.title.equalsIgnoreCase(req.getTitle())); + builder.and(mapSheetLearnEntity.title.containsIgnoreCase(req.getTitle())); } List content = diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java index 7ec9bc0e..dccfb1ea 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryCustom.java @@ -4,6 +4,7 @@ import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.MapList; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.searchReq; import java.util.List; import java.util.Optional; @@ -26,5 +27,5 @@ public interface MapInkx5kRepositoryCustom { List findByMapSheetNumInAndUseInference( List mapSheetNums, CommonUseStatus use); - Optional findByMapidList(); + List findByMapidList(Search5kReq search5kReq); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java index 036d704b..205411ec 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scene/MapInkx5kRepositoryImpl.java @@ -8,7 +8,9 @@ import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.MapList; +import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.searchReq; +import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; @@ -16,6 +18,7 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.List; import java.util.Objects; import java.util.Optional; +import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -143,8 +146,31 @@ public class MapInkx5kRepositoryImpl extends QuerydslRepositorySupport } @Override - public Optional findByMapidList() { - return Optional.empty(); + public List findByMapidList(Search5kReq search5kReq) { + BooleanBuilder builder = new BooleanBuilder(); + + if (StringUtils.isNotBlank(search5kReq.getMapidcdNo())) { + builder.and(mapInkx5kEntity.mapidcdNo.eq(search5kReq.getMapidcdNo())); + } + + if (StringUtils.isNotBlank(search5kReq.getUseInference())) { + builder.and( + mapInkx5kEntity.useInference.eq( + CommonUseStatus.getEnumById(search5kReq.getUseInference()))); + } + + return queryFactory + .select( + Projections.constructor( + MapInkxMngDto.Basic.class, + mapInkx5kEntity.fid, + mapInkx5kEntity.mapidcdNo, + mapInkx5kEntity.mapidNm, + mapInkx5kEntity.geom, + mapInkx5kEntity.useInference)) + .from(mapInkx5kEntity) + .where(builder) + .fetch(); } private BooleanExpression searchUseInference(CommonUseStatus useInference) { diff --git a/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java b/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java index 03ccc90a..c949bc90 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/scene/dto/MapInkxMngDto.java @@ -15,6 +15,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.locationtech.jts.geom.Geometry; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -58,6 +59,20 @@ public class MapInkxMngDto { private ZonedDateTime updatedDttm; } + @Schema(name = "MapInkList", description = "5k 리스트") + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class MapInkList { + + private Integer fid; + private String mapidcdNo; + private String mapidNm; + private Geometry geom; + private String useInference; + } + @Getter @Schema(name = "MapListEntity", description = "목록 항목") public static class MapListEntity { @@ -207,4 +222,14 @@ public class MapInkxMngDto { } } } + + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class Search5kReq { + + private String mapidcdNo; + private String useInference; + } }