미필 : 이첩 케이스-2 번 적용

main
박성영 7 days ago
parent b72525e0f6
commit e8e362f4c0

@ -19,10 +19,20 @@ import org.springframework.stereotype.Component;
import java.time.LocalDate;
/**
* 7. ()
* 2. api-1.!.contains("상품용")
*
* <p>DAYCNT </p>
* <p> = + 146</p>
* API 3:
* 1) (, = + 146)
* 2) (, = - 90)
* 3) (, =)
*
* :
* - 1: ,
* - 2: 1 = 2
* - 3: 1 = 3
*
* :
* - 4 != 4
*/
@Slf4j
@Component
@ -40,21 +50,6 @@ public class TransferOmChecker extends AbstractComparisonOmChecker {
String vhclno = existingData.getVhclno();
try {
// TODO : DAYCNT 는 어떻게 가져옴?
// DAYCNT 가져오기
//String daycntStr = existingData.getDaycnt();
String daycntStr = "111";
if (daycntStr == null || daycntStr.isEmpty()) {
log.debug("[이첩-미필] DAYCNT 없음 - 차량번호: {}", vhclno);
return null;
}
int daycnt = Integer.parseInt(daycntStr);
log.info("[이첩-미필] DAYCNT: {} - 차량번호: {}", daycnt, vhclno);
// 부과기준일 계산
String levyCrtrYmd;
String transferType;
String inspVldPrd = existingData.getInspVldPrd();
// 검사유효기간에서 종료일 추출
@ -64,97 +59,143 @@ public class TransferOmChecker extends AbstractComparisonOmChecker {
inspVldPrdEnd = dates.length > 1 ? dates[1].trim().replace("-", "") : null;
}
if (daycnt > 115) {
// 이첩-2: 부과기준일 = 검사유효기간 종료일 + 115일
LocalDate inspVldPrdEndDate = DateUtil.parseDate(inspVldPrdEnd);
LocalDate levyCrtrDate = inspVldPrdEndDate.plusDays(115);
levyCrtrYmd = levyCrtrDate.format(DATE_FORMATTER);
transferType = "이첩-2";
log.info("[이첩-2-미필] 부과기준일 = 검사유효기간 종료일({}) + 115일 = {}", inspVldPrdEnd, levyCrtrYmd);
} else {
// 이첩-1: 부과기준일 = 부과일자 (검사유효기간 종료일 + 146일)
levyCrtrYmd = existingData.getLevyCrtrYmd();
transferType = "이첩-1";
log.info("[이첩-1-미필] 부과기준일 = 부과일자 = {}", levyCrtrYmd);
if (inspVldPrdEnd == null) {
log.debug("[이첩-미필] 검사유효기간 종료일 없음 - 차량번호: {}", vhclno);
return null;
}
// 1단계: 자동차기본정보(차량번호, 부과일자=검사유효기간 + 146일)
// 부과일자는 이미 146일로 계산되어 있음
String step1Ymd = existingData.getLevyCrtrYmd();
log.info("[이첩-미필] 1단계 API 호출 - 차량번호: {}, 부과일자: {}", vhclno, step1Ymd);
NewBasicRequest step1Request = createBasicRequest(vhclno, null, step1Ymd);
NewBasicResponse step1Response = apiService.getBasicInfo(step1Request);
bassMatterLogService.updateCarFfnlgTrgtIdByTxIdNewTx(step1Response, existingData.getCarFfnlgTrgtIncmpId());
if (step1Response == null || step1Response.getRecord() == null || step1Response.getRecord().isEmpty()) {
log.warn("[이첩-미필] 1단계 응답 없음 - 차량번호: {}", vhclno);
return null;
}
NewBasicResponse.Record step1Record = step1Response.getRecord().get(0);
String step1RprsOwnrNm = step1Record.getRprsOwnrNm(); // 검사일 기준 소유자명
String step1RprsvOwnrIdecno = step1Record.getRprsvOwnrIdecno(); // 검사일 기준 소유자 회원번호
String step1UsgsrhldStdgCd = step1Record.getUsgsrhldStdgCd(); // 1단계 사용본거지법정동코드
// 소유자명에 "상품용" 포함 여부 체크
if (step1RprsOwnrNm != null && step1RprsOwnrNm.contains("상품용")) {
log.debug("[이첩-미필] 소유자명에 '상품용' 포함 - 차량번호: {}, 소유자명: {}", vhclno, step1RprsOwnrNm);
return null;
}
log.info("[이첩-미필] 1단계 - 소유자명: {}, 법정동코드: {}", step1RprsOwnrNm, step1UsgsrhldStdgCd);
// 2단계: 자동차기본정보(차량번호, 부과일자=검사유효기간 - 90일)
LocalDate inspVldPrdEndDate = DateUtil.parseDate(inspVldPrdEnd);
LocalDate step2Date = inspVldPrdEndDate.minusDays(90);
String step2Ymd = step2Date.format(DATE_FORMATTER);
log.info("[이첩-미필] 2단계 API 호출 - 차량번호: {}, 부과일자: {}", vhclno, step2Ymd);
NewBasicRequest step2Request = createBasicRequest(vhclno, null, step2Ymd);
NewBasicResponse step2Response = apiService.getBasicInfo(step2Request);
bassMatterLogService.updateCarFfnlgTrgtIdByTxIdNewTx(step2Response, existingData.getCarFfnlgTrgtIncmpId());
if (step2Response == null || step2Response.getRecord() == null || step2Response.getRecord().isEmpty()) {
log.warn("[이첩-미필] 2단계 응답 없음 - 차량번호: {}", vhclno);
return null;
}
// 자동차기본정보 API 호출 (부과기준일 기준)
log.info("[{}-미필] 자동차기본정보 조회 - 차량번호: {}, 부과기준일: {}", transferType, vhclno, levyCrtrYmd);
NewBasicResponse.Record step2Record = step2Response.getRecord().get(0);
String step2RprsOwnrNm = step2Record.getRprsOwnrNm(); // 2단계 소유자명
String step2RprsvOwnrIdecno = step2Record.getRprsvOwnrIdecno(); // 2단계 소유자 회원번호
NewBasicRequest request = createBasicRequest(vhclno, null, levyCrtrYmd);
NewBasicResponse response = apiService.getBasicInfo(request);
log.info("[이첩-미필] 2단계 - 소유자명: {}", step2RprsOwnrNm);
// API 응답에 CAR_FFNLG_TRGT_INCMP_ID 업데이트
bassMatterLogService.updateCarFfnlgTrgtIdByTxIdNewTx(response, existingData.getCarFfnlgTrgtIncmpId());
// 2단계 비교: 1단계 소유자 = 2단계 소유자 동일 체크
if (step1RprsvOwnrIdecno != null && step1RprsvOwnrIdecno.equals(step2RprsvOwnrIdecno)) {
log.debug("[이첩-미필] 1단계와 2단계 소유자 동일 - 차량번호: {}, 소유자: {}", vhclno, step1RprsOwnrNm);
return null;
}
// 3단계: 자동차기본정보(차량번호, 부과일자=오늘)
String step3Ymd = LocalDate.now().format(DATE_FORMATTER);
if (response == null || response.getRecord() == null || response.getRecord().isEmpty()) {
log.warn("[{}-미필] 응답 없음 - 차량번호: {}", transferType, vhclno);
log.info("[이첩-미필] 3단계 API 호출 - 차량번호: {}, 부과일자: {}", vhclno, step3Ymd);
NewBasicRequest step3Request = createBasicRequest(vhclno, null, step3Ymd);
NewBasicResponse step3Response = apiService.getBasicInfo(step3Request);
bassMatterLogService.updateCarFfnlgTrgtIdByTxIdNewTx(step3Response, existingData.getCarFfnlgTrgtIncmpId());
if (step3Response == null || step3Response.getRecord() == null || step3Response.getRecord().isEmpty()) {
log.warn("[이첩-미필] 3단계 응답 없음 - 차량번호: {}", vhclno);
return null;
}
NewBasicResponse.Record record = response.getRecord().get(0);
String usgsrhldStdgCd = record.getUsgsrhldStdgCd(); // 사용본거지법정동코드
NewBasicResponse.Record step3Record = step3Response.getRecord().get(0);
String step3RprsOwnrNm = step3Record.getRprsOwnrNm(); // 3단계 소유자명
String step3RprsvOwnrIdecno = step3Record.getRprsvOwnrIdecno(); // 3단계 소유자 회원번호
log.info("[{}-미필] API 응답 - 사용본거지법정동코드: {}", transferType, usgsrhldStdgCd);
log.info("[이첩-미필] 3단계 - 소유자명: {}", step3RprsOwnrNm);
// 3단계 비교: 1단계 소유자 = 3단계 소유자 동일 체크
if (step1RprsvOwnrIdecno != null && step1RprsvOwnrIdecno.equals(step3RprsvOwnrIdecno)) {
log.debug("[이첩-미필] 1단계와 3단계 소유자 동일 - 차량번호: {}, 소유자: {}", vhclno, step1RprsOwnrNm);
return null;
}
// 법정동코드 유효성 검사
if (usgsrhldStdgCd == null || usgsrhldStdgCd.length() < 4) {
log.debug("[{}-미필] 법정동코드 없음 - 차량번호: {}", transferType, vhclno);
if (step1UsgsrhldStdgCd == null || step1UsgsrhldStdgCd.length() < 4) {
log.debug("[이첩-미필] 법정동코드 없음 - 차량번호: {}", vhclno);
return null;
}
// 세션에서 사용자 정보 조회
LoginUserVO userInfo = SessionUtil.getLoginUser();
if (userInfo == null || userInfo.getOrgCd() == null) {
log.debug("[{}-미필] 사용자 정보 없음", transferType);
log.debug("[이첩-미필] 사용자 정보 없음");
return null;
}
// 법정동코드 앞 4자리 vs 사용자 조직코드 앞 4자리 비교
String legalDong4 = usgsrhldStdgCd.substring(0, 4);
String legalDong4 = step1UsgsrhldStdgCd.substring(0, 4);
String userOrgCd = userInfo.getOrgCd();
String userOrg4 = userOrgCd.length() >= 4 ? userOrgCd.substring(0, 4) : userOrgCd;
if (legalDong4.equals(userOrg4)) {
log.debug("[{}-미필] 법정동코드 일치 - 차량번호: {}, 법정동: {}, 조직: {}",
transferType, vhclno, legalDong4, userOrg4);
log.debug("[이첩-미필] 법정동코드 일치 - 차량번호: {}, 법정동: {}, 조직: {}",
vhclno, legalDong4, userOrg4);
return null;
}
log.info("[{}-미필] 법정동코드 불일치! 차량번호: {}, 법정동: {}, 조직: {}",
transferType, vhclno, legalDong4, userOrg4);
log.info("[이첩-미필] 법정동코드 불일치! 차량번호: {}, 법정동: {}, 조직: {}",
vhclno, legalDong4, userOrg4);
// 시군구 코드 및 시군구명 조회
String sggCd = usgsrhldStdgCd.length() >= 5 ? usgsrhldStdgCd.substring(0, 5) : usgsrhldStdgCd;
String sggCd = step1UsgsrhldStdgCd.length() >= 5 ? step1UsgsrhldStdgCd.substring(0, 5) : step1UsgsrhldStdgCd;
String sggNm = carFfnlgTrgtIncmpMapper.selectSggNmBySggCd(sggCd);
if (sggNm == null || sggNm.isEmpty()) {
log.warn("[{}-미필] 시군구명 조회 실패 - 시군구코드: {}", transferType, sggCd);
log.warn("[이첩-미필] 시군구명 조회 실패 - 시군구코드: {}", sggCd);
sggNm = "";
}
// 비고 생성
String rmrk;
if ("이첩-1".equals(transferType)) { // 5번
rmrk = ComparisonOmRemarkBuilder.buildTransferCase1Remark(sggNm, userOrg4);
} else { // 7번
rmrk = ComparisonOmRemarkBuilder.buildTransferCase2Remark(sggNm, legalDong4);
}
// 비고 생성 (이첩-2 케이스)
String rmrk = ComparisonOmRemarkBuilder.buildTransferCase2Remark(sggNm, legalDong4);
// DB 업데이트
existingData.setCarBassMatterInqireId(response.getGeneratedId());
existingData.setCarBassMatterInqireId(step1Response.getGeneratedId());
existingData.setTaskPrcsSttsCd(TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_03_TRANSFER);
existingData.setTaskPrcsYmd(LocalDate.now().format(DATE_FORMATTER));
existingData.setCarBscMttrInqFlnm(existingData.getOwnrNm());
existingData.setCarBscMttrInqFlnm(step1RprsOwnrNm);
existingData.setCarBscMttrInqSggCd(sggCd);
existingData.setCarBscMttrInqSggNm(sggNm);
existingData.setRmrk(rmrk);
int updateCount = carFfnlgTrgtIncmpMapper.update(existingData);
if (updateCount == 0) {
throw new MessageException(String.format("[%s-미필] 업데이트 실패: %s", transferType, vhclno));
throw new MessageException(String.format("[이첩-미필] 업데이트 실패: %s", vhclno));
}
log.info("[{}-미필] 처리 완료! 차량번호: {}, 시군구: {}({})", transferType, vhclno, sggNm, sggCd);
log.info("[이첩-미필] 처리 완료! 차량번호: {}, 시군구: {}({})", vhclno, sggNm, sggCd);
return TaskPrcsSttsConstants.TASK_PRCS_STTS_CD_03_TRANSFER;
} catch (Exception e) {

Loading…
Cancel
Save