init : 개발시 연계테스트를 위한 테스트 api

1. 표지 인서트, 조회
2. soup xml 형태
master
Kurt92 2 weeks ago
parent 10423829ab
commit 3b9807cb68

@ -37,10 +37,8 @@ public class CarInfoController {
List<CarInfo> resultRecords = carInfoService.findCarInfo(req);
// data 배열 안의 각 Body 순회
// 조회 결과에 따라 코드 세팅 (간단 버전)
String code = resultRecords.isEmpty() ? "0001" : "0000";
String code = resultRecords.isEmpty() ? "Error" : "Success";
String msg = resultRecords.isEmpty() ? "조회된 차량 정보가 없습니다." : "정상";
CarInfoDto.Response response = CarInfoDto.Response.builder()

@ -1,7 +1,48 @@
package org.api.test.biz.coverInfo.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.api.test.biz.coverInfo.service.CoverInfoMock;
import org.api.test.biz.coverInfo.service.CoverInfoService;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequiredArgsConstructor
@Slf4j
public class CoverInfoController {
private final CoverInfoService coverInfoService;
@PostMapping(
value = "/api/test/coverInfo",
consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_XML_VALUE},
produces = {MediaType.APPLICATION_XML_VALUE, MediaType.TEXT_XML_VALUE}
)
public ResponseEntity<?> getCoverInfo(@RequestBody String xmlBody) {
return ResponseEntity.ok(coverInfoService.getCoverInfo(xmlBody));
}
@PostMapping("/api/test/coverInfo/insert")
public ResponseEntity<?> carInfoRandomInsert(@RequestBody List<String> CARS_NO) {
coverInfoService.coverInfoInsert(CARS_NO);
return ResponseEntity.ok("success");
};
}

@ -0,0 +1,19 @@
package org.api.test.biz.coverInfo.dto;
public class CoverInfoDto {
public static class Request {
private String CARS_NO; //차량번호
private String ReqBizCd; //요청업무코드
private String ReqOrgCd; //요청기관코드
}
public static class Response {
}
}

