diff --git a/src/main/java/com/worker/domain/entity/EpostSenderReg.java b/src/main/java/com/worker/domain/entity/EpostSenderReg.java index d8c9055..065f06a 100644 --- a/src/main/java/com/worker/domain/entity/EpostSenderReg.java +++ b/src/main/java/com/worker/domain/entity/EpostSenderReg.java @@ -79,7 +79,7 @@ public class EpostSenderReg { private String sendTime; @Column(name = "RELORSECT_CD", length = 15) - private String relOrSectCd; + private String relorsectCd; @Column(name = "RECEV_SENDER_ORG_CODE", length = 15) private String recevSenderOrgCode; 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 a7de33a..f3423f9 100644 --- a/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java +++ b/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java @@ -78,8 +78,8 @@ public class EPostDto { public static class Target { //epost_sender_result - private Long tgCode; - private String ConKey; + private String tgCode; + private String conKey; //epost_sender_detail @@ -88,10 +88,118 @@ public class EPostDto { //tb_cntc_sndng_result private String sndngResultSttus; + + // Header/공통 + private String rceptId; + private String dataCd; + private String divKb; + private String dfPayYn; + private String rcptKb; + private String sealCd; + private String wordKb; + private Integer mailCnt; + private String envCd; + private String colorYn; + private String mmYn; + private String flexCd; + private Integer dmCnt; + private String sbFg; + private String apvlNb; + private String sendDate; + private String sendTime; + private String relorsectCd; + + // Sender + private String recevSenderNm; + private String recevSenderZipcode; + private String recevSenderAddr; + private String recevSenderDetailAddr; + private String recevSenderOrgCode; + private String recevSenderDepartTel; + private String recevSenderDepartNm; + private String recevSenderFax; + private String recevSerderStaff; // 원문 오타 + + private String recevSenderEmail; + + // Receiver/차주 + private String recevCarOwnerNm; + private String recevCarOwnerZipcode; + private String recevCarOwnerAddr; + private String recevCarOwnerDetailaddr; + private String recevCarNumber; + private String recevCarOwnerSsn; + + // 문서/고지 (일부만, 나머지도 동일 패턴으로 추가) + private String recevDivCd; + private String recevCode; + private String recevBar1d; + private String recevBar2d; + private String recevBillNumber; + private String recevDocCd1; + private String recevDocCd2; + private String recevDocCd3; + private String recevDocCd4; + private String recevDocCd5; + + private String recevSubj1; + private String recevSubj2; + private String recevSubj3; + private String recevViolateDt; + private String recevViolateDong; + private String recevViolatePlace; + private String recevLaws; + + private String recevPayNumber1; + private String recevPayNumber2; + private String recevOcr0; + private String recevOcr1; + private String recevOcr2; + private String recevOnlinePayNumber; + private String recevVaccountNumber; + private String recevVaccountNumber2; + private String recevVaccountNumber3; + private String recevVaccountNumber4; + private String recevVaccountNumber5; + private String recevVaccountNumber6; + private String recevVaccountNumber7; + private String recevVaccountNumber8; + private String recevVaccountNumber9; + private String recevVaccountNumber10; + private String recevVaccountNumber11; + private String recevFinePrice; + private String recevPayPrice; + private String recevPayDt; + + private String recevPayInDate; + private String recevPayInPrice; + private String recevPayInAddPrice; + private String recevPayInDefaultPrice; + private String recevPayOutDate; + private String recevPayOutPrice; + private String recevPayOutAddPrice; + private String recevPayOutDefaultPrice; + + // 인쇄/사진 + private String recevPrintDt; + private String recevPrintYear; + private String recevPrintMonth; + private String recevPrintDay; + private String recevEvidenceNumber; + private String recevPhotoCnt; + private String recevPhotoFile1; + private String recevPhotoFile2; + private String recevPhotoFile3; + private String recevPhotoFile4; + + // 텍스트 + private String recevNoticeConts; // 개행→ + } } + @Getter @Setter @NoArgsConstructor 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 9d3fcb3..b885049 100644 --- a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java +++ b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java @@ -38,11 +38,11 @@ public class EPostQueryDslRepository { .select( Projections.fields( EPostDto.SendTarget.Key.class, - cpGojit.tgCode, - cpGojit.tgGb, + epostSenderReg.tgCode, epostSenderReg.conKey, epostSenderReg.postProcStt, epostSenderReg.regYmd, + cpGojit.tgGb, Expressions.as(Expressions.nullExpression(String.class), "tgPostYn"), Expressions.as(Expressions.nullExpression(String.class), "tgUnitySndngMastrId") ) @@ -70,7 +70,25 @@ public class EPostQueryDslRepository { epostSenderReg.tgCode, epostSenderReg.conKey, epostSenderDetail.rgstNmbr, - epostSenderDetail.recevSeq + epostSenderDetail.recevSeq, + epostSenderReg.rceptId, + epostSenderReg.dataCd, + epostSenderReg.divKb, + epostSenderReg.dfpayyn, + epostSenderReg.rcptKb, + epostSenderReg.sealCd, + epostSenderReg.wordKb, + epostSenderReg.mailCnt, + epostSenderReg.envCd, + epostSenderReg.colorYn, + epostSenderReg.mmYn, + epostSenderReg.flexCd, + epostSenderReg.dmCnt, + epostSenderReg.sbFg, + epostSenderReg.apvlNb, + epostSenderReg.sendDate, + epostSenderReg.sendTime, + epostSenderReg.relorsectCd ) ) .from(epostSenderReg) 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 96b3f01..296a9a3 100644 --- a/src/main/java/com/worker/scheduler/epost/service/EPostService.java +++ b/src/main/java/com/worker/scheduler/epost/service/EPostService.java @@ -9,7 +9,9 @@ import com.worker.domain.repo.ep.*; import com.worker.scheduler.epost.dto.EPostDto; import com.worker.scheduler.epost.repository.EPostQueryDslRepository; import com.worker.util.common.CommonUtils; +import com.worker.util.textFileMacker.TextMaker; import com.worker.util.zipFileMaker.ZipMaker; +import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +32,7 @@ public class EPostService { private final Environment env; private final CommonUtils utils; private final ZipMaker zipMaker; + private final TextMaker textMaker; private final ObjectMapper objectMapper; private final CpSetinfoRepository cpSetinfoRepository; @@ -68,6 +71,7 @@ public class EPostService { private EpGojiPrtRepository epGojiPrtRepository; + @Transactional public void findEPostSendTarget(EPostDto.SetInfo setInfo) { List cpSendTargetKeys = new ArrayList<>(); @@ -147,7 +151,7 @@ public class EPostService { .filter(t -> Objects.equals(o.getConKey(), t.getConKey())) .map(EPostDto.SendTarget.Target::getRecevSeq)) .filter(Objects::nonNull) - .distinct() +// .distinct() .toList(); final List epTargets = Optional.ofNullable(epSendTargets).orElseGet(List::of); @@ -157,7 +161,7 @@ public class EPostService { .filter(t -> Objects.equals(o.getConKey(), t.getConKey())) .map(EPostDto.SendTarget.Target::getRecevSeq)) .filter(Objects::nonNull) - .distinct() +// .distinct() .toList(); // mmcode로 이미지 파일 찾아서 zip생성 @@ -183,9 +187,9 @@ public class EPostService { if(!epSendEgojiTargets.isEmpty()) ePostQueryDslRepository.updateGojitPostYn(epQueryFactory, epSendEgojiTargets); - // 서울시는 통합 우편서버를 사용중임. - // 거기다가 ftp 로 텍스트 쏴줘야함. - // 그리고 파일 읽는것도 마찬가지 + // 택스트파일 생성 + textMaker.generateTextFile(cpSendTargets); + } diff --git a/src/main/java/com/worker/util/textFileMacker/TextMaker.java b/src/main/java/com/worker/util/textFileMacker/TextMaker.java index ced83a7..396b973 100644 --- a/src/main/java/com/worker/util/textFileMacker/TextMaker.java +++ b/src/main/java/com/worker/util/textFileMacker/TextMaker.java @@ -1,4 +1,144 @@ package com.worker.util.textFileMacker; +import com.worker.scheduler.epost.dto.EPostDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +@Slf4j public class TextMaker { + + String s(String v){ return v==null? "": v.replace("|",""); } + String t(String v){ return v==null? "": v.replace("\r","").replace("\n","\\n").replace("|",""); } + + public void generateTextFile(List cpSendTargets) { + +// cpSendTargets + + } + + + private String addLine(EPostDto.SendTarget.Target target, String seq, String recevCnt, String zipFileName) { + + List p = new ArrayList<>(); + p.add(s(target.getRceptId())); + p.add(s(target.getDataCd())); + p.add(s(target.getDivKb())); + p.add(s(target.getDfPayYn())); + p.add(s(target.getRcptKb())); + p.add(s(target.getSealCd())); + p.add(s(target.getWordKb())); + p.add(s(target.getMailCnt().toString())); + p.add(recevCnt); //리스트에 로우 갯수 + p.add(s(target.getEnvCd())); + p.add(s(target.getColorYn())); + p.add(s(target.getMmYn())); + p.add(s(target.getFlexCd())); + p.add(s(target.getDmCnt().toString())); + p.add(s(target.getSbFg())); + p.add(s(target.getApvlNb())); + p.add(s(target.getSendDate())); + p.add(s(target.getSendTime())); + p.add(s(target.getConKey())); + p.add(s(target.getRelorsectCd())); + p.add(s(target.getRgstNmbr())); + p.add(s(target.getRecevSenderNm())); + p.add(s(target.getRecevSenderZipcode())); + p.add(s(target.getRecevSenderAddr())); + p.add(s(target.getRecevSenderDetailAddr())); + p.add(s(target.getConKey())); // 중복 CON_KEY + p.add(seq); // 수취인 순번 + p.add(s(target.getRecevCarOwnerNm())); + p.add(s(target.getRecevCarOwnerZipcode())); + p.add(s(target.getRecevCarOwnerAddr())); + p.add(s(target.getRecevCarOwnerDetailaddr())); + p.add(s(target.getRgstNmbr())); // RGST_NMBR 재등장 + for(int i=0;i<11;i++) p.add("NULL"); // 고정 11개 NULL +// p.add(s(target.zipFileName())); + p.add(s(target.getRecevSenderOrgCode())); + p.add(s(target.getRecevSenderNm())); + p.add(s(target.getRecevSenderZipcode())); + p.add(s(target.getRecevSenderAddr())); + p.add(s(target.getRecevSenderDetailAddr())); + p.add(s(target.getRecevSenderDepartTel())); + p.add(s(target.getRecevSenderDepartNm())); + p.add(s(target.getRecevDivCd())); + p.add(s(target.getRecevSeq())); + p.add(s(target.getRecevCode())); + p.add(s(target.getRecevBar1d())); + p.add(s(target.getRecevBar2d())); + p.add(s(target.getRecevBillNumber())); + p.add(s(target.getRecevDocCd1())); + p.add(s(target.getRecevDocCd2())); + p.add(s(target.getRecevDocCd3())); + p.add(s(target.getRecevDocCd4())); + p.add(s(target.getRecevDocCd5())); + p.add(s(target.getRecevSubj1())); + p.add(s(target.getRecevSubj2())); + p.add(s(target.getRecevSubj3())); + p.add(s(target.getRecevViolateDt())); + p.add(s(target.getRecevViolateDong())); + p.add(s(target.getRecevViolatePlace())); + p.add(s(target.getRecevLaws())); + p.add(s(target.getRecevPayNumber1())); + p.add(s(target.getRecevPayNumber2())); + p.add(s(target.getRecevOcr0())); + p.add(s(target.getRecevOcr1())); + p.add(s(target.getRecevOcr2())); + p.add(s(target.getRecevOnlinePayNumber())); + p.add(s(target.getRecevVaccountNumber())); + p.add(s(target.getRecevFinePrice())); + p.add(s(target.getRecevPayPrice())); + p.add(s(target.getRecevPayDt())); + p.add(s(target.getRecevPayInDate())); + p.add(s(target.getRecevPayInPrice())); + p.add(s(target.getRecevPayInAddPrice())); + p.add(s(target.getRecevPayInDefaultPrice())); + p.add(s(target.getRecevPayOutDate())); + p.add(s(target.getRecevPayOutPrice())); + p.add(s(target.getRecevPayOutAddPrice())); + p.add(s(target.getRecevPayOutDefaultPrice())); + p.add(s(target.getRecevCarNumber())); + p.add(s(target.getRecevCarOwnerZipcode())); + p.add(s(target.getRecevCarOwnerAddr())); + p.add(s(target.getRecevCarOwnerDetailaddr())); + p.add(s(target.getRecevCarOwnerNm())); + p.add(s(target.getRecevCarOwnerSsn())); + p.add(s(target.getRecevPrintDt())); + p.add(s(target.getRecevPrintYear())); + p.add(s(target.getRecevPrintMonth())); + p.add(s(target.getRecevPrintDay())); + p.add(s(target.getRecevEvidenceNumber())); + p.add(s(target.getRecevPhotoCnt())); + p.add(s(target.getRecevPhotoFile1())); + p.add(s(target.getRecevPhotoFile2())); + p.add(s(target.getRecevPhotoFile3())); + p.add(s(target.getRecevPhotoFile4())); + p.add(s("")); + p.add(s("")); + p.add(s("")); + p.add(s("")); + p.add(s("")); + p.add(s("")); + p.add(s(target.getRecevSenderFax())); + p.add(s(target.getRecevSerderStaff())); + p.add(s(target.getRecevSenderEmail())); + p.add(s(target.getRecevVaccountNumber2())); + p.add(s(target.getRecevVaccountNumber3())); + p.add(s(target.getRecevVaccountNumber4())); + p.add(s(target.getRecevVaccountNumber5())); + p.add(s(target.getRecevVaccountNumber6())); + p.add(s(target.getRecevVaccountNumber7())); + p.add(s(target.getRecevVaccountNumber8())); + p.add(s(target.getRecevVaccountNumber9())); + p.add(s(target.getRecevVaccountNumber10())); + p.add(s(target.getRecevVaccountNumber11())); + // ... 이하 Sender/Doc/Print/Photo/Text/VAccounts 순으로 Delphi와 동일한 순서로 계속 추가 ... + return String.join("|", p) + "|"; + + } + }