feat : epost 프로세스 재정립. queryDsl 멀티 데이터소스 설정중. -> cp만 되고 ep안되는중임.

master
Kurt92 4 months ago
parent c89fcc8f5a
commit e51d3d58de

@ -0,0 +1,205 @@
package com.worker.domain.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "epost_sender_detail")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@IdClass(EpostSenderDetailId.class)
public class EpostSenderDetail {
@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 = "RECEV_SEQ", length = 20)
private String recevSeq;
@Column(name = "RECEV_CODE", length = 10)
private String recevCode;
@Column(name = "RECEV_BAR1D", length = 18)
private String recevBar1d;
@Column(name = "RECEV_BAR2D", length = 170)
private String recevBar2d;
@Column(name = "RECEV_BILL_NUMBER", length = 21)
private String recevBillNumber;
@Column(name = "RECEV_DOC_CD1", length = 60)
private String recevDocCd1;
@Column(name = "RECEV_DOC_CD2", length = 30)
private String recevDocCd2;
@Column(name = "RECEV_DOC_CD3", length = 6)
private String recevDocCd3;
@Column(name = "RECEV_DOC_CD4", length = 60)
private String recevDocCd4;
@Column(name = "RECEV_DOC_CD5", length = 15)
private String recevDocCd5;
@Column(name = "RECEV_SUBJ1", length = 6)
private String recevSubj1;
@Column(name = "RECEV_SUBJ2", length = 6)
private String recevSubj2;
@Column(name = "RECEV_SUBJ3", length = 14)
private String recevSubj3;
@Column(name = "RECEV_VIOLATE_DT", length = 30)
private String recevViolateDt;
@Column(name = "RECEV_VIOLATE_DONG", length = 39)
private String recevViolateDong;
@Column(name = "RECEV_VIOLATE_PLACE", length = 80)
private String recevViolatePlace;
@Column(name = "RECEV_LAWS", length = 70)
private String recevLaws;
@Column(name = "RECEV_PAY_NUMBER1", length = 17)
private String recevPayNumber1;
@Column(name = "RECEV_PAY_NUMBER2", length = 15)
private String recevPayNumber2;
@Column(name = "RECEV_OCR0", length = 32)
private String recevOcr0;
@Column(name = "RECEV_OCR1", length = 54)
private String recevOcr1;
@Column(name = "RECEV_OCR2", length = 54)
private String recevOcr2;
@Column(name = "RECEV_ONLINE_PAY_NUMBER", length = 30)
private String recevOnlinePayNumber;
@Column(name = "RECEV_VACCOUNT_NUMBER", length = 50)
private String recevVaccountNumber;
@Column(name = "RECEV_VACCOUNT_NUMBER2", length = 50)
private String recevVaccountNumber2;
@Column(name = "RECEV_VACCOUNT_NUMBER3", length = 50)
private String recevVaccountNumber3;
@Column(name = "RECEV_VACCOUNT_NUMBER4", length = 50)
private String recevVaccountNumber4;
@Column(name = "RECEV_VACCOUNT_NUMBER5", length = 50)
private String recevVaccountNumber5;
@Column(name = "RECEV_VACCOUNT_NUMBER6", length = 50)
private String recevVaccountNumber6;
@Column(name = "RECEV_VACCOUNT_NUMBER7", length = 50)
private String recevVaccountNumber7;
@Column(name = "RECEV_VACCOUNT_NUMBER8", length = 50)
private String recevVaccountNumber8;
@Column(name = "RECEV_VACCOUNT_NUMBER9", length = 50)
private String recevVaccountNumber9;
@Column(name = "RECEV_VACCOUNT_NUMBER10", length = 50)
private String recevVaccountNumber10;
@Column(name = "RECEV_VACCOUNT_NUMBER11", length = 50)
private String recevVaccountNumber11;
@Column(name = "RECEV_FINE_PRICE", length = 10)
private String recevFinePrice;
@Column(name = "RECEV_PAY_PRICE", length = 10)
private String recevPayPrice;
@Column(name = "RECEV_PAY_DT", length = 15)
private String recevPayDt;
@Column(name = "RECEV_PAY_IN_DATE", length = 20)
private String recevPayInDate;
@Column(name = "RECEV_PAY_IN_PRICE", length = 20)
private String recevPayInPrice;
@Column(name = "RECEV_PAY_IN_ADD_PRICE", length = 20)
private String recevPayInAddPrice;
@Column(name = "RECEV_PAY_IN_DEFAULT_PRICE", length = 20)
private String recevPayInDefaultPrice;
@Column(name = "RECEV_PAY_OUT_DATE", length = 20)
private String recevPayOutDate;
@Column(name = "RECEV_PAY_OUT_PRICE", length = 20)
private String recevPayOutPrice;
@Column(name = "RECEV_PAY_OUT_ADD_PRICE", length = 20)
private String recevPayOutAddPrice;
@Column(name = "RECEV_PAY_OUT_DEFAULT_PRICE", length = 20)
private String recevPayOutDefaultPrice;
@Column(name = "RECEV_CAR_NUMBER", length = 50)
private String recevCarNumber;
@Column(name = "RECEV_CAR_OWNER_ZIPCODE", length = 6)
private String recevCarOwnerZipcode;
@Column(name = "RECEV_CAR_OWNER_ADDR", length = 100)
private String recevCarOwnerAddr;
@Column(name = "RECEV_CAR_OWNER_DETAILADDR", length = 160)
private String recevCarOwnerDetailaddr;
@Column(name = "RECEV_CAR_OWNER_NM", length = 60)
private String recevCarOwnerNm;
@Column(name = "RECEV_CAR_OWNER_SSN", length = 6)
private String recevCarOwnerSsn;
@Column(name = "RECEV_EVIDENCE_NUMBER", length = 24)
private String recevEvidenceNumber;
@Column(name = "RECEV_PHOTO_CNT")
private Integer recevPhotoCnt; // int(2)
@Column(name = "RECEV_PHOTO_FILE1", length = 80)
private String recevPhotoFile1;
@Column(name = "RECEV_PHOTO_FILE2", length = 80)
private String recevPhotoFile2;
@Column(name = "RECEV_PHOTO_FILE3", length = 80)
private String recevPhotoFile3;
@Column(name = "RECEV_PHOTO_FILE4", length = 80)
private String recevPhotoFile4;
@Column(name = "DELIV_RESULT_CODE")
private Integer delivResultCode; // int(10)
@Column(name = "MAKE_RESULT_CD", length = 2)
private String makeResultCd;
@Column(name = "POST_SEND_STATE", length = 2)
private String postSendState;
}

