학습데이터제작 상태 update, ING 인 건수 API 추가

This commit is contained in:
2026-01-20 14:50:46 +09:00
parent cc4a0c024c
commit ab39ce5e85
15 changed files with 1102 additions and 964 deletions

View File

@@ -318,4 +318,16 @@ public class LabelAllocateApiController {
LabelAllocateDto.searchReq searchReq = new LabelAllocateDto.searchReq(page, size, ""); LabelAllocateDto.searchReq searchReq = new LabelAllocateDto.searchReq(page, size, "");
return ApiResponseDto.ok(labelAllocateService.findWorkHistoryList(searchReq, userId, type)); return ApiResponseDto.ok(labelAllocateService.findWorkHistoryList(searchReq, userId, type));
} }
@Operation(summary = "라벨링 작업 중인 회차 있는지 여부", description = "라벨링 작업 중인 회차 있는지 여부")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@GetMapping("/ing-process-cnt")
public ApiResponseDto<Long> labelingIngProcessCnt() {
return ApiResponseDto.ok(labelAllocateService.findLabelingIngProcessCnt());
}
} }

View File

@@ -5,6 +5,7 @@ import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.AllocateInfoDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.AllocateInfoDto;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InferenceDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InferenceDetail;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveInfo; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.MoveInfo;
@@ -80,11 +81,13 @@ public class LabelAllocateService {
labelAllocateCoreService.insertLabelerUser(analUid, target.getUserId(), target.getDemand()); labelAllocateCoreService.insertLabelerUser(analUid, target.getUserId(), target.getDemand());
} }
// 검수자 할당 테이블에 insert. TODO: 익일 배치로 라벨링 완료된 내역을 검수자에게 할당해야 함 // 검수자 할당 테이블에 insert.
for (String inspector : targetInspectors) { for (String inspector : targetInspectors) {
labelAllocateCoreService.insertInspector(analUid, inspector); labelAllocateCoreService.insertInspector(analUid, inspector);
} }
labelAllocateCoreService.updateAnalInferenceMngState(uuid, LabelMngState.ASSIGNED.getId());
return new ApiResponseDto.ResponseObj(ApiResponseCode.OK, "배정이 완료되었습니다."); return new ApiResponseDto.ResponseObj(ApiResponseCode.OK, "배정이 완료되었습니다.");
} }
@@ -255,6 +258,8 @@ public class LabelAllocateService {
} }
labelAllocateCoreService.updateClosedYnByUuid(targetUuid, closedType, closedYn); labelAllocateCoreService.updateClosedYnByUuid(targetUuid, closedType, closedYn);
labelAllocateCoreService.updateAnalInferenceMngState(
UUID.fromString(targetUuid), LabelMngState.FINISH.getId());
} }
public Page<WorkHistoryDto> findWorkHistoryList(searchReq searchReq, String userId, String type) { public Page<WorkHistoryDto> findWorkHistoryList(searchReq searchReq, String userId, String type) {
@@ -264,4 +269,8 @@ public class LabelAllocateService {
return labelAllocateCoreService.workReviewerHistoryList(searchReq, userId); return labelAllocateCoreService.workReviewerHistoryList(searchReq, userId);
} }
} }
public Long findLabelingIngProcessCnt() {
return labelAllocateCoreService.findLabelingIngProcessCnt();
}
} }

View File

@@ -226,4 +226,12 @@ public class LabelAllocateCoreService {
public Page<WorkHistoryDto> workReviewerHistoryList(searchReq searchReq, String userId) { public Page<WorkHistoryDto> workReviewerHistoryList(searchReq searchReq, String userId) {
return labelAllocateRepository.workReviewerHistoryList(searchReq, userId); return labelAllocateRepository.workReviewerHistoryList(searchReq, userId);
} }
public void updateAnalInferenceMngState(UUID uuid, String status) {
labelAllocateRepository.updateAnalInferenceMngState(uuid, status);
}
public Long findLabelingIngProcessCnt() {
return labelAllocateRepository.findLabelingIngProcessCnt();
}
} }

View File

