requestProduction(..) 수정

master
mjkhan21 8 months ago
parent 516609080d
commit 7846f6da49

@ -61,7 +61,8 @@ public class Postplus extends AbstractComponent {
}
public String requestProductionURL() {
return getHost() + urls().getOrDefault("requestProduction", "/po/api/postplusPstMsrApi.do");
return getHost() + urls().getOrDefault("requestProduction", "/po/api/postplusPstFApi.do");
// return getHost() + urls().getOrDefault("requestProduction", "/po/api/postplusPstMsrApi.do");
}
public String productionStatusURL() {

@ -373,13 +373,13 @@ public class PstMsr extends AbstractComponent {
/** 첨부파일 */
private String attachment;
/** 가변1 */
private String reserved1;
private String variableContent1;
/** 가변2 */
private String reserved2;
private String variableContent2;
/** 가변3 */
private String reserved3;
private String variableContent3;
/** 가변4 */
private String reserved4;
private String variableContent4;
/** .
* @param seq
@ -445,38 +445,38 @@ public class PstMsr extends AbstractComponent {
}
/**1 .
* @param reserved1 1
* @param variableContent1 1
* @return Detail
*/
public Detail setReserved1(String reserved1) {
this.reserved1 = reserved1;
public Detail setVariableContent1(String variableContent1) {
this.variableContent1 = variableContent1;
return this;
}
/**2 .
* @param reserved2 2
* @param variableContent2 2
* @return Detail
*/
public Detail setReserved2(String reserved2) {
this.reserved2 = reserved2;
public Detail setVariableContent2(String variableContent2) {
this.variableContent2 = variableContent2;
return this;
}
/**3 .
* @param reserved3 3
* @param variableContent3 3
* @return Detail
*/
public Detail setReserved3(String reserved3) {
this.reserved3 = reserved3;
public Detail setVariableContent3(String variableContent3) {
this.variableContent3 = variableContent3;
return this;
}
/**4 .
* @param reserved4 4
* @param variableContent4 4
* @return Detail
*/
public Detail setReserved4(String reserved4) {
this.reserved4 = reserved4;
public Detail setVariableContent4(String variableContent4) {
this.variableContent4 = variableContent4;
return this;
}
@ -492,10 +492,10 @@ public class PstMsr extends AbstractComponent {
blankIfEmpty(detailAddress),
blankIfEmpty(phoneNo),
blankIfEmpty(attachment),
blankIfEmpty(reserved1),
blankIfEmpty(reserved2),
blankIfEmpty(reserved3),
blankIfEmpty(reserved4)
blankIfEmpty(variableContent1),
blankIfEmpty(variableContent2),
blankIfEmpty(variableContent3),
blankIfEmpty(variableContent4)
});
}
}
@ -514,6 +514,7 @@ public class PstMsr extends AbstractComponent {
private Master master;
private List<Detail> details;
private PostResponse result;
/** .
* @param master
@ -545,4 +546,13 @@ public class PstMsr extends AbstractComponent {
.set("master", master.toRequest())
.set("detail", Detail.toRequest(details));
}
public PostResponse getResult() {
return result;
}
public PstMsr setResult(PostResponse result) {
this.result = result;
return this;
}
}

@ -0,0 +1,35 @@
package cokr.xit.interfaces.postplus.post.dao;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import cokr.xit.foundation.component.AbstractMapper;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.interfaces.postplus.post.PstMsr;
@Mapper("postMapper")
public interface PostMapper extends AbstractMapper {
default DataObject selectIntfID(DataObject params) {
throw new UnsupportedOperationException("구현 예정");
}
default String selectIntfID() {
DataObject dataobject = selectIntfID(params());
return dataobject.string("NEW_ID");
}
int insertMaster(DataObject params);
int insertDetail(DataObject params);
default int insert(PstMsr.Master master) {
return insertMaster(
params().set("obj", master)
);
}
default int insert(PstMsr.Detail detail) {
return insertMaster(
params().set("obj", detail)
);
}
}

@ -2,8 +2,8 @@ package cokr.xit.interfaces.postplus.post.service;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import cokr.xit.foundation.data.Named;
import cokr.xit.interfaces.postplus.post.PostResponse;
import cokr.xit.interfaces.postplus.post.PstMsr;
@ -18,7 +18,7 @@ public interface PostService {
* @param attachments
* @return
*/
PostResponse requestProduction(String apiID, PstMsr.Master master, List<PstMsr.Detail> details, List<Named<InputStream>> attachments);
PostResponse requestProduction(String apiID, PstMsr.Master master, List<PstMsr.Detail> details, Map<String, InputStream> attachments);
/** .
* @param apiID apiKey

@ -1,25 +1,27 @@
package cokr.xit.interfaces.postplus.post.service.bean;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStream;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.type.TypeReference;
import cokr.xit.base.file.ZIP;
import cokr.xit.foundation.component.AbstractServiceBean;
import cokr.xit.foundation.data.DataObject;
import cokr.xit.foundation.data.JSON;
import cokr.xit.foundation.data.Named;
import cokr.xit.foundation.web.WebClient;
import cokr.xit.interfaces.postplus.Postplus;
import cokr.xit.interfaces.postplus.post.PostResponse;
import cokr.xit.interfaces.postplus.post.PstMsr;
import cokr.xit.interfaces.postplus.post.dao.PostMapper;
import cokr.xit.interfaces.postplus.post.service.PostService;
import cokr.xit.interfaces.postplus.post.service.StatusResponse;
@ -30,40 +32,46 @@ public class PostServiceBean extends AbstractServiceBean implements PostService
}
private JSON json = new JSON();
@Resource(name = "postMapper")
private PostMapper postMapper;
@Override
public PostResponse requestProduction(String apiID, PstMsr.Master master, List<PstMsr.Detail> details, List<Named<InputStream>> attachments) {
DataObject pstMsr = new PstMsr()
public PostResponse requestProduction(String apiID, PstMsr.Master master, List<PstMsr.Detail> details, Map<String, InputStream> attachments) {
PstMsr pstMsr = new PstMsr()
.setMaster(master)
.setDetails(details)
.toRequest();
.setDetails(details);
master.setIntfID("intfID");
String str = json.stringify(pstMsr, true);
String tmpdir = System.getProperty("java.io.tmpdir"),
filepath = tmpdir + "/pstFile.json",
str = json.stringify(pstMsr.toRequest(), true);
log().debug("production request:\n{}", str);
Named<InputStream> pstFile = new Named<>("pstFile.json", new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8)));
ArrayList<Named<InputStream>> files = new ArrayList<>();
files.add(pstFile);
files.addAll(ifEmpty(attachments, Collections::emptyList));
try (FileWriter writer = new FileWriter(filepath, StandardCharsets.UTF_8);) {
writer.write(str);
} catch (Exception e) {
throw runtimeException(e);
}
File file = new File(filepath);
File zipped = !isEmpty(attachments) ? new ZIP().compress(filepath = tmpdir + "/pstFile.zip", attachments) : null;
try {
HttpResponse<String> hresp = new WebClient().upload(req ->
req.uri(Postplus.get().requestProductionURL())
.data("apiKey", apiKey(apiID))
.data("pstFile", files)
.data("jsonFile", file)
.data("pstFile", zipped)
);
String body = hresp.body();
log().debug("response:\n{}", body);
return json.parse(body, PostResponse.class);
PostResponse result = json.parse(body, PostResponse.class);
pstMsr.setResult(result);
return result;
} finally {
files.forEach(file -> {
try {
file.getValue().close();
} catch (Exception e) {
throw runtimeException(e);
}
});
file.delete();
zipped.delete();
}
}

@ -2,6 +2,8 @@ package cokr.xit.interfaces.postplus.post.web;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
@ -11,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import cokr.xit.foundation.data.Named;
import cokr.xit.foundation.web.AbstractController;
import cokr.xit.interfaces.postplus.post.PostResponse;
import cokr.xit.interfaces.postplus.post.PstMsr;
@ -37,16 +38,17 @@ public class PostController extends AbstractController {
List<PstMsr.Detail> details,
@RequestParam(required = false) List<MultipartFile> attachments
) {
List<Named<InputStream>> uploads = !isEmpty(attachments) ? attachments.stream()
.map(attached -> {
Map<String, InputStream> fileMap = attachments.stream().collect(Collectors.toMap(
MultipartFile::getOriginalFilename,
upload -> {
try {
return new Named<InputStream>(attached.getOriginalFilename(), attached.getInputStream());
return upload.getInputStream();
} catch (Exception e) {
throw runtimeException(e);
}
})
.toList() : null;
return postService.requestProduction(apiID, master, details, uploads);
}
));
return postService.requestProduction(apiID, master, details, fileMap);
}
/** .

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cokr.xit.interfaces.postplus.post.dao.PostMapper">
<!-- 포스트플러스 우편제작 신청
========== 변경 이력 ==========
2023-09-05 mjkhan 최초 작성
============================ -->
<select id="selectNewIntfID" parameterType="map" resultType="dataobject">/* 우편제작 신청 연계ID 생성(PostMapper.selectNewIntfID) */
SELECT MAX(B.INTF_ID)
FROM (SELECT CONCAT(#{currentUser.orgID}, '-', #{currentUser.deptCode}, '-',<include refid="utility.today" />) PREFIX FROM DUAL) A
LEFT OUTER JOIN TB_PST_MSR_MASTER B ON B.INTF_ID LIKE CONCAT(A.PREFIX, '%')
</select>
<insert id="insertMaster" parameterType="map">/* 우편제작 신청 마스터 등록(PostMapper.insertMaster) */
INSERT INTO TB_PST_MSR_MASTER (
INTF_ID <!-- 연계식별키 -->
, VERSION <!-- 버전 -->
, TEST_YN <!-- 테스트여부 -->
, SERVICE <!-- 서비스 -->
, SYSTEM_CD <!-- 시스템구분 -->
, POST_GB <!-- 고지서구분 -->
, NVLP <!-- 봉투 -->
, NVLP_GB <!-- 봉투창 -->
, BW_COLOR <!-- 흑백칼라 -->
, FACE_TYPE <!-- 단면양면 -->
, DLVR_TYPE <!-- 배달(일반, 등기, 선택등기) -->
, TMPLT_CD <!-- 템플릿코드 -->
, TMPLT_PRINT_YN <!-- 템플릿출력여부 -->
, RCPNT_CNT <!-- 수취인수 -->
, MARGIN_YN <!-- 여백생성유무 -->
, ADDR_PAGE_YN <!-- 주소페이지유무 -->
, SET_PAPER_YN <!-- 맞춤자제유무 -->
, MAIL_MERGE_YN <!-- 메일머지유무 -->
, ENCL_YN <!-- 동봉물유무 -->
, RETURN_YN <!-- 반송여부 -->
, STAPLER_YN <!-- 스테이플러유무 -->
, LOGO_FILE <!-- 로고파일 -->
, SENDER_NM <!-- 발송인명 -->
, SENDER_CODE <!-- 발송부서코드 -->
, SENDER_ZIPCODE <!-- 발송인우편번호 -->
, SENDER_ADDR <!-- 발송인주소 -->
, SENDER_DETAIL_ADDR <!-- 발송인상세주소 -->
, SENDER_PHONENO <!-- 발송인전화번호 -->
, REG_DT <!-- 등록일시 -->
, RGTR <!-- 등록사용자 -->
, STATUS <!-- 진행상태 -->
, RESULT_CD <!-- 연계 결과 코드 -->
, RESULT_MSG <!-- 연계 결과 메세지 -->
, POST_PROGRESS <!-- 최종 제작 상태 -->
, STAT_CHECK_DT <!-- 최종 제작 상태 확인 일시 -->
) VALUES (
#{obj.intfID} <!-- 연계식별키 -->
, #{obj.version} <!-- 버전 -->
, #{obj.testYN} <!-- 테스트여부 -->
, #{obj.service} <!-- 서비스 -->
, #{obj.systemCd} <!-- 시스템구분 -->
, #{obj.postGb} <!-- 고지서구분 -->
, #{obj.envelop} <!-- 봉투 -->
, #{obj.envelopWindow} <!-- 봉투창 -->
, #{obj.bwColor} <!-- 흑백칼라 -->
, #{obj.faceType} <!-- 단면양면 -->
, #{obj.deliveryType} <!-- 배달(일반, 등기, 선택등기) -->
, #{obj.templateCode} <!-- 템플릿코드 -->
, #{obj.templatePrint} <!-- 템플릿출력여부 -->
, #{obj.recipientCount} <!-- 수취인수 -->
, #{obj.marginYN} <!-- 여백생성유무 -->
, #{obj.addressPageYN} <!-- 주소페이지유무 -->
, #{obj.orderYN} <!-- 맞춤자제유무 -->
, #{obj.mailMergeYN} <!-- 메일머지유무 -->
, #{obj.enclosedYN} <!-- 동봉물유무 -->
, #{obj.returnYN} <!-- 반송여부 -->
, #{obj.staplerYN} <!-- 스테이플러유무 -->
, #{obj.logoFile} <!-- 로고파일 -->
, #{obj.senderName} <!-- 발송인명 -->
, #{obj.senderDeptCode} <!-- 발송부서코드 -->
, #{obj.senderZipcode} <!-- 발송인우편번호 -->
, #{obj.senderAddress} <!-- 발송인주소 -->
, #{obj.senderDetailAddress} <!-- 발송인상세주소 -->
, #{obj.senderPhoneNo} <!-- 발송인전화번호 -->
,<include refid="utility.now" />
, #{obj.currentUser.id} <!-- 등록사용자 -->
, #{obj.status} <!-- 진행상태 -->
, #{obj.result_cd} <!-- 연계 결과 코드 -->
, #{obj.result_msg} <!-- 연계 결과 메세지 -->
, #{obj.post_progress} <!-- 최종 제작 상태 -->
, #{obj.stat_check_dt} <!-- 최종 제작 상태 확인 일시 -->
)</insert>
<insert id="insertDetail" parameterType="map">/* 우편제작 신청 상세 등록(PostMapper.insertDetail) */
INSERT INTO TB_PST_MSR_DETAIL (
INTF_ID <!-- 연계식별키 -->
, SEQ <!-- 순번 -->
, OWNER_NM <!-- 이름 -->
, ZIPCODE <!-- 우편번호 -->
, ADDR <!-- 주소 -->
, DETAIL_ADDR <!-- 상세주소 -->
, PHONENO <!-- 전화번호 -->
, FILENAME <!-- 사진파일명1 -->
, VAR_CNT1 <!-- 가변내용1 -->
, VAR_CNT2 <!-- 가변내용2 -->
, VAR_CNT3 <!-- 가변내용3 -->
, VAR_CNT4 <!-- 가변내용4' -->
) VALUES (
#{obj.intfID} <!-- 연계식별키 -->
, #{obj.seq} <!-- 순번 -->
, #{obj.name} <!-- 이름 -->
, #{obj.Zipcode} <!-- 우편번호 -->
, #{obj.address} <!-- 주소 -->
, #{obj.detailAddress} <!-- 상세주소 -->
, #{obj.phoneNo} <!-- 전화번호 -->
, #{obj.attachment} <!-- 사진파일명1 -->
, #{obj.variableContent1} <!-- 가변내용1 -->
, #{obj.variableContent2} <!-- 가변내용2 -->
, #{obj.variableContent3} <!-- 가변내용3 -->
, #{obj.variableContent4} <!-- 가변내용4 -->
)</insert>
</mapper>

@ -0,0 +1,56 @@
CREATE OR REPLACE TABLE TB_PST_MSR_MASTER (
INTF_ID VARCHAR(40) COMMENT '연계식별키',
VERSION VARCHAR(10) COMMENT '버전',
TEST_YN VARCHAR(2) COMMENT '테스트여부',
SERVICE VARCHAR(5) COMMENT '서비스',
SYSTEM_CD VARCHAR(3) COMMENT '시스템구분',
POST_GB VARCHAR(10) COMMENT '고지서구분',
NVLP VARCHAR(20) COMMENT '봉투',
NVLP_GB VARCHAR(20) COMMENT '봉투창',
BW_COLOR VARCHAR(10) COMMENT '흑백칼라',
FACE_TYPE VARCHAR(10) COMMENT '단면양면',
DLVR_TYPE VARCHAR(20) COMMENT '배달(일반, 등기, 선택등기)',
TMPLT_CD VARCHAR(20) COMMENT '템플릿코드',
TMPLT_PRINT_YN VARCHAR(1) DEFAULT 'N' COMMENT '템플릿출력여부',
RCPNT_CNT INT COMMENT '수취인수',
MARGIN_YN VARCHAR(1) DEFAULT 'N' COMMENT '여백생성유무',
ADDR_PAGE_YN VARCHAR(1) DEFAULT 'N' COMMENT '주소페이지유무',
SET_PAPER_YN VARCHAR(1) DEFAULT 'N' COMMENT '맞춤자제유무',
MAIL_MERGE_YN VARCHAR(1) DEFAULT 'N' COMMENT '메일머지유무',
ENCL_YN VARCHAR(1) DEFAULT 'N' COMMENT '동봉물유무',
RETURN_YN VARCHAR(1) DEFAULT 'N' COMMENT '반송여부',
STAPLER_YN VARCHAR(1) DEFAULT 'N' COMMENT '스테이플러유무',
LOGO_FILE VARCHAR(50) COMMENT '로고파일',
SENDER_NM VARCHAR(90) COMMENT '발송인명',
SENDER_CODE VARCHAR(11) COMMENT '발송부서코드',
SENDER_ZIPCODE VARCHAR(6) COMMENT '발송인우편번호',
SENDER_ADDR VARCHAR(99) COMMENT '발송인주소',
SENDER_DETAIL_ADDR VARCHAR(99) COMMENT '발송인상세주소',
SENDER_PHONENO VARCHAR(120) COMMENT '발송인전화번호',
REG_DT VARCHAR(14) COMMENT '등록일시',
RGTR VARCHAR(20) COMMENT '등록사용자',
STATUS VARCHAR(2) COMMENT '진행상태',
RESULT_CD VARCHAR(10) COMMENT '연계 결과 코드',
RESULT_MSG VARCHAR(100) COMMENT '연계 결과 메세지',
POST_PROGRESS VARCHAR(100) COMMENT '최종 제작 상태',
STAT_CHECK_DT VARCHAR(14) COMMENT '최종 제작 상태 확인 일시',
PRIMARY KEY (INTF_ID)
) COMMENT = '우편제작 신청 마스터';
CREATE OR REPLACE TABLE TB_PST_MSR_DETAIL (
INTF_ID VARCHAR(40) COMMENT '연계식별키',
SEQ INT COMMENT'순번',
OWNER_NM VARCHAR(80) COMMENT'이름',
ZIPCODE VARCHAR(6) COMMENT'우편번호',
ADDR VARCHAR(100) COMMENT'주소',
DETAIL_ADDR VARCHAR(200) COMMENT'상세주소',
PHONENO VARCHAR(20) COMMENT'전화번호',
FILENAME VARCHAR(20) COMMENT'사진파일명1',
VAR_CNT1 VARCHAR(300) COMMENT'가변내용1',
VAR_CNT2 VARCHAR(300) COMMENT'가변내용2',
VAR_CNT3 VARCHAR(500) COMMENT'가변내용3',
VAR_CNT4 VARCHAR(300) COMMENT'가변내용4',
PRIMARY KEY (INTF_ID, SEQ)
) COMMENT = '우편제작 신청 상세';

@ -63,10 +63,10 @@ public class PostServiceTest extends TestSupport {
.setDetailAddress("서울광진우체국 B동 1층")
.setPhoneNo("1012341234")
.setAttachment("pstFile.pdf")
.setReserved1("24926737")
.setReserved2("2021-09-02")
.setReserved3("대출(고정)")
.setReserved4("31,000,000"),
.setVariableContent1("24926737")
.setVariableContent2("2021-09-02")
.setVariableContent3("대출(고정)")
.setVariableContent4("31,000,000"),
new PstMsr.Detail()
.setName("홍길동2")
.setZipcode("08394")
@ -74,10 +74,10 @@ public class PostServiceTest extends TestSupport {
.setDetailAddress("서울광진우체국 B동 2층")
.setPhoneNo("01012341234")
.setAttachment("pstFile.pdf")
.setReserved1("25685047")
.setReserved2("2021-09-02")
.setReserved3("대출B(고정)")
.setReserved4("421,000,000")
.setVariableContent1("25685047")
.setVariableContent2("2021-09-02")
.setVariableContent3("대출B(고정)")
.setVariableContent4("421,000,000")
);
PostResponse resp = postService.requestProduction(apiID, master, details, null);

Loading…
Cancel
Save