|
|
|
|
@ -59,14 +59,21 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
return transferResult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 2. 상품용 체크 - api-1번호출.소유자명.contains("상품용") ==========
|
|
|
|
|
String productUseResult = checkProductUseCase1(existingData);
|
|
|
|
|
if (productUseResult != null) {
|
|
|
|
|
log.info("========== 비교 로직 종료 (상품용): {} ==========", vhclno);
|
|
|
|
|
return productUseResult;
|
|
|
|
|
// ========== 2. 상품용 체크 Case1 - api-1번호출.소유자명.contains("상품용") ==========
|
|
|
|
|
String productUseResult1 = checkProductUseCase1(existingData);
|
|
|
|
|
if (productUseResult1 != null) {
|
|
|
|
|
log.info("========== 비교 로직 종료 (상품용-Case1): {} ==========", vhclno);
|
|
|
|
|
return productUseResult1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 3. 향후 추가될 비교 로직들 ==========
|
|
|
|
|
// ========== 3. 상품용 체크 Case2 - 명의이전 후 상품용인 경우 ==========
|
|
|
|
|
String productUseResult2 = checkProductUseCase2(existingData);
|
|
|
|
|
if (productUseResult2 != null) {
|
|
|
|
|
log.info("========== 비교 로직 종료 (상품용-Case2): {} ==========", vhclno);
|
|
|
|
|
return productUseResult2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 4. 향후 추가될 비교 로직들 ==========
|
|
|
|
|
// String investigationClosedResult = checkInvestigationClosed(existingData);
|
|
|
|
|
// if (investigationClosedResult != null) {
|
|
|
|
|
// return investigationClosedResult;
|
|
|
|
|
@ -268,7 +275,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
log.info("[상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd);
|
|
|
|
|
|
|
|
|
|
// ========== 비고 생성 ==========
|
|
|
|
|
String rmrk = buildProductUseRemark(
|
|
|
|
|
String rmrk = buildProductUseRemarkCase1(
|
|
|
|
|
step1Record, step4Record, targetRecord,
|
|
|
|
|
vldPrdExpryYmd, inspEndYmd
|
|
|
|
|
);
|
|
|
|
|
@ -313,7 +320,8 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
* • CHG_YMD <= 검사종료일자
|
|
|
|
|
* • 현재 주석처리 CHG_YMD가 검사일 이전일자 중 가장 마지막 일자
|
|
|
|
|
* • CHG_TASK_SE_CD == "11" (명의이전)
|
|
|
|
|
* - 3단계: 4번 API 조회 소유자명 == 소유자명.contains("상품용")
|
|
|
|
|
* • 명의이전일자가 검사일의 30일이내
|
|
|
|
|
* - 3단계: 4번 API 조회 소유자명.contains("상품용")
|
|
|
|
|
*
|
|
|
|
|
* @param existingData 과태료 대상 데이터
|
|
|
|
|
* @return 02 (상품용) 또는 null (미적용)
|
|
|
|
|
@ -420,11 +428,6 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (chgDate.isAfter(inspDate)) {
|
|
|
|
|
log.debug("[상품용] CHG_YMD > 검사일 - 변경일자: {}, 검사일: {}", chgYmd, inspYmd);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 가장 마지막 일자 찾기
|
|
|
|
|
if (latestChgDate == null || chgDate.isAfter(latestChgDate)) {
|
|
|
|
|
latestChgDate = chgDate;
|
|
|
|
|
@ -438,6 +441,16 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 조건: 가장 마지막 명의이전일자가 검사일의 30일 이내인지 확인
|
|
|
|
|
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(latestChgDate, inspDate);
|
|
|
|
|
if (daysBetween < 0 || daysBetween > 30) {
|
|
|
|
|
log.debug("[상품용] 명의이전일자가 검사일의 30일 이내가 아님 - 변경일자: {}, 검사일: {}, 일수차이: {}일",
|
|
|
|
|
targetRecord.getChgYmd(), inspYmd, daysBetween);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
log.info("[상품용] 명의이전일자가 검사일의 30일 이내 확인 - 변경일자: {}, 검사일: {}, 일수차이: {}일",
|
|
|
|
|
targetRecord.getChgYmd(), inspYmd, daysBetween);
|
|
|
|
|
|
|
|
|
|
String targetChgYmd = targetRecord.getChgYmd();
|
|
|
|
|
log.info("[상품용] 조건 충족 레코드 선택! 변경일자: {}, 변경업무: {}", targetChgYmd, targetRecord.getChgTaskSeNm());
|
|
|
|
|
|
|
|
|
|
@ -458,20 +471,20 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
|
|
|
|
|
log.info("[상품용] Step 4 결과 - 소유자명: {}", step4OwnerName);
|
|
|
|
|
|
|
|
|
|
// ========== 소유자명 비교 ==========
|
|
|
|
|
if (step4OwnerName == null || !step4OwnerName.equals("상품용")) {
|
|
|
|
|
log.debug("[상품용] 소유자명 상품용 아님 - Step4 소유자명: {}", step4OwnerName);
|
|
|
|
|
// ========== 소유자명 비교 - 상품용 포함 여부 확인 ==========
|
|
|
|
|
if (step4OwnerName == null || !step4OwnerName.contains("상품용")) {
|
|
|
|
|
log.debug("[상품용] 소유자명에 '상품용' 미포함 - Step4 소유자명: {}", step4OwnerName);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("[상품용] 소유자명 상품용 확인! - 소유자명: {}", step1OwnerName);
|
|
|
|
|
log.info("[상품용] 명의이전 시점 소유자명에 '상품용' 확인! - 소유자명: {}", step4OwnerName);
|
|
|
|
|
|
|
|
|
|
log.info("[상품용] 모든 조건 충족! 차량번호: {}, 변경일자: {}", vhclno, targetChgYmd);
|
|
|
|
|
|
|
|
|
|
// ========== 비고 생성 ==========
|
|
|
|
|
String rmrk = buildProductUseRemark(
|
|
|
|
|
String rmrk = buildProductUseRemarkCase2(
|
|
|
|
|
step1Record, step4Record, targetRecord,
|
|
|
|
|
vldPrdExpryYmd, inspEndYmd
|
|
|
|
|
vhclno, inspYmd, vldPrdExpryYmd, inspEndYmd
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// ========== DB 업데이트 ==========
|
|
|
|
|
@ -707,7 +720,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
* @param inspEndYmd 검사종료일자
|
|
|
|
|
* @return 비고 문자열
|
|
|
|
|
*/
|
|
|
|
|
private String buildProductUseRemark(
|
|
|
|
|
private String buildProductUseRemarkCase1(
|
|
|
|
|
NewBasicResponse.Record step1Record,
|
|
|
|
|
NewBasicResponse.Record step4Record,
|
|
|
|
|
NewLedgerResponse.Record ledgerRecord,
|
|
|
|
|
@ -745,6 +758,63 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
|
|
|
|
|
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 검사종료일자
|
|
|
|
|
* @return 비고 문자열
|
|
|
|
|
*/
|
|
|
|
|
private String buildProductUseRemarkCase2(
|
|
|
|
|
NewBasicResponse.Record step1Record,
|
|
|
|
|
NewBasicResponse.Record step4Record,
|
|
|
|
|
NewLedgerResponse.Record ledgerRecord,
|
|
|
|
|
String vhclno,
|
|
|
|
|
String inspYmd,
|
|
|
|
|
String vldPrdExpryYmd,
|
|
|
|
|
String inspEndYmd) {
|
|
|
|
|
|
|
|
|
|
// 날짜 포맷 변환 (YYYYMMDD -> YY.M.D)
|
|
|
|
|
String chgYmdFormatted = DateUtil.formatToShortDate(ledgerRecord.getChgYmd());
|
|
|
|
|
String step1OwnerName = nvl(step1Record.getRprsOwnrNm());
|
|
|
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
// 첫 줄: 명의이전(25.9.3.) 이전소유자 상품용
|
|
|
|
|
sb.append("명의이전(").append(chgYmdFormatted).append(") 이전소유자 상품용").append("\n");
|
|
|
|
|
|
|
|
|
|
// 둘째 줄: 차량번호
|
|
|
|
|
sb.append(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()));
|
|
|
|
|
|
|
|
|
|
return sb.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* null 안전 처리
|
|
|
|
|
*/
|
|
|
|
|
|