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) 생성 유틸리티 클래스
*
*
각 비교 로직별 비고 문자열을 생성하는 메서드를 제공합니다.
+ *
+ * 비고 패턴:
+ *
+ * - 1. 상품용: 상품용
+ * - 2. 명의이전: 명의이전(25.9.5.) 이전소유자 상품용, 시군구명/ 소유자명
+ * - 3. 이첩-1: 시군구명/ 소유자명, 검사일사용본거지
+ * - 4. 이첩-2: 시군구명/ 소유자명, 115일 도래지
+ *
*/
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일
+ *
+ * 비고 패턴:
+ *
+ * - 1. 상품용: 상품용
+ * - 2. 명의이전 소유자 확인: 명의이전(25.5.19.) 이전소유자 상품용, 시군구명/ 소유자명
+ * - 3. 미수검명의이전: 미수검명의이전(25.5.19.)(차량번호)
+ * - 4. 이첩: 시군구명/ 소유자명, 115일 도래지
+ *
*/
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());