외부호출만 있는 프로젝트로 변경 작업 진행중...

main
박성영 4 weeks ago
parent e128e126be
commit 704083da07

@ -1,123 +0,0 @@
- yml flag 값에 따라, 차량기본정보를 구 or 신 api 호출할지 결정
- 구 or 신 api 통일한 model object 값으로 처리될수 있도록 통합 model 필요 및 자동변환 처리
- 구 : 자동차기본정보 api, 신 : 자동차기본정보 api, 자동차등록원부(갑)
- 통합 오브젝트는 자동차기본정보(구,신) 만 필요
* 순서 중요!!
* 조건에 걸리는 순간 다음 차량번호 비교 진행
* 현재는 하나의 api 를 호출해서 비교로직 진행 -> 수정후에는 각 비교 로직별로 api 호출!!
-- 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. 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' --명의이전 코드)
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;
/*
-- 이첩-1 [차동차기본정보]
1. TB_CAR_FFNLG_TRGT.검사일 기준 api 호출
2. 아래 로직 참조
/**
* 이첩 조건1: 1. TB_CAR_FFNLG_TRGT.DAYCNT(textFile 일수) <= 115 이내, 법정동코드 불일치
* 사용본거지법정동코드 앞 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;
}
3. table 비고 : 조건에 걸린 - "서울시 용산구/ 이경호, 검사일사용본거지, [검사대상, 사용자 조직코드 앞 4자리 및 법정동명]"
-- 이첩-2 [차량기본정보 필요]
1. TB_CAR_FFNLG_TRGT.DAYCNT(textFile 일수) > 115
2. 검사일 기준 api 호출
3. (TB_CAR_FFNLG_TRGT.검사종료일자 + 115일) 기준 api 호출
4. 2 api<->3 api 자동차기본정보 : 사용본거지법정동코드 앞 4자리 다를경우
5. TB_CAR_FFNLG_TRGT 비고 : 조건에 걸린 - "전라남도 순천시 / 김정대, 115일 도래지, [2개의 api 법정동코드 및 법정동명]"
*/

