diff --git a/pom.xml b/pom.xml
index e883a3b7..04973ca1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,8 @@
UTF-8
17
+ ${java.version}
+ ${java.version}
@@ -169,12 +171,12 @@
23.04.01-SNAPSHOT
-
+
diff --git a/src/main/java/cokr/xit/fims/crdn/Crdn.java b/src/main/java/cokr/xit/fims/crdn/Crdn.java
index b453de72..efce107a 100644
--- a/src/main/java/cokr/xit/fims/crdn/Crdn.java
+++ b/src/main/java/cokr/xit/fims/crdn/Crdn.java
@@ -226,7 +226,7 @@ public class Crdn extends AbstractEntity {
setVin(vehicle.getVin());
setVhclNm(vehicle.getCnm());
setVhclColr(vehicle.getColor_nm());
- setVhclCpct(vehicle.getTkcar_pscap_co());
+ setVhclCpct(toInt(vehicle.getTkcar_pscap_co()));
setUseFuelCd(vehicle.getUse_fuel_code());
setFfnlgCarmdlCd(fineCarModel(vehicle.getVhcty_asort_code(), vehicle.getMxmm_ldg()));
setErsrRegYmd(vehicle.getErsr_regist_de());
diff --git a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java
index 18b38bd5..74b04652 100644
--- a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java
+++ b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java
@@ -1,6 +1,5 @@
package cokr.xit.fims.sndb.web;
-import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -11,7 +10,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.ss.usermodel.CellStyle;
-import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@@ -55,6 +53,9 @@ import cokr.xit.fims.sprt.dao.IntegrationSearchMapper;
import cokr.xit.fims.sprt.service.IntegrationSearchService;
import cokr.xit.fims.sprt.service.bean.MediaBean;
import cokr.xit.fims.task.Task;
+import cokr.xit.fims.wpm.WoopyonMoaRequest;
+import cokr.xit.fims.wpm.service.WoopyonMoaService;
+import cokr.xit.foundation.Downloadable;
import cokr.xit.foundation.UserInfo;
import cokr.xit.foundation.data.DataObject;
@@ -166,6 +167,8 @@ public class Sndb01Controller extends ApplicationController {
protected OutsourcingStngBean outsourcingStngBean;
@Resource(name="integrationSearchMapper")
private IntegrationSearchMapper integrationSearchMapper;
+ @Resource(name="woopyonMoaService")
+ private WoopyonMoaService woopyonMoaService;
/**계고장 발송 대상 자료 메인화면(sndb/sndb01/010-main)을 연다.
* @return /sndb/sndb01/010-main
@@ -481,31 +484,15 @@ public class Sndb01Controller extends ApplicationController {
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("계고장 발송상세" + "_목록_" + now() + ".xlsx"));
} else {
- try (InputStream input = new ClassPathResource("template/" + template).getInputStream()) {
- int rowIndex = 1;
- XLSWriter xlsx = new XLSWriter().template(input).worksheet(0);
-
- for (DataObject row: list) {
- xlsx.cell(rowIndex, 0)
- .rowValues(List.of("규격", 25, 1)) // 규격, 중량, 통수
- .cell(rowIndex, 3)
- .rowValues(List.of(
- row.get("RCPN_NM"), // 수취인
- row.get("RCPN_ZIP"), // 우편번호
- row.get("RCPN_ADDR"), // 기본주소
- row.get("RCPN_DTL_ADDR"), // 상세주소
- blankIfEmpty(row.get("RTPYR_MBL_TELNO")), // 휴대폰
- row.get("SNDNG_DTL_ID"), // 문서번호 <- 발송상세아이디
- row.get("TTL_NM"), // 문서제목
- blankIfEmpty(row.get("ETC_CN")) // 비고
- ));
- ++rowIndex;
- }
- return new ModelAndView("downloadView")
- .addObject("download", xlsx.getDownloadable().setFilename("우편등록_" + now() + ".xls"));
- } catch (Exception e) {
- throw runtimeException(e);
- }
+ WoopyonMoaRequest wreq = new WoopyonMoaRequest()
+ .setTemplate(template)
+ .setSndngDtlList(list)
+ .setStandardYN("규격")
+ .setWeight(25)
+ .setPieceCount(1);
+ Downloadable downloadable = woopyonMoaService.downloadRequest(wreq);
+ return new ModelAndView("downloadView")
+ .addObject("download", downloadable.setFilename("우편등록_" + now() + ".xls"));
}
}
}
diff --git a/src/main/java/cokr/xit/fims/wpm/WoopyonMoa.java b/src/main/java/cokr/xit/fims/wpm/WoopyonMoa.java
new file mode 100644
index 00000000..118f6947
--- /dev/null
+++ b/src/main/java/cokr/xit/fims/wpm/WoopyonMoa.java
@@ -0,0 +1,116 @@
+package cokr.xit.fims.wpm;
+
+import java.util.List;
+import java.util.function.BiConsumer;
+
+import cokr.xit.foundation.AbstractEntity;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class WoopyonMoa extends AbstractEntity {
+ public static final List> setters(List headers) {
+ return headers.stream()
+ .map(header -> {
+ BiConsumer setter = switch (header) {
+ case "번호" -> (row, str) -> row.setNo(toInt(str));
+ case "접수우체국" -> (row, str) -> row.setRegistPostOffice(str);
+ case "발송상태" -> (row, str) -> row.setDeliveryStatus(str);
+ case "일반번호" -> (row, str) -> row.setGeneralNo(str);
+ case "등기번호", "창구접수등기번호" -> (row, str) -> row.setRegistrationNo(str);
+ case "환부여부" -> (row, str) -> row.setReturnYN(str);
+ case "규격", "규격여부" -> (row, str) -> row.setStandardYN(str);
+ case "중량" -> (row, str) -> row.setWeight(toInt(str));
+ case "통수" -> (row, str) -> row.setPieceCount(toInt(str));
+ case "요금" -> (row, str) -> row.setFee(toLong(str));
+ case "비고" -> (row, str) -> row.setRemark(str);
+ case "수취인" -> (row, str) -> row.setPayee(str);
+ case "우편번호" -> (row, str) -> row.setZipCode(str);
+ case "기본주소" -> (row, str) -> row.setAddress(str);
+ case "상세주소" -> (row, str) -> row.setDetailAddress(str);
+ case "문서번호" -> (row, str) -> row.setDocNo(str);
+ case "문서제목" -> (row, str) -> row.setDocTitle(str);
+ case "담당부서" -> (row, str) -> row.setDeptName(str);
+ case "담당자" -> (row, str) -> row.setManager(str);
+ case "배달우체국" -> (row, str) -> row.setDeliveryPostOffice(str);
+ case "배달결과" -> (row, str) -> row.setDeliveryResult(str);
+ case "반송사유" -> (row, str) -> row.setReturnReason(str);
+ case "배달일" -> (row, str) -> row.setDeliveryDate(str);
+ case "수령인" -> (row, str) -> row.setRecipient(str);
+ case "수령인과의 관계" -> (row, str) -> row.setRecipientRelation(str);
+ case "등록일" -> (row, str) -> row.setCreatedAt(str);
+ case "연락처" -> (row, str) -> row.setContact(str);
+ case "발송일" -> (row, str) -> row.setMailingDate(str);
+ case "수취인 전화번호" -> (row, str) -> row.setRecipientTelno(str);
+ case "휴대폰", "수취인 핸드폰번호" -> (row, str) -> row.setRecipientMobileNo(str);
+ default -> null;
+ };
+ return setter;
+ })
+ .filter(setter -> setter != null)
+ .toList();
+ }
+ /** 번호 */
+ private int no;
+ /** 접수우체국 */
+ private String registPostOffice;
+ /** 발송상태 */
+ private String deliveryStatus;
+ /** 일반번호 */
+ private String generalNo;
+ /** 창구접수등기번호 */
+ private String registrationNo;
+ /** 환부여부 */
+ private String returnYN;
+ /** 규격여부 */
+ private String standardYN;
+ /** 중량 */
+ private int weight;
+ /** 통수 */
+ private int pieceCount;
+ /** 요금 */
+ private long fee;
+ /** 비고 */
+ private String remark;
+ /** 수취인 */
+ private String payee;
+ /** 우편번호 */
+ private String zipCode;
+ /** 기본주소 */
+ private String address;
+ /** 상세주소 */
+ private String detailAddress;
+ /** 문서번호 */
+ private String docNo;
+ /** 문서제목 */
+ private String docTitle;
+ /** 담당부서 */
+ private String deptName;
+ /** 담당자 */
+ private String manager;
+ /** 배달우체국 */
+ private String deliveryPostOffice;
+ /** 배달결과 */
+ private String deliveryResult;
+ /** 반송사유 */
+ private String returnReason;
+ /** 배달일 */
+ private String deliveryDate;
+ /** 수령인 */
+ private String recipient;
+ /** 수령인과의 관계 */
+ private String recipientRelation;
+ /** 연락처 */
+ private String contact;
+ /** 발송일 */
+ private String mailingDate;
+ /** 수취인 전화번호 */
+ private String recipientTelno;
+ /** 수취인 핸드폰번호 */
+ private String recipientMobileNo;
+ /** 등록일 */
+ private String createdAt;
+ /** 사용여부 */
+ private String useYN;
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/fims/wpm/WoopyonMoaRequest.java b/src/main/java/cokr/xit/fims/wpm/WoopyonMoaRequest.java
new file mode 100644
index 00000000..9c7b3864
--- /dev/null
+++ b/src/main/java/cokr/xit/fims/wpm/WoopyonMoaRequest.java
@@ -0,0 +1,27 @@
+package cokr.xit.fims.wpm;
+
+import java.util.List;
+
+import cokr.xit.foundation.component.ServiceRequest;
+import cokr.xit.foundation.data.DataObject;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class WoopyonMoaRequest extends ServiceRequest {
+ private static final long serialVersionUID = 1L;
+
+ /** 템플릿 */
+ private String template;
+ /** 규격여부 */
+ private String standardYN;
+ /** 중량 */
+ private int weight;
+ /** 통수 */
+ private int pieceCount;
+
+ private List sndngDtlList;
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/fims/wpm/service/WoopyonMoaService.java b/src/main/java/cokr/xit/fims/wpm/service/WoopyonMoaService.java
new file mode 100644
index 00000000..cdca710c
--- /dev/null
+++ b/src/main/java/cokr/xit/fims/wpm/service/WoopyonMoaService.java
@@ -0,0 +1,12 @@
+package cokr.xit.fims.wpm.service;
+
+import java.io.InputStream;
+
+import cokr.xit.fims.wpm.WoopyonMoaRequest;
+import cokr.xit.foundation.Downloadable;
+
+public interface WoopyonMoaService {
+ Downloadable downloadRequest(WoopyonMoaRequest req);
+
+ int updateStatus(InputStream input);
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/fims/wpm/service/bean/WoopyonMoaBean.java b/src/main/java/cokr/xit/fims/wpm/service/bean/WoopyonMoaBean.java
new file mode 100644
index 00000000..6a90c0ed
--- /dev/null
+++ b/src/main/java/cokr/xit/fims/wpm/service/bean/WoopyonMoaBean.java
@@ -0,0 +1,70 @@
+package cokr.xit.fims.wpm.service.bean;
+
+import java.io.InputStream;
+import java.util.List;
+import java.util.function.BiConsumer;
+
+import javax.annotation.Resource;
+
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Component;
+
+import cokr.xit.base.docs.xls.XLSReader;
+import cokr.xit.base.docs.xls.XLSWriter;
+import cokr.xit.fims.sndb.service.bean.SndngDtlBean;
+import cokr.xit.fims.wpm.WoopyonMoa;
+import cokr.xit.fims.wpm.WoopyonMoaRequest;
+import cokr.xit.foundation.Downloadable;
+import cokr.xit.foundation.component.AbstractBean;
+import cokr.xit.foundation.data.DataObject;
+
+@Component("woopyonMoaBean")
+public class WoopyonMoaBean extends AbstractBean {
+ /** 발송 상세 정보 Bean */
+ @Resource(name = "sndngDtlBean")
+ private SndngDtlBean sndngDtlBean;
+
+ public Downloadable downloadRequest(WoopyonMoaRequest req) {
+ try (InputStream input = getTemplate(req.getTemplate())) {
+ int rowIndex = 1;
+ XLSWriter xlsx = new XLSWriter().template(input).worksheet(0);
+
+ for (DataObject row: req.getSndngDtlList()) {
+ xlsx.cell(rowIndex, 0)
+ .rowValues(List.of(req.getStandardYN(), req.getWeight(), req.getPieceCount())) // 규격, 중량, 통수
+ .cell(rowIndex, 3)
+ .rowValues(List.of(
+ row.get("RCPN_NM"), // 수취인
+ row.get("RCPN_ZIP"), // 우편번호
+ row.get("RCPN_ADDR"), // 기본주소
+ row.get("RCPN_DTL_ADDR"), // 상세주소
+ blankIfEmpty(row.get("RTPYR_MBL_TELNO")), // 휴대폰
+ row.get("SNDNG_DTL_ID"), // 문서번호 <- 발송상세아이디
+ row.get("TTL_NM"), // 문서제목
+ blankIfEmpty(row.get("ETC_CN")) // 비고
+ ));
+ ++rowIndex;
+ }
+ return xlsx.getDownloadable();
+ } catch (Exception e) {
+ throw runtimeException(e);
+ }
+ }
+
+ private InputStream getTemplate(String template) throws Exception {
+ return new ClassPathResource("template/" + template).getInputStream();
+ }
+
+ public void updateStatus(InputStream input) {
+ List read = parse(input);
+ }
+
+ static List parse(InputStream input) {
+ XLSReader xlsx = new XLSReader().open(input).worksheet(0);
+
+ List> setters = WoopyonMoa.setters(xlsx.rowValues(1));
+ return xlsx.readValues(2, WoopyonMoa::new, (row, index, str) -> setters.get(index).accept(row, str), null)
+ .filter(row -> !isEmpty(row.getDocNo()))
+ .toList();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/fims/wpm/service/bean/WoopyonMoaServiceBean.java b/src/main/java/cokr/xit/fims/wpm/service/bean/WoopyonMoaServiceBean.java
new file mode 100644
index 00000000..ef9da68b
--- /dev/null
+++ b/src/main/java/cokr/xit/fims/wpm/service/bean/WoopyonMoaServiceBean.java
@@ -0,0 +1,29 @@
+package cokr.xit.fims.wpm.service.bean;
+
+import java.io.InputStream;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import cokr.xit.fims.wpm.WoopyonMoaRequest;
+import cokr.xit.fims.wpm.service.WoopyonMoaService;
+import cokr.xit.foundation.Downloadable;
+import cokr.xit.foundation.component.AbstractServiceBean;
+
+@Service("woopyonMoaService")
+public class WoopyonMoaServiceBean extends AbstractServiceBean implements WoopyonMoaService {
+ @Resource(name = "woopyonMoaBean")
+ private WoopyonMoaBean woopyonMoaBean;
+
+ @Override
+ public Downloadable downloadRequest(WoopyonMoaRequest req) {
+ return woopyonMoaBean.downloadRequest(req);
+ }
+
+ @Override
+ public int updateStatus(InputStream input) {
+ WoopyonMoaBean.parse(input);
+ return 0;
+ }
+}
\ No newline at end of file
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 c8df9822..bac65dad 100644
--- a/src/main/resources/sql/mapper/fims/epst/epostRcptReg-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/epst/epostRcptReg-mapper.xml
@@ -63,64 +63,64 @@
- SELECT ERR.CON_KEY
- , ERR.CON_ORG
- , ERR.SNDNG_ID
- , ERR.RCEPT_ID
- , ERR.RCEPT_YMD
- , ERR.DATA_CD
- , ERR.DIV_KB
- , (GET_CODE_NM('EGP002', ERR.DIV_KB)) AS DIV_KB_NM
- , ERR.DFPAYYN
- , ERR.RCPT_KB
- , ERR.SEAL_CD
- , ERR.WORD_KB
- , ERR.MAIL_CNT
- , ERR.RECEV_CNT
- , ERR.ENV_CD
- , ERR.COLOR_YN
- , ERR.MM_YN
- , ERR.FLEX_CD
- , ERR.DM_CNT
- , ERR.SB_FG
- , ERR.APVL_NB
- , ERR.SEND_DATE
- , ERR.SEND_TIME
- , ERR.RELORSECT_CD
- , ERR.RECEV_SENDER_ORG_CODE
- , ERR.RECEV_SENDER_NM
- , ERR.RECEV_SENDER_ZIPCODE
- , ERR.RECEV_SENDER_ADDR
- , ERR.RECEV_SENDER_DETAILADDR
- , ERR.RECEV_SENDER_DEPART_TEL
- , ERR.RECEV_SENDER_DEPART_NM
- , ERR.RECEV_DIV_CD
- , ERR.RECEV_PRINT_DT
- , ERR.RECEV_PRINT_YEAR
- , ERR.RECEV_PRINT_MONTH
- , ERR.RECEV_PRINT_DAY
- , ERR.RECEV_SENDER_FAX
- , ERR.RECEV_SERDER_STAFF
- , ERR.RECEV_SENDER_EMAIL
- , ERR.REG_VAR_DATA1
- , ERR.REG_VAR_DATA2
- , ERR.REG_VAR_DATA3
- , ERR.REG_VAR_DATA4
- , ERR.REG_VAR_DATA5
- , ERR.JOB_CD
- , ERR.POST_PRCS_STTS_CD
- , (GET_CODE_NM('EGP012', ERR.POST_PRCS_STTS_CD)) AS POST_PRCS_STTS_NM
- , ERR.DEL_YN
- , ERR.REG_DT
- , ERR.RGTR
- , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = ERR.RGTR) AS RGTR_NM
- , ERR.MDFCN_DT
- , ERR.MDFR
- , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = ERR.MDFR) AS MDFR_NM
- , ERR.DEL_DT
- , ERR.DLTR
- , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = ERR.DLTR) AS DLTR_NM
- FROM TB_EPOST_RCPT_REG ERR
+ SELECT ERR.CON_KEY
+ , ERR.CON_ORG
+ , ERR.SNDNG_ID
+ , ERR.RCEPT_ID
+ , ERR.RCEPT_YMD
+ , ERR.DATA_CD
+ , ERR.DIV_KB
+ , (GET_CODE_NM('EGP002', ERR.DIV_KB)) AS DIV_KB_NM
+ , ERR.DFPAYYN
+ , ERR.RCPT_KB
+ , ERR.SEAL_CD
+ , ERR.WORD_KB
+ , ERR.MAIL_CNT
+ , ERR.RECEV_CNT
+ , ERR.ENV_CD
+ , ERR.COLOR_YN
+ , ERR.MM_YN
+ , ERR.FLEX_CD
+ , ERR.DM_CNT
+ , ERR.SB_FG
+ , ERR.APVL_NB
+ , ERR.SEND_DATE
+ , ERR.SEND_TIME
+ , ERR.RELORSECT_CD
+ , ERR.RECEV_SENDER_ORG_CODE
+ , ERR.RECEV_SENDER_NM
+ , ERR.RECEV_SENDER_ZIPCODE
+ , ERR.RECEV_SENDER_ADDR
+ , ERR.RECEV_SENDER_DETAILADDR
+ , ERR.RECEV_SENDER_DEPART_TEL
+ , ERR.RECEV_SENDER_DEPART_NM
+ , ERR.RECEV_DIV_CD
+ , ERR.RECEV_PRINT_DT
+ , ERR.RECEV_PRINT_YEAR
+ , ERR.RECEV_PRINT_MONTH
+ , ERR.RECEV_PRINT_DAY
+ , ERR.RECEV_SENDER_FAX
+ , ERR.RECEV_SERDER_STAFF
+ , ERR.RECEV_SENDER_EMAIL
+ , ERR.REG_VAR_DATA1
+ , ERR.REG_VAR_DATA2
+ , ERR.REG_VAR_DATA3
+ , ERR.REG_VAR_DATA4
+ , ERR.REG_VAR_DATA5
+ , ERR.JOB_CD
+ , ERR.POST_PRCS_STTS_CD
+ , (GET_CODE_NM('EGP012', ERR.POST_PRCS_STTS_CD)) AS POST_PRCS_STTS_NM
+ , ERR.DEL_YN
+ , ERR.REG_DT
+ , ERR.RGTR
+ , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = ERR.RGTR) AS RGTR_NM
+ , ERR.MDFCN_DT
+ , ERR.MDFR
+ , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = ERR.MDFR) AS MDFR_NM
+ , ERR.DEL_DT
+ , ERR.DLTR
+ , (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = ERR.DLTR) AS DLTR_NM
+ FROM TB_EPOST_RCPT_REG ERR