|
|
|
|
@ -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;
|
|
|
|
|
|
|
|
|
|
|