@@ -4,6 +4,7 @@ import com.kamco.cd.kamcoback.postgres.repository.trainingdata.TrainingDataLabel
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest.LabelProperties; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest.LabelProperties;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto;
@@ -29,7 +30,7 @@ public class TrainingDataLabelCoreService {
return trainingDataLabelRepository.findLabelingAssignedGeom(assignmentUid); return trainingDataLabelRepository.findLabelingAssignedGeom(assignmentUid);
} }
public Long findLabelingAssignmentGeoUid(String assignmentUid) { public InferenceIdInfo findLabelingAssignmentGeoUid(String assignmentUid) {
return trainingDataLabelRepository.findLabelingAssignmentGeoUid(assignmentUid); return trainingDataLabelRepository.findLabelingAssignmentGeoUid(assignmentUid);
} }
@@ -89,4 +90,8 @@ public class TrainingDataLabelCoreService {
String mapSheetNum, Integer beforeYear, Integer afterYear) { String mapSheetNum, Integer beforeYear, Integer afterYear) {
return trainingDataLabelRepository.getCogImageUrl(mapSheetNum, beforeYear, afterYear); return trainingDataLabelRepository.getCogImageUrl(mapSheetNum, beforeYear, afterYear);
} }
public void updateAnalInferenceMngState(Long analUid, String status) {
trainingDataLabelRepository.updateAnalInferenceMngState(analUid, status);
}
} }

View File

@@ -1,6 +1,7 @@
package com.kamco.cd.kamcoback.postgres.core; package com.kamco.cd.kamcoback.postgres.core;
import com.kamco.cd.kamcoback.postgres.repository.trainingdata.TrainingDataReviewRepository; import com.kamco.cd.kamcoback.postgres.repository.trainingdata.TrainingDataReviewRepository;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes;
@@ -29,7 +30,7 @@ public class TrainingDataReviewCoreService {
return trainingDataReviewRepository.findReviewAssignedGeom(operatorUid); return trainingDataReviewRepository.findReviewAssignedGeom(operatorUid);
} }
public Long findReviewOperatorGeoUid(String operatorUid) { public InferenceIdInfo findReviewOperatorGeoUid(String operatorUid) {
return trainingDataReviewRepository.findReviewOperatorGeoUid(operatorUid); return trainingDataReviewRepository.findReviewOperatorGeoUid(operatorUid);
} }
@@ -89,4 +90,8 @@ public class TrainingDataReviewCoreService {
String mapSheetNum, Integer beforeYear, Integer afterYear) { String mapSheetNum, Integer beforeYear, Integer afterYear) {
return trainingDataReviewRepository.getCogImageUrl(mapSheetNum, beforeYear, afterYear); return trainingDataReviewRepository.getCogImageUrl(mapSheetNum, beforeYear, afterYear);
} }
public void updateAnalInferenceMngState(Long analUid, String status) {
trainingDataReviewRepository.updateAnalInferenceMngState(analUid, status);
}
} }

View File

@@ -52,7 +52,8 @@ public class InferenceResultRepositoryImpl implements InferenceResultRepositoryC
m1_model_batch_id, m1_model_batch_id,
m2_model_batch_id, m2_model_batch_id,
m3_model_batch_id, m3_model_batch_id,
learn_id learn_id,
anal_state
) )
SELECT SELECT
r.stage, r.stage,
@@ -64,7 +65,8 @@ public class InferenceResultRepositoryImpl implements InferenceResultRepositoryC
r.m1_model_batch_id, r.m1_model_batch_id,
r.m2_model_batch_id, r.m2_model_batch_id,
r.m3_model_batch_id, r.m3_model_batch_id,
r.id r.id,
LabelState.PENDING.getId(),
FROM tb_map_sheet_learn r FROM tb_map_sheet_learn r
WHERE r.id = :id WHERE r.id = :id
ON CONFLICT (stage, compare_yyyy, target_yyyy) ON CONFLICT (stage, compare_yyyy, target_yyyy)

View File

@@ -100,4 +100,8 @@ public interface LabelAllocateRepositoryCustom {
Page<WorkHistoryDto> workLabelHistoryList(LabelAllocateDto.searchReq searchReq, String userId); Page<WorkHistoryDto> workLabelHistoryList(LabelAllocateDto.searchReq searchReq, String userId);
Page<WorkHistoryDto> workReviewerHistoryList(searchReq searchReq, String userId); Page<WorkHistoryDto> workReviewerHistoryList(searchReq searchReq, String userId);
void updateAnalInferenceMngState(UUID uuid, String status);
Long findLabelingIngProcessCnt();
} }

View File

