영상데이터관리 > 오류데이터 목록 API 커밋

This commit is contained in:
2025-12-02 17:06:10 +09:00
parent dcb6afc916
commit 2377f471d2
9 changed files with 385 additions and 15 deletions

View File

@@ -0,0 +1,21 @@
package com.kamco.cd.kamcoback.postgres.core;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.postgres.repository.mapsheet.MapSheetMngRepository;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class MapSheetMngCoreService {
private final MapSheetMngRepository mapSheetMngRepository;
public Page<MapSheetMngDto.ErrorDataDto> findMapSheetErrorList(MapSheetMngDto.@Valid searchReq searchReq) {
return mapSheetMngRepository.findMapSheetErrorList(searchReq);
}
}

View File

@@ -0,0 +1,42 @@
package com.kamco.cd.kamcoback.postgres.entity;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.postgres.CommonDateEntity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.ZonedDateTime;
@Getter
@Setter
@Entity
@Table(name = "tb_map_sheet_mng")
public class MapSheetMngEntity extends CommonDateEntity {
@Id
@Column(name = "mng_yyyy")
private Integer mngYyyy;
@Column(name = "mng_state")
@Enumerated(EnumType.STRING)
private MapSheetMngDto.MngState mngState;
@Column(name = "sync_state")
@Enumerated(EnumType.STRING)
private MapSheetMngDto.SyncState syncState;
@Column(name = "mng_state_dttm")
private ZonedDateTime mngStateDttm;
@Column(name = "sync_state_dttm")
private ZonedDateTime syncStateDttm;
@Column(name = "created_uid")
private Long createdUid;
@Column(name = "updated_uid")
private Long updatedUid;
@Column(name = "mng_path")
private String mngPath;
}

View File

@@ -0,0 +1,63 @@
package com.kamco.cd.kamcoback.postgres.entity;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.postgres.CommonDateEntity;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.ZonedDateTime;
@Getter
@Setter
@Entity
@Table(name = "tb_map_sheet_mng_hst")
public class MapSheetMngHstEntity extends CommonDateEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "hst_uid")
private Long hstUid;
@Column(name = "mng_yyyy")
private Integer mngYyyy;
@Column(name = "map_sheet_code")
private Integer mapSheetCode;
@Column(name = "map_sheet_num")
private String mapSheetNum;
@Column(name = "map_sheet_name")
private String mapSheetName;
@Column(name = "map_sheet_code_src")
private Integer mapSheetCodeSrc;
@Column(name = "scale_ratio")
private Integer scaleRatio;
@Column(name = "data_state")
@Enumerated(EnumType.STRING)
private MapSheetMngDto.DataState dataState;
@Column(name = "data_state_dttm")
private ZonedDateTime dataStateDttm;
@Column(name = "use_inference")
private Boolean useInference;
@Column(name = "use_inference_dttm")
private ZonedDateTime useInferenceDttm;
@Column(name = "map_sheet_path")
private String mapSheetPath;
@Column(name = "ref_map_sheet_num")
private Long refMapSheetNum;
@Column(name = "created_uid")
private Long createdUid;
@Column(name = "updated_uid")
private Long updatedUid;
}

View File

@@ -0,0 +1,6 @@
package com.kamco.cd.kamcoback.postgres.repository.mapsheet;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetMngEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MapSheetMngRepository extends JpaRepository<MapSheetMngEntity, Long>, MapSheetMngRepositoryCustom {}

View File

@@ -0,0 +1,12 @@
package com.kamco.cd.kamcoback.postgres.repository.mapsheet;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetMngEntity;
import jakarta.validation.Valid;
import org.springframework.data.domain.Page;
import java.util.List;
public interface MapSheetMngRepositoryCustom {
Page<MapSheetMngDto.ErrorDataDto> findMapSheetErrorList(MapSheetMngDto.@Valid searchReq searchReq);
}

View File

