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

1. 사전부과 테스트 api 추가
2. 컬럼 너무 많아서 맵스트럭쳐 추가
master
Kurt92 2 weeks ago
parent 3b9807cb68
commit 1346cbfdc2

@ -40,6 +40,10 @@ dependencies {
// === DB Driver === // === DB Driver ===
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
// === QueryDSL ( ) === // === QueryDSL ( ) ===
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'

@ -5,6 +5,7 @@ import org.api.test.biz.taxelse.dto.TaxelseDto;
import org.api.test.biz.taxelse.service.TaxelseService; import org.api.test.biz.taxelse.service.TaxelseService;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@ -16,21 +17,15 @@ public class TaxelseController {
// 사전부과 // 사전부과
@PostMapping("/api/test/lavy") @PostMapping("/api/test/preLavy")
public ResponseEntity<TaxelseDto.Response> preNoticeInsert() { public ResponseEntity<TaxelseDto.Response> preNoticeInsert(@RequestBody TaxelseDto.Request.PreLavyBody req) {
TaxelseDto.Response.ResultSunapBody resultBody = TaxelseDto.Response.ResultSunapBody.builder() TaxelseDto.Response res = taxelseService.preNoticeInsert(req);
.build();
TaxelseDto.Response response = TaxelseDto.Response.builder()
.state("0000")
.code("성공")
.result("정상 처리되었습니다.")
.body(resultBody)
.build();
return ResponseEntity.ok(response);
return ResponseEntity.ok(res);
} }
@ -43,10 +38,7 @@ public class TaxelseController {
.build(); .build();
TaxelseDto.Response response = TaxelseDto.Response.builder() TaxelseDto.Response response = TaxelseDto.Response.builder()
.state("0000")
.code("성공")
.result("정상 처리되었습니다.")
.body(resultBody)
.build(); .build();
@ -55,7 +47,7 @@ public class TaxelseController {
// 수납정보 // 수납정보
@PostMapping("api/test/sunap") @PostMapping("/api/test/sunap")
public ResponseEntity<TaxelseDto.Response> taxSunapInfoReturn() { public ResponseEntity<TaxelseDto.Response> taxSunapInfoReturn() {
TaxelseDto.Response.ResultSunapBody resultBody = TaxelseDto.Response.ResultSunapBody.builder() TaxelseDto.Response.ResultSunapBody resultBody = TaxelseDto.Response.ResultSunapBody.builder()
@ -63,10 +55,7 @@ public class TaxelseController {
.build(); .build();
TaxelseDto.Response response = TaxelseDto.Response.builder() TaxelseDto.Response response = TaxelseDto.Response.builder()
.state("0000")
.code("성공")
.result("정상 처리되었습니다.")
.body(resultBody)
.build(); .build();

@ -11,9 +11,9 @@ public class TaxelseDto {
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class RecvReq { public static class RecvReq<T> {
private Header header; private Header header;
private Body body; private T body;
} }
@Getter @Getter
@ -38,17 +38,113 @@ public class TaxelseDto {
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class Body { public static class PreLavyBody {
private String dmndSeCd; private String linkTrgtCd; // 연계대상코드 (15)
private String sgbCd; // 자치단체코드 (7)
private String linkMngKey; // 연계관리키 (50)
private String dptCd; // 부서코드 (7)
private String rcptYr; // 접수연도 (4)
private String spacBizCd; // 특별회계사업코드 (4)
private String actSeCd; // 회계구분코드 (2)
private String rprsTxmCd; // 대표세입과목코드 (6)
private String operItemCd; // 운영항목코드 (3)
private String finScrgSeCd; // 과태료과금구분코드 (2)
private String pyrSeCd; // 납부자구분코드 (2)
private String pyrNo; // 납부자번호 (13)
private String pyrNm; // 납부자명 (200)
private String rprsPyrNo; // 대표납부자번호 (13)
private String rprsPyrNm; // 대표납부자명 (200)
private String pyrTelno; // 납부자전화번호 (30)
private String pyrMblTelno; // 납부자휴대전화번호 (30)
private String pyrEmlAddr; // 납부자이메일주소 (320)
private String pyrSttCd; // 납부자상태코드 (2)
private String pyrLotnoRoadAddrSeCd; // 납부자도로주소구분코드 (2)
private String pyrZip; // 납부자우편번호 (6)
private String pyrRoadNmCd; // 납부자도로명코드 (12)
private String pyrAddrUndgYn; // 납부자주소지하여부 (1)
private String pyrBmno; // 납부자건물본번 (5)
private String pyrBsno; // 납부자건물부번 (5)
private String pyrDongCd; // 납부자행정동코드 (10)
private String pyrMtnSeCd; // 납부자산구분코드 (2)
private String pyrBldgMngNo; // 납부자건물관리번호 (25)
private String pyrBldgNm; // 납부자건물명 (100)
private String pyrMno; // 납부자번 (4)
private String pyrSno; // 납부자후 (4)
private String pyrSpclDg; // 납부자특수동 (30)
private String pyrSpclHo; // 납부자특수호 (15)
private String pyrTong; // 납부자동 (3)
private String pyrBan; // 납부자반 (3)
private String pyrSpclAddr; // 납부자특수주소 (450)
private String pyrRoadNmAddr; // 납부자도로명주소 (300)
private String pyrRoadNmDaddr; // 납부자도로명상세주소 (300)
private String pyrRoadNmAlAddr; // 납부자도로명전체주소 (500)
private String glNm; // 물건지명 (750)
private String glLotnoRoadAddrSeCd; // 물건지도로주소구분코드 (2)
private String glZip; // 물건지우편번호 (6)
private String glRoadNmCd; // 물건지도로명코드 (12)
private String glAddrUndgYn; // 물건지주소지하여부 (1)
private String glBmno; // 물건지건물본번 (5)
private String glBsno; // 물건지건물부번 (5)
private String glStdgCd; // 물건지행정동코드 (10)
private String glDongCd; // 물건지법정동코드 (10)
private String glMtnSeCd; // 물건지산구분코드 (2)
private String glMno; // 물건지본번 (4)
private String glSno; // 물건지부번 (4)
private String glSpclDg; // 물건지특수동 (30)
private String glSpclHo; // 물건지특수호 (15)
private String glSpclAddr; // 물건지특수주소 (450)
private String glRoadNmAddr; // 물건지도로운명주소 (300)
private String glRoadNmDaddr; // 물건지도로운명상세주소 (300)
private String glRoadNmAlAddr; // 물건지도로운명전체주소 (750)
private String glLotnoAddr; // 물건지지번기본주소 (200)
private String glLotnoDaddr; // 물건지지번상세주소 (300)
private String glLotnoAlAddr; // 물건지지번전체주소 (750)
private String ivyTrgtSeCd; // 부과대상구분코드 (2)
private String regYmd; // 등록일자 (8)
private String finScrgAmt; // 과태료과징금액 (15)
private String fcltSeCd; // 시설구분코드 (5)
private String regSeCd; // 등록구분코드 (2)
private String rdtnRsnSeCd; // 감경사유구분코드 (4)
private String vhrno; // 자동차등록번호 (30)
private String mclncLabBssNm; // 조례법근거명 (450)
private String mngItemCn1; // 관리항목1 (200)
private String mngItemCn2; // 관리항목2 (200)
private String mngItemCn3; // 관리항목3 (200)
private String mngItemCn4; // 관리항목4 (200)
private String mngItemCn5; // 관리항목5 (200)
private String mngItemCn6; // 관리항목6 (200)
private String rmCn; // 비고내용 (4000)
private String rsvItem1; // 예비항목1 (200)
private String rsvItem2; // 예비항목2 (200)
private String rsvItem3; // 예비항목3 (200)
private String rsvItem4; // 예비항목4 (200)
private String rsvItem5; // 예비항목5 (200)
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class MatchBody {
private String sgbCd; private String sgbCd;
private String dptCd; private String linkTrgtCd;
private String spacBizCd; private String linkMngKey;
private String fyr; private String finScrgAcbKey;
private String actSeCd;
private String rprsTxmCd;
private String lvyNo;
private String itmSn;
} }
} }
@ -60,21 +156,53 @@ public class TaxelseDto {
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class Response<T> { public static class Response<T> {
private String state;
private String code;
private String result;
private T body;
private Body body;
private T resVo1;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class Body {
private String linkRstCd;
private String linkRstMsg;
}
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
public static class ResultMatchBody { public static class LavyBody {
private String aaa; private String sgbCd;
private String linkTrgtCd;
private String linkMngKey;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class MatchBody {
private String sgbCd;
} }

@ -1,12 +1,73 @@
package org.api.test.biz.taxelse.service; package org.api.test.biz.taxelse.service;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.api.test.biz.taxelse.dto.TaxelseDto;
import org.api.test.domain.Lavy;
import org.api.test.domain.LavyRepository;
import org.api.test.domain.mapper.EntityMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TaxelseService { public class TaxelseService {
private final LavyRepository lavyRepository;
private final EntityMapper entityMapper;
// 사전부과
public TaxelseDto.Response preNoticeInsert(TaxelseDto.Request.PreLavyBody req) {
try {
Lavy lavy = entityMapper.toEntity(req);
lavyRepository.save(lavy);
return TaxelseDto.Response.builder()
.resVo1(
TaxelseDto.Response.LavyBody.builder()
.sgbCd(req.getSgbCd())
.linkTrgtCd(req.getLinkTrgtCd())
.linkMngKey(req.getLinkMngKey())
.build()
)
.body(
TaxelseDto.Response.Body.builder()
.linkRstCd("0000")
.linkRstMsg("정상 처리되었습니다.")
.build()
)
.build();
} catch (Exception e) {
return TaxelseDto.Response.builder()
.resVo1(
TaxelseDto.Response.LavyBody.builder()
.sgbCd(req.getSgbCd())
.linkTrgtCd(req.getLinkTrgtCd())
.linkMngKey(req.getLinkMngKey())
.build()
)
.body(
TaxelseDto.Response.Body.builder()
.linkRstCd("9999")
.linkRstMsg("부과 실패")
.build()
)
.build();
}
}
// 매치정보 조회
public void matchInfoReturn() {
}
// 수납 인서트 // 수납 인서트
public void insertSunap() { public void insertSunap() {

@ -0,0 +1,342 @@
package org.api.test.domain;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Comment;
@Entity
@Table(name = "LAVY")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Comment("세외수입 부과 테이블")
public class Lavy {
@Id
@Column(name = "LINK_MNG_KEY", length = 50, nullable = false)
@Comment("연계관리키")
private String linkMngKey;
@Column(name = "SGB_CD", length = 7)
@Comment("자치단체코드")
private String sgbCd;
@Column(name = "LINK_TRGT_CD", length = 15)
@Comment("연계대상코드")
private String linkTrgtCd;
@Column(name = "DPT_CD", length = 7)
@Comment("부서코드")
private String dptCd;
@Column(name = "RCPT_YR", length = 4)
@Comment("접수연도")
private String rcptYr;
@Column(name = "SPAC_BIZ_CD", length = 4)
@Comment("특별회계사업코드")
private String spacBizCd;
@Column(name = "ACT_SE_CD", length = 2)
@Comment("회계구분코드")
private String actSeCd;
@Column(name = "RPRS_TXM_CD", length = 6)
@Comment("대표세입과목코드")
private String rprsTxmCd;
@Column(name = "OPER_ITEM_CD", length = 3)
@Comment("운영항목코드")
private String operItemCd;
@Column(name = "FIN_SCRG_SE_CD", length = 2)
@Comment("과태료과금구분코드")
private String finScrgSeCd;
@Column(name = "PYR_SE_CD", length = 2)
@Comment("납부자구분코드")
private String pyrSeCd;
@Column(name = "PYR_NO", length = 13)
@Comment("납부자번호")
private String pyrNo;
@Column(name = "PYR_NM", length = 200)
@Comment("납부자명")
private String pyrNm;
@Column(name = "RPRS_PYR_NO", length = 13)
@Comment("대표납부자번호")
private String rprsPyrNo;
@Column(name = "RPRS_PYR_NM", length = 200)
@Comment("대표납부자명")
private String rprsPyrNm;
@Column(name = "PYR_TELNO", length = 30)
@Comment("납부자전화번호")
private String pyrTelno;
@Column(name = "PYR_MBL_TELNO", length = 30)
@Comment("납부자휴대전화번호")
private String pyrMblTelno;
@Column(name = "PYR_EML_ADDR", length = 320)
@Comment("납부자이메일주소")
private String pyrEmlAddr;
@Column(name = "PYR_STT_CD", length = 2)
@Comment("납부자상태코드")
private String pyrSttCd;
@Column(name = "PYR_LOTNO_ROAD_ADDR_SE_CD", length = 2)
@Comment("납부자도로주소구분코드")
private String pyrLotnoRoadAddrSeCd;
@Column(name = "PYR_ZIP", length = 6)
@Comment("납부자우편번호")
private String pyrZip;
@Column(name = "PYR_ROAD_NM_CD", length = 12)
@Comment("납부자도로명코드")
private String pyrRoadNmCd;
@Column(name = "PYR_ADDR_UNDG_YN", length = 1)
@Comment("납부자주소지하여부")
private String pyrAddrUndgYn;
@Column(name = "PYR_BMNO", length = 5)
@Comment("납부자건물본번")
private String pyrBmno;
@Column(name = "PYR_BSNO", length = 5)
@Comment("납부자건물부번")
private String pyrBsno;
@Column(name = "PYR_DONG_CD", length = 10)
@Comment("납부자행정동코드")
private String pyrDongCd;
@Column(name = "PYR_MTN_SE_CD", length = 2)
@Comment("납부자산구분코드")
private String pyrMtnSeCd;
@Column(name = "PYR_BLDG_MNG_NO", length = 25)
@Comment("납부자건물관리번호")
private String pyrBldgMngNo;
@Column(name = "PYR_BLDG_NM", length = 100)
@Comment("납부자건물명")
private String pyrBldgNm;
@Column(name = "PYR_MNO", length = 4)
@Comment("납부자번")
private String pyrMno;
@Column(name = "PYR_SNO", length = 4)
@Comment("납부자후")
private String pyrSno;
@Column(name = "PYR_SPCL_DG", length = 30)
@Comment("납부자특수동")
private String pyrSpclDg;
@Column(name = "PYR_SPCL_HO", length = 15)
@Comment("납부자특수호")
private String pyrSpclHo;
@Column(name = "PYR_TONG", length = 3)
@Comment("납부자동")
private String pyrTong;
@Column(name = "PYR_BAN", length = 3)
@Comment("납부자반")
private String pyrBan;
@Column(name = "PYR_SPCL_ADDR", length = 450)
@Comment("납부자특수주소")
private String pyrSpclAddr;
@Column(name = "PYR_ROAD_NM_ADDR", length = 300)
@Comment("납부자도로명주소")
private String pyrRoadNmAddr;
@Column(name = "PYR_ROAD_NM_DADDR", length = 300)
@Comment("납부자도로명상세주소")
private String pyrRoadNmDaddr;
@Column(name = "PYR_ROAD_NM_AL_ADDR", length = 500)
@Comment("납부자도로명전체주소")
private String pyrRoadNmAlAddr;
@Column(name = "GL_NM", length = 750)
@Comment("물건지명")
private String glNm;
@Column(name = "GL_LOTNO_ROAD_ADDR_SE_CD", length = 2)
@Comment("물건지도로주소구분코드")
private String glLotnoRoadAddrSeCd;
@Column(name = "GL_ZIP", length = 6)
@Comment("물건지우편번호")
private String glZip;
@Column(name = "GL_ROAD_NM_CD", length = 12)
@Comment("물건지도로명코드")
private String glRoadNmCd;
@Column(name = "GL_ADDR_UNDG_YN", length = 1)
@Comment("물건지주소지하여부")
private String glAddrUndgYn;
@Column(name = "GL_BMNO", length = 5)
@Comment("물건지건물본번")
private String glBmno;
@Column(name = "GL_BSNO", length = 5)
@Comment("물건지건물부번")
private String glBsno;
@Column(name = "GL_STDG_CD", length = 10)
@Comment("물건지행정동코드")
private String glStdgCd;
@Column(name = "GL_DONG_CD", length = 10)
@Comment("물건지법정동코드")
private String glDongCd;
@Column(name = "GL_MTN_SE_CD", length = 2)
@Comment("물건지산구분코드")
private String glMtnSeCd;
@Column(name = "GL_MNO", length = 4)
@Comment("물건지본번")
private String glMno;
@Column(name = "GL_SNO", length = 4)
@Comment("물건지부번")
private String glSno;
@Column(name = "GL_SPCL_DG", length = 30)
@Comment("물건지특수동")
private String glSpclDg;
@Column(name = "GL_SPCL_HO", length = 15)
@Comment("물건지특수호")
private String glSpclHo;
@Column(name = "GL_SPCL_ADDR", length = 450)
@Comment("물건지특수주소")
private String glSpclAddr;
@Column(name = "GL_ROAD_NM_ADDR", length = 300)
@Comment("물건지도로운명주소")
private String glRoadNmAddr;
@Column(name = "GL_ROAD_NM_DADDR", length = 300)
@Comment("물건지도로운명상세주소")
private String glRoadNmDaddr;
@Column(name = "GL_ROAD_NM_AL_ADDR", length = 750)
@Comment("물건지도로운명전체주소")
private String glRoadNmAlAddr;
@Column(name = "GL_LOTNO_ADDR", length = 200)
@Comment("물건지지번기본주소")
private String glLotnoAddr;
@Column(name = "GL_LOTNO_DADDR", length = 300)
@Comment("물건지지번상세주소")
private String glLotnoDaddr;
@Column(name = "GL_LOTNO_AL_ADDR", length = 750)
@Comment("물건지지번전체주소")
private String glLotnoAlAddr;
@Column(name = "IVY_TRGT_SE_CD", length = 2)
@Comment("부과대상구분코드")
private String ivyTrgtSeCd;
@Column(name = "REG_YMD", length = 8)
@Comment("등록일자")
private String regYmd;
@Column(name = "FIN_SCRG_AMT", length = 15)
@Comment("과태료과징금액")
private String finScrgAmt;
@Column(name = "FCLT_SE_CD", length = 5)
@Comment("시설구분코드")
private String fcltSeCd;
@Column(name = "REG_SE_CD", length = 2)
@Comment("등록구분코드")
private String regSeCd;
@Column(name = "RDTN_RSN_SE_CD", length = 4)
@Comment("감경사유구분코드")
private String rdtnRsnSeCd;
@Column(name = "VHRNO", length = 30)
@Comment("자동차등록번호")
private String vhrno;
@Column(name = "MCLNC_LAB_BSS_NM", length = 450)
@Comment("조례법근거명")
private String mclncLabBssNm;
@Column(name = "MNG_ITEM_CN1", length = 200)
@Comment("관리항목1")
private String mngItemCn1;
@Column(name = "MNG_ITEM_CN2", length = 200)
@Comment("관리항목2")
private String mngItemCn2;
@Column(name = "MNG_ITEM_CN3", length = 200)
@Comment("관리항목3")
private String mngItemCn3;
@Column(name = "MNG_ITEM_CN4", length = 200)
@Comment("관리항목4")
private String mngItemCn4;
@Column(name = "MNG_ITEM_CN5", length = 200)
@Comment("관리항목5")
private String mngItemCn5;
@Column(name = "MNG_ITEM_CN6", length = 200)
@Comment("관리항목6")
private String mngItemCn6;
@Column(name = "RM_CN", length = 4000)
@Comment("비고내용")
private String rmCn;
@Column(name = "RSV_ITEM1", length = 200)
@Comment("예비항목1")
private String rsvItem1;
@Column(name = "RSV_ITEM2", length = 200)
@Comment("예비항목2")
private String rsvItem2;
@Column(name = "RSV_ITEM3", length = 200)
@Comment("예비항목3")
private String rsvItem3;
@Column(name = "RSV_ITEM4", length = 200)
@Comment("예비항목4")
private String rsvItem4;
@Column(name = "RSV_ITEM5", length = 200)
@Comment("예비항목5")
private String rsvItem5;
}

@ -0,0 +1,6 @@
package org.api.test.domain;
import org.springframework.data.jpa.repository.JpaRepository;
public interface LavyRepository extends JpaRepository<Lavy, String> {
}

@ -0,0 +1,6 @@
package org.api.test.domain;
import org.springframework.data.jpa.repository.JpaRepository;
public interface SunapRepository extends JpaRepository<Sunap, String> {
}

@ -0,0 +1,17 @@
package org.api.test.domain.mapper;
import org.api.test.biz.taxelse.dto.TaxelseDto;
import org.api.test.domain.Lavy;
import org.mapstruct.Mapper;
@Mapper(
componentModel = "spring"
// unmappedTargetPolicy = ReportingPolicy.ERROR // 누락 시 컴파일 에러
)
public interface EntityMapper {
// ===== LAVY =====
Lavy toEntity(TaxelseDto.Request.PreLavyBody req);
}
Loading…
Cancel
Save