작업현황 수정
This commit is contained in:
@@ -126,6 +126,12 @@ public class LabelWorkerApiController {
|
|||||||
String userRole,
|
String userRole,
|
||||||
@Parameter(description = "검색어", example = "20261201") @RequestParam(required = false)
|
@Parameter(description = "검색어", example = "20261201") @RequestParam(required = false)
|
||||||
String searchVal,
|
String searchVal,
|
||||||
|
@Parameter(
|
||||||
|
description = "정렬",
|
||||||
|
example = "",
|
||||||
|
schema = @Schema(allowableValues = {"remindCnt desc", "doneCnt desc"}))
|
||||||
|
@RequestParam(required = false)
|
||||||
|
String sort,
|
||||||
@Parameter(description = "페이지 번호 (0부터 시작)", example = "0") @RequestParam(defaultValue = "0")
|
@Parameter(description = "페이지 번호 (0부터 시작)", example = "0") @RequestParam(defaultValue = "0")
|
||||||
int page,
|
int page,
|
||||||
@Parameter(description = "페이지 크기", example = "20") @RequestParam(defaultValue = "20")
|
@Parameter(description = "페이지 크기", example = "20") @RequestParam(defaultValue = "20")
|
||||||
@@ -139,6 +145,7 @@ public class LabelWorkerApiController {
|
|||||||
searchReq.setUserRole(userRole);
|
searchReq.setUserRole(userRole);
|
||||||
searchReq.setSearchVal(searchVal);
|
searchReq.setSearchVal(searchVal);
|
||||||
searchReq.setUuid(uuid);
|
searchReq.setUuid(uuid);
|
||||||
|
searchReq.setSort(sort);
|
||||||
searchReq.setPage(page);
|
searchReq.setPage(page);
|
||||||
searchReq.setSize(size);
|
searchReq.setSize(size);
|
||||||
return ApiResponseDto.ok(labelWorkService.findlabelWorkStateList(searchReq));
|
return ApiResponseDto.ok(labelWorkService.findlabelWorkStateList(searchReq));
|
||||||
|
|||||||
@@ -211,6 +211,9 @@ public class LabelWorkDto {
|
|||||||
@Schema(description = "종료일", example = "20261201")
|
@Schema(description = "종료일", example = "20261201")
|
||||||
private String uuid;
|
private String uuid;
|
||||||
|
|
||||||
|
@Schema(description = "정렬(remindCnt desc, doneCnt desc)", example = "remindCnt desc")
|
||||||
|
private String sort;
|
||||||
|
|
||||||
public Pageable toPageable() {
|
public Pageable toPageable() {
|
||||||
|
|
||||||
return PageRequest.of(page, size);
|
return PageRequest.of(page, size);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceG
|
|||||||
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity;
|
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity.mapSheetAnalInferenceEntity;
|
||||||
import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity;
|
import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity;
|
||||||
|
|
||||||
|
import com.kamco.cd.kamcoback.label.dto.LabelAllocateDto.LabelState;
|
||||||
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto;
|
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto;
|
||||||
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelWorkMng;
|
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelWorkMng;
|
||||||
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelWorkMngDetail;
|
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelWorkMngDetail;
|
||||||
@@ -13,8 +14,11 @@ import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.WorkerState;
|
|||||||
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity;
|
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity;
|
||||||
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalInferenceEntity;
|
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalInferenceEntity;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
|
import com.querydsl.core.types.OrderSpecifier;
|
||||||
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.DateTimePath;
|
||||||
import com.querydsl.core.types.dsl.Expressions;
|
import com.querydsl.core.types.dsl.Expressions;
|
||||||
import com.querydsl.core.types.dsl.NumberExpression;
|
import com.querydsl.core.types.dsl.NumberExpression;
|
||||||
import com.querydsl.core.types.dsl.StringExpression;
|
import com.querydsl.core.types.dsl.StringExpression;
|
||||||
@@ -26,6 +30,7 @@ import java.time.LocalDate;
|
|||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -208,21 +213,14 @@ public class LabelWorkRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<WorkerState> findlabelWorkStateList(LabelWorkDto.WorkerStateSearchReq searchReq) {
|
public Page<WorkerState> findlabelWorkStateList(LabelWorkDto.WorkerStateSearchReq searchReq) {
|
||||||
|
|
||||||
Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize());
|
Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize());
|
||||||
BooleanBuilder whereBuilder = new BooleanBuilder();
|
BooleanBuilder whereBuilder = new BooleanBuilder();
|
||||||
BooleanBuilder whereSubBuilder = new BooleanBuilder();
|
BooleanBuilder whereSubBuilder = new BooleanBuilder();
|
||||||
|
List<OrderSpecifier<?>> orderSpecifiers = new ArrayList<>();
|
||||||
|
|
||||||
UUID uuid = UUID.fromString(searchReq.getUuid());
|
UUID uuid = UUID.fromString(searchReq.getUuid());
|
||||||
|
|
||||||
LocalDate threeDaysAgo = LocalDate.now().minusDays(3);
|
|
||||||
String s3 = threeDaysAgo.format(DateTimeFormatter.ofPattern("YYYY-MM-DD"));
|
|
||||||
|
|
||||||
LocalDate twoDaysAgo = LocalDate.now().minusDays(2);
|
|
||||||
String s2 = twoDaysAgo.format(DateTimeFormatter.ofPattern("YYYY-MM-DD"));
|
|
||||||
|
|
||||||
LocalDate oneDaysAgo = LocalDate.now().minusDays(1);
|
|
||||||
String s1 = oneDaysAgo.format(DateTimeFormatter.ofPattern("YYYY-MM-DD"));
|
|
||||||
|
|
||||||
if (searchReq.getUserRole() != null && !searchReq.getUserRole().isEmpty()) {
|
if (searchReq.getUserRole() != null && !searchReq.getUserRole().isEmpty()) {
|
||||||
whereSubBuilder.and(memberEntity.userRole.eq(searchReq.getUserRole()));
|
whereSubBuilder.and(memberEntity.userRole.eq(searchReq.getUserRole()));
|
||||||
}
|
}
|
||||||
@@ -238,6 +236,43 @@ public class LabelWorkRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
|
|
||||||
whereSubBuilder.and(labelingAssignmentEntity.workerUid.eq(memberEntity.userId));
|
whereSubBuilder.and(labelingAssignmentEntity.workerUid.eq(memberEntity.userId));
|
||||||
|
|
||||||
|
NumberExpression<Long> assignedCnt = labelingAssignmentEntity.workerUid.count();
|
||||||
|
NumberExpression<Long> doneCnt =
|
||||||
|
this.caseSumExpression(labelingAssignmentEntity.workState.eq(LabelState.DONE.name()));
|
||||||
|
NumberExpression<Long> skipCnt =
|
||||||
|
this.caseSumExpression(labelingAssignmentEntity.workState.eq(LabelState.SKIP.name()));
|
||||||
|
|
||||||
|
NumberExpression<Long> day3AgoDoneCnt =
|
||||||
|
this.caseSumExpression(
|
||||||
|
labelingAssignmentEntity
|
||||||
|
.workState
|
||||||
|
.eq(LabelState.DONE.name())
|
||||||
|
.and(this.fromDateEqExpression(labelingAssignmentEntity.modifiedDate, -3)));
|
||||||
|
|
||||||
|
NumberExpression<Long> day2AgoDoneCnt =
|
||||||
|
this.caseSumExpression(
|
||||||
|
labelingAssignmentEntity
|
||||||
|
.workState
|
||||||
|
.eq(LabelState.DONE.name())
|
||||||
|
.and(this.fromDateEqExpression(labelingAssignmentEntity.modifiedDate, -2)));
|
||||||
|
|
||||||
|
NumberExpression<Long> day1AgoDoneCnt =
|
||||||
|
this.caseSumExpression(
|
||||||
|
labelingAssignmentEntity
|
||||||
|
.workState
|
||||||
|
.eq(LabelState.DONE.name())
|
||||||
|
.and(this.fromDateEqExpression(labelingAssignmentEntity.modifiedDate, -1)));
|
||||||
|
|
||||||
|
NumberExpression<Long> remainingCnt = assignedCnt.subtract(doneCnt);
|
||||||
|
|
||||||
|
if (searchReq.getSort() == null || searchReq.getSort().isEmpty()) {
|
||||||
|
orderSpecifiers.add(memberEntity.name.asc());
|
||||||
|
} else if (searchReq.getSort().equals("doneCnt desc")) {
|
||||||
|
orderSpecifiers.add(doneCnt.desc());
|
||||||
|
} else if (searchReq.getSort().equals("remindCnt desc")) {
|
||||||
|
orderSpecifiers.add(remainingCnt.desc());
|
||||||
|
}
|
||||||
|
|
||||||
List<WorkerState> foundContent =
|
List<WorkerState> foundContent =
|
||||||
queryFactory
|
queryFactory
|
||||||
.select(
|
.select(
|
||||||
@@ -246,61 +281,12 @@ public class LabelWorkRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
memberEntity.userRole,
|
memberEntity.userRole,
|
||||||
memberEntity.name,
|
memberEntity.name,
|
||||||
memberEntity.userId,
|
memberEntity.userId,
|
||||||
labelingAssignmentEntity.workerUid.count().as("assignedCnt"),
|
assignedCnt.as("assignedCnt"),
|
||||||
new CaseBuilder()
|
doneCnt.as("doneCnt"),
|
||||||
.when(labelingAssignmentEntity.workState.eq("DONE"))
|
skipCnt.as("skipCnt"),
|
||||||
.then(1L)
|
day3AgoDoneCnt.as("day3AgoDoneCnt"),
|
||||||
.otherwise(0L)
|
day2AgoDoneCnt.as("day2AgoDoneCnt"),
|
||||||
.sum()
|
day1AgoDoneCnt.as("day1AgoDoneCnt")))
|
||||||
.as("doneCnt"),
|
|
||||||
new CaseBuilder()
|
|
||||||
.when(labelingAssignmentEntity.workState.eq("SKIP"))
|
|
||||||
.then(1L)
|
|
||||||
.otherwise(0L)
|
|
||||||
.sum()
|
|
||||||
.as("skipCnt"),
|
|
||||||
new CaseBuilder()
|
|
||||||
.when(
|
|
||||||
labelingAssignmentEntity
|
|
||||||
.workState
|
|
||||||
.eq("DONE")
|
|
||||||
.and(
|
|
||||||
Expressions.stringTemplate(
|
|
||||||
"to_char({0}, 'YYYY-MM-DD')",
|
|
||||||
labelingAssignmentEntity.modifiedDate)
|
|
||||||
.eq(s3)))
|
|
||||||
.then(1L)
|
|
||||||
.otherwise(0L)
|
|
||||||
.sum()
|
|
||||||
.as("day3AgoDoneCnt"),
|
|
||||||
new CaseBuilder()
|
|
||||||
.when(
|
|
||||||
labelingAssignmentEntity
|
|
||||||
.workState
|
|
||||||
.eq("DONE")
|
|
||||||
.and(
|
|
||||||
Expressions.stringTemplate(
|
|
||||||
"to_char({0}, 'YYYY-MM-DD')",
|
|
||||||
labelingAssignmentEntity.modifiedDate)
|
|
||||||
.eq(s2)))
|
|
||||||
.then(1L)
|
|
||||||
.otherwise(0L)
|
|
||||||
.sum()
|
|
||||||
.as("day2AgoDoneCnt"),
|
|
||||||
new CaseBuilder()
|
|
||||||
.when(
|
|
||||||
labelingAssignmentEntity
|
|
||||||
.workState
|
|
||||||
.eq("DONE")
|
|
||||||
.and(
|
|
||||||
Expressions.stringTemplate(
|
|
||||||
"to_char({0}, 'YYYY-MM-DD')",
|
|
||||||
labelingAssignmentEntity.modifiedDate)
|
|
||||||
.eq(s1)))
|
|
||||||
.then(1L)
|
|
||||||
.otherwise(0L)
|
|
||||||
.sum()
|
|
||||||
.as("day1AgoDoneCnt")))
|
|
||||||
.from(labelingAssignmentEntity)
|
.from(labelingAssignmentEntity)
|
||||||
.innerJoin(mapSheetAnalInferenceEntity)
|
.innerJoin(mapSheetAnalInferenceEntity)
|
||||||
.on(
|
.on(
|
||||||
@@ -312,6 +298,7 @@ public class LabelWorkRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
.on(whereSubBuilder)
|
.on(whereSubBuilder)
|
||||||
.where(whereBuilder)
|
.where(whereBuilder)
|
||||||
.groupBy(memberEntity.userRole, memberEntity.name, memberEntity.userId)
|
.groupBy(memberEntity.userRole, memberEntity.name, memberEntity.userId)
|
||||||
|
.orderBy(orderSpecifiers.toArray(new OrderSpecifier[0]))
|
||||||
.offset(pageable.getOffset())
|
.offset(pageable.getOffset())
|
||||||
.limit(pageable.getPageSize())
|
.limit(pageable.getPageSize())
|
||||||
.fetch();
|
.fetch();
|
||||||
@@ -413,4 +400,28 @@ public class LabelWorkRepositoryImpl extends QuerydslRepositorySupport
|
|||||||
mapSheetAnalInferenceEntity.createdDttm)
|
mapSheetAnalInferenceEntity.createdDttm)
|
||||||
.fetchOne();
|
.fetchOne();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NumberExpression<Long> caseSumExpression(BooleanExpression condition) {
|
||||||
|
NumberExpression<Long> sumExp =
|
||||||
|
new CaseBuilder()
|
||||||
|
.when(labelingAssignmentEntity.workState.eq("DONE"))
|
||||||
|
.then(1L)
|
||||||
|
.otherwise(0L)
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
return sumExp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanExpression fromDateEqExpression(DateTimePath<ZonedDateTime> path, int addDayCnt) {
|
||||||
|
|
||||||
|
LocalDate threeDaysAgo = LocalDate.now().plusDays(addDayCnt);
|
||||||
|
String toDate = threeDaysAgo.format(DateTimeFormatter.ofPattern("YYYY-MM-DD"));
|
||||||
|
|
||||||
|
// System.out.println("toDate == " + toDate);
|
||||||
|
|
||||||
|
BooleanExpression condition =
|
||||||
|
Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", path).eq(toDate);
|
||||||
|
|
||||||
|
return condition;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user