From b5b7fc79a872de3887964f4421a3d5ad5a66a5d3 Mon Sep 17 00:00:00 2001 From: DanielLee <198891672+sanghyeonhd@users.noreply.github.com> Date: Tue, 16 Dec 2025 15:36:16 +0900 Subject: [PATCH 1/3] error-list api upgarde and sync api change to stable --- .../mapsheet/MapSheetMngApiController.java | 35 +++++++++++++++- .../mapsheet/dto/MapSheetMngDto.java | 40 +++++++++++++++++++ .../mapsheet/MapSheetMngRepositoryImpl.java | 40 ++++++++++++++----- .../MapSheetMngFileJobRepositoryImpl.java | 18 ++++++--- src/main/resources/application-prod.yml | 2 +- src/main/resources/application.yml | 2 +- 6 files changed, 119 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java index 9869992f..9e49513a 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/MapSheetMngApiController.java @@ -71,9 +71,40 @@ public class MapSheetMngApiController { /** * 오류데이터 목록 조회 * - * @param searchReq - * @return + *

도엽파일 동기화 시 발생한 오류 데이터를 조회합니다. + * + *

오류 타입: + * + *

+ * + *

sync_check_strt_dttm과 sync_check_end_dttm은 동일한 값으로 설정됩니다. + * + * @param searchReq 검색 조건 (년도, 검색어, syncStateFilter 등) + * @return 오류 데이터 목록 */ + @Operation( + summary = "오류데이터 목록 조회", + description = + "도엽파일 동기화 시 발생한 오류 데이터를 조회합니다. " + + "오류 타입: NOFILE(파일없음), NOTPAIR(페어없음), DUPLICATE(중복), SIZEERROR(size 0), TYPEERROR(형식오류)") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "조회 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = MapSheetMngDto.ErrorDataDto.class))), + @ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) @PostMapping("/error-list") public ApiResponseDto> findMapSheetErrorList( @RequestBody @Valid MapSheetMngDto.ErrorSearchReq searchReq) { diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java index 95dba9e6..a6044414 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java @@ -128,6 +128,11 @@ public class MapSheetMngDto { @Schema(description = "년도", example = "2025") private Integer mngYyyy; + @Schema( + description = "동기화 상태 필터 (NOFILE, NOTPAIR, DUPLICATE, SIZEERROR, TYPEERROR)", + example = "NOFILE") + private String syncStateFilter; + public Pageable toPageable() { if (sort != null && !sort.isEmpty()) { String[] sortParams = sort.split(","); @@ -153,6 +158,18 @@ public class MapSheetMngDto { private Integer mapCodeSrc; private String createdDttm; private DataState dataState; + + @Schema(description = "동기화 상태 (NOFILE, NOTPAIR, DUPLICATE, SIZEERROR, TYPEERROR)") + private String syncState; + + @Schema(description = "동기화 체크 상태") + private String syncCheckState; + + @Schema(description = "동기화 체크 시작 시간") + private java.time.LocalDateTime syncCheckStrtDttm; + + @Schema(description = "동기화 체크 종료 시간") + private java.time.LocalDateTime syncCheckEndDttm; } @Schema(name = "DmlReturn", description = "영상관리 DML 수행 후 리턴") @@ -224,4 +241,27 @@ public class MapSheetMngDto { return desc; } } + + @Getter + @AllArgsConstructor + public enum SyncErrorState implements EnumType { + NOFILE("파일없음"), + NOTPAIR("페어없음"), + DUPLICATE("중복"), + SIZEERROR("size 0"), + TYPEERROR("형식오류"), + DONE("정상"); + + private final String desc; + + @Override + public String getId() { + return name(); + } + + @Override + public String getText() { + return desc; + } + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java index 16125bf5..7e026ed7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/mapsheet/MapSheetMngRepositoryImpl.java @@ -172,6 +172,30 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport MapSheetMngDto.@Valid ErrorSearchReq searchReq) { Pageable pageable = PageRequest.of(searchReq.getPage(), searchReq.getSize()); + + BooleanBuilder whereBuilder = new BooleanBuilder(); + whereBuilder.and(mapSheetMngHstEntity.mngYyyy.eq(searchReq.getMngYyyy())); + + // syncStateFilter 조건 추가 + if (searchReq.getSyncStateFilter() != null && !searchReq.getSyncStateFilter().isEmpty()) { + whereBuilder.and(mapSheetMngHstEntity.syncState.eq(searchReq.getSyncStateFilter())); + } else { + // 기본: 오류 상태만 조회 (NOFILE, NOTPAIR, DUPLICATE, SIZEERROR, TYPEERROR) + whereBuilder.and( + mapSheetMngHstEntity + .syncState + .eq("NOFILE") + .or(mapSheetMngHstEntity.syncState.eq("NOTPAIR")) + .or(mapSheetMngHstEntity.syncState.eq("DUPLICATE")) + .or(mapSheetMngHstEntity.syncState.eq("SIZEERROR")) + .or(mapSheetMngHstEntity.syncState.eq("TYPEERROR"))); + } + + // 검색어 조건 추가 + if (searchReq.getSearchValue() != null && !searchReq.getSearchValue().isEmpty()) { + whereBuilder.and(mapSheetErrorSearchValue(searchReq)); + } + List foundContent = queryFactory .select( @@ -188,16 +212,17 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport mapSheetMngHstEntity.mapSheetCodeSrc, Expressions.stringTemplate( "to_char({0}, 'YYYY-MM-DD')", mapSheetMngHstEntity.createdDate), - mapSheetMngHstEntity.dataState)) + mapSheetMngHstEntity.dataState, + mapSheetMngHstEntity.syncState, + mapSheetMngHstEntity.syncCheckState, + mapSheetMngHstEntity.syncCheckStrtDttm, + mapSheetMngHstEntity.syncCheckEndDttm)) .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)) + .where(whereBuilder) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .orderBy(mapSheetMngHstEntity.createdDate.desc()) @@ -211,10 +236,7 @@ public class MapSheetMngRepositoryImpl extends QuerydslRepositorySupport .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)) + .where(whereBuilder) .fetchOne(); return new PageImpl<>(foundContent, pageable, countQuery); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java index 3029a053..116696e9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/scheduler/MapSheetMngFileJobRepositoryImpl.java @@ -108,14 +108,19 @@ public class MapSheetMngFileJobRepositoryImpl extends QuerydslRepositorySupport public void mngHstDataSyncStateUpdate(MapSheetMngDto.MngHstDto updateReq) { + ZonedDateTime now = ZonedDateTime.now(); + if (updateReq.getDataState().equals("DONE")) { long updateCount = queryFactory .update(mapSheetMngHstEntity) .set(mapSheetMngHstEntity.dataState, updateReq.getDataState()) - .set(mapSheetMngHstEntity.dataStateDttm, ZonedDateTime.now()) + .set(mapSheetMngHstEntity.dataStateDttm, now) .set(mapSheetMngHstEntity.syncState, updateReq.getSyncState()) - .set(mapSheetMngHstEntity.syncEndDttm, ZonedDateTime.now()) + .set(mapSheetMngHstEntity.syncEndDttm, now) + .set(mapSheetMngHstEntity.syncCheckState, "DONE") + .set(mapSheetMngHstEntity.syncCheckStrtDttm, now) + .set(mapSheetMngHstEntity.syncCheckEndDttm, now) .where(mapSheetMngHstEntity.hstUid.eq(updateReq.getHstUid())) .execute(); } else { @@ -123,10 +128,13 @@ public class MapSheetMngFileJobRepositoryImpl extends QuerydslRepositorySupport queryFactory .update(mapSheetMngHstEntity) .set(mapSheetMngHstEntity.dataState, updateReq.getDataState()) - .set(mapSheetMngHstEntity.dataStateDttm, ZonedDateTime.now()) + .set(mapSheetMngHstEntity.dataStateDttm, now) .set(mapSheetMngHstEntity.syncState, updateReq.getSyncState()) - .set(mapSheetMngHstEntity.syncStrtDttm, ZonedDateTime.now()) - .set(mapSheetMngHstEntity.syncEndDttm, ZonedDateTime.now()) + .set(mapSheetMngHstEntity.syncStrtDttm, now) + .set(mapSheetMngHstEntity.syncEndDttm, now) + .set(mapSheetMngHstEntity.syncCheckState, "PROCESSING") + .set(mapSheetMngHstEntity.syncCheckStrtDttm, now) + .set(mapSheetMngHstEntity.syncCheckEndDttm, now) .where(mapSheetMngHstEntity.hstUid.eq(updateReq.getHstUid())) .execute(); } diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index b330d1d8..e989c2b4 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -1,7 +1,7 @@ spring: config: activate: - on-profile: dev + on-profile: prod jpa: show-sql: false diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 289b414c..6b592c27 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: application: name: kamco-change-detection-api profiles: - active: dev # 사용할 프로파일 지정 (ex. dev, prod, test) + active: local # 사용할 프로파일 지정 (ex. dev, prod, test) datasource: driver-class-name: org.postgresql.Driver From 5a40c29eecffc68b1f0c750985f9f5aa834e5404 Mon Sep 17 00:00:00 2001 From: DanielLee Date: Tue, 16 Dec 2025 15:37:05 +0900 Subject: [PATCH 2/3] change to dev setting --- src/main/resources/application.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 6b592c27..289b414c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -5,7 +5,7 @@ spring: application: name: kamco-change-detection-api profiles: - active: local # 사용할 프로파일 지정 (ex. dev, prod, test) + active: dev # 사용할 프로파일 지정 (ex. dev, prod, test) datasource: driver-class-name: org.postgresql.Driver From 9f1e4de18c296dee8c0f7d740e5956e07887ddef Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 16 Dec 2025 16:19:48 +0900 Subject: [PATCH 3/3] =?UTF-8?q?userId=20->=20=EC=82=AC=EB=B2=88=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/CustomAuthenticationProvider.java | 6 +++--- .../cd/kamcoback/members/dto/SignInRequest.java | 2 +- .../postgres/core/MembersCoreService.java | 16 ++++++++-------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java b/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java index 333b673a..9698b1e1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java +++ b/src/main/java/com/kamco/cd/kamcoback/auth/CustomAuthenticationProvider.java @@ -26,9 +26,9 @@ public class CustomAuthenticationProvider implements AuthenticationProvider { // 유저 조회 MemberEntity member = - membersRepository - .findByUserId(username) - .orElseThrow(() -> new CustomApiException(AuthErrorCode.LOGIN_ID_NOT_FOUND)); + membersRepository + .findByEmployeeNo(username) + .orElseThrow(() -> new CustomApiException(AuthErrorCode.LOGIN_ID_NOT_FOUND)); // 미사용 상태 if (member.getStatus().equals(StatusType.INACTIVE.getId())) { diff --git a/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java b/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java index 1ad47961..25f59beb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/dto/SignInRequest.java @@ -11,7 +11,7 @@ import lombok.ToString; @ToString(exclude = "password") public class SignInRequest { - @Schema(description = "사용자 ID", example = "admin2") + @Schema(description = "사용자 ID", example = "1234567") private String username; @Schema(description = "비밀번호", example = "Admin2!@#") diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java index b59f71fc..df0bcdc9 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MembersCoreService.java @@ -67,7 +67,7 @@ public class MembersCoreService { */ public void updateMembers(UUID uuid, MembersDto.UpdateReq updateReq) { MemberEntity memberEntity = - membersRepository.findByUUID(uuid).orElseThrow(MemberNotFoundException::new); + membersRepository.findByUUID(uuid).orElseThrow(MemberNotFoundException::new); if (StringUtils.isNotBlank(updateReq.getName())) { memberEntity.setName(updateReq.getName()); @@ -85,7 +85,7 @@ public class MembersCoreService { } String password = - CommonStringUtils.hashPassword(updateReq.getPassword(), memberEntity.getEmployeeNo()); + CommonStringUtils.hashPassword(updateReq.getPassword(), memberEntity.getEmployeeNo()); memberEntity.setStatus(StatusType.PENDING.getId()); memberEntity.setLoginFailCount(0); @@ -103,7 +103,7 @@ public class MembersCoreService { */ public void resetPassword(String id, MembersDto.InitReq initReq) { MemberEntity memberEntity = - membersRepository.findByEmployeeNo(id).orElseThrow(() -> new MemberNotFoundException()); + membersRepository.findByEmployeeNo(id).orElseThrow(() -> new MemberNotFoundException()); // 기존 패스워드 확인 if (!BCrypt.checkpw(initReq.getOldPassword(), memberEntity.getPassword())) { @@ -111,7 +111,7 @@ public class MembersCoreService { } String password = - CommonStringUtils.hashPassword(initReq.getNewPassword(), memberEntity.getEmployeeNo()); + CommonStringUtils.hashPassword(initReq.getNewPassword(), memberEntity.getEmployeeNo()); memberEntity.setPassword(password); memberEntity.setStatus(StatusType.ACTIVE.getId()); @@ -141,9 +141,9 @@ public class MembersCoreService { */ public String getUserStatus(SignInRequest request) { MemberEntity memberEntity = - membersRepository - .findByUserId(request.getUsername()) - .orElseThrow(MemberNotFoundException::new); + membersRepository + .findByEmployeeNo(request.getUsername()) + .orElseThrow(MemberNotFoundException::new); return memberEntity.getStatus(); } @@ -154,7 +154,7 @@ public class MembersCoreService { */ public void saveLogin(UUID uuid) { MemberEntity memberEntity = - membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); + membersRepository.findByUUID(uuid).orElseThrow(() -> new MemberNotFoundException()); if (memberEntity.getFirstLoginDttm() == null) { memberEntity.setFirstLoginDttm(ZonedDateTime.now());