From bc67753b9945bbb78276eb12cf75ed9d372f9066 Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 7 Apr 2026 17:19:31 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=99=EC=8A=B5=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EC=85=8B=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/dto/ModelTrainDetailDto.java | 15 ++-- .../core/ModelTrainMngCoreService.java | 1 + .../model/ModelDetailRepositoryImpl.java | 90 +++++++++++++++++-- 3 files changed, 96 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/kamco/cd/training/model/dto/ModelTrainDetailDto.java b/src/main/java/com/kamco/cd/training/model/dto/ModelTrainDetailDto.java index 41ec17e..cba368d 100644 --- a/src/main/java/com/kamco/cd/training/model/dto/ModelTrainDetailDto.java +++ b/src/main/java/com/kamco/cd/training/model/dto/ModelTrainDetailDto.java @@ -163,11 +163,12 @@ public class ModelTrainDetailDto { this.compareYyyy = compareYyyy; this.targetYyyy = targetYyyy; this.roundNo = roundNo; - this.buildingCnt = buildingCnt; - this.containerCnt = containerCnt; - this.wasteCnt = wasteCnt; - this.landCoverCnt = landCoverCnt; - this.solarPanelCnt = solarPanelCnt; + this.buildingCnt = toNullIfZero(buildingCnt); + this.containerCnt = toNullIfZero(containerCnt); + this.wasteCnt = toNullIfZero(wasteCnt); + this.landCoverCnt = toNullIfZero(landCoverCnt); + this.solarPanelCnt = toNullIfZero(solarPanelCnt); + this.dataTypeName = getDataTypeName(this.dataType); } @@ -177,6 +178,10 @@ public class ModelTrainDetailDto { } } + private static Long toNullIfZero(Long value) { + return (value == null || value == 0L) ? null : value; + } + @Getter @Setter @NoArgsConstructor diff --git a/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java b/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java index aa66047..ce6e014 100644 --- a/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java +++ b/src/main/java/com/kamco/cd/training/postgres/core/ModelTrainMngCoreService.java @@ -140,6 +140,7 @@ public class ModelTrainMngCoreService { * @param addReq 요청 파라미터 */ public void saveModelDataset(Long modelId, ModelTrainMngDto.AddReq addReq) { + TrainingDataset dataset = addReq.getTrainingDataset(); ModelMasterEntity modelMasterEntity = new ModelMasterEntity(); ModelDatasetEntity datasetEntity = new ModelDatasetEntity(); diff --git a/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDetailRepositoryImpl.java b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDetailRepositoryImpl.java index 34cef08..573148b 100644 --- a/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDetailRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/training/postgres/repository/model/ModelDetailRepositoryImpl.java @@ -1,6 +1,7 @@ package com.kamco.cd.training.postgres.repository.model; import static com.kamco.cd.training.postgres.entity.QDatasetEntity.datasetEntity; +import static com.kamco.cd.training.postgres.entity.QDatasetObjEntity.datasetObjEntity; import static com.kamco.cd.training.postgres.entity.QModelDatasetEntity.modelDatasetEntity; import static com.kamco.cd.training.postgres.entity.QModelDatasetMappEntity.modelDatasetMappEntity; import static com.kamco.cd.training.postgres.entity.QModelHyperParamEntity.modelHyperParamEntity; @@ -9,6 +10,8 @@ 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.DetectionClassification; +import com.kamco.cd.training.common.enums.ModelType; 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; @@ -25,6 +28,7 @@ import com.kamco.cd.training.postgres.entity.QModelHyperParamEntity; import com.kamco.cd.training.postgres.entity.QModelMasterEntity; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import java.util.ArrayList; @@ -154,11 +158,78 @@ public class ModelDetailRepositoryImpl implements ModelDetailRepositoryCustom { datasetEntity.compareYyyy, datasetEntity.targetYyyy, datasetEntity.roundNo, - modelDatasetEntity.buildingCnt, - modelDatasetEntity.containerCnt, - modelDatasetEntity.wasteCnt, - modelDatasetEntity.landCoverCnt, - modelDatasetEntity.solarCnt)) + + // G1 - building + new CaseBuilder() + .when( + modelMasterEntity + .modelNo + .eq(ModelType.G1.getId()) + .and( + datasetObjEntity.targetClassCd.eq( + DetectionClassification.BUILDING.getId()))) + .then(1L) + .otherwise(0L) + .sum(), + + // G1 - container + new CaseBuilder() + .when( + modelMasterEntity + .modelNo + .eq(ModelType.G1.getId()) + .and( + datasetObjEntity.targetClassCd.eq( + DetectionClassification.CONTAINER.getId()))) + .then(1L) + .otherwise(0L) + .sum(), + + // G2 - waste + new CaseBuilder() + .when( + modelMasterEntity + .modelNo + .eq(ModelType.G2.getId()) + .and( + datasetObjEntity.targetClassCd.eq( + DetectionClassification.WASTE.getId()))) + .then(1L) + .otherwise(0L) + .sum(), + + // G3 - 나머지 + new CaseBuilder() + .when( + modelMasterEntity + .modelNo + .eq(ModelType.G3.getId()) + .and( + datasetObjEntity + .targetClassCd + .isNotNull() + .and( + datasetObjEntity.targetClassCd.notIn( + DetectionClassification.BUILDING.getId(), + DetectionClassification.CONTAINER.getId(), + DetectionClassification.WASTE.getId(), + DetectionClassification.SOLAR.getId())))) + .then(1L) + .otherwise(0L) + .sum(), + + // G4 - solar + new CaseBuilder() + .when( + modelMasterEntity + .modelNo + .eq(ModelType.G4.getId()) + .and( + datasetObjEntity.targetClassCd.eq( + DetectionClassification.SOLAR.getId()))) + .then(1L) + .otherwise(0L) + .sum())) .from(modelMasterEntity) .innerJoin(modelDatasetEntity) .on(modelMasterEntity.id.eq(modelDatasetEntity.model.id)) @@ -166,7 +237,16 @@ public class ModelDetailRepositoryImpl implements ModelDetailRepositoryCustom { .on(modelMasterEntity.id.eq(modelDatasetMappEntity.modelUid)) .innerJoin(datasetEntity) .on(modelDatasetMappEntity.datasetUid.eq(datasetEntity.id)) + .leftJoin(datasetObjEntity) + .on(datasetEntity.id.eq(datasetObjEntity.datasetUid)) .where(modelMasterEntity.uuid.eq(uuid)) + .groupBy( + modelMasterEntity.id, + datasetEntity.id, + datasetEntity.dataType, + datasetEntity.compareYyyy, + datasetEntity.targetYyyy, + datasetEntity.roundNo) .fetch(); }