### feat: 비고(Remark) 생성 로직 개선 및 코드 단순화

- **비고 형식 변경 및 단순화**
  - 불필요한 다중 매개변수를 제거하고 단일 매개변수 처리로 변경
  - 상품용, 명의이전, 이첩 등의 비고 생성 로직에서 복잡한 문자열 빌더 사용 제거, 단순 문자열 반환 방식으로 수정

- **시군구명 및 소유자명 추가**
  - 명의이전 및 이첩 비고 생성 시 시군구명(`sggNm`)과 소유자명(`ownerNm`)을 파라미터로 추가
  - `carFfnlgTrgtMapper.selectSggNmBySggCd` 호출을 통해 시군구명 조회 로직 적용

- **불필요 메서드 삭제**
  - `NewBasicResponse` 및 `NewBasicResponse.Record` 관련 비고 생성 메서드 제거 (`buildProductUseRemark`, `buildProductUseChangeRemark` 등)

- **Checker 로직 수정**
  - `OmChecker`, `delay_checker` 내 비고 생성 로직 모두 단일화된 메서드 호출로 변경
  - 모든 비고 생성 로직에 시군구명 및 소유자명 적용
  - 호출 매개변수 최소화 및 유지보수성 강화

- **기타**
  - 기존에 사용되었던 복잡한 비고 생성 포맷 정리 및 관련 주석 제거
  - 중복 코드 제거 및 가독성을 위한 리팩토링
main
박성영 5 days ago
parent dde9bf4c02
commit 4691fb8073

