Compare commits
10 Commits
feat/infer
...
ed3c901143
| Author | SHA1 | Date | |
|---|---|---|---|
| ed3c901143 | |||
| b58b859470 | |||
| b78fda151a | |||
| 435a48afb9 | |||
| af0866ff5b | |||
| d0132ac697 | |||
|
|
4272558f32 | ||
| d83fb01cbe | |||
| 0425a6486d | |||
| 71e4ab14bd |
@@ -324,4 +324,21 @@ public class CommonCodeApiController {
|
||||
public ApiResponseDto<List<CodeDto>> getTypeCode(@PathVariable String type) {
|
||||
return ApiResponseDto.ok(commonCodeService.getTypeCode(type));
|
||||
}
|
||||
|
||||
@Operation(summary = "코드 단건 조회", description = "코드 조회")
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
responseCode = "200",
|
||||
description = "코드 조회 성공",
|
||||
content =
|
||||
@Content(
|
||||
mediaType = "application/json",
|
||||
schema = @Schema(implementation = CodeDto.class))),
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
@GetMapping("/type/copy/{type}")
|
||||
public ApiResponseDto<List<CodeDto>> getTypeCodeCopy(@PathVariable String type) {
|
||||
return ApiResponseDto.ok(commonCodeService.getTypeCode(type));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ public class LabelWorkDto {
|
||||
@AllArgsConstructor
|
||||
public static class LabelWorkMng {
|
||||
|
||||
private Long analUid;
|
||||
private UUID uuid;
|
||||
private Integer compareYyyy;
|
||||
private Integer targetYyyy;
|
||||
@@ -260,4 +261,18 @@ public class LabelWorkDto {
|
||||
return PageRequest.of(page, size);
|
||||
}
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class LabelCntInfo {
|
||||
|
||||
private Long assignedCnt;
|
||||
private Long skipCnt;
|
||||
private Long doneCnt;
|
||||
private Long unconfirmCnt;
|
||||
private Long exceptCnt;
|
||||
private Long completeCnt;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,14 +22,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RequestPart;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@Tag(name = "영상 관리", description = "영상 관리 API")
|
||||
@@ -256,4 +249,11 @@ public class MapSheetMngApiController {
|
||||
return ApiResponseDto.ok(
|
||||
mapSheetMngService.uploadChunkMapSheetFile(hstUid, upAddReqDto, chunkFile));
|
||||
}
|
||||
|
||||
@Operation(summary = "영상데이터관리 > 등록된 년도 데이터 전체 삭제", description = "영상데이터관리 > 등록된 년도 데이터 전체 삭제")
|
||||
@DeleteMapping
|
||||
public ApiResponseDto<Void> deleteByMngYyyyMngAll(@RequestParam Integer mngYyyy) {
|
||||
mapSheetMngService.deleteByMngYyyyMngAll(mngYyyy);
|
||||
return ApiResponseDto.ok(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Transactional(readOnly = true)
|
||||
@Transactional
|
||||
public class MapSheetMngService {
|
||||
|
||||
private final MapSheetMngCoreService mapSheetMngCoreService;
|
||||
@@ -489,4 +489,8 @@ public class MapSheetMngService {
|
||||
|
||||
return modelUploadResDto;
|
||||
}
|
||||
|
||||
public void deleteByMngYyyyMngAll(Integer mngYyyy) {
|
||||
mapSheetMngCoreService.deleteByMngYyyyMngAll(mngYyyy);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Tag(name = "메뉴 조회", description = "메뉴 조회 API")
|
||||
@@ -68,9 +69,10 @@ public class MyMenuApiController {
|
||||
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||
})
|
||||
@GetMapping
|
||||
public ApiResponseDto<List<MyMenuDto.Basic>> getFindAllByRole() {
|
||||
public ApiResponseDto<List<MyMenuDto.Basic>> getFindAllByRole(
|
||||
@RequestParam(required = false) String locale) {
|
||||
UserUtil userUtil = new UserUtil();
|
||||
String role = userUtil.getRole();
|
||||
return ApiResponseDto.ok(myMenuService.getFindByRole(role));
|
||||
return ApiResponseDto.ok(myMenuService.getFindByRole(role, locale));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ public class MenuDto {
|
||||
|
||||
@JsonFormatDttm private ZonedDateTime updatedDttm;
|
||||
|
||||
private String menuApiUrl;
|
||||
private String menuNmEn;
|
||||
|
||||
public Basic(
|
||||
String menuUid,
|
||||
@@ -45,7 +45,8 @@ public class MenuDto {
|
||||
Long updatedUid,
|
||||
List<MenuDto.Basic> children,
|
||||
ZonedDateTime createdDttm,
|
||||
ZonedDateTime updatedDttm) {
|
||||
ZonedDateTime updatedDttm,
|
||||
String menuNmEn) {
|
||||
this.menuUid = menuUid;
|
||||
this.menuNm = menuNm;
|
||||
this.menuUrl = menuUrl;
|
||||
@@ -58,6 +59,7 @@ public class MenuDto {
|
||||
this.children = children;
|
||||
this.createdDttm = createdDttm;
|
||||
this.updatedDttm = updatedDttm;
|
||||
this.menuNmEn = menuNmEn;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public class MyMenuService {
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
public List<MyMenuDto.Basic> getFindByRole(String role) {
|
||||
return menuCoreService.getFindByRole(role);
|
||||
public List<MyMenuDto.Basic> getFindByRole(String role, String locale) {
|
||||
return menuCoreService.getFindByRole(role, locale);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -379,4 +379,8 @@ public class MapSheetMngCoreService {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public void deleteByMngYyyyMngAll(Integer mngYyyy) {
|
||||
mapSheetMngRepository.deleteByMngYyyyMngAll(mngYyyy);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,16 +25,16 @@ public class MenuCoreService {
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
public List<MyMenuDto.Basic> getFindByRole(String role) {
|
||||
public List<MyMenuDto.Basic> getFindByRole(String role, String locale) {
|
||||
List<MenuEntity> entities = menuRepository.getFindByRole(role);
|
||||
|
||||
boolean english = locale != null && locale.equals("en");
|
||||
return entities.stream()
|
||||
.map(
|
||||
parent -> {
|
||||
MyMenuDto.Basic p =
|
||||
new MyMenuDto.Basic(
|
||||
parent.getMenuUid(),
|
||||
parent.getMenuNm(),
|
||||
english ? parent.getMenuNmEn() : parent.getMenuNm(),
|
||||
parent.getMenuUrl(),
|
||||
parent.getMenuOrder());
|
||||
|
||||
@@ -48,7 +48,10 @@ public class MenuCoreService {
|
||||
.map(
|
||||
c ->
|
||||
new MyMenuDto.Basic(
|
||||
c.getMenuUid(), c.getMenuNm(), c.getMenuUrl(), c.getMenuOrder()))
|
||||
c.getMenuUid(),
|
||||
english ? c.getMenuNmEn() : c.getMenuNm(),
|
||||
c.getMenuUrl(),
|
||||
c.getMenuOrder()))
|
||||
.forEach(childDto -> p.getChildren().add(childDto));
|
||||
|
||||
return p;
|
||||
|
||||
@@ -58,6 +58,9 @@ public class MenuEntity extends CommonDateEntity {
|
||||
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
|
||||
private List<MenuEntity> children = new ArrayList<>();
|
||||
|
||||
@Column(name = "menu_nm_en")
|
||||
private String menuNmEn; // 영문 메뉴명
|
||||
|
||||
public MenuDto.Basic toDto() {
|
||||
return new MenuDto.Basic(
|
||||
this.menuUid,
|
||||
@@ -71,6 +74,7 @@ public class MenuEntity extends CommonDateEntity {
|
||||
this.updatedUid,
|
||||
this.children.stream().map(MenuEntity::toDto).toList(),
|
||||
this.getCreatedDate(),
|
||||
this.getModifiedDate());
|
||||
this.getModifiedDate(),
|
||||
this.menuNmEn);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ 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.LabelWorkDto;
|
||||
import com.kamco.cd.kamcoback.label.dto.LabelWorkDto.LabelCntInfo;
|
||||
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.WorkerState;
|
||||
@@ -18,7 +19,6 @@ import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataInferenceGeomEnti
|
||||
import com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalInferenceEntity;
|
||||
import com.kamco.cd.kamcoback.postgres.entity.QMemberEntity;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.Expression;
|
||||
import com.querydsl.core.types.OrderSpecifier;
|
||||
import com.querydsl.core.types.Projections;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
@@ -86,7 +86,7 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
}
|
||||
|
||||
/**
|
||||
* 라벨링 작업관리 목록 조회 (복잡한 집계 쿼리로 인해 DTO 직접 반환)
|
||||
* 라벨링 작업관리 목록 조회 :: 전체 geom 집계 -> inference 먼저 쿼리 하고 count 정보 따로 집계하도록 수정
|
||||
*
|
||||
* @param searchReq 검색 조건
|
||||
* @return 라벨링 작업관리 목록 페이지
|
||||
@@ -95,9 +95,8 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
public Page<LabelWorkMng> labelWorkMngList(LabelWorkDto.LabelWorkMngSearchReq searchReq) {
|
||||
|
||||
Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize());
|
||||
BooleanBuilder whereBuilder = new BooleanBuilder();
|
||||
BooleanBuilder whereSubDataBuilder = new BooleanBuilder();
|
||||
BooleanBuilder whereSubBuilder = new BooleanBuilder();
|
||||
|
||||
BooleanBuilder baseWhereBuilder = new BooleanBuilder();
|
||||
|
||||
if (StringUtils.isNotBlank(searchReq.getDetectYear())) {
|
||||
String[] years = searchReq.getDetectYear().split("-");
|
||||
@@ -106,67 +105,14 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
Integer compareYear = Integer.valueOf(years[0]);
|
||||
Integer targetYear = Integer.valueOf(years[1]);
|
||||
|
||||
whereBuilder.and(
|
||||
mapSheetAnalDataInferenceEntity
|
||||
baseWhereBuilder.and(
|
||||
mapSheetAnalInferenceEntity
|
||||
.compareYyyy
|
||||
.eq(compareYear)
|
||||
.and(mapSheetAnalDataInferenceEntity.targetYyyy.eq(targetYear)));
|
||||
.and(mapSheetAnalInferenceEntity.targetYyyy.eq(targetYear)));
|
||||
}
|
||||
}
|
||||
|
||||
whereSubDataBuilder.and(
|
||||
mapSheetAnalInferenceEntity.id.eq(mapSheetAnalDataInferenceEntity.analUid));
|
||||
|
||||
whereSubBuilder.and(
|
||||
mapSheetAnalDataInferenceGeomEntity.dataUid.eq(mapSheetAnalDataInferenceEntity.id));
|
||||
|
||||
if (searchReq.getStrtDttm() != null && searchReq.getEndDttm() != null) {
|
||||
|
||||
ZoneId zoneId = ZoneId.of("Asia/Seoul");
|
||||
|
||||
ZonedDateTime start = searchReq.getStrtDttm().atStartOfDay(zoneId);
|
||||
|
||||
ZonedDateTime end = searchReq.getEndDttm().plusDays(1).atStartOfDay(zoneId);
|
||||
|
||||
whereSubBuilder.and(
|
||||
mapSheetAnalDataInferenceGeomEntity
|
||||
.labelStateDttm
|
||||
.goe(start)
|
||||
.and(mapSheetAnalDataInferenceGeomEntity.labelStateDttm.lt(end)));
|
||||
}
|
||||
|
||||
// labelTotCnt: pnu가 있고 fitState = UNFIT 인 건수만 라벨링 대상
|
||||
NumberExpression<Long> labelTotCntExpr =
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity
|
||||
.pnu
|
||||
.gt(0)
|
||||
.and(
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(
|
||||
ImageryFitStatus.UNFIT.getId())))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum();
|
||||
|
||||
// stagnation_yn = 'N'인 정상 진행 건수 (서브쿼리로 별도 집계)
|
||||
Expression<Long> normalProgressCntSubQuery =
|
||||
JPAExpressions.select(
|
||||
new CaseBuilder()
|
||||
.when(labelingAssignmentEntity.stagnationYn.eq('N'))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L))
|
||||
.from(labelingAssignmentEntity)
|
||||
.where(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id));
|
||||
|
||||
// 총 배정 건수 (서브쿼리로 별도 집계)
|
||||
Expression<Long> totalAssignmentCntSubQuery =
|
||||
JPAExpressions.select(labelingAssignmentEntity.count().coalesce(0L))
|
||||
.from(labelingAssignmentEntity)
|
||||
.where(labelingAssignmentEntity.analUid.eq(mapSheetAnalInferenceEntity.id));
|
||||
|
||||
/** 순서 ING 진행중 ASSIGNED 작업할당 PENDING 작업대기 FINISH 종료 */
|
||||
NumberExpression<Integer> stateOrder =
|
||||
new CaseBuilder()
|
||||
@@ -180,64 +126,31 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
.then(3)
|
||||
.otherwise(99);
|
||||
|
||||
// 1단계: anal_inference 기준으로 상위 페이지 목록만 조회
|
||||
List<LabelWorkMng> foundContent =
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
LabelWorkMng.class,
|
||||
mapSheetAnalInferenceEntity.id, // analUid 추가
|
||||
mapSheetAnalInferenceEntity.uuid,
|
||||
mapSheetAnalInferenceEntity.compareYyyy,
|
||||
mapSheetAnalInferenceEntity.targetYyyy,
|
||||
mapSheetAnalInferenceEntity.stage,
|
||||
// 국유인 반영 컬럼 gukyuinApplyDttm
|
||||
mapSheetAnalInferenceEntity.gukyuinApplyDttm,
|
||||
mapSheetAnalDataInferenceGeomEntity.dataUid.count(),
|
||||
// labelTotCnt: pnu 있고 pass_yn = false인 건수
|
||||
labelTotCntExpr,
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity.labelState.eq(
|
||||
LabelState.ASSIGNED.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum(),
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity.labelState.eq(
|
||||
LabelState.SKIP.getId())) // "STOP"?
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum(),
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity.labelState.eq(
|
||||
LabelState.DONE.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum(),
|
||||
mapSheetAnalDataInferenceGeomEntity.labelStateDttm.min(),
|
||||
// analState: tb_map_sheet_anal_inference.anal_state
|
||||
mapSheetAnalInferenceEntity.detectingCnt,
|
||||
Expressions.constant(0L),
|
||||
Expressions.constant(0L),
|
||||
Expressions.constant(0L),
|
||||
Expressions.constant(0L),
|
||||
mapSheetAnalInferenceEntity.createdDttm,
|
||||
mapSheetAnalInferenceEntity.analState,
|
||||
// normalProgressCnt: stagnation_yn = 'N'인 건수 (서브쿼리)
|
||||
normalProgressCntSubQuery,
|
||||
// totalAssignmentCnt: 총 배정 건수 (서브쿼리)
|
||||
totalAssignmentCntSubQuery,
|
||||
Expressions.constant(0L),
|
||||
Expressions.constant(0L),
|
||||
mapSheetAnalInferenceEntity.labelingClosedYn,
|
||||
mapSheetAnalInferenceEntity.inspectionClosedYn,
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity.testState.eq(
|
||||
InspectState.COMPLETE.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum(),
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
mapSheetAnalDataInferenceGeomEntity.testState.eq(
|
||||
InspectState.UNCONFIRM.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum(),
|
||||
Expressions.constant(0L),
|
||||
Expressions.constant(0L),
|
||||
new CaseBuilder()
|
||||
.when(mapSheetAnalInferenceEntity.inspectionClosedYn.eq("Y"))
|
||||
.then(mapSheetAnalInferenceEntity.updatedDttm)
|
||||
@@ -247,23 +160,9 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
"substring({0} from 1 for 8)", mapSheetLearnEntity.uid),
|
||||
mapSheetLearnEntity.uuid))
|
||||
.from(mapSheetAnalInferenceEntity)
|
||||
.innerJoin(mapSheetAnalDataInferenceEntity)
|
||||
.on(whereSubDataBuilder)
|
||||
.innerJoin(mapSheetAnalDataInferenceGeomEntity)
|
||||
.on(whereSubBuilder)
|
||||
.leftJoin(mapSheetLearnEntity)
|
||||
.on(mapSheetAnalInferenceEntity.learnId.eq(mapSheetLearnEntity.id))
|
||||
.where(whereBuilder)
|
||||
.groupBy(
|
||||
mapSheetAnalInferenceEntity.uuid,
|
||||
mapSheetAnalInferenceEntity.compareYyyy,
|
||||
mapSheetAnalInferenceEntity.targetYyyy,
|
||||
mapSheetAnalInferenceEntity.stage,
|
||||
mapSheetAnalInferenceEntity.createdDttm,
|
||||
mapSheetAnalInferenceEntity.analState,
|
||||
mapSheetAnalInferenceEntity.id,
|
||||
mapSheetLearnEntity.uid,
|
||||
mapSheetLearnEntity.uuid)
|
||||
.where(baseWhereBuilder)
|
||||
.orderBy(
|
||||
stateOrder.asc(),
|
||||
mapSheetAnalInferenceEntity.targetYyyy.desc(),
|
||||
@@ -273,20 +172,122 @@ public class LabelWorkRepositoryImpl implements LabelWorkRepositoryCustom {
|
||||
.limit(pageable.getPageSize())
|
||||
.fetch();
|
||||
|
||||
// Count 쿼리 별도 실행 (null safe handling)
|
||||
// total count
|
||||
long total =
|
||||
Optional.ofNullable(
|
||||
queryFactory
|
||||
.select(mapSheetAnalInferenceEntity.uuid.countDistinct())
|
||||
.select(mapSheetAnalInferenceEntity.count())
|
||||
.from(mapSheetAnalInferenceEntity)
|
||||
.innerJoin(mapSheetAnalDataInferenceEntity)
|
||||
.on(whereSubDataBuilder)
|
||||
.innerJoin(mapSheetAnalDataInferenceGeomEntity)
|
||||
.on(whereSubBuilder)
|
||||
.where(whereBuilder)
|
||||
.where(baseWhereBuilder)
|
||||
.fetchOne())
|
||||
.orElse(0L);
|
||||
|
||||
// 2단계: 각 analUid별 count 조회 후 세팅
|
||||
for (LabelWorkMng item : foundContent) {
|
||||
Long analUid = item.getAnalUid();
|
||||
|
||||
BooleanBuilder geomWhereBuilder = new BooleanBuilder();
|
||||
geomWhereBuilder.and(mapSheetAnalDataInferenceEntity.analUid.eq(analUid));
|
||||
geomWhereBuilder.and(
|
||||
mapSheetAnalDataInferenceGeomEntity.dataUid.eq(mapSheetAnalDataInferenceEntity.id));
|
||||
|
||||
if (searchReq.getStrtDttm() != null && searchReq.getEndDttm() != null) {
|
||||
ZoneId zoneId = ZoneId.of("Asia/Seoul");
|
||||
ZonedDateTime start = searchReq.getStrtDttm().atStartOfDay(zoneId);
|
||||
ZonedDateTime end = searchReq.getEndDttm().plusDays(1).atStartOfDay(zoneId);
|
||||
|
||||
geomWhereBuilder.and(
|
||||
mapSheetAnalDataInferenceGeomEntity
|
||||
.createdDttm
|
||||
.goe(start)
|
||||
.and(mapSheetAnalDataInferenceGeomEntity.createdDttm.lt(end)));
|
||||
}
|
||||
|
||||
// labelTotCnt: pnu > 0 and fitState = UNFIT
|
||||
Long labelTotCnt =
|
||||
Optional.ofNullable(
|
||||
queryFactory
|
||||
.select(mapSheetAnalDataInferenceGeomEntity.count())
|
||||
.from(mapSheetAnalDataInferenceEntity)
|
||||
.innerJoin(mapSheetAnalDataInferenceGeomEntity)
|
||||
.on(
|
||||
mapSheetAnalDataInferenceGeomEntity.dataUid.eq(
|
||||
mapSheetAnalDataInferenceEntity.id))
|
||||
.where(
|
||||
geomWhereBuilder,
|
||||
mapSheetAnalDataInferenceGeomEntity.pnu.gt(0),
|
||||
mapSheetAnalDataInferenceGeomEntity.fitState.eq(
|
||||
ImageryFitStatus.UNFIT.getId()))
|
||||
.fetchOne())
|
||||
.orElse(0L);
|
||||
|
||||
LabelCntInfo cntInfo =
|
||||
queryFactory
|
||||
.select(
|
||||
Projections.constructor(
|
||||
LabelCntInfo.class,
|
||||
new CaseBuilder()
|
||||
.when(labelingAssignmentEntity.workState.eq(LabelState.ASSIGNED.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L),
|
||||
new CaseBuilder()
|
||||
.when(labelingAssignmentEntity.workState.eq(LabelState.SKIP.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L),
|
||||
new CaseBuilder()
|
||||
.when(labelingAssignmentEntity.workState.eq(LabelState.DONE.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L),
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
labelingAssignmentEntity.inspectState.eq(
|
||||
InspectState.UNCONFIRM.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L),
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
labelingAssignmentEntity.inspectState.eq(InspectState.EXCEPT.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L),
|
||||
new CaseBuilder()
|
||||
.when(
|
||||
labelingAssignmentEntity.inspectState.eq(
|
||||
InspectState.COMPLETE.getId()))
|
||||
.then(1L)
|
||||
.otherwise(0L)
|
||||
.sum()
|
||||
.coalesce(0L)))
|
||||
.from(labelingAssignmentEntity)
|
||||
.where(labelingAssignmentEntity.analUid.eq(analUid))
|
||||
.fetchOne();
|
||||
|
||||
Long normalProgressCnt = 0L;
|
||||
Long totalAssignmentCnt = 0L;
|
||||
|
||||
if (cntInfo == null) {
|
||||
cntInfo = new LabelCntInfo(0L, 0L, 0L, 0L, 0L, 0L);
|
||||
}
|
||||
|
||||
item.setLabelTotCnt(labelTotCnt);
|
||||
item.setLabelAssignCnt(cntInfo.getAssignedCnt());
|
||||
item.setLabelSkipTotCnt(cntInfo.getSkipCnt());
|
||||
item.setLabelCompleteTotCnt(cntInfo.getDoneCnt());
|
||||
item.setNormalProgressCnt(normalProgressCnt);
|
||||
item.setTotalAssignmentCnt(totalAssignmentCnt);
|
||||
item.setInspectorCompleteTotCnt(cntInfo.getCompleteCnt());
|
||||
item.setInspectorRemainCnt(cntInfo.getUnconfirmCnt());
|
||||
}
|
||||
|
||||
return new PageImpl<>(foundContent, pageable, total);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,8 +256,9 @@ public class MapSheetInferenceJobService {
|
||||
String batchIdStr = batchIds.stream().map(String::valueOf).collect(Collectors.joining(","));
|
||||
|
||||
// 0312 shp 파일 비동기 생성 (바꿔주세요)
|
||||
shpPipelineService.makeShapeFile(sheet.getUid(), batchIds);
|
||||
// shpPipelineService.runPipeline(jarPath, datasetDir, batchIdStr, sheet.getUid());
|
||||
// shpPipelineService.makeShapeFile(sheet.getUid(), batchIds);
|
||||
// 0511 shp-exporter-v2.jar 에 에러가 있어 우선 기존 로직으로 변경함
|
||||
shpPipelineService.runPipeline(jarPath, datasetDir, batchIdStr, sheet.getUid());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,7 +9,9 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.ErrorResponse;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@@ -24,6 +26,12 @@ public class TestShapeApiController {
|
||||
|
||||
private final ShpPipelineService shpPipelineService;
|
||||
|
||||
@Value("${inference.jar-path}")
|
||||
private String jarPath;
|
||||
|
||||
@Value("${file.dataset-dir}")
|
||||
private String datasetDir;
|
||||
|
||||
@Operation(
|
||||
summary = "shapefile 생성 테스트",
|
||||
description = "지정된 inference ID와 batch ID 목록으로 shapefile을 생성합니다.")
|
||||
@@ -47,4 +55,29 @@ public class TestShapeApiController {
|
||||
shpPipelineService.makeShapeFile(inferenceId, batchIds);
|
||||
return ApiResponseDto.ok("Shapefile 생성이 시작되었습니다. inferenceId: " + inferenceId);
|
||||
}
|
||||
|
||||
@Operation(
|
||||
summary = "기존 run pipeline 테스트",
|
||||
description = "지정된 inference ID와 batch ID 목록으로 shapefile을 생성합니다.")
|
||||
@ApiResponses({
|
||||
@ApiResponse(
|
||||
responseCode = "200",
|
||||
description = "shapefile 생성 요청 성공",
|
||||
content = @Content(schema = @Schema(implementation = String.class))),
|
||||
@ApiResponse(
|
||||
responseCode = "400",
|
||||
description = "잘못된 요청 데이터",
|
||||
content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
|
||||
@ApiResponse(
|
||||
responseCode = "500",
|
||||
description = "서버 오류",
|
||||
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
|
||||
})
|
||||
@GetMapping("/run-pipeline")
|
||||
public ApiResponseDto<String> runPipeline(
|
||||
@RequestParam String inferenceId, @RequestParam List<Long> batchIds) {
|
||||
String batchIdStr = batchIds.stream().map(String::valueOf).collect(Collectors.joining(","));
|
||||
shpPipelineService.runPipeline(jarPath, datasetDir, batchIdStr, inferenceId);
|
||||
return ApiResponseDto.ok("runPipeline 생성이 시작되었습니다. inferenceId: " + inferenceId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ spring:
|
||||
|
||||
data:
|
||||
redis:
|
||||
host: 192.168.2.109
|
||||
host: 192.168.2.126
|
||||
port: 6379
|
||||
password: kamco
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ spring:
|
||||
|
||||
data:
|
||||
redis:
|
||||
host: 192.168.2.109
|
||||
host: 192.168.2.126
|
||||
port: 6379
|
||||
password: kamco
|
||||
|
||||
|
||||
Reference in New Issue
Block a user