@ -11,6 +11,11 @@
- 구 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 기준
### 처리 규칙
@ -172,16 +177,16 @@ private boolean checkTransferCondition_LegalDongMismatch(
[2. DAYCNT 확인]
├─ (> 115) ──> [이첩-2: 115일 도래지 기준]
├─ (> 115) ──> [이첩-2: 부과기준일 = 검사종료일자 + 115일]
└─ (<= 115) ──> [이첩-1: 검사일 기준]
[법정동코드 비교]
├─ (불일치) ──> [비고 기록] ──> [다음 차량]
└─ (일치) ──> [다음 차량]
└─ (<= 115) ──> [이첩-1: 부과기준일 = 검사일]
[법정동코드 비교] (공통)
├─ (불일치) ──> [비고 기록] ──> [다음 차량]
└─ (일치) ──> [다음 차량]
```
---

@ -88,6 +88,7 @@ public class RestTemplateConfig {
* Rate Limiting
* Guava RateLimiter
*/
@SuppressWarnings("UnstableApiUsage")
private static class RateLimitInterceptor implements ClientHttpRequestInterceptor {
private final RateLimiter rateLimiter;
private final double permitsPerSecond;

@ -19,9 +19,8 @@
<li class="th">조회 구분</li>
<li>
<select id="inqryType" name="inqryType" class="input" style="width: 250px;">
<option value="integrated">자동차 통합 조회 (기본+등록원부)</option>
<option value="basic">자동차 기본사항 조회 (단독)</option>
<option value="ledger">자동차 등록원부(갑) 조회 (단독)</option>
<option value="basic">자동차 기본사항 조회</option>
<option value="ledger">자동차 등록원부(갑) 조회</option>
</select>
</li>
<li class="th"><span class="essential">*</span> 차량번호</li>
@ -48,7 +47,7 @@
<ul class="rig2">
<li><button type="button" id="search_btn" class="newbtnss bg1">조회</button></li>
<li><button type="button" id="reset_btn" class="newbtnss bg5" style="margin-left: 5px;">초기화</button></li>
<li><button type="button" id="sample1_btn" class="newbtnss bg3" style="margin-left: 5px;">샘플1 (기본정보+등록원부)</button></li>
<li><button type="button" id="sample1_btn" class="newbtnss bg3" style="margin-left: 5px;">샘플1 (기본정보)</button></li>
<li><button type="button" id="sample2_btn" class="newbtnss bg3" style="margin-left: 5px;">샘플2 (등록원부)</button></li>
</ul>
</div>
@ -189,12 +188,10 @@
var VehicleInquiry = {
/**
* 샘플 데이터 1: 통합 조회 (기본정보 + 등록원부)
* 샘플 데이터 1: 기본정보 조회
*/
getSampleData1: function() {
return {
vhrno: "12가3456",
basicInfo: {
prye: "2021",
registDe: "20210315",
ersrRegistSeCode: "",
@ -279,101 +276,6 @@
frstMxmmLdg: "",
fuelCnsmpRt: "11.2",
elctyCmpndFuelCnsmpRt: ""
},
ledgerInfo: {
cntcResultCode: "00",
cntcResultDtls: "정상",
ledgerGroupNo: "1234567890",
ledgerIndvdlzNo: "001",
vhmno: "V202103150001",
vhrno: "12가3456",
vin: "KMHCT41CBEU123456",
vhctyAsortCode: "A01",
vhctyAsortNm: "승용",
cnm: "쏘나타 DN8 2.5 가솔린",
colorCode: "01",
colorNm: "검정",
nmplStndrdCode: "01",
nmplStndrdNm: "일반(소형)",
prposSeCode: "B",
prposSeNm: "비사업용",
mtrsFomNm: "G2.5 GDI",
fomNm: "DN8",
acqsAmount: "28500000",
registDetailCode: "01",
registDetailNm: "신규등록",
frstRegistDe: "20210315",
caagEndde: "20341231",
prye: "2021",
spmnno1: "DN82021001",
spmnno2: "",
yblMd: "20210201",
trvlDstnc: "45320",
insptValidPdBgnde: "20240301",
insptValidPdEndde: "20250228",
chckValidPdBgnde: "20231101",
chckValidPdEndde: "20241031",
registReqstSeNm: "신규등록",
frstRegistRqrcno: "2021031500001",
nmplCsdyRemnrDe: "",
nmplCsdyAt: "N",
bssUsePd: "",
octhtErsrPrvntcNticeDe: "",
ersrRegistDe: "",
ersrRegistSeCode: "",
ersrRegistSeNm: "정상",
mrtgcnt: "0",
vhclecnt: "0",
stmdcnt: "0",
adres1: "11000",
adresNm1: "서울특별시 강남구 테헤란로 123 (역삼동)",
adres: "11000",
adresNm: "서울특별시 강남구 테헤란로 123 (역삼동) 101동 1002호",
indvdlBsnmAt: "1",
telno: "010-1234-5678",
mberNm: "홍길동",
mberSeCode: "01",
mberSeNo: "800101-1234567",
taxxmptTrgterSeCode: "",
taxxmptTrgterSeCodeNm: "",
cntMatter: "",
emdNm: "역삼동",
prvntccnt: "0",
xportFlflAtSttemntDe: "",
partnRqrcno: "",
record: [
{
mainchk: "Y",
changeJobSeCode: "01",
mainno: "001",
subno: "001",
dtls: "신규등록 - 차량번호: 12가3456, 소유자: 홍길동",
rqrcno: "2021031500001",
vhmno: "V202103150001",
ledgerGroupNo: "1234567890",
ledgerIndvdlzNo: "001",
gubunNm: "신규",
changeDe: "20210315",
detailSn: "001",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "02",
mainno: "001",
subno: "002",
dtls: "주소변경 - 이전: 서울특별시 강남구 역삼동 123 -> 변경: 서울특별시 강남구 테헤란로 123",
rqrcno: "2022012000001",
vhmno: "V202103150001",
ledgerGroupNo: "1234567890",
ledgerIndvdlzNo: "001",
gubunNm: "변경",
changeDe: "20220120",
detailSn: "002",
flag: "N"
}
]
}
};
},
@ -548,11 +450,9 @@
$(".ledgerField").hide();
// 조회 구분에 따른 필드 표시
if (inqryType === "integrated" || inqryType === "basic") {
if (inqryType === "basic") {
$(".basicField").show();
}
if (inqryType === "ledger") {
} else if (inqryType === "ledger") {
$(".ledgerField").show();
}
},
@ -573,57 +473,13 @@
}
// 조회 타입에 따라 처리
if (inqryType === "integrated") {
self.callIntegratedApi();
} else if (inqryType === "basic") {
if (inqryType === "basic") {
self.callBasicApi();
} else if (inqryType === "ledger") {
self.callLedgerApi();
}
},
/**
* 통합 조회 API 호출
*/
callIntegratedApi: function() {
var self = this;
var vhrno = $.trim($("#vhrno").val());
var levyStdde = $.trim($("#levyStdde").val()).replace(/-/g, '');
var vin = $.trim($("#vin").val());
// BasicRequest의 @JsonProperty에 맞춰 대문자 키 사용
// INQIRE_SE_CODE는 VmisRequestEnricher에서 자동 설정됨
var params = {
VHRNO: vhrno,
LEVY_STDDE: levyStdde
};
if (vin) {
params.VIN = vin;
}
$.ajax({
url: '/carInspectionPenalty/callApi/getIntegratedInfo.do',
type: 'POST',
contentType: 'application/json; charset=UTF-8',
data: JSON.stringify(params),
dataType: 'json',
success: function(response) {
if (response.success) {
console.log("통합 조회 성공:", response.data);
self.displayIntegratedResult(response.data);
$("#btnResultClose").show();
} else {
alert("조회 실패\n\n" + (response.message || "알 수 없는 오류가 발생했습니다."));
$("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
}
},
error: function(xhr, status, error) {
$("#resultContent").html('<div class="result-empty">조회 중 오류가 발생했습니다.</div>');
}
});
},
/**
* 기본사항 조회 API 호출
*/
@ -711,28 +567,6 @@
});
},
/**
* 통합 조회 결과 표시
*/
displayIntegratedResult: function(data) {
if (!data || (!data.basicInfo && !data.ledgerInfo)) {
$("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
return;
}
var html = '';
if (data.basicInfo) {
html += this.getBasicInfoHtml(data.basicInfo);
}
if (data.ledgerInfo) {
html += this.getLedgerInfoHtml(data.ledgerInfo);
}
$("#resultContent").html(html);
},
/**
* 기본사항 조회 결과 표시
*/
@ -1018,11 +852,11 @@
}
});
// 샘플1 버튼 클릭 이벤트 (기본정보 + 등록원부)
// 샘플1 버튼 클릭 이벤트 (기본정보)
$("#sample1_btn").on('click', function() {
console.log("샘플 데이터 1 로드 (기본정보 + 등록원부)");
console.log("샘플 데이터 1 로드 (기본정보)");
var sampleData = self.getSampleData1();
self.displayIntegratedResult(sampleData);
self.displayBasicResult(sampleData);
$("#btnResultClose").show();
});

Loading…
Cancel
Save