Merge pull request '라벨링 툴 라벨러 목록 상태 필터 추가' (#175) from feat/infer_dev_260107 into develop

Reviewed-on: https://kamco.gitea.gs.dabeeo.com/dabeeo/kamco-dabeeo-backoffice/pulls/175
This commit is contained in:
2026-01-09 17:51:14 +09:00
5 changed files with 52 additions and 32 deletions

View File

@@ -13,7 +13,8 @@ public class TrainingDataLabelCoreService {
private final TrainingDataLabelRepository trainingDataLabelRepository; private final TrainingDataLabelRepository trainingDataLabelRepository;
public Page<LabelingListDto> findLabelingAssignedList(searchReq searchReq, String userId) { public Page<LabelingListDto> findLabelingAssignedList(
return trainingDataLabelRepository.findLabelingAssignedList(searchReq, userId); searchReq searchReq, String userId, String status) {
return trainingDataLabelRepository.findLabelingAssignedList(searchReq, userId, status);
} }
} }

View File

@@ -6,5 +6,5 @@ import org.springframework.data.domain.Page;
public interface TrainingDataLabelRepositoryCustom { public interface TrainingDataLabelRepositoryCustom {
Page<LabelingListDto> findLabelingAssignedList(searchReq searchReq, String userId); Page<LabelingListDto> findLabelingAssignedList(searchReq searchReq, String userId, String status);
} }

View File

@@ -9,12 +9,15 @@ import com.kamco.cd.kamcoback.postgres.entity.LabelingAssignmentEntity;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.LabelingListDto;
import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.searchReq; import com.kamco.cd.kamcoback.trainingdata.dto.TrainingDataLabelDto.searchReq;
import com.querydsl.core.types.Projections; 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.CaseBuilder;
import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.NumberPath; import com.querydsl.core.types.dsl.NumberPath;
import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.StringExpression;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
@@ -32,7 +35,8 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
} }
@Override @Override
public Page<LabelingListDto> findLabelingAssignedList(searchReq searchReq, String userId) { public Page<LabelingListDto> findLabelingAssignedList(
searchReq searchReq, String userId, String status) {
Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize()); Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize());
List<LabelingListDto> list = List<LabelingListDto> list =
queryFactory queryFactory
@@ -73,7 +77,7 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
.or( .or(
imageryEntity.year.eq( imageryEntity.year.eq(
mapSheetAnalDataInferenceGeomEntity.targetYyyy)))) mapSheetAnalDataInferenceGeomEntity.targetYyyy))))
.where(labelingAssignmentEntity.workerUid.eq(userId)) .where(labelingAssignmentEntity.workerUid.eq(userId), statusInLabelState(status))
.groupBy( .groupBy(
labelingAssignmentEntity.assignmentUid, labelingAssignmentEntity.assignmentUid,
labelingAssignmentEntity.inferenceGeomUid, labelingAssignmentEntity.inferenceGeomUid,
@@ -91,6 +95,7 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
.fetch(); .fetch();
Long count = Long count =
Optional.ofNullable(
queryFactory queryFactory
.select(labelingAssignmentEntity.assignmentUid.count()) .select(labelingAssignmentEntity.assignmentUid.count())
.from(labelingAssignmentEntity) .from(labelingAssignmentEntity)
@@ -112,9 +117,11 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
.or( .or(
imageryEntity.year.eq( imageryEntity.year.eq(
mapSheetAnalDataInferenceGeomEntity.targetYyyy)))) mapSheetAnalDataInferenceGeomEntity.targetYyyy))))
.where(labelingAssignmentEntity.workerUid.eq(userId)) .where(
labelingAssignmentEntity.workerUid.eq(userId), statusInLabelState(status))
.groupBy(labelingAssignmentEntity.assignmentUid) .groupBy(labelingAssignmentEntity.assignmentUid)
.fetchOne(); .fetchOne())
.orElse(0L);
return new PageImpl<>(list, pageable, count); return new PageImpl<>(list, pageable, count);
} }
@@ -127,4 +134,13 @@ public class TrainingDataLabelRepositoryImpl extends QuerydslRepositorySupport
"{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename)) "{0} || {1}", imageryEntity.cogMiddlePath, imageryEntity.cogFilename))
.otherwise(""); .otherwise("");
} }
private BooleanExpression statusInLabelState(String status) {
if (Objects.isNull(status)) {
return null;
}
String[] arrStatus = status.split(",");
return labelingAssignmentEntity.workState.in(arrStatus);
}
} }

View File

@@ -43,8 +43,10 @@ public class TrainingDataLabelApiController {
public ApiResponseDto<Page<LabelingListDto>> findLabelingAssignedList( public ApiResponseDto<Page<LabelingListDto>> findLabelingAssignedList(
@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size, @RequestParam(defaultValue = "20") int size,
@RequestParam(defaultValue = "20260105001") String userId) { @RequestParam(defaultValue = "01022223333") String userId,
@RequestParam(defaultValue = "ASSIGNED,SKIP,DONE", required = false) String status) {
TrainingDataLabelDto.searchReq searchReq = new TrainingDataLabelDto.searchReq(page, size, ""); TrainingDataLabelDto.searchReq searchReq = new TrainingDataLabelDto.searchReq(page, size, "");
return ApiResponseDto.ok(trainingDataLabelService.findLabelingAssignedList(searchReq, userId)); return ApiResponseDto.ok(
trainingDataLabelService.findLabelingAssignedList(searchReq, userId, status));
} }
} }

View File

@@ -15,7 +15,8 @@ public class TrainingDataLabelService {
this.trainingDataLabelCoreService = trainingDataLabelCoreService; this.trainingDataLabelCoreService = trainingDataLabelCoreService;
} }
public Page<LabelingListDto> findLabelingAssignedList(searchReq searchReq, String userId) { public Page<LabelingListDto> findLabelingAssignedList(
return trainingDataLabelCoreService.findLabelingAssignedList(searchReq, userId); searchReq searchReq, String userId, String status) {
return trainingDataLabelCoreService.findLabelingAssignedList(searchReq, userId, status);
} }
} }