@@ -13,6 +13,7 @@ import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.AllocateInfoDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.AllocateInfoDto;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InferenceDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InferenceDetail;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; 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.label.dto.LabelAllocateDto.LabelState;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelerDetail;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelingStatDto;
@@ -63,7 +64,8 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
private final JPAQueryFactory queryFactory; private final JPAQueryFactory queryFactory;
@PersistenceContext private EntityManager em; @PersistenceContext
private EntityManager em;
@Override @Override
public List<AllocateInfoDto> fetchNextIds(Long lastId, Long batchSize, UUID uuid) { public List<AllocateInfoDto> fetchNextIds(Long lastId, Long batchSize, UUID uuid) {
@@ -857,7 +859,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
.fetchOne(); .fetchOne();
} }
/** 특정 회차의 모든 라벨러 통계 조회 (순위 계산용) */ /**
* 특정 회차의 모든 라벨러 통계 조회 (순위 계산용)
*/
public List<LabelerDetail> findAllLabelersForRanking(Long analUid) { public List<LabelerDetail> findAllLabelersForRanking(Long analUid) {
QMemberEntity worker = QMemberEntity.memberEntity; QMemberEntity worker = QMemberEntity.memberEntity;
@@ -905,7 +909,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
.fetch(); .fetch();
} }
/** UUID로 analUid 조회 */ /**
* UUID로 analUid 조회
*/
@Override @Override
public Long findAnalUidByUuid(String uuid) { public Long findAnalUidByUuid(String uuid) {
return queryFactory return queryFactory
@@ -1377,7 +1383,9 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
.fetchOne(); .fetchOne();
} }
/** 순위 계산용 - 특정 회차의 모든 검수자 통계 조회 */ /**
* 순위 계산용 - 특정 회차의 모든 검수자 통계 조회
*/
public List<LabelerDetail> findAllInspectorsForRanking(Long analUid) { public List<LabelerDetail> findAllInspectorsForRanking(Long analUid) {
QMemberEntity inspector = QMemberEntity.memberEntity; QMemberEntity inspector = QMemberEntity.memberEntity;
@@ -1785,4 +1793,24 @@ public class LabelAllocateRepositoryImpl implements LabelAllocateRepositoryCusto
return new PageImpl<>(list, pageable, countQuery != null ? countQuery : 0L); return new PageImpl<>(list, pageable, countQuery != null ? countQuery : 0L);
} }
@Override
public void updateAnalInferenceMngState(UUID uuid, String status) {
queryFactory
.update(mapSheetAnalInferenceEntity)
.set(mapSheetAnalInferenceEntity.analState, status)
.set(mapSheetAnalInferenceEntity.updatedDttm, ZonedDateTime.now())
.where(mapSheetAnalInferenceEntity.uuid.eq(uuid))
.execute();
}
@Override
public Long findLabelingIngProcessCnt() {
return queryFactory
.select(mapSheetAnalInferenceEntity.id.count())
.from(mapSheetAnalInferenceEntity)
.where(
mapSheetAnalInferenceEntity.analState.eq(LabelMngState.ING.getId()))
.fetchOne();
}
} }

View File

@@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.postgres.repository.trainingdata;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest.LabelProperties; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest.LabelProperties;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto;
@@ -18,7 +19,7 @@ public interface TrainingDataLabelRepositoryCustom {
LabelingGeometryInfo findLabelingAssignedGeom(String assignmentUid); LabelingGeometryInfo findLabelingAssignedGeom(String assignmentUid);
Long findLabelingAssignmentGeoUid(String assignmentUid); InferenceIdInfo findLabelingAssignmentGeoUid(String assignmentUid);
void updateLabelingStateAssignment(String assignmentUid, String status); void updateLabelingStateAssignment(String assignmentUid, String status);
@@ -37,4 +38,6 @@ public interface TrainingDataLabelRepositoryCustom {
TrainingDataLabelDto.CogImageResponse getCogImageUrl( TrainingDataLabelDto.CogImageResponse getCogImageUrl(
String mapSheetNum, Integer beforeYear, Integer afterYear); String mapSheetNum, Integer beforeYear, Integer afterYear);
void updateAnalInferenceMngState(Long analUid, String status);
} }

View File

