전체적인 데이터 구조 작업 진행중...

현재 임시 커밋.. 나머지 로직 수정예정,
현재 부팅안됨
main
박성영 3 weeks ago
parent 9480c30bf3
commit 7883cb3b42

@ -0,0 +1,357 @@
# DB DDL 및 VO, XML Mapper 변경사항 정리
작업일: 2025-11-21
## 개요
테이블 DDL의 컬럼 추가 및 변경에 따라 관련 VO, XML Mapper, API 매핑 메소드를 전반적으로 확인 및 수정하였습니다.
---
## 1. tb_car_ledger_frmbk (자동차 등록 원부 갑)
### 1.1 DDL 변경사항
- **추가된 컬럼**:
- `DRIV_SRGBTRY_IDNTF_NO` (varchar(20)) - 구동축전지 식별번호
- **기존 컬럼**: PRCS_IMPRTY_RSN_CD, PRCS_IMPRTY_RSN_DTLS
- 기존 VO 및 Mapper에서 잘못된 컬럼명 사용 중이었음 (PROCESS_IMPRTY_RESN_CODE → PRCS_IMPRTY_RSN_CD)
### 1.2 VmisCarLedgerFrmbkVO.java 수정사항
**파일 경로**: `src/main/java/go/kr/project/api/model/response/VmisCarLedgerFrmbkVO.java`
#### 추가된 필드
```java
private String drivSrgbtryIdntfNo; // DRIV_SRGBTRY_IDNTF_NO
```
#### 수정된 필드 (필드명 변경)
```java
// 변경 전
private String processImprtyResnCode; // PROCESS_IMPRTY_RESN_CODE (잘못된 컬럼명)
private String processImprtyResnDtls; // PROCESS_IMPRTY_RESN_DTLS (잘못된 컬럼명)
// 변경 후
private String prcsImprtyRsnCd; // PRCS_IMPRTY_RSN_CD
private String prcsImprtyRsnDtls; // PRCS_IMPRTY_RSN_DTLS
```
#### fromNewResponseMaster 메소드 수정
NewLedgerResponse의 실제 필드명에 맞게 getter 메소드 호출 수정:
```java
// 변경 전 (잘못된 getter 메소드명 - 구버전 필드명 사용)
.ledgerIndivNo(response.getLedgerIndvdlzNo()) // ❌
.carmdlAsortCd(response.getVhctyAsortCode()) // ❌
.atmbNm(response.getCnm()) // ❌
.colorCd(response.getColorCode()) // ❌
.nopltSpcfctCd(response.getNmplStndrdCode()) // ❌
.usgSeCd(response.getPrposSeCode()) // ❌
.acqsAmt(response.getAcqsAmount()) // ❌
.regDtlCd(response.getRegistDetailCode()) // ❌
.frstRegYmd(response.getFrstRegistDe()) // ❌
.veagEndYmd(response.getCaagEndde()) // ❌
.yridnw(response.getPrye()) // ❌
.fbctnYmd(response.getYblMd()) // ❌
.drvngDstnc(response.getTrvlDstnc()) // ❌
... (등 60여 개 필드)
// 변경 후 (올바른 getter 메소드명 - 신규 필드명 사용)
.ledgerIndivNo(response.getLedgerIndivNo()) // ✅
.carmdlAsortCd(response.getCarmdlAsortCd()) // ✅
.atmbNm(response.getAtmbNm()) // ✅
.colorCd(response.getColorCd()) // ✅
.nopltSpcfctCd(response.getNopltSpcfctCd()) // ✅
.usgSeCd(response.getUsgSeCd()) // ✅
.acqsAmt(response.getAcqsAmt()) // ✅
.regDtlCd(response.getRegDtlCd()) // ✅
.frstRegYmd(response.getFrstRegYmd()) // ✅
.veagEndYmd(response.getVeagEndYmd()) // ✅
.yridnw(response.getYridnw()) // ✅
.fbctnYmd(response.getFbctnYmd()) // ✅
.drvngDstnc(response.getDrvngDstnc()) // ✅
.issuNo(response.getIssuNo()) // ✅ 추가
.frstTrnsfrYmd(response.getFrstTrnsfrYmd()) // ✅ 추가
.drivSrgbtryIdntfNo(response.getDrivSrgbtryIdntfNo()) // ✅ 추가
... (등 64개 필드)
```
### 1.3 CarLedgerFrmbkMapper_maria.xml 수정사항
**파일 경로**: `src/main/resources/mybatis/mapper/api/CarLedgerFrmbkMapper_maria.xml`
#### updateCarLedgerFrmbk 수정
```xml
<!-- 추가 -->
<if test="drivSrgbtryIdntfNo != null">DRIV_SRGBTRY_IDNTF_NO = #{drivSrgbtryIdntfNo},</if>
<!-- 수정 -->
<!-- 변경 전 -->
<if test="processImprtyResnCode != null">PROCESS_IMPRTY_RESN_CODE = #{processImprtyResnCode},</if>
<if test="processImprtyResnDtls != null">PROCESS_IMPRTY_RESN_DTLS = #{processImprtyResnDtls},</if>
<!-- 변경 후 -->
<if test="prcsImprtyRsnCd != null">PRCS_IMPRTY_RSN_CD = #{prcsImprtyRsnCd},</if>
<if test="prcsImprtyRsnDtls != null">PRCS_IMPRTY_RSN_DTLS = #{prcsImprtyRsnDtls},</if>
```
---
## 2. tb_car_ledger_frmbk_dtl (자동차 등록 원부 갑 상세)
### 2.1 DDL 변경사항
- **추가된 컬럼**:
- `HSHLDR_NM` (varchar(75)) - 세대주명
- `HSHLDR_IDECNO` (varchar(500)) - 세대주개인암호화번호
### 2.2 VmisCarLedgerFrmbkDtlVO.java 수정사항
**파일 경로**: `src/main/java/go/kr/project/api/model/response/VmisCarLedgerFrmbkDtlVO.java`
#### 추가된 필드
```java
private String hshldrNm; // HSHLDR_NM
private String hshldrIdecno; // HSHLDR_IDECNO
```
#### 매핑 메소드 수정 (listNewFromExchange)
NewLedgerResponse.Record 클래스의 필드명이 변경됨에 따라 매핑 메소드 수정:
```java
// 변경 전 (잘못된 필드명)
.szrRmvDtlSn(record.getMainchk())
.chgTaskSeCd(record.getChangeJobSeCode())
.mainNo(record.getMainno())
.sno(record.getSubno())
.spcablMttr(record.getDtls())
.aplyRcptNo(record.getRqrcno())
.ledgerIndivNo(record.getLedgerIndvdlzNo())
.chgTaskSeNm(record.getGubunNm())
.chgYmd(record.getChangeDe())
.dtlSn(record.getDetailSn())
// 변경 후 (올바른 필드명)
.szrRmvDtlSn(record.getSzrRmvDtlSn())
.chgTaskSeCd(record.getChgTaskSeCd())
.mainNo(record.getMainNo())
.sno(record.getSno())
.spcablMttr(record.getSpcablMttr())
.hshldrNm(record.getHshldrNm()) // 신규 추가
.hshldrIdecno(record.getHshldrIdecno()) // 신규 추가
.aplyRcptNo(record.getAplyRcptNo())
.ledgerIndivNo(record.getLedgerIndivNo())
.chgTaskSeNm(record.getChgTaskSeNm())
.chgYmd(record.getChgYmd())
.dtlSn(record.getDtlSn())
```
#### 매핑 메소드 수정 (fromRecord)
동일하게 NewLedgerResponse.Record 매핑 수정 및 신규 필드 추가
### 2.3 CarLedgerFrmbkMapper_maria.xml 수정사항
**파일 경로**: `src/main/resources/mybatis/mapper/api/CarLedgerFrmbkMapper_maria.xml`
#### insertCarLedgerFrmbkDtl 수정
```xml
<!-- 컬럼 추가 -->
HSHLDR_NM,
HSHLDR_IDECNO,
<!-- VALUES 추가 -->
#{hshldrNm},
#{hshldrIdecno},
```
---
## 3. tb_car_ffnlg_trgt (자동차 과태료 대상)
### 3.1 변경사항
- DDL과 VO(CarFfnlgTrgtVO.java) 비교 결과 일치함
- 수정 불필요
---
## 4. tb_car_bass_matter_inqire (자동차 기본 사항 조회)
### 4.1 VmisCarBassMatterInqireVO.java 수정사항
**파일 경로**: `src/main/java/go/kr/project/api/model/response/VmisCarBassMatterInqireVO.java`
#### fromOldRequest 메소드 수정
OldBasicRequest의 구조가 헤더 정보(외부 클래스)와 요청 데이터(record 배열)로 분리되어 있음을 반영:
```java
// 변경 전 (잘못된 구조 - request에서 직접 가져옴)
.dmndLevyStdde(request.getLevyStdde()) // ❌ request에 없음
.dmndInqireSeCode(request.getInqireSeCode()) // ❌ request에 없음
.dmndVhrno(request.getVhrno()) // ❌ request에 없음
.dmndVin(request.getVin()) // ❌ request에 없음
// 변경 후 (올바른 구조 - request.record[0]에서 가져옴)
OldBasicRequest.Record record = request.getRecord().get(0);
.dmndLevyStdde(record.getLevyStdde()) // ✅ record[0]에서 가져옴
.dmndInqireSeCode(record.getInqireSeCode()) // ✅ record[0]에서 가져옴
.dmndVhrno(record.getVhrno()) // ✅ record[0]에서 가져옴
.dmndVin(record.getVin()) // ✅ record[0]에서 가져옴
```
#### OldBasicRequest 구조 설명
```
OldBasicRequest
├─ 헤더 정보 (외부 클래스)
│ ├─ infoSysId
│ ├─ infoSysIp
│ ├─ sigunguCode
│ ├─ cntcInfoCode
│ ├─ chargerId
│ ├─ chargerIp
│ └─ chargerNm
└─ record[] (요청 데이터 배열)
└─ [0]
├─ levyStdde (부과기준일)
├─ inqireSeCode (조회구분코드)
├─ vhrno (자동차등록번호)
└─ vin (차대번호)
```
---
## 5. NewLedgerResponse 클래스 변경
### 5.1 외부 클래스 필드명 변경사항
**파일 경로**: `src/main/java/go/kr/project/api/model/response/NewLedgerResponse.java`
외부 클래스(마스터 정보)의 필드명이 API 응답 규격에 맞게 변경됨:
#### 주요 변경된 필드 (일부)
```java
// 변경 전 (구버전 필드명)
private String ledgerIndvdlzNo; // LEDGER_INDVDLZ_NO
private String vhctyAsortCode; // VHCTY_ASORT_CODE
private String cnm; // CNM
private String colorCode; // COLOR_CODE
private String nmplStndrdCode; // NMPL_STNDRD_CODE
private String prposSeCode; // PRPOS_SE_CODE
private String acqsAmount; // ACQS_AMOUNT
private String registDetailCode; // REGIST_DETAIL_CODE
private String frstRegistDe; // FRST_REGIST_DE
private String caagEndde; // CAAG_ENDDE
private String prye; // PRYE
private String yblMd; // YBL_MD
private String trvlDstnc; // TRVL_DSTNC
// 변경 후 (신버전 필드명)
private String ledgerIndivNo; // LEDGER_INDIV_NO ✅
private String carmdlAsortCd; // CARMDL_ASORT_CD ✅
private String atmbNm; // ATMB_NM ✅
private String colorCd; // COLOR_CD ✅
private String nopltSpcfctCd; // NOPLT_SPCFCT_CD ✅
private String usgSeCd; // USG_SE_CD ✅
private String acqsAmt; // ACQS_AMT ✅
private String regDtlCd; // REG_DTL_CD ✅
private String frstRegYmd; // FRST_REG_YMD ✅
private String veagEndYmd; // VEAG_END_YMD ✅
private String yridnw; // YRIDNW ✅
private String fbctnYmd; // FBCTN_YMD ✅
private String drvngDstnc; // DRVNG_DSTNC ✅
```
**영향**: VmisCarLedgerFrmbkVO.fromNewResponseMaster 메소드의 모든 getter 호출 변경 필요
### 5.2 Record 내부 클래스 변경사항
Record 내부 클래스의 필드명이 API 규격에 맞게 변경됨:
#### 추가된 필드
```java
@JsonProperty("HSHLDR_NM")
private String hshldrNm; // 세대주명
@JsonProperty("HSHLDR_IDECNO")
private String hshldrIdecno; // 세대주개인암호화번호
```
#### 기존 필드 (필드명 변경)
- `SZR_RMV_DTL_SN`: Mainchk → szrRmvDtlSn
- `CHG_TASK_SE_CD`: ChangeJobSeCode → chgTaskSeCd
- `MAIN_NO`: Mainno → mainNo
- `SNO`: Subno → sno
- `SPCABL_MTTR`: Dtls → spcablMttr
- `APLY_RCPT_NO`: Rqrcno → aplyRcptNo
- `LEDGER_INDIV_NO`: LedgerIndvdlzNo → ledgerIndivNo
- `CHG_TASK_SE_NM`: GubunNm → chgTaskSeNm
- `CHG_YMD`: ChangeDe → chgYmd
- `DTL_SN`: DetailSn → dtlSn
---
## 6. 작업 체크리스트
- [x] DDL 파일 읽기 (tb_car_ffnlg_trgt, tb_car_ledger_frmbk, tb_car_ledger_frmbk_dtl, tb_car_bass_matter_inqire)
- [x] 관련 VO 파일 읽기 및 확인
- [x] 관련 XML mapper 파일 읽기 및 확인
- [x] API 매핑 메소드 확인
- [x] DDL 변경사항과 현재 구현 비교
- [x] VmisCarLedgerFrmbkVO 수정 (필드 추가, 컬럼명 수정)
- [x] VmisCarLedgerFrmbkVO.fromNewResponseMaster 메소드 수정 (NewLedgerResponse 필드명 변경 반영)
- [x] VmisCarLedgerFrmbkDtlVO 수정 (HSHLDR 필드 추가, fromRecord 메소드 수정)
- [x] CarLedgerFrmbkMapper_maria.xml 수정
- [x] VmisCarBassMatterInqireVO.fromOldRequest 메소드 수정 (record 배열 구조 반영)
- [x] 변경사항 MD 파일 작성
---
## 7. 주의사항
### 7.1 필드명 네이밍 규칙
- VO 필드명: camelCase (예: prcsImprtyRsnCd)
- DB 컬럼명: SNAKE_CASE (예: PRCS_IMPRTY_RSN_CD)
- MyBatis mapper에서 자동 매핑됨
### 7.2 API 응답 매핑
- NewLedgerResponse.Record의 필드명은 API 응답 JSON 규격과 일치해야 함
- @JsonProperty 어노테이션으로 명시적 매핑
### 7.3 테스트 필요 항목
- [ ] 자동차 등록 원부 갑 조회 API 테스트
- [ ] 자동차 등록 원부 갑 상세 조회 API 테스트
- [ ] DB INSERT/UPDATE 쿼리 테스트
- [ ] 신규 필드 매핑 정상 동작 확인
---
## 8. 다음 단계
1. VmisCarBassMatterInqireVO의 NewBasicResponse 매핑 추가 필요 여부 확인
2. 통합 테스트 실행
3. 변경사항 배포 전 검증
---
## 변경 파일 목록
```
수정된 파일:
- src/main/java/go/kr/project/api/model/response/VmisCarLedgerFrmbkVO.java
- src/main/java/go/kr/project/api/model/response/VmisCarLedgerFrmbkDtlVO.java
- src/main/java/go/kr/project/api/model/response/VmisCarBassMatterInqireVO.java
- src/main/resources/mybatis/mapper/api/CarLedgerFrmbkMapper_maria.xml
확인된 DDL:
- DB/DDL/vips/tb_car_ledger_frmbk.sql
- DB/DDL/vips/tb_car_ledger_frmbk_dtl.sql
- DB/DDL/vips/tb_car_bass_matter_inqire.sql
- DB/DDL/vips/tb_car_ffnlg_trgt.sql
수정된 Request/Response 모델:
- src/main/java/go/kr/project/api/model/request/OldBasicRequest.java (구조 확인)
- src/main/java/go/kr/project/api/model/response/NewLedgerResponse.java
```

