diff --git a/docs/자동차과태료_비교로직_정리.md b/docs/자동차과태료_비교로직_정리.md index 5acfca6..d85e359 100644 --- a/docs/자동차과태료_비교로직_정리.md +++ b/docs/자동차과태료_비교로직_정리.md @@ -3,30 +3,14 @@ ## 개요 자동차 과태료 부과 대상을 검증하기 위한 비교 로직 정의서입니다. +CarFfnlgTrgtServiceImpl.compareWithApi 메소드안에 해당 로직이 들어가야함 +기존에 사용하던 비교로직 서비스 : src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/ComparisonServiceImpl.java +그러나 이젠 아예 비교로직이 틀어져서 compareWithApi 메소드 포함, ComparisonServiceImpl 서비스 자체를 처음부터 다시 개발해도 무방. +기존꺼 활용하기보다는 아예 재구축 검토 ### 기본 설정 +- 비교로직에 사용되는 API는 ExternalVehicleApiServiceImpl.getBasicInfo, getLedgerInfo 호출!! -- **API 선택**: 각 api별 YML flag 값에 따라 구/신 API 호출 결정 -- **통합 모델**: 구/신 API 응답을 통일된 model object로 처리 - - 구 API: 자동차기본정보 API - - 신 API: 자동차기본정보 API, 자동차등록원부(갑) -- **통합 오브젝트**: 자동차기본정보(구, 신)만 필요 -- 자동차등록원부(갑) 이 신규 api 만 되도록 변경되면서 구조 필드 등 변경됨 - D:\workspace\git\VMIS-interface\src\main\java\com\vmis\interfaceapp\model\ledger\NewLedgerRequest.java - D:\workspace\git\VMIS-interface\src\main\java\com\vmis\interfaceapp\model\ledger\NewLedgerResponse.java -- 외부호출 url 변경 : /api/v1/vehicles/old-basic, /api/v1/vehicles/new-basic, /api/v1/vehicles/new-ledger -- 외부호출되는 프로젝트 : D:\workspace\git\VMIS-interface, jdk1.8 springboot 설정, profiles : prd 기준 -- 외부호출되는 프로젝트에서 return 을 요청과 응답 모두 포함해서 던져주도록 변경 -- ApiResponse 생성 시 txId 전달 -```text - 응답 예시 - - { - "txId": "yyyyMMddHHmmssSSS12345678", - "request": { "data": [...] }, - "response": { "data": [...] } - } -``` ### 처리 규칙 @@ -54,7 +38,7 @@ ```java // 조건 1: 소유자명에 '상품용' 포함 여부 -api.MBER_NM.contains("상품용") +tb_car_ffnlg_trgt.OWNR_NM.contains("상품용") // 조건 2: 갑부 상세 목록에서 명의이전 이력 확인 for (LedgerRecord record : 갑부상세List) { @@ -209,3 +193,63 @@ private boolean checkTransferCondition_LegalDongMismatch( 3. **조기 종료**: 조건 충족 시 즉시 다음 차량으로 이동 4. **비고 컬럼**: 각 조건별 정해진 형식으로 기록 5. **법정동코드 길이 검증**: 최소 4자리 이상 필요 + + + + +## 내가 text 로 정리한 내용 + +-- 1. 상품용 [자동차등록원부(갑) 필요] +----- 필요한 api 정보 +1. 자동차기본정보 api 호출 [차량번호, 부과일자:검사일] -> response.차대번호, response.소유자명 +2. 자동차기본정보 api 호출 [1.response.차대번호, 부과일자:오늘일자] -> response.차량번호, response.성명, response.민원인주민번호, response.민원인법정동코드 +3. 자동차등록원본(갑) api 호출 [2.response.차량번호, 2.response.성명, 2.response.민원인주민번호, 2.response.민원인법정동코드] + -- 비교로직에 사용될 api response 정보 +---------------------------------- +1. TB_CAR_FFNLG_TRGT.검사일 기준 api 호출 +2. tb_car_ffnlg_trgt.OWNR_NM like ‘%상품용%’ +3. (갑부 상세(LedgerRecord) List.CHG_YMD between TB_CAR_FFNLG_TRGT.유효기간만료일 and TB_CAR_FFNLG_TRGT.검사종료일자) and (갑부 상세 List.CHANGE_JOB_SE_CODE = '11' --명의이전 코드) +4. TB_CAR_FFNLG_TRGT 비고 : 조건에 걸린 - "[상품용] 갑부정보" + + +-- 2. 이첩1, 2 병합로직 +-- 부과기준일 구하는 부분만 다르고 나머지 법정도코드 비교로직은 동일, 대신 TB_CAR_FFNLG_TRGT 비고 컬럼에 각기 알맞는 value 값 넣어줘야함. +if(TB_CAR_FFNLG_TRGT.DAYCNT(textFile 일수) > 115){ + 부과기준일 = (TB_CAR_FFNLG_TRGT.검사종료일자 + 115일) + TB_CAR_FFNLG_TRGT 비고 : 조건에 걸린 - "전라남도 순천시 / 김정대, 115일 도래지, [2개의 api 법정동코드 및 법정동명]" + 이첩-2 +}else{ + 부과기준일 = (TB_CAR_FFNLG_TRGT.검사일자) + table 비고 : 조건에 걸린 - "서울시 용산구/ 이경호, 검사일사용본거지, [검사대상, 사용자 조직코드 앞 4자리 및 법정동명]" + 이첩-1 +} +아래는 이첩1,2 모두 공용 +자동차기본정보 (부과기준일, 차량번호)api call, +// 법정동코드 유효성 검사 +if (useStrnghldLegaldongCode == null || useStrnghldLegaldongCode.length() < 4) { + log.debug("[이첩][조건1] 법정동코드 없음. 차량번호: {}", vhclno); + return false; +} + +// 사용자 정보 조회 +SystemUserVO userInfo = userMapper.selectUser(userId); +if (userInfo == null || userInfo.getOrgCd() == null) { + log.debug("[이첩][조건1] 사용자 정보 없음. 사용자ID: {}", userId); + return false; +} + +// 법정동코드 앞 4자리 vs 사용자 조직코드 앞 4자리 비교 +String legalDong4 = useStrnghldLegaldongCode.substring(0, 4); +String userOrgCd = userInfo.getOrgCd(); +String userOrg4 = userOrgCd.length() >= 4 ? userOrgCd.substring(0, 4) : userOrgCd; + +if (legalDong4.equals(userOrg4)) { + log.debug("[이첩][조건1] 법정동코드 일치. 차량번호: {}, 법정동: {}, 조직: {}", + vhclno, legalDong4, userOrg4); + return false; +} + +log.info("[이첩][조건1] 법정동코드 불일치! 차량번호: {}, 법정동: {}, 조직: {}", + vhclno, legalDong4, userOrg4); +return true; +