@ -3,5 +3,5 @@ package org.api.test.biz.coverInfo.repository;
import org.springframework.stereotype.Repository;
@Repository
public class CoverInfoRepository {
public class CoverInfoQueryDslRepository {
}

@ -0,0 +1,71 @@
package org.api.test.biz.coverInfo.service;
import org.api.test.domain.CarInfo;
import org.api.test.domain.CoverInfo;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CoverInfoMock {
public CoverInfo createCoverInfo(String carsNo) {
return CoverInfo.builder()
.CARS_NO(carsNo)
.PARKING_PSBL_YN("Y")
.BOHUN_PARKING_PSBL_YN("Y")
.build();
}
public String extractTag(String xml, String tagName) {
String open = "<" + tagName + ">";
String close = "</" + tagName + ">";
int start = xml.indexOf(open);
int end = xml.indexOf(close);
if (start == -1 || end == -1) return null;
return xml.substring(start + open.length(), end).trim();
}
public String buildSoapResponse(CoverInfo cover) {
String txId = generateTransactionId();
return """
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<commonHeader xmlns="http://ccais.mopas.go.kr/dh/rid/services/swsdn/DisabledParkingYn/types">
<serviceName>DisabledParkingYnService</serviceName>
<useSystemCode>ESBTEST</useSystemCode>
<certServerId>SVR1311000030</certServerId>
<transactionUniqueId>%s</transactionUniqueId>
<userDeptCode>1234567</userDeptCode>
<userName></userName>
</commonHeader>
</soap:Header>
<soap:Body>
<getDisabledParkingYnResponse xmlns="http://ccais.mopas.go.kr/dh/rid/services/swsdn/DisabledParkingYn/types">
<CARS_NO>%s</CARS_NO>
<PARKING_PSBL_YN>%s</PARKING_PSBL_YN>
<BOHUN_PARKING_PSBL_YN>%s</BOHUN_PARKING_PSBL_YN>
</getDisabledParkingYnResponse>
</soap:Body>
</soap:Envelope>
""".formatted(
txId,
nullSafe(cover.getCARS_NO()),
nullSafe(cover.getPARKING_PSBL_YN()),
nullSafe(cover.getBOHUN_PARKING_PSBL_YN())
);
}
// 간단 트랜잭션 ID 생성기 (모킹용)
private String generateTransactionId() {
return new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS", java.util.Locale.KOREA)
.format(new java.util.Date());
}
private String nullSafe(String s) {
return s == null ? "" : s;
}
}

@ -1,7 +1,47 @@
package org.api.test.biz.coverInfo.service;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.api.test.domain.CoverInfo;
import org.api.test.domain.CoverInfoRepository;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class CoverInfoService {
private final CoverInfoMock coverInfoMock;
private final CoverInfoRepository coverInfoRepository;
public String getCoverInfo(String xmlBody) {
// 차량번호 추출
String carsNo = coverInfoMock.extractTag(xmlBody, "CARS_NO");
// 차량번호 조회
CoverInfo cover = coverInfoRepository.findById(carsNo)
.orElseThrow(() -> new IllegalStateException(""));
String responseXml = coverInfoMock.buildSoapResponse(cover);
return responseXml;
}
@Transactional
public void coverInfoInsert(List<String> carsNo) {
carsNo.forEach(item -> {
CoverInfo entity = coverInfoMock.createCoverInfo(item);
coverInfoRepository.save(entity);
});
}
}

@ -1,5 +1,7 @@
package org.api.test.domain;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@ -11,353 +13,359 @@ import lombok.NoArgsConstructor;
import org.hibernate.annotations.Comment;
@Entity
@Table(name = "CAR_INFO") // 실제 테이블명에 맞게 조정
@Table(name = "CAR_INFO")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.ANY,
getterVisibility = JsonAutoDetect.Visibility.NONE,
isGetterVisibility = JsonAutoDetect.Visibility.NONE
)
public class CarInfo {
// ===== 기본 키 =====
@Id
@JsonProperty("VHRNO")
@Column(name = "VHRNO")
@Comment("차량번호")
private String VHRNO;
// ===== 상단 (연식 / 등록정보 / 사용본거지) =====
@JsonProperty("PRYE")
@Column(name = "PRYE")
@Comment("연식")
private String PRYE;
@JsonProperty("REGIST_DE")
@Column(name = "REGIST_DE")
@Comment("등록일(변경일)")
private String REGIST_DE;
@JsonProperty("ERSR_REGIST_SE_CODE")
@Column(name = "ERSR_REGIST_SE_CODE")
@Comment("말소등록구분코드")
private String ERSR_REGIST_SE_CODE;
@JsonProperty("ERSR_REGIST_SE_NM")
@Column(name = "ERSR_REGIST_SE_NM")
@Comment("말소등록구분명")
private String ERSR_REGIST_SE_NM;
@JsonProperty("ERSR_REGIST_DE")
@Column(name = "ERSR_REGIST_DE")
@Comment("말소등록일")
private String ERSR_REGIST_DE;
@JsonProperty("REGIST_DETAIL_CODE")
@Column(name = "REGIST_DETAIL_CODE")
@Comment("등록상세코드")
private String REGIST_DETAIL_CODE;
@JsonProperty("DSPLVL")
@Column(name = "DSPLVL")
@Comment("배기량")
private String DSPLVL;
@JsonProperty("USE_STRNGHLD_LEGALDONG_CODE")
@Column(name = "USE_STRNGHLD_LEGALDONG_CODE")
@Comment("사용본거지법정동코드")
private String USE_STRNGHLD_LEGALDONG_CODE;
@JsonProperty("USE_STRNGHLD_ADSTRD_CODE")
@Column(name = "USE_STRNGHLD_ADSTRD_CODE")
@Comment("사용본거지행정동코드")
private String USE_STRNGHLD_ADSTRD_CODE;
@JsonProperty("USE_STRNGHLD_MNTN")
@Column(name = "USE_STRNGHLD_MNTN")
@Comment("사용본거지산")
private String USE_STRNGHLD_MNTN;
@JsonProperty("USE_STRNGHLD_LNBR")
@Column(name = "USE_STRNGHLD_LNBR")
@Comment("사용본거지번지")
private String USE_STRNGHLD_LNBR;
@JsonProperty("USE_STRNGHLD_HO")
@Column(name = "USE_STRNGHLD_HO")
@Comment("사용본거지호")
private String USE_STRNGHLD_HO;
@JsonProperty("USE_STRNGHLD_ADRES_NM")
@Column(name = "USE_STRNGHLD_ADRES_NM")
@Comment("사용본거지상세주소")
private String USE_STRNGHLD_ADRES_NM;
@JsonProperty("USE_STRNGHLD_ROAD_NM_CODE")
@Column(name = "USE_STRNGHLD_ROAD_NM_CODE")
@Comment("사용본거지도로명코드")
private String USE_STRNGHLD_ROAD_NM_CODE;
@JsonProperty("USGSRHLD_UNDGRND_BULD_SE_CODE")
@Column(name = "USGSRHLD_UNDGRND_BULD_SE_CODE")
@Comment("사용본거지지하건물구분코드")
private String USGSRHLD_UNDGRND_BULD_SE_CODE;
@JsonProperty("USE_STRNGHLD_BULD_MAIN_NO")
@Column(name = "USE_STRNGHLD_BULD_MAIN_NO")
@Comment("사용본거지건물주요번호")
private String USE_STRNGHLD_BULD_MAIN_NO;
@JsonProperty("USE_STRNGHLD_BULD_SUB_NO")
@Column(name = "USE_STRNGHLD_BULD_SUB_NO")
@Comment("사용본거지건물부번호")
private String USE_STRNGHLD_BULD_SUB_NO;
@JsonProperty("USGSRHLD_ADRES_FULL")
@Column(name = "USGSRHLD_ADRES_FULL")
@Comment("사용본거지전체주소")
private String USGSRHLD_ADRES_FULL;
// ===== 대표소유자/소유자 정보 =====
@JsonProperty("MBER_SE_CODE")
@Column(name = "MBER_SE_CODE")
@Comment("대표소유자회원구분코드")
private String MBER_SE_CODE;
@JsonProperty("MBER_NM")
@Column(name = "MBER_NM")
@Comment("대표소유자성명")
private String MBER_NM;
@JsonProperty("MBER_SE_NO")
@Column(name = "MBER_SE_NO")
@Comment("대표소유자회원번호")
private String MBER_SE_NO;
@JsonProperty("TELNO")
@Column(name = "TELNO")
@Comment("대표소유자전화번호")
private String TELNO;
@JsonProperty("OWNER_LEGALDONG_CODE")
@Column(name = "OWNER_LEGALDONG_CODE")
@Comment("소유자법정동코드")
private String OWNER_LEGALDONG_CODE;
@JsonProperty("OWNER_ADSTRD_CODE")
@Column(name = "OWNER_ADSTRD_CODE")
@Comment("소유자행정동코드")
private String OWNER_ADSTRD_CODE;
@JsonProperty("OWNER_MNTN")
@Column(name = "OWNER_MNTN")
@Comment("소유자산")
private String OWNER_MNTN;
@JsonProperty("OWNER_LNBR")
@Column(name = "OWNER_LNBR")
@Comment("소유자번지")
private String OWNER_LNBR;
@JsonProperty("OWNER_HO")
@Column(name = "OWNER_HO")
@Comment("소유자호")
private String OWNER_HO;
@JsonProperty("OWNER_ADRES_NM")
@Column(name = "OWNER_ADRES_NM")
@Comment("소유자상세주소")
private String OWNER_ADRES_NM;
@JsonProperty("OWNER_ROAD_NM_CODE")
@Column(name = "OWNER_ROAD_NM_CODE")
@Comment("소유자도로명코드")
private String OWNER_ROAD_NM_CODE;
@JsonProperty("OWNER_UNDGRND_BULD_SE_CODE")
@Column(name = "OWNER_UNDGRND_BULD_SE_CODE")
@Comment("소유자지하건물구분코드")
private String OWNER_UNDGRND_BULD_SE_CODE;
@JsonProperty("OWNER_BULD_MAIN_NO")
@Column(name = "OWNER_BULD_MAIN_NO")
@Comment("소유자건물주요번호")
private String OWNER_BULD_MAIN_NO;
@JsonProperty("OWNER_BULD_SUB_NO")
@Column(name = "OWNER_BULD_SUB_NO")
@Comment("소유자건물부번호")
private String OWNER_BULD_SUB_NO;
@JsonProperty("OWNER_ADRES_FULL")
@Column(name = "OWNER_ADRES_FULL")
@Comment("소유자전체주소")
private String OWNER_ADRES_FULL;
// ===== 차량번호/차량 기본 =====
@JsonProperty("AFTR_VHRNO")
@Column(name = "AFTR_VHRNO")
@Comment("신차량번호")
private String AFTR_VHRNO;
@JsonProperty("FRNT_VHRNO")
@Column(name = "FRNT_VHRNO")
@Comment("이전차량번호")
private String FRNT_VHRNO;
@JsonProperty("VIN")
@Column(name = "VIN")
@Comment("차대번호")
private String VIN;
@JsonProperty("CNM")
@Column(name = "CNM")
@Comment("차명")
private String CNM;
@JsonProperty("VHCTLE_TOT_WT")
@Column(name = "VHCTLE_TOT_WT")
@Comment("차량총중량")
private String VHCTLE_TOT_WT;
@JsonProperty("CAAG_ENDDE")
@Column(name = "CAAG_ENDDE")
@Comment("차량만료일자")
private String CAAG_ENDDE;
@JsonProperty("CHANGE_DE")
@Column(name = "CHANGE_DE")
@Comment("차변변경시기")
private String CHANGE_DE;
@JsonProperty("USE_FUEL_CODE")
@Column(name = "USE_FUEL_CODE")
@Comment("사용연료코드")
private String USE_FUEL_CODE;
@JsonProperty("PRPOS_SE_CODE")
@Column(name = "PRPOS_SE_CODE")
@Comment("용도구분코드")
private String PRPOS_SE_CODE;
@JsonProperty("MTRS_FOM_NM")
@Column(name = "MTRS_FOM_NM")
@Comment("원동기형식명")
private String MTRS_FOM_NM;
// ===== 차종/제원 관련 =====
// ===== 차종/제원 =====
@JsonProperty("VHCTY_ASORT_CODE")
@Column(name = "VHCTY_ASORT_CODE")
@Comment("차종종별코드")
private String VHCTY_ASORT_CODE;
@JsonProperty("VHCTY_TY_CODE")
@Column(name = "VHCTY_TY_CODE")
@Comment("차종유형코드")
private String VHCTY_TY_CODE;
@JsonProperty("VHCTY_SE_CODE")
@Column(name = "VHCTY_SE_CODE")
@Comment("차종분류코드")
private String VHCTY_SE_CODE;
@JsonProperty("MXMM_LDG")
@Column(name = "MXMM_LDG")
@Comment("최대적재량")
private String MXMM_LDG;
@JsonProperty("VHCTY_ASORT_NM")
@Column(name = "VHCTY_ASORT_NM")
@Comment("차종종별명")
private String VHCTY_ASORT_NM;
@JsonProperty("VHCTY_TY_NM")
@Column(name = "VHCTY_TY_NM")
@Comment("차종유형명")
private String VHCTY_TY_NM;
@JsonProperty("VHCTY_SE_NM")
@Column(name = "VHCTY_SE_NM")
@Comment("차종분류명")
private String VHCTY_SE_NM;
@JsonProperty("FRST_REGIST_DE")
@Column(name = "FRST_REGIST_DE")
@Comment("최초등록일")
private String FRST_REGIST_DE;
@JsonProperty("FOM_NM")
@Column(name = "FOM_NM")
@Comment("형식")
private String FOM_NM;
@JsonProperty("ACQS_DE")
@Column(name = "ACQS_DE")
@Comment("취득일자")
private String ACQS_DE;
@JsonProperty("ACQS_END_DE")
@Column(name = "ACQS_END_DE")
@Comment("취득종료일자")
private String ACQS_END_DE;
@JsonProperty("YBL_MD")
@Column(name = "YBL_MD")
@Comment("제작년월일")
private String YBL_MD;
@JsonProperty("TRANSR_REGIST_DE")
@Column(name = "TRANSR_REGIST_DE")
@Comment("이전등록일(양수일)")
private String TRANSR_REGIST_DE;
// ===== 상태/금액/검사 등 =====
// ===== 상태/검사/금액 =====
@JsonProperty("SPCF_REGIST_STTUS_CODE")
@Column(name = "SPCF_REGIST_STTUS_CODE")
@Comment("제원등록상태코드")
private String SPCF_REGIST_STTUS_CODE;
@JsonProperty("COLOR_NM")
@Column(name = "COLOR_NM")
@Comment("색상명")
private String COLOR_NM;
@JsonProperty("MRTG_CO")
@Column(name = "MRTG_CO")
@Comment("저당수")
private String MRTG_CO;
@JsonProperty("SEIZR_CO")
@Column(name = "SEIZR_CO")
@Comment("압류건수")
private String SEIZR_CO;
@JsonProperty("STMD_CO")
@Column(name = "STMD_CO")
@Comment("구조변경수")
private String STMD_CO;
@JsonProperty("NMPL_CSDY_AT")
@Column(name = "NMPL_CSDY_AT")
@Comment("번호판영치여부")
private String NMPL_CSDY_AT;
@JsonProperty("NMPL_CSDY_REMNR_DE")
@Column(name = "NMPL_CSDY_REMNR_DE")
@Comment("번호판영치최고일")
private String NMPL_CSDY_REMNR_DE;
@JsonProperty("ORIGIN_SE_CODE")
@Column(name = "ORIGIN_SE_CODE")
@Comment("출처구분코드")
private String ORIGIN_SE_CODE;
@JsonProperty("NMPL_STNDRD_CODE")
@Column(name = "NMPL_STNDRD_CODE")
@Comment("번호판규격코드")
private String NMPL_STNDRD_CODE;
@JsonProperty("ACQS_AMOUNT")
@Column(name = "ACQS_AMOUNT")
@Comment("취득금액(최종/최초)")
private String ACQS_AMOUNT;
@JsonProperty("INSPT_VALID_PD_BGNDE")
@Column(name = "INSPT_VALID_PD_BGNDE")
@Comment("검사유효기간시작일")
private String INSPT_VALID_PD_BGNDE;
@JsonProperty("INSPT_VALID_PD_ENDDE")
@Column(name = "INSPT_VALID_PD_ENDDE")
@Comment("검사유효기간종료일")
private String INSPT_VALID_PD_ENDDE;
@JsonProperty("USE_STRNGHLD_GRC_CODE")
@Column(name = "USE_STRNGHLD_GRC_CODE")
@Comment("사용본거지관청코드")
private String USE_STRNGHLD_GRC_CODE;
@JsonProperty("TKCAR_PSCAP_CO")
@Column(name = "TKCAR_PSCAP_CO")
@Comment("승차정원수")
private String TKCAR_PSCAP_CO;
@JsonProperty("SPMNNO")
@Column(name = "SPMNNO")
@Comment("제원관리번호")
private String SPMNNO;
@JsonProperty("TRVL_DSTNC")
@Column(name = "TRVL_DSTNC")
@Comment("주행거리")
private String TRVL_DSTNC;
@JsonProperty("FRST_REGIST_RQRCNO")
@Column(name = "FRST_REGIST_RQRCNO")
@Comment("최초등록접수번호")
private String FRST_REGIST_RQRCNO;
@JsonProperty("VLNT_ERSR_PRVNTC_NTICE_DE")
@Column(name = "VLNT_ERSR_PRVNTC_NTICE_DE")
@Comment("예고통지일")
private String VLNT_ERSR_PRVNTC_NTICE_DE;
@JsonProperty("REGIST_INSTT_NM")
@Column(name = "REGIST_INSTT_NM")
@Comment("등록기관명")
private String REGIST_INSTT_NM;
@JsonProperty("PROCESS_IMPRTY_RESN_CODE")
@Column(name = "PROCESS_IMPRTY_RESN_CODE")
@Comment("처리불가사유코드")
private String PROCESS_IMPRTY_RESN_CODE;
@JsonProperty("PROCESS_IMPRTY_RESN_DTLS")
@Column(name = "PROCESS_IMPRTY_RESN_DTLS")
@Comment("처리불가사유명세")
private String PROCESS_IMPRTY_RESN_DTLS;
@JsonProperty("CBD_LT")
@Column(name = "CBD_LT")
@Comment("차체길이")
private String CBD_LT;
@JsonProperty("CBD_BT")
@Column(name = "CBD_BT")
@Comment("차체너비")
private String CBD_BT;
@JsonProperty("CBD_HG")
@Column(name = "CBD_HG")
@Comment("차체높이")
private String CBD_HG;
@JsonProperty("FRST_MXMM_LDG")
@Column(name = "FRST_MXMM_LDG")
@Comment("최초최대적재량")
private String FRST_MXMM_LDG;
@JsonProperty("FUEL_CNSMP_RT")
@Column(name = "FUEL_CNSMP_RT")
@Comment("연료소비율")
private String FUEL_CNSMP_RT;
@JsonProperty("ELCTY_CMPND_FUEL_CNSMP_RT")
@Column(name = "ELCTY_CMPND_FUEL_CNSMP_RT")
@Comment("전기복합연료소비율")
private String ELCTY_CMPND_FUEL_CNSMP_RT;
}

@ -1,5 +1,7 @@
package org.api.test.domain;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@ -8,6 +10,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Comment;
@Entity
@Table(name="COVER_INFO")
@ -15,17 +18,30 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.ANY,
getterVisibility = JsonAutoDetect.Visibility.NONE,
isGetterVisibility = JsonAutoDetect.Visibility.NONE
)
public class CoverInfo {
@Id
@Column(name = "COVER_INFO_ID")
private int coverInfoId;
@JsonProperty("CARS_NO")
@Column(name = "CARS_NO")
@Comment("차량번호")
private String CARS_NO;
@JsonProperty("PARKING_PSBL_YN")
@Column(name = "PARKING_PSBL_YN")
@Comment("주차가능여부(장애인)")
private String PARKING_PSBL_YN;
@JsonProperty("BOHUN_PARKING_PSBL_YN")
@Column(name = "BOHUN_PARKING_PSBL_YN")
@Comment("주차가능여부(보훈처)")
private String BOHUN_PARKING_PSBL_YN;
}

@ -0,0 +1,6 @@
package org.api.test.domain;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CoverInfoRepository extends JpaRepository<CoverInfo, String> {
}
Loading…
Cancel
Save