@@ -4,6 +4,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QImageryEntity.imageryEntit
import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; 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.QMapSheetLearnDataGeomEntity.mapSheetLearnDataGeomEntity;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
@@ -19,6 +20,7 @@ import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPagin
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceDataGeometry; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceDataGeometry;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceDataGeometry.InferenceProperties; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceDataGeometry.InferenceProperties;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InspectionResultInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InspectionResultInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest.LabelProperties; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest.LabelProperties;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo;
@@ -174,9 +176,13 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
} }
@Override @Override
public Long findLabelingAssignmentGeoUid(String assignmentUid) { public InferenceIdInfo findLabelingAssignmentGeoUid(String assignmentUid) {
return queryFactory return queryFactory
.select(labelingAssignmentEntity.inferenceGeomUid) .select(
Projections.constructor(
InferenceIdInfo.class,
labelingAssignmentEntity.inferenceGeomUid,
labelingAssignmentEntity.analUid))
.from(labelingAssignmentEntity) .from(labelingAssignmentEntity)
.where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(assignmentUid))) .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(assignmentUid)))
.fetchOne(); .fetchOne();
@@ -838,6 +844,16 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
} }
} }
@Override
public void updateAnalInferenceMngState(Long analUid, String status) {
queryFactory
.update(mapSheetAnalInferenceEntity)
.set(mapSheetAnalInferenceEntity.analState, status)
.set(mapSheetAnalInferenceEntity.updatedDttm, ZonedDateTime.now())
.where(mapSheetAnalInferenceEntity.id.eq(analUid))
.execute();
}
private StringExpression makeCogUrl(NumberPath<Integer> year) { private StringExpression makeCogUrl(NumberPath<Integer> year) {
return new CaseBuilder() return new CaseBuilder()
.when(imageryEntity.year.eq(year)) .when(imageryEntity.year.eq(year))

View File

@@ -1,5 +1,6 @@
package com.kamco.cd.kamcoback.postgres.repository.trainingdata; package com.kamco.cd.kamcoback.postgres.repository.trainingdata;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes;
@@ -18,7 +19,7 @@ public interface TrainingDataReviewRepositoryCustom {
ReviewGeometryInfo findReviewAssignedGeom(String operatorUid); ReviewGeometryInfo findReviewAssignedGeom(String operatorUid);
Long findReviewOperatorGeoUid(String operatorUid); InferenceIdInfo findReviewOperatorGeoUid(String operatorUid);
void updateReviewStateOperator(String operatorUid, String status); void updateReviewStateOperator(String operatorUid, String status);
@@ -37,4 +38,6 @@ public interface TrainingDataReviewRepositoryCustom {
TrainingDataReviewDto.CogImageResponse getCogImageUrl( TrainingDataReviewDto.CogImageResponse getCogImageUrl(
String mapSheetNum, Integer beforeYear, Integer afterYear); String mapSheetNum, Integer beforeYear, Integer afterYear);
void updateAnalInferenceMngState(Long analUid, String status);
} }

View File

@@ -4,6 +4,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QImageryEntity.imageryEntit
import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity; import static com.kamco.cd.kamcoback.postgres.entity.QLabelingAssignmentEntity.labelingAssignmentEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEntity.mapSheetAnalDataInferenceGeomEntity; 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.QMapSheetLearnDataGeomEntity.mapSheetLearnDataGeomEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity;
@@ -12,6 +13,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState; import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.InspectState;
import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity; import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ChangeDetectionInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ChangeDetectionInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ClassificationInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.ClassificationInfo;
@@ -177,9 +179,13 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport
} }
@Override @Override
public Long findReviewOperatorGeoUid(String operatorUid) { public InferenceIdInfo findReviewOperatorGeoUid(String operatorUid) {
return queryFactory return queryFactory
.select(labelingAssignmentEntity.inferenceGeomUid) .select(
Projections.constructor(
InferenceIdInfo.class,
labelingAssignmentEntity.inferenceGeomUid,
labelingAssignmentEntity.analUid))
.from(labelingAssignmentEntity) .from(labelingAssignmentEntity)
.where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(operatorUid))) .where(labelingAssignmentEntity.assignmentUid.eq(UUID.fromString(operatorUid)))
.fetchOne(); .fetchOne();
@@ -868,6 +874,16 @@ public class TrainingDataReviewRepositoryImpl extends QuerydslRepositorySupport
} }
} }
@Override
public void updateAnalInferenceMngState(Long analUid, String status) {
queryFactory
.update(mapSheetAnalInferenceEntity)
.set(mapSheetAnalInferenceEntity.analState, status)
.set(mapSheetAnalInferenceEntity.updatedDttm, ZonedDateTime.now())
.where(mapSheetAnalInferenceEntity.id.eq(analUid))
.execute();
}
private StringExpression makeCogUrl(NumberPath<Integer> year) { private StringExpression makeCogUrl(NumberPath<Integer> year) {
return new CaseBuilder() return new CaseBuilder()
.when(imageryEntity.year.eq(year)) .when(imageryEntity.year.eq(year))

View File

@@ -204,6 +204,19 @@ public class TrainingDataLabelDto {
} }
} }
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public static class InferenceIdInfo {
@Schema(description = "inferenceGeomUid")
private Long inferenceGeomUid;
@Schema(description = "analUid")
private Long analUid;
}
@Schema(name = "LearnDataGeometry", description = "LearnDataGeometry") @Schema(name = "LearnDataGeometry", description = "LearnDataGeometry")
@Getter @Getter
@Setter @Setter

