[KC-108] ai api batch 작업중
This commit is contained in:
@@ -29,8 +29,10 @@ public class InferenceDetailDto {
|
||||
private String dataName;
|
||||
private Long mapSheepNum;
|
||||
private Long detectingCnt;
|
||||
@JsonFormatDttm private ZonedDateTime analStrtDttm;
|
||||
@JsonFormatDttm private ZonedDateTime analEndDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime analStrtDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime analEndDttm;
|
||||
private Long analSec;
|
||||
private String analState;
|
||||
|
||||
@@ -61,8 +63,10 @@ public class InferenceDetailDto {
|
||||
private Long id;
|
||||
private String analTitle;
|
||||
private Long detectingCnt;
|
||||
@JsonFormatDttm private ZonedDateTime analStrtDttm;
|
||||
@JsonFormatDttm private ZonedDateTime analEndDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime analStrtDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime analEndDttm;
|
||||
private Long analSec;
|
||||
private Long analPredSec;
|
||||
private String analState;
|
||||
@@ -102,8 +106,10 @@ public class InferenceDetailDto {
|
||||
private String modelInfo;
|
||||
private Integer targetYyyy;
|
||||
private Integer compareYyyy;
|
||||
@JsonFormatDttm private ZonedDateTime analStrtDttm;
|
||||
@JsonFormatDttm private ZonedDateTime analEndDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime analStrtDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime analEndDttm;
|
||||
private Long analSec;
|
||||
private Long analPredSec;
|
||||
private String resultUrl;
|
||||
@@ -183,7 +189,8 @@ public class InferenceDetailDto {
|
||||
private Clazzes target;
|
||||
private MapSheet mapSheet;
|
||||
private Coordinate center;
|
||||
@JsonFormatDttm private ZonedDateTime updatedDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime updatedDttm;
|
||||
|
||||
public DetailListEntity(
|
||||
UUID uuid,
|
||||
@@ -233,7 +240,8 @@ public class InferenceDetailDto {
|
||||
|
||||
private String code;
|
||||
private String name;
|
||||
@JsonIgnore private Double score;
|
||||
@JsonIgnore
|
||||
private Double score;
|
||||
|
||||
public Clazz(String code, Double score) {
|
||||
this.code = code;
|
||||
@@ -300,8 +308,10 @@ public class InferenceDetailDto {
|
||||
String classAfterName;
|
||||
Double classAfterProb;
|
||||
Long mapSheetNum;
|
||||
@JsonIgnore String gemoStr;
|
||||
@JsonIgnore String geomCenterStr;
|
||||
@JsonIgnore
|
||||
String gemoStr;
|
||||
@JsonIgnore
|
||||
String geomCenterStr;
|
||||
JsonNode gemo;
|
||||
JsonNode geomCenter;
|
||||
|
||||
@@ -399,10 +409,14 @@ public class InferenceDetailDto {
|
||||
public static class InferenceBatchSheet {
|
||||
|
||||
private Long id;
|
||||
private UUID uuid;
|
||||
private Long m1BatchId;
|
||||
private Long m2BatchId;
|
||||
private Long m3BatchId;
|
||||
private String status;
|
||||
private String runningModelType;
|
||||
private UUID m1ModelUuid;
|
||||
private UUID m2ModelUuid;
|
||||
private UUID m3ModelUuid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,36 +11,36 @@ import lombok.Setter;
|
||||
public class InferenceProgressDto {
|
||||
|
||||
private InferenceProgressDto.pred_requests_areas pred_requests_areas;
|
||||
private String model1_version;
|
||||
private String model2_version;
|
||||
private String model3_version;
|
||||
private String cd_model_path;
|
||||
private String cd_model_config;
|
||||
private String cls_model_path;
|
||||
private String cls_model_version;
|
||||
private String cd_model_type;
|
||||
private String modelVersion;
|
||||
private String cdModelPath;
|
||||
private String cdModelFileName;
|
||||
private String cdModelConfigPath;
|
||||
private String cdModelConfigFileName;
|
||||
private String cdModelClsPath;
|
||||
private String cdModelClsFileName;
|
||||
private String clsModelVersion;
|
||||
private Integer priority;
|
||||
|
||||
public InferenceProgressDto(
|
||||
InferenceProgressDto.pred_requests_areas pred_requests_areas,
|
||||
String model1_version,
|
||||
String model2_version,
|
||||
String model3_version,
|
||||
String cd_model_path,
|
||||
String cd_model_config,
|
||||
String cls_model_path,
|
||||
String cls_model_version,
|
||||
String cd_model_type,
|
||||
String modelVersion,
|
||||
String cdModelPath,
|
||||
String cdModelFileName,
|
||||
String cdModelConfigPath,
|
||||
String cdModelConfigFileName,
|
||||
String cdModelClsPath,
|
||||
String cdModelClsFileName,
|
||||
String clsModelVersion,
|
||||
Integer priority) {
|
||||
this.pred_requests_areas = pred_requests_areas;
|
||||
this.model1_version = model1_version;
|
||||
this.model2_version = model2_version;
|
||||
this.model3_version = model3_version;
|
||||
this.cd_model_path = cd_model_path;
|
||||
this.cd_model_config = cd_model_config;
|
||||
this.cls_model_path = cls_model_path;
|
||||
this.cls_model_version = cls_model_version;
|
||||
this.cd_model_type = cd_model_type;
|
||||
this.modelVersion = modelVersion;
|
||||
this.cdModelPath = cdModelPath;
|
||||
this.cdModelFileName = cdModelFileName;
|
||||
this.cdModelConfigPath = cdModelConfigPath;
|
||||
this.cdModelConfigFileName = cdModelConfigFileName;
|
||||
this.cdModelClsPath = cdModelClsPath;
|
||||
this.cdModelClsFileName = cdModelClsFileName;
|
||||
this.clsModelVersion = clsModelVersion;
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,9 @@ import org.springframework.data.domain.Pageable;
|
||||
|
||||
public class InferenceResultDto {
|
||||
|
||||
/** 목록조회 dto */
|
||||
/**
|
||||
* 목록조회 dto
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@@ -34,11 +36,15 @@ public class InferenceResultDto {
|
||||
private String status;
|
||||
private String mapSheetCnt;
|
||||
private Long detectingCnt;
|
||||
@JsonFormatDttm private ZonedDateTime startTime;
|
||||
@JsonFormatDttm private ZonedDateTime endTime;
|
||||
@JsonFormatDttm private ZonedDateTime elapsedTime;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime startTime;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime endTime;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime elapsedTime;
|
||||
private Boolean applyYn;
|
||||
@JsonFormatDttm private ZonedDateTime applyDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime applyDttm;
|
||||
|
||||
@JsonProperty("statusName")
|
||||
public String statusName() {
|
||||
@@ -46,7 +52,9 @@ public class InferenceResultDto {
|
||||
}
|
||||
}
|
||||
|
||||
/** 목록조회 검색 조건 dto */
|
||||
/**
|
||||
* 목록조회 검색 조건 dto
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@@ -68,7 +76,9 @@ public class InferenceResultDto {
|
||||
}
|
||||
}
|
||||
|
||||
/** 탐지 데이터 옵션 dto */
|
||||
/**
|
||||
* 탐지 데이터 옵션 dto
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum MapSheetScope implements EnumType {
|
||||
@@ -89,7 +99,9 @@ public class InferenceResultDto {
|
||||
}
|
||||
}
|
||||
|
||||
/** 분석대상 도엽 enum */
|
||||
/**
|
||||
* 분석대상 도엽 enum
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DetectOption implements EnumType {
|
||||
@@ -137,7 +149,9 @@ public class InferenceResultDto {
|
||||
}
|
||||
}
|
||||
|
||||
/** 변화탐지 실행 정보 저장 요청 정보 */
|
||||
/**
|
||||
* 변화탐지 실행 정보 저장 요청 정보
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@@ -200,13 +214,16 @@ public class InferenceResultDto {
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class InferenceStatusDetailDto {
|
||||
|
||||
private String title;
|
||||
private Integer compareYyyy;
|
||||
private Integer targetYyyy;
|
||||
private String detectOption;
|
||||
private String mapSheetScope;
|
||||
@JsonFormatDttm private ZonedDateTime inferStartDttm;
|
||||
@JsonFormatDttm private ZonedDateTime inferEndDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime inferStartDttm;
|
||||
@JsonFormatDttm
|
||||
private ZonedDateTime inferEndDttm;
|
||||
private Long detectingCnt;
|
||||
|
||||
private String model1Ver;
|
||||
@@ -248,12 +265,16 @@ public class InferenceResultDto {
|
||||
private String model4VerStatusName = "진행중";
|
||||
|
||||
public String getDetectOptionName() {
|
||||
if (this.detectOption.equals("EXCL")) return "추론제외";
|
||||
if (this.detectOption.equals("EXCL")) {
|
||||
return "추론제외";
|
||||
}
|
||||
return "이전 년도 도엽 사용";
|
||||
}
|
||||
|
||||
public String getMapSheetScopeName() {
|
||||
if (this.detectOption.equals("ALL")) return "전체";
|
||||
if (this.detectOption.equals("ALL")) {
|
||||
return "전체";
|
||||
}
|
||||
return "부분";
|
||||
}
|
||||
}
|
||||
@@ -265,9 +286,12 @@ public class InferenceResultDto {
|
||||
public static class InferenceServerStatusDto {
|
||||
|
||||
private String serverName;
|
||||
@JsonIgnore private float cpu_user;
|
||||
@JsonIgnore private float cpu_system;
|
||||
@JsonIgnore private float memused;
|
||||
@JsonIgnore
|
||||
private float cpu_user;
|
||||
@JsonIgnore
|
||||
private float cpu_system;
|
||||
@JsonIgnore
|
||||
private float memused;
|
||||
private Long kbmemused;
|
||||
private float gpuUtil;
|
||||
|
||||
@@ -372,7 +396,13 @@ public class InferenceResultDto {
|
||||
private String status;
|
||||
private String type;
|
||||
private ZonedDateTime inferStartDttm;
|
||||
private ZonedDateTime inferEndDttm;
|
||||
private Long detectEndCnt;
|
||||
private String modelComparePath;
|
||||
private String modelTargetPath;
|
||||
private String modelModelPath;
|
||||
private ZonedDateTime modelStartDttm;
|
||||
private ZonedDateTime modelEndDttm;
|
||||
private Long updateUid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,6 +212,7 @@ public class InferenceResultService {
|
||||
saveInferenceAiDto.setInferStartDttm(ZonedDateTime.now());
|
||||
saveInferenceAiDto.setModelComparePath(modelComparePath);
|
||||
saveInferenceAiDto.setModelTargetPath(modelTargetPath);
|
||||
saveInferenceAiDto.setModelStartDttm(ZonedDateTime.now());
|
||||
inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
}
|
||||
|
||||
@@ -253,7 +254,8 @@ public class InferenceResultService {
|
||||
|
||||
try {
|
||||
List<Map<String, Object>> list =
|
||||
om.readValue(body, new TypeReference<List<Map<String, Object>>>() {});
|
||||
om.readValue(body, new TypeReference<List<Map<String, Object>>>() {
|
||||
});
|
||||
|
||||
Integer batchIdInt = (Integer) list.get(0).get("batch_id");
|
||||
batchId = batchIdInt.longValue();
|
||||
@@ -412,8 +414,11 @@ public class InferenceResultService {
|
||||
|
||||
String serverNames = "";
|
||||
for (InferenceServerStatusDto server : servers) {
|
||||
if (serverNames.equals("")) serverNames = server.getServerName();
|
||||
else serverNames = serverNames + "," + server.getServerName();
|
||||
if (serverNames.equals("")) {
|
||||
serverNames = server.getServerName();
|
||||
} else {
|
||||
serverNames = serverNames + "," + server.getServerName();
|
||||
}
|
||||
}
|
||||
|
||||
InferenceStatusDetailDto dto = inferenceResultCoreService.getInferenceStatus(uuid);
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.InferenceBatchSheet;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceProgressDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto;
|
||||
@@ -24,6 +25,7 @@ import com.kamco.cd.kamcoback.postgres.repository.scene.MapInkx5kRepository;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.EntityNotFoundException;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -229,16 +231,46 @@ public class InferenceResultCoreService {
|
||||
|
||||
if (request.getType().equals("M1")) {
|
||||
entity.setM1ModelBatchId(request.getBatchId());
|
||||
|
||||
if (request.getModelStartDttm() != null) {
|
||||
entity.setM1ModelStartDttm(request.getModelStartDttm());
|
||||
}
|
||||
|
||||
if (request.getModelEndDttm() != null) {
|
||||
entity.setM1ModelEndDttm(request.getModelEndDttm());
|
||||
}
|
||||
|
||||
} else if (request.getType().equals("M2")) {
|
||||
entity.setM2ModelBatchId(request.getBatchId());
|
||||
|
||||
if (request.getModelStartDttm() != null) {
|
||||
entity.setM2ModelStartDttm(request.getModelStartDttm());
|
||||
}
|
||||
|
||||
if (request.getModelEndDttm() != null) {
|
||||
entity.setM2ModelEndDttm(request.getModelEndDttm());
|
||||
}
|
||||
|
||||
} else if (request.getType().equals("M3")) {
|
||||
entity.setM3ModelBatchId(request.getBatchId());
|
||||
|
||||
if (request.getModelStartDttm() != null) {
|
||||
entity.setM3ModelStartDttm(request.getModelStartDttm());
|
||||
}
|
||||
|
||||
if (request.getModelEndDttm() != null) {
|
||||
entity.setM3ModelEndDttm(request.getModelEndDttm());
|
||||
}
|
||||
}
|
||||
|
||||
if (request.getInferStartDttm() != null) {
|
||||
entity.setInferStartDttm(request.getInferStartDttm());
|
||||
}
|
||||
|
||||
if (request.getInferEndDttm() != null) {
|
||||
entity.setInferEndDttm(request.getInferEndDttm());
|
||||
}
|
||||
|
||||
if (request.getModelComparePath() != null) {
|
||||
entity.setModelComparePath(request.getModelComparePath());
|
||||
}
|
||||
@@ -247,10 +279,26 @@ public class InferenceResultCoreService {
|
||||
entity.setModelTargetPath(request.getModelTargetPath());
|
||||
}
|
||||
|
||||
if (request.getDetectEndCnt() != null) {
|
||||
entity.setDetectEndCnt(request.getDetectEndCnt());
|
||||
}
|
||||
|
||||
if (request.getType() != null) {
|
||||
entity.setRunningModelType(request.getType());
|
||||
}
|
||||
|
||||
if (request.getStatus() != null) {
|
||||
entity.setStatus(request.getStatus());
|
||||
}
|
||||
|
||||
if (request.getUpdateUid() != null) {
|
||||
entity.setUpdatedUid(request.getUpdateUid());
|
||||
}
|
||||
|
||||
entity.setUpdatedDttm(ZonedDateTime.now());
|
||||
|
||||
}
|
||||
|
||||
public List<InferenceServerStatusDto> getInferenceServerStatusList() {
|
||||
return mapSheetLearnRepository.getInferenceServerStatusList();
|
||||
}
|
||||
@@ -263,17 +311,20 @@ public class InferenceResultCoreService {
|
||||
|
||||
InferenceBatchSheet inferenceBatchSheet = new InferenceBatchSheet();
|
||||
inferenceBatchSheet.setId(entity.getId());
|
||||
inferenceBatchSheet.setUuid(entity.getUuid());
|
||||
inferenceBatchSheet.setM1BatchId(entity.getM1ModelBatchId());
|
||||
inferenceBatchSheet.setM2BatchId(entity.getM2ModelBatchId());
|
||||
inferenceBatchSheet.setM3BatchId(entity.getM3ModelBatchId());
|
||||
inferenceBatchSheet.setStatus(entity.getStatus());
|
||||
inferenceBatchSheet.setRunningModelType(entity.getRunningModelType());
|
||||
inferenceBatchSheet.setM1ModelUuid(entity.getM1ModelUuid());
|
||||
inferenceBatchSheet.setM2ModelUuid(entity.getM2ModelUuid());
|
||||
inferenceBatchSheet.setM3ModelUuid(entity.getM3ModelUuid());
|
||||
return inferenceBatchSheet;
|
||||
}
|
||||
|
||||
public SaveInferenceAiDto getInferenceAiResultById(Long id) {
|
||||
|
||||
return null;
|
||||
public InferenceProgressDto getInferenceAiResultById(Long id, String type, UUID modelUuid) {
|
||||
return mapSheetLearnRepository.getInferenceAiResultById(id, modelUuid);
|
||||
}
|
||||
|
||||
public InferenceStatusDetailDto getInferenceStatus(UUID uuid) {
|
||||
|
||||
@@ -124,6 +124,19 @@ public class MapSheetLearnEntity {
|
||||
@Column(name = "model_target_path")
|
||||
private String modelTargetPath;
|
||||
|
||||
@Column(name = "m1_model_start_dttm")
|
||||
private ZonedDateTime m1ModelStartDttm;
|
||||
@Column(name = "m2_model_start_dttm")
|
||||
private ZonedDateTime m2ModelStartDttm;
|
||||
@Column(name = "m3_model_start_dttm")
|
||||
private ZonedDateTime m3ModelStartDttm;
|
||||
@Column(name = "m1_model_end_dttm")
|
||||
private ZonedDateTime m1ModelEndDttm;
|
||||
@Column(name = "m2_model_end_dttm")
|
||||
private ZonedDateTime m2ModelEndDttm;
|
||||
@Column(name = "m3_model_end_dttm")
|
||||
private ZonedDateTime m3ModelEndDttm;
|
||||
|
||||
public InferenceResultDto.ResultList toDto() {
|
||||
return new InferenceResultDto.ResultList(
|
||||
this.uuid,
|
||||
|
||||
@@ -20,7 +20,7 @@ public interface MapSheetLearnRepositoryCustom {
|
||||
|
||||
Optional<MapSheetLearnEntity> getInferenceResultByStatus(String status);
|
||||
|
||||
Optional<InferenceProgressDto> getInferenceAiResultById(Long id);
|
||||
InferenceProgressDto getInferenceAiResultById(Long id, UUID modelUuid);
|
||||
|
||||
public InferenceStatusDetailDto getInferenceStatus(UUID uuid);
|
||||
}
|
||||
|
||||
@@ -188,32 +188,35 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<InferenceProgressDto> getInferenceAiResultById(Long id) {
|
||||
// InferenceProgressDto dto =
|
||||
// queryFactory
|
||||
// .select(
|
||||
// Projections.constructor(
|
||||
// InferenceProgressDto.class,
|
||||
// Projections.constructor(
|
||||
// InferenceProgressDto.pred_requests_areas.class,
|
||||
// mapSheetLearnEntity.compareYyyy,
|
||||
// mapSheetLearnEntity.targetYyyy,
|
||||
// mapSheetLearnEntity.modelComparePath,
|
||||
// mapSheetLearnEntity.modelTargetPath
|
||||
// ),
|
||||
// modelMngEntity.uuid.eq(mapSheetLearnEntity.m1ModelUuid).as("m1ModelUuid"),
|
||||
// modelMngEntity.uuid.eq(mapSheetLearnEntity.m2ModelUuid).as("m2ModelUuid"),
|
||||
// mapSheetLearnEntity.cdModelPath,
|
||||
// mapSheetLearnEntity.cdModelConfig,
|
||||
// mapSheetLearnEntity.clsModelPath,
|
||||
// mapSheetLearnEntity.clsModelVersion,
|
||||
// mapSheetLearnEntity.cdModelType,
|
||||
// mapSheetLearnEntity.priority
|
||||
// )
|
||||
// )
|
||||
// .from(mapSheetLearnEntity)
|
||||
// .where(mapSheetLearnEntity.id.eq(id))
|
||||
// .fetchOne();
|
||||
return Optional.empty();
|
||||
public InferenceProgressDto getInferenceAiResultById(Long id, UUID modelUuid) {
|
||||
|
||||
QModelMngEntity model = new QModelMngEntity("model");
|
||||
|
||||
InferenceProgressDto dto =
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
InferenceProgressDto.class,
|
||||
Projections.constructor(
|
||||
InferenceProgressDto.pred_requests_areas.class,
|
||||
mapSheetLearnEntity.compareYyyy,
|
||||
mapSheetLearnEntity.targetYyyy,
|
||||
mapSheetLearnEntity.modelComparePath,
|
||||
mapSheetLearnEntity.modelTargetPath),
|
||||
model.modelVer.as("modelVer"),
|
||||
model.cdModelPath.as("cdModelPath"),
|
||||
model.cdModelFileName.as("cdModelFileName"),
|
||||
model.cdModelConfigPath.as("cdModelConfigPath"),
|
||||
model.cdModelConfigFileName.as("cdModelConfigFileName"),
|
||||
model.clsModelPath,
|
||||
model.clsModelFileName,
|
||||
model.clsModelVersion
|
||||
))
|
||||
.from(mapSheetLearnEntity)
|
||||
.join(model)
|
||||
.on(model.uuid.eq(modelUuid))
|
||||
.where(mapSheetLearnEntity.id.eq(id))
|
||||
.fetchOne();
|
||||
return dto;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,30 @@
|
||||
package com.kamco.cd.kamcoback.scheduler.service;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.kamco.cd.kamcoback.common.exception.CustomApiException;
|
||||
import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient;
|
||||
import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.InferenceBatchSheet;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceProgressDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.SaveInferenceAiDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Status;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto;
|
||||
import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto.pred_requests_areas;
|
||||
import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService;
|
||||
import com.kamco.cd.kamcoback.scheduler.dto.JobStatusDto;
|
||||
import jakarta.transaction.Transactional;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -31,7 +42,14 @@ public class MapSheetInferenceJobService {
|
||||
@Value("${inference.batch-url}")
|
||||
private String batchUrl;
|
||||
|
||||
@Value("${spring.profiles.active}")
|
||||
private String profile;
|
||||
|
||||
@Value("${inference.url}")
|
||||
private String inferenceUrl;
|
||||
|
||||
@Scheduled(fixedDelay = 60_000)
|
||||
@Transactional
|
||||
public void runBatch() {
|
||||
log.info("1분 배치 시작");
|
||||
|
||||
@@ -80,19 +98,34 @@ public class MapSheetInferenceJobService {
|
||||
String type = batchSheet.getRunningModelType();
|
||||
|
||||
if (type.equals("M1")) {
|
||||
|
||||
// M1 완료되었으면 M2 실행
|
||||
this.startInference(batchSheet.getId(), batchSheet.getUuid(), "M2", batchSheet.getM2ModelUuid());
|
||||
// 종료시간
|
||||
this.updateProcessingEndTimeByModel(batchSheet.getUuid(), ZonedDateTime.now(), "M1");
|
||||
} else if (type.equals("M2")) {
|
||||
|
||||
// M1 완료되었으면 M3 실행
|
||||
this.startInference(batchSheet.getId(), batchSheet.getUuid(), "M3", batchSheet.getM3ModelUuid());
|
||||
// 종료시간
|
||||
this.updateProcessingEndTimeByModel(batchSheet.getUuid(), ZonedDateTime.now(), "M2");
|
||||
} else if (type.equals("M3")) {
|
||||
|
||||
// 완료
|
||||
SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto();
|
||||
saveInferenceAiDto.setUuid(batchSheet.getUuid());
|
||||
saveInferenceAiDto.setStatus(Status.END.getId());
|
||||
saveInferenceAiDto.setInferEndDttm(ZonedDateTime.now());
|
||||
inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
// 종료시간
|
||||
this.updateProcessingEndTimeByModel(batchSheet.getUuid(), ZonedDateTime.now(), "M3");
|
||||
}
|
||||
} else {
|
||||
SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto();
|
||||
saveInferenceAiDto.setUuid(batchSheet.getUuid());
|
||||
saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId());
|
||||
saveInferenceAiDto.setDetectEndCnt(dto.getCompletedJobs().longValue());
|
||||
inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
}
|
||||
|
||||
System.out.println(dto);
|
||||
|
||||
Thread.sleep(3000); // 예시: 처리 시간 3초
|
||||
|
||||
} catch (InterruptedException | JsonProcessingException e) {
|
||||
} catch (JsonProcessingException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
log.error("배치 중 인터럽트 발생", e);
|
||||
}
|
||||
@@ -100,44 +133,92 @@ public class MapSheetInferenceJobService {
|
||||
log.info("1분 배치 종료");
|
||||
}
|
||||
|
||||
private void startInference(Long id, String type) {
|
||||
// InferenceResultDto.SaveInferenceAiDto req
|
||||
// inferenceResultCoreService.getInferenceResultByU
|
||||
//
|
||||
// List<MapSheetNumDto> mapSheetNum = req.getMapSheetNum();
|
||||
// List<String> mapSheetNumList = new ArrayList<>();
|
||||
//
|
||||
// for (MapSheetNumDto mapSheetDto : mapSheetNum) {
|
||||
// mapSheetNumList.add(mapSheetDto.getMapSheetNum());
|
||||
// }
|
||||
//
|
||||
// String modelComparePath =
|
||||
// this.getSceneInference(String.valueOf(req.getCompareYyyy()), mapSheetNumList);
|
||||
// String modelTargetPath =
|
||||
// this.getSceneInference(String.valueOf(req.getTargetYyyy()), mapSheetNumList);
|
||||
//
|
||||
// pred_requests_areas predRequestsAreas = new pred_requests_areas();
|
||||
// predRequestsAreas.setInput1_year(req.getCompareYyyy());
|
||||
// predRequestsAreas.setInput2_year(req.getTargetYyyy());
|
||||
// predRequestsAreas.setInput1_scene_path(modelComparePath);
|
||||
// predRequestsAreas.setInput2_scene_path(modelTargetPath);
|
||||
//
|
||||
// InferenceSendDto m1 = this.getModelInfo(req.getModel1Uuid());
|
||||
// InferenceSendDto m2 = this.getModelInfo(req.getModel2Uuid());
|
||||
// InferenceSendDto m3 = this.getModelInfo(req.getModel3Uuid());
|
||||
//
|
||||
// m1.setPred_requests_areas(predRequestsAreas);
|
||||
// m2.setPred_requests_areas(predRequestsAreas);
|
||||
// m3.setPred_requests_areas(predRequestsAreas);
|
||||
//
|
||||
// Long batchId = this.ensureAccepted(m1);
|
||||
//
|
||||
// SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto();
|
||||
// saveInferenceAiDto.setUuid(uuid);
|
||||
// saveInferenceAiDto.setBatchId(batchId);
|
||||
// saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId());
|
||||
// saveInferenceAiDto.setType("M1");
|
||||
// saveInferenceAiDto.setInferStartDttm(ZonedDateTime.now());
|
||||
// inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
private void startInference(Long id, UUID uuid, String type, UUID modelUuid) {
|
||||
|
||||
InferenceProgressDto progressDto = inferenceResultCoreService.getInferenceAiResultById(id, type, modelUuid);
|
||||
|
||||
pred_requests_areas predRequestsAreas = new pred_requests_areas();
|
||||
predRequestsAreas.setInput1_year(progressDto.getPred_requests_areas().getInput1_year());
|
||||
predRequestsAreas.setInput2_year(progressDto.getPred_requests_areas().getInput2_year());
|
||||
predRequestsAreas.setInput1_scene_path(progressDto.getPred_requests_areas().getInput1_scene_path());
|
||||
predRequestsAreas.setInput2_scene_path(progressDto.getPred_requests_areas().getInput2_scene_path());
|
||||
|
||||
InferenceSendDto m = new InferenceSendDto();
|
||||
m.setModel_version(progressDto.getModelVersion());
|
||||
m.setCd_model_path(progressDto.getCdModelPath() + "/" + progressDto.getCdModelFileName());
|
||||
m.setCd_model_config(progressDto.getCdModelConfigPath() + "/" + progressDto.getCdModelConfigFileName());
|
||||
m.setCls_model_path(progressDto.getCdModelClsPath() + "/" + progressDto.getCdModelClsFileName());
|
||||
m.setCls_model_version(progressDto.getClsModelVersion());
|
||||
m.setCd_model_type(type);
|
||||
m.setPriority(progressDto.getPriority());
|
||||
|
||||
// 추론 다음모델 실행
|
||||
Long batchId = this.ensureAccepted(m);
|
||||
|
||||
SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto();
|
||||
saveInferenceAiDto.setUuid(uuid);
|
||||
saveInferenceAiDto.setBatchId(batchId);
|
||||
saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId());
|
||||
saveInferenceAiDto.setType(type);
|
||||
saveInferenceAiDto.setModelStartDttm(ZonedDateTime.now());
|
||||
inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
}
|
||||
|
||||
private Long ensureAccepted(InferenceSendDto dto) {
|
||||
log.info("dto null? {}", dto == null);
|
||||
ObjectMapper om = new ObjectMapper();
|
||||
try {
|
||||
log.info("dto json={}", om.writeValueAsString(dto));
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
headers.setAccept(List.of(MediaType.APPLICATION_JSON));
|
||||
|
||||
// TODO 추후 삭제
|
||||
if ("local".equals(profile)) {
|
||||
dto.getPred_requests_areas().setInput1_scene_path("/kamco-nfs/requests/2023_local.geojson");
|
||||
dto.getPred_requests_areas().setInput2_scene_path("/kamco-nfs/requests/2024_local.geojson");
|
||||
}
|
||||
|
||||
ExternalCallResult<String> result =
|
||||
externalHttpClient.call(inferenceUrl, HttpMethod.POST, dto, headers, String.class);
|
||||
|
||||
int status = result.statusCode();
|
||||
String body = result.body();
|
||||
|
||||
if (status < 200 || status >= 300) {
|
||||
throw new CustomApiException("BAD_GATEWAY", HttpStatus.BAD_GATEWAY);
|
||||
}
|
||||
|
||||
Long batchId = 0L;
|
||||
|
||||
try {
|
||||
List<Map<String, Object>> list =
|
||||
om.readValue(body, new TypeReference<List<Map<String, Object>>>() {
|
||||
});
|
||||
|
||||
Integer batchIdInt = (Integer) list.get(0).get("batch_id");
|
||||
batchId = batchIdInt.longValue();
|
||||
if (list.isEmpty()) {
|
||||
throw new IllegalStateException("Inference response is empty");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
|
||||
return batchId;
|
||||
}
|
||||
|
||||
private void updateProcessingEndTimeByModel(UUID uuid, ZonedDateTime dateTime, String type) {
|
||||
SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto();
|
||||
saveInferenceAiDto.setUuid(uuid);
|
||||
saveInferenceAiDto.setUpdateUid(0L);
|
||||
saveInferenceAiDto.setModelEndDttm(dateTime);
|
||||
saveInferenceAiDto.setType(type);
|
||||
inferenceResultCoreService.update(saveInferenceAiDto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user