diff --git a/pom.xml b/pom.xml
index 186a67f3..e883a3b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -176,6 +176,13 @@
23.04.01-SNAPSHOT
+
+
+ cokr.xit.interfaces
+ xit-postplus
+ 23.04.01-SNAPSHOT
+
+
org.apache.pdfbox
diff --git a/src/main/java/cokr/xit/fims/mngt/dao/VltnMapper.java b/src/main/java/cokr/xit/fims/mngt/dao/VltnMapper.java
index 3a2927cd..af4aab58 100644
--- a/src/main/java/cokr/xit/fims/mngt/dao/VltnMapper.java
+++ b/src/main/java/cokr/xit/fims/mngt/dao/VltnMapper.java
@@ -22,7 +22,6 @@ import cokr.xit.foundation.data.DataObject;
*/
@Mapper("vltnMapper")
public interface VltnMapper extends AbstractMapper {
-
/**지정한 조건에 따라 위반 정보 목록을 조회하여 반환한다.
* @param req 위반 정보 조회 조건
* @return 위반 정보 목록
diff --git a/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java b/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java
index ced48f8e..946fa849 100644
--- a/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java
+++ b/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java
@@ -217,7 +217,7 @@ public class SnisBean extends AbstractBean {
prenotice.setJukbalYm(crdnYmdhms.substring(0, 6)); // 적발년월
prenotice.setJukbalYmdHs(crdnYmdhms.substring(0, 12)); // 위반일시
- prenotice.setNapId(crdnInfo.string("RTPYR_NO")); // 납세자 주민번호
+ prenotice.setNapId(blankIfEmpty(crdnInfo.string("RTPYR_NO")).replace("-", ""));// 납세자 주민번호
prenotice.setNapNm(crdnInfo.string("RTPYR_NM")); // 납세자 이름
prenotice.setNapMobilNo(crdnInfo.string("RTPYR_MBL_TELNO")); // 납세자 휴대폰 번호
prenotice.setNapTelNo(crdnInfo.string("RTPYR_TELNO")); // 납세자 전화번호
diff --git a/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java b/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java
index 54148a8d..1b8f4857 100644
--- a/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java
+++ b/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java
@@ -4,10 +4,10 @@ import java.util.List;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
-import cokr.xit.foundation.component.AbstractMapper;
-import cokr.xit.foundation.data.DataObject;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.Sndng;
+import cokr.xit.foundation.component.AbstractMapper;
+import cokr.xit.foundation.data.DataObject;
/** 발송 대장 정보 DAO
*
@@ -21,7 +21,6 @@ import cokr.xit.fims.sndb.Sndng;
*/
@Mapper("sndngMapper")
public interface SndngMapper extends AbstractMapper {
-
/**지정한 조건에 따라 발송 대장 목록을 조회하여 반환한다.
* @param req 발송 대장 조회 조건
* @return 발송 대장 목록
@@ -36,16 +35,13 @@ public interface SndngMapper extends AbstractMapper {
default DataObject selectSndngInfo(SndbQuery req) {
// 삭제여부
- if (req.getDelYn() == null) {
+ if (req.getDelYn() == null)
req.setDelYn("N");
- }
// 기본 정렬
- if (req.getOrderBy() == null) {
+ if (req.getOrderBy() == null)
req.setOrderBy("S.SNDNG_ID DESC");
- }
List sndngs = selectSndngs(req);
-
return !sndngs.isEmpty() ? sndngs.get(0) : null;
}
@@ -62,9 +58,11 @@ public interface SndngMapper extends AbstractMapper {
List selectWrngTrgts(SndbQuery req);
default DataObject selectWrngTrgtInfo(String crdnId) {
- List wrngTrgtInfo = selectWrngTrgts(new SndbQuery().setCrdnId(crdnId)
- .setDelYn("N"));
-
+ List wrngTrgtInfo = selectWrngTrgts(
+ new SndbQuery()
+ .setCrdnId(crdnId)
+ .setDelYn("N")
+ );
return !wrngTrgtInfo.isEmpty() ? wrngTrgtInfo.get(0) : null;
}
@@ -87,9 +85,11 @@ public interface SndngMapper extends AbstractMapper {
List selectAdvntceTrgts(SndbQuery req);
default DataObject selectAdvntceTrgtInfo(String crdnId) {
- List advntceTrgtInfo = selectAdvntceTrgts(new SndbQuery().setCrdnId(crdnId)
- .setDelYn("N"));
-
+ List advntceTrgtInfo = selectAdvntceTrgts(
+ new SndbQuery()
+ .setCrdnId(crdnId)
+ .setDelYn("N")
+ );
return !advntceTrgtInfo.isEmpty() ? advntceTrgtInfo.get(0) : null;
}
@@ -124,9 +124,11 @@ public interface SndngMapper extends AbstractMapper {
List selectNhtTrgts(SndbQuery req);
default DataObject selectNhtTrgtInfo(String crdnId) {
- List nhtTrgtInfo = selectNhtTrgts(new SndbQuery().setCrdnId(crdnId)
- .setDelYn("N"));
-
+ List nhtTrgtInfo = selectNhtTrgts(
+ new SndbQuery()
+ .setCrdnId(crdnId)
+ .setDelYn("N")
+ );
return !nhtTrgtInfo.isEmpty() ? nhtTrgtInfo.get(0) : null;
}
@@ -180,5 +182,4 @@ public interface SndngMapper extends AbstractMapper {
* @return 저장된 정보수
*/
int updateEPostSndng(Sndng sndng);
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/PostplusBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/PostplusBean.java
new file mode 100644
index 00000000..b1ae107e
--- /dev/null
+++ b/src/main/java/cokr/xit/fims/sndb/service/bean/PostplusBean.java
@@ -0,0 +1,302 @@
+package cokr.xit.fims.sndb.service.bean;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Component;
+
+import cokr.xit.base.file.FileInfo;
+import cokr.xit.base.file.service.bean.FileBean;
+import cokr.xit.fims.base.FimsUser;
+import cokr.xit.fims.cmmn.CmmnUtil;
+import cokr.xit.fims.crdn.Crdn;
+import cokr.xit.fims.crdn.CrdnQuery;
+import cokr.xit.fims.crdn.dao.CrdnListMapper;
+import cokr.xit.fims.mngt.dao.VltnMapper;
+import cokr.xit.fims.mngt.service.bean.TaskProcessor;
+import cokr.xit.fims.sndb.SndbQuery;
+import cokr.xit.fims.sndb.Sndng;
+import cokr.xit.fims.sndb.SndngDtl;
+import cokr.xit.fims.sndb.dao.SndngDtlMapper;
+import cokr.xit.fims.sndb.dao.SndngMapper;
+import cokr.xit.foundation.component.AbstractBean;
+import cokr.xit.foundation.data.DataObject;
+import cokr.xit.interfaces.postplus.post.PostResponse;
+import cokr.xit.interfaces.postplus.post.PostplusRequest;
+import cokr.xit.interfaces.postplus.post.PstMsr;
+import cokr.xit.interfaces.postplus.post.PstTemplate;
+import cokr.xit.interfaces.postplus.post.service.PostplusService;
+
+@Component("postplusBean")
+public class PostplusBean extends AbstractBean {
+ /** 파일 Bean */
+ @Resource(name="fileBean")
+ private FileBean fileBean;
+ /** 위반 정보 정보 DAO */
+ @Resource(name = "vltnMapper")
+ private VltnMapper vltnMapper;
+ @Resource(name = "crdnListMapper")
+ private CrdnListMapper crdnListMapper;
+ /** 발송 대장 정보 DAO */
+ @Resource(name = "sndngMapper")
+ private SndngMapper sndngMapper;
+ /** 발송 상세 정보 DAO */
+ @Resource(name = "sndngDtlMapper")
+ private SndngDtlMapper sndngDtlMapper;
+ @Resource(name = "postplusService")
+ private PostplusService postplusService;
+
+ public String requestProduction(Sndng sndng) {
+ PstMsr.Master master = getMaster(sndng);
+
+ List sndngDtlList = sndngDtlMapper.selectSndngDtlList(
+ new SndbQuery()
+ .setSndngId(sndng.getSndngId())
+ .setDelYn("N")
+ );
+
+ List crdnIDs = sndngDtlList.stream()
+ .map(row -> row.string("CRDN_ID"))
+ .toList();
+ String[] crdnIds = crdnIDs.toArray(new String[crdnIDs.size()]);
+ // 발송상세의 단속목록 조회
+ Map crdns = crdnListMapper.selectCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream()
+ .collect(Collectors.toMap(row -> row.string("CRDN_ID"), row -> row));
+ // 단속정보별 첨부파일 조회
+ Map> fileInfos = fileBean.getFilesOf(Crdn.INF_TYPE, crdnIds).stream()
+ .collect(Collectors.groupingBy(FileInfo::getInfoKey));
+
+ List details = getDetails(sndngDtlList, crdns, fileInfos);
+
+ // 제작신청 전송
+ PstMsr pstMsr = new PstMsr()
+ .setMaster(master)
+ .setDetails(details)
+ .setAttachmentPaths(
+ fileInfos.values().stream()
+ .flatMap(infos -> infos.stream().map(FileInfo::getPath))
+ .toList()
+ );
+ PostResponse presp = postplusService.requestProduction(pstMsr);
+ if (!presp.success())
+ return "[F] " + presp.getRemark();
+
+ // 발송 업데이트
+ Sndng updtSndng = new Sndng();
+ updtSndng.setConKey(master.getIntfID()); // 외부연계식별키
+ updtSndng.setDivKb(master.getDelivery()); // 취급 구분
+ updtSndng.setSndngSttsCd("01"); // 발송 상태 코드(FIM049) - 01 발송 대기
+ updtSndng.setSndngId(sndng.getSndngId()); // 발송 ID
+ sndngMapper.updateEPostSndng(updtSndng); // 전자우편 발송 내역 수정
+
+ // 발송상세 업데이트
+ for (PstMsr.Detail detail: details) {
+ SndngDtl sndngDtl = new SndngDtl();
+ sndngDtl.setConKey(detail.getIntfID()); // 외부연계식별키
+ sndngDtl.setRgNo(detail.getRegNo()); // 등기 번호
+ sndngDtl.setSndngDtlSttsCd("03"); // 발송 상세 상태 코드(FIM050) - 03 발송
+ sndngDtl.setSndngDtlId(detail.getSndngDtlId());
+
+ sndngDtlMapper.updateSndngDtlEPost(sndngDtl);
+ }
+
+ return "[S] 우편발송 요청이 등록됐습니다";
+ }
+
+ private PstMsr.Master getMaster(Sndng sndng) {
+ DataObject sndngInfo = sndngMapper.selectSndngInfo(
+ new SndbQuery()
+ .setSndngId(sndng.getSndngId())
+ .setDelYn("N")
+ );
+
+ List templates = postplusService.getTemplates(
+ new PostplusRequest()
+ .setSggCd(sndng.getSggCd())
+ .setTaskSeCd(sndng.getTaskSeCd())
+ .setVltnId(sndngInfo.string("VLTN_ID"))
+ .setNoticeGb(sndngInfo.string("SNDNG_SE_CD"))
+ );
+ if (templates.isEmpty())
+ throw new RuntimeException("우편발송 기본설정을 찾지 못했습니다.");
+
+ FimsUser user = (FimsUser)currentUser().getUser();
+
+ return templates.get(0).setInfo(new PstMsr.Master())
+ .setSndngId(sndngInfo.string("SNDNG_ID"))
+ .setRecipientCount(sndngInfo.string("TNOCS"))
+ .setDelivery(sndng.getPostSndngSeCd())
+ .setSenderName(user.getName())
+ .setSenderSigungu(sndng.getSggCd())
+ .setSenderZipcode(user.getZipCode())
+ .setSenderAddress(user.getAddress())
+ .setSenderDetailAddress(user.getAddressDetail())
+ .setSenderDeptCd(user.getDeptCode())
+ .setSenderPhoneNo(user.getPhoneNo())
+ .setSenderEmail(user.getEmailAddress());
+ }
+
+ private List getDetails(List sndngDtlList, Map crdns, Map> fileInfos) {
+ TaskProcessor taskProcessor = TaskProcessor.get();
+ return sndngDtlList.stream()
+ .map(dtlInfo -> {
+ String crdnId = dtlInfo.string("CRDN_ID");
+ DataObject crdn = crdns.get(crdnId);
+ List files = fileInfos.get(crdnId);
+
+ PstMsr.Detail detail = new PstMsr.Detail()
+ .setSndngDtlId(dtlInfo.string("SNDNG_DTL_ID")) // 발송상세ID
+ .setName(dtlInfo.string("RCPN_NM")) // 이름
+ .setZipcode(dtlInfo.string("RCPN_ZIP")) // 우편번호
+ .setAddress(dtlInfo.string("RCPN_ADDR")) // 주소
+ .setDetailAddress(dtlInfo.string("RCPN_DTL_ADDR")) // 상세주소
+ .setPhoneNo(dtlInfo.string("RTPYR_TELNO")) // 전화번호
+ .setMobileNo(dtlInfo.string("RTPYR_MBL_TELNO")) // 휴대전화번호
+// .setEmail(dtlInfo.string("")) // 이메일주소
+
+ .setRegGb(null) // 등기구분
+ .setRegNo(null) // 등기번호
+ .setRegNoDatetime(null) // 등기번호 등록일시
+
+ .setSerNo(null) // 일련번호
+ .setDeliveryCd(null) // 발송코드
+
+ .setBar1D(null) // 바코드 1D
+ .setBar2D(null) // 바코드 2D
+ .setNoticeNo(crdn.string("GOJI_NO")); // 고지서번호
+
+ String sndngSeCd = dtlInfo.string("SNDNG_SE_CD");
+ DataObject recevDoc = taskProcessor.getRecevDocCd(
+ new DataObject()
+ .set("taskSeCd", dtlInfo.get("TASK_SE_CD"))
+ .set("taskSeNm", dtlInfo.get("TASK_SE_NM"))
+ .set("infoSndngSeNm", dtlInfo.get("SNDNG_SE_NM"))
+ .set("vltn", dtlInfo.get("VLTN_ARTCL"))
+ .set("taxItem", "TODO: 세목")
+ );
+
+ detail
+ .setDocCd1(recevDoc.string("docCd1")) // 문서종류1
+ .setDocCd2(recevDoc.string("docCd2")) // 문서종류2
+ .setDocCd3(recevDoc.string("docCd3")) // 문서종류3
+ .setDocCd4(recevDoc.string("docCd4")) // 문서종류4
+ .setDocCd5(recevDoc.string("docCd5")) // 문서종류5
+
+ .setSubject1(null) // 과목명1
+ .setSubject2(null) // 과목명2
+ .setSubject3(null) // 과목명3
+
+ .setViolationDatetime(dtlInfo.string("CRDN_DT")) // 위반일시
+ .setViolationDong(dtlInfo.string("CRDN_STDG_NM")) // 위반동
+ .setViolationLocation(dtlInfo.string("CRDN_PLC")) // 위반장소
+ .setLegalBasis(crdn.string("VLTN_ARTCL")) // 법조항
+ .setPaymentNo1(null) // 납부번호1
+ .setPaymentNo2(null) // 납부번호2
+ .setEpaymentNo(dtlInfo.string("EPAYNO")) // 전자납부번호
+ .setVaccountNo(dtlInfo.string("BANK_NM") + " " + dtlInfo.string("VRACTNO")); // 가상계좌번호
+
+ long pcptax = 0, // 본세
+ adamt = 0, // 가산금
+ lastAmt = 0, // 최종 금액
+ dudtAftrPcptax = 0, // 납기후 본세
+ dudtAftrAdamt = 0, // 납기후 가산금
+ dudtAftrAmt = 0; // 납기후 합계 금액
+
+ // 계고장에는 최초 과태료 금액을 출력한다.
+ boolean warning = "01,11,12".contains(sndngSeCd); // 계고장 여부
+ if (warning) {
+ pcptax = toLong(dtlInfo.get("FFNLG_AMT")); // 본세 = 과태료 단속 금액
+ lastAmt = pcptax; // 합계 금액 = 과태료 단속 금액
+ adamt = dudtAftrPcptax = dudtAftrAdamt = dudtAftrAmt = 0;
+ } else {
+ pcptax = toLong(dtlInfo.get("PCPTAX")); // 본세
+ adamt = toLong(dtlInfo.get("ADAMT")); // 가산금
+ lastAmt = toLong(dtlInfo.get("LAST_AMT")); // 최종 금액
+
+ if (dtlInfo.string("SGG_CD").equals("50110")) {
+ dudtAftrPcptax = dudtAftrAdamt = dudtAftrAmt = 0;
+ } else {
+ dudtAftrAmt = toLong(dtlInfo.get("DUDT_AFTR_AMT")); // 납기후 금액
+ if (dudtAftrAmt == 0) {
+ dudtAftrPcptax = dudtAftrAdamt = dudtAftrAmt = 0;
+ } else {
+ dudtAftrPcptax = toLong(dtlInfo.get("PCPTAX")); // 납기후 본세
+ if (dudtAftrAmt > dudtAftrPcptax) { // 납기후 금액이 본세보다 크다면..
+ dudtAftrAdamt = toLong(dtlInfo.get("DUDT_AFTR_AMT")) - toLong(dtlInfo.get("PCPTAX"));
+ } else if (dudtAftrAmt < dudtAftrPcptax) { // 납기후 금액이 본세보다 작다면 오류..
+ throw new RuntimeException("우편통합 발송 작업중 납기후 금액이 본세보다 작은 자료가 발견되었습니다.");
+ } else {
+ dudtAftrAdamt = 0;
+ }
+ }
+ }
+ }
+
+ detail.setFineAmt(toLong(dtlInfo.get("FFLNG_AMT"))) // 과태료
+ .setPaymentAmt(lastAmt) // 납부금액
+ .setDueDate(dtlInfo.string("DUDT_YMD_MASK")) // 납부기한
+ .setInDueDate(dtlInfo.string("DUDT_YMD_MASK")) // 납기내기한
+ .setInDueAmt(lastAmt) // 납기내금액
+ .setInDueAddedAmt(adamt) // 납기내가산금
+ .setInDueChenapAmt(0) // 납기내체납처분비
+ .setOverdueDate(dtlInfo.string("DUDT_AFTR_YMD_MASK")) // 납기후기한
+ .setOverdueAmt(dudtAftrAmt) // 납기후금액
+ .setOverdueAddedAmt(dudtAftrAdamt) // 납기후가산금
+ .setOverdueChenapAmt(0); // 납기후체납처분금
+
+ if (!warning) { // 계고장이 아닐 경우
+ // TAX_NO = 부서코드(7) + 특별회계사업코드(4) + 회계연도(4) + 회계구분(2) + 세목코드(6) + 고지번호(6) + 분납순번(2)
+ String ocr0 = dtlInfo.string("TAX_NO") + CmmnUtil.getOcrVrfcCode("12357", dtlInfo.string("TAX_NO"), 31);
+ String ocr1 = CmmnUtil.getOcrband2(ocr0, dtlInfo.string("LEVY_SE_CD"), (int)lastAmt, dtlInfo.string("DUDT_YMD"));
+ detail.setOcr0(ocr0)
+ .setOcr1(ocr1)
+ .setOcr2(CmmnUtil.getOcrband3(ocr1, (int)lastAmt, dtlInfo.string("DUDT_YMD"), (int)dudtAftrAmt));
+ }
+
+ detail.setVhrno(dtlInfo.string("VHRNO")) // 차량번호
+ .setBirthday(dtlInfo.string("RCPN_BRDT")) // 생년월일
+ .setPrintDate(null) // 출력일자
+ .setPrintYear(null) // 출력년도
+ .setPrintMonth(null) // 출력월
+ .setPrintDay(null) // 출력일
+ .setEvidenceNo(null); // 증거번호
+
+ int fileCount = files.size();
+ detail.setAttachmentCount(fileCount); // 첨부파일수
+ for (int i = 0; i < Math.min(fileCount, 4); ++i) {
+ FileInfo fileInfo = files.get(i);
+ String filename = FileInfo.name(fileInfo.getPath());
+ switch (i) {
+ case 0: detail.setAttachment1(filename); break; // 첨부파일1
+ case 1: detail.setAttachment2(filename); break; // 첨부파일2
+ case 2: detail.setAttachment3(filename); break; // 첨부파일3
+ case 3: detail.setAttachment4(filename); break; // 첨부파일4
+ default: break;
+ }
+ }
+
+ return detail
+ .setVariableTitle(null) // 가변제목
+ .setVariableContent1(null) // 가변1
+ .setVariableContent2(null) // 가변2
+ .setVariableContent3(null) // 가변3
+ .setVariableContent4(null) // 가변4
+
+ .setVaccountNo2(dtlInfo.string("BANK_NM2") + " " + dtlInfo.string("VRACTNO2")) // 가상계좌번호2
+ .setVaccountNo3(dtlInfo.string("BANK_NM3") + " " + dtlInfo.string("VRACTNO3")) // 가상계좌번호3
+ .setVaccountNo4(dtlInfo.string("BANK_NM4") + " " + dtlInfo.string("VRACTNO4")) // 가상계좌번호4
+ .setVaccountNo5(dtlInfo.string("BANK_NM5") + " " + dtlInfo.string("VRACTNO5")) // 가상계좌번호5
+ .setVaccountNo6(dtlInfo.string("BANK_NM6") + " " + dtlInfo.string("VRACTNO6")) // 가상계좌번호6
+ .setVaccountNo7(dtlInfo.string("BANK_NM7") + " " + dtlInfo.string("VRACTNO7")) // 가상계좌번호7
+ .setVaccountNo8(dtlInfo.string("BANK_NM8") + " " + dtlInfo.string("VRACTNO8")); // 가상계좌번호8
+ })
+ .toList();
+ }
+
+ public void updateProductionStatus(String intfID) {
+ postplusService.updateProductionStatus(null, List.of(intfID));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java
index 83ee0cfb..1a250b6d 100644
--- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java
+++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java
@@ -215,8 +215,8 @@ public class SndngBean extends AbstractBean {
throw new RuntimeException("계고장 발송 등록 작업에 실패하였습니다.");
// 발송 상세(TB_SNDNG_DTL) 대장을 등록한다.
- for (int i = 0; i < trgtList.size(); i++) {
- String rtnMsg = createWrngSndngDtl(sndng, trgtList.get(i).string("CRDN_ID"));
+ for (DataObject trgt: trgtList) {
+ String rtnMsg = createWrngSndngDtl(sndng, trgt.string("CRDN_ID"));
if (!rtnMsg.contains("[S]"))
throw new RuntimeException(rtnMsg.replace("[F]", ""));
}
@@ -780,10 +780,10 @@ public class SndngBean extends AbstractBean {
int seqNo = 0;
String postSndngSeCd = sndng.getPostSndngSeCd();
if ("0".equals(postSndngSeCd))
- seqNo = epostRcptDtlBean.getEpostSenderDetailSeq(sndngInfo.string("TODAY"));
- // 포맷: 등록일(REG_YMD)-발송기관코드(RECEV_SENDER_ORG_CODE)-업무코드(WORK_ID)-우편물구분(POST_SE)일련번호(RECEV_SEQ_NO)
- // 예시: 20170719-40504370000-003-1001
- String conKey = sndngInfo.string("TODAY") + "-" + sndngInfo.string("DEPT_CD") + "0000" + "-" + epostSenderRegSeq;
+ seqNo = epostRcptDtlBean.getEpostSenderDetailSeq(sndngInfo.string("TODAY"));
+ // 포맷: 등록일(REG_YMD)-발송기관코드(RECEV_SENDER_ORG_CODE)-업무코드(WORK_ID)-우편물구분(POST_SE)일련번호(RECEV_SEQ_NO)
+ // 예시: 20170719-40504370000-003-1001
+ String conKey = sndngInfo.string("TODAY") + "-" + sndngInfo.string("DEPT_CD") + "0000" + "-" + epostSenderRegSeq;
// 5. 전자우편 접수 내역을 등록한다.
EpostRcptReg epostRcptReg = new EpostRcptReg();
@@ -794,7 +794,7 @@ public class SndngBean extends AbstractBean {
// 취급구분(DIV_KB) 000=일반 001=등기 201=선택등기
if ("1".equals(postSndngSeCd)) {
- if (sggCd.equals("11500")) {
+ if ("11500".equals(sggCd)) {
epostRcptReg.setDivKb("00" + postSndngSeCd);
epostRcptReg.setSealCd("1" + "2" + sealCd3);
} else {
@@ -841,7 +841,7 @@ public class SndngBean extends AbstractBean {
epostRcptReg.setApvlNb(deptSggInfo.string("EGP_APVL_NB")); // 후납계약 승인번호(APVL_NB)
epostRcptReg.setSendDate(sndngInfo.string("NOW").substring(0, 8)); // 신청 일자(SEND_DATE)
epostRcptReg.setSendTime(sndngInfo.string("NOW").substring(8)); // 전송 시간(SEND_TIME)
- String relorsectCd = taskProcessor.getRelorsectCd( // 연계기관결제부서코드(RELORSECT_CD)
+ String relorsectCd = taskProcessor.getRelorsectCd( // 연계기관결제부서코드(RELORSECT_CD)
new DataObject()
.set("taskSeCd", taskSeCd)
.set("sndngDept", sndngInfo.get("DEPT_CD"))
@@ -928,7 +928,7 @@ public class SndngBean extends AbstractBean {
// DataObject sndngDtlInfo = sndngDtlMapper.selectSndngDtlInfo(new SndbQuery().setSndngDtlId(sndngTrgt.string("SNDNG_DTL_ID")));
// 가상계좌취득 자료가 아니면 다음 자료로..
- if (!sndngDtlInfo.string("SNDNG_DTL_STTS_CD").equals("02")) {
+ if (!"02".equals(sndngDtlInfo.string("SNDNG_DTL_STTS_CD"))) {
// continue;
throw new RuntimeException("우편통합 발송 작업중 발송상세 상태코드가 가상계좌취득이 아닌 자료를 발견되었습니다.");
}
@@ -969,7 +969,7 @@ public class SndngBean extends AbstractBean {
dudtAftrAmt = 0; // 납기후 합계 금액
} else {
dudtAftrAmt = toInt(sndngDtlInfo.get("DUDT_AFTR_AMT")); // 납기후 금액
- if (dudtAftrAmt == 0) { // 납기후 금액이 0 이라면..
+ if (dudtAftrAmt == 0) {
dudtAftrPcptax = 0; // 납기후 본세
dudtAftrAdamt = 0; // 납기후 가산금
dudtAftrAmt = 0; // 납기후 금액
@@ -1046,8 +1046,8 @@ public class SndngBean extends AbstractBean {
epostRcptDtl.setRecevOcr1(ocr1);
epostRcptDtl.setRecevOcr2(ocr2);
epostRcptDtl.setRecevOnlinePayNumber(sndngDtlInfo.string("EPAYNO")); // 전자 납부번호
- // 가상계좌
+ // 가상계좌
epostRcptDtl.setVractno(seoul ? sndngDtlInfo.string("VR_ACTNO") : sndngDtlInfo.string("BANK_NM") + " " + sndngDtlInfo.string("VR_ACTNO"));
epostRcptDtl.setVractno2(seoul ? sndngDtlInfo.string("VR_ACTNO2") : sndngDtlInfo.string("BANK_NM2") + " " + sndngDtlInfo.string("VR_ACTNO2"));
epostRcptDtl.setVractno3(seoul ? sndngDtlInfo.string("VR_ACTNO3") : sndngDtlInfo.string("BANK_NM3") + " " + sndngDtlInfo.string("VR_ACTNO3"));
diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java
index 35427ae8..4435b186 100644
--- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java
+++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java
@@ -31,6 +31,8 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
/** 발송 상세 정보 Bean */
@Resource(name = "sndngDtlBean")
private SndngDtlBean sndngDtlBean;
+ @Resource(name = "postplusBean")
+ private PostplusBean postplusBean;
@Override
public List getWrngTrgtList(SndbQuery req) {
@@ -117,8 +119,7 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
String delivery = TaskProcessor.get().getNoticeDelivery(sndng.getTaskSeCd());
return switch (delivery) {
case "eGreen" -> sndngBean.createEPost(sndng);
- case "postplus" -> sndngBean.createEPost(sndng);
-// case "postplus" -> postplusBean.requestProduction(sndng);
+ case "postplus" -> postplusBean.requestProduction(sndng);
default -> "[F] Unknown notice delivery: " + delivery;
};
}
diff --git a/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml b/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml
index fd4ad1bb..5fda96e8 100644
--- a/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml
@@ -7,13 +7,13 @@
SELECT C.CRDN_ID
, C.SGG_CD
- , (SELECT SGG_NM FROM TB_SGG WHERE SGG_CD = C.SGG_CD) AS SGG_NM
+ , S.SGG_NM
, C.TASK_SE_CD
- , (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM
+ , CD1.CODE_VAL TASK_SE_NM
, C.CRDN_REG_SE_CD
- , GET_CODE_NM('FIM026', C.CRDN_REG_SE_CD) AS CRDN_REG_SE_NM
+ , CD2.CODE_VAL CRDN_REG_SE_NM
, C.CRDN_INPT_SE_CD
- , (SELECT GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL) AS CRDN_INPT_SE_NM
+ , CD3.CODE_VAL CRDN_INPT_SE_NM
, C.CVLCPT_LINK_TBL_NM
, C.RTPYR_ID
, C.CRDN_YMD
@@ -25,7 +25,7 @@ SELECT C.CRDN_ID
, C.CRDN_ROAD_NM
, C.CRDN_PLC
, C.VLTN_ID
- , (SELECT VLTN_ARTCL FROM TB_VLTN WHERE VLTN_ID = C.VLTN_ID) AS VLTN_ARTCL
+ , VLTN_ARTCL
, C.GPS_X
, C.GPS_Y
, C.ATCH_FILE_CNT
@@ -48,19 +48,19 @@ SELECT C.CRDN_ID
, L.DUDT_YMD
, L.RCVMT_YMD
, C.CRDN_STTS_CD
- , (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM
+ , CD4.CODE_VAL CRDN_STTS_NM
, C.CRDN_STTS_CHG_DT
, C.ADTN_AMT
, C.MINUS_AMT
, C.RCVMT_AMT
, C.BFR_CRDN_ID
, CA.CRDN_SE_CD
- , GET_CODE_NM('FIM002', CA.CRDN_SE_CD) AS CRDN_SE_NM
+ , CD5.CODE_VAL CRDN_SE_NM
, CA.DTL_CRDN_PLC
, CA.TEAM_ID
, T.TEAM_NM
, CA.CRDN_SPAREA_CD
- , (SELECT GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD) FROM DUAL) AS CRDN_SPAREA_NM
+ , CD6.CODE_VAL CRDN_SPAREA_NM
, CA.CRDN_BGNG_TM
, CA.CRDN_END_TM
, CA.CRDN_SN
@@ -70,7 +70,7 @@ SELECT C.CRDN_ID
, CA.USE_FUEL_CD
, CA.FFNLG_CARMDL_CD
, CA.PRK_PSBLTY_RSLT_CD
- , (SELECT GET_CODE_NM('FIM034', CA.PRK_PSBLTY_RSLT_CD) FROM DUAL) AS PRK_PSBLTY_RSLT_NM
+ , CD7.CODE_VAL PRK_PSBLTY_RSLT_NM
, CA.VLTN_NMTM
, CA.OVTM_YN
, CC.CVLCPT_LINK_ID
@@ -91,7 +91,7 @@ SELECT C.CRDN_ID
, CC.CVLCPT_TRSM_DT
, CC.CVLCPT_TRSM_CD
, LE.LEVY_EXCL_RSN_CD
- , (SELECT GET_CODE_NM('FIM022', LE.LEVY_EXCL_RSN_CD) FROM DUAL) AS LEVY_EXCL_RSN_NM
+ , CD8.CODE_VAL LEVY_EXCL_RSN_NM
, LE.LEVY_EXCL_YMD
, LE.ETC_CN AS LEVY_EXCL_ETC_CN
, P.RTPYR_NM
@@ -108,44 +108,40 @@ SELECT C.CRDN_ID
, C.MDFCN_DT
, C.DLTR
, C.DEL_DT
-FROM TB_CRDN C
-INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID)
-LEFT OUTER JOIN TB_TEAM T ON (CA.TEAM_ID = T.TEAM_ID)
-LEFT OUTER JOIN TB_CRDN_CVLCPT CC ON (C.CVLCPT_LINK_YN = 'Y' AND C.CVLCPT_LINK_ID = CC.CVLCPT_LINK_ID)
-LEFT OUTER JOIN TB_LEVY_EXCL LE ON (C.CRDN_ID = LE.CRDN_ID AND LE.DEL_YN = 'N')
-LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
-LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
-LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN)
-WHERE C.DEL_YN = 'N'
-
- AND C.SGG_CD = #{sggCd}
-
-AND C.CRDN_ID = #{crdnId}
-
- AND C.CRDN_ID IN (#{CRDN_ID})
-
-AND C.TASK_SE_CD = #{taskSeCd}
-AND C.VHRNO LIKE CONCAT('%', #{vhrno}, '%')
-AND C.CRDN_INPT_SE_CD = #{crdnInptSeCd}
+ FROM TB_CRDN C
+INNER JOIN TB_SGG S ON (C.SGG_CD = S.SGG_CD)
+INNER JOIN TB_VLTN V ON (C.VLTN_ID = V.VLTN_ID)
+INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID)
+LEFT OUTER JOIN TB_TEAM T ON (CA.TEAM_ID = T.TEAM_ID)
+LEFT OUTER JOIN TB_CRDN_CVLCPT CC ON (C.CVLCPT_LINK_YN = 'Y' AND C.CVLCPT_LINK_ID = CC.CVLCPT_LINK_ID)
+LEFT OUTER JOIN TB_LEVY_EXCL LE ON (C.CRDN_ID = LE.CRDN_ID AND LE.DEL_YN = 'N')
+LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
+LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
+LEFT OUTER JOIN TB_PAYER_ADDR PA ON (C.RTPYR_ID = PA.RTPYR_ID AND C.ADDR_SN = PA.ADDR_SN)
+INNER JOIN TB_CMN_CODE CD1 ON (CD1.GRP_ID = 'FIM054' AND CD1.CODE = C.TASK_SE_CD)
+INNER JOIN TB_CMN_CODE CD2 ON (CD2.GRP_ID = 'FIM026' AND CD2.CODE = C.CRDN_REG_SE_CD)
+INNER JOIN TB_CMN_CODE CD3 ON (CD3.GRP_ID = 'FIM003' AND CD3.CODE = C.CRDN_INPT_SE_CD)
+INNER JOIN TB_CMN_CODE CD4 ON (CD4.GRP_ID = 'FIM010' AND CD4.CODE = C.CRDN_STTS_CD)
+LEFT OUTER JOIN TB_CMN_CODE CD5 ON (CD5.GRP_ID = 'FIM002' AND CD5.CODE = CA.CRDN_SE_CD)
+LEFT OUTER JOIN TB_CMN_CODE CD6 ON (CD6.GRP_ID = 'FIM007' AND CD6.CODE = CA.CRDN_SPAREA_CD)
+LEFT OUTER JOIN TB_CMN_CODE CD7 ON (CD7.GRP_ID = 'FIM034' AND CD7.CODE = CA.PRK_PSBLTY_RSLT_CD)
+LEFT OUTER JOIN TB_CMN_CODE CD8 ON (CD8.GRP_ID = 'FIM022' AND CD8.CODE = LE.LEVY_EXCL_RSN_CD)
+
+ AND C.SGG_CD = #{sggCd}
+ AND C.CRDN_ID = #{crdnId}
+ AND C.CRDN_ID IN (#{CRDN_ID})
+ AND C.TASK_SE_CD = #{taskSeCd}
+ AND C.VHRNO LIKE CONCAT('%', #{vhrno}, '%')
+ AND C.CRDN_INPT_SE_CD = #{crdnInptSeCd}
- AND C.CRDN_YMD = ]]> #{schCrdnYmdFrom}
- AND C.CRDN_YMD #{schCrdnYmdTo}
-
-
-AND C.CRDN_STTS_CD = #{crdnSttsCd}
-
-
-AND CA.TOWNG_YN = #{towngYn}
-
-
-AND L.EPAYNO = #{epayno}
-
-
-AND C.CRDN_YMD = #{crdnYmd}
-
-
-AND C.CRDN_TM = #{crdnTm}
+ AND C.CRDN_YMD = ]]> #{schCrdnYmdFrom}
+ AND C.CRDN_YMD #{schCrdnYmdTo}
+ AND C.CRDN_STTS_CD = #{crdnSttsCd}
+ AND CA.TOWNG_YN = #{towngYn}
+ AND L.EPAYNO = #{epayno}
+ AND C.CRDN_YMD = #{crdnYmd}
+ AND C.CRDN_TM = #{crdnTm}
AND C.REG_DT =]]> CONCAT(#{schRegDateFrom},'000000')
@@ -198,6 +194,8 @@ AND C.CRDN_TM = #{crdnTm}
+ AND C.DEL_YN = 'N'
+
diff --git a/src/main/resources/sql/mapper/fims/epst/epostRcptReg-mapper.xml b/src/main/resources/sql/mapper/fims/epst/epostRcptReg-mapper.xml
index d2e8ab48..c8df9822 100644
--- a/src/main/resources/sql/mapper/fims/epst/epostRcptReg-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/epst/epostRcptReg-mapper.xml
@@ -415,9 +415,9 @@
, #{jobCd}
, #{postPrcsSttsCd}
, 'N'
- ,
+ ,
, #{createdBy}
- ,
+ ,
, #{modifiedBy}
)
@@ -467,7 +467,7 @@
, REG_VAR_DATA5 = #{regVarData5}
, JOB_CD = #{jobCd}
, POST_PRCS_STTS_CD = #{postPrcsSttsCd}
- , MDFCN_DT =
+ , MDFCN_DT =
, MDFR = #{modifiedBy}
WHERE CON_KEY = #{conKey}
AND DEL_YN = 'N'
diff --git a/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml b/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml
index 00208549..bc04cf1c 100644
--- a/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/sndb/sndngDtl-mapper.xml
@@ -745,7 +745,7 @@
, SNDNG_DTL_STTS_CD= #{sndngDtlSttsCd}
, CON_KEY = #{conKey}
, RG_NO = #{rgNo}
- , MDFCN_DT =
+ , MDFCN_DT =
, MDFR = #{modifiedBy}
WHERE SNDNG_DTL_ID = #{sndngDtlId}
AND DEL_YN = 'N'
diff --git a/src/main/resources/sql/mapper/interfaces/postplus-mapper.xml b/src/main/resources/sql/mapper/interfaces/postplus-mapper.xml
new file mode 100644
index 00000000..5886d852
--- /dev/null
+++ b/src/main/resources/sql/mapper/interfaces/postplus-mapper.xml
@@ -0,0 +1,730 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+SELECT TMPLT_ID
+ , SGG_CD
+ , TASK_SE_CD
+ , VLTN_ID
+ , NOTICE_GB
+ , TMPLT_CD
+ , NVLP
+ , NVLP_WND
+ , BW_COLOR
+ , FACE_TYPE
+ , DLVR_TYPE
+ , TMPLT_PRINT_YN
+ , MARGIN_YN
+ , ADDR_PAGE_YN
+ , ALIGN_YN
+ , MAIL_MERGE_YN
+ , ENCL_YN
+ , RETURN_YN
+ , STAPLER_YN
+ , LOGO_FILE
+ , REG_DT
+ , RGTR
+ , USE_YN
+ FROM TB_PST_TMPLT
+ AND TMPLT_ID IN (#{id})
+ AND SGG_CD = #{sggCd}
+ AND TASK_SE_CD = #{taskSeCd}
+ AND VLTN_ID = #{vltnId}
+ AND NOTICE_GB = #{noticeGb}
+ AND USE_YN = 'Y'
+
+
+
+
+
+
+/* 제작신청 템플릿 등록(PostplusMapper.insertTemplate) */
+INSERT INTO TB_PST_TMPLT (
+ TMPLT_ID
+ , SGG_CD
+ , TASK_SE_CD
+ , VLTN_ID
+ , NOTICE_GB
+ , TMPLT_CD
+ , NVLP
+ , NVLP_WND
+ , BW_COLOR
+ , FACE_TYPE
+ , DLVR_TYPE
+ , TMPLT_PRINT_YN
+ , MARGIN_YN
+ , ADDR_PAGE_YN
+ , ALIGN_YN
+ , MAIL_MERGE_YN
+ , ENCL_YN
+ , RETURN_YN
+ , STAPLER_YN
+ , LOGO_FILE
+ , REG_DT
+ , RGTR
+ , USE_YN
+) VALUES (
+ #{tmplt.id}
+ , #{tmplt.sggCd}
+ , #{tmplt.taskSeCd}
+ , #{tmplt.vltnId}
+ , #{tmplt.noticeGb}
+ , #{tmplt.code}
+ , #{tmplt.envelop}
+ , #{tmplt.envelopWindow}
+ , #{tmplt.bwColor}
+ , #{tmplt.faceType}
+ , #{tmplt.delivery}
+ , #{tmplt.templatePrint}
+ , #{tmplt.marginYN}
+ , #{tmplt.addressPageYN}
+ , #{tmplt.alignYN}
+ , #{tmplt.mailMergeYN}
+ , #{tmplt.enclosureYN}
+ , #{tmplt.returnYN}
+ , #{tmplt.staplerYN}
+ , #{tmplt.logoFile}
+ ,
+ , #{currentUser.id}
+ , 'Y'
+)
+
+/* 제작신청 템플릿 수정(PostplusMapper.updateTemplate) */
+UPDATE TB_PST_TMPLT
+ SET SGG_CD = #{sggCd}
+ , TASK_SE_CD = #{taskSeCd}
+ , VLTN_ID = #{vltnId}
+ , NOTICE_GB = {#noticeGb}
+ , TMPLT_CD = #{code}
+ , NVLP = {#envelop}
+ , NVLP_WND = {#envelopWindow}
+ , BW_COLOR = {#bwColor}
+ , FACE_TYPE = {#faceType}
+ , DLVR_TYPE = {#delivery}
+ , TMPLT_PRINT_YN = {#templatePrint}
+ , MARGIN_YN = {#marginYN}
+ , ADDR_PAGE_YN = {#addressPageYN}
+ , ALIGN_YN = {#alignYN}
+ , MAIL_MERGE_YN = {#mailMergeYN}
+ , ENCL_YN = {#enclosureYN}
+ , RETURN_YN = {#returnYN}
+ , STAPLER_YN = {#staplerYN}
+ , LOGO_FILE = {#logoFile}
+ WHERE TMPLT_ID = {#id}
+
+/* 제작신청 템플릿 제거(PostplusMapper.removeTemplates) */
+UPDATE TB_PST_TMPLT
+ SET USE_YN = 'N'
+ WHERE TMPLT_CD IN (#{id})
+ AND USE_YN != 'N'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* 우편제작 신청 마스터 등록(PostplusMapper.insertMaster) */
+INSERT INTO TB_PST_MASTER (
+ INTF_ID
+ , VERSION
+ , TEST_YN
+ , SERVICE
+ , SYSTEM_CD
+ , SNDNG_ID
+ , NOTICE_GB
+ , NVLP
+ , NVLP_WND
+ , BW_COLOR
+ , FACE_TYPE
+ , DLVR_TYPE
+ , TMPLT_CD
+ , TMPLT_PRINT_YN
+ , RCPNT_CNT
+ , MARGIN_YN
+ , ADDR_PAGE_YN
+ , ALIGN_YN
+ , MAIL_MERGE_YN
+ , ENCL_YN
+ , RETURN_YN
+ , STAPLER_YN
+ , LOGO_FILE
+ , SENDER_NM
+ , SENDER_SGG
+ , SENDER_DEPT
+ , SENDER_ZIPCODE
+ , SENDER_ADDR
+ , SENDER_DTL_ADDR
+ , SENDER_TELNO
+ , SENDER_EMAIL
+ , REG_DT
+ , RGTR
+ , STATUS
+ , RESULT_CD
+ , RESULT_MSG
+ , POST_PRGRS
+ , STAT_CHECK_DT
+) VALUES (
+ #{mst.intfID}
+ , #{mst.version}
+ , #{mst.testYN}
+ , #{mst.service}
+ , #{mst.systemCd}
+ , #{mst.sndngId}
+ , #{mst.noticeGb}
+ , #{mst.envelop}
+ , #{mst.envelopWindow}
+ , #{mst.bwColor}
+ , #{mst.faceType}
+ , #{mst.delivery}
+ , #{mst.templateCode}
+ , #{mst.templatePrint}
+ , #{mst.recipientCount}
+ , #{mst.marginYN}
+ , #{mst.addressPageYN}
+ , #{mst.alignYN}
+ , #{mst.mailMergeYN}
+ , #{mst.enclosureYN}
+ , #{mst.returnYN}
+ , #{mst.staplerYN}
+ , #{mst.logoFile}
+ , #{mst.senderName}
+ , #{mst.senderSigungu}
+ , #{mst.senderDeptCd}
+ , #{mst.senderZipcode}
+ , #{mst.senderAddress}
+ , #{mst.senderDetailAddress}
+ , #{mst.senderPhoneNo}
+ , #{mst.senderEmail}
+ ,
+ , #{currentUser.id}
+ , #{mst.status}
+ , #{result.result}
+ , #{result.remark}
+ , #{mst.postProgress}
+ , #{mst.statusCheckDate}
+)
+
+/* 우편제작 신청 마스터 수정(PostplusMapper.updateMaster) */
+UPDATE TB_PST_MASTER
+ SET NVLP = #{mst.envelop}
+ , NVLP_WND = #{mst.envelopWindow}
+ , BW_COLOR = #{mst.bwColor}
+ , FACE_TYPE = #{mst.faceType}
+ , DLVR_TYPE = #{mst.delivery}
+ , TMPLT_PRINT_YN = #{mst.templatePrint}
+ , RCPNT_CNT = #{mst.recipientCount}
+ , MARGIN_YN = #{mst.marginYN}
+ , ADDR_PAGE_YN = #{mst.addressPageYN}
+ , ALIGN_YN = #{mst.alignYN}
+ , MAIL_MERGE_YN = #{mst.mailMergeYN}
+ , ENCL_YN = #{mst.enclosureYN}
+ , RETURN_YN = #{mst.returnYN}
+ , STAPLER_YN = #{mst.staplerYN}
+ , LOGO_FILE = #{mst.logoFile}
+ , SENDER_NM = #{mst.senderName}
+ , SENDER_SGG = #{mst.senderSigungu}
+ , SENDER_DEPT = #{mst.senderDeptCd}
+ , SENDER_ZIPCODE = #{mst.senderZipcode}
+ , SENDER_ADDR = #{mst.senderAddress}
+ , SENDER_DTL_ADDR = #{mst.senderDetailAddress}
+ , SENDER_TELNO = #{mst.senderPhoneNo}
+ , SENDER_EMAIL = #{mst.senderEmail}
+ , STATUS = #{mst.status}
+ , RESULT_CD = #{result.result}
+ , RESULT_MSG = #{result.remark}
+ , POST_PRGRS = #{mst.postProgress}
+ , STAT_CHECK_DT =
+ WHERE INTF_ID = #{mst.intfID}
+
+/* 우편제작 신청마스터 삭제(PostplusMapper.deleteMasters) */
+DELETE FROM TB_PST_MASTER
+ WHERE INTF_ID IN (#{intfID})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* 우편제작 신청상세 등록(PostplusMapper.insertDetail) */
+INSERT INTO TB_PST_DETAIL (
+ INTF_ID
+ , SEQ
+ , SNDNG_DTL_ID
+ , OWNER_NM
+ , OWNER_ZIPCODE
+ , OWNER_ADDR
+ , OWNER_DTL_ADDR
+ , OWNER_TELNO
+ , REG_GB
+ , REG_NO
+ , REG_NO_REG_DT
+ , SRL_NO
+ , DLV_CD
+ , BAR1D
+ , BAR2D
+ , NTC_NO
+ , DOC_CD1
+ , DOC_CD2
+ , DOC_CD3
+ , DOC_CD4
+ , DOC_CD5
+ , SUBJ1
+ , SUBJ2
+ , SUBJ3
+ , VLTN_DT
+ , VLTN_DONG
+ , VLTN_LOC
+ , LEGAL_BASIS
+ , PAYMENT_NO1
+ , PAYMENT_NO2
+ , OCR0
+ , OCR1
+ , OCR2
+ , EPAYMENT_NO
+ , VACNT_NO
+ , FINE_AMT
+ , PAYMENT_AMT
+ , PAYMENT_DUE_DT
+ , PAYMENT_IN_DATE
+ , PAYMENT_IN_AMT
+ , PAYMENT_IN_ADD_AMT
+ , PAYMENT_IN_DEFAULT_AMT
+ , PAYMENT_OUT_DATE
+ , PAYMENT_OUT_AMT
+ , PAYMENT_OUT_ADD_AMT
+ , PAYMENT_OUT_DEFAULT_AMT
+ , VHRNO
+ , OWNER_BDT
+ , PRINT_DT
+ , PRINT_YEAR
+ , PRINT_MONTH
+ , PRINT_DAY
+ , EVDNC_NO
+ , PHOTO_CNT
+ , PHOTO_FILENAME1
+ , PHOTO_FILENAME2
+ , PHOTO_FILENAME3
+ , PHOTO_FILENAME4
+ , VAR_TITLE
+ , VAR_CONT1
+ , VAR_CONT2
+ , VAR_CONT3
+ , VAR_CONT4
+ , VACNT_NO2
+ , VACNT_NO3
+ , VACNT_NO4
+ , VACNT_NO5
+ , VACNT_NO6
+ , VACNT_NO7
+ , VACNT_NO8
+) VALUES (
+ #{intfID}
+ , #{seq}
+ , #{sndngDtlId}
+ , #{name}
+ , #{zipcode}
+ , #{address}
+ , #{detailAddress}
+ , #{phoneNo}
+ , #{regGb}
+ , #{regNo}
+ , #{regNoDatetime}
+ , #{serNo}
+ , #{deliveryCd}
+ , #{bar1D}
+ , #{bar2D}
+ , #{noticeNo}
+ , #{docCd1}
+ , #{docCd2}
+ , #{docCd3}
+ , #{docCd4}
+ , #{docCd5}
+ , #{subject1}
+ , #{subject2}
+ , #{subject3}
+ , #{violationDatetime}
+ , #{violationDong}
+ , #{violationLocation}
+ , #{legalBasis}
+ , #{paymentNo1}
+ , #{paymentNo2}
+ , #{ocr0}
+ , #{ocr1}
+ , #{ocr2}
+ , #{epaymentNo}
+ , #{vaccountNo}
+ , #{fineAmt}
+ , #{paymentAmt}
+ , #{dueDate}
+ , #{inDueDate}
+ , #{inDueAmt}
+ , #{inDueAddedAmt}
+ , #{inDueChenapAmt}
+ , #{overdueDate}
+ , #{overdueAmt}
+ , #{overdueAddedAmt}
+ , #{overdueChenapAmt}
+ , #{vhrno}
+ , #{birthday}
+ , #{printDate}
+ , #{printYear}
+ , #{printMonth}
+ , #{printDay}
+ , #{evidenceNo}
+ , #{attachmentCount}
+ , #{attachment1}
+ , #{attachment2}
+ , #{attachment3}
+ , #{attachment4}
+ , #{variableTitle}
+ , #{variableContent1}
+ , #{variableContent2}
+ , #{variableContent3}
+ , #{variableContent4}
+ , #{vaccountNo2}
+ , #{vaccountNo3}
+ , #{vaccountNo4}
+ , #{vaccountNo5}
+ , #{vaccountNo6}
+ , #{vaccountNo7}
+ , #{vaccountNo8}
+)
+
+/* 우편제작 신청상세 수정(PostplusMapper.updateDetail) */
+UPDATE TB_PST_DETAIL
+ SET OWNER_NM = #{name}
+ , OWNER_ZIPCODE = #{zipcode}
+ , OWNER_ADDR = #{address}
+ , OWNER_DTL_ADDR = #{detailAddress}
+ , OWNER_TELNO = #{phoneNo}
+ , REG_GB = #{regGb}
+ , REG_NO = #{regNo}
+ , REG_NO_REG_DT = #{regNoDatetime}
+ , SRL_NO = #{serNo}
+ , DLV_CD = #{deliveryCd}
+ , BAR1D = #{bar1D}
+ , BAR2D = #{bar2D}
+ , NTC_NO = #{noticeNo}
+ , DOC_CD1 = #{docCd1}
+ , DOC_CD2 = #{docCd2}
+ , DOC_CD3 = #{docCd3}
+ , DOC_CD4 = #{docCd4}
+ , DOC_CD5 = #{docCd5}
+ , SUBJ1 = #{subject1}
+ , SUBJ2 = #{subject2}
+ , SUBJ3 = #{subject3}
+ , VLTN_DT = #{violationDatetime}
+ , VLTN_DONG = #{violationDong}
+ , VLTN_LOC = #{violationLocation}
+ , LEGAL_BASIS = #{legalBasis}
+ , PAYMENT_NO1 = #{paymentNo1}
+ , PAYMENT_NO2 = #{paymentNo2}
+ , OCR0 = #{ocr0}
+ , OCR1 = #{ocr1}
+ , OCR2 = #{ocr2}
+ , EPAYMENT_NO = #{epaymentNo}
+ , VACNT_NO = #{vaccountNo}
+ , FINE_AMT = #{fineAmt}
+ , PAYMENT_AMT = #{paymentAmt}
+ , PAYMENT_DUE_DT = #{dueDate}
+ , PAYMENT_IN_DATE = #{inDueDate}
+ , PAYMENT_IN_AMT = #{inDueAmt}
+ , PAYMENT_IN_ADD_AMT = #{inDueAddedAmt}
+ , PAYMENT_IN_DEFAULT_AMT = #{inDueChenapAmt}
+ , PAYMENT_OUT_DATE = #{overdueDate}
+ , PAYMENT_OUT_AMT = #{overdueAmt}
+ , PAYMENT_OUT_ADD_AMT = #{overdueAddedAmt}
+ , PAYMENT_OUT_DEFAULT_AMT = #{overdueChenapAmt}
+ , VHRNO = #{vhrno}
+ , OWNER_BDT = #{birthday}
+ , PRINT_DT = #{printDate}
+ , PRINT_YEAR = #{printYear}
+ , PRINT_MONTH = #{printMonth}
+ , PRINT_DAY = #{printDay}
+ , EVDNC_NO = #{evidenceNo}
+ , PHOTO_CNT = #{attachmentCount}
+ , PHOTO_FILENAME1 = #{attachment1}
+ , PHOTO_FILENAME2 = #{attachment2}
+ , PHOTO_FILENAME3 = #{attachment3}
+ , PHOTO_FILENAME4 = #{attachment4}
+ , VAR_TITLE = #{variableTitle}
+ , VAR_CONT1 = #{variableContent1}
+ , VAR_CONT2 = #{variableContent2}
+ , VAR_CONT3 = #{variableContent3}
+ , VAR_CONT4 = #{variableContent4}
+ , VACNT_NO2 = #{vaccountNo2}
+ , VACNT_NO3 = #{vaccountNo3}
+ , VACNT_NO4 = #{vaccountNo4}
+ , VACNT_NO5 = #{vaccountNo5}
+ , VACNT_NO6 = #{vaccountNo6}
+ , VACNT_NO7 = #{vaccountNo7}
+ , VACNT_NO8 = #{vaccountNo8}
+ WHERE INTF_ID = #{intfID}
+ AND SEQ = #{seq}
+
+/* 우편제작 신청상세 삭제(PostplusMapper.deleteDetails) */
+DELETE FROM TB_PST_DETAIL
+ WHERE INTF_ID IN (#{intfID})
+
+
\ No newline at end of file
diff --git a/src/test/java/cokr/xit/fims/nxrp/service/bean/SnisBeanTest.java b/src/test/java/cokr/xit/fims/nxrp/service/bean/SnisBeanTest.java
new file mode 100644
index 00000000..11f3017a
--- /dev/null
+++ b/src/test/java/cokr/xit/fims/nxrp/service/bean/SnisBeanTest.java
@@ -0,0 +1,45 @@
+package cokr.xit.fims.nxrp.service.bean;
+
+import javax.annotation.Resource;
+
+import org.junit.jupiter.api.Test;
+
+import cokr.xit.foundation.test.TestSupport;
+import cokr.xit.interfaces.sntris.prenotice.Bu18WebReturnInfoDTO;
+
+public class SnisBeanTest extends TestSupport {
+ @Resource(name = "snisBean")
+ private SnisBean snisBean;
+
+ @Test
+ void update() {
+ String str = """
+{
+ "buAfk": "1600090184",
+ "enapbuNo": "1111023025500003463",
+ "etcColmn1": "",
+ "etcColmn2": "",
+ "etcColmn3": "",
+ "etcColmn4": "",
+ "etcColmn5": "",
+ "noticeAk": "1921813",
+ "returnCode": "0",
+ "returnMsg": "정상처리 되었습니다.",
+ "paccountNo": "911004-80-021014",
+ "qaccountNo": "700-0200-062-2785",
+ "saccountNo": "562-050-02542555",
+ "success": true,
+ "waccountNo": "100-103415-65-254",
+ "taccountNo": "171-50-030920-5",
+ "kaccountNo": "4114-92-0268491-3",
+ "oaccountNo": "9102-00-0622796",
+ "naccountNo": "790-0748-5755-311",
+ "caccountNo": "433-00845-92-8-65",
+ "faccountNo": "085-40-000649719",
+ "haccountNo": "120-812796-87237",
+ "iaccountNo": "601-002684-97-915"
+}""";
+ Bu18WebReturnInfoDTO obj = json.parse(str, Bu18WebReturnInfoDTO.class);
+ System.out.println(json.stringify(obj, true));
+ }
+}
\ No newline at end of file