diff --git a/docs/자동차과태료 비교로직 정리.md b/docs/자동차과태료 비교로직 정리.md deleted file mode 100644 index 81df849..0000000 --- a/docs/자동차과태료 비교로직 정리.md +++ /dev/null @@ -1,152 +0,0 @@ -# 자동차 과태료 비교 로직 정리 - -## 개요 - -### 중요 사항 -- ⚠️ **순서가 중요합니다!** -- 조건에 걸리는 순간 다음 차량번호 비교를 진행합니다. - -### 로직 변경 사항 - -#### 변경 전 -- 하나의 API를 호출해서 비교 로직 진행 - -#### 변경 후 -1. **기본 호출**: `TB_CAR_FFNLG_TRGT.검사일` 기준으로 API 호출 (기본정보 + 갑부정보) -2. **추가 호출**: 각 비교 로직마다 필요한 API 추가 호출 - - 차량기본정보 - - 갑부정보 - - 기본정보 + 갑부정보 - -**예시**: 이첩-2의 경우, `(TB_CAR_FFNLG_TRGT.검사종료일자 + 115일)` 기준으로 차량기본정보 API 추가 호출 - ---- - -## 비교 로직 상세 - -### 1. 상품용 검증 [차량기본정보 필요] - -#### 조건 -1. `TB_CAR_FFNLG_TRGT.검사일` 기준 API 호출 -2. `api.MBER_NM like '%상품용%'` -3. 갑부 상세(LedgerRecord) 리스트에서 다음 조건 확인: - ``` - (List.CHG_YMD between TB_CAR_FFNLG_TRGT.유효기간만료일 and TB_CAR_FFNLG_TRGT.검사종료일자) - AND - (List.CHANGE_JOB_SE_CODE = '11') -- 명의이전 코드 - ``` - -#### 처리 결과 -- **TB_CAR_FFNLG_TRGT.비고**: `"[상품용] 갑부정보"` - ---- - -### 2. 이첩-1 [차량등록원부(갑) 필요] - -#### 조건 -1. `TB_CAR_FFNLG_TRGT.검사일` 기준 API 호출 -2. 법정동코드 불일치 검증 - -#### 검증 로직 (Java) - -```java -/** - * 이첩 조건1: 법정동코드 불일치 - * 사용본거지법정동코드 앞 4자리 != 사용자 조직코드 앞 4자리 - */ -private boolean checkTransferCondition1_LegalDongMismatch( - BasicResponse.Record basicInfo, - String userId, - String vhclno -) { - String useStrnghldLegaldongCode = basicInfo.getUseStrnghldLegaldongCode(); - - // 법정동코드 유효성 검사 - 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; -} -``` - -#### 처리 결과 -- **TB_CAR_FFNLG_TRGT.비고**: `"서울시 용산구 / 이경호, 검사일사용본거지, [검사대상, 사용자 조직코드 앞 4자리 및 법정동명]"` - ---- - -### 3. 이첩-2 [차량기본정보 필요] - -#### 조건 -1. `TB_CAR_FFNLG_TRGT.DAYCNT` (textFile 일수) > 115 -2. **검사일 기준** API 호출 -3. **(검사종료일자 + 115일) 기준** API 호출 (추가) -4. 2번 API와 3번 API의 자동차기본정보 비교 - - **사용본거지법정동코드 앞 4자리**가 다를 경우 - -#### 처리 결과 -- **TB_CAR_FFNLG_TRGT.비고**: `"전라남도 순천시 / 김정대, 115일 도래지, [2개의 API 법정동코드 및 법정동명]"` - ---- - -## 데이터 흐름도 - -``` -TB_CAR_FFNLG_TRGT (과태료 대상) - ↓ -검사일 기준 API 호출 (기본정보 + 갑부정보) - ↓ -┌─────────────┬─────────────┬─────────────┐ -│ 상품용 │ 이첩-1 │ 이첩-2 │ -│ 검증 로직 │ 검증 로직 │ 검증 로직 │ -└─────────────┴─────────────┴─────────────┘ - ↓ ↓ ↓ -조건 만족 시 비고 업데이트 → 다음 차량번호 처리 -``` - ---- - -## 핵심 필드 매핑 - -| 테이블 | 필드명 | 설명 | -|--------|--------|------| -| TB_CAR_FFNLG_TRGT | 검사일 | API 호출 기준일 (기본) | -| TB_CAR_FFNLG_TRGT | 검사종료일자 | 이첩-2에서 +115일 계산에 사용 | -| TB_CAR_FFNLG_TRGT | 유효기간만료일 | 상품용 검증 기간 시작일 | -| TB_CAR_FFNLG_TRGT | DAYCNT | 일수 (이첩-2 조건) | -| TB_CAR_FFNLG_TRGT | 비고 | 검증 결과 저장 | -| API 기본정보 | MBER_NM | 회원명 (상품용 검증) | -| API 기본정보 | useStrnghldLegaldongCode | 사용본거지법정동코드 (이첩 검증) | -| API 갑부 상세 | CHG_YMD | 변경일자 (상품용 기간 검증) | -| API 갑부 상세 | CHANGE_JOB_SE_CODE | 변경작업구분코드 (명의이전: 11) | -| 사용자 정보 | OrgCd | 조직코드 (이첩-1 검증) | - ---- - -## 주의사항 - -1. **순차 처리**: 각 차량번호는 조건에 걸리는 즉시 다음 차량번호로 넘어갑니다. -2. **API 호출 최적화**: 기본적으로 검사일 기준 API를 호출하고, 필요시에만 추가 호출합니다. -3. **로그 기록**: 각 검증 단계마다 상세 로그를 남겨 추적 가능하도록 합니다. -4. **에러 처리**: API 호출 실패 또는 데이터 부재 시 적절한 에러 처리가 필요합니다. diff --git a/docs/자동차과태료 비교로직 정리.txt b/docs/자동차과태료 비교로직 정리.txt index 3300102..11eb8db 100644 --- a/docs/자동차과태료 비교로직 정리.txt +++ b/docs/자동차과태료 비교로직 정리.txt @@ -1,23 +1,16 @@ - - yml flag 값에 따라, 차량기본정보를 구 or 신 api 호출할지 결정 - 구 or 신 api 통일한 model object 값으로 처리될수 있도록 통합 model 필요 및 자동변환 처리 - -1. 자동차기본정보 api 호출 [차량번호, 부과일자:검사일] -> response.차대번호 -2. 자동차기본정보 api 호출 [1.response.차대번호, 부과일자:오늘일자] -> response.차량번호, response.성명, response.민원인주민번호, response.민원인법정동코드 -3. 자동차등록원본(갑) api 호출 [2.response.차량번호, 2.response.성명, 2.response.민원인주민번호, 2.response.민원인법정동코드] - -- 비교로직에 사용될 api response 정보 + - 구 : 자동차기본정보 api, 신 : 자동차기본정보 api, 자동차등록원부(갑) + - 통합 오브젝트는 자동차기본정보(구,신) 만 필요 * 순서 중요!! * 조건에 걸리는 순간 다음 차량번호 비교 진행 -* 현재는 하나의 api 를 호출해서 비교로직 진행 -> - 수정후에는 기본적으로 TB_CAR_FFNLG_TRGT.검사일 기준 api 기본정보+갑부정보 호출 - 그 이후 비교 로직당 필요한 api 추가 [차량기본정보 or 갑부정보 or 기본정보+갑부정보 각각 호출]하는 형태로 변경 - 예)이첩-2 번은 추가로 (TB_CAR_FFNLG_TRGT.검사종료일자 + 115일) 기준 차량기본정보 api 추가 호출 +* 현재는 하나의 api 를 호출해서 비교로직 진행 -> 수정후에는 각 비교 로직별로 api 호출!! --- 상품용 [자동차등록원부(갑) 필요] +-- 1. 상품용 [자동차등록원부(갑) 필요] ----- 필요한 api 정보 1. 자동차기본정보 api 호출 [차량번호, 부과일자:검사일] -> response.차대번호, response.소유자명 2. 자동차기본정보 api 호출 [1.response.차대번호, 부과일자:오늘일자] -> response.차량번호, response.성명, response.민원인주민번호, response.민원인법정동코드 @@ -30,16 +23,18 @@ 4. TB_CAR_FFNLG_TRGT 비고 : 조건에 걸린 - "[상품용] 갑부정보" -이첩 1,2 병합로직 -if(TB_CAR_FFNLG_TRGT.DAYCNT(textFile 일수) > 115) +-- 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{ +}else{ 부과기준일 = (TB_CAR_FFNLG_TRGT.검사일자) table 비고 : 조건에 걸린 - "서울시 용산구/ 이경호, 검사일사용본거지, [검사대상, 사용자 조직코드 앞 4자리 및 법정동명]" 이첩-1 } +아래는 이첩1,2 모두 공용 자동차기본정보 (부과기준일, 차량번호)api call, // 법정동코드 유효성 검사 if (useStrnghldLegaldongCode == null || useStrnghldLegaldongCode.length() < 4) {