diff --git a/src/main/java/com/worker/domain/entity/CpGojiPrt.java b/src/main/java/com/worker/domain/entity/CpGojiPrt.java index 6d6fb10..1d6a20e 100644 --- a/src/main/java/com/worker/domain/entity/CpGojiPrt.java +++ b/src/main/java/com/worker/domain/entity/CpGojiPrt.java @@ -1,10 +1,16 @@ package com.worker.domain.entity; import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; @Entity @Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder @Table(name = "cp_goji_prt", indexes = { @Index(name = "CP_GOJI_PRT_IDX1", columnList = "GP_MMCODE, GP_SDATE"), diff --git a/src/main/java/com/worker/domain/repo/cp/CpEPostSenderDetailRepository.java b/src/main/java/com/worker/domain/repo/cp/CpEPostSenderDetailRepository.java new file mode 100644 index 0000000..61d8a4a --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpEPostSenderDetailRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.EpostSenderDetail; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CpEPostSenderDetailRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/cp/CpEPostSenderRegRepository.java b/src/main/java/com/worker/domain/repo/cp/CpEPostSenderRegRepository.java new file mode 100644 index 0000000..abce32e --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpEPostSenderRegRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.EpostSenderReg; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CpEPostSenderRegRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/cp/CpGojitRepository.java b/src/main/java/com/worker/domain/repo/cp/CpGojitRepository.java new file mode 100644 index 0000000..074c24f --- /dev/null +++ b/src/main/java/com/worker/domain/repo/cp/CpGojitRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.cp; + +import com.worker.domain.entity.CpGojit; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface CpGojitRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpEPostSenderDetailRepository.java b/src/main/java/com/worker/domain/repo/ep/EpEPostSenderDetailRepository.java new file mode 100644 index 0000000..3f3182a --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpEPostSenderDetailRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.EpostSenderDetail; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EpEPostSenderDetailRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpEPostSenderRegRepository.java b/src/main/java/com/worker/domain/repo/ep/EpEPostSenderRegRepository.java new file mode 100644 index 0000000..8808029 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpEPostSenderRegRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.EpostSenderReg; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EpEPostSenderRegRepository extends JpaRepository { +} diff --git a/src/main/java/com/worker/domain/repo/ep/EpGojitRepository.java b/src/main/java/com/worker/domain/repo/ep/EpGojitRepository.java new file mode 100644 index 0000000..3bd1981 --- /dev/null +++ b/src/main/java/com/worker/domain/repo/ep/EpGojitRepository.java @@ -0,0 +1,7 @@ +package com.worker.domain.repo.ep; + +import com.worker.domain.entity.CpGojit; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EpGojitRepository extends JpaRepository { +} 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 9ed95c8..c5b998c 100644 --- a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java +++ b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java @@ -13,7 +13,9 @@ import java.util.function.Function; import java.util.stream.Collectors; import static com.worker.domain.entity.QCpGojiPrt.cpGojiPrt; +import static com.worker.domain.entity.QCpGojiSendHist.cpGojiSendHist; import static com.worker.domain.entity.QCpGojit.cpGojit; +import static com.worker.domain.entity.QEpostDelivResult.epostDelivResult; import static com.worker.domain.entity.QEpostSenderDetail.epostSenderDetail; import static com.worker.domain.entity.QEpostSenderReg.epostSenderReg; @@ -223,8 +225,20 @@ public class EPostQueryDslRepository { } + public Long findEpostDelivResultMaxKey(JPAQueryFactory queryFactory, String conKey) { + return queryFactory + .select(epostDelivResult.seqKey.max()) + .from(epostDelivResult) + .where(epostDelivResult.conKey.eq(conKey)) + .fetchOne(); + } - - + public String findGojiHistMAxKey(JPAQueryFactory queryFactory, String key) { + return queryFactory + .select(cpGojiSendHist.ghCode.max()) + .from(cpGojiSendHist) + .where(cpGojiSendHist.ghCode.startsWith(key)) + .fetchOne(); + } } 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 1b7485b..f970dfe 100644 --- a/src/main/java/com/worker/scheduler/epost/service/EPostService.java +++ b/src/main/java/com/worker/scheduler/epost/service/EPostService.java @@ -4,14 +4,8 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.querydsl.jpa.impl.JPAQueryFactory; import com.worker.domain.entity.*; -import com.worker.domain.repo.cp.CpEpostDelivResultRepository; -import com.worker.domain.repo.cp.CpEpostRceptResultRepository; -import com.worker.domain.repo.cp.CpGojiSendHistRepository; -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.EpGojiSendHistRepository; -import com.worker.domain.repo.ep.EpSetinfoRepository; +import com.worker.domain.repo.cp.*; +import com.worker.domain.repo.ep.*; import com.worker.scheduler.epost.dto.EPostDto; import com.worker.scheduler.epost.repository.EPostQueryDslRepository; import lombok.RequiredArgsConstructor; @@ -21,6 +15,8 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -34,12 +30,19 @@ public class EPostService { private final CpSetinfoRepository cpSetinfoRepository; private final EpSetinfoRepository epSetinfoRepository; + private final CpGojitRepository cpGojitRepository; + private final EpGojitRepository epGojitRepository; + private final CpGojiSendHistRepository cpGojiSendHistRepository; + private final EpGojiSendHistRepository epGojiSendHistRepository; private final CpEpostRceptResultRepository cpEpostRceptResultRepository; private final EpEpostRceptResultRepository epEpostRceptResultRepository; private final CpEpostDelivResultRepository cpEpostDelivResultRepository; private final EpEpostDelivResultRepository epEpostDelivResultRepository; - private final CpGojiSendHistRepository cpGojiSendHistRepository; - private final EpGojiSendHistRepository epGojiSendHistRepository; + private final CpEPostSenderDetailRepository cpEPostSenderDetailRepository; + private final EpEPostSenderDetailRepository epEPostSenderDetailRepository; + private final CpEPostSenderRegRepository cpEPostSenderRegRepository; + private final EpEPostSenderRegRepository epEPostSenderRegRepository; + private final EPostQueryDslRepository ePostQueryDslRepository; @@ -51,7 +54,10 @@ public class EPostService { @Autowired @Qualifier("epQueryFactory") private JPAQueryFactory epQueryFactory; - + @Autowired + private CpGojiPrtRepository cpGojiPrtRepository; + @Autowired + private EpGojiPrtRepository epGojiPrtRepository; public void findEPostSendTarget() { @@ -112,7 +118,10 @@ public class EPostService { log.info(epRecvs.toString()); if(cpDelivs != null && !cpDelivs.isEmpty()) { - + insertDelivResults(cpDelivs, parseResult, "cp"); + } + if (epDelivs != null && !epDelivs.isEmpty()) { + insertDelivResults(epDelivs, parseResult, "ep"); } // if (delivs != null && !delivs.isEmpty()) insertDelivResults(delivs); @@ -123,37 +132,92 @@ public class EPostService { } - private void insertDelivResults(List delivs, List parseResults) { + private void insertDelivResults(List delivs, List parseResults, String dbKind) { - List finalCpResults = new ArrayList<>(); - List finalEpResults = new ArrayList<>(); + List cpGojiSendHists = new ArrayList<>(); + List epostDelivResults = new ArrayList<>(); List delivFileResults = parseResults.stream() .filter(r -> "deliv".equalsIgnoreCase(r.getKind())) .flatMap(r -> ((List) r.getResult()).stream()) .collect(Collectors.toList()); - delivFileResults.forEach(fileResult -> { - delivs.forEach(deliv -> { - Long resultTime = Long.valueOf(deliv.getGpSendDate() + deliv.getGpSendTime()); + for(int i = 0; i < delivs.size(); i++) { + Long resultTime = Long.valueOf(delivs.get(i).getGpSendDate() + delivs.get(i).getGpSendTime()); Long fileTime = Long.valueOf( fileResult.getDelivymd() + fileResult.getDelivhhmi()); + Long maxKey = findMaxKey(dbKind, delivs.get(i).getConKey()) + i; + + String newState = null; + if(fileResult.getNondelivreasncdnm().equals("")) newState = "4"; + else newState = "5"; + + Boolean isSkip = false; + if(resultTime > fileTime) isSkip = true; + if(Long.parseLong(delivs.get(i).getGpState()) > 5) isSkip = true; + + if(!isSkip) { + + //epost_sender_detail > deliv_result_code 업데이트 (where콘키,등기번호) + EpostSenderDetail epostSenderDetail = EpostSenderDetail.builder() + .delivResultCode(Math.toIntExact(maxKey)) + .conKey(fileResult.getConKey()) + .rgstNmbr(fileResult.getRegiNo()) + .build(); + //epost_sender_detail 업데이트 + if(dbKind.equals("cp")) cpEPostSenderDetailRepository.save(epostSenderDetail); + else epEPostSenderDetailRepository.save(epostSenderDetail); + + //cp_goji_prt 업데이트 + CpGojiPrt cpGojiPrt = CpGojiPrt.builder() + .gpSggcode(delivs.get(i).getGpSggcode()) + .gpSendDate(fileResult.getDelivymd()) + .gpSendTime(fileResult.getDelivhhmi()) + .gpReturnCd(fileResult.getNondelivreasncdnm()) + .gpRecvName(fileResult.getSubrecprsnnm()) + .gpRecvRelt(fileResult.getRelrecprsncdnm()) + .gpState(newState) + .build(); + //cp_goji_prt 업데이트 + if(dbKind.equals("cp")) cpGojiPrtRepository.save(cpGojiPrt); + else epGojiPrtRepository.save(cpGojiPrt); + + //deliv.getPostProcSt()가 95보다 작으면 처리상태 변경 + //epost_send_reg의 post_proc_stt, cp_gojit의 tg_post_proc_stt 업데이트 + if(Long.parseLong(delivs.get(i).getPostProcSt()) < 95) { + CpGojit gojit = CpGojit.builder() + .tgPostProcStt("95") + .tgCode(delivs.get(i).getGpCode()) + .build(); + if(dbKind.equals("cp")) cpGojitRepository.save(gojit); + else epGojitRepository.save(gojit); + + EpostSenderReg epostSenderReg = EpostSenderReg.builder() + .postProcStt("95") + .conKey(delivs.get(i).getConKey()) + .build(); + if(dbKind.equals("cp")) cpEPostSenderRegRepository.save(epostSenderReg); + else epEPostSenderRegRepository.save(epostSenderReg); + + } + } CpGojiSendHist cpGojiSendHist = CpGojiSendHist.builder() - .ghCode("//맥스값 추출 + 1") -// .ghGpcode() -// .ghConKey() -// .ghRegino() -// .ghSendDate() -// .ghSendTime() -// .ghReturnCdStr() -// .ghRecvName() -// .ghRecvRelt() -// .ghResultCd() -// .ghReturnCd() -// .ghRecvReltCd() + .ghCode(makeGojiHistMaxKey(dbKind)) + .ghGpcode(Math.toIntExact(delivs.get(i).getGpCode())) + .ghConKey(delivs.get(i).getConKey()) + .ghRegino(fileResult.getRegiNo()) + .ghSendDate(fileResult.getDelivymd()) + .ghSendTime(fileResult.getDelivhhmi()) + .ghReturnCdStr(fileResult.getNondelivreasncdnm()) + .ghRecvName(fileResult.getSubrecprsnnm()) + .ghRecvRelt(fileResult.getRelrecprsncdnm()) + .ghResultCd(fileResult.getDelivrsltcd()) + .ghReturnCd(fileResult.getNondelivreasncd()) + .ghRecvReltCd(fileResult.getRelrecprsncd()) .build(); + cpGojiSendHists.add(cpGojiSendHist); EpostDelivResult epostDelivResult = EpostDelivResult.builder() @@ -168,13 +232,20 @@ public class EPostService { .relRecPrsnCd(fileResult.getRelrecprsncd()) .relRecPrsnCdNm(fileResult.getRelrecprsncdnm()) .build(); + epostDelivResults.add(epostDelivResult); + } - - - }); }); + if(dbKind.equals("cp")) { + cpGojiSendHistRepository.saveAll(cpGojiSendHists); + cpEpostDelivResultRepository.saveAll(epostDelivResults); + } else { + epGojiSendHistRepository.saveAll(cpGojiSendHists); + epEpostDelivResultRepository.saveAll(epostDelivResults); + } + } @@ -224,7 +295,29 @@ public class EPostService { } } + private Long findMaxKey(String dbKind, String conKey) { + Long maxKey = 0L; + if(dbKind.equals("cp")) maxKey = ePostQueryDslRepository.findEpostDelivResultMaxKey(cpQueryFactory, conKey); + else maxKey = ePostQueryDslRepository.findEpostDelivResultMaxKey(epQueryFactory, conKey); + return maxKey; + } + private String makeGojiHistMaxKey(String dbKind) { + String maxKey = ""; + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + String tempKeyByNow = LocalDateTime.now().format(dtf); + + if(dbKind.equals("cp")) maxKey = ePostQueryDslRepository.findGojiHistMAxKey(cpQueryFactory, tempKeyByNow); + else maxKey = ePostQueryDslRepository.findGojiHistMAxKey(cpQueryFactory, tempKeyByNow); + + if(maxKey != null && maxKey.length() > 0) { + Long maxKetLong = Long.parseLong(maxKey) + 1L; + maxKey = maxKetLong.toString(); + } else maxKey = tempKeyByNow + "0001"; + + return maxKey; + } } +