From 65200c68c4286c2e4211aad5d1174897246d62ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Wed, 3 Dec 2025 12:20:43 +0900 Subject: [PATCH] =?UTF-8?q?3.=20=EB=82=A0=EC=A7=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=ED=9B=84=20=EB=B6=80=EA=B3=BC=20=EC=B2=B4=ED=81=AC=20-=20?= =?UTF-8?q?=EB=AA=85=EC=9D=98=EC=9D=B4=EC=A0=84=20=ED=9B=84=20=EC=83=81?= =?UTF-8?q?=ED=92=88=EC=9A=A9=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20(31=EC=9D=BC?= =?UTF-8?q?=20=EC=B4=88=EA=B3=BC)=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ComparisonRemarkBuilder.java | 32 ++------ .../service/impl/ComparisonServiceImpl.java | 73 +++++++++++-------- 2 files changed, 46 insertions(+), 59 deletions(-) diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonRemarkBuilder.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonRemarkBuilder.java index 1156123..953063c 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonRemarkBuilder.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonRemarkBuilder.java @@ -79,6 +79,7 @@ public class ComparisonRemarkBuilder { * @param inspYmd 검사일자 * @param vldPrdExpryYmd 유효기간만료일 * @param inspEndYmd 검사종료일자 + * @param daysBetween 일수차이 * @return 비고 문자열 */ public static String buildCloseProductUseRemark( @@ -88,7 +89,8 @@ public class ComparisonRemarkBuilder { String vhclno, String inspYmd, String vldPrdExpryYmd, - String inspEndYmd) { + String inspEndYmd, + long daysBetween) { // 날짜 포맷 변환 (YYYYMMDD -> YY.M.D) String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); @@ -115,37 +117,13 @@ public class ComparisonRemarkBuilder { // 여섯째 줄: 상품용 일자 (명의이전 일자와 동일) sb.append(" - 상품용: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())); - return sb.toString(); - } - - /** - * 날짜 수정 후 부과 비고 생성 - * - * 비고 형식: - * 명의이전일자: YYYY-MM-DD - * 검사일: YYYY-MM-DD - * 일수차이: N일 - * - * @param targetChgYmd 명의이전일자 - * @param inspYmd 검사일 - * @param daysBetween 일수차이 - * @return 비고 문자열 - */ - public static String buildDateModifiedLevyRemark(String targetChgYmd, String inspYmd, long daysBetween) { - StringBuilder sb = new StringBuilder(); - - // 첫 줄: 명의이전일자 - sb.append("명의이전일자: ").append(DateUtil.formatDateString(targetChgYmd)).append("\n"); - - // 둘째 줄: 검사일 - sb.append("검사일: ").append(DateUtil.formatDateString(inspYmd)).append("\n"); - - // 셋째 줄: 일수차이 + // 일곱째 줄: 일수차이 sb.append("일수차이: ").append(daysBetween).append("일"); return sb.toString(); } + /** * 등록원부 갑부 레코드 상세 정보 생성 * diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonServiceImpl.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonServiceImpl.java index 31f14db..80222f9 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonServiceImpl.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonServiceImpl.java @@ -53,40 +53,48 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co String vhclno = existingData.getVhclno(); log.info("========== 비교 로직 시작: {} ==========", vhclno); - // ========== 1. 상품용 체크 Case1 - api-1번호출.소유자명.contains("상품용") ========== - String productUseResult1 = checkProductUseCase1(existingData); - if (productUseResult1 != null) { - log.info("========== 비교 로직 종료 (상품용-Case1): {} ==========", vhclno); - return productUseResult1; + // ========== 1. 상품용 체크 - api-1번호출.소유자명.contains("상품용") ========== + String productUseResult = checkProductUse(existingData); + if (productUseResult != null) { + log.info("========== 비교 로직 종료 (상품용): {} ==========", vhclno); + return productUseResult; } - // ========== 2. 내사종결 상품용 체크명의이전 후 상품용인 경우, 31일 이내 ========== - String closeUseResult = checkCloseProductUse(existingData); - if (closeUseResult != null) { - log.info("========== 비교 로직 종료 (내사종결 : 상품용인데 기간 지나서 검사 받았을 경우): {} ==========", vhclno); - return closeUseResult; + // ========== 2. 내사종결 체크 - 명의이전 이전소유자 상품용, 31일 이내 ========== + String investigationClosedByProductResult = checkInvestigationClosedByProductUseWithin31Days(existingData); + if (investigationClosedByProductResult != null) { + log.info("========== 비교 로직 종료 (내사종결 - 명의이전 이전소유자 상품용, 31일 이내): {} ==========", vhclno); + return investigationClosedByProductResult; } - // ========== 3. 날짜 수정 후 부과 체크 - 명의이전 후 상품용인 경우 (31일 초과) ========== - String dateModifiedLevyResult = checkDateModifiedLevy(existingData); - if (dateModifiedLevyResult != null) { - log.info("========== 비교 로직 종료 (날짜 수정 후 부과 : 상품용인데 기간 많이 지나서 검사 받았을 경우): {} ==========", vhclno); - return dateModifiedLevyResult; + // ========== 3. 내사종결 체크 - 명의이전, 31일 이내 ========== + String investigationClosedByOwnerChangeResult = checkInvestigationClosedByOwnerChangeWithin31Days(existingData); + if (investigationClosedByOwnerChangeResult != null) { + log.info("========== 비교 로직 종료 (내사종결 - 명의이전, 31일 이내): {} ==========", vhclno); + return investigationClosedByOwnerChangeResult; } - // ========== 4. 이첩 체크 ========== + // ========== 4. 날짜 수정 후 부과 체크 - 명의이전 이전소유자 상품용, 31일 초과 ========== + String dateModifiedLevyByProductResult = checkDateModifiedLevyByProductUseOver31Days(existingData); + if (dateModifiedLevyByProductResult != null) { + log.info("========== 비교 로직 종료 (날짜 수정 후 부과 - 명의이전 이전소유자, 31일 초과): {} ==========", vhclno); + return dateModifiedLevyByProductResult; + } + + // ========== 5. 날짜 수정 후 부과 체크 - 명의이전, 31일 초과 ========== + String dateModifiedLevyByOwnerChangeOverResult = checkDateModifiedLevyByOwnerChangeOver31Days(existingData); + if (dateModifiedLevyByOwnerChangeOverResult != null) { + log.info("========== 비교 로직 종료 (날짜 수정 후 부과 - 명의이전, 31일 초과): {} ==========", vhclno); + return dateModifiedLevyByOwnerChangeOverResult; + } + + // ========== 6. 이첩 체크 ========== String transferResult = checkTransferCase115Day(existingData); if (transferResult != null) { log.info("========== 비교 로직 종료 (이첩): {} ==========", vhclno); return transferResult; } - // ========== 5. 향후 추가될 비교 로직들 ========== - // String investigationClosedResult = checkInvestigationClosed(existingData); - // if (investigationClosedResult != null) { - // return investigationClosedResult; - // } - // 모든 비교 로직에 해당하지 않음 log.info("========== 비교 로직 종료 (정상): {} ==========", vhclno); return null; @@ -96,7 +104,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co // 비교 로직 메서드들 // ======================================== - /** 4번 + /** * 1. 상품용 검증 api-1번호출.소유자명.contains("상품용") * * API 호출 4단계: @@ -118,7 +126,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co * @param existingData 과태료 대상 데이터 * @return 02 (상품용) 또는 null (미적용) */ - private String checkProductUseCase1(CarFfnlgTrgtVO existingData) { + private String checkProductUse(CarFfnlgTrgtVO existingData) { String vhclno = existingData.getVhclno(); String inspYmd = existingData.getInspYmd(); String vldPrdExpryYmd = existingData.getVldPrdExpryYmd(); @@ -315,7 +323,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co } /** - * 2. 내사종결 검증 not( api-1번호출.소유자명.contains("상품용") ) + * 2. 내사종결 검증 - 명의이전 이전소유자 상품용, 31일 이내 * * API 호출 4단계: * 1) 자동차기본정보(차량번호, 부과일자=검사일) → 차대번호, 소유자명 @@ -335,7 +343,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co * @param existingData 과태료 대상 데이터 * @return 04 (내사종결) 또는 null (미적용) */ - private String checkCloseProductUse(CarFfnlgTrgtVO existingData) { + private String checkInvestigationClosedByProductUseWithin31Days(CarFfnlgTrgtVO existingData) { String vhclno = existingData.getVhclno(); String inspYmd = existingData.getInspYmd(); String vldPrdExpryYmd = existingData.getVldPrdExpryYmd(); @@ -495,7 +503,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co // ========== 비고 생성 ========== String rmrk = ComparisonRemarkBuilder.buildCloseProductUseRemark( step1Record, step4Record, targetRecord, - vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd + vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween ); // ========== DB 업데이트 ========== @@ -525,7 +533,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co } /** - * 3. 날짜 수정 후 부과 검증 not( api-1번호출.소유자명.contains("상품용") ) + * 3. 날짜 수정 후 부과 검증 - 명의이전 이전소유자 상품용, 31일 초과 * * API 호출 4단계: * 1) 자동차기본정보(차량번호, 부과일자=검사일) → 차대번호, 소유자명 @@ -545,7 +553,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co * @param existingData 과태료 대상 데이터 * @return 05 (날짜 수정 후 부과) 또는 null (미적용) */ - private String checkDateModifiedLevy(CarFfnlgTrgtVO existingData) { + private String checkDateModifiedLevyByProductUseOver31Days(CarFfnlgTrgtVO existingData) { String vhclno = existingData.getVhclno(); String inspYmd = existingData.getInspYmd(); String vldPrdExpryYmd = existingData.getVldPrdExpryYmd(); @@ -703,8 +711,9 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co log.info("[날짜수정후부과] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildDateModifiedLevyRemark( - targetChgYmd, inspYmd, daysBetween + String rmrk = ComparisonRemarkBuilder.buildCloseProductUseRemark( + step1Record, step4Record, targetRecord, + vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween ); // ========== DB 업데이트 ========== @@ -735,7 +744,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co /** - * 2. 이첩 검증 + * 4. 이첩 검증 * * DAYCNT 기반 부과기준일 계산: * - DAYCNT > 115: 이첩-2 (부과기준일 = 검사종료일자 + 115일)