From 05cbaab43613d55d559f0bf69ff82be2f2d1d089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Thu, 20 Nov 2025 12:39:19 +0900 Subject: [PATCH] =?UTF-8?q?=EC=86=8C=EC=8A=A4=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VehicleInquiryController.java | 31 +- .../carInspectionPenalty/callApi/inquiry.jsp | 420 +++++------------- 2 files changed, 131 insertions(+), 320 deletions(-) diff --git a/src/main/java/go/kr/project/carInspectionPenalty/callApi/controller/VehicleInquiryController.java b/src/main/java/go/kr/project/carInspectionPenalty/callApi/controller/VehicleInquiryController.java index 4e218ac..b73026c 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/callApi/controller/VehicleInquiryController.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/callApi/controller/VehicleInquiryController.java @@ -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); diff --git a/src/main/webapp/WEB-INF/views/carInspectionPenalty/callApi/inquiry.jsp b/src/main/webapp/WEB-INF/views/carInspectionPenalty/callApi/inquiry.jsp index 3628852..b4b42a0 100644 --- a/src/main/webapp/WEB-INF/views/carInspectionPenalty/callApi/inquiry.jsp +++ b/src/main/webapp/WEB-INF/views/carInspectionPenalty/callApi/inquiry.jsp @@ -23,32 +23,51 @@ -
  • * 차량번호
  • + + + + + + -
    @@ -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('
    조회 버튼을 클릭하여 차량 정보를 조회하세요.
    '); $("#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');