모델관리수정, chunk샘플페이지수정

This commit is contained in:
Moon
2026-01-09 15:21:58 +09:00
parent b78f4fb057
commit 3161b6dea7
7 changed files with 204 additions and 6 deletions

View File

@@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.model;
import com.kamco.cd.kamcoback.common.utils.zip.ZipUtils;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
import com.kamco.cd.kamcoback.model.dto.ModelMngDto;
import com.kamco.cd.kamcoback.model.dto.ModelMngDto.ModelUploadResDto;
import com.kamco.cd.kamcoback.model.service.ModelMngService;
import com.kamco.cd.kamcoback.upload.dto.UploadDto;
import io.swagger.v3.oas.annotations.Operation;
@@ -136,7 +137,7 @@ public class ModelMngApiController {
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
})
@PostMapping(value = "/file-chunk-upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ApiResponseDto<UploadDto.UploadRes> fileChunkUpload(
public ApiResponseDto<ModelUploadResDto> fileChunkUpload(
@RequestParam("uuid") UUID uuid,
@RequestParam("fileName") String fileName,
@RequestParam("fileSize") long fileSize,

View File

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.kamco.cd.kamcoback.common.utils.enums.CodeExpose;
import com.kamco.cd.kamcoback.common.utils.enums.EnumType;
import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm;
import com.kamco.cd.kamcoback.upload.dto.UploadDto;
import io.swagger.v3.oas.annotations.media.Schema;
import java.math.BigDecimal;
import java.time.ZonedDateTime;
@@ -65,6 +66,8 @@ public class ModelMngDto {
private String cdModelConfigFileName;
private String clsModelPath;
private String clsModelFileName;
private String clsModelVersion;
private double priority;
private String memo;
public Basic(
@@ -86,6 +89,8 @@ public class ModelMngDto {
String cdModelConfigFileName,
String clsModelPath,
String clsModelFileName,
String clsModelVersion,
double priority,
String memo) {
this.modelUid = modelUid;
this.modelVer = modelVer;
@@ -105,6 +110,8 @@ public class ModelMngDto {
this.cdModelConfigFileName = cdModelConfigFileName;
this.clsModelPath = clsModelPath;
this.clsModelFileName = clsModelFileName;
this.clsModelVersion = clsModelVersion;
this.priority = priority;
this.memo = memo;
}
}
@@ -128,6 +135,14 @@ public class ModelMngDto {
private String memo;
private Boolean deleted;
private UUID uuid;
private String cdModelPath;
private String cdModelFileName;
private String cdModelConfigPath;
private String cdModelConfigFileName;
private String clsModelPath;
private String clsModelFileName;
private String clsModelVersion;
private double priority;
}
@Schema(name = "ModelAddReq", description = "모델 등록 req")
@@ -149,6 +164,8 @@ public class ModelMngDto {
private String clsModelFileName;
private String memo;
@JsonIgnore private String clsModelVersion;
@JsonIgnore private double priority;
@JsonIgnore private UUID uuid;
}
@@ -176,6 +193,7 @@ public class ModelMngDto {
}
}
@Schema(name = "ModelMetricAddReq", description = "모델 등록 req")
@Getter
@Setter
@@ -190,4 +208,33 @@ public class ModelMngDto {
private double loss;
private double iou;
}
@Schema(name = "ModelUploadResDto", description = "모델 등록 req")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public static class ModelUploadResDto {
private String res;
private String resMsg;
private UUID uuid;
private String filePath;
private String fileName;
private String cdModelPath;
private String cdModelFileName;
private String cdModelConfigPath;
private String cdModelConfigFileName;
private String clsModelPath;
private String clsModelFileName;
private int chunkIndex;
private int chunkTotalIndex;
public double getUploadRate() {
if (this.chunkTotalIndex == 0) {
return 0.0;
}
return (double) (this.chunkIndex + 1) / (this.chunkTotalIndex + 1) * 100.0;
}
}
}

View File

@@ -1,12 +1,19 @@
package com.kamco.cd.kamcoback.model.service;
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.mapsheet.dto.FileDto.FilesDto;
import com.kamco.cd.kamcoback.mapsheet.dto.FileDto.SrchFilesDto;
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;
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.time.LocalDate;
import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
@@ -63,6 +70,8 @@ public class ModelMngService {
public ApiResponseDto.ResponseObj insertModel(ModelMngDto.AddReq addReq) {
UUID uuid = UUID.randomUUID();
addReq.setUuid(uuid);
addReq.setClsModelVersion(addReq.getModelVer());
addReq.setPriority(0L);
Long modelUid = modelMngCoreService.insertModel(addReq);
ModelMetricAddReq modelMetricAddReq = new ModelMetricAddReq();
@@ -74,15 +83,80 @@ public class ModelMngService {
modelMetricAddReq.setLoss(0);
modelMetricAddReq.setIou(0);
modelMngCoreService.insertModelResultMetric(modelMetricAddReq);
return new ApiResponseDto.ResponseObj(ApiResponseDto.ApiResponseCode.OK, "등록되었습니다.");
}
public UploadDto.UploadRes uploadChunkModelFile(
public ModelUploadResDto uploadChunkModelFile(
UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile) {
UploadDto.UploadRes upRes = uploadService.uploadChunk(upAddReqDto, chunkFile);
UploadDto.UploadRes upRes = uploadService.uploadChunk(upAddReqDto, chunkFile);
return upRes;
ModelUploadResDto modelUploadResDto = new ModelUploadResDto();
modelUploadResDto.setRes(upRes.getRes());
modelUploadResDto.setResMsg(upRes.getResMsg());
modelUploadResDto.setUuid(upRes.getUuid());
modelUploadResDto.setFilePath(upRes.getFilePath());
modelUploadResDto.setFileName(upRes.getFileName());
modelUploadResDto.setChunkIndex(upRes.getChunkIndex());
modelUploadResDto.setChunkTotalIndex(upRes.getChunkTotalIndex());
//압축풀기 (String zipFilePath, String destDirectory)
if( upRes.getChunkIndex() == upRes.getChunkTotalIndex() ) {
try {
FIleChecker.unzip(upRes.getFileName(), upRes.getFilePath());
this.getUnzipModelFiles(upRes.getFilePath(), modelUploadResDto);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return modelUploadResDto;
}
public ModelUploadResDto getUnzipModelFiles(String dirPath, ModelUploadResDto modelUploadResDto) {
//String dirPath = srchDto.getDirPath();
int startPos = 0;
int endPos = 20;
List<Basic> files =
FIleChecker.getFilesFromAllDepth(
dirPath,
"*",
"pth,py",
10,
"name",
startPos,
endPos);
for (Basic dto : files) {
// 예: 파일명 출력 및 추가 작업
String foldNm = dto.getFullPath().replace(dto.getFileNm(), "");
if( dto.getExtension().equals("pth") ) {
modelUploadResDto.setCdModelPath(foldNm);
modelUploadResDto.setCdModelFileName(dto.getFileNm());
}else if( dto.getExtension().equals("py") ) {
modelUploadResDto.setCdModelConfigPath(foldNm);
modelUploadResDto.setCdModelConfigFileName(dto.getFileNm());
}else if( dto.getExtension().equals("json") ) {
modelUploadResDto.setClsModelPath(foldNm);
modelUploadResDto.setClsModelFileName(dto.getFileNm());
}
}
//int fileListPos = 0;
//int fileTotCnt = files.size();
//long fileTotSize = FIleChecker.getFileTotSize(files);
return modelUploadResDto;
}
}