diff --git a/DB/DDL/vips/tb_car_ffnlg_trgt.sql b/DB/DDL/vips/tb_car_ffnlg_trgt.sql index eb4e0d9..52c9db4 100644 --- a/DB/DDL/vips/tb_car_ffnlg_trgt.sql +++ b/DB/DDL/vips/tb_car_ffnlg_trgt.sql @@ -2,26 +2,25 @@ create table tb_car_ffnlg_trgt ( CAR_FFNLG_TRGT_ID varchar(20) not null comment '자동차 과태료 대상 ID' primary key, - RCPT_YMD varchar(8) null comment '접수 일자', + RCPT_YMD varchar(10) null comment '접수 일자', INSPSTN_CD varchar(8) null comment '검사소 코드', - INSP_YMD varchar(8) null comment '검사 일자', + INSP_YMD varchar(10) null comment '검사 일자', VHCLNO varchar(30) null comment '차량번호', OWNR_NM varchar(75) null comment '소유자 명', RRNO varchar(100) null comment '주민등록번호', CAR_NM varchar(100) null comment '자동차 명', CAR_KND varchar(100) null comment '자동차 종류', CAR_USG varchar(100) null comment '자동차 용도', - INSP_END_YMD varchar(8) null comment '검사 종료 일자', + INSP_END_YMD varchar(10) null comment '검사 종료 일자', DAYCNT varchar(5) null comment '일수', FFNLG_AMT varchar(10) null comment '과태료 금액', - LAST_REG_YMD varchar(8) null comment '최종 등록 일자', + LAST_REG_YMD varchar(11) null comment '최종 등록 일자', ADDR varchar(600) null comment '주소', - VLD_PRD_EXPRY_YMD varchar(8) null comment '유효 기간 만료 일자', + VLD_PRD_EXPRY_YMD varchar(10) null comment '유효 기간 만료 일자', TRD_GDS varchar(100) null comment '매매 상품', TASK_PRCS_STTS_CD varchar(2) null comment '업무 처리 상태 코드', - TASK_PRCS_YMD varchar(8) null comment '업무 처리 일자', + TASK_PRCS_YMD varchar(10) null comment '업무 처리 일자', RMRK varchar(4000) null comment '비고', - RMRK_DTL TEXT null comment '비고 상세', CAR_BASS_MATTER_INQIRE_ID varchar(20) null comment '자동차 기본 사항 조회 ID', CAR_LEDGER_FRMBK_ID varchar(20) null comment '자동차 등록 원부 갑 ID', CAR_BSC_MTTR_INQ_FLNM varchar(75) null comment '자동차 기본 사항 조회 성명', @@ -29,17 +28,14 @@ create table tb_car_ffnlg_trgt CAR_BSC_MTTR_INQ_SGG_NM varchar(75) null comment '자동차 기본 사항 조회 시군구 명', CAR_REG_FRMBK_CHG_TASK_SE_CD varchar(2) null comment '자동차 등록 원부갑 변경 업무 구분 코드', CAR_REG_FRMBK_CHG_TASK_SE_NM varchar(75) null comment '자동차 등록 원부갑 변경 업무 구분 명', - CAR_REG_FRMBK_CHG_YMD varchar(8) null comment '자동차 등록 원부갑 변경 일자', + CAR_REG_FRMBK_CHG_YMD varchar(10) null comment '자동차 등록 원부갑 변경 일자', CAR_REG_FRMBK_DTL varchar(2000) null comment '자동차 등록 원부갑 상세', REG_DT datetime null comment '등록 일시', RGTR varchar(11) null comment '등록자', DEL_YN char not null comment '삭제 여부', DEL_DT datetime null comment '삭제 일시', - DLTR varchar(11) null comment '삭제자' + DLTR varchar(11) null comment '삭제자', + RMRK_DTL text null comment '비고 상세' ) comment '자동차 과태료 대상'; - - -ALTER TABLE tb_car_ffnlg_trgt -MODIFY COLUMN RMRK_DTL TEXT NULL COMMENT '비고 상세'; diff --git a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java index 33a80f1..0f28eee 100644 --- a/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java +++ b/src/main/java/go/kr/project/carInspectionPenalty/registration/service/impl/CarFfnlgTrgtServiceImpl.java @@ -280,11 +280,28 @@ public class CarFfnlgTrgtServiceImpl extends EgovAbstractServiceImpl implements // 3) 데이터 라인 생성 (각 항목 2줄) for (CarFfnlgTrgtVO row : list) { + // 차량번호 별표 처리 + String vhclno = nvl(row.getVhclno()); + String vhclnoAsterisk = " "; + if (vhclno.startsWith("*")) { + vhclnoAsterisk = "*"; + vhclno = vhclno.substring(1); // 별표 제거 + } + + // 최종등록일 별표 처리 + String lastRegYmd = nvl(row.getLastRegYmd()); + String lastRegYmdAsterisk = " "; + if (lastRegYmd.startsWith("*")) { + lastRegYmdAsterisk = "*"; + lastRegYmd = lastRegYmd.substring(1); // 별표 제거 + } + // 첫째줄: 고정폭 필드들 연결 String firstLine = padRightBytes(nvl(row.getInspstnCd()), parseConfig.getFirstLineLength("inspstn-cd"), encoding) + padRightBytes(row.getInspYmd(), parseConfig.getFirstLineLength("insp-ymd"), encoding) + - padRightBytes(nvl(row.getVhclno()), parseConfig.getFirstLineLength("vhclno"), encoding) + + padRightBytes(vhclnoAsterisk, parseConfig.getFirstLineLength("vhclno-asterisk"), encoding) + + padRightBytes(vhclno, parseConfig.getFirstLineLength("vhclno"), encoding) + padRightBytes(nvl(row.getOwnrNm()), parseConfig.getFirstLineLength("ownr-nm"), encoding) + padRightBytes(nvl(row.getRrno()), parseConfig.getFirstLineLength("rrno"), encoding) + padRightBytes(nvl(row.getCarNm()), parseConfig.getFirstLineLength("car-nm"), encoding) + @@ -299,7 +316,8 @@ public class CarFfnlgTrgtServiceImpl extends EgovAbstractServiceImpl implements // 둘째줄: skip + 나머지 필드 String secondLine = padRightBytes("", parseConfig.getSecondLineLength("skip"), encoding) + - padRightBytes(row.getLastRegYmd(), parseConfig.getSecondLineLength("last-reg-ymd"), encoding) + + padRightBytes(lastRegYmdAsterisk, parseConfig.getSecondLineLength("last-reg-ymd-asterisk"), encoding) + + padRightBytes(lastRegYmd, parseConfig.getSecondLineLength("last-reg-ymd"), encoding) + padRightBytes(nvl(row.getAddr()), parseConfig.getSecondLineLength("addr"), encoding) + padRightBytes(row.getVldPrdExpryYmd(), parseConfig.getSecondLineLength("vld-prd-expry-ymd"), encoding) + padRightBytes(nvl(row.getTrdGds()), parseConfig.getSecondLineLength("trd-gds"), encoding); @@ -467,12 +485,24 @@ public class CarFfnlgTrgtServiceImpl extends EgovAbstractServiceImpl implements String inspYmd = extractByteLength(firstBytes, pos, len, encoding).trim(); log.info("[DEBUG_LOG] 검사일자(inspYmd) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, inspYmd); pos += len; - - // 차량번호 (13바이트) + + // 차량번호 별표 공간 (1바이트) + len = parseConfig.getFirstLineLength("vhclno-asterisk"); + String vhclnoAsterisk = extractByteLength(firstBytes, pos, len, encoding); + log.info("[DEBUG_LOG] 차량번호 별표(vhclnoAsterisk) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, vhclnoAsterisk); + pos += len; + + // 차량번호 (12바이트) len = parseConfig.getFirstLineLength("vhclno"); String vhclno = extractByteLength(firstBytes, pos, len, encoding).trim(); log.info("[DEBUG_LOG] 차량번호(vhclno) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, vhclno); pos += len; + + // 별표가 있으면 차량번호 앞에 붙임 + if ("*".equals(vhclnoAsterisk.trim())) { + vhclno = "*" + vhclno; + log.info("[DEBUG_LOG] 차량번호에 별표 추가: [{}]", vhclno); + } // 소유자명 (31바이트) len = parseConfig.getFirstLineLength("ownr-nm"); @@ -509,8 +539,8 @@ public class CarFfnlgTrgtServiceImpl extends EgovAbstractServiceImpl implements String inspEndYmd = extractByteLength(firstBytes, pos, len, encoding).trim(); log.info("[DEBUG_LOG] 종료일(inspEndYmd) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, inspEndYmd); pos += len; - - // 일수 (8바이트) + + // 일수 (별표 포함) len = parseConfig.getFirstLineLength("daycnt"); String daycnt = extractByteLength(firstBytes, pos, len, encoding).trim(); log.info("[DEBUG_LOG] 일수(daycnt) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, daycnt); @@ -531,12 +561,24 @@ public class CarFfnlgTrgtServiceImpl extends EgovAbstractServiceImpl implements len = parseConfig.getSecondLineLength("skip"); log.info("[DEBUG_LOG] 공백 스킵 [{}바이트]", len); pos += len; - - // 최종등록일 (12바이트) + + // 최종등록일 별표 공간 (1바이트) + len = parseConfig.getSecondLineLength("last-reg-ymd-asterisk"); + String lastRegYmdAsterisk = extractByteLength(secondBytes, pos, len, encoding); + log.info("[DEBUG_LOG] 최종등록일 별표(lastRegYmdAsterisk) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, lastRegYmdAsterisk); + pos += len; + + // 최종등록일 (11바이트) len = parseConfig.getSecondLineLength("last-reg-ymd"); String lastRegYmd = extractByteLength(secondBytes, pos, len, encoding).trim(); log.info("[DEBUG_LOG] 최종등록일(lastRegYmd) [{}바이트, 위치 {}-{}] = [{}]", len, pos, pos + len, lastRegYmd); pos += len; + + // 별표가 있으면 최종등록일 앞에 붙임 + if ("*".equals(lastRegYmdAsterisk.trim())) { + lastRegYmd = "*" + lastRegYmd; + log.info("[DEBUG_LOG] 최종등록일에 별표 추가: [{}]", lastRegYmd); + } // 주소 (88바이트) len = parseConfig.getSecondLineLength("addr"); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 79ce280..10a666d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -108,40 +108,44 @@ car-ffnlg-txt-parse: byte-size-2: first-line: # 첫째줄 필드별 바이트 길이 (2바이트 기준) inspstn-cd: 8 # 검사소 코드 - insp-ymd: 12 # 검사일자 + insp-ymd: 11 # 검사일자 + vhclno-asterisk: 1 # 차량번호 앞 별표 공간 vhclno: 13 # 차량번호 ownr-nm: 31 # 소유자명 rrno: 15 # 주민등록번호 car-nm: 16 # 자동차명 car-knd: 14 # 자동차종류 car-usg: 11 # 자동차용도 - insp-end-ymd: 12 # 검사종료일자 - daycnt: 4 # 일수 + insp-end-ymd: 11 # 검사종료일자 + daycnt: 5 # 일수 (별표 포함) ffnlg-amt: 10 # 과태료금액 second-line: # 둘째줄 필드별 바이트 길이 (2바이트 기준) - skip: 8 # 공백 (스킵) + skip: 7 # 공백 (스킵) + last-reg-ymd-asterisk: 1 # 최종등록일 앞 별표 공간 last-reg-ymd: 12 # 최종등록일자 addr: 86 # 주소 - vld-prd-expry-ymd: 12 # 유효기간만료일자 - trd-gds: 11 # 매매상품 + vld-prd-expry-ymd: 13 # 유효기간만료일자 + trd-gds: 10 # 매매상품 # ===== 3바이트 환경 설정 (UTF-8) ===== byte-size-3: - first-line: # 첫째줄 필드별 바이트 길이 (2바이트 기준) + first-line: # 첫째줄 필드별 바이트 길이 (3바이트 기준) inspstn-cd: 8 # 검사소 코드 insp-ymd: 12 # 검사일자 - vhclno: 13 # 차량번호 + vhclno-asterisk: 1 # 차량번호 앞 별표 공간 + vhclno: 12 # 차량번호 ownr-nm: 31 # 소유자명 rrno: 15 # 주민등록번호 car-nm: 16 # 자동차명 car-knd: 14 # 자동차종류 car-usg: 11 # 자동차용도 insp-end-ymd: 12 # 검사종료일자 - daycnt: 4 # 일수 + daycnt: 4 # 일수 (별표 포함) ffnlg-amt: 10 # 과태료금액 - second-line: # 둘째줄 필드별 바이트 길이 (2바이트 기준) + second-line: # 둘째줄 필드별 바이트 길이 (3바이트 기준) skip: 8 # 공백 (스킵) - last-reg-ymd: 12 # 최종등록일자 + last-reg-ymd-asterisk: 1 # 최종등록일 앞 별표 공간 + last-reg-ymd: 11 # 최종등록일자 addr: 86 # 주소 vld-prd-expry-ymd: 12 # 유효기간만료일자 trd-gds: 11 # 매매상품