@@ -0,0 +1,100 @@
package com.kamco.cd.kamcoback.postgres.repository.mapsheet;
import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetMngHstEntity;
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.core.types.dsl.StringExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.validation.Valid;
import jdk.jfr.Experimental;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngHstEntity.mapSheetMngHstEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetMngEntity.mapSheetMngEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx5kEntity.mapInkx5kEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMapInkx50kEntity.mapInkx50kEntity;
import java.util.List;
import java.util.Objects;
public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport
implements MapSheetMngRepositoryCustom {
private final JPAQueryFactory queryFactory;
private final StringExpression NULL_STRING = Expressions.stringTemplate("cast(null as text)");
public MapSheetMngRepositoryImpl(JPAQueryFactory queryFactory) {
super(MapSheetMngHstEntity.class);
this.queryFactory = queryFactory;
}
@Override
public Page<MapSheetMngDto.ErrorDataDto> findMapSheetErrorList(MapSheetMngDto.@Valid searchReq searchReq) {
Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize());
List<MapSheetMngDto.ErrorDataDto> foundContent = queryFactory
.select(
Projections.constructor(
MapSheetMngDto.ErrorDataDto.class,
mapSheetMngHstEntity.hstUid,
rowNum(),
Expressions.stringTemplate("concat({0}, {1})", mapSheetMngHstEntity.mapSheetName, mapInkx50kEntity.mapidcdNo),
Expressions.stringTemplate("concat({0}, substring({1}, {2}, {3}))", mapSheetMngHstEntity.mapSheetName, mapSheetMngHstEntity.mapSheetNum, 6, 8),
mapSheetMngHstEntity.mapSheetCodeSrc,
Expressions.stringTemplate("to_char({0}, 'YYYY-MM-DD')", mapSheetMngHstEntity.createdDate),
mapSheetMngHstEntity.dataState
)
)
.from(mapSheetMngHstEntity)
.innerJoin(mapInkx5kEntity)
.on(mapSheetMngHstEntity.mapSheetCode.eq(mapInkx5kEntity.fid))
.leftJoin(mapInkx50kEntity)
.on(mapInkx5kEntity.fidK50.eq(mapInkx50kEntity.fid.longValue()))
.where(
mapSheetMngHstEntity.mngYyyy.eq(searchReq.getMngYyyy()),
mapSheetMngHstEntity.dataState.eq(MapSheetMngDto.DataState.FAIL), //오류만 검색
mapSheetErrorSearchValue(searchReq)
)
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.orderBy(mapSheetMngHstEntity.createdDate.desc())
.fetch();
Long countQuery = queryFactory
.select(mapSheetMngHstEntity.hstUid.count())
.from(mapSheetMngHstEntity)
.innerJoin(mapInkx5kEntity)
.on(mapSheetMngHstEntity.mapSheetCode.eq(mapInkx5kEntity.fid))
.leftJoin(mapInkx50kEntity)
.on(mapInkx5kEntity.fidK50.eq(mapInkx50kEntity.fid.longValue()))
.where(
mapSheetMngHstEntity.mngYyyy.eq(searchReq.getMngYyyy()),
mapSheetMngHstEntity.dataState.eq(MapSheetMngDto.DataState.FAIL), //오류만 검색
mapSheetErrorSearchValue(searchReq)
)
.fetchOne();
return new PageImpl<>(foundContent, pageable, countQuery);
}
private NumberExpression<Integer> rowNum(){
return Expressions.numberTemplate(Integer.class, "row_number() over(order by {0} desc)", mapSheetMngHstEntity.createdDate);
}
private BooleanExpression mapSheetErrorSearchValue(MapSheetMngDto.searchReq searchReq) {
if (Objects.isNull(searchReq.getSearchValue())) {
return null;
}
// 검색어 1개 값이 도엽명 or 도엽번호 like 검색
return Expressions.booleanTemplate("{0} like '%" + searchReq.getSearchValue() + "%'", mapSheetMngHstEntity.mapSheetName)
.or(Expressions.booleanTemplate("{0} like '%" + searchReq.getSearchValue() + "%'", mapSheetMngHstEntity.mapSheetNum));
}
}