@ -0,0 +1,813 @@
# Rocky Linux 9.5 MariaDB 설치 및 설정 가이드
## 요구사항
1. Rocky Linux 9.5 version
2. root 권한 또는 sudo 권한이 있는 계정
3. 목표: MariaDB 설치, 보안 설정, 사용자 생성, 데이터베이스 생성, 백업 스키마 복원
---
## 1단계: MariaDB 설치
### 1.1 MariaDB 서버 설치
```bash
# MariaDB 서버 및 클라이언트 설치
dnf install -y mariadb-server mariadb
# 또는 yum 사용
yum install -y mariadb-server mariadb
```
### 1.2 MariaDB 서비스 시작 및 자동 시작 설정
```bash
# MariaDB 서비스 시작
systemctl start mariadb
# 부팅 시 자동 시작 설정
systemctl enable mariadb
# 서비스 상태 확인
systemctl status mariadb
```
### 1.3 MariaDB 버전 확인
```bash
# MariaDB 버전 확인
mysql --version
# 또는 MariaDB 접속 후 확인
mysql -e "SELECT VERSION();"
```
---
## 2단계: MariaDB 보안 설정
### 2.1 초기 보안 설정 실행
```bash
# MariaDB 보안 설정 스크립트 실행
mysql_secure_installation
```
### 2.2 보안 설정 질문 및 권장 답변
설정 중 아래와 같은 질문이 나타납니다:
```
1. Enter current password for root (enter for none):
→ 처음 설치 시 비밀번호가 없으므로 Enter 입력
2. Switch to unix_socket authentication [Y/n]
→ n (기존 방식 유지 권장)
3. Change the root password? [Y/n]
→ Y (root 비밀번호 설정)
→ 새 비밀번호 입력 및 확인
4. Remove anonymous users? [Y/n]
→ Y (익명 사용자 제거)
5. Disallow root login remotely? [Y/n]
→ Y (원격 root 로그인 차단 - 보안 강화)
→ n (원격 접속이 필요한 경우)
6. Remove test database and access to it? [Y/n]
→ Y (테스트 데이터베이스 제거)
7. Reload privilege tables now? [Y/n]
→ Y (권한 테이블 즉시 적용)
```
### 2.3 root로 MariaDB 접속 확인
```bash
# root 계정으로 MariaDB 접속
mysql -u root -p
# 비밀번호 입력 후 접속
# 접속 확인 후 종료
MariaDB [(none)]> show databases;
MariaDB [(none)]> exit;
```
---
## 3단계: 커스텀 포트 설정 (53306)
### 3.1 MariaDB 포트 변경
```bash
# MariaDB 설정 파일 편집
vi /etc/my.cnf.d/mariadb-server.cnf
```
설정 파일에 포트 추가:
```ini
[mysqld]
port=53306
```
설정 변경 후 서비스 재시작:
```bash
# MariaDB 재시작
systemctl restart mariadb
# 포트 확인
ss -tlnp | grep 53306
```
### 3.2 방화벽 설정 (외부 접속 허용)
```bash
# 커스텀 포트(53306) 방화벽 허용
firewall-cmd --permanent --add-port=53306/tcp
firewall-cmd --reload
# 방화벽 설정 확인
firewall-cmd --list-all
```
---
## 4단계: 데이터베이스 생성
### 4.1 MariaDB 접속
```bash
# root로 MariaDB 접속
mysql -u root -p
# 비밀번호 입력
```
### 4.2 데이터베이스 생성
```sql
-- VIPS 데이터베이스 생성
CREATE DATABASE vips CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 데이터베이스 목록 확인
SHOW DATABASES;
-- VIPS 데이터베이스 선택
USE vips;
```
### 4.3 데이터베이스 문자셋 확인
```sql
-- 데이터베이스 문자셋 확인
SELECT
SCHEMA_NAME,
DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'vips';
```
---
## 5단계: 사용자 생성 및 권한 부여
### 5.1 로컬 접속용 사용자 생성
```sql
-- VIPS 로컬 접속용 사용자 생성
CREATE USER 'vips'@'localhost' IDENTIFIED BY 'xit5811807';
-- VIPS 데이터베이스에 모든 권한 부여
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'localhost';
-- 권한 적용
FLUSH PRIVILEGES;
```
### 5.2 원격 접속용 사용자 생성
```sql
-- 특정 IP에서 접속 가능한 사용자 생성
CREATE USER 'vips'@'192.168.1.100' IDENTIFIED BY 'xit5811807';
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'192.168.1.100';
-- 모든 IP에서 접속 가능한 사용자 생성 (application-prd.yml 설정)
CREATE USER 'vips'@'%' IDENTIFIED BY 'xit5811807';
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'%';
-- 권한 적용
FLUSH PRIVILEGES;
```
### 5.3 읽기 전용 사용자 생성 (선택사항)
```sql
-- 읽기 전용 사용자 생성
CREATE USER 'vips_readonly'@'%' IDENTIFIED BY 'vips_readonly_password';
GRANT SELECT ON vips.* TO 'vips_readonly'@'%';
FLUSH PRIVILEGES;
```
### 5.4 사용자 목록 및 권한 확인
```sql
-- 사용자 목록 확인
SELECT User, Host FROM mysql.user;
-- VIPS 사용자의 권한 확인
SHOW GRANTS FOR 'vips'@'localhost';
SHOW GRANTS FOR 'vips'@'%';
-- 현재 사용자 확인
SELECT USER(), CURRENT_USER();
```
### 5.5 원격 접속을 위한 MariaDB 설정 변경
```bash
# MariaDB 설정 파일 편집
vi /etc/my.cnf.d/mariadb-server.cnf
```
설정 파일에서 다음 부분 수정:
```ini
[mysqld]
# bind-address를 주석 처리하거나 0.0.0.0으로 변경
# bind-address=127.0.0.1
bind-address=0.0.0.0
# 또는 특정 IP만 허용
# bind-address=192.168.1.50
```
설정 변경 후 서비스 재시작:
```bash
# MariaDB 재시작
systemctl restart mariadb
# 재시작 확인
systemctl status mariadb
```
---
## 6단계: 백업 스키마 업로드 (전체 데이터베이스 복원)
### 6.1 백업 파일 서버로 전송
**방법 1: SCP 사용 (로컬 PC에서 실행)**
```bash
# Windows PowerShell 또는 CMD에서 실행
scp C:\backup\vips_backup.sql root@서버IP:/tmp/
```
**방법 2: SFTP 사용**
```bash
# SFTP 접속
sftp root@서버IP
# 파일 전송
put vips_backup.sql /tmp/
exit
```
### 6.2 백업 파일 권한 설정
```bash
# 백업 파일 권한 확인
ls -la /tmp/vips_backup.sql
# 필요시 권한 변경
chmod 644 /tmp/vips_backup.sql
```
### 6.3 백업 파일 복원 - 방법 1 (명령행에서 직접 복원)
```bash
# 커스텀 포트 53306 사용하여 복원
mysql -u root -p -P 53306 vips < /tmp/vips_backup.sql
# 비밀번호 입력 없이 실행 (스크립트용)
mysql -u root -p비밀번호 -P 53306 vips < /tmp/vips_backup.sql
```
### 6.4 백업 파일 복원 - 방법 2 (MySQL 내부에서 복원)
```bash
# MariaDB 접속 (포트 53306 명시)
mysql -u root -p -P 53306
```
```sql
-- VIPS 데이터베이스 선택
USE vips;
-- 백업 파일 실행
SOURCE /tmp/vips_backup.sql;
-- 또는
\. /tmp/vips_backup.sql
```
### 6.5 백업 파일 복원 - 방법 3 (새 데이터베이스 생성 포함)
백업 파일에 CREATE DATABASE가 포함된 경우:
```bash
# 데이터베이스 이름 지정 없이 복원 (포트 53306)
mysql -u root -p -P 53306 < /tmp/vips_backup.sql
```
### 6.6 대용량 백업 파일 복원
대용량 파일의 경우 타임아웃 방지를 위한 옵션 추가:
```bash
# 타임아웃 설정 증가 (포트 53306)
mysql -u root -p -P 53306 \
--max_allowed_packet=512M \
--connect_timeout=3600 \
--wait_timeout=3600 \
vips < /tmp/vips_backup.sql
```
### 6.7 압축된 백업 파일 복원
```bash
# .gz 파일 복원 (포트 53306)
gunzip < /tmp/vips_backup.sql.gz | mysql -u root -p -P 53306 vips
# .zip 파일 복원 (포트 53306)
unzip -p /tmp/vips_backup.sql.zip | mysql -u root -p -P 53306 vips
```
---
## 7단계: 복원 결과 확인
### 7.1 MariaDB 접속
```bash
# VIPS 사용자로 접속 (포트 53306)
mysql -u vips -p -P 53306 vips
# 비밀번호 입력: xit5811807
```
### 7.2 데이터베이스 및 테이블 확인
```sql
-- 현재 데이터베이스 확인
SELECT DATABASE();
-- 테이블 목록 확인
SHOW TABLES;
-- 테이블 개수 확인
SELECT COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema = 'vips';
-- 각 테이블의 상세 정보 확인
SHOW TABLE STATUS FROM vips;
```
### 7.3 테이블 구조 확인
```sql
-- 특정 테이블 구조 확인 (VIPS 테이블 예시)
DESC tb_vehicle_info;
-- 또는
DESCRIBE tb_vehicle_info;
-- 또는
SHOW COLUMNS FROM tb_vehicle_info;
-- 테이블 생성 DDL 확인
SHOW CREATE TABLE tb_vehicle_info;
```
### 7.4 데이터 확인
```sql
-- 특정 테이블의 레코드 수 확인
SELECT COUNT(*) FROM tb_vehicle_info;
-- 상위 10개 데이터 조회
SELECT * FROM tb_vehicle_info LIMIT 10;
-- 모든 테이블의 레코드 수 확인
SELECT
TABLE_NAME,
TABLE_ROWS
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'vips'
ORDER BY TABLE_ROWS DESC;
```
### 7.5 인덱스 및 제약조건 확인
```sql
-- 특정 테이블의 인덱스 확인
SHOW INDEX FROM tb_vehicle_info;
-- 외래키 제약조건 확인
SELECT
CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'vips'
AND REFERENCED_TABLE_NAME IS NOT NULL;
```
### 7.6 데이터베이스 용량 확인
```sql
-- VIPS 데이터베이스 전체 크기 확인
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'vips'
GROUP BY table_schema;
-- 테이블별 크기 확인
SELECT
table_name AS 'Table',
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'vips'
ORDER BY (data_length + index_length) DESC;
```
### 7.7 문자셋 확인
```sql
-- 데이터베이스 문자셋 확인
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 포트 확인
SHOW VARIABLES LIKE 'port';
-- VIPS 테이블의 문자셋 확인
SELECT
TABLE_NAME,
TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'vips';
```
---
## 8단계: 접속 테스트 및 문제 해결
### 8.1 로컬 접속 테스트
```bash
# VIPS 사용자로 로컬 접속 테스트 (포트 53306)
mysql -u vips -p -P 53306 vips
# 접속 후 간단한 쿼리 실행
mysql -u vips -pxit5811807 -P 53306 vips -e "SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='vips';"
```
### 8.2 원격 접속 테스트 (다른 서버에서)
```bash
# 원격 서버에서 접속 테스트 (application-prd.yml 설정과 동일)
mysql -h 211.119.124.117 -P 53306 -u vips -p vips
# 비밀번호 포함하여 테스트 (스크립트용)
mysql -h 211.119.124.117 -P 53306 -u vips -pxit5811807 vips -e "SHOW TABLES;"
```
### 8.3 접속 문제 해결
**문제 1: Access denied for user**
```sql
-- MariaDB에 root로 접속하여 사용자 확인
SELECT User, Host FROM mysql.user WHERE User='vips';
-- 호스트가 일치하지 않으면 재생성
DROP USER 'vips'@'잘못된호스트';
CREATE USER 'vips'@'올바른호스트' IDENTIFIED BY 'xit5811807';
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'올바른호스트';
FLUSH PRIVILEGES;
```
**문제 2: Can't connect to MySQL server**
```bash
# MariaDB 서비스 상태 확인
systemctl status mariadb
# 서비스가 중지되어 있으면 시작
systemctl start mariadb
# 커스텀 포트 53306 리스닝 확인
ss -tlnp | grep 53306
netstat -tlnp | grep 53306
# 포트 설정 확인
mysql -u root -p -e "SHOW VARIABLES LIKE 'port';"
# 방화벽 확인
firewall-cmd --list-all
```
**문제 3: 원격 접속 불가**
```bash
# bind-address 설정 확인
grep bind-address /etc/my.cnf.d/mariadb-server.cnf
# 0.0.0.0 또는 원하는 IP로 설정되어 있는지 확인
# 변경 후 재시작 필요
systemctl restart mariadb
```
**문제 4: 복원 중 에러 발생**
```bash
# 에러 로그 확인
tail -100 /var/log/mariadb/mariadb.log
# 또는
journalctl -u mariadb -n 100
# SQL 파일 문법 확인 (일부만 실행해보기)
head -100 /tmp/myapp_db_backup.sql
```
---
## 9단계: 백업 설정 (추가 운영 관리)
### 9.1 수동 백업 명령어
```bash
# VIPS 전체 데이터베이스 백업 (포트 53306)
mysqldump -u root -p -P 53306 vips > /backup/vips_$(date +%Y%m%d_%H%M%S).sql
# 압축 백업
mysqldump -u root -p -P 53306 vips | gzip > /backup/vips_$(date +%Y%m%d_%H%M%S).sql.gz
# 특정 테이블만 백업
mysqldump -u root -p -P 53306 vips tb_vehicle_info tb_user > /backup/vips_tables_$(date +%Y%m%d).sql
# 구조만 백업 (데이터 제외)
mysqldump -u root -p -P 53306 --no-data vips > /backup/vips_schema_only.sql
# 데이터만 백업 (구조 제외)
mysqldump -u root -p -P 53306 --no-create-info vips > /backup/vips_data_only.sql
```
### 9.2 백업 디렉토리 생성 및 권한 설정
```bash
# 백업 디렉토리 생성
mkdir -p /backup/mariadb
# 권한 설정
chown root:root /backup/mariadb
chmod 700 /backup/mariadb
```
### 9.3 자동 백업 스크립트 생성
```bash
# 백업 스크립트 생성
vi /backup/mariadb_backup.sh
```
스크립트 내용:
```bash
#!/bin/bash
# VIPS 데이터베이스 백업 스크립트
DB_NAME="vips"
DB_USER="root"
DB_PASS="your_root_password"
DB_PORT="53306"
BACKUP_DIR="/backup/mariadb"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
RETENTION_DAYS=7
# 백업 디렉토리 생성 (없으면)
mkdir -p $BACKUP_DIR
# 백업 실행
echo "Starting VIPS database backup at $(date)"
mysqldump -u $DB_USER -p$DB_PASS -P $DB_PORT $DB_NAME | gzip > $BACKUP_FILE
# 백업 결과 확인
if [ $? -eq 0 ]; then
echo "Backup completed successfully: $BACKUP_FILE"
# 파일 크기 확인
FILE_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo "Backup file size: $FILE_SIZE"
# 오래된 백업 파일 삭제 (7일 이상)
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Old backups cleaned up (retention: $RETENTION_DAYS days)"
else
echo "Backup failed!"
exit 1
fi
echo "Backup process finished at $(date)"
```
스크립트 실행 권한 부여:
```bash
chmod 700 /backup/mariadb_backup.sh
```
### 9.4 cron을 이용한 자동 백업 설정
```bash
# crontab 편집
crontab -e
```
cron 설정 추가:
```bash
# 매일 새벽 2시에 백업 실행
0 2 * * * /backup/mariadb_backup.sh >> /backup/mariadb/backup.log 2>&1
# 매주 일요일 새벽 3시에 백업 실행
0 3 * * 0 /backup/mariadb_backup.sh >> /backup/mariadb/backup.log 2>&1
# 매월 1일 새벽 4시에 백업 실행
0 4 1 * * /backup/mariadb_backup.sh >> /backup/mariadb/backup.log 2>&1
```
cron 설정 확인:
```bash
# crontab 목록 확인
crontab -l
# cron 서비스 상태 확인
systemctl status crond
# cron 로그 확인
tail -f /var/log/cron
```
---
## 전체 실행 순서 요약
```bash
# 1. MariaDB 설치
dnf install -y mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb
# 2. 보안 설정
mysql_secure_installation
# 3. 커스텀 포트 설정 (53306)
vi /etc/my.cnf.d/mariadb-server.cnf
# [mysqld] 섹션에 port=53306 추가
# 4. 원격 접속 설정
vi /etc/my.cnf.d/mariadb-server.cnf
# bind-address=0.0.0.0 설정
systemctl restart mariadb
# 5. 방화벽 설정
firewall-cmd --permanent --add-port=53306/tcp
firewall-cmd --reload
# 6. 포트 확인
ss -tlnp | grep 53306
# 7. MariaDB 접속하여 데이터베이스 및 사용자 생성
mysql -u root -p -P 53306
```
```sql
-- VIPS 데이터베이스 생성
CREATE DATABASE vips CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- VIPS 사용자 생성 및 권한 부여
CREATE USER 'vips'@'localhost' IDENTIFIED BY 'xit5811807';
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'localhost';
-- 원격 접속용 사용자 (application-prd.yml 설정)
CREATE USER 'vips'@'%' IDENTIFIED BY 'xit5811807';
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'%';
FLUSH PRIVILEGES;
exit;
```
```bash
# 8. 백업 파일 업로드 (로컬 PC에서)
scp vips_backup.sql root@서버IP:/tmp/
# 9. 백업 복원 (서버에서, 포트 53306 명시)
mysql -u root -p -P 53306 vips < /tmp/vips_backup.sql
# 10. 복원 확인
mysql -u vips -pxit5811807 -P 53306 vips
```
```sql
-- 테이블 확인
SHOW TABLES;
SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='vips';
exit;
```
---
## 유용한 MariaDB 관리 명령어
### 데이터베이스 관리
```sql
-- 모든 데이터베이스 목록
SHOW DATABASES;
-- 데이터베이스 삭제 (주의!)
DROP DATABASE vips;
-- 데이터베이스 이름 변경 (직접 지원 안함, 백업/복원 필요)
-- 방법: 백업 → 새 DB 생성 → 복원 → 기존 DB 삭제
```
### 사용자 관리
```sql
-- 모든 사용자 목록
SELECT User, Host FROM mysql.user;
-- VIPS 사용자 비밀번호 변경
ALTER USER 'vips'@'localhost' IDENTIFIED BY 'new_password';
ALTER USER 'vips'@'%' IDENTIFIED BY 'new_password';
-- 사용자 삭제
DROP USER 'vips'@'localhost';
DROP USER 'vips'@'%';
-- 특정 권한만 회수
REVOKE DELETE ON vips.* FROM 'vips'@'localhost';
-- 모든 권한 회수
REVOKE ALL PRIVILEGES ON vips.* FROM 'vips'@'localhost';
```
### 테이블 관리
```sql
-- 테이블 삭제
DROP TABLE table_name;
-- 테이블 비우기 (구조는 유지)
TRUNCATE TABLE table_name;
-- 테이블 이름 변경
RENAME TABLE old_name TO new_name;
-- 테이블 복사
CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table SELECT * FROM old_table;
```
### 성능 모니터링
```sql
-- 현재 실행 중인 쿼리 확인
SHOW PROCESSLIST;
-- 특정 프로세스 강제 종료
KILL [process_id];
-- 상태 변수 확인
SHOW STATUS;
SHOW VARIABLES;
-- 느린 쿼리 확인
SHOW VARIABLES LIKE 'slow_query%';
```
---
## 보안 권장사항
1. **강력한 비밀번호 사용**
- 최소 12자 이상, 대소문자/숫자/특수문자 조합
2. **최소 권한 원칙**
- 애플리케이션 사용자에게 필요한 최소 권한만 부여
- 읽기 전용 작업에는 SELECT 권한만 부여
3. **원격 root 접속 차단**
- root는 localhost에서만 접속 허용
4. **정기적인 백업**
- 매일 자동 백업 설정
- 백업 파일 주기적 확인
5. **방화벽 설정**
- 필요한 IP만 53306 포트 접근 허용
- 특정 IP 대역만 접근 허용 설정
```bash
# 특정 IP만 허용 (예시)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="53306" accept'
firewall-cmd --reload
```
6. **MariaDB 업데이트**
- 정기적인 보안 패치 적용
```bash
dnf update mariadb-server
```
---
## 참고사항
- **VIPS 프로젝트 설정**
- 데이터베이스: vips
- 사용자: vips
- 비밀번호: xit5811807
- 포트: 53306 (커스텀 포트)
- 문자셋: UTF-8 (utf8mb4)
- **MariaDB 기본 정보**
- 기본 포트: 3306 (VIPS는 53306 사용)
- 설정 파일 위치: `/etc/my.cnf`, `/etc/my.cnf.d/mariadb-server.cnf`
- 데이터 디렉토리: `/var/lib/mysql/`
- 로그 파일: `/var/log/mariadb/mariadb.log`
- 소켓 파일: `/var/lib/mysql/mysql.sock`
---
## 문의 및 추가 정보
- MariaDB 공식 문서: https://mariadb.com/kb/
- Rocky Linux 공식 문서: https://docs.rockylinux.org/

@ -6,7 +6,7 @@
### 기본 설정
- **API 선택**: YML flag 값에 따라 구/신 API 호출 결정
- **API 선택**: 각 api별 YML flag 값에 따라 구/신 API 호출 결정
- **통합 모델**: 구/신 API 응답을 통일된 model object로 처리
- 구 API: 자동차기본정보 API
- 신 API: 자동차기본정보 API, 자동차등록원부(갑)

@ -28,19 +28,27 @@ public class VmisProperties {
public static class ApiProps {
@NotNull
private UrlProps url = new UrlProps();
// 구/신 API 선택 플래그 (YML flag)
private boolean useOldBasic = false; // true = /old-basic, false = /new-basic
private boolean useNewLedger = true; // 현재는 신규 원부만 사용
@Data
public static class UrlProps {
@NotBlank
private String base = "http://localhost:8081/api/v1/vehicles"; // 기본 Base URL
// 구/신 API 엔드포인트 경로 (신규 요구사항 반영)
@NotBlank
private String basic = "/basic"; // 자동차기본정보 엔드포인트 경로
private String oldBasic = "/old-basic"; // 구 자동차기본정보
@NotBlank
private String ledger = "/ledger"; // 자동차등록원부 엔드포인트 경로
private String newBasic = "/new-basic"; // 신 자동차기본정보
@NotBlank
private String newLedger = "/new-ledger"; // 신 자동차등록원부(갑)
// 외부 VMIS-interface 호출용 전체 URL 조합 헬퍼
public String buildBasicUrl() { return join(base, basic); }
public String buildLedgerUrl() { return join(base, ledger); }
// 구/신 URL 조합 헬퍼
public String buildOldBasicUrl() { return join(base, oldBasic); }
public String buildNewBasicUrl() { return join(base, newBasic); }
public String buildNewLedgerUrl() { return join(base, newLedger); }
private String join(String base, String path) {
String b = base;

@ -1,10 +1,10 @@
package go.kr.project.api.controller;
import go.kr.project.api.model.Envelope;
import go.kr.project.api.model.request.BasicRequest;
import go.kr.project.api.model.request.LedgerRequest;
import go.kr.project.api.model.response.BasicResponse;
import go.kr.project.api.model.response.LedgerResponse;
import go.kr.project.api.model.request.OldBasicRequest;
import go.kr.project.api.model.request.NewLedgerRequest;
import go.kr.project.api.model.response.OldBasicResponse;
import go.kr.project.api.model.response.NewLedgerResponse;
import go.kr.project.api.service.ExternalVehicleApiService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
@ -69,18 +69,18 @@ public class VehicleInterfaceController {
)
)
)
public ResponseEntity<Envelope<BasicResponse>> basic(
@org.springframework.web.bind.annotation.RequestBody Envelope<BasicRequest> envelope
public ResponseEntity<Envelope<OldBasicResponse>> basic(
@org.springframework.web.bind.annotation.RequestBody Envelope<OldBasicRequest> envelope
) {
// 중요 로직: Swagger 요청 Envelope에서 BasicRequest 추출 (차량번호 및 필수 파라미터 포함)
BasicRequest request = (envelope != null && !envelope.getData().isEmpty()) ? envelope.getData().get(0) : null;
OldBasicRequest request = (envelope != null && !envelope.getData().isEmpty()) ? envelope.getData().get(0) : null;
if (request == null || request.getVhrno() == null || request.getVhrno().trim().isEmpty()) {
return ResponseEntity.ok(new Envelope<>(Collections.emptyList()));
}
// VehicleInfoService는 모드에 따라 구현체가 자동 주입되어 분기 처리
BasicResponse basic = service.getBasicInfo(request);
Envelope<BasicResponse> out = (basic != null) ? new Envelope<>(basic) : new Envelope<>(Collections.emptyList());
OldBasicResponse basic = service.getBasicInfo(request);
Envelope<OldBasicResponse> out = (basic != null) ? new Envelope<>(basic) : new Envelope<>(Collections.emptyList());
return ResponseEntity.ok(out);
}
@ -102,17 +102,17 @@ public class VehicleInterfaceController {
)
)
)
public ResponseEntity<Envelope<LedgerResponse>> ledger(
@org.springframework.web.bind.annotation.RequestBody Envelope<LedgerRequest> envelope
public ResponseEntity<Envelope<NewLedgerResponse>> ledger(
@org.springframework.web.bind.annotation.RequestBody Envelope<NewLedgerRequest> envelope
) {
// 중요 로직: Swagger 요청 Envelope에서 LedgerRequest 추출 (차량번호 및 필수 파라미터 포함)
LedgerRequest request = (envelope != null && !envelope.getData().isEmpty()) ? envelope.getData().get(0) : null;
NewLedgerRequest request = (envelope != null && !envelope.getData().isEmpty()) ? envelope.getData().get(0) : null;
if (request == null || request.getVhrno() == null || request.getVhrno().trim().isEmpty()) {
return ResponseEntity.ok(new Envelope<>(Collections.emptyList()));
}
LedgerResponse ledger = service.getLedgerInfo(request);
Envelope<LedgerResponse> out = (ledger != null) ? new Envelope<>(ledger) : new Envelope<>(Collections.emptyList());
NewLedgerResponse ledger = service.getLedgerInfo(request);
Envelope<NewLedgerResponse> out = (ledger != null) ? new Envelope<>(ledger) : new Envelope<>(Collections.emptyList());
return ResponseEntity.ok(out);
}
}

@ -0,0 +1,30 @@
package go.kr.project.api.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
/**
* VMIS-interface
* { "txId": "yyyyMMddHHmmssSSS12345678", "request": {"data": [...]}, "response": {"data": [...]} }
*
* : / .
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
public class ApiExchangeEnvelope<TReq, TRes> {
/** 트랜잭션 ID */
@JsonProperty("txId")
private String txId;
/** 요청 데이터 래퍼 */
@JsonProperty("request")
private Envelope<TReq> request;
/** 응답 데이터 래퍼 */
@JsonProperty("response")
private Envelope<TRes> response;
}