View File

@@ -2,11 +2,13 @@ package com.kamco.cd.kamcoback.trainingdata.service;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState;
import com.kamco.cd.kamcoback.postgres.core.TrainingDataLabelCoreService; import com.kamco.cd.kamcoback.postgres.core.TrainingDataLabelCoreService;
import com.kamco.cd.kamcoback.scheduler.service.TrainingDataReviewJobService; import com.kamco.cd.kamcoback.scheduler.service.TrainingDataReviewJobService;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DefaultPaging;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.DetailRes;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelFeatureRequest;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingGeometryInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto;
@@ -44,8 +46,8 @@ public class TrainingDataLabelService {
public String saveLabelingFeature(LabelFeatureRequest request) { public String saveLabelingFeature(LabelFeatureRequest request) {
String status = ""; String status = "";
String assignmentUid = request.getAssignmentUid(); String assignmentUid = request.getAssignmentUid();
Long inferenceGeomUid = InferenceIdInfo info = trainingDataLabelCoreService.findLabelingAssignmentGeoUid(assignmentUid);
trainingDataLabelCoreService.findLabelingAssignmentGeoUid(assignmentUid); Long inferenceGeomUid = info.getInferenceGeomUid();
if (request.getGeometry() == null || request.getGeometry().isEmpty()) { if (request.getGeometry() == null || request.getGeometry().isEmpty()) {
// SKIP 상태만 업데이트 // SKIP 상태만 업데이트
status = "SKIP"; status = "SKIP";
@@ -61,6 +63,10 @@ public class TrainingDataLabelService {
// 라벨링 완료하면 실시간 검수 할당 (1건) // 라벨링 완료하면 실시간 검수 할당 (1건)
trainingDataReviewJobService.assignRealtime(assignmentUid); trainingDataReviewJobService.assignRealtime(assignmentUid);
// 회차 진행 상태 update
trainingDataLabelCoreService.updateAnalInferenceMngState(
info.getAnalUid(), LabelMngState.ING.getId());
return status; return status;
} }

View File

@@ -2,7 +2,9 @@ package com.kamco.cd.kamcoback.trainingdata.service;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ApiResponseCode;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj; import com.kamco.cd.kamcoback.config.api.ApiResponseDto.ResponseObj;
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelMngState;
import com.kamco.cd.kamcoback.postgres.core.TrainingDataReviewCoreService; import com.kamco.cd.kamcoback.postgres.core.TrainingDataReviewCoreService;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.InferenceIdInfo;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DefaultPaging;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataReviewDto.DetailRes;
@@ -39,7 +41,8 @@ public class TrainingDataReviewService {
public String saveReviewFeature(GeoFeatureRequest request) { public String saveReviewFeature(GeoFeatureRequest request) {
String status = ""; String status = "";
String operatorUid = request.getOperatorUid(); String operatorUid = request.getOperatorUid();
Long inferenceGeomUid = trainingDataReviewCoreService.findReviewOperatorGeoUid(operatorUid); InferenceIdInfo info = trainingDataReviewCoreService.findReviewOperatorGeoUid(operatorUid);
Long inferenceGeomUid = info.getInferenceGeomUid();
if (request.getGeometry() == null || request.getGeometry().isEmpty()) { if (request.getGeometry() == null || request.getGeometry().isEmpty()) {
// EXCEPT 상태만 업데이트 // EXCEPT 상태만 업데이트
@@ -52,6 +55,11 @@ public class TrainingDataReviewService {
trainingDataReviewCoreService.updateReviewPolygonClass( trainingDataReviewCoreService.updateReviewPolygonClass(
inferenceGeomUid, request.getGeometry(), request.getProperties(), status); inferenceGeomUid, request.getGeometry(), request.getProperties(), status);
} }
// 회차 진행 상태 update
trainingDataReviewCoreService.updateAnalInferenceMngState(
info.getAnalUid(), LabelMngState.ING.getId());
return status; return status;
} }