From c89fcc8f5a4af1cf28582fa0a84d5ba46505271d Mon Sep 17 00:00:00 2001 From: Kurt92 Date: Thu, 28 Aug 2025 18:13:42 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20epost=20=EA=B0=9C=EB=B0=9C=EC=A4=91.?= =?UTF-8?q?=20=ED=8C=8C=EC=8B=B1=ED=9B=84=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=A0=95=EB=A6=AC=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/entity/EpostDelivResult.java | 56 ++++++++++++++++ .../worker/domain/entity/EpostMakeResult.java | 34 ++++++++++ .../domain/entity/EpostMakeResultId.java | 17 +++++ .../domain/entity/EpostRceptResult.java | 28 ++++---- .../repo/cp/CpEpostDelivResultRepository.java | 7 ++ .../repo/cp/CpEpostRceptResultRepository.java | 7 ++ .../repo/ep/EpEpostDelivResultRepository.java | 7 ++ .../repo/ep/EpEpostRceptResultRepository.java | 7 ++ .../worker/scheduler/epost/dto/EPostDto.java | 4 +- .../repository/EPostQueryDslRepository.java | 64 ++++++++++++++++++- .../scheduler/epost/service/EPostService.java | 62 ++++++++++++++++++ .../text/impl/EpostTextFileParser.java | 4 +- 12 files changed, 280 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/worker/domain/entity/EpostDelivResult.java create mode 100644 src/main/java/com/worker/domain/entity/EpostMakeResult.java create mode 100644 src/main/java/com/worker/domain/entity/EpostMakeResultId.java create mode 100644 src/main/java/com/worker/domain/repo/cp/CpEpostDelivResultRepository.java create mode 100644 src/main/java/com/worker/domain/repo/cp/CpEpostRceptResultRepository.java create mode 100644 src/main/java/com/worker/domain/repo/ep/EpEpostDelivResultRepository.java create mode 100644 src/main/java/com/worker/domain/repo/ep/EpEpostRceptResultRepository.java diff --git a/src/main/java/com/worker/domain/entity/EpostDelivResult.java b/src/main/java/com/worker/domain/entity/EpostDelivResult.java new file mode 100644 index 0000000..f527cc9 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/EpostDelivResult.java @@ -0,0 +1,56 @@ +package com.worker.domain.entity; + +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Table( + name = "epost_deliv_result", + indexes = { + @Index(name = "EPOST_DELIV_RESULT_IDX1", columnList = "CON_KEY, REGINO, DELIVYMD, DELIVHHMI") + } +) +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class EpostDelivResult { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "SEQ_KEY", nullable = false, updatable = false) + private Long seqKey; + + @Column(name = "CON_KEY", nullable = false, length = 30) + private String conKey; + + @Column(name = "REGINO", nullable = false, length = 13) + private String regino; + + @Column(name = "DELIVYMD", nullable = false, length = 8) + private String delivYmd; + + @Column(name = "DELIVHHMI", nullable = false, length = 4) + private String delivHhmi; + + @Column(name = "OUTSIDUSERID", length = 13) + private String outsidUserId; + + @Column(name = "DELIVRSLTCD", length = 2) + private String delivRsltCd; + + @Column(name = "NONDELIVREASNCD", length = 2) + private String nonDelivReasnCd; + + @Column(name = "NONDELIVREASNCDNM", length = 60) + private String nonDelivReasnCdNm; + + @Column(name = "SUBRECPRSNNM", length = 70) + private String subRecPrsnNm; + + @Column(name = "RELRECPRSNCD", length = 2) + private String relRecPrsnCd; + + @Column(name = "RELRECPRSNCDNM", length = 100) + private String relRecPrsnCdNm; +} diff --git a/src/main/java/com/worker/domain/entity/EpostMakeResult.java b/src/main/java/com/worker/domain/entity/EpostMakeResult.java new file mode 100644 index 0000000..5e14039 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/EpostMakeResult.java @@ -0,0 +1,34 @@ +package com.worker.domain.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "epost_make_result") +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@IdClass(EpostMakeResultId.class) +public class EpostMakeResult { + + @Id + @Column(name = "CON_KEY", nullable = false, length = 30) + private String conKey; + + @Id + @Column(name = "RGST_NMBR", nullable = false, length = 13) + private String rgstNmbr; + + @Column(name = "RELETCDATA", length = 200) + private String reletcData; + + @Column(name = "DATA_CD", length = 2) + private String dataCd; + + @Column(name = "MAIL_CNT", length = 5) + private String mailCnt; +} diff --git a/src/main/java/com/worker/domain/entity/EpostMakeResultId.java b/src/main/java/com/worker/domain/entity/EpostMakeResultId.java new file mode 100644 index 0000000..aae3a2e --- /dev/null +++ b/src/main/java/com/worker/domain/entity/EpostMakeResultId.java @@ -0,0 +1,17 @@ +package com.worker.domain.entity; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode +public class EpostMakeResultId implements Serializable { + private String conKey; + private String rgstNmbr; +} diff --git a/src/main/java/com/worker/domain/entity/EpostRceptResult.java b/src/main/java/com/worker/domain/entity/EpostRceptResult.java index 27e42a4..2708307 100644 --- a/src/main/java/com/worker/domain/entity/EpostRceptResult.java +++ b/src/main/java/com/worker/domain/entity/EpostRceptResult.java @@ -1,14 +1,18 @@ package com.worker.domain.entity; -import jakarta.persistence.Column; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +@Entity +@Table( + name = "epost_rcept_result", + indexes = { + @Index(name = "EPOST_RCEPT_RESULT_IDX2", columnList = "RELETCDATA, DIV_KB, EXTRI_REGYMD") + } +) @Getter @NoArgsConstructor @AllArgsConstructor @@ -18,19 +22,19 @@ public class EpostRceptResult { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "RR_CODE", nullable = false, updatable = false) - private Integer rrCode; + private Long rrCode; - @Column(name = "CON_ORG", length = 13, nullable = false) + @Column(name = "CON_ORG", nullable = false, length = 13) private String conOrg; - @Column(name = "RELORSECT_CD", length = 15, nullable = false) - private String relOrsectCd; + @Column(name = "RELORSECT_CD", nullable = false, length = 15) + private String relOrSectCd; - @Column(name = "RELETCDATA", length = 200, nullable = false) + @Column(name = "RELETCDATA", nullable = false, length = 200) private String reletcData; - @Column(name = "EXTRI_REGYMD", length = 8, nullable = false) - private String extriRegymd; + @Column(name = "EXTRI_REGYMD", nullable = false, length = 8) + private String extriRegYmd; @Column(name = "RCEPT_YMD", length = 8) private String rceptYmd; @@ -38,7 +42,7 @@ public class EpostRceptResult { @Column(name = "RCEPT_ID", length = 5) private String rceptId; - @Column(name = "DIV_KB", length = 3, nullable = false) + @Column(name = "DIV_KB", nullable = false, length = 3) private String divKb; @Column(name = "RCEPT_CNT", nullable = false) diff --git a/src/main/java/com/worker/domain/repo/cp/CpEpostDelivResultRepository.java b/src/main/java/com/worker/domain/repo/cp/CpEpostDelivResultRepository.java new file mode 100644 index 0000000..8b2b1b8 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpEpostDelivResultRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.EpostDelivResult; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CpEpostDelivResultRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/cp/CpEpostRceptResultRepository.java b/src/main/java/com/worker/domain/repo/cp/CpEpostRceptResultRepository.java new file mode 100644 index 0000000..ee559eb --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpEpostRceptResultRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.EpostRceptResult; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CpEpostRceptResultRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpEpostDelivResultRepository.java b/src/main/java/com/worker/domain/repo/ep/EpEpostDelivResultRepository.java new file mode 100644 index 0000000..fc1cc2e --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpEpostDelivResultRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.EpostDelivResult; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EpEpostDelivResultRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpEpostRceptResultRepository.java b/src/main/java/com/worker/domain/repo/ep/EpEpostRceptResultRepository.java new file mode 100644 index 0000000..7bf8178 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpEpostRceptResultRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.EpostRceptResult; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EpEpostRceptResultRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java b/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java index c5812b9..e787b16 100644 --- a/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java +++ b/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java @@ -86,8 +86,8 @@ public class EPostDto { public static class Deliv { private String conKey; private String regiNo; - private String delivYmd; - private String delivHhmd; + private String delivYm; + private String delivHhmi; private String delivRsltCd; private String sendDate; diff --git a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java index 959d7f0..1f32d31 100644 --- a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java +++ b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java @@ -1,19 +1,81 @@ package com.worker.scheduler.epost.repository; +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.worker.scheduler.epost.dto.EPostDto; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; +import java.util.List; + +import static com.worker.domain.entity.QEpostDelivResult.epostDelivResult; +import static com.worker.domain.entity.QEpostRceptResult.epostRceptResult; + + +@Slf4j @Repository @RequiredArgsConstructor public class EPostQueryDslRepository { + private final JPAQueryFactory queryFactory; + + public List findDelivResult(List dtos) { + + List conKeys = dtos.stream() + .map(EPostDto.Deliv::getConKey) + .toList(); + + List reginos = dtos.stream() + .map(EPostDto.Deliv::getRegiNo) + .toList(); + + return queryFactory + .select( + Projections.fields( + EPostDto.Deliv.class, + epostDelivResult.conKey + + + ) + ) + .from(epostDelivResult) + .where( + epostDelivResult.conKey.in(conKeys), + epostDelivResult.regino.in(reginos) + ) + .fetch(); + } + + public List findMakeResult(List dtos) { + return null; + } + + public List findRceptResult(List dtos) { + + return null; + } - public void updateAAATable() { + public void updateDelivResult(EPostDto.Deliv dto) { + queryFactory + .update(epostDelivResult) + .set(epostDelivResult.delivRsltCd, dto.getResultCd()) + .where( + epostDelivResult.conKey.eq(dto.getConKey()) + ) + .execute(); + } + public void updateMakeResult(List dtos) { + } + public void updateRceptResult(List dtos) { } + + + } diff --git a/src/main/java/com/worker/scheduler/epost/service/EPostService.java b/src/main/java/com/worker/scheduler/epost/service/EPostService.java index 3e87db7..310c116 100644 --- a/src/main/java/com/worker/scheduler/epost/service/EPostService.java +++ b/src/main/java/com/worker/scheduler/epost/service/EPostService.java @@ -2,10 +2,17 @@ package com.worker.scheduler.epost.service; import com.worker.domain.entity.CpSetinfo; import com.worker.domain.entity.CpSetinfoId; +import com.worker.domain.entity.EpostDelivResult; +import com.worker.domain.repo.cp.CpEpostDelivResultRepository; +import com.worker.domain.repo.cp.CpEpostRceptResultRepository; import com.worker.domain.repo.cp.CpSetinfoRepository; +import com.worker.domain.repo.ep.EpEpostDelivResultRepository; +import com.worker.domain.repo.ep.EpEpostRceptResultRepository; import com.worker.domain.repo.ep.EpSetinfoRepository; import com.worker.scheduler.epost.dto.EPostDto; +import com.worker.scheduler.epost.repository.EPostQueryDslRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; @@ -14,14 +21,21 @@ import java.util.List; @Service @RequiredArgsConstructor +@Slf4j public class EPostService { private final Environment env; private final CpSetinfoRepository cpSetinfoRepository; private final EpSetinfoRepository epSetinfoRepository; + private final CpEpostRceptResultRepository cpEpostRceptResultRepository; + private final EpEpostRceptResultRepository epEpostRceptResultRepository; + private final CpEpostDelivResultRepository cpEpostDelivResultRepository; + private final EpEpostDelivResultRepository epEpostDelivResultRepository; + private final EPostQueryDslRepository ePostQueryDslRepository; + public EPostDto.SetInfo findSetInfo() { // 필요한 값들 @@ -86,12 +100,60 @@ public class EPostService { public void saveEpostResult(List parseResult) { + // 파싱 리절트 cp ep 분리해서 넣기 + // rcept , make , deliv 세개가 있음. + // 다 같은 폴더로 불규칙하게 들어오니까 일단 파싱 리절트안에 전부 해당키로 나눠서 담아놨음. + // parseResult가 리스트니까 하나씩 돌면서 키값에 맞는 매서드 호출 + + List delivs = new ArrayList<>(); + List prts = new ArrayList<>(); + List recvs = new ArrayList<>(); + + parseResult.forEach(e -> { + switch(e.getKind()) { + case "deliv" -> delivs.addAll(ePostQueryDslRepository.findDelivResult(e.getResult())); +// case "rcept" -> +// case "make" -> + } + + + }); + + log.info(delivs.toString()); + log.info(prts.toString()); + log.info(recvs.toString()); + + if (delivs != null && !delivs.isEmpty()) insertDelivResults(delivs); + if (prts != null && !prts.isEmpty()) insertPrtResults(prts); + if (recvs != null && !recvs.isEmpty()) insertRecvResults(recvs); + + + + } + private void insertDelivResults(List delivs) { + List entities = delivs.stream() + .map(item -> EpostDelivResult.builder() + .conKey(item.getConKey()) + .regino(item.getRegiNo()) + .delivYmd(item.getDelivYm()) + .delivHhmi(item.getDelivHhmi()) + .delivRsltCd(item.getDelivRsltCd()) + .nonDelivReasnCd(null) // 값 없으면 null 권장 + .nonDelivReasnCdNm(null) + .subRecPrsnNm(null) + .relRecPrsnCd(null) + .relRecPrsnCdNm(null) + .build()) + .toList(); + cpEpostDelivResultRepository.saveAll(entities); } + private void insertPrtResults(List prts) {} + private void insertRecvResults(List recvs) {} private EPostDto.EPostInfo buildEPostInfo(CpSetinfo ePostInfo, CpSetinfo ePostDocInfo) { diff --git a/src/main/java/com/worker/util/fileReader/text/impl/EpostTextFileParser.java b/src/main/java/com/worker/util/fileReader/text/impl/EpostTextFileParser.java index 57e2586..9c76f19 100644 --- a/src/main/java/com/worker/util/fileReader/text/impl/EpostTextFileParser.java +++ b/src/main/java/com/worker/util/fileReader/text/impl/EpostTextFileParser.java @@ -109,8 +109,8 @@ public class EpostTextFileParser implements FileParserInterface