@ -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 EpostSenderDetailId implements Serializable {
private String conKey;
private String rgstNmbr;
}

@ -0,0 +1,149 @@
package com.worker.domain.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Table(
name = "epost_sender_reg",
indexes = {
@Index(name = "EPOST_SENDER_REG_IDX1", columnList = "REG_YMD, POST_PROC_STT"),
@Index(name = "EPOST_SENDER_REG_IDX2", columnList = "REG_YMD, RELORSECT_CD, POST_PROC_STT")
}
)
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EpostSenderReg {
@Id
@Column(name = "CON_KEY", nullable = false, length = 30)
private String conKey;
@Column(name = "RCEPT_ID", length = 5) // char(5)
private String rceptId;
@Column(name = "DATA_CD", length = 2)
private String dataCd;
@Column(name = "DIV_KB", length = 3)
private String divKb;
@Column(name = "DFPAYYN", length = 3)
private String dfpayyn;
@Column(name = "RCPT_KB", length = 3)
private String rcptKb;
@Column(name = "SEAL_CD", length = 3)
private String sealCd;
@Column(name = "WORD_KB", length = 3)
private String wordKb;
@Column(name = "MAIL_CNT")
private Integer mailCnt; // int(5)
@Column(name = "RECEV_CNT")
private Integer recevCnt; // int(7)
@Column(name = "ENV_CD", length = 3)
private String envCd;
@Column(name = "COLOR_YN", length = 1)
private String colorYn;
@Column(name = "MM_YN", length = 1)
private String mmYn;
@Column(name = "FLEX_CD", length = 1)
private String flexCd;
@Column(name = "DM_CNT")
private Integer dmCnt; // int(2)
@Column(name = "SB_FG", length = 1)
private String sbFg;
@Column(name = "APVL_NB", length = 10)
private String apvlNb;
@Column(name = "SEND_DATE", length = 8)
private String sendDate;
@Column(name = "SEND_TIME", length = 6)
private String sendTime;
@Column(name = "RELORSECT_CD", length = 15)
private String relOrSectCd;
@Column(name = "RECEV_SENDER_ORG_CODE", length = 15)
private String recevSenderOrgCode;
@Column(name = "RECEV_SENDER_NM", length = 40)
private String recevSenderNm;
@Column(name = "RECEV_SENDER_ZIPCODE", length = 6)
private String recevSenderZipcode;
@Column(name = "RECEV_SENDER_ADDR", length = 60)
private String recevSenderAddr;
@Column(name = "RECEV_SENDER_DETAIL_ADDR", length = 100)
private String recevSenderDetailAddr;
@Column(name = "RECEV_SENDER_DEPART_TEL", length = 60)
private String recevSenderDepartTel;
@Column(name = "RECEV_SENDER_DEPART_NM", length = 30)
private String recevSenderDepartNm;
@Column(name = "RECEV_DIV_CD", length = 1)
private String recevDivCd;
@Column(name = "RECEV_PRINT_DT", length = 21)
private String recevPrintDt;
@Column(name = "RECEV_PRINT_YEAR", length = 4)
private String recevPrintYear;
@Column(name = "RECEV_PRINT_MONTH", length = 2)
private String recevPrintMonth;
@Column(name = "RECEV_PRINT_DAY", length = 2)
private String recevPrintDay;
@Column(name = "RECEV_SENDER_FAX", length = 20)
private String recevSenderFax;
@Column(name = "RECEV_SERDER_STAFF", length = 30) // 원문 컬럼명 그대로
private String recevSerderStaff;
@Column(name = "RECEV_SENDER_EMAIL", length = 60)
private String recevSenderEmail;
@Column(name = "JOB_CD", length = 4)
private String jobCd;
@Column(name = "POST_PROC_STT", length = 2)
private String postProcStt;
@Column(name = "DELETE_AT", length = 1)
private String deleteAt;
@Column(name = "REG_YMD", length = 8)
private String regYmd;
@Column(name = "RCEPT_YMD", length = 8)
private String rceptYmd;
@Column(name = "REG_SYS_SE", length = 10)
private String regSysSe;
@Column(name = "TG_CODE", length = 10)
private String tgCode;
}

