Merge pull request '[KC-108] 상태 코드명 추가' (#181) from feat/infer_dev_260107 into develop

Reviewed-on: https://kamco.gitea.gs.dabeeo.com/dabeeo/kamco-dabeeo-backoffice/pulls/181
This commit is contained in:
2026-01-12 12:08:48 +09:00
8 changed files with 151 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
package com.kamco.cd.kamcoback.inference.dto; 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.enums.EnumType;
import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid; import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid;
import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm;
@@ -8,6 +9,7 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@@ -36,6 +38,11 @@ public class InferenceResultDto {
@JsonFormatDttm private ZonedDateTime elapsedTime; @JsonFormatDttm private ZonedDateTime elapsedTime;
private Boolean applyYn; private Boolean applyYn;
@JsonFormatDttm private ZonedDateTime applyDttm; @JsonFormatDttm private ZonedDateTime applyDttm;
@JsonProperty("statusName")
public String statusName() {
return Status.getDescByCode(this.status);
}
} }
/** 목록조회 검색 조건 dto */ /** 목록조회 검색 조건 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 @Getter
@Setter @Setter

View File

@@ -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.Detail;
import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; 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;
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.InferenceResultDto.ResultList;
import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto; import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto;
import com.kamco.cd.kamcoback.model.dto.ModelMngDto.Basic; import com.kamco.cd.kamcoback.model.dto.ModelMngDto.Basic;
import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService;
import com.kamco.cd.kamcoback.postgres.core.MapSheetMngCoreService; import com.kamco.cd.kamcoback.postgres.core.MapSheetMngCoreService;
import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService; import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -57,7 +60,24 @@ public class InferenceResultService {
*/ */
@Transactional @Transactional
public UUID saveInferenceInfo(InferenceResultDto.RegReq req) { 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<String> 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 tif 없으면 전년도 파일 조회 쿼리 추가해야함
// TODO 도엽 개수를 target 기준으로 맞춰야함 // TODO 도엽 개수를 target 기준으로 맞춰야함
@@ -72,7 +92,7 @@ public class InferenceResultService {
// ensureAccepted(m2); // ensureAccepted(m2);
// ensureAccepted(m3); // ensureAccepted(m3);
return uuid; return null;
} }
/** /**

View File

@@ -1,8 +1,11 @@
package com.kamco.cd.kamcoback.model.service; 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;
import com.kamco.cd.kamcoback.common.utils.FIleChecker.Basic; 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;
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;
import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelMetricAddReq; import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelMetricAddReq;
import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelUploadResDto; 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.dto.UploadDto;
import com.kamco.cd.kamcoback.upload.service.UploadService; import com.kamco.cd.kamcoback.upload.service.UploadService;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@@ -81,6 +86,29 @@ public class ModelMngService {
modelMetricAddReq.setLoss(0); modelMetricAddReq.setLoss(0);
modelMetricAddReq.setIou(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); modelMngCoreService.insertModelResultMetric(modelMetricAddReq);
return new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, "등록되었습니다."); return new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, "등록되었습니다.");
@@ -121,7 +149,7 @@ public class ModelMngService {
int endPos = 20; int endPos = 20;
List<Basic> files = List<Basic> files =
FIleChecker.getFilesFromAllDepth(dirPath, "*", "pth,py", 10, "name", startPos, endPos); FIleChecker.getFilesFromAllDepth(dirPath, "*", "pth,py,json", 10, "name", startPos, endPos);
for (Basic dto : files) { for (Basic dto : files) {
// 예: 파일명 출력 및 추가 작업 // 예: 파일명 출력 및 추가 작업

View File

@@ -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.MapSheetLearn5kRepository;
import com.kamco.cd.kamcoback.postgres.repository.Inference.MapSheetLearnRepository; import com.kamco.cd.kamcoback.postgres.repository.Inference.MapSheetLearnRepository;
import com.kamco.cd.kamcoback.postgres.repository.scene.MapInkx5kRepository; 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.EntityManager;
import jakarta.persistence.EntityNotFoundException; import jakarta.persistence.EntityNotFoundException;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@@ -71,14 +73,6 @@ public class InferenceResultCoreService {
// learn 테이블 저장 // learn 테이블 저장
MapSheetLearnEntity savedLearn = mapSheetLearnRepository.save(mapSheetLearnEntity); MapSheetLearnEntity savedLearn = mapSheetLearnRepository.save(mapSheetLearnEntity);
// if (req.getMapSheetScope().equals(MapSheetScope.ALL)) {
// List<String> mapSheetIds = new ArrayList<>();
// mapInkx5kRepository.findAll().forEach(mapInkx5kEntity -> {
// mapSheetIds.add(mapInkx5kEntity.getMapidcdNo());
// });
// req.setMapSheetNum(mapSheetIds);
// }
final int CHUNK = 1000; final int CHUNK = 1000;
List<MapSheetLearn5kEntity> buffer = new ArrayList<>(CHUNK); List<MapSheetLearn5kEntity> buffer = new ArrayList<>(CHUNK);
List<String> mapSheetNumList = req.getMapSheetNum(); List<String> mapSheetNumList = req.getMapSheetNum();
@@ -214,4 +208,8 @@ public class InferenceResultCoreService {
.map(MapInkx5kEntity::toEntity) .map(MapInkx5kEntity::toEntity)
.toList(); .toList();
} }
public List<MapInkxMngDto.Basic> findByMapidList(Search5kReq req) {
return mapInkx5kRepository.findByMapidList(req);
}
} }

View File

@@ -51,7 +51,7 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto
// 제목 // 제목
if (StringUtils.isNotBlank(req.getTitle())) { if (StringUtils.isNotBlank(req.getTitle())) {
builder.and(mapSheetLearnEntity.title.equalsIgnoreCase(req.getTitle())); builder.and(mapSheetLearnEntity.title.containsIgnoreCase(req.getTitle()));
} }
List<MapSheetLearnEntity> content = List<MapSheetLearnEntity> content =

View File

@@ -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.postgres.entity.MapInkx5kEntity;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; 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.MapList;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.searchReq; import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.searchReq;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -26,5 +27,5 @@ public interface MapInkx5kRepositoryCustom {
List<MapInkx5kEntity> findByMapSheetNumInAndUseInference( List<MapInkx5kEntity> findByMapSheetNumInAndUseInference(
List<String> mapSheetNums, CommonUseStatus use); List<String> mapSheetNums, CommonUseStatus use);
Optional<MapInkx5kEntity> findByMapidList(); List<MapInkxMngDto.Basic> findByMapidList(Search5kReq search5kReq);
} }

View File

@@ -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.postgres.entity.QMapInkx5kEntity;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto; 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.MapList;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.Search5kReq;
import com.kamco.cd.kamcoback.scene.dto.MapInkxMngDto.searchReq; 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.Projections;
import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.Expressions;
@@ -16,6 +18,7 @@ import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@@ -143,8 +146,31 @@ public class MapInkx5kRepositoryImpl extends QuerydslRepositorySupport
} }
@Override @Override
public Optional<MapInkx5kEntity> findByMapidList() { public List<MapInkxMngDto.Basic> findByMapidList(Search5kReq search5kReq) {
return Optional.empty(); 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) { private BooleanExpression searchUseInference(CommonUseStatus useInference) {

View File

@@ -15,6 +15,7 @@ import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.locationtech.jts.geom.Geometry;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
@@ -58,6 +59,20 @@ public class MapInkxMngDto {
private ZonedDateTime updatedDttm; 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 @Getter
@Schema(name = "MapListEntity", description = "목록 항목") @Schema(name = "MapListEntity", description = "목록 항목")
public static class MapListEntity { 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;
}
} }