@ -1,6 +1,10 @@
package go.kr.project.carInspectionPenalty.registrationOm.service.impl ;
import egovframework.util.SessionUtil ;
import go.kr.project.api.model.request.NewBasicRequest ;
import go.kr.project.api.model.response.NewBasicResponse ;
import go.kr.project.api.service.ExternalVehicleApiService ;
import go.kr.project.api.service.VmisCarBassMatterInqireLogService ;
import go.kr.project.carInspectionPenalty.registrationOm.model.CarFfnlgTrgtIncmpVO ;
import go.kr.project.carInspectionPenalty.registrationOm.service.ComparisonOmService ;
import go.kr.project.carInspectionPenalty.registrationOm.service.impl.om_checker.* ;
@ -10,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl ;
import org.springframework.stereotype.Service ;
import java.time.LocalDate ;
import java.time.format.DateTimeFormatter ;
/ * *
* 과 태 료 대 상 미 필 비 교 서 비 스 구 현 체
*
@ -25,13 +31,18 @@ public class ComparisonOmServiceImpl extends EgovAbstractServiceImpl implements
private final TransferOmChecker transferOmChecker ;
private final OwnerTransferOmChecker ownerTransferOmChecker ;
private final ExternalVehicleApiService apiService ;
private final VmisCarBassMatterInqireLogService bassMatterLogService ;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter . ofPattern ( "yyyyMMdd" ) ;
/ * *
* 비 교 로 직 메 인 메 서 드
*
* < p > 순 차 적 으 로 각 비 교 체 커 를 실 행 하 고 , 하 나 라 도 적 용 되 면 즉 시 종 료 합 니 다 . < / p >
* < p > 미 필 의 경 우 부 과 일 자 ( levyCrtrYmd ) 가 미 리 계 산 되 어 existingData 에 포 함 됩 니 다 . < / p >
* /
@Override
@Override
public String executeComparison ( CarFfnlgTrgtIncmpVO existingData , LoginUserVO userInfo ) {
String vhclno = existingData . getVhclno ( ) ;
String levyCrtrYmd = existingData . getLevyCrtrYmd ( ) ;
@ -40,22 +51,62 @@ public class ComparisonOmServiceImpl extends EgovAbstractServiceImpl implements
// 사용자 조직코드 추출
String userOrgCd = userInfo ! = null ? userInfo . getOrgCd ( ) : null ;
// ========== Step 0: 자동차기본정보 조회 (차량번호 + 오늘일자) - 한번만 호출 ==========
log . info ( "[공통] Step 0: 자동차기본정보 조회 - 차량번호: {}, 현재일" , vhclno ) ;
NewBasicResponse step0Response = null ;
try {
NewBasicRequest step0Request = createBasicRequest ( vhclno , null , LocalDate . now ( ) . format ( DATE_FORMATTER ) ) ;
step0Response = apiService . getBasicInfo ( step0Request ) ;
bassMatterLogService . updateCarFfnlgTrgtIdByTxIdNewTx ( step0Response , existingData . getCarFfnlgTrgtIncmpId ( ) ) ;
if ( step0Response = = null | | step0Response . getRecord ( ) = = null | | step0Response . getRecord ( ) . isEmpty ( ) ) {
log . warn ( "[공통] Step 0 응답 없음 - 차량번호: {}" , vhclno ) ;
log . info ( "========== 미필 비교 로직 종료 (Step 0 응답 없음): {} ==========" , vhclno ) ;
return null ;
}
} catch ( Exception e ) {
log . error ( "[공통] Step 0 호출 중 오류 발생 - 차량번호: {}" , vhclno , e ) ;
log . info ( "========== 미필 비교 로직 종료 (Step 0 오류): {} ==========" , vhclno ) ;
return null ;
}
// ========== Step 1: 자동차기본정보 조회 (차대번호 + 부과일자) - 한번만 호출 ==========
String step0vin = step0Response . getRecord ( ) . get ( 0 ) . getVin ( ) ;
String levyCrtrYmdFormatted = levyCrtrYmd . replace ( "-" , "" ) ;
log . info ( "[공통] Step 1: 자동차기본정보 조회 - 차대번호: {}, 부과일자: {}" , step0vin , levyCrtrYmdFormatted ) ;
NewBasicResponse step1Response = null ;
try {
NewBasicRequest step1Request = createBasicRequest ( null , step0vin , levyCrtrYmdFormatted ) ;
step1Response = apiService . getBasicInfo ( step1Request ) ;
bassMatterLogService . updateCarFfnlgTrgtIdByTxIdNewTx ( step1Response , existingData . getCarFfnlgTrgtIncmpId ( ) ) ;
if ( step1Response = = null | | step1Response . getRecord ( ) = = null | | step1Response . getRecord ( ) . isEmpty ( ) ) {
log . warn ( "[공통] Step 1 응답 없음 - 차대번호: {}" , step0vin ) ;
log . info ( "========== 미필 비교 로직 종료 (Step 1 응답 없음): {} ==========" , vhclno ) ;
return null ;
}
} catch ( Exception e ) {
log . error ( "[공통] Step 1 호출 중 오류 발생 - 차대번호: {}" , step0vin , e ) ;
log . info ( "========== 미필 비교 로직 종료 (Step 1 오류): {} ==========" , vhclno ) ;
return null ;
}
// ========== 1. 상품용 체크 - api-1번호출.소유자명.contains("상품용") ==========
String productUseResult = productUseOmChecker . check ( existingData , userOrgCd ) ;
String productUseResult = productUseOmChecker . check ( existingData , userOrgCd , step0Response , step1Response );
if ( productUseResult ! = null ) {
log . info ( "========== 미필 비교 로직 종료 (상품용): {} ==========" , vhclno ) ;
return productUseResult ;
}
// ========== 2. 이첩 체크 ==========
String transferResult = transferOmChecker . check ( existingData , userOrgCd ) ;
String transferResult = transferOmChecker . check ( existingData , userOrgCd , step0Response , step1Response );
if ( transferResult ! = null ) {
log . info ( "========== 미필 비교 로직 종료 (이첩): {} ==========" , vhclno ) ;
return transferResult ;
}
// ========== 3. 명의이전 소유자 확인 (검사유효기간 종료일 이후 명의이전) ==========
String ownerTransferResult = ownerTransferOmChecker . check ( existingData , userOrgCd ) ;
String ownerTransferResult = ownerTransferOmChecker . check ( existingData , userOrgCd , step0Response , step1Response );
if ( ownerTransferResult ! = null ) {
log . info ( "========== 미필 비교 로직 종료 (명의이전 소유자 확인): {} ==========" , vhclno ) ;
return ownerTransferResult ;
@ -64,4 +115,25 @@ public class ComparisonOmServiceImpl extends EgovAbstractServiceImpl implements
log . info ( "========== 미필 비교 로직 종료 (미적용): {} ==========" , vhclno ) ;
return null ;
}
}
/ * *
* 자 동 차 기 본 정 보 요 청 객 체 생 성
* /
private NewBasicRequest createBasicRequest ( String vhrno , String vin , String levyCrtrYmd ) {
NewBasicRequest request = new NewBasicRequest ( ) ;
NewBasicRequest . Record record = new NewBasicRequest . Record ( ) ;
record . setLevyCrtrYmd ( levyCrtrYmd ) ;
if ( vhrno ! = null ) {
record . setVhrno ( vhrno ) ;
record . setInqSeCd ( "3" ) ; // 3: 자동차번호
} else if ( vin ! = null ) {
record . setVin ( vin ) ;
record . setInqSeCd ( "2" ) ; // 2: 차대번호
}
request . setRecord ( java . util . Arrays . asList ( record ) ) ;
return request ;
}
}