Merge pull request '모델학습 2단계 패키징 시작,종료일시,상태 로직 추가' (#117) from feat/training_260202 into develop

Reviewed-on: #117
This commit was merged in pull request #117.
This commit is contained in:
2026-02-19 14:44:12 +09:00
7 changed files with 80 additions and 4 deletions

View File

@@ -43,6 +43,10 @@ public class ModelTrainMngDto {
private Long currentAttemptId;
private String requestPath;
private String packingState;
private ZonedDateTime packingStrtDttm;
private ZonedDateTime packingEndDttm;
public String getStatusName() {
if (this.statusCd == null || this.statusCd.isBlank()) return null;
try {
@@ -100,6 +104,10 @@ public class ModelTrainMngDto {
public String getStep2Duration() {
return formatDuration(this.step2StrtDttm, this.step2EndDttm);
}
public String getPackingDuration() {
return formatDuration(this.packingStrtDttm, this.packingEndDttm);
}
}
@Schema(name = "searchReq", description = "모델학습 관리 목록조회 파라미터")

View File

@@ -4,6 +4,7 @@ import com.kamco.cd.training.postgres.repository.train.ModelTestMetricsJobReposi
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ModelMetricJsonDto;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ModelTestFileName;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ResponsePathDto;
import java.time.ZonedDateTime;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -36,4 +37,12 @@ public class ModelTestMetricsJobCoreService {
public ModelTestFileName findModelTestFileNames(Long modelId) {
return modelTestMetricsJobRepository.findModelTestFileNames(modelId);
}
public void updatePackingStart(Long modelId, ZonedDateTime now) {
modelTestMetricsJobRepository.updatePackingStart(modelId, now);
}
public void updatePackingEnd(Long modelId, ZonedDateTime now, String failSuccState) {
modelTestMetricsJobRepository.updatePackingEnd(modelId, now, failSuccState);
}
}

View File

@@ -112,6 +112,15 @@ public class ModelMasterEntity {
@Column(name = "response_path")
private String responsePath;
@Column(name = "packing_state")
private String packingState;
@Column(name = "packing_strt_dttm")
private ZonedDateTime packingStrtDttm;
@Column(name = "packing_end_dttm")
private ZonedDateTime packingEndDttm;
public ModelTrainMngDto.Basic toDto() {
return new ModelTrainMngDto.Basic(
this.id,
@@ -128,6 +137,9 @@ public class ModelMasterEntity {
this.trainType,
this.modelNo,
this.currentAttemptId,
this.requestPath);
this.requestPath,
this.packingState,
this.packingStrtDttm,
this.packingEndDttm);
}
}

View File

@@ -9,6 +9,7 @@ import static com.kamco.cd.training.postgres.entity.QModelMetricsTestEntity.mode
import static com.kamco.cd.training.postgres.entity.QModelMetricsTrainEntity.modelMetricsTrainEntity;
import static com.kamco.cd.training.postgres.entity.QModelMetricsValidationEntity.modelMetricsValidationEntity;
import com.kamco.cd.training.common.enums.TrainStatusType;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.DetailSummary;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.HyperSummary;
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.MappingDataset;
@@ -277,7 +278,10 @@ public class ModelDetailRepositoryImpl implements ModelDetailRepositoryCustom {
.select(
Projections.constructor(
ModelFileInfo.class,
modelMasterEntity.step2MetricSaveYn,
modelMasterEntity
.packingState
.eq(TrainStatusType.COMPLETED.getId())
.coalesce(false),
modelMasterEntity.modelVer))
.from(modelMasterEntity)
.where(modelMasterEntity.uuid.eq(uuid))

View File

@@ -3,6 +3,7 @@ package com.kamco.cd.training.postgres.repository.train;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ModelMetricJsonDto;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ModelTestFileName;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ResponsePathDto;
import java.time.ZonedDateTime;
import java.util.List;
public interface ModelTestMetricsJobRepositoryCustom {
@@ -16,4 +17,8 @@ public interface ModelTestMetricsJobRepositoryCustom {
ModelMetricJsonDto getTestMetricPackingInfo(Long modelId);
ModelTestFileName findModelTestFileNames(Long modelId);
void updatePackingStart(Long modelId, ZonedDateTime now);
void updatePackingEnd(Long modelId, ZonedDateTime now, String failSuccState);
}

View File

@@ -12,6 +12,7 @@ import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.Properties;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ResponsePathDto;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.time.ZonedDateTime;
import java.util.List;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -114,4 +115,24 @@ public class ModelTestMetricsJobRepositoryImpl extends QuerydslRepositorySupport
.where(modelMetricsTestEntity.model.id.eq(modelId))
.fetchOne();
}
@Override
public void updatePackingStart(Long modelId, ZonedDateTime now) {
queryFactory
.update(modelMasterEntity)
.set(modelMasterEntity.packingStrtDttm, ZonedDateTime.now())
.set(modelMasterEntity.packingState, TrainStatusType.READY.getId())
.where(modelMasterEntity.id.eq(modelId))
.execute();
}
@Override
public void updatePackingEnd(Long modelId, ZonedDateTime now, String failSuccState) {
queryFactory
.update(modelMasterEntity)
.set(modelMasterEntity.packingEndDttm, ZonedDateTime.now())
.set(modelMasterEntity.packingState, failSuccState)
.where(modelMasterEntity.id.eq(modelId))
.execute();
}
}

View File

@@ -2,6 +2,7 @@ package com.kamco.cd.training.train.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.kamco.cd.training.common.enums.TrainStatusType;
import com.kamco.cd.training.postgres.core.ModelTestMetricsJobCoreService;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ModelMetricJsonDto;
import com.kamco.cd.training.train.dto.ModelTrainMetricsDto.ModelTestFileName;
@@ -14,6 +15,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -111,11 +113,18 @@ public class ModelTestMetricsJobService {
modelTestMetricsJobCoreService.insertModelMetricsTest(batchArgs);
// test.csv 파일 읽어서 저장한 여부로만 사용하기
modelTestMetricsJobCoreService.updateModelMetricsTrainSaveYn(
modelInfo.getModelId(), "step2");
} catch (IOException e) {
throw new RuntimeException(e);
}
// 패키징할 파일 만들기
modelTestMetricsJobCoreService.updatePackingStart(
modelInfo.getModelId(), ZonedDateTime.now());
ModelMetricJsonDto jsonDto =
modelTestMetricsJobCoreService.getTestMetricPackingInfo(modelInfo.getModelId());
try {
@@ -165,8 +174,16 @@ public class ModelTestMetricsJobService {
throw new RuntimeException(e);
}
zipFiles(files, zipPath);
modelTestMetricsJobCoreService.updateModelMetricsTrainSaveYn(modelInfo.getModelId(), "step2");
try {
zipFiles(files, zipPath);
modelTestMetricsJobCoreService.updatePackingEnd(
modelInfo.getModelId(), ZonedDateTime.now(), TrainStatusType.COMPLETED.getId());
} catch (IOException e) {
modelTestMetricsJobCoreService.updatePackingEnd(
modelInfo.getModelId(), ZonedDateTime.now(), TrainStatusType.ERROR.getId());
throw new RuntimeException(e);
}
}
}