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 e5fe1d2..3541d5b 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 @@ -2,248 +2,87 @@ package go.kr.project.carInspectionPenalty.registration.service.impl; import egovframework.util.DateUtil; import egovframework.util.StringUtil; -import go.kr.project.api.model.response.NewBasicResponse; import go.kr.project.api.model.response.NewLedgerResponse; /** * 과태료 대상 비교 비고(Remark) 생성 유틸리티 클래스 * *

각 비교 로직별 비고 문자열을 생성하는 메서드를 제공합니다.

+ * + *

비고 패턴:

+ * */ public class ComparisonRemarkBuilder { /** - * 상품용 비고 생성 - Case 1 + * 상품용 비고 생성 + * 비고 형식: 상품용 * - * @param step1Record Step 1 API 응답 (검사일 기준 소유자명) - * @param step4Record Step 4 API 응답 (명의이전 시점 소유자명) - * @param ledgerRecord 조건에 맞는 갑부 레코드 - * @param vldPrdExpryYmd 유효기간만료일 - * @param inspEndYmd 검사종료일자 * @return 비고 문자열 */ - public static String buildProductUseRemark( - NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String vldPrdExpryYmd, - String inspEndYmd) { - - StringBuilder sb = new StringBuilder(); - sb.append("상품용 - 상품용검사\n"); - - // 1. 검사일 기준 소유자 정보 - sb.append("\n■ 검사일 기준 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step1Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 차대번호: ").append(StringUtil.nvl(step1Record.getVin())).append("\n"); - - // 2. 명의이전 시점 소유자 정보 - sb.append("\n■ 명의이전 시점 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step4Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 조회일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 3. 갑부 상세 정보 (명의이전 이력) - sb.append("\n■ 갑부 상세 (명의이전 이력)\n"); - sb.append(" - 변경일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - sb.append(" - 변경업무코드: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeCd())).append("\n"); - //sb.append(" - 변경업무명: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeNm())).append("\n"); - //sb.append(" - 접수번호: ").append(StringUtil.nvl(ledgerRecord.getAplyRcptNo())).append("\n"); - - // 4. 비교 기간 - //sb.append("\n■ 비교 기간\n"); - //sb.append(" - 유효기간만료일: ").append(DateUtil.formatDateString(vldPrdExpryYmd)).append("\n"); - //sb.append(" - 검사종료일자: ").append(DateUtil.formatDateString(inspEndYmd)).append("\n"); - - return sb.toString(); + public static String buildProductUseRemark() { + return "상품용"; } /** - * 상품용-변경등록 비고 생성 + * 명의이전 이전소유자 상품용 비고 생성 + * 비고 형식: 명의이전(25.9.5.) 이전소유자 상품용, 시군구명/ 소유자명 * - * @param step1Record Step 1 API 응답 (검사일 기준 소유자명) - * @param step4Record Step 4 API 응답 (변경등록 시점 소유자명) - * @param ledgerRecord 조건에 맞는 갑부 레코드 (변경등록 레코드) - * @param vldPrdExpryYmd 유효기간만료일 - * @param inspEndYmd 검사종료일자 - * @return 비고 문자열 - */ - public static String buildProductUseChangeRemark( - NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String vldPrdExpryYmd, - String inspEndYmd) { - - StringBuilder sb = new StringBuilder(); - sb.append("상품용 - 변경등록\n"); - - // 1. 검사일 기준 소유자 정보 - sb.append("\n■ 검사일 기준 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step1Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 차대번호: ").append(StringUtil.nvl(step1Record.getVin())).append("\n"); - - // 2. 변경등록 시점 소유자 정보 - sb.append("\n■ 변경등록 시점 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step4Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 조회일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 3. 갑부 상세 정보 (변경등록 이력) - sb.append("\n■ 갑부 상세 (변경등록 이력)\n"); - sb.append(" - 변경일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - sb.append(" - 변경업무코드: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeCd())).append("\n"); - sb.append(" - 변경업무명: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeNm())).append("\n"); - sb.append(" - 특별사항: ").append(StringUtil.nvl(ledgerRecord.getSpcablMttr())).append("\n"); - - // 4. 비교 기간 - //sb.append("\n■ 비교 기간\n"); - //sb.append(" - 검사종료일자: ").append(DateUtil.formatDateString(inspEndYmd)).append("\n"); - - return sb.toString(); - } - - /** - * 상품용 비고 생성 - Case 2 (검사일 소유자가 상품용이 아니지만, 명의이전 후 상품용인 경우) - * - * 비고 형식: - * 명의이전(25.9.3.) 이전소유자 상품용 - * 22루2283 - * 검사기간 시작일자 - 종료일자 - * 검사일 일자 - * 명의이전 일자 - * 상품용 일자 - * - * @param step1Record Step 1 API 응답 (검사일 기준 소유자명) - * @param step4Record Step 4 API 응답 (명의이전 시점 소유자명 = 상품용) * @param ledgerRecord 조건에 맞는 갑부 레코드 (명의이전 레코드) - * @param vhclno 차량번호 - * @param inspYmd 검사일자 - * @param vldPrdExpryYmd 유효기간만료일 - * @param inspEndYmd 검사종료일자 - * @param daysBetween 일수차이 + * @param sggNm 시군구명 + * @param ownerNm 소유자명 * @return 비고 문자열 */ - public static String buildProductCloseLevyRemark( - NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String vhclno, - String inspYmd, - String vldPrdExpryYmd, - String inspEndYmd, - long daysBetween) { - - // 날짜 포맷 변환 (YYYYMMDD -> YY.M.D) + public static String buildProductCloseLevyRemark(NewLedgerResponse.Record ledgerRecord, + String sggNm, String ownerNm) { String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); - String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); - - StringBuilder sb = new StringBuilder(); - - // 첫 줄: 명의이전(25.9.3.) 이전소유자 상품용 - sb.append("명의이전(").append(chgYmdFormatted).append(") 이전소유자 상품용").append("\n"); - - // 둘째 줄: 차량번호 - sb.append(StringUtil.nvl(vhclno)).append("\n"); - - // 셋째 줄: 검사기간 시작일자 - 종료일자 - sb.append(" - 검사기간: ").append(DateUtil.formatDateString(vldPrdExpryYmd)) - .append(" - ").append(DateUtil.formatDateString(inspEndYmd)).append("\n"); - - // 넷째 줄: 검사일 일자 - sb.append(" - 검사일: ").append(DateUtil.formatDateString(inspYmd)).append("\n"); - - // 다섯째 줄: 명의이전 일자 - sb.append(" - 명의이전: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 여섯째 줄: 상품용 일자 (명의이전 일자와 동일) - sb.append(" - 상품용: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 일곱째 줄: 일수차이 - sb.append("일수차이: ").append(daysBetween).append("일"); - - return sb.toString(); + return String.format("명의이전(%s) 이전소유자 상품용, %s/ %s", + chgYmdFormatted, StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm)); } - /** - * 명의이전 비고 생성 (내사종결 또는 날짜 수정 후 부과) + * 명의이전 비고 생성 + * 비고 형식: 명의이전(25.9.5.), 시군구명/ 소유자명 * - * 비고 형식: - * 명의이전(25.9.3.) 이전소유자 상품용 - * 22루2283 - * 검사기간 시작일자 - 종료일자 - * 검사일 일자 - * 명의이전 일자 - * 상품용 일자 - * - * @param step1Record Step 1 API 응답 (검사일 기준 소유자명) - * @param step4Record Step 4 API 응답 (명의이전 시점 소유자명 = 상품용) * @param ledgerRecord 조건에 맞는 갑부 레코드 (명의이전 레코드) - * @param vhclno 차량번호 - * @param inspYmd 검사일자 - * @param vldPrdExpryYmd 유효기간만료일 - * @param inspEndYmd 검사종료일자 - * @param daysBetween 일수차이 + * @param sggNm 시군구명 + * @param ownerNm 소유자명 * @return 비고 문자열 */ - public static String buildOwnerChangeRemark(NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String vhclno, - String inspYmd, - String vldPrdExpryYmd, - String inspEndYmd, - long daysBetween) { - - // 날짜 포맷 변환 (YYYYMMDD -> YY.M.D) + public static String buildOwnerChangeRemark(NewLedgerResponse.Record ledgerRecord, + String sggNm, String ownerNm) { String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); - String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); - - StringBuilder sb = new StringBuilder(); - - // 첫 줄: 명의이전(25.9.3.) 이전소유자 상품용 - sb.append("명의이전(").append(chgYmdFormatted).append(")").append("\n"); - - // 둘째 줄: 차량번호 - sb.append(StringUtil.nvl(vhclno)).append("\n"); - - // 셋째 줄: 검사기간 시작일자 - 종료일자 - sb.append(" - 검사기간: ").append(DateUtil.formatDateString(vldPrdExpryYmd)) - .append(" - ").append(DateUtil.formatDateString(inspEndYmd)).append("\n"); - - // 넷째 줄: 검사일 일자 - sb.append(" - 검사일: ").append(DateUtil.formatDateString(inspYmd)).append("\n"); - - // 다섯째 줄: 명의이전 일자 - sb.append(" - 명의이전: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 일곱째 줄: 일수차이 - sb.append("일수차이: ").append(daysBetween).append("일"); - - return sb.toString(); + return String.format("명의이전(%s), %s/ %s", + chgYmdFormatted, StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm)); } /** * 이첩 비고 생성 - Case 이첩-1 (검사일 사용본거지) + * 비고 형식: 시군구명/ 소유자명, 검사일사용본거지 * * @param sggNm 시군구명 - * @param userOrg4 사용자 조직코드 앞 4자리 + * @param ownerNm 소유자명 * @return 비고 문자열 */ - public static String buildTransferCase1Remark(String sggNm, String userOrg4) { - return String.format("%s, 검사일사용본거지, [사용자 조직코드 앞 4자리: %s, 법정동명: %s]", - sggNm, userOrg4, sggNm); + public static String buildTransferCase1Remark(String sggNm, String ownerNm) { + return String.format("%s/ %s, 검사일사용본거지", StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm)); } /** * 이첩 비고 생성 - Case 이첩-2 (115일 도래지) + * 비고 형식: 시군구명/ 소유자명, 115일 도래지 * * @param sggNm 시군구명 - * @param legalDong4 법정동코드 앞 4자리 + * @param ownerNm 소유자명 * @return 비고 문자열 */ - public static String buildTransferCase2Remark(String sggNm, String legalDong4) { - return String.format("%s, 115일 도래지, [법정동코드: %s, 법정동명: %s]", - sggNm, legalDong4, sggNm); + public static String buildTransferCase2Remark(String sggNm, String ownerNm) { + return String.format("%s/ %s, 115일 도래지", StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm)); } /** @@ -259,21 +98,14 @@ public class ComparisonRemarkBuilder { StringBuilder detail = new StringBuilder(); - // 변경 정보 StringUtil.appendIfNotEmpty(detail, "변경업무구분코드", record.getChgTaskSeCd()); StringUtil.appendIfNotEmpty(detail, "변경업무구분명", record.getChgTaskSeNm()); StringUtil.appendIfNotEmpty(detail, "변경일자", DateUtil.formatDateString(record.getChgYmd())); - - // 주요 정보 StringUtil.appendIfNotEmpty(detail, "주요번호", record.getMainNo()); StringUtil.appendIfNotEmpty(detail, "일련번호", record.getSno()); StringUtil.appendIfNotEmpty(detail, "특별사항", record.getSpcablMttr()); - - // 명의자 정보 StringUtil.appendIfNotEmpty(detail, "명의자명", record.getHshldrNm()); StringUtil.appendIfNotEmpty(detail, "명의자식별번호", StringUtil.maskIdecno(record.getHshldrIdecno())); - - // 기타 StringUtil.appendIfNotEmpty(detail, "신청접수번호", record.getAplyRcptNo()); StringUtil.appendIfNotEmpty(detail, "차량관리번호", record.getVhmno()); StringUtil.appendIfNotEmpty(detail, "원부그룹번호", record.getLedgerGroupNo()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerCloseWithin31Checker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerCloseWithin31Checker.java index dc87a23..4c12a38 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerCloseWithin31Checker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerCloseWithin31Checker.java @@ -194,11 +194,14 @@ public class OwnerCloseWithin31Checker extends AbstractComparisonChecker { log.info("[내사종결-명의이전] 명의이전 전 소유자가 상품용 아님 - 소유자명: {}", step4OwnerName); + // ========== 시군구명 조회 ========== + String usgsrhldStdgCd = step1Record.getUsgsrhldStdgCd(); + String sggCd = (usgsrhldStdgCd != null && usgsrhldStdgCd.length() >= 5) ? usgsrhldStdgCd.substring(0, 5) : usgsrhldStdgCd; + String sggNm = carFfnlgTrgtMapper.selectSggNmBySggCd(sggCd); + String ownerNm = step1Record.getRprsOwnrNm(); + // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildOwnerChangeRemark( - step1Record, step4Record, targetRecord, - vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween - ); + String rmrk = ComparisonRemarkBuilder.buildOwnerChangeRemark(targetRecord, sggNm, ownerNm); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerLevyOver31Checker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerLevyOver31Checker.java index cacc0e7..d1ae379 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerLevyOver31Checker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/OwnerLevyOver31Checker.java @@ -194,11 +194,14 @@ public class OwnerLevyOver31Checker extends AbstractComparisonChecker { log.info("[날짜수정후부과-명의이전] 명의이전 전 소유자가 상품용 아님 - 소유자명: {}", step4OwnerName); + // ========== 시군구명 조회 ========== + String usgsrhldStdgCd = step1Record.getUsgsrhldStdgCd(); + String sggCd = (usgsrhldStdgCd != null && usgsrhldStdgCd.length() >= 5) ? usgsrhldStdgCd.substring(0, 5) : usgsrhldStdgCd; + String sggNm = carFfnlgTrgtMapper.selectSggNmBySggCd(sggCd); + String ownerNm = step1Record.getRprsOwnrNm(); + // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildOwnerChangeRemark( - step1Record, step4Record, targetRecord, - vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween - ); + String rmrk = ComparisonRemarkBuilder.buildOwnerChangeRemark(targetRecord, sggNm, ownerNm); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductCloseWithin31Checker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductCloseWithin31Checker.java index fee0cbd..a42b154 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductCloseWithin31Checker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductCloseWithin31Checker.java @@ -191,11 +191,14 @@ public class ProductCloseWithin31Checker extends AbstractComparisonChecker { log.info("[내사종결-명의이전 상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); + // ========== 시군구명 조회 ========== + String usgsrhldStdgCd = step1Record.getUsgsrhldStdgCd(); + String sggCd = (usgsrhldStdgCd != null && usgsrhldStdgCd.length() >= 5) ? usgsrhldStdgCd.substring(0, 5) : usgsrhldStdgCd; + String sggNm = carFfnlgTrgtMapper.selectSggNmBySggCd(sggCd); + String ownerNm = step1Record.getRprsOwnrNm(); + // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildProductCloseLevyRemark( - step1Record, step4Record, targetRecord, - vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween - ); + String rmrk = ComparisonRemarkBuilder.buildProductCloseLevyRemark(targetRecord, sggNm, ownerNm); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductLevyOver31Checker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductLevyOver31Checker.java index 3b956c9..73f91de 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductLevyOver31Checker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductLevyOver31Checker.java @@ -193,11 +193,14 @@ public class ProductLevyOver31Checker extends AbstractComparisonChecker { log.info("[날짜수정후부과-명의이전 상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); + // ========== 시군구명 조회 ========== + String usgsrhldStdgCd = step1Record.getUsgsrhldStdgCd(); + String sggCd = (usgsrhldStdgCd != null && usgsrhldStdgCd.length() >= 5) ? usgsrhldStdgCd.substring(0, 5) : usgsrhldStdgCd; + String sggNm = carFfnlgTrgtMapper.selectSggNmBySggCd(sggCd); + String ownerNm = step1Record.getRprsOwnrNm(); + // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildProductCloseLevyRemark( - step1Record, step4Record, targetRecord, - vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween - ); + String rmrk = ComparisonRemarkBuilder.buildProductCloseLevyRemark(targetRecord, sggNm, ownerNm); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChecker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChecker.java index 60284d5..938a614 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChecker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChecker.java @@ -205,10 +205,7 @@ public class ProductUseChecker extends AbstractComparisonChecker { log.info("[상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildProductUseRemark( - step1Record, step4Record, targetRecord, - vldPrdExpryYmd, inspEndYmd - ); + String rmrk = ComparisonRemarkBuilder.buildProductUseRemark(); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChnageChecker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChnageChecker.java index df73c83..07d39ba 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChnageChecker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/ProductUseChnageChecker.java @@ -210,10 +210,7 @@ public class ProductUseChnageChecker extends AbstractComparisonChecker { log.info("[상품용-변경등록] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); // ========== 비고 생성 ========== - String rmrk = ComparisonRemarkBuilder.buildProductUseChangeRemark( - step1Record, step4Record, targetRecord, - vldPrdExpryYmd, inspEndYmd - ); + String rmrk = ComparisonRemarkBuilder.buildProductUseRemark(); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/TransferCase115DayChecker.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/TransferCase115DayChecker.java index 97dc9fc..6e4831d 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/TransferCase115DayChecker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/delay_checker/TransferCase115DayChecker.java @@ -122,12 +122,15 @@ public class TransferCase115DayChecker extends AbstractComparisonChecker { sggNm = ""; } + // 소유자명 + String ownerNm = record.getRprsOwnrNm(); + // 비고 생성 String rmrk; if ("이첩-1".equals(transferType)) { // 5번 - rmrk = ComparisonRemarkBuilder.buildTransferCase1Remark(sggNm, userOrg4); + rmrk = ComparisonRemarkBuilder.buildTransferCase1Remark(sggNm, ownerNm); } else { // 7번 - rmrk = ComparisonRemarkBuilder.buildTransferCase2Remark(sggNm, legalDong4); + rmrk = ComparisonRemarkBuilder.buildTransferCase2Remark(sggNm, ownerNm); } // DB 업데이트 diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/ComparisonOmRemarkBuilder.java b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/ComparisonOmRemarkBuilder.java index 32f6a7f..52bb8a7 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/ComparisonOmRemarkBuilder.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/ComparisonOmRemarkBuilder.java @@ -2,7 +2,6 @@ package go.kr.project.carInspectionPenalty.registrationOm.service.impl; import egovframework.util.DateUtil; import egovframework.util.StringUtil; -import go.kr.project.api.model.response.NewBasicResponse; import go.kr.project.api.model.response.NewLedgerResponse; /** @@ -10,234 +9,66 @@ import go.kr.project.api.model.response.NewLedgerResponse; * *

각 비교 로직별 비고 문자열을 생성하는 메서드를 제공합니다.

*

미필의 경우 부과일자 = 검사유효기간 종료일 + 146일

+ * + *

비고 패턴:

+ * */ public class ComparisonOmRemarkBuilder { /** * 상품용 비고 생성 - 미필 + * 비고 형식: 상품용 * - * @param step1Record Step 1 API 응답 (부과일자 기준 소유자명) - * @param step4Record Step 4 API 응답 (명의이전 시점 소유자명) - * @param ledgerRecord 조건에 맞는 갑부 레코드 - * @param inspVldPrdEnd 검사유효기간 종료일 - * @param levyCrtrYmd 부과일자 (검사유효기간 종료일 + 146일) - * @return 비고 문자열 - */ - public static String buildProductUseRemark( - NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String inspVldPrdEnd, - String levyCrtrYmd) { - - StringBuilder sb = new StringBuilder(); - sb.append("상품용 - 미필검사\n"); - - // 1. 부과일자 기준 소유자 정보 - sb.append("\n■ 부과일자 기준 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step1Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 차대번호: ").append(StringUtil.nvl(step1Record.getVin())).append("\n"); - sb.append(" - 부과일자: ").append(DateUtil.formatDateString(levyCrtrYmd)).append("\n"); - - // 2. 명의이전 시점 소유자 정보 - sb.append("\n■ 명의이전 시점 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step4Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 조회일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 3. 갑부 상세 정보 (명의이전 이력) - sb.append("\n■ 갑부 상세 (명의이전 이력)\n"); - sb.append(" - 변경일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - sb.append(" - 변경업무코드: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeCd())).append("\n"); - - // 4. 검사유효기간 정보 - sb.append("\n■ 검사유효기간 정보\n"); - sb.append(" - 검사유효기간 종료일: ").append(DateUtil.formatDateString(inspVldPrdEnd)).append("\n"); - - return sb.toString(); - } - - /** - * 상품용-변경등록 비고 생성 - 미필 - * - * @param step1Record Step 1 API 응답 (부과일자 기준 소유자명) - * @param step4Record Step 4 API 응답 (변경등록 시점 소유자명) - * @param ledgerRecord 조건에 맞는 갑부 레코드 (변경등록 레코드) - * @param inspVldPrdEnd 검사유효기간 종료일 - * @param levyCrtrYmd 부과일자 (검사유효기간 종료일 + 146일) * @return 비고 문자열 */ - public static String buildProductUseChangeRemark( - NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String inspVldPrdEnd, - String levyCrtrYmd) { - - StringBuilder sb = new StringBuilder(); - sb.append("상품용 - 변경등록 - 미필\n"); - - // 1. 부과일자 기준 소유자 정보 - sb.append("\n■ 부과일자 기준 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step1Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 차대번호: ").append(StringUtil.nvl(step1Record.getVin())).append("\n"); - - // 2. 변경등록 시점 소유자 정보 - sb.append("\n■ 변경등록 시점 소유자정보\n"); - sb.append(" - 소유자명: ").append(StringUtil.nvl(step4Record.getRprsOwnrNm())).append("\n"); - sb.append(" - 조회일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 3. 갑부 상세 정보 (변경등록 이력) - sb.append("\n■ 갑부 상세 (변경등록 이력)\n"); - sb.append(" - 변경일자: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - sb.append(" - 변경업무코드: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeCd())).append("\n"); - sb.append(" - 변경업무명: ").append(StringUtil.nvl(ledgerRecord.getChgTaskSeNm())).append("\n"); - sb.append(" - 특별사항: ").append(StringUtil.nvl(ledgerRecord.getSpcablMttr())).append("\n"); - - return sb.toString(); + public static String buildProductUseRemark() { + return "상품용"; } /** - * 상품용 비고 생성 - 미필 (부과일자 소유자가 상품용이 아니지만, 명의이전 후 상품용인 경우) - * - * 비고 형식: - * 명의이전(25.9.3.) 이전소유자 상품용 - * 22루2283 - * 검사유효기간 시작일 - 종료일 - * 부과일자 일자 - * 명의이전 일자 - * 상품용 일자 + * 명의이전 이전소유자 상품용 비고 생성 - 미필 + * 비고 형식: 명의이전(25.5.19.) 이전소유자 상품용, 시군구명/ 소유자명 * - * @param step1Record Step 1 API 응답 (부과일자 기준 소유자명) - * @param step4Record Step 4 API 응답 (명의이전 시점 소유자명 = 상품용) * @param ledgerRecord 조건에 맞는 갑부 레코드 (명의이전 레코드) - * @param vhclno 차량번호 - * @param levyCrtrYmd 부과일자 (검사유효기간 종료일 + 146일) - * @param inspVldPrdStart 검사유효기간 시작일 - * @param inspVldPrdEnd 검사유효기간 종료일 - * @param daysBetween 일수차이 + * @param sggNm 시군구명 + * @param ownerNm 소유자명 * @return 비고 문자열 */ - public static String buildProductCloseLevyRemark( - NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String vhclno, - String levyCrtrYmd, - String inspVldPrdStart, - String inspVldPrdEnd, - long daysBetween) { - - // 날짜 포맷 변환 (YYYYMMDD -> YY.M.D) + public static String buildProductCloseLevyRemark(NewLedgerResponse.Record ledgerRecord, + String sggNm, String ownerNm) { String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); - String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); - - StringBuilder sb = new StringBuilder(); - - // 첫 줄: 명의이전(25.9.3.) 이전소유자 상품용 - sb.append("명의이전(").append(chgYmdFormatted).append(") 이전소유자 상품용").append("\n"); - - // 둘째 줄: 차량번호 - sb.append(StringUtil.nvl(vhclno)).append("\n"); - - // 셋째 줄: 검사유효기간 시작일 - 종료일 - sb.append(" - 검사유효기간: ").append(DateUtil.formatDateString(inspVldPrdStart)) - .append(" - ").append(DateUtil.formatDateString(inspVldPrdEnd)).append("\n"); - - // 넷째 줄: 부과일자 일자 - sb.append(" - 부과일자: ").append(DateUtil.formatDateString(levyCrtrYmd)).append("\n"); - - // 다섯째 줄: 명의이전 일자 - sb.append(" - 명의이전: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 여섯째 줄: 상품용 일자 (명의이전 일자와 동일) - sb.append(" - 상품용: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 일곱째 줄: 일수차이, 미필은 일수차이 제외 - //sb.append("일수차이: ").append(daysBetween).append("일"); - - return sb.toString(); + return String.format("명의이전(%s) 이전소유자 상품용, %s/ %s", + chgYmdFormatted, StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm)); } - /** - * 명의이전 비고 생성 - 미필 (내사종결 또는 날짜 수정 후 부과) - * - * 비고 형식: - * 명의이전(25.9.3.) - * 22루2283 - * 검사유효기간 시작일 - 종료일 - * 부과일자 일자 - * 명의이전 일자 + * 미수검명의이전 비고 생성 - 미필 + * 비고 형식: 미수검명의이전(25.5.19.)(차량번호) * - * @param step1Record Step 1 API 응답 (부과일자 기준 소유자명) - * @param step4Record Step 4 API 응답 (명의이전 시점 소유자명) * @param ledgerRecord 조건에 맞는 갑부 레코드 (명의이전 레코드) * @param vhclno 차량번호 - * @param levyCrtrYmd 부과일자 (검사유효기간 종료일 + 146일) - * @param inspVldPrdStart 검사유효기간 시작일 - * @param inspVldPrdEnd 검사유효기간 종료일 - * @param daysBetween 일수차이 * @return 비고 문자열 */ - public static String buildOwnerChangeRemark(NewBasicResponse.Record step1Record, - NewBasicResponse.Record step4Record, - NewLedgerResponse.Record ledgerRecord, - String vhclno, - String levyCrtrYmd, - String inspVldPrdStart, - String inspVldPrdEnd, - long daysBetween) { - - // 날짜 포맷 변환 (YYYYMMDD -> YY.M.D) + public static String buildOwnerChangeRemark(NewLedgerResponse.Record ledgerRecord, String vhclno) { String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); - String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); - - StringBuilder sb = new StringBuilder(); - - // 첫 줄: 명의이전(25.9.3.) - sb.append("명의이전(").append(chgYmdFormatted).append(")").append("\n"); - - // 둘째 줄: 차량번호 - sb.append(StringUtil.nvl(vhclno)).append("\n"); - - // 셋째 줄: 검사유효기간 시작일 - 종료일 - sb.append(" - 검사유효기간: ").append(DateUtil.formatDateString(inspVldPrdStart)) - .append(" - ").append(DateUtil.formatDateString(inspVldPrdEnd)).append("\n"); - - // 넷째 줄: 부과일자 일자 - sb.append(" - 부과일자: ").append(DateUtil.formatDateString(levyCrtrYmd)).append("\n"); - - // 다섯째 줄: 명의이전 일자 - sb.append(" - 명의이전: ").append(DateUtil.formatDateString(ledgerRecord.getChgYmd())).append("\n"); - - // 일곱째 줄: 일수차이, 미필은 일수차이 제외 - // sb.append("일수차이: ").append(daysBetween).append("일"); - - return sb.toString(); + return String.format("미수검명의이전(%s)(%s)", chgYmdFormatted, StringUtil.nvl(vhclno)); } /** - * 이첩 비고 생성 - Case 이첩-1 (부과일자 사용본거지) + * 이첩 비고 생성 - 미필 + * 비고 형식: 시군구명/ 소유자명, 115일 도래지 * * @param sggNm 시군구명 - * @param userOrg4 사용자 조직코드 앞 4자리 + * @param ownerNm 소유자명 * @return 비고 문자열 */ - public static String buildTransferCase1Remark(String sggNm, String userOrg4) { - return String.format("%s, 부과일자사용본거지, [사용자 조직코드 앞 4자리: %s, 법정동명: %s]", - sggNm, userOrg4, sggNm); - } - - /** - * 이첩 비고 생성 - Case 이첩-2 (146일 도래지) - * - * @param sggNm 시군구명 - * @param legalDong4 법정동코드 앞 4자리 - * @return 비고 문자열 - */ - public static String buildTransferCase2Remark(String sggNm, String legalDong4) { - return String.format("%s, 115일 도래지, [법정동코드: %s, 법정동명: %s]", - sggNm, legalDong4, sggNm); + public static String buildTransferRemark(String sggNm, String ownerNm) { + return String.format("%s/ %s, 115일 도래지", StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm)); } /** @@ -253,21 +84,14 @@ public class ComparisonOmRemarkBuilder { StringBuilder detail = new StringBuilder(); - // 변경 정보 StringUtil.appendIfNotEmpty(detail, "변경업무구분코드", record.getChgTaskSeCd()); StringUtil.appendIfNotEmpty(detail, "변경업무구분명", record.getChgTaskSeNm()); StringUtil.appendIfNotEmpty(detail, "변경일자", DateUtil.formatDateString(record.getChgYmd())); - - // 주요 정보 StringUtil.appendIfNotEmpty(detail, "주요번호", record.getMainNo()); StringUtil.appendIfNotEmpty(detail, "일련번호", record.getSno()); StringUtil.appendIfNotEmpty(detail, "특별사항", record.getSpcablMttr()); - - // 명의자 정보 StringUtil.appendIfNotEmpty(detail, "명의자명", record.getHshldrNm()); StringUtil.appendIfNotEmpty(detail, "명의자식별번호", StringUtil.maskIdecno(record.getHshldrIdecno())); - - // 기타 StringUtil.appendIfNotEmpty(detail, "신청접수번호", record.getAplyRcptNo()); StringUtil.appendIfNotEmpty(detail, "차량관리번호", record.getVhmno()); StringUtil.appendIfNotEmpty(detail, "원부그룹번호", record.getLedgerGroupNo()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/OwnerTransferOmChecker.java b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/OwnerTransferOmChecker.java index e9a162a..0ec90b7 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/OwnerTransferOmChecker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/OwnerTransferOmChecker.java @@ -211,29 +211,28 @@ public class OwnerTransferOmChecker extends AbstractComparisonOmChecker { log.info("[명의이전-미필] Step 4 결과 - 소유자명: {}", step4OwnerName); + // ========== 시군구명 조회 ========== + String usgsrhldStdgCd = step1Record.getUsgsrhldStdgCd(); + String sggCd = (usgsrhldStdgCd != null && usgsrhldStdgCd.length() >= 5) ? usgsrhldStdgCd.substring(0, 5) : usgsrhldStdgCd; + String sggNm = carFfnlgTrgtIncmpMapper.selectSggNmBySggCd(sggCd); + String ownerNm = step1Record.getRprsOwnrNm(); + // ========== 소유자명 상품용 포함 여부에 따라 처리 분기 ========== String taskPrcsSttsCd; String rmrk; - long daysBetween = 0; // 미필의 경우 일수차이는 0으로 설정 if (step4OwnerName != null && step4OwnerName.contains("상품용")) { // 상품용 포함 log.info("[명의이전-미필] 명의이전 전 소유자가 상품용"); taskPrcsSttsCd = TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT; // 접수 - rmrk = ComparisonOmRemarkBuilder.buildProductCloseLevyRemark( - step1Record, step4Record, targetRecord, - vhclno, levyCrtrYmd, inspVldPrdStart, inspVldPrdEnd, daysBetween - ); + rmrk = ComparisonOmRemarkBuilder.buildProductCloseLevyRemark(targetRecord, sggNm, ownerNm); } else { // 상품용 미포함 log.info("[명의이전-미필] 명의이전 전 소유자가 상품용 아님"); taskPrcsSttsCd = TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT; // 접수 - rmrk = ComparisonOmRemarkBuilder.buildOwnerChangeRemark( - step1Record, step4Record, targetRecord, - vhclno, levyCrtrYmd, inspVldPrdStart, inspVldPrdEnd, daysBetween - ); + rmrk = ComparisonOmRemarkBuilder.buildOwnerChangeRemark(targetRecord, vhclno); } log.info("[명의이전-미필] 모든 조건 충족! 차량번호: {}, 처리상태: {}", vhclno, taskPrcsSttsCd); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/ProductUseOmChecker.java b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/ProductUseOmChecker.java index 0c23d9a..1db036b 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/ProductUseOmChecker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/ProductUseOmChecker.java @@ -220,10 +220,7 @@ public class ProductUseOmChecker extends AbstractComparisonOmChecker { log.info("[상품용-미필] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); // ========== 비고 생성 ========== - String rmrk = ComparisonOmRemarkBuilder.buildProductUseRemark( - step1Record, step4Record, targetRecord, - inspVldPrdEnd, levyCrtrYmd - ); + String rmrk = ComparisonOmRemarkBuilder.buildProductUseRemark(); // ========== DB 업데이트 ========== existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/TransferOmChecker.java b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/TransferOmChecker.java index 212f88d..826e8ed 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/TransferOmChecker.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registrationOm/service/impl/om_checker/TransferOmChecker.java @@ -179,8 +179,11 @@ public class TransferOmChecker extends AbstractComparisonOmChecker { sggNm = ""; } - // 비고 생성 (이첩-2 케이스) - String rmrk = ComparisonOmRemarkBuilder.buildTransferCase2Remark(sggNm, legalDong4); + // 소유자명 + String ownerNm = step1RprsOwnrNm; + + // 비고 생성 (이첩 케이스) + String rmrk = ComparisonOmRemarkBuilder.buildTransferRemark(sggNm, ownerNm); // DB 업데이트 existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());