@ -1,6 +1,7 @@
package com.worker.framework.JPAConf;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
@ -18,7 +19,7 @@ import javax.sql.DataSource;
@Configuration
@EnableJpaRepositories(
basePackages = "com.worker.domain.repo.cp", // Clean Parking용 레포지토리 경로
basePackages = "com.worker.domain.repo.cp",
entityManagerFactoryRef = "cpEntityManagerFactory",
transactionManagerRef = "cpTransactionManager"
)
@ -31,13 +32,13 @@ public class CpDbConf {
return new DataSourceProperties();
}
@Bean
@Bean(name = "cpDataSource")
@Primary
public DataSource cpDataSource() {
return cpDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@Bean(name = "cpEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean cpEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
@ -47,16 +48,22 @@ public class CpDbConf {
.build();
}
@Bean
@Bean(name = "cpEntityManager")
@Primary
public EntityManager cpEntityManager(@Qualifier("cpEntityManagerFactory") EntityManagerFactory emf) {
return org.springframework.orm.jpa.SharedEntityManagerCreator.createSharedEntityManager(emf);
}
@Bean(name = "cpTransactionManager")
@Primary
public PlatformTransactionManager cpTransactionManager(
@Qualifier("cpEntityManagerFactory") EntityManagerFactory cpEntityManagerFactory) {
return new JpaTransactionManager(cpEntityManagerFactory);
@Qualifier("cpEntityManagerFactory") EntityManagerFactory emf) {
return new JpaTransactionManager(emf);
}
@Bean
@Bean(name = "cpQueryFactory")
@Primary
public JPAQueryFactory cpQueryFactory(@Qualifier("cpEntityManagerFactory") EntityManagerFactory emf) {
return new JPAQueryFactory(emf.createEntityManager());
public JPAQueryFactory cpQueryFactory(@Qualifier("cpEntityManager") EntityManager em) {
return new JPAQueryFactory(em);
}
}
}

@ -1,6 +1,7 @@
package com.worker.framework.JPAConf;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
@ -17,7 +18,7 @@ import javax.sql.DataSource;
@Configuration
@EnableJpaRepositories(
basePackages = "com.worker.domain.repo.ep", // Electric Parking용 레포지토리 경로
basePackages = "com.worker.domain.repo.ep",
entityManagerFactoryRef = "epEntityManagerFactory",
transactionManagerRef = "epTransactionManager"
)
@ -29,12 +30,12 @@ public class EpDbConf {
return new DataSourceProperties();
}
@Bean
@Bean(name = "epDataSource")
public DataSource epDataSource() {
return epDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@Bean(name = "epEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean epEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(epDataSource())
@ -43,14 +44,19 @@ public class EpDbConf {
.build();
}
@Bean
public PlatformTransactionManager epTransactionManager(
@Qualifier("epEntityManagerFactory") EntityManagerFactory epEntityManagerFactory) {
return new JpaTransactionManager(epEntityManagerFactory);
@Bean(name = "epEntityManager")
public EntityManager epEntityManager(@Qualifier("epEntityManagerFactory") EntityManagerFactory emf) {
return org.springframework.orm.jpa.SharedEntityManagerCreator.createSharedEntityManager(emf);
}
@Bean
public JPAQueryFactory epQueryFactory(@Qualifier("epEntityManagerFactory") EntityManagerFactory emf) {
return new JPAQueryFactory(emf.createEntityManager());
@Bean(name = "epTransactionManager")
public PlatformTransactionManager epTransactionManager(
@Qualifier("epEntityManagerFactory") EntityManagerFactory emf) {
return new JpaTransactionManager(emf);
}
@Bean(name = "epQueryFactory")
public JPAQueryFactory epQueryFactory(@Qualifier("epEntityManager") EntityManager em) {
return new JPAQueryFactory(em);
}
}

@ -47,6 +47,25 @@ public class EPostDto {
private List<T> result;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class SearchDelivTarget {
private Long gpCode;
private String gpSggcode;
private String gpSendDate;
private String gpSendTime;
private String gpReturnCd;
private String gpRecvName;
private String gpRecvRelt;
private String gpState;
private Long gpTtcode;
private String postProcSt;
}
@Getter
@Setter
@NoArgsConstructor
@ -84,18 +103,18 @@ public class EPostDto {
@AllArgsConstructor
@Builder
public static class Deliv {
private String conKey;
private String regiNo;
private String delivYm;
private String delivHhmi;
private String delivRsltCd;
private String sendDate;
private String sendTime;
private String resultCd;
private String aDate;
private String conOrg; // 외부기관구분코드YICT
private String conKey; // 콘키
private String regiNo; // 등기번호
private String delivymd; // 배달일
private String delivhhmi; // 배달시간
private String delivrsltcd; // 배달결과코드
private String nondelivreasncd; // 미배달사유코드
private String nondelivreasncdnm; // 미배달사유명
private String subrecprsnnm; // 수령인명
private String relrecprsncd; // 수령인관계코드
private String relrecprsncdnm; // 수령인관계명
private String endMark;
}

@ -5,12 +5,17 @@ import com.querydsl.jpa.impl.JPAQueryFactory;
import com.worker.scheduler.epost.dto.EPostDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static com.worker.domain.entity.QCpGojiPrt.cpGojiPrt;
import static com.worker.domain.entity.QEpostDelivResult.epostDelivResult;
import static com.worker.domain.entity.QEpostRceptResult.epostRceptResult;
import static com.worker.domain.entity.QEpostSenderDetail.epostSenderDetail;
import static com.worker.domain.entity.QEpostSenderReg.epostSenderReg;
@Slf4j
@ -18,9 +23,32 @@ import static com.worker.domain.entity.QEpostRceptResult.epostRceptResult;
@RequiredArgsConstructor
public class EPostQueryDslRepository {
private final JPAQueryFactory queryFactory;
private final @Qualifier("cpQueryFactory") JPAQueryFactory cpQueryFactory;
private final @Qualifier("epQueryFactory") JPAQueryFactory epQueryFactory;
private final @Qualifier("cpDataSource") javax.sql.DataSource cpDs;
private final @Qualifier("epDataSource") javax.sql.DataSource epDs;
public void logWhichDb() throws Exception {
try (var c = cpDs.getConnection()) {
log.info("CP URL = {}", c.getMetaData().getURL());
log.info("CP Catalog={}, Schema={}", c.getCatalog(), c.getSchema());
}
try (var c = epDs.getConnection()) {
log.info("EP URL = {}", c.getMetaData().getURL());
log.info("EP Catalog={}, Schema={}", c.getCatalog(), c.getSchema());
}
}
@Transactional(readOnly = true, transactionManager = "epTransactionManager")
public List<EPostDto.SearchDelivTarget> findDelivResult(List<EPostDto.Deliv> dtos) {
public List<EPostDto.Deliv> findDelivResult(List<EPostDto.Deliv> dtos) {
try {
logWhichDb();
} catch (Exception e) {
throw new RuntimeException(e);
}
List<String> conKeys = dtos.stream()
.map(EPostDto.Deliv::getConKey)
@ -30,23 +58,36 @@ public class EPostQueryDslRepository {
.map(EPostDto.Deliv::getRegiNo)
.toList();
return queryFactory
return epQueryFactory
.select(
Projections.fields(
EPostDto.Deliv.class,
epostDelivResult.conKey
EPostDto.SearchDelivTarget.class,
cpGojiPrt.gpCode,
cpGojiPrt.gpSggcode,
cpGojiPrt.gpSendDate,
cpGojiPrt.gpSendTime,
cpGojiPrt.gpReturnCd,
cpGojiPrt.gpRecvName,
cpGojiPrt.gpRecvRelt,
cpGojiPrt.gpState,
cpGojiPrt.gpTtcode,
epostSenderReg.postProcStt
)
)
.from(epostDelivResult)
.from(cpGojiPrt)
.innerJoin(epostSenderDetail).on(
cpGojiPrt.gpConKey.eq(epostSenderDetail.conKey),
cpGojiPrt.gpRegistNo.eq(epostSenderDetail.rgstNmbr)
)
.innerJoin(epostSenderReg).on(cpGojiPrt.gpConKey.eq(epostSenderReg.conKey))
.where(
epostDelivResult.conKey.in(conKeys),
epostDelivResult.regino.in(reginos)
cpGojiPrt.gpConKey.in(conKeys),
cpGojiPrt.gpRegistNo.in(reginos)
)
.fetch();
}
public List<EPostDto.Prt> findMakeResult(List<EPostDto.Prt> dtos) {
return null;
}
@ -57,9 +98,9 @@ public class EPostQueryDslRepository {
}
public void updateDelivResult(EPostDto.Deliv dto) {
queryFactory
epQueryFactory
.update(epostDelivResult)
.set(epostDelivResult.delivRsltCd, dto.getResultCd())
.set(epostDelivResult.delivRsltCd, dto.getDelivrsltcd())
.where(
epostDelivResult.conKey.eq(dto.getConKey())
)

@ -105,7 +105,7 @@ public class EPostService {
// 다 같은 폴더로 불규칙하게 들어오니까 일단 파싱 리절트안에 전부 해당키로 나눠서 담아놨음.
// parseResult가 리스트니까 하나씩 돌면서 키값에 맞는 매서드 호출
List<EPostDto.Deliv> delivs = new ArrayList<>();
List<EPostDto.SearchDelivTarget> delivs = new ArrayList<>();
List<EPostDto.Prt> prts = new ArrayList<>();
List<EPostDto.Recv> recvs = new ArrayList<>();
@ -124,7 +124,7 @@ public class EPostService {
log.info(prts.toString());
log.info(recvs.toString());
if (delivs != null && !delivs.isEmpty()) insertDelivResults(delivs);
// if (delivs != null && !delivs.isEmpty()) insertDelivResults(delivs);
if (prts != null && !prts.isEmpty()) insertPrtResults(prts);
if (recvs != null && !recvs.isEmpty()) insertRecvResults(recvs);
@ -139,14 +139,14 @@ public class EPostService {
.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)
.delivYmd(item.getDelivymd())
.delivHhmi(item.getDelivhhmi())
.delivRsltCd(item.getDelivrsltcd())
.nonDelivReasnCd(item.getDelivrsltcd())
.nonDelivReasnCdNm(item.getNondelivreasncdnm())
.subRecPrsnNm(item.getSubrecprsnnm())
.relRecPrsnCd(item.getRelrecprsncd())
.relRecPrsnCdNm(item.getRelrecprsncdnm())
.build())
.toList();
cpEpostDelivResultRepository.saveAll(entities);

@ -107,15 +107,18 @@ public class EpostTextFileParser implements FileParserInterface<EPostDto.EPostFi
private EPostDto.Deliv parseToDeliv(String[] item) {
return EPostDto.Deliv.builder()
.conKey(item[0])
.regiNo(item[1])
.delivYm(item[2])
.delivHhmi(item[3])
.delivRsltCd(item[4])
.sendDate(item[5])
.sendTime(item[6])
.resultCd(item[7])
.aDate(item[8])
.conOrg(item[0])
.conKey(item[1])
.regiNo(item[2])
.delivymd(item[3])
.delivhhmi(item[4])
.delivrsltcd(item[5])
.nondelivreasncd(item[6])
.nondelivreasncdnm(item[7])
.subrecprsnnm(item[8])
.relrecprsncd(item[9])
.relrecprsncdnm(item[10])
.endMark(item[11])
.build();
}

Loading…
Cancel
Save