소스 정리

main
박성영 4 weeks ago
parent 704083da07
commit 05cbaab436

@ -55,16 +55,22 @@ public class VehicleInquiryController {
log.info("조회구분코드: {}", request.getInqireSeCode());
log.info("차대번호: {}", request.getVin());
// 입력값 검증
if (!StringUtils.hasText(request.getVhrno())) {
log.warn("차량번호가 입력되지 않았습니다.");
return ApiResponseUtil.error("차량번호를 입력해주세요.");
// 입력값 검증 - 부과기준일 필수
if (!StringUtils.hasText(request.getLevyStdde())) {
log.warn("부과기준일이 입력되지 않았습니다.");
return ApiResponseUtil.error("부과기준일을 입력해주세요.");
}
// 입력값 검증 - 차량번호 또는 차대번호 중 하나 필수
if (!StringUtils.hasText(request.getVhrno()) && !StringUtils.hasText(request.getVin())) {
log.warn("차량번호 또는 차대번호가 입력되지 않았습니다.");
return ApiResponseUtil.error("차량번호 또는 차대번호 중 하나를 입력해주세요.");
}
// 차량 기본정보 조회
BasicResponse response = service.getBasicInfo(request);
log.info("자동차 기본사항 조회 성공 - 차량번호: {}", request.getVhrno());
log.info("자동차 기본사항 조회 성공 - 차량번호: {}, 차대번호: {}", request.getVhrno(), request.getVin());
log.info("========== 자동차 기본사항 조회 완료 ==========");
return ApiResponseUtil.success(response, "자동차 기본사항 조회가 완료되었습니다.");
@ -84,13 +90,26 @@ public class VehicleInquiryController {
log.info("요청 차량번호: {}", request.getVhrno());
log.info("조회구분코드: {}", request.getInqireSeCode());
log.info("민원인성명: {}", request.getCpttrNm());
log.info("민원인주민번호: {}", request.getCpttrIhidnum() != null ? "********" : null);
// 입력값 검증
// 입력값 검증 - 차량번호 필수
if (!StringUtils.hasText(request.getVhrno())) {
log.warn("차량번호가 입력되지 않았습니다.");
return ApiResponseUtil.error("차량번호를 입력해주세요.");
}
// 입력값 검증 - 소유자명 필수
if (!StringUtils.hasText(request.getCpttrNm())) {
log.warn("소유자명이 입력되지 않았습니다.");
return ApiResponseUtil.error("소유자명을 입력해주세요.");
}
// 입력값 검증 - 주민번호 필수
if (!StringUtils.hasText(request.getCpttrIhidnum())) {
log.warn("주민번호가 입력되지 않았습니다.");
return ApiResponseUtil.error("주민번호를 입력해주세요.");
}
// 차량 등록원부 조회
LedgerResponse response = service.getLedgerInfo(request);

@ -23,32 +23,51 @@
<option value="ledger">자동차 등록원부(갑) 조회</option>
</select>
</li>
<li class="th"><span class="essential">*</span> 차량번호</li>
</ul>
<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>
</ul>
<!-- 기본정보 조회 조건 -->
<ul id="basicSearchArea" class="lef2">
<li class="th"><span class="essential">*</span> 부과기준일</li>
<li>
<input type="text" id="vhrno" name="vhrno" class="input" style="width: 150px;" placeholder="예: 12가3456" maxlength="10" autocomplete="off"/>
</li>
<li class="th basicField" style="display: inline;">부과기준일</li>
<li class="basicField" style="display: inline;">
<input type="text" id="levyStdde" name="levyStdde" class="input datepicker calender" style="width: 150px;" autocomplete="off" value="${dateUtil:getCurrentDateTime('yyyy-MM-dd')}"/>
</li>
<li class="th basicField" style="display: inline;">차대번호</li>
<li class="basicField" style="display: inline;">
<li class="th">차량번호</li>
<li>
<input type="text" id="vhrno" name="vhrno" class="input" style="width: 150px;" placeholder="예: 12가3456" maxlength="10" autocomplete="off"/>
</li>
<li class="th">차대번호</li>
<li>
<input type="text" id="vin" name="vin" class="input" style="width: 200px;" placeholder="예: KMHAB812345678901" maxlength="17" autocomplete="off"/>
</li>
<li class="th ledgerField" style="display: none;">민원인성명</li>
<li class="ledgerField" style="display: none;">
<input type="text" id="cpttrNm" name="cpttrNm" class="input" style="width: 150px;" placeholder="민원인성명" autocomplete="off"/>
</ul>
<!-- 등록원부 조회 조건 -->
<ul id="ledgerSearchArea" class="lef2" style="display: none;">
<li class="th"><span class="essential">*</span> 차량번호</li>
<li>
<input type="text" id="ledgerVhrno" name="ledgerVhrno" class="input" style="width: 150px;" placeholder="예: 12가3456" maxlength="10" autocomplete="off"/>
</li>
<li class="th ledgerField" style="display: none;">민원인주민번호</li>
<li class="ledgerField" style="display: none;">
<input type="text" id="cpttrIhidnum" name="cpttrIhidnum" class="input" style="width: 200px;" placeholder="민원인주민번호" maxlength="13" autocomplete="off"/>
<li class="th"><span class="essential">*</span> 소유자명</li>
<li>
<input type="text" id="cpttrNm" name="cpttrNm" class="input" style="width: 150px;" placeholder="소유자명" autocomplete="off"/>
</li>
<li class="th"><span class="essential">*</span> 주민번호(회원번호)</li>
<li>
<input type="text" id="cpttrIhidnum" name="cpttrIhidnum" class="input" style="width: 150px;" placeholder="주민번호" maxlength="13" autocomplete="off"/>
</li>
<li class="th">법정동코드</li>
<li>
<input type="text" id="cpttrLegaldongCode" name="cpttrLegaldongCode" class="input" style="width: 150px;" placeholder="법정동코드" maxlength="10" autocomplete="off"/>
</li>
<li class="th">내역표시</li>
<li>
<select id="detailExpression" name="detailExpression" class="input" style="width: 100px;">
<option value="1">전체내역</option>
<option value="2">현재내역</option>
</select>
</li>
</ul>
<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="sample2_btn" class="newbtnss bg3" style="margin-left: 5px;">샘플2 (등록원부)</button></li>
</ul>
</div>
<div class="gs_booking">
@ -188,272 +207,18 @@
var VehicleInquiry = {
/**
* 샘플 데이터 1: 기본정보 조회
*/
getSampleData1: function() {
return {
prye: "2021",
registDe: "20210315",
ersrRegistSeCode: "",
ersrRegistSeNm: "정상",
ersrRegistDe: "",
registDetailCode: "01",
dsplvl: "2497",
useStrnghldLegaldongCode: "1168010100",
useStrnghldAdstrdCode: "1168010100",
useStrnghldMntn: "0",
useStrnghldLnbr: "123",
useStrnghldHo: "1002",
useStrnghldAdresNm: "역삼동",
useStrnghldRoadNmCode: "116804100001",
usgsrhldUndgrndBuldSeCode: "0",
useStrnghldBuldMainNo: "123",
useStrnghldBuldSubNo: "0",
usgsrhldAdresFull: "서울특별시 강남구 테헤란로 123 (역삼동)",
mberSeCode: "01",
mberNm: "홍길동",
mberSeNo: "800101-1234567",
telno: "010-1234-5678",
ownerLegaldongCode: "1168010100",
ownerAdstrdCode: "1168010100",
ownerMntn: "0",
ownerLnbr: "123",
ownerHo: "1002",
ownerAdresNm: "역삼동",
ownerRoadNmCode: "116804100001",
ownerUndgrndBuldSeCode: "0",
ownerBuldMainNo: "123",
ownerBuldSubNo: "0",
ownerAdresFull: "서울특별시 강남구 테헤란로 123 (역삼동) 101동 1002호",
aftrVhrno: "",
useFuelCode: "G",
prposSeCode: "B",
mtrsFomNm: "G2.5 GDI",
frntVhrno: "",
vhrno: "12가3456",
vin: "KMHCT41CBEU123456",
cnm: "쏘나타 DN8 2.5 가솔린",
vhcleTotWt: "1755",
caagEndde: "20341231",
changeDe: "20240301",
vhctyAsortCode: "A01",
vhctyTyCode: "M02",
vhctySeCode: "S01",
mxmmLdg: "",
vhctyAsortNm: "승용",
vhctyTyNm: "중형",
vhctySeNm: "승용차",
frstRegistDe: "20210315",
fomNm: "DN8",
acqsDe: "20210310",
acqsEndDe: "",
yblMd: "202102",
transrRegistDe: "",
spcfRegistSttusCode: "",
colorNm: "검정",
mrtgCo: "0",
seizrCo: "0",
stmdCo: "0",
nmplCsdyAt: "N",
nmplCsdyRemnrDe: "",
originSeCode: "01",
nmplStndrdCode: "01",
acqsAmount: "28500000",
insptValidPdBgnde: "20240301",
insptValidPdEndde: "20250228",
useStrnghldGrcCode: "06234",
tkcarPscapCo: "5",
spmnno: "DN82021001",
trvlDstnc: "45320",
frstRegistRqrcno: "2021031500001",
vlntErsrPrvntcNticeDe: "",
registInsttNm: "서울강남구청",
processImprtyResnCode: "",
processImprtyResnDtls: "",
cbdLt: "4900",
cbdBt: "1860",
cbdHg: "1445",
frstMxmmLdg: "",
fuelCnsmpRt: "11.2",
elctyCmpndFuelCnsmpRt: ""
};
},
/**
* 샘플 데이터 2: 등록원부 조회 (변경 이력 포함)
*/
getSampleData2: function() {
return {
cntcResultCode: "00",
cntcResultDtls: "정상",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
vhmno: "V201909200002",
vhrno: "34나5678",
vin: "KNAGT811ABV567890",
vhctyAsortCode: "A01",
vhctyAsortNm: "승용",
cnm: "K5 DL3 2.0 가솔린",
colorCode: "02",
colorNm: "흰색",
nmplStndrdCode: "02",
nmplStndrdNm: "일반(중형)",
prposSeCode: "B",
prposSeNm: "비사업용",
mtrsFomNm: "G2.0 MPI",
fomNm: "DL3",
acqsAmount: "22000000",
registDetailCode: "01",
registDetailNm: "신규등록",
frstRegistDe: "20190920",
caagEndde: "20321231",
prye: "2019",
spmnno1: "DL32019002",
spmnno2: "LPG2021001",
yblMd: "20190801",
trvlDstnc: "89540",
insptValidPdBgnde: "20240801",
insptValidPdEndde: "20250731",
chckValidPdBgnde: "20230901",
chckValidPdEndde: "20240831",
registReqstSeNm: "신규등록",
frstRegistRqrcno: "2019092000002",
nmplCsdyRemnrDe: "",
nmplCsdyAt: "N",
bssUsePd: "",
octhtErsrPrvntcNticeDe: "",
ersrRegistDe: "",
ersrRegistSeCode: "",
ersrRegistSeNm: "정상",
mrtgcnt: "0",
vhclecnt: "0",
stmdcnt: "1",
adres1: "26000",
adresNm1: "부산광역시 해운대구 센텀중앙로 78 (우동)",
adres: "26000",
adresNm: "부산광역시 해운대구 센텀중앙로 78 (우동) 201동 505호",
indvdlBsnmAt: "1",
telno: "010-9876-5432",
mberNm: "김철수",
mberSeCode: "01",
mberSeNo: "750515-1234567",
taxxmptTrgterSeCode: "",
taxxmptTrgterSeCodeNm: "",
cntMatter: "",
emdNm: "우동",
prvntccnt: "0",
xportFlflAtSttemntDe: "",
partnRqrcno: "",
record: [
{
mainchk: "Y",
changeJobSeCode: "01",
mainno: "001",
subno: "001",
dtls: "신규등록 - 차량번호: 34나5678, 소유자: 김철수",
rqrcno: "2019092000002",
vhmno: "V201909200002",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
gubunNm: "신규",
changeDe: "20190920",
detailSn: "001",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "02",
mainno: "001",
subno: "002",
dtls: "주소변경 - 이전: 부산광역시 해운대구 해운대로 100 -> 변경: 부산광역시 해운대구 센텀중앙로 78",
rqrcno: "2020011500001",
vhmno: "V201909200002",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
gubunNm: "변경",
changeDe: "20200115",
detailSn: "002",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "02",
mainno: "001",
subno: "003",
dtls: "구조변경 - LPG 겸용 엔진으로 변경",
rqrcno: "2021063000003",
vhmno: "V201909200002",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
gubunNm: "변경",
changeDe: "20210630",
detailSn: "003",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "02",
mainno: "001",
subno: "004",
dtls: "전화번호 변경 - 이전: 010-1111-2222 -> 변경: 010-9876-5432",
rqrcno: "2022031000004",
vhmno: "V201909200002",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
gubunNm: "변경",
changeDe: "20220310",
detailSn: "004",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "03",
mainno: "001",
subno: "005",
dtls: "정기검사 합격 - 검사유효기간: 20230815 ~ 20240814",
rqrcno: "",
vhmno: "V201909200002",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
gubunNm: "검사",
changeDe: "20230815",
detailSn: "005",
flag: "N"
},
{
mainchk: "N",
changeJobSeCode: "03",
mainno: "001",
subno: "006",
dtls: "정기검사 합격 - 검사유효기간: 20240801 ~ 20250731",
rqrcno: "",
vhmno: "V201909200002",
ledgerGroupNo: "9876543210",
ledgerIndvdlzNo: "002",
gubunNm: "검사",
changeDe: "20240801",
detailSn: "006",
flag: "N"
}
]
};
},
/**
* 조회 구분 변경 시 필드 표시/숨김
* 조회 구분 변경 시 검색 영역 표시/숨김
*/
onInqryTypeChange: function() {
var inqryType = $("#inqryType").val();
// 모든 필드 초기화
$(".basicField").hide();
$(".ledgerField").hide();
// 조회 구분에 따른 필드 표시
// 조회 구분에 따른 검색 영역 표시
if (inqryType === "basic") {
$(".basicField").show();
$("#basicSearchArea").show();
$("#ledgerSearchArea").hide();
} else if (inqryType === "ledger") {
$(".ledgerField").show();
$("#basicSearchArea").hide();
$("#ledgerSearchArea").show();
}
},
@ -463,19 +228,51 @@
executeSearch: function() {
var self = this;
var inqryType = $("#inqryType").val();
var vhrno = $.trim($("#vhrno").val());
// 차량번호 검증
if (!vhrno) {
alert("차량번호를 입력해주세요.");
$("#vhrno").focus();
return;
}
// 조회 타입에 따라 처리
// 조회 타입에 따라 유효성 검사 및 처리
if (inqryType === "basic") {
// 기본정보: 부과기준일 필수, 차량번호 or 차대번호 중 하나 필수
var levyStdde = $.trim($("#levyStdde").val());
var vhrno = $.trim($("#vhrno").val());
var vin = $.trim($("#vin").val());
if (!levyStdde) {
alert("부과기준일을 입력해주세요.");
$("#levyStdde").focus();
return;
}
if (!vhrno && !vin) {
alert("차량번호 또는 차대번호 중 하나를 입력해주세요.");
$("#vhrno").focus();
return;
}
self.callBasicApi();
} else if (inqryType === "ledger") {
// 등록원부: 차량번호, 소유자명, 주민번호 필수
var ledgerVhrno = $.trim($("#ledgerVhrno").val());
var cpttrNm = $.trim($("#cpttrNm").val());
var cpttrIhidnum = $.trim($("#cpttrIhidnum").val());
if (!ledgerVhrno) {
alert("차량번호를 입력해주세요.");
$("#ledgerVhrno").focus();
return;
}
if (!cpttrNm) {
alert("소유자명을 입력해주세요.");
$("#cpttrNm").focus();
return;
}
if (!cpttrIhidnum) {
alert("주민번호를 입력해주세요.");
$("#cpttrIhidnum").focus();
return;
}
self.callLedgerApi();
}
},
@ -527,22 +324,26 @@
*/
callLedgerApi: function() {
var self = this;
var vhrno = $.trim($("#vhrno").val());
var vhrno = $.trim($("#ledgerVhrno").val());
var cpttrNm = $.trim($("#cpttrNm").val());
var cpttrIhidnum = $.trim($("#cpttrIhidnum").val());
var cpttrLegaldongCode = $.trim($("#cpttrLegaldongCode").val());
var routeSeCode = $("#routeSeCode").val();
var detailExpression = $("#detailExpression").val();
// LedgerRequest의 @JsonProperty에 맞춰 대문자 키 사용
// INQIRE_SE_CODE는 VmisRequestEnricher에서 자동으로 "1"(열람)로 설정됨
var params = {
VHRNO: vhrno
VHRNO: vhrno,
CPTTR_NM: cpttrNm,
CPTTR_IHIDNUM: cpttrIhidnum,
ROUTE_SE_CODE: routeSeCode,
DETAIL_EXPRESSION: detailExpression
};
if (cpttrNm) {
params.CPTTR_NM = cpttrNm;
}
if (cpttrIhidnum) {
params.CPTTR_IHIDNUM = cpttrIhidnum;
// 선택 필드 추가
if (cpttrLegaldongCode) {
params.CPTTR_LEGALDONG_CODE = cpttrLegaldongCode;
}
$.ajax({
@ -829,11 +630,18 @@
// 초기화 버튼 클릭 이벤트
$("#reset_btn").on('click', function() {
$("#vhrno").val("");
// 기본정보 조회 필드 초기화
$("#levyStdde").val("${dateUtil:getCurrentDateTime('yyyy-MM-dd')}");
$("#vhrno").val("");
$("#vin").val("");
// 등록원부 조회 필드 초기화
$("#ledgerVhrno").val("");
$("#cpttrNm").val("");
$("#cpttrIhidnum").val("");
$("#cpttrLegaldongCode").val("");
$("#routeSeCode").val("3");
$("#detailExpression").val("1");
// 결과 영역 초기화
$("#resultContent").html('<div class="result-empty">조회 버튼을 클릭하여 차량 정보를 조회하세요.</div>');
$("#btnResultClose").hide();
});
@ -845,29 +653,13 @@
});
// 엔터키 검색
$("#vhrno, #vin, #cpttrNm, #cpttrIhidnum").on('keypress', function(e) {
$("#vhrno, #vin, #ledgerVhrno, #cpttrNm, #cpttrIhidnum, #cpttrLegaldongCode").on('keypress', function(e) {
if (e.which === 13) {
e.preventDefault();
$("#search_btn").trigger('click');
}
});
// 샘플1 버튼 클릭 이벤트 (기본정보)
$("#sample1_btn").on('click', function() {
console.log("샘플 데이터 1 로드 (기본정보)");
var sampleData = self.getSampleData1();
self.displayBasicResult(sampleData);
$("#btnResultClose").show();
});
// 샘플2 버튼 클릭 이벤트 (등록원부 + 변경이력)
$("#sample2_btn").on('click', function() {
console.log("샘플 데이터 2 로드 (등록원부 + 변경이력)");
var sampleData = self.getSampleData2();
self.displayLedgerResult(sampleData);
$("#btnResultClose").show();
});
// 섹션 접기/펼치기 이벤트
$("#resultContent").on('click', '.collapsible-title', function() {
var targetId = $(this).data('target');

Loading…
Cancel
Save