@ -2,248 +2,87 @@ package go.kr.project.carInspectionPenalty.registration.service.impl;
import egovframework.util.DateUtil; import egovframework.util.DateUtil;
import egovframework.util.StringUtil; import egovframework.util.StringUtil;
import go.kr.project.api.model.response.NewBasicResponse;
import go.kr.project.api.model.response.NewLedgerResponse; import go.kr.project.api.model.response.NewLedgerResponse;
/** /**
* (Remark) * (Remark)
* *
* <p> .</p> * <p> .</p>
*
* <p> :</p>
* <ul>
* <li>1. : </li>
* <li>2. : (25.9.5.) , / </li>
* <li>3. -1: / , </li>
* <li>4. -2: / , 115 </li>
* </ul>
*/ */
public class ComparisonRemarkBuilder { public class ComparisonRemarkBuilder {
/** /**
* - Case 1 *
* :
* *
* @param step1Record Step 1 API ( )
* @param step4Record Step 4 API ( )
* @param ledgerRecord
* @param vldPrdExpryYmd
* @param inspEndYmd
* @return * @return
*/ */
public static String buildProductUseRemark( public static String buildProductUseRemark() {
NewBasicResponse.Record step1Record, return "상품용";
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();
} }
/** /**
* - *
* : (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.)
* 222283
* -
*
*
*
*
* @param step1Record Step 1 API ( )
* @param step4Record Step 4 API ( = )
* @param ledgerRecord ( ) * @param ledgerRecord ( )
* @param vhclno * @param sggNm
* @param inspYmd * @param ownerNm
* @param vldPrdExpryYmd
* @param inspEndYmd
* @param daysBetween
* @return * @return
*/ */
public static String buildProductCloseLevyRemark( public static String buildProductCloseLevyRemark(NewLedgerResponse.Record ledgerRecord,
NewBasicResponse.Record step1Record, String sggNm, String ownerNm) {
NewBasicResponse.Record step4Record,
NewLedgerResponse.Record ledgerRecord,
String vhclno,
String inspYmd,
String vldPrdExpryYmd,
String inspEndYmd,
long daysBetween) {
// 날짜 포맷 변환 (YYYYMMDD -> YY.M.D)
String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd());
String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); return String.format("명의이전(%s) 이전소유자 상품용, %s/ %s",
chgYmdFormatted, StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm));
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();
} }
/** /**
* ( ) *
* : (25.9.5.), /
* *
* :
* (25.9.3.)
* 222283
* -
*
*
*
*
* @param step1Record Step 1 API ( )
* @param step4Record Step 4 API ( = )
* @param ledgerRecord ( ) * @param ledgerRecord ( )
* @param vhclno * @param sggNm
* @param inspYmd * @param ownerNm
* @param vldPrdExpryYmd
* @param inspEndYmd
* @param daysBetween
* @return * @return
*/ */
public static String buildOwnerChangeRemark(NewBasicResponse.Record step1Record, public static String buildOwnerChangeRemark(NewLedgerResponse.Record ledgerRecord,
NewBasicResponse.Record step4Record, String sggNm, String ownerNm) {
NewLedgerResponse.Record ledgerRecord,
String vhclno,
String inspYmd,
String vldPrdExpryYmd,
String inspEndYmd,
long daysBetween) {
// 날짜 포맷 변환 (YYYYMMDD -> YY.M.D)
String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd());
String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); return String.format("명의이전(%s), %s/ %s",
chgYmdFormatted, StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm));
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();
} }
/** /**
* - Case -1 ( ) * - Case -1 ( )
* : / ,
* *
* @param sggNm * @param sggNm
* @param userOrg4 4 * @param ownerNm
* @return * @return
*/ */
public static String buildTransferCase1Remark(String sggNm, String userOrg4) { public static String buildTransferCase1Remark(String sggNm, String ownerNm) {
return String.format("%s, 검사일사용본거지, [사용자 조직코드 앞 4자리: %s, 법정동명: %s]", return String.format("%s/ %s, 검사일사용본거지", StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm));
sggNm, userOrg4, sggNm);
} }
/** /**
* - Case -2 (115 ) * - Case -2 (115 )
* : / , 115
* *
* @param sggNm * @param sggNm
* @param legalDong4 4 * @param ownerNm
* @return * @return
*/ */
public static String buildTransferCase2Remark(String sggNm, String legalDong4) { public static String buildTransferCase2Remark(String sggNm, String ownerNm) {
return String.format("%s, 115일 도래지, [법정동코드: %s, 법정동명: %s]", return String.format("%s/ %s, 115일 도래지", StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm));
sggNm, legalDong4, sggNm);
} }
/** /**
@ -259,21 +98,14 @@ public class ComparisonRemarkBuilder {
StringBuilder detail = new StringBuilder(); StringBuilder detail = new StringBuilder();
// 변경 정보
StringUtil.appendIfNotEmpty(detail, "변경업무구분코드", record.getChgTaskSeCd()); StringUtil.appendIfNotEmpty(detail, "변경업무구분코드", record.getChgTaskSeCd());
StringUtil.appendIfNotEmpty(detail, "변경업무구분명", record.getChgTaskSeNm()); StringUtil.appendIfNotEmpty(detail, "변경업무구분명", record.getChgTaskSeNm());
StringUtil.appendIfNotEmpty(detail, "변경일자", DateUtil.formatDateString(record.getChgYmd())); StringUtil.appendIfNotEmpty(detail, "변경일자", DateUtil.formatDateString(record.getChgYmd()));
// 주요 정보
StringUtil.appendIfNotEmpty(detail, "주요번호", record.getMainNo()); StringUtil.appendIfNotEmpty(detail, "주요번호", record.getMainNo());
StringUtil.appendIfNotEmpty(detail, "일련번호", record.getSno()); StringUtil.appendIfNotEmpty(detail, "일련번호", record.getSno());
StringUtil.appendIfNotEmpty(detail, "특별사항", record.getSpcablMttr()); StringUtil.appendIfNotEmpty(detail, "특별사항", record.getSpcablMttr());
// 명의자 정보
StringUtil.appendIfNotEmpty(detail, "명의자명", record.getHshldrNm()); StringUtil.appendIfNotEmpty(detail, "명의자명", record.getHshldrNm());
StringUtil.appendIfNotEmpty(detail, "명의자식별번호", StringUtil.maskIdecno(record.getHshldrIdecno())); StringUtil.appendIfNotEmpty(detail, "명의자식별번호", StringUtil.maskIdecno(record.getHshldrIdecno()));
// 기타
StringUtil.appendIfNotEmpty(detail, "신청접수번호", record.getAplyRcptNo()); StringUtil.appendIfNotEmpty(detail, "신청접수번호", record.getAplyRcptNo());
StringUtil.appendIfNotEmpty(detail, "차량관리번호", record.getVhmno()); StringUtil.appendIfNotEmpty(detail, "차량관리번호", record.getVhmno());
StringUtil.appendIfNotEmpty(detail, "원부그룹번호", record.getLedgerGroupNo()); StringUtil.appendIfNotEmpty(detail, "원부그룹번호", record.getLedgerGroupNo());

@ -194,11 +194,14 @@ public class OwnerCloseWithin31Checker extends AbstractComparisonChecker {
log.info("[내사종결-명의이전] 명의이전 전 소유자가 상품용 아님 - 소유자명: {}", step4OwnerName); 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( String rmrk = ComparisonRemarkBuilder.buildOwnerChangeRemark(targetRecord, sggNm, ownerNm);
step1Record, step4Record, targetRecord,
vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -194,11 +194,14 @@ public class OwnerLevyOver31Checker extends AbstractComparisonChecker {
log.info("[날짜수정후부과-명의이전] 명의이전 전 소유자가 상품용 아님 - 소유자명: {}", step4OwnerName); 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( String rmrk = ComparisonRemarkBuilder.buildOwnerChangeRemark(targetRecord, sggNm, ownerNm);
step1Record, step4Record, targetRecord,
vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -191,11 +191,14 @@ public class ProductCloseWithin31Checker extends AbstractComparisonChecker {
log.info("[내사종결-명의이전 상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); 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( String rmrk = ComparisonRemarkBuilder.buildProductCloseLevyRemark(targetRecord, sggNm, ownerNm);
step1Record, step4Record, targetRecord,
vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -193,11 +193,14 @@ public class ProductLevyOver31Checker extends AbstractComparisonChecker {
log.info("[날짜수정후부과-명의이전 상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); 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( String rmrk = ComparisonRemarkBuilder.buildProductCloseLevyRemark(targetRecord, sggNm, ownerNm);
step1Record, step4Record, targetRecord,
vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd, daysBetween
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -205,10 +205,7 @@ public class ProductUseChecker extends AbstractComparisonChecker {
log.info("[상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); log.info("[상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd);
// ========== 비고 생성 ========== // ========== 비고 생성 ==========
String rmrk = ComparisonRemarkBuilder.buildProductUseRemark( String rmrk = ComparisonRemarkBuilder.buildProductUseRemark();
step1Record, step4Record, targetRecord,
vldPrdExpryYmd, inspEndYmd
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -210,10 +210,7 @@ public class ProductUseChnageChecker extends AbstractComparisonChecker {
log.info("[상품용-변경등록] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); log.info("[상품용-변경등록] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd);
// ========== 비고 생성 ========== // ========== 비고 생성 ==========
String rmrk = ComparisonRemarkBuilder.buildProductUseChangeRemark( String rmrk = ComparisonRemarkBuilder.buildProductUseRemark();
step1Record, step4Record, targetRecord,
vldPrdExpryYmd, inspEndYmd
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -122,12 +122,15 @@ public class TransferCase115DayChecker extends AbstractComparisonChecker {
sggNm = ""; sggNm = "";
} }
// 소유자명
String ownerNm = record.getRprsOwnrNm();
// 비고 생성 // 비고 생성
String rmrk; String rmrk;
if ("이첩-1".equals(transferType)) { // 5번 if ("이첩-1".equals(transferType)) { // 5번
rmrk = ComparisonRemarkBuilder.buildTransferCase1Remark(sggNm, userOrg4); rmrk = ComparisonRemarkBuilder.buildTransferCase1Remark(sggNm, ownerNm);
} else { // 7번 } else { // 7번
rmrk = ComparisonRemarkBuilder.buildTransferCase2Remark(sggNm, legalDong4); rmrk = ComparisonRemarkBuilder.buildTransferCase2Remark(sggNm, ownerNm);
} }
// DB 업데이트 // DB 업데이트

@ -2,7 +2,6 @@ package go.kr.project.carInspectionPenalty.registrationOm.service.impl;
import egovframework.util.DateUtil; import egovframework.util.DateUtil;
import egovframework.util.StringUtil; import egovframework.util.StringUtil;
import go.kr.project.api.model.response.NewBasicResponse;
import go.kr.project.api.model.response.NewLedgerResponse; import go.kr.project.api.model.response.NewLedgerResponse;
/** /**
@ -10,234 +9,66 @@ import go.kr.project.api.model.response.NewLedgerResponse;
* *
* <p> .</p> * <p> .</p>
* <p> = + 146</p> * <p> = + 146</p>
*
* <p> :</p>
* <ul>
* <li>1. : </li>
* <li>2. : (25.5.19.) , / </li>
* <li>3. : (25.5.19.)()</li>
* <li>4. : / , 115 </li>
* </ul>
*/ */
public class ComparisonOmRemarkBuilder { 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 * @return
*/ */
public static String buildProductUseChangeRemark( public static String buildProductUseRemark() {
NewBasicResponse.Record step1Record, return "상품용";
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();
} }
/** /**
* - ( , ) * -
* * : (25.5.19.) , /
* :
* (25.9.3.)
* 222283
* -
*
*
*
* *
* @param step1Record Step 1 API ( )
* @param step4Record Step 4 API ( = )
* @param ledgerRecord ( ) * @param ledgerRecord ( )
* @param vhclno * @param sggNm
* @param levyCrtrYmd ( + 146) * @param ownerNm
* @param inspVldPrdStart
* @param inspVldPrdEnd
* @param daysBetween
* @return * @return
*/ */
public static String buildProductCloseLevyRemark( public static String buildProductCloseLevyRemark(NewLedgerResponse.Record ledgerRecord,
NewBasicResponse.Record step1Record, String sggNm, String ownerNm) {
NewBasicResponse.Record step4Record,
NewLedgerResponse.Record ledgerRecord,
String vhclno,
String levyCrtrYmd,
String inspVldPrdStart,
String inspVldPrdEnd,
long daysBetween) {
// 날짜 포맷 변환 (YYYYMMDD -> YY.M.D)
String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd());
String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); return String.format("명의이전(%s) 이전소유자 상품용, %s/ %s",
chgYmdFormatted, StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm));
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();
} }
/** /**
* - ( ) * -
* * : (25.5.19.)()
* :
* (25.9.3.)
* 222283
* -
*
*
* *
* @param step1Record Step 1 API ( )
* @param step4Record Step 4 API ( )
* @param ledgerRecord ( ) * @param ledgerRecord ( )
* @param vhclno * @param vhclno
* @param levyCrtrYmd ( + 146)
* @param inspVldPrdStart
* @param inspVldPrdEnd
* @param daysBetween
* @return * @return
*/ */
public static String buildOwnerChangeRemark(NewBasicResponse.Record step1Record, public static String buildOwnerChangeRemark(NewLedgerResponse.Record ledgerRecord, String vhclno) {
NewBasicResponse.Record step4Record,
NewLedgerResponse.Record ledgerRecord,
String vhclno,
String levyCrtrYmd,
String inspVldPrdStart,
String inspVldPrdEnd,
long daysBetween) {
// 날짜 포맷 변환 (YYYYMMDD -> YY.M.D)
String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd()); String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd());
String step1wnerName = StringUtil.nvl(step1Record.getRprsOwnrNm()); return String.format("미수검명의이전(%s)(%s)", chgYmdFormatted, StringUtil.nvl(vhclno));
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();
} }
/** /**
* - Case -1 ( ) * -
* : / , 115
* *
* @param sggNm * @param sggNm
* @param userOrg4 4 * @param ownerNm
* @return * @return
*/ */
public static String buildTransferCase1Remark(String sggNm, String userOrg4) { public static String buildTransferRemark(String sggNm, String ownerNm) {
return String.format("%s, 부과일자사용본거지, [사용자 조직코드 앞 4자리: %s, 법정동명: %s]", return String.format("%s/ %s, 115일 도래지", StringUtil.nvl(sggNm), StringUtil.nvl(ownerNm));
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);
} }
/** /**
@ -253,21 +84,14 @@ public class ComparisonOmRemarkBuilder {
StringBuilder detail = new StringBuilder(); StringBuilder detail = new StringBuilder();
// 변경 정보
StringUtil.appendIfNotEmpty(detail, "변경업무구분코드", record.getChgTaskSeCd()); StringUtil.appendIfNotEmpty(detail, "변경업무구분코드", record.getChgTaskSeCd());
StringUtil.appendIfNotEmpty(detail, "변경업무구분명", record.getChgTaskSeNm()); StringUtil.appendIfNotEmpty(detail, "변경업무구분명", record.getChgTaskSeNm());
StringUtil.appendIfNotEmpty(detail, "변경일자", DateUtil.formatDateString(record.getChgYmd())); StringUtil.appendIfNotEmpty(detail, "변경일자", DateUtil.formatDateString(record.getChgYmd()));
// 주요 정보
StringUtil.appendIfNotEmpty(detail, "주요번호", record.getMainNo()); StringUtil.appendIfNotEmpty(detail, "주요번호", record.getMainNo());
StringUtil.appendIfNotEmpty(detail, "일련번호", record.getSno()); StringUtil.appendIfNotEmpty(detail, "일련번호", record.getSno());
StringUtil.appendIfNotEmpty(detail, "특별사항", record.getSpcablMttr()); StringUtil.appendIfNotEmpty(detail, "특별사항", record.getSpcablMttr());
// 명의자 정보
StringUtil.appendIfNotEmpty(detail, "명의자명", record.getHshldrNm()); StringUtil.appendIfNotEmpty(detail, "명의자명", record.getHshldrNm());
StringUtil.appendIfNotEmpty(detail, "명의자식별번호", StringUtil.maskIdecno(record.getHshldrIdecno())); StringUtil.appendIfNotEmpty(detail, "명의자식별번호", StringUtil.maskIdecno(record.getHshldrIdecno()));
// 기타
StringUtil.appendIfNotEmpty(detail, "신청접수번호", record.getAplyRcptNo()); StringUtil.appendIfNotEmpty(detail, "신청접수번호", record.getAplyRcptNo());
StringUtil.appendIfNotEmpty(detail, "차량관리번호", record.getVhmno()); StringUtil.appendIfNotEmpty(detail, "차량관리번호", record.getVhmno());
StringUtil.appendIfNotEmpty(detail, "원부그룹번호", record.getLedgerGroupNo()); StringUtil.appendIfNotEmpty(detail, "원부그룹번호", record.getLedgerGroupNo());

@ -211,29 +211,28 @@ public class OwnerTransferOmChecker extends AbstractComparisonOmChecker {
log.info("[명의이전-미필] Step 4 결과 - 소유자명: {}", step4OwnerName); 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 taskPrcsSttsCd;
String rmrk; String rmrk;
long daysBetween = 0; // 미필의 경우 일수차이는 0으로 설정
if (step4OwnerName != null && step4OwnerName.contains("상품용")) { if (step4OwnerName != null && step4OwnerName.contains("상품용")) {
// 상품용 포함 // 상품용 포함
log.info("[명의이전-미필] 명의이전 전 소유자가 상품용"); log.info("[명의이전-미필] 명의이전 전 소유자가 상품용");
taskPrcsSttsCd = TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT; // 접수 taskPrcsSttsCd = TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT; // 접수
rmrk = ComparisonOmRemarkBuilder.buildProductCloseLevyRemark( rmrk = ComparisonOmRemarkBuilder.buildProductCloseLevyRemark(targetRecord, sggNm, ownerNm);
step1Record, step4Record, targetRecord,
vhclno, levyCrtrYmd, inspVldPrdStart, inspVldPrdEnd, daysBetween
);
} else { } else {
// 상품용 미포함 // 상품용 미포함
log.info("[명의이전-미필] 명의이전 전 소유자가 상품용 아님"); log.info("[명의이전-미필] 명의이전 전 소유자가 상품용 아님");
taskPrcsSttsCd = TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT; // 접수 taskPrcsSttsCd = TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_01_RCPT; // 접수
rmrk = ComparisonOmRemarkBuilder.buildOwnerChangeRemark( rmrk = ComparisonOmRemarkBuilder.buildOwnerChangeRemark(targetRecord, vhclno);
step1Record, step4Record, targetRecord,
vhclno, levyCrtrYmd, inspVldPrdStart, inspVldPrdEnd, daysBetween
);
} }
log.info("[명의이전-미필] 모든 조건 충족! 차량번호: {}, 처리상태: {}", vhclno, taskPrcsSttsCd); log.info("[명의이전-미필] 모든 조건 충족! 차량번호: {}, 처리상태: {}", vhclno, taskPrcsSttsCd);

@ -220,10 +220,7 @@ public class ProductUseOmChecker extends AbstractComparisonOmChecker {
log.info("[상품용-미필] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd); log.info("[상품용-미필] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd);
// ========== 비고 생성 ========== // ========== 비고 생성 ==========
String rmrk = ComparisonOmRemarkBuilder.buildProductUseRemark( String rmrk = ComparisonOmRemarkBuilder.buildProductUseRemark();
step1Record, step4Record, targetRecord,
inspVldPrdEnd, levyCrtrYmd
);
// ========== DB 업데이트 ========== // ========== DB 업데이트 ==========
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

@ -179,8 +179,11 @@ public class TransferOmChecker extends AbstractComparisonOmChecker {
sggNm = ""; sggNm = "";
} }
// 비고 생성 (이첩-2 케이스) // 소유자명
String rmrk = ComparisonOmRemarkBuilder.buildTransferCase2Remark(sggNm, legalDong4); String ownerNm = step1RprsOwnrNm;
// 비고 생성 (이첩 케이스)
String rmrk = ComparisonOmRemarkBuilder.buildTransferRemark(sggNm, ownerNm);
// DB 업데이트 // DB 업데이트
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId()); existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());

Loading…
Cancel
Save