@ -1,7 +1,7 @@
package go.kr.project.api.model;
import go.kr.project.api.model.response.BasicResponse;
import go.kr.project.api.model.response.LedgerResponse;
import go.kr.project.api.model.response.OldBasicResponse;
import go.kr.project.api.model.response.NewLedgerResponse;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
@ -21,8 +21,8 @@ public class VehicleApiResponseVO {
private boolean success; // 성공 여부
private String message; // 메시지
private BasicResponse basicInfo; // 차량 기본정보
private LedgerResponse ledgerInfo; // 등록원부 정보
private OldBasicResponse basicInfo; // 차량 기본정보
private NewLedgerResponse ledgerInfo; // 등록원부 정보
private String carBassMatterInqireId; // 자동차 기본 사항 조회 ID
private String carLedgerFrmbkId; // 자동차 등록 원부 갑 ID

@ -1,89 +0,0 @@
package go.kr.project.api.model.request;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
@Schema(description = "자동차기본사항조회 요청 항목")
public class BasicRequest {
// 본문 공통 메타 (VmisRequestEnricher에서 자동 설정)
@Schema(description = "정보시스템ID (자동설정: vmis.system.infoSysId)", example = "41-345")
@JsonProperty("INFO_SYS_ID")
private String infoSysId;
@Schema(description = "정보시스템IP (자동설정: vmis.system.infoSysIp)", example = "105.19.10.135")
@JsonProperty("INFO_SYS_IP")
private String infoSysIp;
@Schema(description = "시군구코드 (자동설정: vmis.system.sigunguCode)", example = "41460")
@JsonProperty("SIGUNGU_CODE")
private String sigunguCode;
// 서비스별 필드 (VmisRequestEnricher에서 자동 설정)
@Schema(description = "연계정보코드 (자동설정: vmis.gov.services.basic.cntcInfoCode)", example = "AC1_FD11_01")
@JsonProperty("CNTC_INFO_CODE")
private String cntcInfoCode;
@Schema(description = "담당자ID (자동설정: vmis.system.chargerId)", example = "")
@JsonProperty("CHARGER_ID")
private String chargerId;
@Schema(description = "담당자IP (자동설정: vmis.system.chargerIp)", example = "")
@JsonProperty("CHARGER_IP")
private String chargerIp;
@Schema(description = "담당자명(사용자) (자동설정: vmis.system.chargerNm)", example = "")
@JsonProperty("CHARGER_NM")
private String chargerNm;
@Schema(description = "부과기준일", example = "20250101")
@JsonProperty("LEVY_STDDE")
private String levyStdde;
@Schema(description = "조회구분코드 {2:차대번호(VIN), 3:자동차번호(VHRNO)} (VmisRequestEnricher에서 자동설정)")
@JsonProperty("INQIRE_SE_CODE")
private String inqireSeCode;
@Schema(description = "자동차등록번호", example = "12가3456")
@JsonProperty("VHRNO")
private String vhrno;
@Schema(description = "차대번호", example = "KMHAB812345678901")
@JsonProperty("VIN")
private String vin;
/*
// 추가 항목 (명세 샘플 기준)
@Schema(description = "개인정보공개", example = "Y")
@JsonProperty("ONES_INFORMATION_OPEN")
private String onesInformationOpen;
@Schema(description = "민원인성명")
@JsonProperty("CPTTR_NM")
private String cpttrNm;
@Schema(description = "민원인주민번호")
@JsonProperty("CPTTR_IHIDNUM")
@Size(max = 13)
private String cpttrIhidnum;
@Schema(description = "민원인법정동코드")
@JsonProperty("CPTTR_LEGALDONG_CODE")
private String cpttrLegaldongCode;
@Schema(description = "경로구분코드")
@JsonProperty("ROUTE_SE_CODE")
private String routeSeCode;
@Schema(description = "내역표시")
@JsonProperty("DETAIL_EXPRESSION")
private String detailExpression;
*/
}

@ -1,80 +0,0 @@
package go.kr.project.api.model.request;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.Size;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Schema(description = "자동차등록원부(갑) 요청 항목")
@Getter
@Setter
public class LedgerRequest {
// 본문 공통 메타 (VmisRequestEnricher에서 자동 설정)
@Schema(description = "정보시스템ID (자동설정: vmis.system.infoSysId)", example = "41-345")
@JsonProperty("INFO_SYS_ID")
private String infoSysId;
@Schema(description = "정보시스템IP (자동설정: vmis.system.infoSysIp)", example = "105.19.10.135")
@JsonProperty("INFO_SYS_IP")
private String infoSysIp;
@Schema(description = "시군구코드 (자동설정: vmis.system.sigunguCode)", example = "41460")
@JsonProperty("SIGUNGU_CODE")
private String sigunguCode;
// 서비스별 필드 (VmisRequestEnricher에서 자동 설정)
@Schema(description = "연계정보코드 (자동설정: vmis.gov.services.ledger.cntcInfoCode)", example = "AC1_FD11_02")
@JsonProperty("CNTC_INFO_CODE")
private String cntcInfoCode;
@Schema(description = "담당자ID (자동설정: vmis.system.chargerId)", example = "")
@JsonProperty("CHARGER_ID")
private String chargerId;
@Schema(description = "담당자IP (자동설정: vmis.system.chargerIp)", example = "")
@JsonProperty("CHARGER_IP")
private String chargerIp;
@Schema(description = "담당자명(사용자) (자동설정: vmis.system.chargerNm)", example = "")
@JsonProperty("CHARGER_NM")
private String chargerNm;
@Schema(description = "자동차등록번호 (필수)", example = "12가3456")
@JsonProperty("VHRNO")
private String vhrno;
@Schema(description = "개인정보공개 {1:소유자공개, 2:비공개, 3:비공개(주민등록번호), 4:비공개(사용본거지)} (기본값: 1, VmisRequestEnricher에서 자동설정)")
@JsonProperty("ONES_INFORMATION_OPEN")
private String onesInformationOpen;
@Schema(description = "민원인성명 (통합조회 시 BasicResponse의 MBER_NM에서 자동매핑)")
@JsonProperty("CPTTR_NM")
private String cpttrNm;
@Schema(description = "민원인주민번호 (통합조회 시 BasicResponse의 MBER_SE_NO에서 자동매핑)")
@JsonProperty("CPTTR_IHIDNUM")
@Size(max = 13)
private String cpttrIhidnum;
@Schema(description = "민원인법정동코드 (기본값: null)")
@JsonProperty("CPTTR_LEGALDONG_CODE")
private String cpttrLegaldongCode;
@Schema(description = "경로구분코드 (기본값: 3, VmisRequestEnricher에서 자동설정)")
@JsonProperty("ROUTE_SE_CODE")
private String routeSeCode;
@Schema(description = "내역표시 {1:전체내역, 2:최종내역} (기본값: 1, VmisRequestEnricher에서 자동설정)")
@JsonProperty("DETAIL_EXPRESSION")
private String detailExpression;
@Schema(description = "조회구분코드 {1:열람, 2:발급} (기본값: 1, VmisRequestEnricher에서 자동설정)")
@JsonProperty("INQIRE_SE_CODE")
private String inqireSeCode;
}

@ -0,0 +1,71 @@
package go.kr.project.api.model.request;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
@Schema(description = "자동차기본사항조회 요청 항목 (신버전)")
public class NewBasicRequest { // 총 8개 필드 (외부 클래스 8개, 중첩 Record 클래스 4개)
// 본문 공통 메타 (application.yml에서 자동 설정)
@Schema(description = "정보시스템ID (자동설정: new.vmis.system.infoSysId)", example = "41-345")
@JsonProperty("INFO_SYS_ID")
private String infoSysId;
@Schema(description = "정보시스템IP (자동설정: new.vmis.system.infoSysIpAddr)", example = "105.19.10.135")
@JsonProperty("INFO_SYS_IP_ADDR")
private String infoSysIpAddr;
@Schema(description = "시군구코드 (자동설정: new.vmis.system.sggCd)", example = "41460")
@JsonProperty("SGG_CD")
private String sggCd;
// 서비스별 필드 (application.yml에서 자동 설정)
@Schema(description = "연계정보코드 (자동설정: new.vmis.gov.services.basic.linkInfoCd)", example = "AC1_FD11_01")
@JsonProperty("LINK_INFO_CD")
private String linkInfoCd;
@Schema(description = "담당자ID (자동설정: new.vmis.system.picId)", example = "")
@JsonProperty("PIC_ID")
private String picId;
@Schema(description = "담당자IP (자동설정: new.vmis.system.picIpAddr)", example = "")
@JsonProperty("PIC_IP_ADDR")
private String picIpAddr;
@Schema(description = "담당자명 (자동설정: new.vmis.system.picNm)", example = "")
@JsonProperty("PIC_NM")
private String picNm;
@Schema(description = "조회 대상 record 배열")
@JsonProperty("record")
private java.util.List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
@Schema(name = "NewBasicRequest.Record", description = "기본사항 요청 record 항목 (신버전)")
public static class Record {
@Schema(description = "부과기준일", example = "20250101")
@JsonProperty("LEVY_CRTR_YMD")
private String levyCrtrYmd;
@Schema(description = "조회구분코드 (자동설정: VHRNO not null → 3:자동차번호, VIN not null → 2:차대번호)")
@JsonProperty("INQ_SE_CD")
private String inqSeCd;
@Schema(description = "자동차등록번호", example = "12가3456")
@JsonProperty("VHRNO")
private String vhrno;
@Schema(description = "차대번호", example = "KMHAB812345678901")
@JsonProperty("VIN")
private String vin;
}
}

@ -0,0 +1,80 @@
package go.kr.project.api.model.request;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.Size;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Schema(description = "자동차등록원부(갑) 요청 항목 (신버전)")
@Getter
@Setter
public class NewLedgerRequest { // 총 15개 필드
// 본문 공통 메타 (application.yml에서 자동 설정)
@Schema(description = "정보시스템ID (자동설정: new.vmis.system.infoSysId)", example = "41-345")
@JsonProperty("INFO_SYS_ID")
private String infoSysId;
@Schema(description = "정보시스템IP주소 (자동설정: new.vmis.system.infoSysIpAddr)", example = "105.19.10.135")
@JsonProperty("INFO_SYS_IP_ADDR")
private String infoSysIpAddr;
@Schema(description = "시군구코드 (자동설정: new.vmis.system.sggCd)", example = "41460")
@JsonProperty("SGG_CD")
private String sggCd;
// 서비스별 필드 (application.yml에서 자동 설정)
@Schema(description = "연계정보코드 (자동설정: new.vmis.gov.services.ledger.linkInfoCd)", example = "AC1_FD11_02")
@JsonProperty("LINK_INFO_CD")
private String linkInfoCd;
@Schema(description = "담당자ID (자동설정: new.vmis.system.picId)", example = "")
@JsonProperty("PIC_ID")
private String picId;
@Schema(description = "담당자IP주소 (자동설정: new.vmis.system.picIpAddr)", example = "")
@JsonProperty("PIC_IP_ADDR")
private String picIpAddr;
@Schema(description = "담당자명 (자동설정: new.vmis.system.picNm)", example = "")
@JsonProperty("PIC_NM")
private String picNm;
@Schema(description = "자동차등록번호")
@JsonProperty("VHRNO")
private String vhrno;
@Schema(description = "개인정보공개 {1:소유자공개, 2:비공개, 3:비공개(주민등록번호), 4:비공개(사용본거지)}")
@JsonProperty("PRVC_RLS")
private String prvcRls;
@Schema(description = "민원인성명")
@JsonProperty("CVLPR_NM")
private String cvlprNm;
@Schema(description = "민원인주민번호")
@JsonProperty("CVLPR_IDECNO")
@Size(max = 13)
private String cvlprIdecno;
@Schema(description = "민원인법정동코드")
@JsonProperty("CVLPR_STDG_CD")
private String cvlprStdgCd;
@Schema(description = "경로구분코드 고정코드:3")
@JsonProperty("PATH_SE_CD")
private String pathSeCd;
@Schema(description = "내역표시 {1:전체내역, 2:최종내역}")
@JsonProperty("DSCTN_INDCT")
private String dsctnIndct;
@Schema(description = "조회구분코드 (자동설정: 1:열람 고정)")
@JsonProperty("INQ_SE_CD")
private String inqSeCd;
}

@ -0,0 +1,71 @@
package go.kr.project.api.model.request;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
@Schema(description = "자동차기본사항조회 요청 항목 (구버전)")
public class OldBasicRequest { // 총 8개 필드 (외부 클래스 8개, 중첩 Record 클래스 4개)
// 본문 공통 메타 (application.yml에서 자동 설정)
@Schema(description = "정보시스템ID (자동설정: old.vmis.system.infoSysId)", example = "41-345")
@JsonProperty("INFO_SYS_ID")
private String infoSysId;
@Schema(description = "정보시스템IP (자동설정: old.vmis.system.infoSysIp)", example = "105.19.10.135")
@JsonProperty("INFO_SYS_IP")
private String infoSysIp;
@Schema(description = "시군구코드 (자동설정: old.vmis.system.sigunguCode)", example = "41460")
@JsonProperty("SIGUNGU_CODE")
private String sigunguCode;
// 서비스별 필드 (application.yml에서 자동 설정)
@Schema(description = "연계정보코드 (자동설정: old.vmis.gov.services.basic.cntcInfoCode)", example = "AC1_FD11_01")
@JsonProperty("CNTC_INFO_CODE")
private String cntcInfoCode;
@Schema(description = "담당자ID (자동설정: old.vmis.system.chargerId)", example = "")
@JsonProperty("CHARGER_ID")
private String chargerId;
@Schema(description = "담당자IP (자동설정: old.vmis.system.chargerIp)", example = "")
@JsonProperty("CHARGER_IP")
private String chargerIp;
@Schema(description = "담당자명 (자동설정: old.vmis.system.chargerNm)", example = "")
@JsonProperty("CHARGER_NM")
private String chargerNm;
@Schema(description = "조회 대상 record 배열")
@JsonProperty("record")
private java.util.List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Getter
@Setter
@Schema(name = "OldBasicRequest.Record", description = "기본사항 요청 record 항목 (구버전)")
public static class Record {
@Schema(description = "부과기준일", example = "20250101")
@JsonProperty("LEVY_STDDE")
private String levyStdde;
@Schema(description = "조회구분코드 (자동설정: VHRNO not null → 3:자동차번호, VIN not null → 2:차대번호)")
@JsonProperty("INQIRE_SE_CODE")
private String inqireSeCode;
@Schema(description = "자동차등록번호", example = "12가3456")
@JsonProperty("VHRNO")
private String vhrno;
@Schema(description = "차대번호", example = "KMHAB812345678901")
@JsonProperty("VIN")
private String vin;
}
}

@ -1,208 +0,0 @@
package go.kr.project.api.model.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차기본사항조회 응답 모델")
@Getter
@Setter
public class BasicResponse {
/** 연계결과코드 */
@JsonProperty("CNTC_RESULT_CODE")
private String cntcResultCode;
/** 연계결과상세 */
@JsonProperty("CNTC_RESULT_DTLS")
private String cntcResultDtls;
/** 레코드 목록 */
@JsonProperty("record")
private List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(name = "BasicRecord", description = "기본사항 record 항목")
@Getter
@Setter
public static class Record {
/** 생산년도 */
@JsonProperty("PRYE") private String prye;
/** 등록일자 */
@JsonProperty("REGIST_DE") private String registDe;
/** 말소등록구분코드 */
@JsonProperty("ERSR_REGIST_SE_CODE") private String ersrRegistSeCode;
/** 말소등록구분명 */
@JsonProperty("ERSR_REGIST_SE_NM") private String ersrRegistSeNm;
/** 말소등록일자 */
@JsonProperty("ERSR_REGIST_DE") private String ersrRegistDe;
/** 등록상세코드 */
@JsonProperty("REGIST_DETAIL_CODE") private String registDetailCode;
/** 배기량 */
@JsonProperty("DSPLVL") private String dsplvl;
/** 사용본거지법정동코드 */
@JsonProperty("USE_STRNGHLD_LEGALDONG_CODE") private String useStrnghldLegaldongCode;
/** 사용본거지행정동코드 */
@JsonProperty("USE_STRNGHLD_ADSTRD_CODE") private String useStrnghldAdstrdCode;
/** 사용본거지산 */
@JsonProperty("USE_STRNGHLD_MNTN") private String useStrnghldMntn;
/** 사용본거지번지 */
@JsonProperty("USE_STRNGHLD_LNBR") private String useStrnghldLnbr;
/** 사용본거지호 */
@JsonProperty("USE_STRNGHLD_HO") private String useStrnghldHo;
/** 사용본거지주소명 */
@JsonProperty("USE_STRNGHLD_ADRES_NM") private String useStrnghldAdresNm;
/** 사용본거지도로명코드 */
@JsonProperty("USE_STRNGHLD_ROAD_NM_CODE") private String useStrnghldRoadNmCode;
/** 사용본거지지하건물구분코드 */
@JsonProperty("USGSRHLD_UNDGRND_BULD_SE_CODE") private String usgsrhldUndgrndBuldSeCode;
/** 사용본거지건물본번 */
@JsonProperty("USE_STRNGHLD_BULD_MAIN_NO") private String useStrnghldBuldMainNo;
/** 사용본거지건물부번 */
@JsonProperty("USE_STRNGHLD_BULD_SUB_NO") private String useStrnghldBuldSubNo;
/** 사용본거지주소전체 */
@JsonProperty("USGSRHLD_ADRES_FULL") private String usgsrhldAdresFull;
/** 소유자구분코드 */
@JsonProperty("MBER_SE_CODE") private String mberSeCode;
/** 소유자명 */
@JsonProperty("MBER_NM") private String mberNm;
/** 소유자구분번호 */
@JsonProperty("MBER_SE_NO") private String mberSeNo;
/** 전화번호 */
@JsonProperty("TELNO") private String telno;
/** 소유자법정동코드 */
@JsonProperty("OWNER_LEGALDONG_CODE") private String ownerLegaldongCode;
/** 소유자행정동코드 */
@JsonProperty("OWNER_ADSTRD_CODE") private String ownerAdstrdCode;
/** 소유자산 */
@JsonProperty("OWNER_MNTN") private String ownerMntn;
/** 소유자번지 */
@JsonProperty("OWNER_LNBR") private String ownerLnbr;
/** 소유자호 */
@JsonProperty("OWNER_HO") private String ownerHo;
/** 소유자주소명 */
@JsonProperty("OWNER_ADRES_NM") private String ownerAdresNm;
/** 소유자도로명코드 */
@JsonProperty("OWNER_ROAD_NM_CODE") private String ownerRoadNmCode;
/** 소유자지하건물구분코드 */
@JsonProperty("OWNER_UNDGRND_BULD_SE_CODE") private String ownerUndgrndBuldSeCode;
/** 소유자건물본번 */
@JsonProperty("OWNER_BULD_MAIN_NO") private String ownerBuldMainNo;
/** 소유자건물부번 */
@JsonProperty("OWNER_BULD_SUB_NO") private String ownerBuldSubNo;
/** 소유자주소전체 */
@JsonProperty("OWNER_ADRES_FULL") private String ownerAdresFull;
/** 변경후차량번호 */
@JsonProperty("AFTR_VHRNO") private String aftrVhrno;
/** 사용연료코드 */
@JsonProperty("USE_FUEL_CODE") private String useFuelCode;
/** 용도구분코드 */
@JsonProperty("PRPOS_SE_CODE") private String prposSeCode;
/** 제작사명 */
@JsonProperty("MTRS_FOM_NM") private String mtrsFomNm;
/** 변경전차량번호 */
@JsonProperty("FRNT_VHRNO") private String frntVhrno;
/** 차량번호 */
@JsonProperty("VHRNO") private String vhrno;
/** 차대번호 */
@JsonProperty("VIN") private String vin;
/** 차명 */
@JsonProperty("CNM") private String cnm;
/** 차량총중량 */
@JsonProperty("VHCLE_TOT_WT") private String vhcleTotWt;
/** 자동차보험종료일자 */
@JsonProperty("CAAG_ENDDE") private String caagEndde;
/** 변경일자 */
@JsonProperty("CHANGE_DE") private String changeDe;
/** 차종분류코드 */
@JsonProperty("VHCTY_ASORT_CODE") private String vhctyAsortCode;
/** 차종유형코드 */
@JsonProperty("VHCTY_TY_CODE") private String vhctyTyCode;
/** 차종구분코드 */
@JsonProperty("VHCTY_SE_CODE") private String vhctySeCode;
/** 최대적재량 */
@JsonProperty("MXMM_LDG") private String mxmmLdg;
/** 차종분류명 */
@JsonProperty("VHCTY_ASORT_NM") private String vhctyAsortNm;
/** 차종유형명 */
@JsonProperty("VHCTY_TY_NM") private String vhctyTyNm;
/** 차종구분명 */
@JsonProperty("VHCTY_SE_NM") private String vhctySeNm;
/** 최초등록일자 */
@JsonProperty("FRST_REGIST_DE") private String frstRegistDe;
/** 형식명 */
@JsonProperty("FOM_NM") private String fomNm;
/** 취득일자 */
@JsonProperty("ACQS_DE") private String acqsDe;
/** 취득종료일자 */
@JsonProperty("ACQS_END_DE") private String acqsEndDe;
/** 연식월 */
@JsonProperty("YBL_MD") private String yblMd;
/** 이전등록일자 */
@JsonProperty("TRANSR_REGIST_DE") private String transrRegistDe;
/** 특정등록상태코드 */
@JsonProperty("SPCF_REGIST_STTUS_CODE") private String spcfRegistSttusCode;
/** 색상명 */
@JsonProperty("COLOR_NM") private String colorNm;
/** 저당건수 */
@JsonProperty("MRTG_CO") private String mrtgCo;
/** 압류건수 */
@JsonProperty("SEIZR_CO") private String seizrCo;
/** 압인건수 */
@JsonProperty("STMD_CO") private String stmdCo;
/** 번호판보관여부 */
@JsonProperty("NMPL_CSDY_AT") private String nmplCsdyAt;
/** 번호판보관반납일자 */
@JsonProperty("NMPL_CSDY_REMNR_DE") private String nmplCsdyRemnrDe;
/** 원산지구분코드 */
@JsonProperty("ORIGIN_SE_CODE") private String originSeCode;
/** 번호판규격코드 */
@JsonProperty("NMPL_STNDRD_CODE") private String nmplStndrdCode;
/** 취득금액 */
@JsonProperty("ACQS_AMOUNT") private String acqsAmount;
/** 검사유효기간시작일자 */
@JsonProperty("INSPT_VALID_PD_BGNDE") private String insptValidPdBgnde;
/** 검사유효기간종료일자 */
@JsonProperty("INSPT_VALID_PD_ENDDE") private String insptValidPdEndde;
/** 사용본거지우편번호코드 */
@JsonProperty("USE_STRNGHLD_GRC_CODE") private String useStrnghldGrcCode;
/** 화물차승차정원수 */
@JsonProperty("TKCAR_PSCAP_CO") private String tkcarPscapCo;
/** 사양번호 */
@JsonProperty("SPMNNO") private String spmnno;
/** 주행거리 */
@JsonProperty("TRVL_DSTNC") private String trvlDstnc;
/** 최초등록신청번호 */
@JsonProperty("FRST_REGIST_RQRCNO") private String frstRegistRqrcno;
/** 자진말소예방공지일자 */
@JsonProperty("VLNT_ERSR_PRVNTC_NTICE_DE") private String vlntErsrPrvntcNticeDe;
/** 등록기관명 */
@JsonProperty("REGIST_INSTT_NM") private String registInsttNm;
/** 처리불가사유코드 */
@JsonProperty("PROCESS_IMPRTY_RESN_CODE") private String processImprtyResnCode;
/** 처리불가사유상세 */
@JsonProperty("PROCESS_IMPRTY_RESN_DTLS") private String processImprtyResnDtls;
/** 차체길이 */
@JsonProperty("CBD_LT") private String cbdLt;
/** 차체너비 */
@JsonProperty("CBD_BT") private String cbdBt;
/** 차체높이 */
@JsonProperty("CBD_HG") private String cbdHg;
/** 최초최대적재량 */
@JsonProperty("FRST_MXMM_LDG") private String frstMxmmLdg;
/** 연료소비율 */
@JsonProperty("FUEL_CNSMP_RT") private String fuelCnsmpRt;
/** 전기복합연료소비율 */
@JsonProperty("ELCTY_CMPND_FUEL_CNSMP_RT") private String elctyCmpndFuelCnsmpRt;
}
}

@ -1,324 +0,0 @@
package go.kr.project.api.model.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차등록원부(갑) 응답 모델")
@Getter
@Setter
public class LedgerResponse {
/** 연계결과코드 */
@JsonProperty("CNTC_RESULT_CODE")
private String cntcResultCode;
/** 연계결과상세 */
@JsonProperty("CNTC_RESULT_DTLS")
private String cntcResultDtls;
/** 원부그룹번호 */
@JsonProperty("LEDGER_GROUP_NO")
private String ledgerGroupNo;
/** 원부개별화번호 */
@JsonProperty("LEDGER_INDVDLZ_NO")
private String ledgerIndvdlzNo;
/** 차량관리번호 */
@JsonProperty("VHMNO")
private String vhmno;
/** 차량번호 */
@JsonProperty("VHRNO")
private String vhrno;
/** 차대번호 */
@JsonProperty("VIN")
private String vin;
/** 차종분류코드 */
@JsonProperty("VHCTY_ASORT_CODE")
private String vhctyAsortCode;
/** 차종분류명 */
@JsonProperty("VHCTY_ASORT_NM")
private String vhctyAsortNm;
/** 차명 */
@JsonProperty("CNM")
private String cnm;
/** 색상코드 */
@JsonProperty("COLOR_CODE")
private String colorCode;
/** 색상명 */
@JsonProperty("COLOR_NM")
private String colorNm;
/** 번호판규격코드 */
@JsonProperty("NMPL_STNDRD_CODE")
private String nmplStndrdCode;
/** 번호판규격명 */
@JsonProperty("NMPL_STNDRD_NM")
private String nmplStndrdNm;
/** 용도구분코드 */
@JsonProperty("PRPOS_SE_CODE")
private String prposSeCode;
/** 용도구분명 */
@JsonProperty("PRPOS_SE_NM")
private String prposSeNm;
/** 제작사명 */
@JsonProperty("MTRS_FOM_NM")
private String mtrsFomNm;
/** 형식명 */
@JsonProperty("FOM_NM")
private String fomNm;
/** 취득금액 */
@JsonProperty("ACQS_AMOUNT")
private String acqsAmount;
/** 등록상세코드 */
@JsonProperty("REGIST_DETAIL_CODE")
private String registDetailCode;
/** 등록상세명 */
@JsonProperty("REGIST_DETAIL_NM")
private String registDetailNm;
/** 최초등록일자 */
@JsonProperty("FRST_REGIST_DE")
private String frstRegistDe;
/** 자동차보험종료일자 */
@JsonProperty("CAAG_ENDDE")
private String caagEndde;
/** 생산년도 */
@JsonProperty("PRYE")
private String prye;
/** 사양번호1 */
@JsonProperty("SPMNNO1")
private String spmnno1;
/** 사양번호2 */
@JsonProperty("SPMNNO2")
private String spmnno2;
/** 연식월 */
@JsonProperty("YBL_MD")
private String yblMd;
/** 주행거리 */
@JsonProperty("TRVL_DSTNC")
private String trvlDstnc;
/** 검사유효기간시작일자 */
@JsonProperty("INSPT_VALID_PD_BGNDE")
private String insptValidPdBgnde;
/** 검사유효기간종료일자 */
@JsonProperty("INSPT_VALID_PD_ENDDE")
private String insptValidPdEndde;
/** 점검유효기간시작일자 */
@JsonProperty("CHCK_VALID_PD_BGNDE")
private String chckValidPdBgnde;
/** 점검유효기간종료일자 */
@JsonProperty("CHCK_VALID_PD_ENDDE")
private String chckValidPdEndde;
/** 등록신청구분명 */
@JsonProperty("REGIST_REQST_SE_NM")
private String registReqstSeNm;
/** 최초등록신청번호 */
@JsonProperty("FRST_REGIST_RQRCNO")
private String frstRegistRqrcno;
/** 번호판보관반납일자 */
@JsonProperty("NMPL_CSDY_REMNR_DE")
private String nmplCsdyRemnrDe;
/** 번호판보관여부 */
@JsonProperty("NMPL_CSDY_AT")
private String nmplCsdyAt;
/** 영업용사용기간 */
@JsonProperty("BSS_USE_PD")
private String bssUsePd;
/** 직권말소예방공지일자 */
@JsonProperty("OCTHT_ERSR_PRVNTC_NTICE_DE")
private String octhtErsrPrvntcNticeDe;
/** 말소등록일자 */
@JsonProperty("ERSR_REGIST_DE")
private String ersrRegistDe;
/** 말소등록구분코드 */
@JsonProperty("ERSR_REGIST_SE_CODE")
private String ersrRegistSeCode;
/** 말소등록구분명 */
@JsonProperty("ERSR_REGIST_SE_NM")
private String ersrRegistSeNm;
/** 저당건수 */
@JsonProperty("MRTGCNT")
private String mrtgcnt;
/** 차량건수 */
@JsonProperty("VHCLECNT")
private String vhclecnt;
/** 압인건수 */
@JsonProperty("STMDCNT")
private String stmdcnt;
/** 주소1 */
@JsonProperty("ADRES1")
private String adres1;
/** 주소명1 */
@JsonProperty("ADRES_NM1")
private String adresNm1;
/** 주소 */
@JsonProperty("ADRES")
private String adres;
/** 주소명 */
@JsonProperty("ADRES_NM")
private String adresNm;
/** 개인법인여부 */
@JsonProperty("INDVDL_BSNM_AT")
private String indvdlBsnmAt;
/** 전화번호 */
@JsonProperty("TELNO")
private String telno;
/** 소유자명 */
@JsonProperty("MBER_NM")
private String mberNm;
/** 소유자구분코드 */
@JsonProperty("MBER_SE_CODE")
private String mberSeCode;
/** 소유자구분번호 */
@JsonProperty("MBER_SE_NO")
private String mberSeNo;
/** 면세대상자구분코드 */
@JsonProperty("TAXXMPT_TRGTER_SE_CODE")
private String taxxmptTrgterSeCode;
/** 면세대상자구분코드명 */
@JsonProperty("TAXXMPT_TRGTER_SE_CODE_NM")
private String taxxmptTrgterSeCodeNm;
/** 건수사항 */
@JsonProperty("CNT_MATTER")
private String cntMatter;
/** 읍면동명 */
@JsonProperty("EMD_NM")
private String emdNm;
/** 예방건수 */
@JsonProperty("PRVNTCCNT")
private String prvntccnt;
/** 수출이행여부확인일자 */
@JsonProperty("XPORT_FLFL_AT_STTEMNT_DE")
private String xportFlflAtSttemntDe;
/** 협력사신청번호 */
@JsonProperty("PARTN_RQRCNO")
private String partnRqrcno;
/** 레코드 목록 */
@JsonProperty("record")
private List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(name = "LedgerRecord", description = "원부 변경내역 record")
@Getter
@Setter
public static class Record {
/** 메인체크 */
@JsonProperty("MAINCHK") private String mainchk;
/** 변경작업구분코드 */
@JsonProperty("CHANGE_JOB_SE_CODE") private String changeJobSeCode;
/** 주번호 */
@JsonProperty("MAINNO") private String mainno;
/** 부번호 */
@JsonProperty("SUBNO") private String subno;
/** 상세내역 */
@JsonProperty("DTLS") private String dtls;
/** 신청번호 */
@JsonProperty("RQRCNO") private String rqrcno;
/** 차량관리번호 */
@JsonProperty("VHMNO") private String vhmno;
/** 원부그룹번호 */
@JsonProperty("LEDGER_GROUP_NO") private String ledgerGroupNo;
/** 원부개별화번호 */
@JsonProperty("LEDGER_INDVDLZ_NO") private String ledgerIndvdlzNo;
/** 구분명 */
@JsonProperty("GUBUN_NM") private String gubunNm;
/** 변경일자 */
@JsonProperty("CHANGE_DE") private String changeDe;
/** 상세일련번호 */
@JsonProperty("DETAIL_SN") private String detailSn;
/** 플래그 */
@JsonProperty("FLAG") private String flag;
public String getMainchk() { return mainchk; }
public void setMainchk(String mainchk) { this.mainchk = mainchk; }
public String getChangeJobSeCode() { return changeJobSeCode; }
public void setChangeJobSeCode(String changeJobSeCode) { this.changeJobSeCode = changeJobSeCode; }
public String getMainno() { return mainno; }
public void setMainno(String mainno) { this.mainno = mainno; }
public String getSubno() { return subno; }
public void setSubno(String subno) { this.subno = subno; }
public String getDtls() { return dtls; }
public void setDtls(String dtls) { this.dtls = dtls; }
public String getRqrcno() { return rqrcno; }
public void setRqrcno(String rqrcno) { this.rqrcno = rqrcno; }
public String getVhmno() { return vhmno; }
public void setVhmno(String vhmno) { this.vhmno = vhmno; }
public String getLedgerGroupNo() { return ledgerGroupNo; }
public void setLedgerGroupNo(String ledgerGroupNo) { this.ledgerGroupNo = ledgerGroupNo; }
public String getLedgerIndvdlzNo() { return ledgerIndvdlzNo; }
public void setLedgerIndvdlzNo(String ledgerIndvdlzNo) { this.ledgerIndvdlzNo = ledgerIndvdlzNo; }
public String getGubunNm() { return gubunNm; }
public void setGubunNm(String gubunNm) { this.gubunNm = gubunNm; }
public String getChangeDe() { return changeDe; }
public void setChangeDe(String changeDe) { this.changeDe = changeDe; }
public String getDetailSn() { return detailSn; }
public void setDetailSn(String detailSn) { this.detailSn = detailSn; }
public String getFlag() { return flag; }
public void setFlag(String flag) { this.flag = flag; }
}
}

@ -0,0 +1,130 @@
package go.kr.project.api.model.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* ()
*
* <p>
* . ,
* record .
* </p>
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차기본사항조회 응답 모델 (신버전)")
@Getter
@Setter
public class NewBasicResponse { // 총 3개 필드 (외부 클래스 3개, 중첩 Record 클래스 84개)
/** 연계결과코드 (성공/실패 코드) */
@JsonProperty("LINK_RSLT_CD")
private String linkRsltCd;
/** 연계결과상세 (에러 메시지 등 상세 사유) */
@JsonProperty("LINK_RSLT_DTL")
private String linkRsltDtl;
/** 응답 레코드 목록 */
@JsonProperty("record")
private List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(name = "NewBasicRecord", description = "기본사항 record 항목 (신버전)")
@Getter
@Setter
public static class Record {
@JsonProperty("VHRNO") private String vhrno; // 차량번호
@JsonProperty("ATMB_NM") private String atmbNm; // 차명
@JsonProperty("RPRS_OWNR_NM") private String rprsOwnrNm; // 대표소유자성명
@JsonProperty("RPRSV_OWNR_IDECNO") private String rprsvOwnrIdecno; // 대표소유자회원번호
@JsonProperty("ERSR_REG_YMD") private String ersrRegYmd; // 말소등록일
@JsonProperty("PRCS_IMPRTY_RSN_CD") private String prcsImprtyRsnCd; // 처리불가사유코드
@JsonProperty("PRCS_IMPRTY_RSN_DTLS") private String prcsImprtyRsnDtls; // 처리불가사유명세
@JsonProperty("YRIDNW") private String yridnw; // 연식
@JsonProperty("VIN") private String vin; // 차대번호
@JsonProperty("CARMDL_ASORT_NM") private String carmdlAsortNm; // 차종종별명
@JsonProperty("FRST_REG_YMD") private String frstRegYmd; // 최초등록일
@JsonProperty("COLOR_NM") private String colorNm; // 색상명
@JsonProperty("STRCT_CHG_CNT") private String strctChgCnt; // 구조변경수
@JsonProperty("NOPLT_CSDY_YN") private String noplTcsdyYn; // 번호판영치여부
@JsonProperty("NOPLT_CSDY_AVTSMT_YMD") private String noplTcsdyAvtsmtYmd; // 번호판영치최고일
@JsonProperty("INSP_VLD_PD_BGNG_YMD") private String inspVldPdBgngYmd; // 검사유효기간시작일
@JsonProperty("INSP_VLD_PD_END_YMD") private String inspVldPdEndYmd; // 검사유효기간종료일
@JsonProperty("SPMNNO") private String spmnno; // 제원관리번호
@JsonProperty("DRVNG_DSTNC") private String drvngDstnc; // 주행거리
@JsonProperty("FOM_NM") private String fomNm; // 형식
@JsonProperty("DSPLVL") private String dsplvl; // 배기량
@JsonProperty("CARMDL_CLSF_NM") private String carmdlClsfNm; // 차종분류명
@JsonProperty("FBCTN_YMD") private String fbctnYmd; // 제작년월일
@JsonProperty("USGSRHLD_ADDR_NM") private String usgsrhldAddrNm; // 사용본거지상세주소
@JsonProperty("MTRS_FOM_NM") private String mtrsFomNm; // 원동기형식명
@JsonProperty("RDCPCT_CNT") private String rdcpctCnt; // 승차정원수
@JsonProperty("FRST_REG_APLY_RCPT_NO") private String frstRegAplyRcptNo; // 최초등록접수번호
@JsonProperty("OGNZ_NM") private String ognzNm; // 등록기관명
@JsonProperty("ERSR_REG_SE_NM") private String ersrRegSeNm; // 말소등록구분명
@JsonProperty("BFR_VHRNO") private String bfrVhrno; // 이전차량번호
@JsonProperty("USE_FUEL_CD") private String useFuelCd; // 사용연료코드
@JsonProperty("RPRS_OWNR_MBR_SE_CD") private String rprsOwnrMbrSeCd; // 대표소유자회원구분코드
@JsonProperty("RPRS_OWNR_TELNO") private String rprsOwnrTelno; // 대표소유자전화번호
@JsonProperty("OWNR_STDG_CD") private String ownrStdgCd; // 소유자법정동코드
@JsonProperty("OWNR_WHOL_ADDR") private String ownrWholAddr; // 소유자전체주소
@JsonProperty("VHCL_TOTL_WT") private String vhclTotlWt; // 차량총중량
@JsonProperty("MXMM_LDG") private String mxmmLdg; // 최대적재량
@JsonProperty("CBD_LT") private String cbdLt; // 차체길이
@JsonProperty("CBD_BT") private String cbdBt; // 차체너비
@JsonProperty("CBD_HG") private String cbdHg; // 차체높이
@JsonProperty("CARMDL_ASORT_CD") private String carmdlAsortCd; // 차종종별코드
@JsonProperty("CARMDL_TYPE_CD") private String carmdlTypeCd; // 차종유형코드
@JsonProperty("FUEL_CNSMPRT") private String fuelCnsmprt; // 연료소비율
@JsonProperty("ERSR_REG_SE_CD") private String ersrRegSeCd; // 말소등록구분코드
@JsonProperty("REG_DTL_CD") private String regDtlCd; // 등록상세코드
@JsonProperty("USGSRHLD_STDG_CD") private String usgsrhldStdgCd; // 사용본거지법정동코드
@JsonProperty("USGSRHLD_DONG_CD") private String usgsrhldDongCd; // 사용본거지행정동코드
@JsonProperty("USGSRHLD_MTN_YN") private String usgsrhldMtnYn; // 사용본거지산 여부
@JsonProperty("USGSRHLD_LNBR") private String usgsrhldLnbr; // 사용본거지번지
@JsonProperty("USGSRHLD_HO") private String usgsrhldHo; // 사용본거지호
@JsonProperty("USGSRHLD_ROAD_NM_CD") private String usgsrhldRoadNmCd; // 사용본거지도로명코드
@JsonProperty("USGSRHLD_UDGD_BLDG_SE_CD") private String usgsrhldUdgdBldgSeCd; // 사용본거지지하건물구분코드
@JsonProperty("USGSRHLD_BMNO") private String usgsrhldBmno; // 사용본거지건물주요번호
@JsonProperty("USGSRHLD_BSNO") private String usgsrhldBsno; // 사용본거지건물부번호
@JsonProperty("OWNR_DONG_CD") private String ownrDongCd; // 소유자행정동코드
@JsonProperty("OWNR_MTN_YN") private String ownrMtnYn; // 소유자산 여부
@JsonProperty("OWNR_LNBR") private String ownrLnbr; // 소유자번지
@JsonProperty("OWNR_HO") private String ownrHo; // 소유자호
@JsonProperty("OWNR_ADDR_NM") private String ownrAddrNm; // 소유자상세주소
@JsonProperty("OWNR_ROAD_NM_CD") private String ownrRoadNmCd; // 소유자도로명코드
@JsonProperty("OWNR_UDGD_BLDG_SE_CD") private String ownrUdgdBldgSeCd; // 소유자지하건물구분코드
@JsonProperty("OWNR_BMNO") private String ownrBmno; // 소유자건물주요번호
@JsonProperty("OWNR_BSNO") private String ownrBsno; // 소유자건물부번호
@JsonProperty("REAR_VHRNO") private String rearVhrno; // 신차량번호
@JsonProperty("USG_SE_CD") private String usgSeCd; // 용도구분코드
@JsonProperty("VEAG_END_YMD") private String veagEndYmd; // 차령만료일자
@JsonProperty("CHG_YMD") private String chgYmd; // 차번호변경시기
@JsonProperty("CARMDL_SE_CD") private String carmdlSeCd; // 차종분류코드
@JsonProperty("CARMDL_TYPE_NM") private String carmdlTypeNm; // 차종유형명
@JsonProperty("ACQS_YMD") private String acqsYmd; // 취득일자
@JsonProperty("ACQS_END_YMD") private String acqsEndYmd; // 취득종료일자
@JsonProperty("TRANSR_REG_YMD") private String transrRegYmd; // 이전등록일(양수일)
@JsonProperty("SPCF_REG_STTS_CD") private String spcfRegSttsCd; // 제원등록상태코드
@JsonProperty("SRC_SE_CD") private String srcSeCd; // 출처구분코드
@JsonProperty("NOPLT_SPCFCT_CD") private String noplTSpcfctCd; // 번호판규격코드
@JsonProperty("ACQS_AMT") private String acqsAmt; // 취득금액
@JsonProperty("USGSRHLD_GRC_CD") private String usgsrhldGrcCd; // 사용본거지관청코드
@JsonProperty("VLNT_ERSR_PRVNTC_AVTSMT_YMD") private String vlntErsrPrvntcAvtsmtYmd; // 예고통지일
@JsonProperty("FRST_MXMM_LDG") private String frstMxmmLdg; // 최초최대적재량
@JsonProperty("REG_YMD") private String regYmd; // 등록일(변경일)
@JsonProperty("ELCTY_CMPND_FUEL_CNSMPRT") private String elctyCmpndFuelCnsmprt; // 전기복합연료소비율
@JsonProperty("USGSRHLD_WHOL_ADDR") private String usgsrhldWholAddr; // 사용본거지전체주소
@JsonProperty("MRTG_CNT") private String mrtgCnt; // 저당수
@JsonProperty("SZR_CNT") private String szrCnt; // 압류건수
}
}

@ -0,0 +1,343 @@
package go.kr.project.api.model.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차등록원부(갑) 응답 모델 (신버전)")
@Getter
@Setter
public class NewLedgerResponse { // 총 64개 필드 (외부 클래스 66개, 중첩 Record 클래스 16개)
@JsonProperty("LINK_RSLT_CD")
private String linkRsltCd;
@JsonProperty("LINK_RSLT_DTL")
private String linkRsltDtl;
/** 원부그룹번호 */
@JsonProperty("LEDGER_GROUP_NO")
private String ledgerGroupNo;
/** 원부개별번호 */
@JsonProperty("LEDGER_INDIV_NO")
private String ledgerIndivNo;
/** 차량관리번호 */
@JsonProperty("VHMNO")
private String vhmno;
/** 차량등록번호 */
@JsonProperty("VHRNO")
private String vhrno;
/** 차대번호 */
@JsonProperty("VIN")
private String vin;
/** 차종종별코드 */
@JsonProperty("CARMDL_ASORT_CD")
private String carmdlAsortCd;
/** 차종종별명 */
@JsonProperty("CARMDL_ASORT_NM")
private String carmdlAsortNm;
/** 차명 */
@JsonProperty("ATMB_NM")
private String atmbNm;
/** 색상코드 */
@JsonProperty("COLOR_CD")
private String colorCd;
/** 색상명 */
@JsonProperty("COLOR_NM")
private String colorNm;
/** 번호판규격코드 */
@JsonProperty("NOPLT_SPCFCT_CD")
private String nopltSpcfctCd;
/** 번호판규격명 */
@JsonProperty("NOPLT_SPCFCT_NM")
private String nopltSpcfctNm;
/** 용도구분코드 */
@JsonProperty("USG_SE_CD")
private String usgSeCd;
/** 용도구분명 */
@JsonProperty("USG_SE_NM")
private String usgSeNm;
/** 원동기형식명 */
@JsonProperty("MTRS_FOM_NM")
private String mtrsFomNm;
/** 형식명 */
@JsonProperty("FOM_NM")
private String fomNm;
/** 취득금액 */
@JsonProperty("ACQS_AMT")
private String acqsAmt;
/** 등록상세코드 */
@JsonProperty("REG_DTL_CD")
private String regDtlCd;
/** 등록상세명 */
@JsonProperty("REG_DTL_NM")
private String regDtlNm;
/** 최초등록일 */
@JsonProperty("FRST_REG_YMD")
private String frstRegYmd;
/** 차령종료일 */
@JsonProperty("VEAG_END_YMD")
private String veagEndYmd;
/** 연식 */
@JsonProperty("YRIDNW")
private String yridnw;
/** 제원관리번호1 */
@JsonProperty("SPMNNO_1")
private String spmnno1;
/** 제원관리번호2 */
@JsonProperty("SPMNNO_2")
private String spmnno2;
/** 제작년월일 */
@JsonProperty("FBCTN_YMD")
private String fbctnYmd;
/** 주행거리 */
@JsonProperty("DRVNG_DSTNC")
private String drvngDstnc;
/** 검사유효기간시작일 */
@JsonProperty("INSP_VLD_PD_BGNG_YMD")
private String inspVldPdBgngYmd;
/** 검사유효기간종료일 */
@JsonProperty("INSP_VLD_PD_END_YMD")
private String inspVldPdEndYmd;
/** 점검유효기간시작일 */
@JsonProperty("CHCK_VLD_PD_BGNG_YMD")
private String chckVldPdBgngYmd;
/** 점검유효기간종료일 */
@JsonProperty("CHCK_VLD_PD_END_YMD")
private String chckVldPdEndYmd;
/** 등록신청구분명 */
@JsonProperty("REG_APLY_SE_NM")
private String regAplySeNm;
/** 최초등록접수번호 */
@JsonProperty("FRST_REG_APLY_RCPT_NO")
private String frstRegAplyRcptNo;
/** 번호판영치최고일 */
@JsonProperty("NOPLT_CSDY_AVTSMT_YMD")
private String nopltCsdyAvtsmtYmd;
/** 번호판영치여부 */
@JsonProperty("NOPLT_CSDY_YN")
private String nopltCsdyYn;
/** 사업용사용기간 */
@JsonProperty("BSS_USE_PD_YMD")
private String bssUsePdYmd;
/** 직권말소예고통지일 */
@JsonProperty("OCTHT_ERSR_PRVNTC_AVTSMT_YMD")
private String octhtErsrPrvntcAvtsmtYmd;
/** 말소등록일 */
@JsonProperty("ERSR_REG_YMD")
private String ersrRegYmd;
/** 말소등록구분코드 */
@JsonProperty("ERSR_REG_SE_CD")
private String ersrRegSeCd;
/** 말소등록구분명 */
@JsonProperty("ERSR_REG_SE_NM")
private String ersrRegSeNm;
/** 저당수 */
@JsonProperty("MRTG_CNT")
private String mrtgCnt;
/** 압류건수 */
@JsonProperty("SZR_CNT")
private String szrCnt;
/** 구조변경수 */
@JsonProperty("STRCT_CHG_CNT")
private String strctChgCnt;
/** 사용본거지주소 */
@JsonProperty("USGSRHLD_ADDR_1")
private String usgsrhldAddr1;
/** 사용본거지주소상세 */
@JsonProperty("USGSRHLD_ADDR_DTL_1")
private String usgsrhldAddrDtl1;
/** 소유자주소 */
@JsonProperty("OWNR_ADDR")
private String ownrAddr;
/** 소유자주소상세 */
@JsonProperty("OWNR_ADDR_DTL")
private String ownrAddrDtl;
/** 개인사업자여부 */
@JsonProperty("INDVDL_BZMN_YN")
private String indvdlBzmnYn;
/** 대표소유자전화번호 */
@JsonProperty("RPRS_OWNR_TELNO")
private String rprsOwnrTelno;
/** 대표소유자성명 */
@JsonProperty("RPRS_OWNR_NM")
private String rprsOwnrNm;
/** 대표소유자회원구분코드 */
@JsonProperty("RPRS_OWNR_MBR_SE_CD")
private String rprsOwnrMbrSeCd;
/** 대표소유자회원번호 */
@JsonProperty("RPRSV_OWNR_IDECNO")
private String rprsvOwnrIdecno;
/** 비과세대상구분코드명 */
@JsonProperty("TAXXMPT_APLCN_SE_CD")
private String taxxmptAplcnSeCd;
/** 비과세대상구분코드 */
@JsonProperty("TAXXMPT_TRPR_SE_CD")
private String taxxmptTrprSeCd;
/** 특기사항건수 */
@JsonProperty("SPCABL_MTTR_CNT")
private String spcablMttrCnt;
/** 사용본거지행정동명 */
@JsonProperty("USGSRHLD_DONG_NM")
private String usgsrhldDongNm;
/** 예고수 */
@JsonProperty("PRVNTC_CNT")
private String prvntcCnt;
/** 수출이행여부신고일 */
@JsonProperty("XPORT_FLFL_YN_DCLR_YMD")
private String xportFlflYnDclrYmd;
/** 발급번호 */
@JsonProperty("ISSU_NO")
private String issuNo;
/** 최초양도일 */
@JsonProperty("FRST_TRNSFR_YMD")
private String frstTrnsfrYmd;
/** 구동축전지식별번호 */
@JsonProperty("DRIV_SRGBTRY_IDNTF_NO")
private String drivSrgbtryIdntfNo;
/** 처리불가사유코드 */
@JsonProperty("PROCESS_IMPRTY_RESN_CODE")
private String processImprtyResnCode;
/** 처리불가사유상세 */
@JsonProperty("PROCESS_IMPRTY_RESN_DTLS")
private String processImprtyResnDtls;
@JsonProperty("record")
private List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(name = "NewLedgerRecord", description = "원부 변경내역 record (신버전)")
@Getter
@Setter
public static class Record {
/** 해제여부 */
@JsonProperty("SZR_RMV_DTL_SN")
private String szrRmvDtlSn;
/** 변경업무구분코드 */
@JsonProperty("CHG_TASK_SE_CD")
private String chgTaskSeCd;
/** 주번호 */
@JsonProperty("MAIN_NO")
private String mainNo;
/** 부번호 */
@JsonProperty("SNO")
private String sno;
/** 사항란 */
@JsonProperty("SPCABL_MTTR")
private String spcablMttr;
/** 세대주명 */
@JsonProperty("HSHLDR_NM")
private String hshldrNm;
/** 세대주개인암호화번호 */
@JsonProperty("HSHLDR_IDECNO")
private String hshldrIdecno;
/** 접수번호 */
@JsonProperty("APLY_RCPT_NO")
private String aplyRcptNo;
/** 차량관리번호 */
@JsonProperty("VHMNO")
private String vhmno;
/** 원부그룹번호 */
@JsonProperty("LEDGER_GROUP_NO")
private String ledgerGroupNo;
/** 원부개별번호 */
@JsonProperty("LEDGER_INDIV_NO")
private String ledgerIndivNo;
/** 변경업무구분명 */
@JsonProperty("CHG_TASK_SE_NM")
private String chgTaskSeNm;
/** 변경일자 */
@JsonProperty("CHG_YMD")
private String chgYmd;
/** 상세순번 */
@JsonProperty("DTL_SN")
private String dtlSn;
/** 표기여부 */
@JsonProperty("FLAG")
private String flag;
}
}

@ -0,0 +1,132 @@
package go.kr.project.api.model.response;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* ()
*
* <p>
* (/ ) .
* / , record .
* </p>
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차기본사항조회 응답 모델 (구버전)")
@Getter
@Setter
public class OldBasicResponse { // 총 3개 필드 (외부 클래스 3개, 중첩 Record 클래스 84개)
/** 연계결과코드 */
@JsonProperty("CNTC_RESULT_CODE")
private String cntcResultCode;
/** 연계결과상세 */
@JsonProperty("CNTC_RESULT_DTLS")
private String cntcResultDtls;
/** 응답 레코드 목록 */
@JsonProperty("record")
private List<Record> record;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(name = "OldBasicRecord", description = "기본사항 record 항목 (구버전)")
@Getter
@Setter
public static class Record {
@JsonProperty("PRYE") private String prye; // 연식
@JsonProperty("REGIST_DE") private String registDe; // 등록일자(변경일)
@JsonProperty("ERSR_REGIST_SE_CODE") private String ersrRegistSeCode; // 말소등록구분코드
@JsonProperty("ERSR_REGIST_SE_NM") private String ersrRegistSeNm; // 말소등록구분명
@JsonProperty("ERSR_REGIST_DE") private String ersrRegistDe; // 말소등록일자
@JsonProperty("REGIST_DETAIL_CODE") private String registDetailCode; // 등록상세코드
@JsonProperty("DSPLVL") private String dsplvl; // 배기량
@JsonProperty("USE_STRNGHLD_LEGALDONG_CODE") private String useStrnghldLegaldongCode; // 사용본거지법정동코드
@JsonProperty("USE_STRNGHLD_ADSTRD_CODE") private String useStrnghldAdstrdCode; // 사용본거지행정동코드
@JsonProperty("USE_STRNGHLD_MNTN") private String useStrnghldMntn; // 사용본거지산 여부
@JsonProperty("USE_STRNGHLD_LNBR") private String useStrnghldLnbr; // 사용본거지번지
@JsonProperty("USE_STRNGHLD_HO") private String useStrnghldHo; // 사용본거지호
@JsonProperty("USE_STRNGHLD_ADRES_NM") private String useStrnghldAdresNm; // 사용본거지상세주소
@JsonProperty("USE_STRNGHLD_ROAD_NM_CODE") private String useStrnghldRoadNmCode; // 사용본거지도로명코드
@JsonProperty("USGSRHLD_UNDGRND_BULD_SE_CODE") private String usgsrhldUndgrndBuldSeCode; // 사용본거지지하건물구분코드
@JsonProperty("USE_STRNGHLD_BULD_MAIN_NO") private String useStrnghldBuldMainNo; // 사용본거지건물주요번호
@JsonProperty("USE_STRNGHLD_BULD_SUB_NO") private String useStrnghldBuldSubNo; // 사용본거지건물부번호
@JsonProperty("USGSRHLD_ADRES_FULL") private String usgsrhldAdresFull; // 사용본거지전체주소
@JsonProperty("MBER_SE_CODE") private String mberSeCode; // 대표소유자회원구분코드
@JsonProperty("MBER_NM") private String mberNm; // 대표소유자성명
@JsonProperty("MBER_SE_NO") private String mberSeNo; // 대표소유자회원번호
@JsonProperty("TELNO") private String telno; // 대표소유자전화번호
@JsonProperty("OWNER_LEGALDONG_CODE") private String ownerLegaldongCode; // 소유자법정동코드
@JsonProperty("OWNER_ADSTRD_CODE") private String ownerAdstrdCode; // 소유자행정동코드
@JsonProperty("OWNER_MNTN") private String ownerMntn; // 소유자산 여부
@JsonProperty("OWNER_LNBR") private String ownerLnbr; // 소유자번지
@JsonProperty("OWNER_HO") private String ownerHo; // 소유자호
@JsonProperty("OWNER_ADRES_NM") private String ownerAdresNm; // 소유자상세주소
@JsonProperty("OWNER_ROAD_NM_CODE") private String ownerRoadNmCode; // 소유자도로명코드
@JsonProperty("OWNER_UNDGRND_BULD_SE_CODE") private String ownerUndgrndBuldSeCode; // 소유자지하건물구분코드
@JsonProperty("OWNER_BULD_MAIN_NO") private String ownerBuldMainNo; // 소유자건물주요번호
@JsonProperty("OWNER_BULD_SUB_NO") private String ownerBuldSubNo; // 소유자건물부번호
@JsonProperty("OWNER_ADRES_FULL") private String ownerAdresFull; // 소유자전체주소
@JsonProperty("AFTR_VHRNO") private String aftrVhrno; // 신차량번호
@JsonProperty("USE_FUEL_CODE") private String useFuelCode; // 사용연료코드
@JsonProperty("PRPOS_SE_CODE") private String prposSeCode; // 용도구분코드
@JsonProperty("MTRS_FOM_NM") private String mtrsFomNm; // 원동기형식명
@JsonProperty("FRNT_VHRNO") private String frntVhrno; // 이전차량번호
@JsonProperty("VHRNO") private String vhrno; // 차량번호
@JsonProperty("VIN") private String vin; // 차대번호
@JsonProperty("CNM") private String cnm; // 차명
@JsonProperty("VHCLE_TOT_WT") private String vhcleTotWt; // 차량총중량
@JsonProperty("CAAG_ENDDE") private String caagEndde; // 차령만료일자
@JsonProperty("CHANGE_DE") private String changeDe; // 차번호변경시기
@JsonProperty("VHCTY_ASORT_CODE") private String vhctyAsortCode; // 차종종별코드
@JsonProperty("VHCTY_TY_CODE") private String vhctyTyCode; // 차종유형코드
@JsonProperty("VHCTY_SE_CODE") private String vhctySeCode; // 차종분류코드
@JsonProperty("MXMM_LDG") private String mxmmLdg; // 최대적재량
@JsonProperty("VHCTY_ASORT_NM") private String vhctyAsortNm; // 차종종별명
@JsonProperty("VHCTY_TY_NM") private String vhctyTyNm; // 차종유형명
@JsonProperty("VHCTY_SE_NM") private String vhctySeNm; // 차종분류명
@JsonProperty("FRST_REGIST_DE") private String frstRegistDe; // 최초등록일
@JsonProperty("FOM_NM") private String fomNm; // 형식
@JsonProperty("ACQS_DE") private String acqsDe; // 취득일자
@JsonProperty("ACQS_END_DE") private String acqsEndDe; // 취득종료일자
@JsonProperty("YBL_MD") private String yblMd; // 제작연월(추정)
@JsonProperty("TRANSR_REGIST_DE") private String transrRegistDe; // 이전등록일(양수일)
@JsonProperty("SPCF_REGIST_STTUS_CODE") private String spcfRegistSttusCode; // 제원등록상태코드
@JsonProperty("COLOR_NM") private String colorNm; // 색상명
@JsonProperty("MRTG_CO") private String mrtgCo; // 저당수
@JsonProperty("SEIZR_CO") private String seizrCo; // 압류건수
@JsonProperty("STMD_CO") private String stmdCo; // 기타 설정/처분 건수(추정)
@JsonProperty("NMPL_CSDY_AT") private String nmplCsdyAt; // 번호판영치여부
@JsonProperty("NMPL_CSDY_REMNR_DE") private String nmplCsdyRemnrDe; // 번호판영치최고일
@JsonProperty("ORIGIN_SE_CODE") private String originSeCode; // 출처구분코드
@JsonProperty("NMPL_STNDRD_CODE") private String nmplStndrdCode; // 번호판규격코드
@JsonProperty("ACQS_AMOUNT") private String acqsAmount; // 취득금액
@JsonProperty("INSPT_VALID_PD_BGNDE") private String insptValidPdBgnde; // 검사유효기간시작일
@JsonProperty("INSPT_VALID_PD_ENDDE") private String insptValidPdEndde; // 검사유효기간종료일
@JsonProperty("USE_STRNGHLD_GRC_CODE") private String useStrnghldGrcCode; // 사용본거지관청코드
@JsonProperty("TKCAR_PSCAP_CO") private String tkcarPscapCo; // 승차정원수
@JsonProperty("SPMNNO") private String spmnno; // 제원관리번호
@JsonProperty("TRVL_DSTNC") private String trvlDstnc; // 주행거리
@JsonProperty("FRST_REGIST_RQRCNO") private String frstRegistRqrcno; // 최초등록접수번호
@JsonProperty("VLNT_ERSR_PRVNTC_NTICE_DE") private String vlntErsrPrvntcNticeDe; // 예고통지일
@JsonProperty("REGIST_INSTT_NM") private String registInsttNm; // 등록기관명
@JsonProperty("PROCESS_IMPRTY_RESN_CODE") private String processImprtyResnCode; // 처리불가사유코드
@JsonProperty("PROCESS_IMPRTY_RESN_DTLS") private String processImprtyResnDtls; // 처리불가사유명세
@JsonProperty("CBD_LT") private String cbdLt; // 차체길이
@JsonProperty("CBD_BT") private String cbdBt; // 차체너비
@JsonProperty("CBD_HG") private String cbdHg; // 차체높이
@JsonProperty("FRST_MXMM_LDG") private String frstMxmmLdg; // 최초최대적재량
@JsonProperty("FUEL_CNSMP_RT") private String fuelCnsmpRt; // 연료소비율
@JsonProperty("ELCTY_CMPND_FUEL_CNSMP_RT") private String elctyCmpndFuelCnsmpRt; // 전기복합연료소비율
}
}

@ -1,14 +1,16 @@
package go.kr.project.api.model.response;
import go.kr.project.api.config.ApiConstant;
import go.kr.project.api.model.ApiExchangeEnvelope;
import go.kr.project.api.model.Envelope;
import go.kr.project.api.model.request.BasicRequest;
import go.kr.project.api.model.request.OldBasicRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* , DB
@ -21,133 +23,15 @@ import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
public class VmisCarBassMatterInqireVO {
// ==== Static factory/mapping methods (moved from Service) ====
public static VmisCarBassMatterInqireVO fromRequest(BasicRequest request) {
return VmisCarBassMatterInqireVO.builder()
.infoSysId(request.getInfoSysId())
.infoSysIp(request.getInfoSysIp())
.sigunguCode(request.getSigunguCode())
.cntcInfoCode(request.getCntcInfoCode())
.chargerId(request.getChargerId())
.chargerIp(request.getChargerIp())
.chargerNm(request.getChargerNm())
.dmndLevyStdde(request.getLevyStdde())
.dmndInqireSeCode(request.getInqireSeCode())
.dmndVhrno(request.getVhrno())
.dmndVin(request.getVin())
.rgtr(ApiConstant.DEFAULT_REGISTRANT)
.build();
}
public static VmisCarBassMatterInqireVO fromResponse(String id, Envelope<BasicResponse> envelope) {
if (envelope == null || envelope.getData() == null || envelope.getData().isEmpty()) return null;
BasicResponse response = envelope.getData().get(0);
VmisCarBassMatterInqireVO.VmisCarBassMatterInqireVOBuilder builder = VmisCarBassMatterInqireVO.builder()
.carBassMatterInqireId(id)
.cntcResultCode(response.getCntcResultCode())
.cntcResultDtls(response.getCntcResultDtls());
if (response.getRecord() != null && !response.getRecord().isEmpty()) {
BasicResponse.Record record = response.getRecord().get(0);
applyRecord(builder, record);
}
return builder.build();
}
private static void applyRecord(VmisCarBassMatterInqireVO.VmisCarBassMatterInqireVOBuilder builder, BasicResponse.Record record) {
builder
.prye(record.getPrye()) // 연식
.registDe(record.getRegistDe()) // 등록일
.ersrRegistSeCode(record.getErsrRegistSeCode()) // 말소 등록 구분 코드
.ersrRegistSeNm(record.getErsrRegistSeNm()) // 말소 등록 구분명
.ersrRegistDe(record.getErsrRegistDe()) // 말소 등록일
.registDetailCode(record.getRegistDetailCode()) // 등록 상세 코드
.dsplvl(record.getDsplvl()) // 배기량
.useStrnghldLegaldongCode(record.getUseStrnghldLegaldongCode()) // 사용 본거지 법정동 코드
.useStrnghldAdstrdCode(record.getUseStrnghldAdstrdCode()) // 사용 본거지 행정동 코드
.useStrnghldMntn(record.getUseStrnghldMntn()) // 사용 본거지 산
.useStrnghldLnbr(record.getUseStrnghldLnbr()) // 사용 본거지 번지
.useStrnghldHo(record.getUseStrnghldHo()) // 사용 본거지 호
.useStrnghldAdresNm(record.getUseStrnghldAdresNm()) // 사용 본거지 상세주소
.useStrnghldRoadNmCode(record.getUseStrnghldRoadNmCode()) // 사용 본거지 도로명 코드
.usgsrhldUndgrndBuldSeCode(record.getUsgsrhldUndgrndBuldSeCode()) // 사용 본거지 지하 건물 구분 코드
.useStrnghldBuldMainNo(record.getUseStrnghldBuldMainNo()) // 사용 본거지 건물 주요 번호
.useStrnghldBuldSubNo(record.getUseStrnghldBuldSubNo()) // 사용 본거지 건물 부 번호
.usgsrhldAdresFull(record.getUsgsrhldAdresFull()) // 사용 본거지 전체주소
.mberSeCode(record.getMberSeCode()) // 대표소유자 회원 구분 코드
.mberSeNo(record.getMberSeNo()) // 대표소유자 회원 번호
.mberNm(record.getMberNm()) // 대표소유자 성명
.telno(record.getTelno()) // 대표소유자 전화번호
.ownerLegaldongCode(record.getOwnerLegaldongCode()) // 소유자 법정동 코드
.ownerAdstrdCode(record.getOwnerAdstrdCode()) // 소유자 행정동 코드
.ownerMntn(record.getOwnerMntn()) // 소유자 산
.ownerLnbr(record.getOwnerLnbr()) // 소유자 번지
.ownerHo(record.getOwnerHo()) // 소유자 호
.ownerAdresNm(record.getOwnerAdresNm()) // 소유자 상세주소
.ownerRoadNmCode(record.getOwnerRoadNmCode()) // 소유자 도로명 코드
.ownerUndgrndBuldSeCode(record.getOwnerUndgrndBuldSeCode()) // 소유자 지하건물 구분 코드
.ownerBuldMainNo(record.getOwnerBuldMainNo()) // 소유자 건물 주요 번호
.ownerBuldSubNo(record.getOwnerBuldSubNo()) // 소유자 건물 부 번호
.ownrWholaddr(record.getOwnerAdresFull()) // 소유자 전체주소
.aftrVhrno(record.getAftrVhrno()) // 신 차량번호
.useFuelCode(record.getUseFuelCode()) // 사용 연료 코드
.prposSeCode(record.getPrposSeCode()) // 용도 구분 코드
.mtrsFomNm(record.getMtrsFomNm()) // 원동기 형식명
.frntVhrno(record.getFrntVhrno()) // 이전 차량번호
.vhrno(record.getVhrno()) // 차량번호
.vin(record.getVin()) // 차대번호
.cnm(record.getCnm()) // 차명
.vhcleTotWt(record.getVhcleTotWt()) // 차량 총 중량
.caagEndde(record.getCaagEndde()) // 차령 만료일자
.changeDe(record.getChangeDe()) // 차번호 변경시기
.vhctyAsortCode(record.getVhctyAsortCode()) // 차종 종별 코드
.vhctyTyCode(record.getVhctyTyCode()) // 차종 유형 코드
.vhctySeCode(record.getVhctySeCode()) // 차종 분류 코드
.mxmmLdg(record.getMxmmLdg()) // 최대 적재량
.vhctyAsortNm(record.getVhctyAsortNm()) // 차종 종별명
.vhctyTyNm(record.getVhctyTyNm()) // 차종 유형명
.vhctySeNm(record.getVhctySeNm()) // 차종 분류명
.frstRegistDe(record.getFrstRegistDe()) // 최초 등록일
.fomNm(record.getFomNm()) // 형식
.acqsDe(record.getAcqsDe()) // 취득 일자
.acqsEndDe(record.getAcqsEndDe()) // 취득 종료일자
.yblMd(record.getYblMd()) // 제작 년월일
.transrRegistDe(record.getTransrRegistDe()) // 이전 등록일
.spcfRegistSttusCode(record.getSpcfRegistSttusCode()) // 제원 등록 상태 코드
.colorNm(record.getColorNm()) // 색상명
.mrtgCo(record.getMrtgCo()) // 저당수
.seizrCo(record.getSeizrCo()) // 압류건수
.stmdCo(record.getStmdCo()) // 구조변경수
.nmplCsdyAt(record.getNmplCsdyAt()) // 번호판 영치 여부
.nmplCsdyRemnrDe(record.getNmplCsdyRemnrDe()) // 번호판 영치 최고일
.originSeCode(record.getOriginSeCode()) // 출처 구분 코드
.nmplStndrdCode(record.getNmplStndrdCode()) // 번호판 규격 코드
.acqsAmount(record.getAcqsAmount()) // 취득 금액
.insptValidPdBgnde(record.getInsptValidPdBgnde()) // 검사 유효 기간 시작일
.insptValidPdEndde(record.getInsptValidPdEndde()) // 검사 유효 기간 종료일
.useStrnghldGrcCode(record.getUseStrnghldGrcCode()) // 사용 본거지 관청 코드
.tkcarPscapCo(record.getTkcarPscapCo()) // 승차정원수
.spmnno(record.getSpmnno()) // 제원관리번호
.trvlDstnc(record.getTrvlDstnc()) // 주행거리
.frstRegistRqrcno(record.getFrstRegistRqrcno()) // 최초 등록 접수번호
.vlntErsrPrvntcNticeDe(record.getVlntErsrPrvntcNticeDe()) // 예고통지일
.registInsttNm(record.getRegistInsttNm()) // 등록 기관명
.processImprtyResnCode(record.getProcessImprtyResnCode()) // 처리 불가 사유 코드
.processImprtyResnDtls(record.getProcessImprtyResnDtls()) // 처리 불가 사유 명세
.cbdLt(record.getCbdLt()) // 차체 길이
.cbdBt(record.getCbdBt()) // 차체 너비
.cbdHg(record.getCbdHg()) // 차체 높이
.frstMxmmLdg(record.getFrstMxmmLdg()) // 최초 최대 적재량
.fuelCnsmpRt(record.getFuelCnsmpRt()) // 연료 소비율
.elctyCmpndFuelCnsmpRt(record.getElctyCmpndFuelCnsmpRt()); // 전기 복합 연료 소비율
}
/**
* ID (PK)
* : CBMI000000000001
*/
private String carBassMatterInqireId;
// 신규 응답용 txId
private String txId;
// ===== 요청 정보 =====
/**
* ID
@ -157,32 +41,32 @@ public class VmisCarBassMatterInqireVO {
/**
* IP
*/
private String infoSysIp;
private String infoSysIpAddr;
/**
*
*/
private String sigunguCode;
private String sggCd;
/**
*
*/
private String cntcInfoCode;
private String linkInfoCd;
/**
* ID
*/
private String chargerId;
private String picId;
/**
* IP
*/
private String chargerIp;
private String picIpAddr;
/**
*
*/
private String chargerNm;
private String picNm;
/**
*
@ -206,14 +90,14 @@ public class VmisCarBassMatterInqireVO {
// ===== 응답 정보 (결과 수신 시 UPDATE) =====
/**
*
* - LINK_RSLT_CD
*/
private String cntcResultCode;
private String linkRsltCd;
/**
*
* - LINK_RSLT_DTL
*/
private String cntcResultDtls;
private String linkRsltDtl;
/**
*
@ -630,6 +514,11 @@ public class VmisCarBassMatterInqireVO {
*/
private String elctyCmpndFuelCnsmpRt;
/**
* ID
*/
private String carFfnlgTrgtId;
/**
*
*/
@ -644,4 +533,169 @@ public class VmisCarBassMatterInqireVO {
*
*/
private String mberNm;
/**
* OldBasicRequest VO ( )
*
* @param request OldBasicRequest
* @return VO
*/
public static VmisCarBassMatterInqireVO fromOldRequest(OldBasicRequest request) {
if (request == null) {
return null;
}
// record 배열에서 첫 번째 요청 데이터 추출
OldBasicRequest.Record record = null;
if (request.getRecord() != null && !request.getRecord().isEmpty()) {
record = request.getRecord().get(0);
}
VmisCarBassMatterInqireVO.VmisCarBassMatterInqireVOBuilder builder = VmisCarBassMatterInqireVO.builder()
// 헤더 정보 (request 외부 클래스에서)
.infoSysId(request.getInfoSysId()) // INFO_SYS_ID → infoSysId
.infoSysIpAddr(request.getInfoSysIp()) // INFO_SYS_IP → infoSysIpAddr
.sggCd(request.getSigunguCode()) // SIGUNGU_CODE → sggCd
.linkInfoCd(request.getCntcInfoCode()) // CNTC_INFO_CODE → linkInfoCd
.picId(request.getChargerId()) // CHARGER_ID → picId
.picIpAddr(request.getChargerIp()) // CHARGER_IP → picIpAddr
.picNm(request.getChargerNm()); // CHARGER_NM → picNm
// 요청 본문 정보 (request.record[0]에서)
if (record != null) {
builder
.dmndLevyStdde(record.getLevyStdde()) // LEVY_STDDE → dmndLevyStdde
.dmndInqireSeCode(record.getInqireSeCode()) // INQIRE_SE_CODE → dmndInqireSeCode
.dmndVhrno(record.getVhrno()) // VHRNO → dmndVhrno
.dmndVin(record.getVin()); // VIN → dmndVin
}
return builder.build();
}
/**
* ApiExchangeEnvelope<OldBasicRequest, OldBasicResponse> VO ( )
*
* @param generatedId PK ID
* @param envelope API Envelope
* @return VO
*/
public static VmisCarBassMatterInqireVO fromOldExchange(
String generatedId,
ApiExchangeEnvelope<OldBasicRequest, OldBasicResponse> envelope) {
if (envelope == null || envelope.getResponse() == null) {
return null;
}
Envelope<OldBasicResponse> response = envelope.getResponse();
List<OldBasicResponse> data = response.getData();
if (data == null || data.isEmpty()) {
return null;
}
OldBasicResponse firstData = data.get(0);
List<OldBasicResponse.Record> records = firstData.getRecord();
// 응답 정보 업데이트용 VO 빌드
VmisCarBassMatterInqireVO.VmisCarBassMatterInqireVOBuilder builder = VmisCarBassMatterInqireVO.builder()
.carBassMatterInqireId(generatedId)
.txId(envelope.getTxId())
.linkRsltCd(firstData.getCntcResultCode())
.linkRsltDtl(firstData.getCntcResultDtls());
// record가 있는 경우 첫 번째 record의 상세 정보 매핑
if (records != null && !records.isEmpty()) {
OldBasicResponse.Record record = records.get(0);
builder
.prye(record.getPrye())
.registDe(record.getRegistDe())
.ersrRegistSeCode(record.getErsrRegistSeCode())
.ersrRegistSeNm(record.getErsrRegistSeNm())
.ersrRegistDe(record.getErsrRegistDe())
.registDetailCode(record.getRegistDetailCode())
.dsplvl(record.getDsplvl())
.useStrnghldLegaldongCode(record.getUseStrnghldLegaldongCode())
.useStrnghldAdstrdCode(record.getUseStrnghldAdstrdCode())
.useStrnghldMntn(record.getUseStrnghldMntn())
.useStrnghldLnbr(record.getUseStrnghldLnbr())
.useStrnghldHo(record.getUseStrnghldHo())
.useStrnghldAdresNm(record.getUseStrnghldAdresNm())
.useStrnghldRoadNmCode(record.getUseStrnghldRoadNmCode())
.usgsrhldUndgrndBuldSeCode(record.getUsgsrhldUndgrndBuldSeCode())
.useStrnghldBuldMainNo(record.getUseStrnghldBuldMainNo())
.useStrnghldBuldSubNo(record.getUseStrnghldBuldSubNo())
.usgsrhldAdresFull(record.getUsgsrhldAdresFull())
.mberSeCode(record.getMberSeCode())
.mberNm(record.getMberNm())
.mberSeNo(record.getMberSeNo())
.telno(record.getTelno())
.ownerLegaldongCode(record.getOwnerLegaldongCode())
.ownerAdstrdCode(record.getOwnerAdstrdCode())
.ownerMntn(record.getOwnerMntn())
.ownerLnbr(record.getOwnerLnbr())
.ownerHo(record.getOwnerHo())
.ownerAdresNm(record.getOwnerAdresNm())
.ownerRoadNmCode(record.getOwnerRoadNmCode())
.ownerUndgrndBuldSeCode(record.getOwnerUndgrndBuldSeCode())
.ownerBuldMainNo(record.getOwnerBuldMainNo())
.ownerBuldSubNo(record.getOwnerBuldSubNo())
.ownrWholaddr(record.getOwnerAdresFull())
.aftrVhrno(record.getAftrVhrno())
.useFuelCode(record.getUseFuelCode())
.prposSeCode(record.getPrposSeCode())
.mtrsFomNm(record.getMtrsFomNm())
.frntVhrno(record.getFrntVhrno())
.vhrno(record.getVhrno())
.vin(record.getVin())
.cnm(record.getCnm())
.vhcleTotWt(record.getVhcleTotWt())
.caagEndde(record.getCaagEndde())
.changeDe(record.getChangeDe())
.vhctyAsortCode(record.getVhctyAsortCode())
.vhctyTyCode(record.getVhctyTyCode())
.vhctySeCode(record.getVhctySeCode())
.mxmmLdg(record.getMxmmLdg())
.vhctyAsortNm(record.getVhctyAsortNm())
.vhctyTyNm(record.getVhctyTyNm())
.vhctySeNm(record.getVhctySeNm())
.frstRegistDe(record.getFrstRegistDe())
.fomNm(record.getFomNm())
.acqsDe(record.getAcqsDe())
.acqsEndDe(record.getAcqsEndDe())
.yblMd(record.getYblMd())
.transrRegistDe(record.getTransrRegistDe())
.spcfRegistSttusCode(record.getSpcfRegistSttusCode())
.colorNm(record.getColorNm())
.mrtgCo(record.getMrtgCo())
.seizrCo(record.getSeizrCo())
.stmdCo(record.getStmdCo())
.nmplCsdyAt(record.getNmplCsdyAt())
.nmplCsdyRemnrDe(record.getNmplCsdyRemnrDe())
.originSeCode(record.getOriginSeCode())
.nmplStndrdCode(record.getNmplStndrdCode())
.acqsAmount(record.getAcqsAmount())
.insptValidPdBgnde(record.getInsptValidPdBgnde())
.insptValidPdEndde(record.getInsptValidPdEndde())
.useStrnghldGrcCode(record.getUseStrnghldGrcCode())
.tkcarPscapCo(record.getTkcarPscapCo())
.spmnno(record.getSpmnno())
.trvlDstnc(record.getTrvlDstnc())
.frstRegistRqrcno(record.getFrstRegistRqrcno())
.vlntErsrPrvntcNticeDe(record.getVlntErsrPrvntcNticeDe())
.registInsttNm(record.getRegistInsttNm())
.processImprtyResnCode(record.getProcessImprtyResnCode())
.processImprtyResnDtls(record.getProcessImprtyResnDtls())
.cbdLt(record.getCbdLt())
.cbdBt(record.getCbdBt())
.cbdHg(record.getCbdHg())
.frstMxmmLdg(record.getFrstMxmmLdg())
.fuelCnsmpRt(record.getFuelCnsmpRt())
.elctyCmpndFuelCnsmpRt(record.getElctyCmpndFuelCnsmpRt());
}
return builder.build();
}
}

@ -1,6 +1,9 @@
package go.kr.project.api.model.response;
import go.kr.project.api.config.ApiConstant;
import go.kr.project.api.model.ApiExchangeEnvelope;
import go.kr.project.api.model.Envelope;
import go.kr.project.api.model.request.NewLedgerRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -8,6 +11,7 @@ import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* () VO, DB
@ -20,54 +24,116 @@ import java.util.List;
@AllArgsConstructor
public class VmisCarLedgerFrmbkDtlVO {
// ==== Static factory/mapping methods (moved from Service) ====
public static List<VmisCarLedgerFrmbkDtlVO> listFromResponse(LedgerResponse res, String masterId) {
List<VmisCarLedgerFrmbkDtlVO> list = new ArrayList<>();
if (res == null || res.getRecord() == null) return list;
for (LedgerResponse.Record r : res.getRecord()) {
VmisCarLedgerFrmbkDtlVO vo = VmisCarLedgerFrmbkDtlVO.builder()
.carLedgerFrmbkId(masterId) // 원부 마스터 ID (FK)
.mainchk(r.getMainchk()) // 주요 체크
.changeJobSeCode(r.getChangeJobSeCode()) // 변경 작업 구분 코드
.mainno(r.getMainno()) // 주번호
.subno(r.getSubno()) // 부번호
.dtls(r.getDtls()) // 상세 내역
.rqrcno(r.getRqrcno()) // 접수번호
.vhmno(r.getVhmno()) // 차량관리번호
.ledgerGroupNo(r.getLedgerGroupNo()) // 원부 그룹 번호
.ledgerIndvdlzNo(r.getLedgerIndvdlzNo()) // 원부 개별화 번호
.gubunNm(r.getGubunNm()) // 구분명
.changeDe(r.getChangeDe()) // 변경일자
.detailSn(r.getDetailSn()) // 상세 순번
.flag(r.getFlag()) // 플래그
.rgtr(ApiConstant.DEFAULT_REGISTRANT) // 등록자
.build();
list.add(vo);
}
return list;
}
// PK
private String carLedgerFrmbkDtlId;
// FK
private String carLedgerFrmbkId;
// 본문
private String mainchk;
private String changeJobSeCode;
private String mainno;
private String subno;
private String dtls;
private String rqrcno;
private String vhmno;
private String ledgerGroupNo;
private String ledgerIndvdlzNo;
private String gubunNm;
private String changeDe;
private String detailSn;
private String flag;
private String carLedgerFrmbkId; // CAR_LEDGER_FRMBK_ID
// 본문 - DB 컬럼명과 정확히 일치
private String szrRmvDtlSn; // SZR_RMV_DTL_SN
private String chgTaskSeCd; // CHG_TASK_SE_CD
private String mainNo; // MAIN_NO
private String sno; // SNO
private String spcablMttr; // SPCABL_MTTR
private String hshldrNm; // HSHLDR_NM
private String hshldrIdecno; // HSHLDR_IDECNO
private String aplyRcptNo; // APLY_RCPT_NO
private String vhmno; // VHMNO
private String ledgerGroupNo; // LEDGER_GROUP_NO
private String ledgerIndivNo; // LEDGER_INDIV_NO
private String chgTaskSeNm; // CHG_TASK_SE_NM
private String chgYmd; // CHG_YMD
private String dtlSn; // DTL_SN
private String flag; // FLAG
// 감사
private String rgtr;
private String rgtr; // RGTR
/**
* ApiExchangeEnvelope VO
*
* @param envelope API Envelope
* @param generatedId PK ID
* @return VO
*/
public static List<VmisCarLedgerFrmbkDtlVO> listNewFromExchange(
ApiExchangeEnvelope<NewLedgerRequest, NewLedgerResponse> envelope,
String generatedId) {
if (envelope == null || envelope.getResponse() == null) {
return new ArrayList<>();
}
Envelope<NewLedgerResponse> response = envelope.getResponse();
List<NewLedgerResponse> data = response.getData();
if (data == null || data.isEmpty()) {
return new ArrayList<>();
}
NewLedgerResponse firstData = data.get(0);
List<NewLedgerResponse.Record> records = firstData.getRecord();
if (records == null || records.isEmpty()) {
return new ArrayList<>();
}
// Record 리스트를 VmisCarLedgerFrmbkDtlVO 리스트로 변환
return records.stream()
.map(record -> VmisCarLedgerFrmbkDtlVO.builder()
.carLedgerFrmbkId(generatedId)
.szrRmvDtlSn(record.getSzrRmvDtlSn())
.chgTaskSeCd(record.getChgTaskSeCd())
.mainNo(record.getMainNo())
.sno(record.getSno())
.spcablMttr(record.getSpcablMttr())
.hshldrNm(record.getHshldrNm())
.hshldrIdecno(record.getHshldrIdecno())
.aplyRcptNo(record.getAplyRcptNo())
.vhmno(record.getVhmno())
.ledgerGroupNo(record.getLedgerGroupNo())
.ledgerIndivNo(record.getLedgerIndivNo())
.chgTaskSeNm(record.getChgTaskSeNm())
.chgYmd(record.getChgYmd())
.dtlSn(record.getDtlSn())
.flag(record.getFlag())
.build())
.collect(Collectors.toList());
}
/**
* NewLedgerResponse.Record VO
*
* @param record NewLedgerResponse.Record
* @param carLedgerFrmbkId PK ID
* @return VO
*/
public static VmisCarLedgerFrmbkDtlVO fromRecord(
NewLedgerResponse.Record record,
String carLedgerFrmbkId) {
if (record == null) {
return null;
}
return VmisCarLedgerFrmbkDtlVO.builder()
.carLedgerFrmbkId(carLedgerFrmbkId)
.szrRmvDtlSn(record.getSzrRmvDtlSn())
.chgTaskSeCd(record.getChgTaskSeCd())
.mainNo(record.getMainNo())
.sno(record.getSno())
.spcablMttr(record.getSpcablMttr())
.hshldrNm(record.getHshldrNm())
.hshldrIdecno(record.getHshldrIdecno())
.aplyRcptNo(record.getAplyRcptNo())
.vhmno(record.getVhmno())
.ledgerGroupNo(record.getLedgerGroupNo())
.ledgerIndivNo(record.getLedgerIndivNo())
.chgTaskSeNm(record.getChgTaskSeNm())
.chgYmd(record.getChgYmd())
.dtlSn(record.getDtlSn())
.flag(record.getFlag())
.build();
}
}

@ -1,6 +1,7 @@
package go.kr.project.api.model.response;
import go.kr.project.api.config.ApiConstant;
import go.kr.project.api.model.request.NewLedgerRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -16,177 +17,224 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
public class VmisCarLedgerFrmbkVO {
// PK
private String carLedgerFrmbkId;
// 신규 응답용 txId
private String txId;
// 요청(헤더/본문) 정보 - DB 컬럼명과 동일하게
private String infoSysId; // INFO_SYS_ID
private String infoSysIpAddr; // INFO_SYS_IP_ADDR
private String sggCd; // SGG_CD
private String linkInfoCd; // LINK_INFO_CD
private String picId; // PIC_ID
private String picIpAddr; // PIC_IP_ADDR
private String picNm; // PIC_NM
// 요청 본문 - DB 컬럼명과 동일하게
private String dmndVhrno; // DMND_VHRNO
private String dmndPrvcRls; // DMND_PRVC_RLS
private String dmndCvlprNm; // DMND_CVLPR_NM
private String dmndCvlprIdecno; // DMND_CVLPR_IDECNO
private String dmndCvlprStdgCd; // DMND_CVLPR_STDG_CD
private String dmndPathSeCd; // DMND_PATH_SE_CD
private String dmndDsctnIndct; // DMND_DSCTN_INDCT
private String dmndInqSeCd; // DMND_INQ_SE_CD
// 응답 요약 정보 - DB 컬럼명과 동일하게
private String linkRsltCd; // LINK_RSLT_CD
private String linkRsltDtl; // LINK_RSLT_DTL
// 응답 본문(마스터) - DB 컬럼명과 정확히 일치
private String ledgerGroupNo; // LEDGER_GROUP_NO
private String ledgerIndivNo; // LEDGER_INDIV_NO
private String vhmno; // VHMNO
private String vhrno; // VHRNO
private String vin; // VIN
private String carmdlAsortCd; // CARMDL_ASORT_CD
private String carmdlAsortNm; // CARMDL_ASORT_NM
private String atmbNm; // ATMB_NM
private String colorCd; // COLOR_CD
private String colorNm; // COLOR_NM
private String nopltSpcfctCd; // NOPLT_SPCFCT_CD
private String nopltSpcfctNm; // NOPLT_SPCFCT_NM
private String usgSeCd; // USG_SE_CD
private String usgSeNm; // USG_SE_NM
private String mtrsFomNm; // MTRS_FOM_NM
private String fomNm; // FOM_NM
private String acqsAmt; // ACQS_AMT
private String regDtlCd; // REG_DTL_CD
private String regDtlNm; // REG_DTL_NM
private String frstRegYmd; // FRST_REG_YMD
private String veagEndYmd; // VEAG_END_YMD
private String yridnw; // YRIDNW
private String spmnno1; // SPMNNO_1
private String spmnno2; // SPMNNO_2
private String fbctnYmd; // FBCTN_YMD
private String drvngDstnc; // DRVNG_DSTNC
private String inspVldPdBgngYmd; // INSP_VLD_PD_BGNG_YMD
private String inspVldPdEndYmd; // INSP_VLD_PD_END_YMD
private String chckVldPdBgngYmd; // CHCK_VLD_PD_BGNG_YMD
private String chckVldPdEndYmd; // CHCK_VLD_PD_END_YMD
private String regAplySeNm; // REG_APLY_SE_NM
private String frstRegAplyRcptNo; // FRST_REG_APLY_RCPT_NO
private String nopltCsdyAvtsmtYmd; // NOPLT_CSDY_AVTSMT_YMD
private String nopltCsdyYn; // NOPLT_CSDY_YN
private String bssUsePdYmd; // BSS_USE_PD_YMD
private String octhtErsrPrvntcAvtsmtYmd;// OCTHT_ERSR_PRVNTC_AVTSMT_YMD
private String ersrRegYmd; // ERSR_REG_YMD
private String ersrRegSeCd; // ERSR_REG_SE_CD
private String ersrRegSeNm; // ERSR_REG_SE_NM
private String mrtgCnt; // MRTG_CNT
private String szrCnt; // SZR_CNT
private String strctChgCnt; // STRCT_CHG_CNT
private String usgsrhldAddr1; // USGSRHLD_ADDR_1
private String usgsrhldAddrDtl1; // USGSRHLD_ADDR_DTL_1
private String ownrAddr; // OWNR_ADDR
private String ownrAddrDtl; // OWNR_ADDR_DTL
private String indvdlBzmnYn; // INDVDL_BZMN_YN
private String rprsOwnrTelno; // RPRS_OWNR_TELNO
private String rprsOwnrNm; // RPRS_OWNR_NM
private String rprsOwnrMbrSeCd; // RPRS_OWNR_MBR_SE_CD
private String rprsvOwnrIdecno; // RPRSV_OWNR_IDECNO
private String taxxmptTrprSeCd; // TAXXMPT_TRPR_SE_CD
private String taxxmptAplcnSeCd; // TAXXMPT_APLCN_SE_CD
private String spcablMttrCnt; // SPCABL_MTTR_CNT
private String usgsrhldDongNm; // USGSRHLD_DONG_NM
private String prvntcCnt; // PRVNTC_CNT
private String xportFlflYnDclrYmd; // XPORT_FLFL_YN_DCLR_YMD
private String issuNo; // ISSU_NO
private String frstTrnsfrYmd; // FRST_TRNSFR_YMD
private String drivSrgbtryIdntfNo; // DRIV_SRGBTRY_IDNTF_NO
private String prcsImprtyRsnCd; // PRCS_IMPRTY_RSN_CD
private String prcsImprtyRsnDtls; // PRCS_IMPRTY_RSN_DTLS
private String carFfnlgTrgtId; // CAR_FFNLG_TRGT_ID
// 감사
private String rgtr;
/**
* NewLedgerRequest VO ( )
*
* @param request NewLedgerRequest
* @return VO
*/
public static VmisCarLedgerFrmbkVO fromNewRequest(NewLedgerRequest request) {
if (request == null) {
return null;
}
// ==== Static factory/mapping methods (moved from Service) ====
public static VmisCarLedgerFrmbkVO fromRequest(go.kr.project.api.model.request.LedgerRequest request) {
return VmisCarLedgerFrmbkVO.builder()
.infoSysId(request.getInfoSysId())
.infoSysIp(request.getInfoSysIp())
.sigunguCode(request.getSigunguCode())
.cntcInfoCode(request.getCntcInfoCode())
.chargerId(request.getChargerId())
.chargerIp(request.getChargerIp())
.chargerNm(request.getChargerNm())
.infoSysIpAddr(request.getInfoSysIpAddr())
.sggCd(request.getSggCd())
.linkInfoCd(request.getLinkInfoCd())
.picId(request.getPicId())
.picIpAddr(request.getPicIpAddr())
.picNm(request.getPicNm())
.dmndVhrno(request.getVhrno())
.rgtr(ApiConstant.DEFAULT_REGISTRANT)
.dmndPrvcRls(request.getPrvcRls())
.dmndCvlprNm(request.getCvlprNm())
.dmndCvlprIdecno(request.getCvlprIdecno())
.dmndCvlprStdgCd(request.getCvlprStdgCd())
.dmndPathSeCd(request.getPathSeCd())
.dmndDsctnIndct(request.getDsctnIndct())
.dmndInqSeCd(request.getInqSeCd())
.build();
}
public static VmisCarLedgerFrmbkVO fromResponseMaster(String id, go.kr.project.api.model.response.LedgerResponse res) {
/**
* NewLedgerResponse VO ( )
*
* @param generatedId PK ID
* @param response NewLedgerResponse
* @return VO
*/
public static VmisCarLedgerFrmbkVO fromNewResponseMaster(
String generatedId,
NewLedgerResponse response) {
if (response == null) {
return null;
}
return VmisCarLedgerFrmbkVO.builder()
.carLedgerFrmbkId(id) // 등록원부 ID
.cntcResultCode(res.getCntcResultCode()) // 연계 결과 코드
.cntcResultDtls(res.getCntcResultDtls()) // 연계 결과 상세
.ledgerGroupNo(res.getLedgerGroupNo()) // 원부 그룹 번호
.ledgerIndvdlzNo(res.getLedgerIndvdlzNo()) // 원부 개별화 번호
.vhmno(res.getVhmno()) // 차량관리번호
.vhrno(res.getVhrno()) // 차량번호
.vin(res.getVin()) // 차대번호
.vhctyAsortCode(res.getVhctyAsortCode()) // 차종 종별 코드
.vhctyAsortNm(res.getVhctyAsortNm()) // 차종 종별명
.cnm(res.getCnm()) // 차명
.colorCode(res.getColorCode()) // 색상 코드
.colorNm(res.getColorNm()) // 색상명
.nmplStndrdCode(res.getNmplStndrdCode()) // 번호판 규격 코드
.nmplStndrdNm(res.getNmplStndrdNm()) // 번호판 규격명
.prposSeCode(res.getPrposSeCode()) // 용도 구분 코드
.prposSeNm(res.getPrposSeNm()) // 용도 구분명
.mtrsFomNm(res.getMtrsFomNm()) // 원동기 형식명
.fomNm(res.getFomNm()) // 형식명
.acqsAmount(res.getAcqsAmount()) // 취득 금액
.registDetailCode(res.getRegistDetailCode()) // 등록 상세 코드
.registDetailNm(res.getRegistDetailNm()) // 등록 상세명
.frstRegistDe(res.getFrstRegistDe()) // 최초 등록일
.caagEndde(res.getCaagEndde()) // 차령 만료일자
.prye(res.getPrye()) // 연식
.spmnno1(res.getSpmnno1()) // 제원관리번호1
.spmnno2(res.getSpmnno2()) // 제원관리번호2
.yblMd(res.getYblMd()) // 제작 년월일
.trvlDstnc(res.getTrvlDstnc()) // 주행거리
.insptValidPdBgnde(res.getInsptValidPdBgnde()) // 검사 유효 기간 시작일
.insptValidPdEndde(res.getInsptValidPdEndde()) // 검사 유효 기간 종료일
.chckValidPdBgnde(res.getChckValidPdBgnde()) // 점검 유효 기간 시작일
.chckValidPdEndde(res.getChckValidPdEndde()) // 점검 유효 기간 종료일
.registReqstSeNm(res.getRegistReqstSeNm()) // 등록 청구 구분명
.frstRegistRqrcno(res.getFrstRegistRqrcno()) // 최초 등록 접수번호
.nmplCsdyRemnrDe(res.getNmplCsdyRemnrDe()) // 번호판 영치 최고일
.nmplCsdyAt(res.getNmplCsdyAt()) // 번호판 영치 여부
.bssUsePd(res.getBssUsePd()) // 사업용 기간
.octhtErsrPrvntcNticeDe(res.getOcthtErsrPrvntcNticeDe()) // 직권말소 예고통지일
.ersrRegistDe(res.getErsrRegistDe()) // 말소 등록일
.ersrRegistSeCode(res.getErsrRegistSeCode()) // 말소 등록 구분 코드
.ersrRegistSeNm(res.getErsrRegistSeNm()) // 말소 등록 구분명
.mrtgcnt(res.getMrtgcnt()) // 저당건수
.vhclecnt(res.getVhclecnt()) // 압류건수
.stmdcnt(res.getStmdcnt()) // 구조변경건수
.adres1(res.getAdres1()) // 주소1
.adresNm1(res.getAdresNm1()) // 주소명1
.adres(res.getAdres()) // 주소
.adresNm(res.getAdresNm()) // 주소명
.indvdlBsnmAt(res.getIndvdlBsnmAt()) // 개인사업자 여부
.telno(res.getTelno()) // 전화번호
.mberNm(res.getMberNm()) // 소유자명
.mberSeCode(res.getMberSeCode()) // 소유자 구분 코드
.mberSeNo(res.getMberSeNo()) // 소유자 번호
.taxxmptTrgterSeCode(res.getTaxxmptTrgterSeCode()) // 면세 대상 구분 코드
.taxxmptTrgterSeCodeNm(res.getTaxxmptTrgterSeCodeNm()) // 면세 대상 구분명
.cntMatter(res.getCntMatter()) // 내용 사항
.emdNm(res.getEmdNm()) // 읍면동명
.prvntccnt(res.getPrvntccnt()) // 예방건수
.xportFlflAtSttemntDe(res.getXportFlflAtSttemntDe()) // 수출이행신고일
.partnRqrcno(res.getPartnRqrcno()) // 협력업체 접수번호
.carLedgerFrmbkId(generatedId)
.linkRsltCd(response.getLinkRsltCd())
.linkRsltDtl(response.getLinkRsltDtl())
.ledgerGroupNo(response.getLedgerGroupNo())
.ledgerIndivNo(response.getLedgerIndivNo())
.vhmno(response.getVhmno())
.vhrno(response.getVhrno())
.vin(response.getVin())
.carmdlAsortCd(response.getCarmdlAsortCd())
.carmdlAsortNm(response.getCarmdlAsortNm())
.atmbNm(response.getAtmbNm())
.colorCd(response.getColorCd())
.colorNm(response.getColorNm())
.nopltSpcfctCd(response.getNopltSpcfctCd())
.nopltSpcfctNm(response.getNopltSpcfctNm())
.usgSeCd(response.getUsgSeCd())
.usgSeNm(response.getUsgSeNm())
.mtrsFomNm(response.getMtrsFomNm())
.fomNm(response.getFomNm())
.acqsAmt(response.getAcqsAmt())
.regDtlCd(response.getRegDtlCd())
.regDtlNm(response.getRegDtlNm())
.frstRegYmd(response.getFrstRegYmd())
.veagEndYmd(response.getVeagEndYmd())
.yridnw(response.getYridnw())
.spmnno1(response.getSpmnno1())
.spmnno2(response.getSpmnno2())
.fbctnYmd(response.getFbctnYmd())
.drvngDstnc(response.getDrvngDstnc())
.inspVldPdBgngYmd(response.getInspVldPdBgngYmd())
.inspVldPdEndYmd(response.getInspVldPdEndYmd())
.chckVldPdBgngYmd(response.getChckVldPdBgngYmd())
.chckVldPdEndYmd(response.getChckVldPdEndYmd())
.regAplySeNm(response.getRegAplySeNm())
.frstRegAplyRcptNo(response.getFrstRegAplyRcptNo())
.nopltCsdyAvtsmtYmd(response.getNopltCsdyAvtsmtYmd())
.nopltCsdyYn(response.getNopltCsdyYn())
.bssUsePdYmd(response.getBssUsePdYmd())
.octhtErsrPrvntcAvtsmtYmd(response.getOcthtErsrPrvntcAvtsmtYmd())
.ersrRegYmd(response.getErsrRegYmd())
.ersrRegSeCd(response.getErsrRegSeCd())
.ersrRegSeNm(response.getErsrRegSeNm())
.mrtgCnt(response.getMrtgCnt())
.szrCnt(response.getSzrCnt())
.strctChgCnt(response.getStrctChgCnt())
.usgsrhldAddr1(response.getUsgsrhldAddr1())
.usgsrhldAddrDtl1(response.getUsgsrhldAddrDtl1())
.ownrAddr(response.getOwnrAddr())
.ownrAddrDtl(response.getOwnrAddrDtl())
.indvdlBzmnYn(response.getIndvdlBzmnYn())
.rprsOwnrTelno(response.getRprsOwnrTelno())
.rprsOwnrNm(response.getRprsOwnrNm())
.rprsOwnrMbrSeCd(response.getRprsOwnrMbrSeCd())
.rprsvOwnrIdecno(response.getRprsvOwnrIdecno())
.taxxmptTrprSeCd(response.getTaxxmptTrprSeCd())
.taxxmptAplcnSeCd(response.getTaxxmptAplcnSeCd())
.spcablMttrCnt(response.getSpcablMttrCnt())
.usgsrhldDongNm(response.getUsgsrhldDongNm())
.prvntcCnt(response.getPrvntcCnt())
.xportFlflYnDclrYmd(response.getXportFlflYnDclrYmd())
.issuNo(response.getIssuNo())
.frstTrnsfrYmd(response.getFrstTrnsfrYmd())
.drivSrgbtryIdntfNo(response.getDrivSrgbtryIdntfNo())
.prcsImprtyRsnCd(response.getProcessImprtyResnCode())
.prcsImprtyRsnDtls(response.getProcessImprtyResnDtls())
.build();
}
// PK
private String carLedgerFrmbkId;
// 요청(헤더/본문) 정보
private String infoSysId;
private String infoSysIp;
private String sigunguCode;
private String cntcInfoCode;
private String chargerId;
private String chargerIp;
private String chargerNm;
// 요청 본문
private String dmndVhrno;
private String dmndOnesInformationOpen;
private String dmndCpttrNm;
private String dmndCpttrIhidnum;
private String dmndCpttrLegaldongCode;
private String dmndRouteSeCode;
private String dmndDetailExpression;
private String dmndInqireSeCode;
// 응답 요약 정보
private String cntcResultCode;
private String cntcResultDtls;
// 응답 본문(마스터)
private String ledgerGroupNo;
private String ledgerIndvdlzNo;
private String vhmno;
private String vhrno;
private String vin;
private String vhctyAsortCode;
private String vhctyAsortNm;
private String cnm;
private String colorCode;
private String colorNm;
private String nmplStndrdCode;
private String nmplStndrdNm;
private String prposSeCode;
private String prposSeNm;
private String mtrsFomNm;
private String fomNm;
private String acqsAmount;
private String registDetailCode;
private String registDetailNm;
private String frstRegistDe;
private String caagEndde;
private String prye;
private String spmnno1;
private String spmnno2;
private String yblMd;
private String trvlDstnc;
private String insptValidPdBgnde;
private String insptValidPdEndde;
private String chckValidPdBgnde;
private String chckValidPdEndde;
private String registReqstSeNm;
private String frstRegistRqrcno;
private String nmplCsdyRemnrDe;
private String nmplCsdyAt;
private String bssUsePd;
private String octhtErsrPrvntcNticeDe;
private String ersrRegistDe;
private String ersrRegistSeCode;
private String ersrRegistSeNm;
private String mrtgcnt;
private String vhclecnt;
private String stmdcnt;
private String adres1;
private String adresNm1;
private String adres;
private String adresNm;
private String indvdlBsnmAt;
private String telno;
private String mberNm;
private String mberSeCode;
private String mberSeNo;
private String taxxmptTrgterSeCode;
private String taxxmptTrgterSeCodeNm;
private String cntMatter;
private String emdNm;
private String prvntccnt;
private String xportFlflAtSttemntDe;
private String partnRqrcno;
private String frstTrnsfrDe;
private String processImprtyResnCode;
private String processImprtyResnDtls;
// 감사
private String rgtr;
/**
* NewLedgerRequest (DB )
*
* @param request NewLedgerRequest
* @return
*/
public static String extractVhrno(NewLedgerRequest request) {
return request != null ? request.getVhrno() : null;
}
}

@ -1,9 +1,9 @@
package go.kr.project.api.service;
import go.kr.project.api.model.request.BasicRequest;
import go.kr.project.api.model.request.LedgerRequest;
import go.kr.project.api.model.response.BasicResponse;
import go.kr.project.api.model.response.LedgerResponse;
import go.kr.project.api.model.request.OldBasicRequest;
import go.kr.project.api.model.request.NewLedgerRequest;
import go.kr.project.api.model.response.OldBasicResponse;
import go.kr.project.api.model.response.NewLedgerResponse;
/**
* VMIS-interface API
@ -12,14 +12,17 @@ import go.kr.project.api.model.response.LedgerResponse;
public interface ExternalVehicleApiService {
/**
* ( REST )
* : ,
* (old-basic)
*/
BasicResponse getBasicInfo(BasicRequest request);
OldBasicResponse getOldBasicInfo(OldBasicRequest request);
/**
* () ( REST )
* :
* (new-basic)
*/
LedgerResponse getLedgerInfo(LedgerRequest request);
OldBasicResponse getNewBasicInfo(OldBasicRequest request);
/**
* () (new-ledger)
*/
NewLedgerResponse getNewLedgerInfo(NewLedgerRequest request);
}

@ -5,10 +5,10 @@ import go.kr.project.api.config.ApiConstant;
import go.kr.project.api.config.properties.VmisProperties;
import go.kr.project.api.service.ExternalVehicleApiService;
import go.kr.project.api.util.ExceptionDetailUtil;
import go.kr.project.api.model.ApiExchangeEnvelope;
import go.kr.project.api.model.Envelope;
import go.kr.project.api.model.VehicleApiResponseVO;
import go.kr.project.api.model.request.BasicRequest;
import go.kr.project.api.model.request.LedgerRequest;
import go.kr.project.api.model.request.OldBasicRequest;
import go.kr.project.api.model.request.NewLedgerRequest;
import go.kr.project.api.model.response.*;
import go.kr.project.api.service.VmisCarBassMatterInqireLogService;
import go.kr.project.api.service.VmisCarLedgerFrmbkLogService;
@ -36,123 +36,119 @@ public class ExternalVehicleApiServiceImpl extends EgovAbstractServiceImpl imple
private final VmisCarBassMatterInqireLogService bassMatterLogService; // 기본사항 조회 로그 서비스
private final VmisCarLedgerFrmbkLogService ledgerLogService; // 등록원부 로그 서비스
/**
* API
* : BasicRequest API
* (, , , )
*
* @param request (, , )
* @return
* (old-basic)
* : (ApiExchangeEnvelope)
*/
@Override
public BasicResponse getBasicInfo(BasicRequest request) {
log.debug(" 기본정보 조회 API 호출 - 차량번호: {}", request.getVhrno());
public OldBasicResponse getOldBasicInfo(OldBasicRequest request) {
log.debug("[OLD-BASIC] 자동차 기본정보 조회 API 호출 - 차량번호: {}", request.getVhrno());
String generatedId = null;
try {
// 1) 최초 요청 로그 저장 (별도 트랜잭션)
VmisCarBassMatterInqireVO logEntity = VmisCarBassMatterInqireVO.fromRequest(request);
VmisCarBassMatterInqireVO logEntity = VmisCarBassMatterInqireVO.fromOldRequest(request);
generatedId = bassMatterLogService.createInitialRequestNewTx(logEntity);
// Envelope로 감싸기 (요청 객체는 이미 모든 필수 파라미터를 포함)
Envelope<BasicRequest> requestEnvelope = new Envelope<>(request);
// HTTP 헤더 설정
Envelope<OldBasicRequest> requestEnvelope = new Envelope<>(request);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Envelope<OldBasicRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
HttpEntity<Envelope<BasicRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
// 2) API 호출
ResponseEntity<Envelope<BasicResponse>> responseEntity = restTemplate.exchange(
vmisProperties.getExternal().getApi().getUrl().buildBasicUrl(),
ResponseEntity<ApiExchangeEnvelope<OldBasicRequest, OldBasicResponse>> responseEntity = restTemplate.exchange(
vmisProperties.getExternal().getApi().getUrl().buildOldBasicUrl(),
HttpMethod.POST,
requestEntity,
new ParameterizedTypeReference<Envelope<BasicResponse>>() {}
new ParameterizedTypeReference<ApiExchangeEnvelope<OldBasicRequest, OldBasicResponse>>() {}
);
// 3) 응답 로그 업데이트 (별도 트랜잭션)
if (responseEntity.getStatusCode() == HttpStatus.OK && responseEntity.getBody() != null) {
List<BasicResponse> data = responseEntity.getBody().getData();
ApiExchangeEnvelope<OldBasicRequest, OldBasicResponse> body = responseEntity.getBody();
List<OldBasicResponse> data = (body.getResponse() != null) ? body.getResponse().getData() : null;
if (data != null && !data.isEmpty()) {
VmisCarBassMatterInqireVO update = VmisCarBassMatterInqireVO.fromResponse(generatedId, responseEntity.getBody());
if (update != null) {
bassMatterLogService.updateResponseNewTx(update);
}
VmisCarBassMatterInqireVO update = VmisCarBassMatterInqireVO.fromOldExchange(generatedId, body);
if (update != null) bassMatterLogService.updateResponseNewTx(update);
log.debug("[OLD-BASIC] txId: {}", body.getTxId());
return data.get(0);
}
}
log.warn("차량 기본정보 조회 응답이 비어있음 - 차량번호: {}", request.getVhrno());
log.warn("[OLD-BASIC] 응답이 비어있음 - 차량번호: {}", request.getVhrno());
return null;
} catch (Exception e) {
// 4) 오류 로그 업데이트 (별도 트랜잭션)
if (generatedId != null) {
try {
String detail = ExceptionDetailUtil.buildForLog(e);
VmisCarBassMatterInqireVO errorLog = VmisCarBassMatterInqireVO.builder()
.carBassMatterInqireId(generatedId)
.cntcResultCode(ApiConstant.CNTC_RESULT_CODE_ERROR)
.cntcResultDtls(detail)
.linkRsltCd(ApiConstant.CNTC_RESULT_CODE_ERROR)
.linkRsltDtl(detail)
.build();
bassMatterLogService.updateResponseNewTx(errorLog);
log.error("[EXTERNAL-BASIC-ERR-LOG] API 호출 에러 정보 저장 완료(별도TX) - ID: {}, detail: {}", generatedId, detail, e);
log.error("[EXTERNAL-OLD-BASIC-ERR-LOG] 저장 완료 - ID: {}, detail: {}", generatedId, detail, e);
} catch (Exception ignore) {
log.error("[EXTERNAL-BASIC-ERR-LOG] 에러 로그 저장 실패 - ID: {}", generatedId, ignore);
log.error("[EXTERNAL-OLD-BASIC-ERR-LOG] 에러 로그 저장 실패 - ID: {}", generatedId, ignore);
}
}
log.error("차량 기본정보 조회 API 호출 실패 - 차량번호: {}", request.getVhrno(), e);
throw new MessageException("차량 기본정보 조회 실패: " + e.getMessage(), e);
throw new MessageException("[OLD-BASIC] 차량 기본정보 조회 실패: " + e.getMessage(), e);
}
}
/**
* () API
* : ,
*
* @param request (, , )
* @return
* (new-basic)
*/
@Override
public LedgerResponse getLedgerInfo(LedgerRequest request) {
public OldBasicResponse getNewBasicInfo(OldBasicRequest request) {
return null;
}
/**
* () (new-ledger)
*/
@Override
public NewLedgerResponse getNewLedgerInfo(NewLedgerRequest request) {
log.debug("자동차 등록원부 조회 API 호출 - 차량번호: {}", request.getVhrno());
String generatedId = null;
try {
// 1) 최초 요청 로그 저장 (별도 트랜잭션)
VmisCarLedgerFrmbkVO init = VmisCarLedgerFrmbkVO.fromRequest(request);
VmisCarLedgerFrmbkVO init = VmisCarLedgerFrmbkVO.fromNewRequest(request);
generatedId = ledgerLogService.createInitialRequestNewTx(init);
// Envelope로 감싸기 (요청 객체는 이미 모든 필수 파라미터를 포함)
Envelope<LedgerRequest> requestEnvelope = new Envelope<>(request);
Envelope<NewLedgerRequest> requestEnvelope = new Envelope<>(request);
// HTTP 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Envelope<LedgerRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
HttpEntity<Envelope<NewLedgerRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
// 2) API 호출
ResponseEntity<Envelope<LedgerResponse>> responseEntity = restTemplate.exchange(
vmisProperties.getExternal().getApi().getUrl().buildLedgerUrl(),
// 2) API 호출 (신규 포맷) - 현재 요구사항상 신규 원부만 사용
ResponseEntity<ApiExchangeEnvelope<NewLedgerRequest, NewLedgerResponse>> responseEntity = restTemplate.exchange(
vmisProperties.getExternal().getApi().getUrl().buildNewLedgerUrl(),
HttpMethod.POST,
requestEntity,
new ParameterizedTypeReference<Envelope<LedgerResponse>>() {}
new ParameterizedTypeReference<ApiExchangeEnvelope<NewLedgerRequest, NewLedgerResponse>>() {}
);
// 3) 응답 로그 업데이트 (마스터 + 상세, 별도 트랜잭션)
if (responseEntity.getStatusCode() == HttpStatus.OK && responseEntity.getBody() != null) {
List<LedgerResponse> data = responseEntity.getBody().getData();
ApiExchangeEnvelope<NewLedgerRequest, NewLedgerResponse> env = responseEntity.getBody();
List<NewLedgerResponse> data = (env.getResponse() != null) ? env.getResponse().getData() : null;
if (data != null && !data.isEmpty()) {
LedgerResponse body = data.get(0);
VmisCarLedgerFrmbkVO masterUpdate = VmisCarLedgerFrmbkVO.fromResponseMaster(generatedId, body);
NewLedgerResponse body = data.get(0);
VmisCarLedgerFrmbkVO masterUpdate = VmisCarLedgerFrmbkVO.fromNewResponseMaster(generatedId, body);
masterUpdate.setTxId(env.getTxId());
ledgerLogService.updateResponseNewTx(masterUpdate);
List<VmisCarLedgerFrmbkDtlVO> details = VmisCarLedgerFrmbkDtlVO.listFromResponse(body, generatedId);
List<VmisCarLedgerFrmbkDtlVO> details = VmisCarLedgerFrmbkDtlVO.listNewFromExchange(env, generatedId);
if (details != null && !details.isEmpty()) {
ledgerLogService.saveDetailsNewTx(generatedId, details);
}
log.debug("[LEDGER] txId: {}", env.getTxId());
return body;
}
}
@ -167,8 +163,8 @@ public class ExternalVehicleApiServiceImpl extends EgovAbstractServiceImpl imple
String detail = ExceptionDetailUtil.buildForLog(e);
VmisCarLedgerFrmbkVO errorLog = VmisCarLedgerFrmbkVO.builder()
.carLedgerFrmbkId(generatedId)
.cntcResultCode(ApiConstant.CNTC_RESULT_CODE_ERROR)
.cntcResultDtls(detail)
.linkRsltCd(ApiConstant.CNTC_RESULT_CODE_ERROR)
.linkRsltDtl(detail)
.build();
ledgerLogService.updateResponseNewTx(errorLog);
log.error("[EXTERNAL-LEDGER-ERR-LOG] API 호출 에러 정보 저장 완료(별도TX) - ID: {}, detail: {}", generatedId, detail, e);
@ -179,5 +175,6 @@ public class ExternalVehicleApiServiceImpl extends EgovAbstractServiceImpl imple
log.error("자동차 등록원부 조회 API 호출 실패 - 차량번호: {}", request.getVhrno(), e);
throw new MessageException("자동차 등록원부 조회 실패: " + e.getMessage(), e);
}
}
}

@ -59,6 +59,6 @@ public class VmisCarBassMatterInqireLogServiceImpl extends EgovAbstractServiceIm
if (result != 1) {
throw new RuntimeException("자동차 기본 사항 조회 정보 업데이트 실패 - ID: " + response.getCarBassMatterInqireId());
}
log.info("[BASIC-RES-LOG] 응답/에러 정보 저장 완료(별도TX) - ID: {}, 결과코드: {}", response.getCarBassMatterInqireId(), response.getCntcResultCode());
log.info("[BASIC-RES-LOG] 응답/에러 정보 저장 완료(별도TX) - ID: {}, 결과코드: {}", response.getCarBassMatterInqireId(), response.getLinkRsltCd());
}
}

@ -52,7 +52,7 @@ public class VmisCarLedgerFrmbkLogServiceImpl extends EgovAbstractServiceImpl im
throw new RuntimeException("자동차 등록 원부(갑) 정보 업데이트 실패 - ID: " + response.getCarLedgerFrmbkId());
}
log.info("[LEDGER-RES-LOG] 마스터 응답 업데이트(별도TX) - ID: {}, 결과코드: {}",
response.getCarLedgerFrmbkId(), response.getCntcResultCode());
response.getCarLedgerFrmbkId(), response.getLinkRsltCd());
}
@Override

@ -2,10 +2,10 @@ package go.kr.project.carInspectionPenalty.callApi.controller;
import egovframework.constant.TilesConstants;
import egovframework.util.ApiResponseUtil;
import go.kr.project.api.model.request.BasicRequest;
import go.kr.project.api.model.request.LedgerRequest;
import go.kr.project.api.model.response.BasicResponse;
import go.kr.project.api.model.response.LedgerResponse;
import go.kr.project.api.model.request.OldBasicRequest;
import go.kr.project.api.model.request.NewLedgerRequest;
import go.kr.project.api.model.response.OldBasicResponse;
import go.kr.project.api.model.response.NewLedgerResponse;
import go.kr.project.api.service.ExternalVehicleApiService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -48,7 +48,7 @@ public class VehicleInquiryController {
@PostMapping("/getBasicInfo.do")
@ResponseBody
@Operation(summary = "자동차 기본사항 조회", description = "차량 기본정보만 조회합니다.")
public ResponseEntity<?> getBasicInfo(@RequestBody BasicRequest request) {
public ResponseEntity<?> getBasicInfo(@RequestBody OldBasicRequest request) {
log.info("========== 자동차 기본사항 조회 시작 ==========");
log.info("요청 차량번호: {}", request.getVhrno());
log.info("부과기준일: {}", request.getLevyStdde());
@ -68,7 +68,7 @@ public class VehicleInquiryController {
}
// 차량 기본정보 조회
BasicResponse response = service.getBasicInfo(request);
OldBasicResponse response = service.getBasicInfo(request);
log.info("자동차 기본사항 조회 성공 - 차량번호: {}, 차대번호: {}", request.getVhrno(), request.getVin());
log.info("========== 자동차 기본사항 조회 완료 ==========");
@ -85,7 +85,7 @@ public class VehicleInquiryController {
@PostMapping("/getLedgerInfo.do")
@ResponseBody
@Operation(summary = "자동차 등록원부(갑) 조회", description = "차량 등록원부 정보만 조회합니다.")
public ResponseEntity<?> getLedgerInfo(@RequestBody LedgerRequest request) {
public ResponseEntity<?> getLedgerInfo(@RequestBody NewLedgerRequest request) {
log.info("========== 자동차 등록원부(갑) 조회 시작 ==========");
log.info("요청 차량번호: {}", request.getVhrno());
log.info("조회구분코드: {}", request.getInqireSeCode());
@ -111,7 +111,7 @@ public class VehicleInquiryController {
}
// 차량 등록원부 조회
LedgerResponse response = service.getLedgerInfo(request);
NewLedgerResponse response = service.getLedgerInfo(request);
log.info("자동차 등록원부(갑) 조회 성공 - 차량번호: {}", request.getVhrno());
log.info("========== 자동차 등록원부(갑) 조회 완료 ==========");

@ -3,7 +3,7 @@ package go.kr.project.carInspectionPenalty.registration.service.impl;
import egovframework.constant.TaskPrcsSttsConstants;
import egovframework.exception.MessageException;
import go.kr.project.api.model.VehicleApiResponseVO;
import go.kr.project.api.model.response.BasicResponse;
import go.kr.project.api.model.response.OldBasicResponse;
import go.kr.project.carInspectionPenalty.registration.mapper.CarFfnlgTrgtMapper;
import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtVO;
import go.kr.project.carInspectionPenalty.registration.service.ComparisonService;
@ -43,7 +43,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
String vhclno = existingData.getVhclno();
log.info("========== 비교 로직 시작: {} ==========", vhclno);
BasicResponse.Record basicInfo = apiResponse.getBasicInfo().getRecord().get(0);
OldBasicResponse.Record basicInfo = apiResponse.getBasicInfo().getRecord().get(0);
// ========== 1. 상품용 체크 ==========
String productUseResult = checkProductUse(existingData, basicInfo);
@ -82,7 +82,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
*
* @return 02 () null ()
*/
private String checkProductUse(CarFfnlgTrgtVO existingData, BasicResponse.Record basicInfo) {
private String checkProductUse(CarFfnlgTrgtVO existingData, OldBasicResponse.Record basicInfo) {
String vhclno = existingData.getVhclno();
String mberNm = basicInfo.getMberNm(); // 대표소유자성명
@ -117,7 +117,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
*
* @return 03 () null ()
*/
private String checkTransfer(CarFfnlgTrgtVO existingData, BasicResponse.Record basicInfo, String userId) {
private String checkTransfer(CarFfnlgTrgtVO existingData, OldBasicResponse.Record basicInfo, String userId) {
String vhclno = existingData.getVhclno();
// ========== 이첩 조건들 (OR 로직: 하나라도 만족하면 이첩) ==========
@ -141,7 +141,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
* 1:
* 4 != 4
*/
private boolean checkTransferCondition1_LegalDongMismatch(BasicResponse.Record basicInfo, String userId, String vhclno) {
private boolean checkTransferCondition1_LegalDongMismatch(OldBasicResponse.Record basicInfo, String userId, String vhclno) {
String useStrnghldLegaldongCode = basicInfo.getUseStrnghldLegaldongCode();
// 법정동코드 유효성 검사
@ -176,7 +176,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
/**
* ( )
*/
private String processTransfer(CarFfnlgTrgtVO existingData, BasicResponse.Record basicInfo,
private String processTransfer(CarFfnlgTrgtVO existingData, OldBasicResponse.Record basicInfo,
String vhclno, String reason) {
log.info("[이첩] 조건 충족! 차량번호: {}, 사유: {}", vhclno, reason);
@ -217,7 +217,7 @@ public class ComparisonServiceImpl extends EgovAbstractServiceImpl implements Co
* @return 04 () null ()
*/
@SuppressWarnings("unused")
private String checkInvestigationClosed(CarFfnlgTrgtVO existingData, BasicResponse.Record basicInfo) {
private String checkInvestigationClosed(CarFfnlgTrgtVO existingData, OldBasicResponse.Record basicInfo) {
String vhclno = existingData.getVhclno();
String ersrRegistSeCode = basicInfo.getErsrRegistSeCode(); // 말소등록구분코드

@ -168,6 +168,12 @@ vmis:
external:
api:
url:
base: "http://localhost:8081/api/v1/vehicles" # VMIS-interface 서버 URL (개발)
basic: "/basic" # 자동차기본정보
ledger: "/ledger" # 자동차등록원부
base: "http://localhost:18080/api/v1/vehicles" # VMIS-interface 서버 URL (운영)
basic:
old-or-new: "old" # 과거 신규 API 선택
old-url: "/old-basic" # 자동차기본정보
new-url: "/new-basic" # 자동차기본정보
ledger:
old-or-new: "new" # 과거 신규 API 선택, 자동차등록원부(갑)은 연계서버에 old 구현안됨.
old-url: "/old-ledger" # 자동차등록원부(갑) - 구현안됨.
new-url: "/new-ledger" # 자동차등록원부(갑)

@ -175,6 +175,12 @@ vmis:
external:
api:
url:
base: "http://localhost:8081/api/v1/vehicles" # VMIS-interface 서버 URL (로컬)
basic: "/basic" # 자동차기본정보
ledger: "/ledger" # 자동차등록원부
base: "http://localhost:18080/api/v1/vehicles" # VMIS-interface 서버 URL (운영)
basic:
old-or-new: "old" # 과거 신규 API 선택
old-url: "/old-basic" # 자동차기본정보
new-url: "/new-basic" # 자동차기본정보
ledger:
old-or-new: "new" # 과거 신규 API 선택, 자동차등록원부(갑)은 연계서버에 old 구현안됨.
old-url: "/old-ledger" # 자동차등록원부(갑)
new-url: "/new-ledger" # 자동차등록원부(갑)

@ -171,5 +171,11 @@ vmis:
api:
url:
base: "http://localhost:18080/api/v1/vehicles" # VMIS-interface 서버 URL (운영)
basic: "/basic" # 자동차기본정보
ledger: "/ledger" # 자동차등록원부
basic:
old-or-new: "old" # 과거 신규 API 선택
old-url: "/old-basic" # 자동차기본정보
new-url: "/new-basic" # 자동차기본정보
ledger:
old-or-new: "new" # 과거 신규 API 선택, 자동차등록원부(갑)은 연계서버에 old 구현안됨.
old-url: "/old-ledger" # 자동차등록원부(갑)
new-url: "/new-ledger" # 자동차등록원부(갑)

@ -14,31 +14,33 @@
INSERT INTO tb_car_bass_matter_inqire (
CAR_BASS_MATTER_INQIRE_ID,
INFO_SYS_ID,
INFO_SYS_IP,
SIGUNGU_CODE,
CNTC_INFO_CODE,
CHARGER_ID,
CHARGER_IP,
CHARGER_NM,
DMND_LEVY_STDDE,
DMND_INQIRE_SE_CODE,
INFO_SYS_IP_ADDR,
SGG_CD,
LINK_INFO_CD,
PIC_ID,
PIC_IP_ADDR,
PIC_NM,
DMND_LEVY_CRTR_YMD,
DMND_INQ_SE_CD,
DMND_VHRNO,
DMND_VIN,
LINK_RSLT_CD,
REG_DT,
RGTR
) VALUES (
#{carBassMatterInqireId},
#{infoSysId},
#{infoSysIp},
#{sigunguCode},
#{cntcInfoCode},
#{chargerId},
#{chargerIp},
#{chargerNm},
#{infoSysIpAddr},
#{sggCd},
#{linkInfoCd},
#{picId},
#{picIpAddr},
#{picNm},
#{dmndLevyStdde},
#{dmndInqireSeCode},
#{dmndVhrno},
#{dmndVin},
#{linkRsltCd},
NOW(),
#{rgtr}
)
@ -48,92 +50,94 @@
<update id="updateCarBassMatterInqire" parameterType="VmisCarBassMatterInqireVO">
UPDATE tb_car_bass_matter_inqire
<set>
<if test="cntcResultCode != null">CNTC_RESULT_CODE = #{cntcResultCode},</if>
<if test="cntcResultDtls != null">CNTC_RESULT_DTLS = #{cntcResultDtls},</if>
<if test="prye != null">PRYE = #{prye},</if>
<if test="registDe != null">REGIST_DE = #{registDe},</if>
<if test="ersrRegistSeCode != null">ERSR_REGIST_SE_CODE = #{ersrRegistSeCode},</if>
<if test="ersrRegistSeNm != null">ERSR_REGIST_SE_NM = #{ersrRegistSeNm},</if>
<if test="ersrRegistDe != null">ERSR_REGIST_DE = #{ersrRegistDe},</if>
<if test="registDetailCode != null">REGIST_DETAIL_CODE = #{registDetailCode},</if>
<if test="txId != null">TX_ID = #{txId},</if>
<if test="linkRsltCd != null">LINK_RSLT_CD = #{linkRsltCd},</if>
<if test="linkRsltDtl != null">LINK_RSLT_DTL = #{linkRsltDtl},</if>
<if test="prye != null">YRIDNW = #{prye},</if>
<if test="registDe != null">REG_YMD = #{registDe},</if>
<if test="ersrRegistSeCode != null">ERSR_REG_SE_CD = #{ersrRegistSeCode},</if>
<if test="ersrRegistSeNm != null">ERSR_REG_SE_NM = #{ersrRegistSeNm},</if>
<if test="ersrRegistDe != null">ERSR_REG_YMD = #{ersrRegistDe},</if>
<if test="registDetailCode != null">REG_DTL_CD = #{registDetailCode},</if>
<if test="dsplvl != null">DSPLVL = #{dsplvl},</if>
<if test="useStrnghldLegaldongCode != null">USE_STRNGHLD_LEGALDONG_CODE = #{useStrnghldLegaldongCode},</if>
<if test="useStrnghldAdstrdCode != null">USE_STRNGHLD_ADSTRD_CODE = #{useStrnghldAdstrdCode},</if>
<if test="useStrnghldMntn != null">USE_STRNGHLD_MNTN = #{useStrnghldMntn},</if>
<if test="useStrnghldLnbr != null">USE_STRNGHLD_LNBR = #{useStrnghldLnbr},</if>
<if test="useStrnghldHo != null">USE_STRNGHLD_HO = #{useStrnghldHo},</if>
<if test="useStrnghldAdresNm != null">USE_STRNGHLD_ADRES_NM = #{useStrnghldAdresNm},</if>
<if test="useStrnghldRoadNmCode != null">USE_STRNGHLD_ROAD_NM_CODE = #{useStrnghldRoadNmCode},</if>
<if test="usgsrhldUndgrndBuldSeCode != null">USGSRHLD_UNDGRND_BULD_SE_CODE = #{usgsrhldUndgrndBuldSeCode},</if>
<if test="useStrnghldBuldMainNo != null">USE_STRNGHLD_BULD_MAIN_NO = #{useStrnghldBuldMainNo},</if>
<if test="useStrnghldBuldSubNo != null">USE_STRNGHLD_BULD_SUB_NO = #{useStrnghldBuldSubNo},</if>
<if test="usgsrhldAdresFull != null">USGSRHLD_ADRES_FULL = #{usgsrhldAdresFull},</if>
<if test="mberSeCode != null">MBER_SE_CODE = #{mberSeCode},</if>
<if test="mberSeNo != null">MBER_SE_NO = #{mberSeNo},</if>
<if test="telno != null">TELNO = #{telno},</if>
<if test="ownerLegaldongCode != null">OWNER_LEGALDONG_CODE = #{ownerLegaldongCode},</if>
<if test="ownerAdstrdCode != null">OWNER_ADSTRD_CODE = #{ownerAdstrdCode},</if>
<if test="ownerMntn != null">OWNER_MNTN = #{ownerMntn},</if>
<if test="ownerLnbr != null">OWNER_LNBR = #{ownerLnbr},</if>
<if test="ownerHo != null">OWNER_HO = #{ownerHo},</if>
<if test="ownerAdresNm != null">OWNER_ADRES_NM = #{ownerAdresNm},</if>
<if test="ownerRoadNmCode != null">OWNER_ROAD_NM_CODE = #{ownerRoadNmCode},</if>
<if test="ownerUndgrndBuldSeCode != null">OWNER_UNDGRND_BULD_SE_CODE = #{ownerUndgrndBuldSeCode},</if>
<if test="ownerBuldMainNo != null">OWNER_BULD_MAIN_NO = #{ownerBuldMainNo},</if>
<if test="ownerBuldSubNo != null">OWNER_BULD_SUB_NO = #{ownerBuldSubNo},</if>
<if test="ownrWholaddr != null">OWNR_WHOLADDR = #{ownrWholaddr},</if>
<if test="aftrVhrno != null">AFTR_VHRNO = #{aftrVhrno},</if>
<if test="useFuelCode != null">USE_FUEL_CODE = #{useFuelCode},</if>
<if test="prposSeCode != null">PRPOS_SE_CODE = #{prposSeCode},</if>
<if test="useStrnghldLegaldongCode != null">USGSRHLD_STDG_CD = #{useStrnghldLegaldongCode},</if>
<if test="useStrnghldAdstrdCode != null">USGSRHLD_DONG_CD = #{useStrnghldAdstrdCode},</if>
<if test="useStrnghldMntn != null">USGSRHLD_MTN_YN = #{useStrnghldMntn},</if>
<if test="useStrnghldLnbr != null">USGSRHLD_LNBR = #{useStrnghldLnbr},</if>
<if test="useStrnghldHo != null">USGSRHLD_HO = #{useStrnghldHo},</if>
<if test="useStrnghldAdresNm != null">USGSRHLD_ADDR_NM = #{useStrnghldAdresNm},</if>
<if test="useStrnghldRoadNmCode != null">USGSRHLD_ROAD_NM_CD = #{useStrnghldRoadNmCode},</if>
<if test="usgsrhldUndgrndBuldSeCode != null">USGSRHLD_UDGD_BLDG_SE_CD = #{usgsrhldUndgrndBuldSeCode},</if>
<if test="useStrnghldBuldMainNo != null">USGSRHLD_BMNO = #{useStrnghldBuldMainNo},</if>
<if test="useStrnghldBuldSubNo != null">USGSRHLD_BSNO = #{useStrnghldBuldSubNo},</if>
<if test="usgsrhldAdresFull != null">USGSRHLD_WHOL_ADDR = #{usgsrhldAdresFull},</if>
<if test="mberSeCode != null">RPRS_OWNR_MBR_SE_CD = #{mberSeCode},</if>
<if test="mberSeNo != null">RPRSV_OWNR_IDECNO = #{mberSeNo},</if>
<if test="telno != null">RPRS_OWNR_TELNO = #{telno},</if>
<if test="ownerLegaldongCode != null">OWNR_STDG_CD = #{ownerLegaldongCode},</if>
<if test="ownerAdstrdCode != null">OWNR_DONG_CD = #{ownerAdstrdCode},</if>
<if test="ownerMntn != null">OWNR_MTN_YN = #{ownerMntn},</if>
<if test="ownerLnbr != null">OWNR_LNBR = #{ownerLnbr},</if>
<if test="ownerHo != null">OWNR_HO = #{ownerHo},</if>
<if test="ownerAdresNm != null">OWNR_ADDR_NM = #{ownerAdresNm},</if>
<if test="ownerRoadNmCode != null">OWNR_ROAD_NM_CD = #{ownerRoadNmCode},</if>
<if test="ownerUndgrndBuldSeCode != null">OWNR_UDGD_BLDG_SE_CD = #{ownerUndgrndBuldSeCode},</if>
<if test="ownerBuldMainNo != null">OWNR_BMNO = #{ownerBuldMainNo},</if>
<if test="ownerBuldSubNo != null">OWNR_BSNO = #{ownerBuldSubNo},</if>
<if test="ownrWholaddr != null">OWNR_WHOL_ADDR = #{ownrWholaddr},</if>
<if test="aftrVhrno != null">REAR_VHRNO = #{aftrVhrno},</if>
<if test="useFuelCode != null">USE_FUEL_CD = #{useFuelCode},</if>
<if test="prposSeCode != null">USG_SE_CD = #{prposSeCode},</if>
<if test="mtrsFomNm != null">MTRS_FOM_NM = #{mtrsFomNm},</if>
<if test="frntVhrno != null">FRNT_VHRNO = #{frntVhrno},</if>
<if test="frntVhrno != null">BFR_VHRNO = #{frntVhrno},</if>
<if test="vhrno != null">VHRNO = #{vhrno},</if>
<if test="vin != null">VIN = #{vin},</if>
<if test="cnm != null">CNM = #{cnm},</if>
<if test="vhcleTotWt != null">VHCLE_TOT_WT = #{vhcleTotWt},</if>
<if test="caagEndde != null">CAAG_ENDDE = #{caagEndde},</if>
<if test="changeDe != null">CHANGE_DE = #{changeDe},</if>
<if test="vhctyAsortCode != null">VHCTY_ASORT_CODE = #{vhctyAsortCode},</if>
<if test="vhctyTyCode != null">VHCTY_TY_CODE = #{vhctyTyCode},</if>
<if test="vhctySeCode != null">VHCTY_SE_CODE = #{vhctySeCode},</if>
<if test="cnm != null">ATMB_NM = #{cnm},</if>
<if test="vhcleTotWt != null">VHCL_TOTL_WT = #{vhcleTotWt},</if>
<if test="caagEndde != null">VEAG_END_YMD = #{caagEndde},</if>
<if test="changeDe != null">CHG_YMD = #{changeDe},</if>
<if test="vhctyAsortCode != null">CARMDL_ASORT_CD = #{vhctyAsortCode},</if>
<if test="vhctyTyCode != null">CARMDL_TYPE_CD = #{vhctyTyCode},</if>
<if test="vhctySeCode != null">CARMDL_SE_CD = #{vhctySeCode},</if>
<if test="mxmmLdg != null">MXMM_LDG = #{mxmmLdg},</if>
<if test="vhctyAsortNm != null">VHCTY_ASORT_NM = #{vhctyAsortNm},</if>
<if test="vhctyTyNm != null">VHCTY_TY_NM = #{vhctyTyNm},</if>
<if test="vhctySeNm != null">VHCTY_SE_NM = #{vhctySeNm},</if>
<if test="frstRegistDe != null">FRST_REGIST_DE = #{frstRegistDe},</if>
<if test="vhctyAsortNm != null">CARMDL_ASORT_NM = #{vhctyAsortNm},</if>
<if test="vhctyTyNm != null">CARMDL_TYPE_NM = #{vhctyTyNm},</if>
<if test="vhctySeNm != null">CARMDL_CLSF_NM = #{vhctySeNm},</if>
<if test="frstRegistDe != null">FRST_REG_YMD = #{frstRegistDe},</if>
<if test="fomNm != null">FOM_NM = #{fomNm},</if>
<if test="acqsDe != null">ACQS_DE = #{acqsDe},</if>
<if test="acqsEndDe != null">ACQS_END_DE = #{acqsEndDe},</if>
<if test="yblMd != null">YBL_MD = #{yblMd},</if>
<if test="transrRegistDe != null">TRANSR_REGIST_DE = #{transrRegistDe},</if>
<if test="spcfRegistSttusCode != null">SPCF_REGIST_STTUS_CODE = #{spcfRegistSttusCode},</if>
<if test="acqsDe != null">ACQS_YMD = #{acqsDe},</if>
<if test="acqsEndDe != null">ACQS_END_YMD = #{acqsEndDe},</if>
<if test="yblMd != null">FBCTN_YMD = #{yblMd},</if>
<if test="transrRegistDe != null">TRANSR_REG_YMD = #{transrRegistDe},</if>
<if test="spcfRegistSttusCode != null">SPCF_REG_STTS_CD = #{spcfRegistSttusCode},</if>
<if test="colorNm != null">COLOR_NM = #{colorNm},</if>
<if test="mrtgCo != null">MRTG_CO = #{mrtgCo},</if>
<if test="seizrCo != null">SEIZR_CO = #{seizrCo},</if>
<if test="stmdCo != null">STMD_CO = #{stmdCo},</if>
<if test="nmplCsdyAt != null">NMPL_CSDY_AT = #{nmplCsdyAt},</if>
<if test="nmplCsdyRemnrDe != null">NMPL_CSDY_REMNR_DE = #{nmplCsdyRemnrDe},</if>
<if test="originSeCode != null">ORIGIN_SE_CODE = #{originSeCode},</if>
<if test="nmplStndrdCode != null">NMPL_STNDRD_CODE = #{nmplStndrdCode},</if>
<if test="acqsAmount != null">ACQS_AMOUNT = #{acqsAmount},</if>
<if test="insptValidPdBgnde != null">INSPT_VALID_PD_BGNDE = #{insptValidPdBgnde},</if>
<if test="insptValidPdEndde != null">INSPT_VALID_PD_ENDDE = #{insptValidPdEndde},</if>
<if test="useStrnghldGrcCode != null">USE_STRNGHLD_GRC_CODE = #{useStrnghldGrcCode},</if>
<if test="tkcarPscapCo != null">TKCAR_PSCAP_CO = #{tkcarPscapCo},</if>
<if test="mrtgCo != null">MRTG_CNT = #{mrtgCo},</if>
<if test="seizrCo != null">SZR_CNT = #{seizrCo},</if>
<if test="stmdCo != null">STRCT_CHG_CNT = #{stmdCo},</if>
<if test="nmplCsdyAt != null">NOPLT_CSDY_YN = #{nmplCsdyAt},</if>
<if test="nmplCsdyRemnrDe != null">NOPLT_CSDY_AVTSMT_YMD = #{nmplCsdyRemnrDe},</if>
<if test="originSeCode != null">SRC_SE_CD = #{originSeCode},</if>
<if test="nmplStndrdCode != null">NOPLT_SPCFCT_CD = #{nmplStndrdCode},</if>
<if test="acqsAmount != null">ACQS_AMT = #{acqsAmount},</if>
<if test="insptValidPdBgnde != null">INSP_VLD_PD_BGNG_YMD = #{insptValidPdBgnde},</if>
<if test="insptValidPdEndde != null">INSP_VLD_PD_END_YMD = #{insptValidPdEndde},</if>
<if test="useStrnghldGrcCode != null">USGSRHLD_GRC_CD = #{useStrnghldGrcCode},</if>
<if test="tkcarPscapCo != null">RDCPCT_CNT = #{tkcarPscapCo},</if>
<if test="spmnno != null">SPMNNO = #{spmnno},</if>
<if test="trvlDstnc != null">TRVL_DSTNC = #{trvlDstnc},</if>
<if test="frstRegistRqrcno != null">FRST_REGIST_RQRCNO = #{frstRegistRqrcno},</if>
<if test="vlntErsrPrvntcNticeDe != null">VLNT_ERSR_PRVNTC_NTICE_DE = #{vlntErsrPrvntcNticeDe},</if>
<if test="registInsttNm != null">REGIST_INSTT_NM = #{registInsttNm},</if>
<if test="processImprtyResnCode != null">PROCESS_IMPRTY_RESN_CODE = #{processImprtyResnCode},</if>
<if test="processImprtyResnDtls != null">PROCESS_IMPRTY_RESN_DTLS = #{processImprtyResnDtls},</if>
<if test="trvlDstnc != null">DRVNG_DSTNC = #{trvlDstnc},</if>
<if test="frstRegistRqrcno != null">FRST_REG_APLY_RCPT_NO = #{frstRegistRqrcno},</if>
<if test="vlntErsrPrvntcNticeDe != null">VLNT_ERSR_PRVNTC_AVTSMT_YMD = #{vlntErsrPrvntcNticeDe},</if>
<if test="registInsttNm != null">OGNZ_NM = #{registInsttNm},</if>
<if test="processImprtyResnCode != null">PRCS_IMPRTY_RSN_CD = #{processImprtyResnCode},</if>
<if test="processImprtyResnDtls != null">PRCS_IMPRTY_RSN_DTLS = #{processImprtyResnDtls},</if>
<if test="cbdLt != null">CBD_LT = #{cbdLt},</if>
<if test="cbdBt != null">CBD_BT = #{cbdBt},</if>
<if test="cbdHg != null">CBD_HG = #{cbdHg},</if>
<if test="frstMxmmLdg != null">FRST_MXMM_LDG = #{frstMxmmLdg},</if>
<if test="fuelCnsmpRt != null">FUEL_CNSMP_RT = #{fuelCnsmpRt},</if>
<if test="elctyCmpndFuelCnsmpRt != null">ELCTY_CMPND_FUEL_CNSMP_RT = #{elctyCmpndFuelCnsmpRt},</if>
<if test="mberNm != null">MBER_NM = #{mberNm},</if>
<if test="fuelCnsmpRt != null">FUEL_CNSMPRT = #{fuelCnsmpRt},</if>
<if test="elctyCmpndFuelCnsmpRt != null">ELCTY_CMPND_FUEL_CNSMPRT = #{elctyCmpndFuelCnsmpRt},</if>
<if test="mberNm != null">RPRS_OWNR_NM = #{mberNm},</if>
<if test="carFfnlgTrgtId != null">CAR_FFNLG_TRGT_ID = #{carFfnlgTrgtId}</if>
</set>
WHERE CAR_BASS_MATTER_INQIRE_ID = #{carBassMatterInqireId}
</update>

@ -18,39 +18,41 @@
INSERT INTO tb_car_ledger_frmbk (
CAR_LEDGER_FRMBK_ID,
INFO_SYS_ID,
INFO_SYS_IP,
SIGUNGU_CODE,
CNTC_INFO_CODE,
CHARGER_ID,
CHARGER_IP,
CHARGER_NM,
INFO_SYS_IP_ADDR,
SGG_CD,
LINK_INFO_CD,
PIC_ID,
PIC_IP_ADDR,
PIC_NM,
DMND_VHRNO,
DMND_ONES_INFORMATION_OPEN,
DMND_CPTTR_NM,
DMND_CPTTR_IHIDNUM,
DMND_CPTTR_LEGALDONG_CODE,
DMND_ROUTE_SE_CODE,
DMND_DETAIL_EXPRESSION,
DMND_INQIRE_SE_CODE,
DMND_PRVC_RLS,
DMND_CVLPR_NM,
DMND_CVLPR_IDECNO,
DMND_CVLPR_STDG_CD,
DMND_PATH_SE_CD,
DMND_DSCTN_INDCT,
DMND_INQ_SE_CD,
LINK_RSLT_CD,
REG_DT,
RGTR
) VALUES (
#{carLedgerFrmbkId},
#{infoSysId},
#{infoSysIp},
#{sigunguCode},
#{cntcInfoCode},
#{chargerId},
#{chargerIp},
#{chargerNm},
#{infoSysIpAddr},
#{sggCd},
#{linkInfoCd},
#{picId},
#{picIpAddr},
#{picNm},
#{dmndVhrno},
#{dmndOnesInformationOpen},
#{dmndCpttrNm},
#{dmndCpttrIhidnum},
#{dmndCpttrLegaldongCode},
#{dmndRouteSeCode},
#{dmndDetailExpression},
#{dmndInqireSeCode},
#{dmndPrvcRls},
#{dmndCvlprNm},
#{dmndCvlprIdecno},
#{dmndCvlprStdgCd},
#{dmndPathSeCd},
#{dmndDsctnIndct},
#{dmndInqSeCd},
#{linkRsltCd},
NOW(),
#{rgtr}
)
@ -60,69 +62,72 @@
<update id="updateCarLedgerFrmbk" parameterType="VmisCarLedgerFrmbkVO">
UPDATE tb_car_ledger_frmbk
<set>
<if test="cntcResultCode != null">CNTC_RESULT_CODE = #{cntcResultCode},</if>
<if test="cntcResultDtls != null">CNTC_RESULT_DTLS = #{cntcResultDtls},</if>
<if test="txId != null">TX_ID = #{txId},</if>
<if test="linkRsltCd != null">LINK_RSLT_CD = #{linkRsltCd},</if>
<if test="linkRsltDtl != null">LINK_RSLT_DTL = #{linkRsltDtl},</if>
<if test="ledgerGroupNo != null">LEDGER_GROUP_NO = #{ledgerGroupNo},</if>
<if test="ledgerIndvdlzNo != null">LEDGER_INDVDLZ_NO = #{ledgerIndvdlzNo},</if>
<if test="ledgerIndivNo != null">LEDGER_INDIV_NO = #{ledgerIndivNo},</if>
<if test="vhmno != null">VHMNO = #{vhmno},</if>
<if test="vhrno != null">VHRNO = #{vhrno},</if>
<if test="vin != null">VIN = #{vin},</if>
<if test="vhctyAsortCode != null">VHCTY_ASORT_CODE = #{vhctyAsortCode},</if>
<if test="vhctyAsortNm != null">VHCTY_ASORT_NM = #{vhctyAsortNm},</if>
<if test="cnm != null">CNM = #{cnm},</if>
<if test="colorCode != null">COLOR_CODE = #{colorCode},</if>
<if test="carmdlAsortCd != null">CARMDL_ASORT_CD = #{carmdlAsortCd},</if>
<if test="carmdlAsortNm != null">CARMDL_ASORT_NM = #{carmdlAsortNm},</if>
<if test="atmbNm != null">ATMB_NM = #{atmbNm},</if>
<if test="colorCd != null">COLOR_CD = #{colorCd},</if>
<if test="colorNm != null">COLOR_NM = #{colorNm},</if>
<if test="nmplStndrdCode != null">NMPL_STNDRD_CODE = #{nmplStndrdCode},</if>
<if test="nmplStndrdNm != null">NMPL_STNDRD_NM = #{nmplStndrdNm},</if>
<if test="prposSeCode != null">PRPOS_SE_CODE = #{prposSeCode},</if>
<if test="prposSeNm != null">PRPOS_SE_NM = #{prposSeNm},</if>
<if test="nopltSpcfctCd != null">NOPLT_SPCFCT_CD = #{nopltSpcfctCd},</if>
<if test="nopltSpcfctNm != null">NOPLT_SPCFCT_NM = #{nopltSpcfctNm},</if>
<if test="usgSeCd != null">USG_SE_CD = #{usgSeCd},</if>
<if test="usgSeNm != null">USG_SE_NM = #{usgSeNm},</if>
<if test="mtrsFomNm != null">MTRS_FOM_NM = #{mtrsFomNm},</if>
<if test="fomNm != null">FOM_NM = #{fomNm},</if>
<if test="acqsAmount != null">ACQS_AMOUNT = #{acqsAmount},</if>
<if test="registDetailCode != null">REGIST_DETAIL_CODE = #{registDetailCode},</if>
<if test="registDetailNm != null">REGIST_DETAIL_NM = #{registDetailNm},</if>
<if test="frstRegistDe != null">FRST_REGIST_DE = #{frstRegistDe},</if>
<if test="caagEndde != null">CAAG_ENDDE = #{caagEndde},</if>
<if test="prye != null">PRYE = #{prye},</if>
<if test="spmnno1 != null">SPMNNO1 = #{spmnno1},</if>
<if test="spmnno2 != null">SPMNNO2 = #{spmnno2},</if>
<if test="yblMd != null">YBL_MD = #{yblMd},</if>
<if test="trvlDstnc != null">TRVL_DSTNC = #{trvlDstnc},</if>
<if test="insptValidPdBgnde != null">INSPT_VALID_PD_BGNDE = #{insptValidPdBgnde},</if>
<if test="insptValidPdEndde != null">INSPT_VALID_PD_ENDDE = #{insptValidPdEndde},</if>
<if test="chckValidPdBgnde != null">CHCK_VALID_PD_BGNDE = #{chckValidPdBgnde},</if>
<if test="chckValidPdEndde != null">CHCK_VALID_PD_ENDDE = #{chckValidPdEndde},</if>
<if test="registReqstSeNm != null">REGIST_REQST_SE_NM = #{registReqstSeNm},</if>
<if test="frstRegistRqrcno != null">FRST_REGIST_RQRCNO = #{frstRegistRqrcno},</if>
<if test="nmplCsdyRemnrDe != null">NMPL_CSDY_REMNR_DE = #{nmplCsdyRemnrDe},</if>
<if test="nmplCsdyAt != null">NMPL_CSDY_AT = #{nmplCsdyAt},</if>
<if test="bssUsePd != null">BSS_USE_PD = #{bssUsePd},</if>
<if test="octhtErsrPrvntcNticeDe != null">OCTHT_ERSR_PRVNTC_NTICE_DE = #{octhtErsrPrvntcNticeDe},</if>
<if test="ersrRegistDe != null">ERSR_REGIST_DE = #{ersrRegistDe},</if>
<if test="ersrRegistSeCode != null">ERSR_REGIST_SE_CODE = #{ersrRegistSeCode},</if>
<if test="ersrRegistSeNm != null">ERSR_REGIST_SE_NM = #{ersrRegistSeNm},</if>
<if test="mrtgcnt != null">MRTGCNT = #{mrtgcnt},</if>
<if test="vhclecnt != null">VHCLECNT = #{vhclecnt},</if>
<if test="stmdcnt != null">STMDCNT = #{stmdcnt},</if>
<if test="adres1 != null">ADRES1 = #{adres1},</if>
<if test="adresNm1 != null">ADRES_NM1 = #{adresNm1},</if>
<if test="adres != null">ADRES = #{adres},</if>
<if test="adresNm != null">ADRES_NM = #{adresNm},</if>
<if test="indvdlBsnmAt != null">INDVDL_BSNM_AT = #{indvdlBsnmAt},</if>
<if test="telno != null">TELNO = #{telno},</if>
<if test="mberNm != null">MBER_NM = #{mberNm},</if>
<if test="mberSeCode != null">MBER_SE_CODE = #{mberSeCode},</if>
<if test="mberSeNo != null">MBER_SE_NO = #{mberSeNo},</if>
<if test="taxxmptTrgterSeCode != null">TAXXMPT_TRGTER_SE_CODE = #{taxxmptTrgterSeCode},</if>
<if test="taxxmptTrgterSeCodeNm != null">TAXXMPT_TRGTER_SE_CODE_NM = #{taxxmptTrgterSeCodeNm},</if>
<if test="cntMatter != null">CNT_MATTER = #{cntMatter},</if>
<if test="emdNm != null">EMD_NM = #{emdNm},</if>
<if test="prvntccnt != null">PRVNTCCNT = #{prvntccnt},</if>
<if test="xportFlflAtSttemntDe != null">XPORT_FLFL_AT_STTEMNT_DE = #{xportFlflAtSttemntDe},</if>
<if test="partnRqrcno != null">PARTN_RQRCNO = #{partnRqrcno},</if>
<if test="frstTrnsfrDe != null">FRST_TRNSFR_DE = #{frstTrnsfrDe},</if>
<if test="processImprtyResnCode != null">PROCESS_IMPRTY_RESN_CODE = #{processImprtyResnCode},</if>
<if test="processImprtyResnDtls != null">PROCESS_IMPRTY_RESN_DTLS = #{processImprtyResnDtls},</if>
<if test="acqsAmt != null">ACQS_AMT = #{acqsAmt},</if>
<if test="regDtlCd != null">REG_DTL_CD = #{regDtlCd},</if>
<if test="regDtlNm != null">REG_DTL_NM = #{regDtlNm},</if>
<if test="frstRegYmd != null">FRST_REG_YMD = #{frstRegYmd},</if>
<if test="veagEndYmd != null">VEAG_END_YMD = #{veagEndYmd},</if>
<if test="yridnw != null">YRIDNW = #{yridnw},</if>
<if test="spmnno1 != null">SPMNNO_1 = #{spmnno1},</if>
<if test="spmnno2 != null">SPMNNO_2 = #{spmnno2},</if>
<if test="fbctnYmd != null">FBCTN_YMD = #{fbctnYmd},</if>
<if test="drvngDstnc != null">DRVNG_DSTNC = #{drvngDstnc},</if>
<if test="inspVldPdBgngYmd != null">INSP_VLD_PD_BGNG_YMD = #{inspVldPdBgngYmd},</if>
<if test="inspVldPdEndYmd != null">INSP_VLD_PD_END_YMD = #{inspVldPdEndYmd},</if>
<if test="chckVldPdBgngYmd != null">CHCK_VLD_PD_BGNG_YMD = #{chckVldPdBgngYmd},</if>
<if test="chckVldPdEndYmd != null">CHCK_VLD_PD_END_YMD = #{chckVldPdEndYmd},</if>
<if test="regAplySeNm != null">REG_APLY_SE_NM = #{regAplySeNm},</if>
<if test="frstRegAplyRcptNo != null">FRST_REG_APLY_RCPT_NO = #{frstRegAplyRcptNo},</if>
<if test="nopltCsdyAvtsmtYmd != null">NOPLT_CSDY_AVTSMT_YMD = #{nopltCsdyAvtsmtYmd},</if>
<if test="nopltCsdyYn != null">NOPLT_CSDY_YN = #{nopltCsdyYn},</if>
<if test="bssUsePdYmd != null">BSS_USE_PD_YMD = #{bssUsePdYmd},</if>
<if test="octhtErsrPrvntcAvtsmtYmd != null">OCTHT_ERSR_PRVNTC_AVTSMT_YMD = #{octhtErsrPrvntcAvtsmtYmd},</if>
<if test="ersrRegYmd != null">ERSR_REG_YMD = #{ersrRegYmd},</if>
<if test="ersrRegSeCd != null">ERSR_REG_SE_CD = #{ersrRegSeCd},</if>
<if test="ersrRegSeNm != null">ERSR_REG_SE_NM = #{ersrRegSeNm},</if>
<if test="mrtgCnt != null">MRTG_CNT = #{mrtgCnt},</if>
<if test="szrCnt != null">SZR_CNT = #{szrCnt},</if>
<if test="strctChgCnt != null">STRCT_CHG_CNT = #{strctChgCnt},</if>
<if test="usgsrhldAddr1 != null">USGSRHLD_ADDR_1 = #{usgsrhldAddr1},</if>
<if test="usgsrhldAddrDtl1 != null">USGSRHLD_ADDR_DTL_1 = #{usgsrhldAddrDtl1},</if>
<if test="ownrAddr != null">OWNR_ADDR = #{ownrAddr},</if>
<if test="ownrAddrDtl != null">OWNR_ADDR_DTL = #{ownrAddrDtl},</if>
<if test="indvdlBzmnYn != null">INDVDL_BZMN_YN = #{indvdlBzmnYn},</if>
<if test="rprsOwnrTelno != null">RPRS_OWNR_TELNO = #{rprsOwnrTelno},</if>
<if test="rprsOwnrNm != null">RPRS_OWNR_NM = #{rprsOwnrNm},</if>
<if test="rprsOwnrMbrSeCd != null">RPRS_OWNR_MBR_SE_CD = #{rprsOwnrMbrSeCd},</if>
<if test="rprsvOwnrIdecno != null">RPRSV_OWNR_IDECNO = #{rprsvOwnrIdecno},</if>
<if test="taxxmptTrprSeCd != null">TAXXMPT_TRPR_SE_CD = #{taxxmptTrprSeCd},</if>
<if test="taxxmptAplcnSeCd != null">TAXXMPT_APLCN_SE_CD = #{taxxmptAplcnSeCd},</if>
<if test="spcablMttrCnt != null">SPCABL_MTTR_CNT = #{spcablMttrCnt},</if>
<if test="usgsrhldDongNm != null">USGSRHLD_DONG_NM = #{usgsrhldDongNm},</if>
<if test="prvntcCnt != null">PRVNTC_CNT = #{prvntcCnt},</if>
<if test="xportFlflYnDclrYmd != null">XPORT_FLFL_YN_DCLR_YMD = #{xportFlflYnDclrYmd},</if>
<if test="issuNo != null">ISSU_NO = #{issuNo},</if>
<if test="frstTrnsfrYmd != null">FRST_TRNSFR_YMD = #{frstTrnsfrYmd},</if>
<if test="drivSrgbtryIdntfNo != null">DRIV_SRGBTRY_IDNTF_NO = #{drivSrgbtryIdntfNo},</if>
<if test="prcsImprtyRsnCd != null">PRCS_IMPRTY_RSN_CD = #{prcsImprtyRsnCd},</if>
<if test="prcsImprtyRsnDtls != null">PRCS_IMPRTY_RSN_DTLS = #{prcsImprtyRsnDtls},</if>
<if test="carFfnlgTrgtId != null">CAR_FFNLG_TRGT_ID = #{carFfnlgTrgtId}</if>
</set>
WHERE CAR_LEDGER_FRMBK_ID = #{carLedgerFrmbkId}
</update>
@ -132,36 +137,40 @@
INSERT INTO tb_car_ledger_frmbk_dtl (
CAR_LEDGER_FRMBK_DTL_ID,
CAR_LEDGER_FRMBK_ID,
MAINCHK,
CHANGE_JOB_SE_CODE,
MAINNO,
SUBNO,
DTLS,
RQRCNO,
SZR_RMV_DTL_SN,
CHG_TASK_SE_CD,
MAIN_NO,
SNO,
SPCABL_MTTR,
HSHLDR_NM,
HSHLDR_IDECNO,
APLY_RCPT_NO,
VHMNO,
LEDGER_GROUP_NO,
LEDGER_INDVDLZ_NO,
GUBUN_NM,
CHANGE_DE,
DETAIL_SN,
LEDGER_INDIV_NO,
CHG_TASK_SE_NM,
CHG_YMD,
DTL_SN,
FLAG,
REG_DT,
RGTR
) VALUES (
#{carLedgerFrmbkDtlId},
#{carLedgerFrmbkId},
#{mainchk},
#{changeJobSeCode},
#{mainno},
#{subno},
#{dtls},
#{rqrcno},
#{szrRmvDtlSn},
#{chgTaskSeCd},
#{mainNo},
#{sno},
#{spcablMttr},
#{hshldrNm},
#{hshldrIdecno},
#{aplyRcptNo},
#{vhmno},
#{ledgerGroupNo},
#{ledgerIndvdlzNo},
#{gubunNm},
#{changeDe},
#{detailSn},
#{ledgerIndivNo},
#{chgTaskSeNm},
#{chgYmd},
#{dtlSn},
#{flag},
NOW(),
#{rgtr}

Loading…
Cancel
Save