diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java index ad42ef1e..b887fbc4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/GukYuinApiController.java @@ -302,7 +302,7 @@ public class GukYuinApiController { return ApiResponseDto.ok(gukYuinApiService.findRlbDtctList(chnDtctId)); } - @Operation(summary = "탐지객체 적합여부 조회 (리스트조회)", description = "탐지객체 적합여부 조회 (리스트조회)") + @Operation(summary = "탐지객체 적합여부 조회 (객체별 조회)", description = "탐지객체 적합여부 조회 (객체별 조회)") @GetMapping("/rlb/objt/{chnDtctObjtId}") @ApiResponses( value = { diff --git a/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java b/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java index e6472c04..16b22e4d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java +++ b/src/main/java/com/kamco/cd/kamcoback/gukyuin/dto/GukYuinStatus.java @@ -12,6 +12,7 @@ public enum GukYuinStatus implements EnumType { GUK_COMPLETED("국유인 매핑 완료"), PNU_COMPLETED("PNU 싱크 완료"), PNU_FAILED("PNU 싱크 중 에러"), + END("종료"), CANCELED("취소"); private final String desc; diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java index 9346f9a9..c8dbb139 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinJobCoreService.java @@ -1,7 +1,6 @@ package com.kamco.cd.kamcoback.postgres.core; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinRepository; import java.util.List; @@ -23,16 +22,4 @@ public class GukYuinJobCoreService { public List findGukyuinApplyStatusUidList(List gukYuinStatus) { return gukYuinRepository.findGukyuinApplyStatusUidList(gukYuinStatus); } - - public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { - return gukYuinRepository.upsertMapSheetDataAnalGeomPnu(chnDtctObjtId, pnuList); - } - - public List findYesterdayLabelingCompleteList() { - return gukYuinRepository.findYesterdayLabelingCompleteList(); - } - - public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { - gukYuinRepository.updateAnalDataInferenceGeomSendDttm(geoUid); - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinLabelJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinLabelJobCoreService.java index dff8d219..84bf79b4 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinLabelJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinLabelJobCoreService.java @@ -1,8 +1,6 @@ package com.kamco.cd.kamcoback.postgres.core; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinLabelJobRepository; import java.util.List; import org.springframework.stereotype.Service; @@ -16,18 +14,6 @@ public class GukYuinLabelJobCoreService { this.gukYuinLabelRepository = gukYuinLabelRepository; } - public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { - gukYuinLabelRepository.updateGukYuinApplyStateComplete(id, status); - } - - public List findGukyuinApplyStatusUidList(List gukYuinStatus) { - return gukYuinLabelRepository.findGukyuinApplyStatusUidList(gukYuinStatus); - } - - public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { - return gukYuinLabelRepository.upsertMapSheetDataAnalGeomPnu(chnDtctObjtId, pnuList); - } - public List findYesterdayLabelingCompleteList() { return gukYuinLabelRepository.findYesterdayLabelingCompleteList(); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuJobCoreService.java index ca0bf2f8..1b32d430 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinPnuJobCoreService.java @@ -1,15 +1,9 @@ package com.kamco.cd.kamcoback.postgres.core; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinPnuJobRepository; -import java.time.LocalDate; import java.util.List; -import java.util.UUID; import org.springframework.stereotype.Service; @Service @@ -33,22 +27,6 @@ public class GukYuinPnuJobCoreService { return gukYuinPnuRepository.upsertMapSheetDataAnalGeomPnu(chnDtctObjtId, pnuList); } - public List findYesterdayLabelingCompleteList() { - return gukYuinPnuRepository.findYesterdayLabelingCompleteList(); - } - - public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { - gukYuinPnuRepository.updateAnalDataInferenceGeomSendDttm(geoUid); - } - - public void updateGukYuinMastRegResult(Basic resultBody) { - gukYuinPnuRepository.updateGukYuinMastRegResult(resultBody); - } - - public void updateGukYuinMastRegRemove(Basic resultBody) { - gukYuinPnuRepository.updateGukYuinMastRegRemove(resultBody); - } - public void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt) { gukYuinPnuRepository.updateInferenceGeomDataPnuCnt(chnDtctObjtId, pnuCnt); } @@ -60,20 +38,4 @@ public class GukYuinPnuJobCoreService { public void insertGeoUidPnuData(Long geoUid, String[] pnuList) { gukYuinPnuRepository.insertGeoUidPnuData(geoUid, pnuList); } - - public LearnInfo findMapSheetLearnInfo(UUID uuid) { - return gukYuinPnuRepository.findMapSheetLearnInfo(uuid); - } - - public Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy) { - return gukYuinPnuRepository.findMapSheetLearnYearStage(compareYyyy, targetYyyy); - } - - public void updateAnalInferenceApplyDttm(Basic registRes) { - gukYuinPnuRepository.updateAnalInferenceApplyDttm(registRes); - } - - public List findLabelingCompleteSendList(LocalDate yesterday) { - return gukYuinPnuRepository.findLabelingCompleteSendList(yesterday); - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java index c812f720..9e273af5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/GukYuinStbltJobCoreService.java @@ -1,8 +1,6 @@ package com.kamco.cd.kamcoback.postgres.core; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.postgres.repository.gukyuin.GukYuinStbltJobRepository; import java.util.List; import org.springframework.stereotype.Service; @@ -16,23 +14,11 @@ public class GukYuinStbltJobCoreService { this.gukYuinStbltRepository = gukYuinStbltRepository; } - public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { - gukYuinStbltRepository.updateGukYuinApplyStateComplete(id, status); + public List findGukYuinEligibleForSurveyList(String status) { + return gukYuinStbltRepository.findGukYuinEligibleForSurveyList(status); } - public List findGukyuinApplyStatusUidList(List gukYuinStatus) { - return gukYuinStbltRepository.findGukyuinApplyStatusUidList(gukYuinStatus); - } - - public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { - return gukYuinStbltRepository.upsertMapSheetDataAnalGeomPnu(chnDtctObjtId, pnuList); - } - - public List findYesterdayLabelingCompleteList() { - return gukYuinStbltRepository.findYesterdayLabelingCompleteList(); - } - - public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { - gukYuinStbltRepository.updateAnalDataInferenceGeomSendDttm(geoUid); + public void updateGukYuinEligibleForSurvey(String resultUid, String stbltYn, String lockYn) { + gukYuinStbltRepository.updateGukYuinEligibleForSurvey(resultUid, stbltYn, lockYn); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java new file mode 100644 index 00000000..640783b4 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataLabelJobCoreService.java @@ -0,0 +1,36 @@ +package com.kamco.cd.kamcoback.postgres.core; + +import com.kamco.cd.kamcoback.postgres.repository.scheduler.TrainingDataLabelJobRepository; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; +import java.util.List; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class TrainingDataLabelJobCoreService { + + private final TrainingDataLabelJobRepository trainingDataLabelJobRepository; + + public List findCompletedYesterdayUnassigned() { + return trainingDataLabelJobRepository.findCompletedYesterdayUnassigned(); + } + + public void assignReviewerBatch(List assignmentUids, String reviewerId) { + trainingDataLabelJobRepository.assignReviewerBatch(assignmentUids, reviewerId); + } + + public List findInspectorPendingByRound(Long analUid) { + return trainingDataLabelJobRepository.findInspectorPendingByRound(analUid); + } + + public void lockInspectors(Long analUid, List reviewerIds) { + trainingDataLabelJobRepository.lockInspectors(analUid, reviewerIds); + } + + public void updateGeomUidTestState(List geomUids) { + trainingDataLabelJobRepository.updateGeomUidTestState(geomUids); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java index b5dd96e3..ad72ea54 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/TrainingDataReviewJobCoreService.java @@ -4,10 +4,7 @@ import com.kamco.cd.kamcoback.postgres.repository.scheduler.TrainingDataReviewJo import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import java.util.List; -import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -17,34 +14,6 @@ public class TrainingDataReviewJobCoreService { private final TrainingDataReviewJobRepository trainingDataReviewJobRepository; - public List findCompletedYesterdayUnassigned() { - return trainingDataReviewJobRepository.findCompletedYesterdayUnassigned(); - } - - public void assignReviewer(UUID assignmentUid, String reviewerId) { - trainingDataReviewJobRepository.assignReviewer(assignmentUid, reviewerId); - } - - public void assignReviewerBatch(List assignmentUids, String reviewerId) { - trainingDataReviewJobRepository.assignReviewerBatch(assignmentUids, reviewerId); - } - - public Tasks findAssignmentTask(String assignmentUid) { - return trainingDataReviewJobRepository.findAssignmentTask(assignmentUid); - } - - public List findInspectorPendingByRound(Long analUid) { - return trainingDataReviewJobRepository.findInspectorPendingByRound(analUid); - } - - public void lockInspectors(Long analUid, List reviewerIds) { - trainingDataReviewJobRepository.lockInspectors(analUid, reviewerIds); - } - - public void updateGeomUidTestState(List geomUids) { - trainingDataReviewJobRepository.updateGeomUidTestState(geomUids); - } - public List findCompletedYesterdayLabelingList( Long analUid, String mapSheetNum) { return trainingDataReviewJobRepository.findCompletedYesterdayLabelingList(analUid, mapSheetNum); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java index e03c8c76..1877ec37 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetAnalDataInferenceGeomEntity.java @@ -159,6 +159,9 @@ public class MapSheetAnalDataInferenceGeomEntity { @Column(name = "label_send_dttm") private ZonedDateTime labelSendDttm; + @Column(name = "lock_yn") + private String lockYn; + public InferenceDetailDto.DetailListEntity toEntity() { DetectionClassification classification = DetectionClassification.fromString(classBeforeCd); Clazzes comparedClazz = new Clazzes(classification, classBeforeProb); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryCustom.java index e433a96b..3e418b58 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryCustom.java @@ -1,42 +1,11 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import java.time.LocalDate; import java.util.List; -import java.util.UUID; public interface GukYuinLabelJobRepositoryCustom { - void updateGukYuinMastRegResult(Basic resultBody); - - void updateGukYuinMastRegRemove(Basic resultBody); - - void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt); - - Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId); - - void insertGeoUidPnuData(Long geoUid, String[] pnuList); - - void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status); - - List findGukyuinApplyStatusUidList(List gukYuinStatus); - - long upsertMapSheetDataAnalGeomPnu(String uid, String[] pnuList); - - LearnInfo findMapSheetLearnInfo(UUID uuid); - - Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy); - - void updateAnalInferenceApplyDttm(Basic registRes); - List findYesterdayLabelingCompleteList(); void updateAnalDataInferenceGeomSendDttm(Long geoUid); - - List findLabelingCompleteSendList(LocalDate yesterday); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java index 6532bdaa..966f824e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinLabelJobRepositoryImpl.java @@ -4,28 +4,18 @@ import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.l import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import jakarta.transaction.Transactional; -import java.time.LocalDate; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; -import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -36,161 +26,6 @@ public class GukYuinLabelJobRepositoryImpl implements GukYuinLabelJobRepositoryC private final JPAQueryFactory queryFactory; @PersistenceContext private EntityManager em; - @Override - public void updateGukYuinMastRegResult(Basic resultBody) { - - int excnPgrt = Integer.parseInt(resultBody.getExcnPgrt()); - int stage = Integer.parseInt(resultBody.getChnDtctSno()); - GukYuinStatus status = GukYuinStatus.IN_PROGRESS; - if (excnPgrt == 100) { - status = GukYuinStatus.GUK_COMPLETED; - } - - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.stage, stage) - .set(mapSheetLearnEntity.applyStatus, status.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .set(mapSheetLearnEntity.chnDtctMstId, resultBody.getChnDtctMstId()) - .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) - .execute(); - } - - @Override - public void updateGukYuinMastRegRemove(Basic resultBody) { - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.applyStatus, GukYuinStatus.CANCELED.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) - .execute(); - } - - @Override - public void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt) { - queryFactory - .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.pnu, pnuCnt) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .execute(); - } - - @Override - public Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId) { - return queryFactory - .select(mapSheetAnalDataInferenceGeomEntity.geoUid) - .from(mapSheetAnalDataInferenceGeomEntity) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .fetchOne(); - } - - @Override - public void insertGeoUidPnuData(Long geoUid, String[] pnuList) { - for (String pnu : pnuList) { - queryFactory - .insert(pnuEntity) - .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) - .values(geoUid, pnu, ZonedDateTime.now()) - .execute(); - } - } - - @Override - public List findGukyuinApplyStatusUidList(List status) { - return queryFactory - .select( - Projections.constructor( - LearnKeyDto.class, - mapSheetLearnEntity.id, - mapSheetLearnEntity.uid, - mapSheetLearnEntity.chnDtctMstId)) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.applyStatus.in(status)) - .fetch(); - } - - @Override - public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { - long length = pnuList.length; - queryFactory - .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.pnu, length) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .execute(); - - Long geoUid = - queryFactory - .select(mapSheetAnalDataInferenceGeomEntity.geoUid) - .from(mapSheetAnalDataInferenceGeomEntity) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .fetchOne(); - - long succCnt = 0; - for (String pnu : pnuList) { - long result = - queryFactory - .insert(pnuEntity) - .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) - .values(geoUid, pnu, ZonedDateTime.now()) - .execute(); - if (result > 0) { - succCnt++; - } - } - return succCnt; - } - - @Override - public LearnInfo findMapSheetLearnInfo(UUID uuid) { - return queryFactory - .select( - Projections.constructor( - LearnInfo.class, - mapSheetLearnEntity.id, - mapSheetLearnEntity.uuid, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.stage, - mapSheetLearnEntity.uid, - mapSheetLearnEntity.applyStatus)) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne(); - } - - @Override - public Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy) { - NumberExpression stageExpr = - Expressions.numberTemplate(Integer.class, "coalesce({0}, 0)", mapSheetLearnEntity.stage); - - return queryFactory - .select(stageExpr.max().coalesce(0)) - .from(mapSheetLearnEntity) - .where( - mapSheetLearnEntity.compareYyyy.eq(compareYyyy), - mapSheetLearnEntity.targetYyyy.eq(targetYyyy), - mapSheetLearnEntity.applyStatus.isNotNull(), - mapSheetLearnEntity.applyStatus.ne(GukYuinStatus.PENDING.getId())) - .fetchOne(); - } - - @Override - public void updateAnalInferenceApplyDttm(Basic registRes) { - Long learnId = - queryFactory - .select(mapSheetLearnEntity.id) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uid.eq(registRes.getChnDtctId())) - .fetchOne(); - - queryFactory - .update(mapSheetAnalInferenceEntity) - .set(mapSheetAnalInferenceEntity.gukyuinUsed, "Y") - .set(mapSheetAnalInferenceEntity.gukyuinApplyDttm, ZonedDateTime.now()) - .where(mapSheetAnalInferenceEntity.learnId.eq(learnId)) - .execute(); - } - @Override public List findYesterdayLabelingCompleteList() { ZoneId zone = ZoneId.of("Asia/Seoul"); @@ -233,47 +68,4 @@ public class GukYuinLabelJobRepositoryImpl implements GukYuinLabelJobRepositoryC .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(geoUid)) .execute(); } - - @Override - public List findLabelingCompleteSendList(LocalDate yesterday) { - - ZoneId zone = ZoneId.of("Asia/Seoul"); - ZonedDateTime from = yesterday.atStartOfDay(zone); - ZonedDateTime to = from.plusDays(1); - - BooleanExpression isYesterday = - labelingAssignmentEntity - .inspectStatDttm - .goe(from) - .and(labelingAssignmentEntity.inspectStatDttm.lt(to)); - - return queryFactory - .select( - Projections.constructor( - LabelSendDto.class, - mapSheetAnalDataInferenceGeomEntity.resultUid, - labelingAssignmentEntity.workerUid, - labelingAssignmentEntity.workStatDttm, - labelingAssignmentEntity.inspectorUid, - labelingAssignmentEntity.inspectStatDttm, - mapSheetAnalDataInferenceGeomEntity.labelSendDttm)) - .from(labelingAssignmentEntity) - .innerJoin(mapSheetAnalDataInferenceGeomEntity) - .on( - labelingAssignmentEntity.inferenceGeomUid.eq( - mapSheetAnalDataInferenceGeomEntity.geoUid)) - .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) - .fetch(); - } - - @Override - @Transactional - public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.applyStatus, status.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .where(mapSheetLearnEntity.id.eq(id)) - .execute(); - } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryCustom.java index 46e1ff33..bb5b66cc 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryCustom.java @@ -1,21 +1,11 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import java.time.LocalDate; import java.util.List; -import java.util.UUID; public interface GukYuinPnuJobRepositoryCustom { - void updateGukYuinMastRegResult(Basic resultBody); - - void updateGukYuinMastRegRemove(Basic resultBody); - void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt); Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId); @@ -27,16 +17,4 @@ public interface GukYuinPnuJobRepositoryCustom { List findGukyuinApplyStatusUidList(List gukYuinStatus); long upsertMapSheetDataAnalGeomPnu(String uid, String[] pnuList); - - LearnInfo findMapSheetLearnInfo(UUID uuid); - - Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy); - - void updateAnalInferenceApplyDttm(Basic registRes); - - List findYesterdayLabelingCompleteList(); - - void updateAnalDataInferenceGeomSendDttm(Long geoUid); - - List findLabelingCompleteSendList(LocalDate yesterday); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryImpl.java index b3794bdd..19eb94fd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinPnuJobRepositoryImpl.java @@ -1,31 +1,18 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; -import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.transaction.Transactional; -import java.time.LocalDate; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; -import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -36,36 +23,6 @@ public class GukYuinPnuJobRepositoryImpl implements GukYuinPnuJobRepositoryCusto private final JPAQueryFactory queryFactory; @PersistenceContext private EntityManager em; - @Override - public void updateGukYuinMastRegResult(Basic resultBody) { - - int excnPgrt = Integer.parseInt(resultBody.getExcnPgrt()); - int stage = Integer.parseInt(resultBody.getChnDtctSno()); - GukYuinStatus status = GukYuinStatus.IN_PROGRESS; - if (excnPgrt == 100) { - status = GukYuinStatus.GUK_COMPLETED; - } - - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.stage, stage) - .set(mapSheetLearnEntity.applyStatus, status.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .set(mapSheetLearnEntity.chnDtctMstId, resultBody.getChnDtctMstId()) - .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) - .execute(); - } - - @Override - public void updateGukYuinMastRegRemove(Basic resultBody) { - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.applyStatus, GukYuinStatus.CANCELED.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) - .execute(); - } - @Override public void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt) { queryFactory @@ -140,132 +97,6 @@ public class GukYuinPnuJobRepositoryImpl implements GukYuinPnuJobRepositoryCusto return succCnt; } - @Override - public LearnInfo findMapSheetLearnInfo(UUID uuid) { - return queryFactory - .select( - Projections.constructor( - LearnInfo.class, - mapSheetLearnEntity.id, - mapSheetLearnEntity.uuid, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.stage, - mapSheetLearnEntity.uid, - mapSheetLearnEntity.applyStatus)) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne(); - } - - @Override - public Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy) { - NumberExpression stageExpr = - Expressions.numberTemplate(Integer.class, "coalesce({0}, 0)", mapSheetLearnEntity.stage); - - return queryFactory - .select(stageExpr.max().coalesce(0)) - .from(mapSheetLearnEntity) - .where( - mapSheetLearnEntity.compareYyyy.eq(compareYyyy), - mapSheetLearnEntity.targetYyyy.eq(targetYyyy), - mapSheetLearnEntity.applyStatus.isNotNull(), - mapSheetLearnEntity.applyStatus.ne(GukYuinStatus.PENDING.getId())) - .fetchOne(); - } - - @Override - public void updateAnalInferenceApplyDttm(Basic registRes) { - Long learnId = - queryFactory - .select(mapSheetLearnEntity.id) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uid.eq(registRes.getChnDtctId())) - .fetchOne(); - - queryFactory - .update(mapSheetAnalInferenceEntity) - .set(mapSheetAnalInferenceEntity.gukyuinUsed, "Y") - .set(mapSheetAnalInferenceEntity.gukyuinApplyDttm, ZonedDateTime.now()) - .where(mapSheetAnalInferenceEntity.learnId.eq(learnId)) - .execute(); - } - - @Override - public List findYesterdayLabelingCompleteList() { - ZoneId zone = ZoneId.of("Asia/Seoul"); - ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); - ZonedDateTime yesterdayStart = todayStart.minusDays(1); - - BooleanExpression isYesterday = - labelingAssignmentEntity - .inspectStatDttm - .goe(yesterdayStart) - .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart)); - - return queryFactory - .select( - Projections.constructor( - GeomUidDto.class, - labelingAssignmentEntity.inferenceGeomUid, - mapSheetAnalDataInferenceGeomEntity.resultUid)) - .from(labelingAssignmentEntity) - .innerJoin(mapSheetAnalDataInferenceGeomEntity) - .on( - labelingAssignmentEntity.inferenceGeomUid.eq( - mapSheetAnalDataInferenceGeomEntity.geoUid)) - .innerJoin(mapSheetAnalInferenceEntity) - .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) - .innerJoin(mapSheetLearnEntity) - .on( - mapSheetAnalInferenceEntity.learnId.eq(mapSheetLearnEntity.id), - mapSheetLearnEntity.applyStatus.in( - GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_COMPLETED.getId())) - .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) - .fetch(); - } - - @Override - public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { - queryFactory - .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.labelSendDttm, ZonedDateTime.now()) - .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(geoUid)) - .execute(); - } - - @Override - public List findLabelingCompleteSendList(LocalDate yesterday) { - - ZoneId zone = ZoneId.of("Asia/Seoul"); - ZonedDateTime from = yesterday.atStartOfDay(zone); - ZonedDateTime to = from.plusDays(1); - - BooleanExpression isYesterday = - labelingAssignmentEntity - .inspectStatDttm - .goe(from) - .and(labelingAssignmentEntity.inspectStatDttm.lt(to)); - - return queryFactory - .select( - Projections.constructor( - LabelSendDto.class, - mapSheetAnalDataInferenceGeomEntity.resultUid, - labelingAssignmentEntity.workerUid, - labelingAssignmentEntity.workStatDttm, - labelingAssignmentEntity.inspectorUid, - labelingAssignmentEntity.inspectStatDttm, - mapSheetAnalDataInferenceGeomEntity.labelSendDttm)) - .from(labelingAssignmentEntity) - .innerJoin(mapSheetAnalDataInferenceGeomEntity) - .on( - labelingAssignmentEntity.inferenceGeomUid.eq( - mapSheetAnalDataInferenceGeomEntity.geoUid)) - .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) - .fetch(); - } - @Override @Transactional public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java index 25d4f866..73d5f340 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryCustom.java @@ -1,42 +1,11 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import java.time.LocalDate; import java.util.List; -import java.util.UUID; public interface GukYuinStbltJobRepositoryCustom { - void updateGukYuinMastRegResult(Basic resultBody); + List findGukYuinEligibleForSurveyList(String status); - void updateGukYuinMastRegRemove(Basic resultBody); - - void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt); - - Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId); - - void insertGeoUidPnuData(Long geoUid, String[] pnuList); - - void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status); - - List findGukyuinApplyStatusUidList(List gukYuinStatus); - - long upsertMapSheetDataAnalGeomPnu(String uid, String[] pnuList); - - LearnInfo findMapSheetLearnInfo(UUID uuid); - - Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy); - - void updateAnalInferenceApplyDttm(Basic registRes); - - List findYesterdayLabelingCompleteList(); - - void updateAnalDataInferenceGeomSendDttm(Long geoUid); - - List findLabelingCompleteSendList(LocalDate yesterday); + void updateGukYuinEligibleForSurvey(String resultUid, String stbltYn, String lockYn); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java index f7002334..1e6ee047 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/gukyuin/GukYuinStbltJobRepositoryImpl.java @@ -1,31 +1,19 @@ package com.kamco.cd.kamcoback.postgres.repository.gukyuin; -import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceEntity.mapSheetAnalDataInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QPnuEntity.pnuEntity; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.Basic; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LabelSendDto; +import com.kamco.cd.kamcoback.common.enums.ImageryFitStatus; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.GeomUidDto; -import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinDto.LearnInfo; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import jakarta.transaction.Transactional; -import java.time.LocalDate; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; -import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -37,66 +25,7 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC @PersistenceContext private EntityManager em; @Override - public void updateGukYuinMastRegResult(Basic resultBody) { - - int excnPgrt = Integer.parseInt(resultBody.getExcnPgrt()); - int stage = Integer.parseInt(resultBody.getChnDtctSno()); - GukYuinStatus status = GukYuinStatus.IN_PROGRESS; - if (excnPgrt == 100) { - status = GukYuinStatus.GUK_COMPLETED; - } - - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.stage, stage) - .set(mapSheetLearnEntity.applyStatus, status.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .set(mapSheetLearnEntity.chnDtctMstId, resultBody.getChnDtctMstId()) - .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) - .execute(); - } - - @Override - public void updateGukYuinMastRegRemove(Basic resultBody) { - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.applyStatus, GukYuinStatus.CANCELED.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .where(mapSheetLearnEntity.uid.eq(resultBody.getChnDtctId())) - .execute(); - } - - @Override - public void updateInferenceGeomDataPnuCnt(String chnDtctObjtId, long pnuCnt) { - queryFactory - .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.pnu, pnuCnt) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .execute(); - } - - @Override - public Long findMapSheetAnalDataInferenceGeomUid(String chnDtctObjtId) { - return queryFactory - .select(mapSheetAnalDataInferenceGeomEntity.geoUid) - .from(mapSheetAnalDataInferenceGeomEntity) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .fetchOne(); - } - - @Override - public void insertGeoUidPnuData(Long geoUid, String[] pnuList) { - for (String pnu : pnuList) { - queryFactory - .insert(pnuEntity) - .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) - .values(geoUid, pnu, ZonedDateTime.now()) - .execute(); - } - } - - @Override - public List findGukyuinApplyStatusUidList(List status) { + public List findGukYuinEligibleForSurveyList(String status) { return queryFactory .select( Projections.constructor( @@ -105,175 +34,31 @@ public class GukYuinStbltJobRepositoryImpl implements GukYuinStbltJobRepositoryC mapSheetLearnEntity.uid, mapSheetLearnEntity.chnDtctMstId)) .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.applyStatus.in(status)) - .fetch(); - } - - @Override - public long upsertMapSheetDataAnalGeomPnu(String chnDtctObjtId, String[] pnuList) { - long length = pnuList.length; - queryFactory - .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.pnu, length) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .execute(); - - Long geoUid = - queryFactory - .select(mapSheetAnalDataInferenceGeomEntity.geoUid) - .from(mapSheetAnalDataInferenceGeomEntity) - .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(chnDtctObjtId)) - .fetchOne(); - - long succCnt = 0; - for (String pnu : pnuList) { - long result = - queryFactory - .insert(pnuEntity) - .columns(pnuEntity.geo.geoUid, pnuEntity.pnu, pnuEntity.createdDttm) - .values(geoUid, pnu, ZonedDateTime.now()) - .execute(); - if (result > 0) { - succCnt++; - } - } - return succCnt; - } - - @Override - public LearnInfo findMapSheetLearnInfo(UUID uuid) { - return queryFactory - .select( - Projections.constructor( - LearnInfo.class, - mapSheetLearnEntity.id, - mapSheetLearnEntity.uuid, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.stage, - mapSheetLearnEntity.uid, - mapSheetLearnEntity.applyStatus)) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne(); - } - - @Override - public Integer findMapSheetLearnYearStage(Integer compareYyyy, Integer targetYyyy) { - NumberExpression stageExpr = - Expressions.numberTemplate(Integer.class, "coalesce({0}, 0)", mapSheetLearnEntity.stage); - - return queryFactory - .select(stageExpr.max().coalesce(0)) - .from(mapSheetLearnEntity) - .where( - mapSheetLearnEntity.compareYyyy.eq(compareYyyy), - mapSheetLearnEntity.targetYyyy.eq(targetYyyy), - mapSheetLearnEntity.applyStatus.isNotNull(), - mapSheetLearnEntity.applyStatus.ne(GukYuinStatus.PENDING.getId())) - .fetchOne(); - } - - @Override - public void updateAnalInferenceApplyDttm(Basic registRes) { - Long learnId = - queryFactory - .select(mapSheetLearnEntity.id) - .from(mapSheetLearnEntity) - .where(mapSheetLearnEntity.uid.eq(registRes.getChnDtctId())) - .fetchOne(); - - queryFactory - .update(mapSheetAnalInferenceEntity) - .set(mapSheetAnalInferenceEntity.gukyuinUsed, "Y") - .set(mapSheetAnalInferenceEntity.gukyuinApplyDttm, ZonedDateTime.now()) - .where(mapSheetAnalInferenceEntity.learnId.eq(learnId)) - .execute(); - } - - @Override - public List findYesterdayLabelingCompleteList() { - ZoneId zone = ZoneId.of("Asia/Seoul"); - ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); - ZonedDateTime yesterdayStart = todayStart.minusDays(1); - - BooleanExpression isYesterday = - labelingAssignmentEntity - .inspectStatDttm - .goe(yesterdayStart) - .and(labelingAssignmentEntity.inspectStatDttm.lt(todayStart)); - - return queryFactory - .select( - Projections.constructor( - GeomUidDto.class, - labelingAssignmentEntity.inferenceGeomUid, - mapSheetAnalDataInferenceGeomEntity.resultUid)) - .from(labelingAssignmentEntity) - .innerJoin(mapSheetAnalDataInferenceGeomEntity) - .on( - labelingAssignmentEntity.inferenceGeomUid.eq( - mapSheetAnalDataInferenceGeomEntity.geoUid)) .innerJoin(mapSheetAnalInferenceEntity) - .on(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id)) - .innerJoin(mapSheetLearnEntity) - .on( - mapSheetAnalInferenceEntity.learnId.eq(mapSheetLearnEntity.id), - mapSheetLearnEntity.applyStatus.in( - GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_COMPLETED.getId())) - .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) + .on(mapSheetLearnEntity.id.eq(mapSheetAnalInferenceEntity.learnId)) + .innerJoin(mapSheetAnalDataInferenceEntity) + .on(mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid)) + .innerJoin(mapSheetAnalDataInferenceGeomEntity) + .on(mapSheetAnalDataInferenceEntity.id.eq(mapSheetAnalDataInferenceGeomEntity.dataUid)) + .where( + mapSheetLearnEntity.applyStatus.eq(GukYuinStatus.PNU_COMPLETED.getId()), + mapSheetAnalDataInferenceGeomEntity.pnu.isNotNull(), + mapSheetAnalDataInferenceGeomEntity.fitState.isNull()) + .groupBy(mapSheetLearnEntity.id, mapSheetLearnEntity.uid, mapSheetLearnEntity.chnDtctMstId) + .having(mapSheetAnalDataInferenceGeomEntity.geoUid.count().gt(1L)) .fetch(); } @Override - public void updateAnalDataInferenceGeomSendDttm(Long geoUid) { + public void updateGukYuinEligibleForSurvey(String resultUid, String stbltYn, String lockYn) { queryFactory .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.labelSendDttm, ZonedDateTime.now()) - .where(mapSheetAnalDataInferenceGeomEntity.geoUid.eq(geoUid)) - .execute(); - } - - @Override - public List findLabelingCompleteSendList(LocalDate yesterday) { - - ZoneId zone = ZoneId.of("Asia/Seoul"); - ZonedDateTime from = yesterday.atStartOfDay(zone); - ZonedDateTime to = from.plusDays(1); - - BooleanExpression isYesterday = - labelingAssignmentEntity - .inspectStatDttm - .goe(from) - .and(labelingAssignmentEntity.inspectStatDttm.lt(to)); - - return queryFactory - .select( - Projections.constructor( - LabelSendDto.class, - mapSheetAnalDataInferenceGeomEntity.resultUid, - labelingAssignmentEntity.workerUid, - labelingAssignmentEntity.workStatDttm, - labelingAssignmentEntity.inspectorUid, - labelingAssignmentEntity.inspectStatDttm, - mapSheetAnalDataInferenceGeomEntity.labelSendDttm)) - .from(labelingAssignmentEntity) - .innerJoin(mapSheetAnalDataInferenceGeomEntity) - .on( - labelingAssignmentEntity.inferenceGeomUid.eq( - mapSheetAnalDataInferenceGeomEntity.geoUid)) - .where(labelingAssignmentEntity.inspectState.eq(InspectState.COMPLETE.getId()), isYesterday) - .fetch(); - } - - @Override - @Transactional - public void updateGukYuinApplyStateComplete(Long id, GukYuinStatus status) { - queryFactory - .update(mapSheetLearnEntity) - .set(mapSheetLearnEntity.applyStatus, status.getId()) - .set(mapSheetLearnEntity.applyStatusDttm, ZonedDateTime.now()) - .where(mapSheetLearnEntity.id.eq(id)) + .set( + mapSheetAnalDataInferenceGeomEntity.fitState, + stbltYn.equals("Y") ? ImageryFitStatus.FIT.getId() : ImageryFitStatus.UNFIT.getId()) + .set(mapSheetAnalDataInferenceGeomEntity.fitStateDttm, ZonedDateTime.now()) + .set(mapSheetAnalDataInferenceGeomEntity.lockYn, lockYn) + .where(mapSheetAnalDataInferenceGeomEntity.resultUid.eq(resultUid)) .execute(); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepository.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepository.java new file mode 100644 index 00000000..b6f83e56 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepository.java @@ -0,0 +1,23 @@ +package com.kamco.cd.kamcoback.postgres.repository.scheduler; + +import com.kamco.cd.kamcoback.postgres.entity.LabelingInspectorEntity; +import jakarta.persistence.LockModeType; +import java.util.List; +import java.util.UUID; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; + +public interface TrainingDataLabelJobRepository + extends JpaRepository, TrainingDataLabelJobRepositoryCustom { + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query( + """ + select r + from LabelingInspectorEntity r + where r.analUid = :analUid + and r.inspectorUid in :inspectorUids + """) + List lockInspectors(Long analUid, List inspectorUids); +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.java new file mode 100644 index 00000000..cb824f9d --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryCustom.java @@ -0,0 +1,17 @@ +package com.kamco.cd.kamcoback.postgres.repository.scheduler; + +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; +import java.util.List; +import java.util.UUID; + +public interface TrainingDataLabelJobRepositoryCustom { + + List findCompletedYesterdayUnassigned(); + + List findInspectorPendingByRound(Long analUid); + + void assignReviewerBatch(List assignmentUids, String reviewerId); + + void updateGeomUidTestState(List geomUids); +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.java new file mode 100644 index 00000000..f1bfe271 --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataLabelJobRepositoryImpl.java @@ -0,0 +1,119 @@ +package com.kamco.cd.kamcoback.postgres.repository.scheduler; + +import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QLabelingInspectorEntity.labelingInspectorEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; + +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; +import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; +import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.List; +import java.util.UUID; +import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; +import org.springframework.stereotype.Repository; + +@Repository +public class TrainingDataLabelJobRepositoryImpl extends QuerydslRepositorySupport + implements TrainingDataLabelJobRepositoryCustom { + + private final JPAQueryFactory queryFactory; + private final StringExpression NULL_STRING = Expressions.stringTemplate("cast(null as text)"); + + public TrainingDataLabelJobRepositoryImpl(JPAQueryFactory queryFactory) { + super(LabelingAssignmentEntity.class); + this.queryFactory = queryFactory; + } + + @Override + public List findCompletedYesterdayUnassigned() { + ZoneId zone = ZoneId.of("Asia/Seoul"); + ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); + ZonedDateTime yesterdayStart = todayStart.minusDays(1); + + BooleanExpression isYesterday = + labelingAssignmentEntity + .workStatDttm + .goe(yesterdayStart) + .and(labelingAssignmentEntity.workStatDttm.lt(todayStart)); + + return queryFactory + .select( + Projections.constructor( + Tasks.class, + labelingAssignmentEntity.assignmentUid, + labelingAssignmentEntity.inferenceGeomUid, + labelingAssignmentEntity.analUid)) + .from(labelingAssignmentEntity) + .where( + labelingAssignmentEntity.workState.in(LabelState.SKIP.getId(), LabelState.DONE.getId()), + labelingAssignmentEntity.inspectorUid.isNull(), + isYesterday) + .orderBy( + labelingAssignmentEntity.analUid.asc(), + labelingAssignmentEntity.assignGroupId.asc(), + labelingAssignmentEntity.inferenceGeomUid.asc()) + .fetch(); + } + + /** + * 해당 회차에 라벨링 할당받은 검수자별 완료 건수 count(), 완료한 게 적은 순으로 해야 일이 한 사람에게 몰리지 않음 + * + * @param analUid + * @return + */ + @Override + public List findInspectorPendingByRound(Long analUid) { + return queryFactory + .select( + Projections.constructor( + InspectorPendingDto.class, + labelingInspectorEntity.inspectorUid, + labelingAssignmentEntity.assignmentUid.count())) + .from(labelingInspectorEntity) + .leftJoin(labelingAssignmentEntity) + .on( + labelingInspectorEntity.inspectorUid.eq(labelingAssignmentEntity.inspectorUid), + labelingAssignmentEntity.inspectState.in( + InspectState.EXCEPT.getId(), InspectState.COMPLETE.getId())) + .where(labelingInspectorEntity.analUid.eq(analUid)) + .groupBy(labelingInspectorEntity.inspectorUid) + .orderBy(labelingAssignmentEntity.assignmentUid.count().asc()) + .fetch(); + } + + /** + * 배치용 여러 건 update + * + * @param assignmentUids + * @param reviewerId + */ + @Override + public void assignReviewerBatch(List assignmentUids, String reviewerId) { + queryFactory + .update(labelingAssignmentEntity) + .set(labelingAssignmentEntity.inspectorUid, reviewerId) + .set(labelingAssignmentEntity.inspectState, InspectState.UNCONFIRM.getId()) + .set(labelingAssignmentEntity.modifiedDate, ZonedDateTime.now()) + .where(labelingAssignmentEntity.assignmentUid.in(assignmentUids)) + .execute(); + } + + @Override + public void updateGeomUidTestState(List geomUids) { + queryFactory + .update(mapSheetAnalDataInferenceGeomEntity) + .set(mapSheetAnalDataInferenceGeomEntity.testState, InspectState.UNCONFIRM.getId()) + .set(mapSheetAnalDataInferenceGeomEntity.updatedDttm, ZonedDateTime.now()) + .where(mapSheetAnalDataInferenceGeomEntity.geoUid.in(geomUids)) + .execute(); + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java index f4e13543..02ab78a6 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryCustom.java @@ -3,25 +3,10 @@ package com.kamco.cd.kamcoback.postgres.repository.scheduler; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import java.util.List; -import java.util.UUID; public interface TrainingDataReviewJobRepositoryCustom { - List findCompletedYesterdayUnassigned(); - - List findInspectorPendingByRound(Long analUid); - - void assignReviewer(UUID assignmentUid, String reviewerId); - - void assignReviewerBatch(List assignmentUids, String reviewerId); - - Tasks findAssignmentTask(String assignmentUid); - - void updateGeomUidTestState(List geomUids); - List findCompletedYesterdayLabelingList(Long analUid, String mapSheetNum); List findCompletedAnalMapSheetList(Long analUid); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java index 4dc89589..b27ff555 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/TrainingDataReviewJobRepositoryImpl.java @@ -1,24 +1,18 @@ package com.kamco.cd.kamcoback.postgres.repository.scheduler; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QLabelingInspectorEntity.labelingInspectorEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnDataGeomEntity.mapSheetLearnDataGeomEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState; -import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState; import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalCntInfo; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapSheetList; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.Properties; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; @@ -29,9 +23,10 @@ import java.time.LocalDate; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; -import java.util.UUID; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; +import org.springframework.stereotype.Repository; +@Repository public class TrainingDataReviewJobRepositoryImpl extends QuerydslRepositorySupport implements TrainingDataReviewJobRepositoryCustom { @@ -43,121 +38,6 @@ public class TrainingDataReviewJobRepositoryImpl extends QuerydslRepositorySuppo this.queryFactory = queryFactory; } - @Override - public List findCompletedYesterdayUnassigned() { - ZoneId zone = ZoneId.of("Asia/Seoul"); - ZonedDateTime todayStart = ZonedDateTime.now(zone).toLocalDate().atStartOfDay(zone); - ZonedDateTime yesterdayStart = todayStart.minusDays(1); - - BooleanExpression isYesterday = - labelingAssignmentEntity - .workStatDttm - .goe(yesterdayStart) - .and(labelingAssignmentEntity.workStatDttm.lt(todayStart)); - - return queryFactory - .select( - Projections.constructor( - Tasks.class, - labelingAssignmentEntity.assignmentUid, - labelingAssignmentEntity.inferenceGeomUid, - labelingAssignmentEntity.analUid)) - .from(labelingAssignmentEntity) - .where( - labelingAssignmentEntity.workState.in(LabelState.SKIP.getId(), LabelState.DONE.getId()), - labelingAssignmentEntity.inspectorUid.isNull(), - isYesterday) - .orderBy( - labelingAssignmentEntity.analUid.asc(), - labelingAssignmentEntity.assignGroupId.asc(), - labelingAssignmentEntity.inferenceGeomUid.asc()) - .fetch(); - } - - /** - * 해당 회차에 라벨링 할당받은 검수자별 완료 건수 count(), 완료한 게 적은 순으로 해야 일이 한 사람에게 몰리지 않음 - * - * @param analUid - * @return - */ - @Override - public List findInspectorPendingByRound(Long analUid) { - return queryFactory - .select( - Projections.constructor( - InspectorPendingDto.class, - labelingInspectorEntity.inspectorUid, - labelingAssignmentEntity.assignmentUid.count())) - .from(labelingInspectorEntity) - .leftJoin(labelingAssignmentEntity) - .on( - labelingInspectorEntity.inspectorUid.eq(labelingAssignmentEntity.inspectorUid), - labelingAssignmentEntity.inspectState.in( - InspectState.EXCEPT.getId(), InspectState.COMPLETE.getId())) - .where(labelingInspectorEntity.analUid.eq(analUid)) - .groupBy(labelingInspectorEntity.inspectorUid) - .orderBy(labelingAssignmentEntity.assignmentUid.count().asc()) - .fetch(); - } - - /** - * 실시간 분배용 1건 update - * - * @param assignmentUid - * @param reviewerId - */ - @Override - public void assignReviewer(UUID assignmentUid, String reviewerId) { - queryFactory - .update(labelingAssignmentEntity) - .set(labelingAssignmentEntity.inspectorUid, reviewerId) - .set(labelingAssignmentEntity.inspectState, InspectState.UNCONFIRM.getId()) - .set(labelingAssignmentEntity.modifiedDate, ZonedDateTime.now()) - .where(labelingAssignmentEntity.assignmentUid.eq(assignmentUid)) - .execute(); - } - - /** - * 배치용 여러 건 update - * - * @param assignmentUids - * @param reviewerId - */ - @Override - public void assignReviewerBatch(List assignmentUids, String reviewerId) { - queryFactory - .update(labelingAssignmentEntity) - .set(labelingAssignmentEntity.inspectorUid, reviewerId) - .set(labelingAssignmentEntity.inspectState, InspectState.UNCONFIRM.getId()) - .set(labelingAssignmentEntity.modifiedDate, ZonedDateTime.now()) - .where(labelingAssignmentEntity.assignmentUid.in(assignmentUids)) - .execute(); - } - - @Override - public Tasks findAssignmentTask(String assignmentUid) { - return queryFactory - .select( - Projections.constructor( - Tasks.class, - labelingAssignmentEntity.assignmentUid, - labelingAssignmentEntity.inferenceGeomUid, - labelingAssignmentEntity.analUid)) - .from(labelingAssignmentEntity) - .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(assignmentUid))) - .fetchOne(); - } - - @Override - public void updateGeomUidTestState(List geomUids) { - queryFactory - .update(mapSheetAnalDataInferenceGeomEntity) - .set(mapSheetAnalDataInferenceGeomEntity.testState, InspectState.UNCONFIRM.getId()) - .set(mapSheetAnalDataInferenceGeomEntity.updatedDttm, ZonedDateTime.now()) - .where(mapSheetAnalDataInferenceGeomEntity.geoUid.in(geomUids)) - .execute(); - } - @Override public List findCompletedYesterdayLabelingList( Long analUid, String mapSheetNum) { diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java index a9e1b6ec..d86acebb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiLabelJobService.java @@ -55,7 +55,7 @@ public class GukYuinApiLabelJobService { } /** 어제 라벨링 검수 완료된 것 -> 국유인에 전송 */ - @Scheduled(cron = "0 0 1 * * *") + @Scheduled(cron = "0 0 2 * * *") public void findLabelingCompleteSend() { if (isLocalProfile()) { return; diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java index 85060cf9..e653a612 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiPnuJobService.java @@ -1,6 +1,5 @@ package com.kamco.cd.kamcoback.scheduler.service; -import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.common.utils.NetUtils; import com.kamco.cd.kamcoback.common.utils.UserUtil; import com.kamco.cd.kamcoback.config.api.ApiLogFunction; @@ -13,7 +12,6 @@ import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; -import com.kamco.cd.kamcoback.gukyuin.service.GukYuinApiService; import com.kamco.cd.kamcoback.log.dto.EventStatus; import com.kamco.cd.kamcoback.log.dto.EventType; import com.kamco.cd.kamcoback.postgres.core.GukYuinPnuJobCoreService; @@ -34,14 +32,12 @@ import org.springframework.transaction.annotation.Transactional; @RequiredArgsConstructor public class GukYuinApiPnuJobService { - private final GukYuinApiService gukYuinApiService; private final GukYuinPnuJobCoreService gukYuinPnuJobCoreService; private final ExternalHttpClient externalHttpClient; private final NetUtils netUtils = new NetUtils(); private final AuditLogRepository auditLogRepository; private final UserUtil userUtil; - private final ObjectMapper objectMapper; @Value("${spring.profiles.active}") private String profile; @@ -179,7 +175,6 @@ public class GukYuinApiPnuJobService { } // pnuList 업데이트 - for (ChngDetectContDto.ContBasic contBasic : cont.getResult()) { if (contBasic.getPnuList() == null || contBasic.getChnDtctObjtId() == null) { return 0; diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java index 86c25649..88adbb2d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/GukYuinApiStbltJobService.java @@ -1,6 +1,5 @@ package com.kamco.cd.kamcoback.scheduler.service; -import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.common.utils.NetUtils; import com.kamco.cd.kamcoback.common.utils.UserUtil; import com.kamco.cd.kamcoback.config.api.ApiLogFunction; @@ -8,11 +7,12 @@ import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient; import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.LearnKeyDto; -import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.ResultDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctDto; +import com.kamco.cd.kamcoback.gukyuin.dto.ChngDetectMastDto.RlbDtctMastDto; import com.kamco.cd.kamcoback.gukyuin.dto.GukYuinStatus; import com.kamco.cd.kamcoback.log.dto.EventStatus; import com.kamco.cd.kamcoback.log.dto.EventType; -import com.kamco.cd.kamcoback.postgres.core.GukYuinJobCoreService; +import com.kamco.cd.kamcoback.postgres.core.GukYuinStbltJobCoreService; import com.kamco.cd.kamcoback.postgres.entity.AuditLogEntity; import com.kamco.cd.kamcoback.postgres.repository.log.AuditLogRepository; import java.util.List; @@ -32,11 +32,10 @@ public class GukYuinApiStbltJobService { private final ExternalHttpClient externalHttpClient; private final NetUtils netUtils = new NetUtils(); - private final GukYuinJobCoreService gukYuinStbltJobCoreService; + private final GukYuinStbltJobCoreService gukYuinStbltJobCoreService; private final AuditLogRepository auditLogRepository; private final UserUtil userUtil; - private final ObjectMapper objectMapper; @Value("${spring.profiles.active}") private String profile; @@ -56,54 +55,51 @@ public class GukYuinApiStbltJobService { return "local".equalsIgnoreCase(profile); } - /** 국유인 연동 후, 100% 되었는지 확인하는 스케줄링 매 10분마다 호출 */ - @Scheduled(cron = "0 0/10 * * * *") - public void findGukYuinMastCompleteYn() { + /** 국유인 연동 후, 실태조사 적합여부 확인하여 update */ + @Scheduled(cron = "0 0 3 * * *") + public void findGukYuinEligibleForSurvey() { if (isLocalProfile()) { return; } List list = - gukYuinStbltJobCoreService.findGukyuinApplyStatusUidList( - List.of(GukYuinStatus.IN_PROGRESS.getId())); + gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList( + GukYuinStatus.PNU_COMPLETED.getId()); if (list.isEmpty()) { return; } for (LearnKeyDto dto : list) { try { - String url = gukyuinCdiUrl + "/chn/mast/list/" + dto.getChnDtctMstId(); + String url = gukyuinCdiUrl + "/rlb/dtct/" + dto.getUid(); - ExternalCallResult response = + ExternalCallResult response = externalHttpClient.call( url, HttpMethod.GET, null, netUtils.jsonHeaders(), - ChngDetectMastDto.ResultDto.class); + ChngDetectMastDto.RlbDtctDto.class); this.insertGukyuinAuditLog( - EventType.DETAIL.getId(), + EventType.LIST.getId(), netUtils.getLocalIP(), userUtil.getId(), url.replace(gukyuinUrl, ""), null, response.body().getSuccess()); - ResultDto result = response.body(); + RlbDtctDto result = response.body(); if (result == null || result.getResult() == null || result.getResult().isEmpty()) { log.warn("[GUKYUIN] empty result chnDtctMstId={}", dto.getChnDtctMstId()); continue; } - ChngDetectMastDto.Basic basic = result.getResult().get(0); - - Integer progress = - basic.getExcnPgrt() == null ? null : Integer.parseInt(basic.getExcnPgrt().trim()); - if (progress != null && progress == 100) { - gukYuinStbltJobCoreService.updateGukYuinApplyStateComplete( - dto.getId(), GukYuinStatus.GUK_COMPLETED); + for (RlbDtctMastDto stbltDto : result.getResult()) { + String resultUid = stbltDto.getChnDtctObjtId(); + gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey( + resultUid, stbltDto.getStbltYn(), stbltDto.getLockYn()); } } catch (Exception e) { log.error("[GUKYUIN] failed uid={}", dto.getChnDtctMstId(), e); diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.java new file mode 100644 index 00000000..5f9a98aa --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataLabelJobService.java @@ -0,0 +1,112 @@ +package com.kamco.cd.kamcoback.scheduler.service; + +import com.kamco.cd.kamcoback.postgres.core.TrainingDataLabelJobCoreService; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; +import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; +import jakarta.transaction.Transactional; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +@Log4j2 +@Service +@RequiredArgsConstructor +public class TrainingDataLabelJobService { + + private final TrainingDataLabelJobCoreService trainingDataLabelJobCoreService; + + @Value("${spring.profiles.active}") + private String profile; + + private boolean isLocalProfile() { + return "local".equalsIgnoreCase(profile); + } + + @Transactional + @Scheduled(cron = "0 0 0 * * *") + public void assignReviewerYesterdayLabelComplete() { + + if (isLocalProfile()) { + return; + } + + try { + List tasks = trainingDataLabelJobCoreService.findCompletedYesterdayUnassigned(); + + if (tasks.isEmpty()) { + return; + } + + // 회차별로 그룹핑 + Map> taskByRound = + tasks.stream().collect(Collectors.groupingBy(Tasks::getAnalUid)); + + // 회차별 분배 + for (Map.Entry> entry : taskByRound.entrySet()) { + Long analUid = entry.getKey(); + List analTasks = entry.getValue(); + + // pending 계산 + List pendings = + trainingDataLabelJobCoreService.findInspectorPendingByRound(analUid); + + if (pendings.isEmpty()) { + continue; + } + + List reviewerIds = + pendings.stream().map(InspectorPendingDto::getInspectorUid).toList(); + + // Lock 걸릴 수 있기 때문에 엔티티 조회하는 Repository 에서 구현 + trainingDataLabelJobCoreService.lockInspectors(analUid, reviewerIds); + + // 균등 분배 + Map> assignMap = distributeByLeastPending(analTasks, reviewerIds); + + // reviewer별 batch update + assignMap.forEach( + (reviewerId, assignedTasks) -> { + if (assignedTasks.isEmpty()) { + return; + } + + List assignmentUids = + assignedTasks.stream().map(Tasks::getAssignmentUid).toList(); + trainingDataLabelJobCoreService.assignReviewerBatch(assignmentUids, reviewerId); + + List geomUids = assignedTasks.stream().map(Tasks::getInferenceUid).toList(); + trainingDataLabelJobCoreService.updateGeomUidTestState(geomUids); + }); + } + } catch (Exception e) { + log.error("배치 처리 중 예외", e); + } + } + + private Map> distributeByLeastPending( + List tasks, List reviewerIds) { + Map> result = new LinkedHashMap<>(); + + // 순서 유지 중요 (ASC 정렬된 상태) + for (String reviewerId : reviewerIds) { + result.put(reviewerId, new ArrayList<>()); + } + + int reviewerCount = reviewerIds.size(); + + for (int i = 0; i < tasks.size(); i++) { + String reviewerId = reviewerIds.get(i % reviewerCount); + result.get(reviewerId).add(tasks.get(i)); + } + + return result; + } +} diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java index 7cdca731..8f4255a1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/TrainingDataReviewJobService.java @@ -8,20 +8,13 @@ import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.AnalMapShee import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.CompleteLabelData.GeoJsonFeature; import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.FeatureCollection; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.InspectorPendingDto; -import com.kamco.cd.kamcoback.scheduler.dto.TrainingDataReviewJobDto.Tasks; import jakarta.transaction.Transactional; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.Objects; -import java.util.UUID; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; @@ -46,89 +39,13 @@ public class TrainingDataReviewJobService { } @Transactional - @Scheduled(cron = "0 0 0 * * *") - public void assignReviewerYesterdayLabelComplete() { + @Scheduled(cron = "0 0 2 * * *") + public void exportGeojsonLabelingGeom() { if (isLocalProfile()) { return; } - try { - List tasks = trainingDataReviewJobCoreService.findCompletedYesterdayUnassigned(); - - if (tasks.isEmpty()) { - return; - } - - // 회차별로 그룹핑 - Map> taskByRound = - tasks.stream().collect(Collectors.groupingBy(Tasks::getAnalUid)); - - // 회차별 분배 - for (Map.Entry> entry : taskByRound.entrySet()) { - Long analUid = entry.getKey(); - List analTasks = entry.getValue(); - - // pending 계산 - List pendings = - trainingDataReviewJobCoreService.findInspectorPendingByRound(analUid); - - if (pendings.isEmpty()) { - continue; - } - - List reviewerIds = - pendings.stream().map(InspectorPendingDto::getInspectorUid).toList(); - - // Lock 걸릴 수 있기 때문에 엔티티 조회하는 Repository 에서 구현 - trainingDataReviewJobCoreService.lockInspectors(analUid, reviewerIds); - - // 균등 분배 - Map> assignMap = distributeByLeastPending(analTasks, reviewerIds); - - // reviewer별 batch update - assignMap.forEach( - (reviewerId, assignedTasks) -> { - if (assignedTasks.isEmpty()) { - return; - } - - List assignmentUids = - assignedTasks.stream().map(Tasks::getAssignmentUid).toList(); - trainingDataReviewJobCoreService.assignReviewerBatch(assignmentUids, reviewerId); - - List geomUids = assignedTasks.stream().map(Tasks::getInferenceUid).toList(); - trainingDataReviewJobCoreService.updateGeomUidTestState(geomUids); - }); - } - } catch (Exception e) { - log.error("배치 처리 중 예외", e); - } - } - - private Map> distributeByLeastPending( - List tasks, List reviewerIds) { - Map> result = new LinkedHashMap<>(); - - // 순서 유지 중요 (ASC 정렬된 상태) - for (String reviewerId : reviewerIds) { - result.put(reviewerId, new ArrayList<>()); - } - - int reviewerCount = reviewerIds.size(); - - for (int i = 0; i < tasks.size(); i++) { - String reviewerId = reviewerIds.get(i % reviewerCount); - result.get(reviewerId).add(tasks.get(i)); - } - - return result; - } - - @Transactional - @Scheduled(cron = "0 0 2 * * *") - public void exportGeojsonLabelingGeom() { - // 1) 경로/파일명 결정 String targetDir = "local".equals(profile) ? System.getProperty("user.home") + "/geojson" : trainingDataDir; diff --git a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java index c0b09ab2..f747f887 100644 --- a/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/trainingdata/TrainingDataReviewApiController.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.trainingdata; import com.kamco.cd.kamcoback.code.dto.CommonCodeDto; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; +import com.kamco.cd.kamcoback.scheduler.service.TrainingDataLabelJobService; import com.kamco.cd.kamcoback.scheduler.service.TrainingDataReviewJobService; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ReviewGeometryInfo; @@ -32,6 +33,7 @@ import org.springframework.web.bind.annotation.RestController; public class TrainingDataReviewApiController { private final TrainingDataReviewService trainingDataReviewService; + private final TrainingDataLabelJobService trainingDataLabelJobService; private final TrainingDataReviewJobService trainingDataReviewJobService; @Operation(summary = "목록 조회", description = "검수 할당 목록 조회") @@ -562,7 +564,7 @@ public class TrainingDataReviewApiController { description = "스케줄링이 실패한 경우 수동 호출하는 API, 어제 라벨링 완료된 것을 해당 검수자들에게 할당함") @GetMapping("/run-schedule") public ApiResponseDto runTrainingReviewSchedule() { - trainingDataReviewJobService.assignReviewerYesterdayLabelComplete(); + trainingDataLabelJobService.assignReviewerYesterdayLabelComplete(); return ApiResponseDto.ok(null); }