From b840989ee0a8912cb142f4aa0909a7a544d025d8 Mon Sep 17 00:00:00 2001 From: Kurt92 Date: Thu, 18 Sep 2025 14:18:06 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EC=A0=84=EC=9E=90=EA=B3=A0=EC=A7=80?= =?UTF-8?q?=20=EA=B4=80=EB=A0=A8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=BF=BC=EB=A6=AC=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- .../com/worker/domain/entity/CpInstruct.java | 49 ++++++++++ .../domain/entity/CpInstructAnswer.java | 34 +++++++ .../domain/entity/CpInstructAnswerId.java | 19 ++++ .../domain/entity/TbCntcSndngDetail.java | 81 +++++++++++++++++ .../domain/entity/TbCntcSndngResult.java | 63 +++++++++++++ .../domain/entity/TbCntcSndngResultId.java | 15 ++++ .../worker/scheduler/epost/dto/EPostDto.java | 58 ++++++++++++ .../repository/EPostQueryDslRepository.java | 89 +++++++++++++++++++ .../epost/schedule/EPostScheduler.java | 10 ++- .../scheduler/epost/service/EPostService.java | 65 +++++++++++++- .../epost/service/EpostSetinfoService.java | 23 ++++- .../worker/scheduler/smg/service/XmlSend.java | 12 +-- .../worker/util/textFileMacker/TextMaker.java | 4 + .../{XmlMacker.java => XmlMaker.java} | 2 +- .../worker/util/zipFileMaker/ZipMaker.java | 4 + src/main/resources/application-dev.yml | 11 ++- src/main/resources/application-local.yml | 11 ++- src/main/resources/application-prod.yml | 11 +++ 19 files changed, 547 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/worker/domain/entity/CpInstruct.java create mode 100644 src/main/java/com/worker/domain/entity/CpInstructAnswer.java create mode 100644 src/main/java/com/worker/domain/entity/CpInstructAnswerId.java create mode 100644 src/main/java/com/worker/domain/entity/TbCntcSndngDetail.java create mode 100644 src/main/java/com/worker/domain/entity/TbCntcSndngResult.java create mode 100644 src/main/java/com/worker/domain/entity/TbCntcSndngResultId.java create mode 100644 src/main/java/com/worker/util/textFileMacker/TextMaker.java rename src/main/java/com/worker/util/xmlFileMaker/{XmlMacker.java => XmlMaker.java} (99%) create mode 100644 src/main/java/com/worker/util/zipFileMaker/ZipMaker.java diff --git a/README.md b/README.md index 30e5bf4..ad16361 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # 델파이 데몬 마이그레이션 - +KISS(Keep it Simple, Stupid)
+YAGNI(You Ain't Gonna Need It) ### 연계 디비폴링, 프로그램 업데이트를 위한 워커 기존 델파이 데몬을 스프링 스케쥴러로 대체한다.
manual > 수동실행 및 모니터링
diff --git a/src/main/java/com/worker/domain/entity/CpInstruct.java b/src/main/java/com/worker/domain/entity/CpInstruct.java new file mode 100644 index 0000000..fad8c9a --- /dev/null +++ b/src/main/java/com/worker/domain/entity/CpInstruct.java @@ -0,0 +1,49 @@ +package com.worker.domain.entity; + +import jakarta.persistence.*; +import lombok.*; + + +@Entity +@Table( + name = "cp_instruct", + indexes = { + @Index(name = "CP_INSTRUCT_IDX1", columnList = "IT_MMCODE"), + @Index(name = "CP_INSTRUCT_IDX2", columnList = "IT_SGGCODE, IT_DATE") + } +) +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@ToString +public class CpInstruct { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "IT_CODE", nullable = false) + private Long itCode; + + @Column(name = "IT_SGGCODE", length = 5) + private String itSggcode; + + @Column(name = "IT_MMCODE", length = 16) + private String itMmcode; + + @Column(name = "IT_DATE", length = 8) + private String itDate; + + @Column(name = "IT_CAUSE", length = 2) + private String itCause; + + @Column(name = "IT_ETC", length = 100) + private String itEtc; + + @Column(name = "IT_INDT", length = 14) + private String itIndt; + + @Column(name = "IT_INUSER") + private Integer itInuser; +} + diff --git a/src/main/java/com/worker/domain/entity/CpInstructAnswer.java b/src/main/java/com/worker/domain/entity/CpInstructAnswer.java new file mode 100644 index 0000000..408bfa5 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/CpInstructAnswer.java @@ -0,0 +1,34 @@ +package com.worker.domain.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "cp_instruct_answer") +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class CpInstructAnswer { + + @EmbeddedId + private CpInstructAnswerId id; + + @Column(name = "IA_ID", length = 50) + private String iaId; + + @Column(name = "IA_ANSWERTEXT", length = 500) + private String iaAnswerText; + + @Column(name = "IA_MAILTITLE", length = 100) + private String iaMailTitle; + + @Column(name = "IA_MAILTEXT", length = 1000) + private String iaMailText; +} \ No newline at end of file diff --git a/src/main/java/com/worker/domain/entity/CpInstructAnswerId.java b/src/main/java/com/worker/domain/entity/CpInstructAnswerId.java new file mode 100644 index 0000000..7b944c1 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/CpInstructAnswerId.java @@ -0,0 +1,19 @@ +package com.worker.domain.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import lombok.*; + +@Embeddable +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +@EqualsAndHashCode +public class CpInstructAnswerId { + @Column(name = "IA_SGGCODE", length = 5, nullable = false) + private String iaSggcode; + + @Column(name = "IA_CODE", length = 3, nullable = false) + private String iaCode; +} diff --git a/src/main/java/com/worker/domain/entity/TbCntcSndngDetail.java b/src/main/java/com/worker/domain/entity/TbCntcSndngDetail.java new file mode 100644 index 0000000..dc74df8 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/TbCntcSndngDetail.java @@ -0,0 +1,81 @@ +package com.worker.domain.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Entity +@Table(name = "tb_cntc_sndng_detail") +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TbCntcSndngDetail { + + @Id + @Column(name = "unity_sndng_detail_id", length = 20, nullable = false) + private String unitySndngDetailId; // 통합 발송 상세 ID (PK) + + @Column(name = "unity_sndng_mastr_id", length = 20) + private String unitySndngMastrId; // 통합 발송 마스터 ID + + @Column(name = "signgu_code", length = 50) + private String signguCode; // 시군구 코드 + + @Column(name = "ffnlg_code", length = 2) + private String ffnlgCode; // 과태료 코드 + + @Column(name = "main_code", length = 30) + private String mainCode; // 메인 코드 + + @Column(name = "vhcle_no", length = 30) + private String vhcleNo; // 차량 번호 + + @Column(name = "ihidnum", length = 100) + private String ihidnum; // 주민등록번호 + + @Column(name = "moblphon_no", length = 20) + private String moblphonNo; // 핸드폰 번호 + + @Column(name = "nm", length = 200) + private String nm; // 성명 + + @Column(name = "adres", length = 300) + private String adres; // 주소 + + @Column(name = "detail_adres", length = 300) + private String detailAdres; // 상세 주소 + + @Column(name = "zip", length = 5) + private String zip; // 우편번호 + + @Lob + @Column(name = "tmplt_msg_data") + private String tmpltMsgData; // 템플릿 메시지 데이터 (LONGTEXT) + + @Lob + @Column(name = "mobile_page_cn") + private String mobilePageCn; // 모바일 페이지 내용 (LONGTEXT) + + @Column(name = "use_instt_idntfc_id", length = 30) + private String useInsttIdntfcId; // 이용 기관 식별 ID + + @Column(name = "external_document_uuid", length = 40) + private String externalDocumentUuid; // 외부 문서 식별 번호 + + @Column(name = "regist_dt") + private LocalDateTime registDt; // 등록일자 + + @Column(name = "register", length = 20) + private String register; // 등록자 + + @Column(name = "updt_dt") + private LocalDateTime updtDt; // 수정일자 + + @Column(name = "updusr", length = 20) + private String updusr; // 수정자 +} \ No newline at end of file diff --git a/src/main/java/com/worker/domain/entity/TbCntcSndngResult.java b/src/main/java/com/worker/domain/entity/TbCntcSndngResult.java new file mode 100644 index 0000000..f848361 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/TbCntcSndngResult.java @@ -0,0 +1,63 @@ +package com.worker.domain.entity; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Entity +@Table(name = "tb_cntc_sndng_result") +@IdClass(TbCntcSndngResultId.class) +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class TbCntcSndngResult { + + @Id + @Column(name = "unity_sndng_detail_id", length = 20, nullable = false) + private String unitySndngDetailId; // PK1 + + @Id + @Column(name = "sndng_se_code", length = 20, nullable = false) + private String sndngSeCode; // PK2 + + @Column(name = "signgu_code", length = 50) + private String signguCode; // 시군구 코드 + + @Column(name = "ffnlg_code", length = 2) + private String ffnlgCode; // 과태료 코드 + + @Column(name = "sndng_result_sttus", length = 50) + private String sndngResultSttus; // 발송 결과 상태 + + @Column(name = "requst_dt", length = 20) + private String requstDt; // 요청 일시 (문자열 컬럼 정의대로 String) + + @Column(name = "inqire_dt", length = 20) + private String inqireDt; // 조회 일시 + + @Column(name = "readng_dt", length = 20) + private String readngDt; // 열람 일시 + + @Column(name = "error_cn", length = 1000) + private String errorCn; // 오류 내용 + + @Column(name = "rgist_no", length = 13) + private String rgistNo; // 등기번호 + + @Column(name = "regist_dt") + private LocalDateTime registDt; // 등록일자 + + @Column(name = "register", length = 20) + private String register; // 등록자 + + @Column(name = "updt_dt") + private LocalDateTime updtDt; // 수정일자 + + @Column(name = "updusr", length = 20) + private String updusr; // 수정자 +} diff --git a/src/main/java/com/worker/domain/entity/TbCntcSndngResultId.java b/src/main/java/com/worker/domain/entity/TbCntcSndngResultId.java new file mode 100644 index 0000000..190c926 --- /dev/null +++ b/src/main/java/com/worker/domain/entity/TbCntcSndngResultId.java @@ -0,0 +1,15 @@ +package com.worker.domain.entity; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode +public class TbCntcSndngResultId { + private String unitySndngDetailId; // varchar(20) + private String sndngSeCode; // varchar(20) +} \ No newline at end of file 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 594e386..36e3af1 100644 --- a/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java +++ b/src/main/java/com/worker/scheduler/epost/dto/EPostDto.java @@ -1,6 +1,7 @@ package com.worker.scheduler.epost.dto; import com.worker.domain.entity.CpSetinfo; +import jakarta.persistence.Column; import lombok.*; import java.util.List; @@ -18,6 +19,8 @@ public class EPostDto { private CpSetinfo epSetinfo; private EPostInfo cpEPostInfo; private EPostInfo epEPostInfo; + private Boolean cpIsEns; + private Boolean epIsEns; } @Getter @@ -47,6 +50,61 @@ public class EPostDto { private List result; } + + + + public static class SendTarget { + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class Key { + private String conKey; + private String tgCode; + } + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class Target { + + //cp_gojit + + private Long tgCode; + private String tgSggCode; + private String tgLawGb; + private String tgGb; + private String tgDlgb; + private String tgSrcSdate; + private String tgSrcEdate; + private String tgSdate; + private String tgEdate; + private String tgTitle; + private String tgDocno; + private String tgEtc; + private Integer tgTotcount; + private Long tgTotkeum; + private String tgIndt; + private Integer tgInuser; + private String tgConKey; + private String tgPostSeCd; + private String tgIsResend; + private String tgNoticeKey; + private String tgPostProcStt; + private String tgUnitySndngMastrId; + private String tgDelete; + private String tgPostYn; + private String tgElpostYn; + + //epost_sender_reg + private String conKey; + private String regYmd; + } + } + + @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 fbb3375..50712ab 100644 --- a/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java +++ b/src/main/java/com/worker/scheduler/epost/repository/EPostQueryDslRepository.java @@ -15,9 +15,13 @@ 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.QCpInstruct.cpInstruct; +import static com.worker.domain.entity.QCpInstructAnswer.cpInstructAnswer; import static com.worker.domain.entity.QEpostDelivResult.epostDelivResult; import static com.worker.domain.entity.QEpostSenderDetail.epostSenderDetail; import static com.worker.domain.entity.QEpostSenderReg.epostSenderReg; +import static com.worker.domain.entity.QTbCntcSndngDetail.tbCntcSndngDetail; +import static com.worker.domain.entity.QTbCntcSndngResult.tbCntcSndngResult; @Slf4j @@ -25,6 +29,91 @@ import static com.worker.domain.entity.QEpostSenderReg.epostSenderReg; @RequiredArgsConstructor public class EPostQueryDslRepository { + public List findSendTargetKeys(JPAQueryFactory queryFactory) { + + List result = queryFactory + .select( + Projections.fields( + EPostDto.SendTarget.Key.class, + cpGojit.tgCode, + epostSenderReg.conKey + ) + ) + .from(epostSenderReg) + .leftJoin(cpGojit).on(epostSenderReg.tgCode.eq(cpGojit.tgCode.stringValue())) + .where(epostSenderReg.postProcStt.eq("01")) + .fetch(); + + + return result; + + } + + public List findSendTargets(JPAQueryFactory queryFactory, List keys) { + + List tgCode = keys.stream().map(EPostDto.SendTarget.Key::getTgCode).collect(Collectors.toList()); + List conKey = keys.stream().map(EPostDto.SendTarget.Key::getConKey).collect(Collectors.toList()); + + List result = queryFactory + .select( + Projections.fields( + EPostDto.SendTarget.Target.class, + cpGojit.tgCode + ) + ) + .from(epostSenderReg) + .innerJoin(epostSenderDetail).on(epostSenderReg.conKey.eq(epostSenderDetail.conKey)) + .leftJoin(cpInstruct).on(epostSenderDetail.recevSeq.eq(cpInstruct.itMmcode)) + .leftJoin(cpInstructAnswer).on( + cpInstruct.itSggcode.eq(cpInstructAnswer.id.iaSggcode), + cpInstruct.itCause.eq(cpInstructAnswer.id.iaCode) + ) + .where( + epostSenderReg.postProcStt.eq("01"), + epostSenderReg.tgCode.in(tgCode), + epostSenderReg.conKey.in(conKey) + ) + .fetch(); + + return result; + } + + public List findSendEgojiTargets(JPAQueryFactory queryFactory, List keys) { + + List tgCode = keys.stream().map(EPostDto.SendTarget.Key::getTgCode).collect(Collectors.toList()); + List conKey = keys.stream().map(EPostDto.SendTarget.Key::getConKey).collect(Collectors.toList()); + + List result = queryFactory + .select( + Projections.fields( + EPostDto.SendTarget.Target.class, + cpGojit.tgCode + ) + ) + .from(epostSenderReg) + .innerJoin(epostSenderDetail).on(epostSenderReg.conKey.eq(epostSenderDetail.conKey)) + .leftJoin(cpInstruct).on(epostSenderDetail.recevSeq.eq(cpInstruct.itMmcode)) + .leftJoin(cpInstructAnswer).on( + cpInstruct.itSggcode.eq(cpInstructAnswer.id.iaSggcode), + cpInstruct.itCause.eq(cpInstructAnswer.id.iaCode) + ) + .leftJoin(tbCntcSndngDetail).on( + epostSenderDetail.recevSeq.eq(tbCntcSndngDetail.mainCode) + ) + .leftJoin(tbCntcSndngResult).on(tbCntcSndngDetail.unitySndngDetailId.eq(tbCntcSndngResult.unitySndngDetailId)) + .where( + epostSenderReg.postProcStt.eq("01"), + epostSenderReg.tgCode.in(tgCode), + epostSenderReg.conKey.in(conKey), + tbCntcSndngDetail.unitySndngMastrId.eq(""), + tbCntcSndngResult.sndngResultSttus.ne("READ") + .and(tbCntcSndngResult.sndngResultSttus.isNull() + ) + ) + .fetch(); + + return result; + } // @Transactional(readOnly = true, transactionManager = "cpTransactionManager") diff --git a/src/main/java/com/worker/scheduler/epost/schedule/EPostScheduler.java b/src/main/java/com/worker/scheduler/epost/schedule/EPostScheduler.java index 0aa6a0e..69ce5c7 100644 --- a/src/main/java/com/worker/scheduler/epost/schedule/EPostScheduler.java +++ b/src/main/java/com/worker/scheduler/epost/schedule/EPostScheduler.java @@ -1,6 +1,7 @@ package com.worker.scheduler.epost.schedule; import com.worker.scheduler.epost.dto.EPostDto; +import com.worker.scheduler.epost.repository.EPostQueryDslRepository; import com.worker.scheduler.epost.service.EPostService; import com.worker.scheduler.epost.service.EpostSetinfoService; import com.worker.scheduler.smg.dto.SinmungoDto; @@ -12,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; +import java.util.ArrayList; import java.util.List; @Component @@ -25,7 +27,8 @@ public class EPostScheduler { private final EPostService ePostService; private final FileReader fileReader; -// @Scheduled(fixedRate = 10 * 60 * 1000L) // 10분 + + // @Scheduled(fixedRate = 10 * 60 * 1000L) // 10분 public void ePostSendScheduler() { /** @@ -37,6 +40,11 @@ public class EPostScheduler { // esb경로 info EPostDto.SetInfo setInfo = epostSetinfoService.findSetInfo(); + // 발송타겟 조회 + ePostService.findEPostSendTarget(setInfo); + + + 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 13fa802..3bf3eca 100644 --- a/src/main/java/com/worker/scheduler/epost/service/EPostService.java +++ b/src/main/java/com/worker/scheduler/epost/service/EPostService.java @@ -62,9 +62,60 @@ public class EPostService { private EpGojiPrtRepository epGojiPrtRepository; - public void findEPostSendTarget() { - // R.POST_PROC_STT='01' - // 전자고지 사용여부가 true이면, REG_YMD 현재 시간보다 작으면 컨티뉴 + public void findEPostSendTarget(EPostDto.SetInfo setInfo) { + + List cpSendTargetKeys = new ArrayList<>(); + List epSendTargetKeys = new ArrayList<>(); + List cpSendTargets = new ArrayList<>(); + List epSendTargets = new ArrayList<>(); + + // 타겟의 키,code 조회 + //cGojit + if(setInfo.getCpEPostInfo() != null) cpSendTargetKeys = ePostQueryDslRepository.findSendTargetKeys(cpQueryFactory); + if(setInfo.getEpEPostInfo() != null) epSendTargetKeys = ePostQueryDslRepository.findSendTargetKeys(epQueryFactory); + + + if(setInfo.getCpIsEns() || setInfo.getEpIsEns()) { + // 전자고지 대상 조회 + // qryEgoji + if(setInfo.getCpIsEns()) cpSendTargets = ePostQueryDslRepository.findSendEgojiTargets(cpQueryFactory, cpSendTargetKeys); + if(setInfo.getEpIsEns()) epSendTargets = ePostQueryDslRepository.findSendEgojiTargets(epQueryFactory, epSendTargetKeys); + + } else { + // 조회한 키로 cpSendTargets 의 상세내용 조회 + // qryFor + cpSendTargets = ePostQueryDslRepository.findSendTargets(cpQueryFactory, cpSendTargetKeys); + epSendTargets = ePostQueryDslRepository.findSendTargets(epQueryFactory, epSendTargetKeys); + } + + + + + // REG_YMD 오늘기준 30일 이전 자료들 취소(POST_PROC_STT = '02') 로 변경 + + + //notice(안내문구 인거같음) + //goit notifce 조인 + + + + // SendTargets 돌면서 전자고지인지 체크후 후처리 + // 이거 필요 없을듯. 전자고지인지 체크후 그냥 빼버리면됨. + // 아래 스트림에서 전자고지 아닌것만 으로 스트림 돌리면됨. + + // SendTargets 돌면서 전자고지 아닌거 후처리 하는데 + // 이거 그냥 리스트를 나눠서 따로따로 진행하는게 더 깔끔함 + // steam 으로 전송대상(전자고지 아닌것) 만 추출하셈 + // 전송대상은 tg_post_yn 이 'E' 이거나 'Y' 인것만임. + // E는 대기상태로 전자고지를 안읽었으면 추후 예약발송 한다는거임. + + // 전송대상 등기번호 조회 + // 전자고지 아니면 textMakcer + // zipMaker + + //qryRegSet stt = 03 으로 업데이트 + + } @@ -389,5 +440,13 @@ public class EPostService { return maxKey; } + private String takeRgstNmbr() { + String regNo = null; + + + + return regNo; + } + } diff --git a/src/main/java/com/worker/scheduler/epost/service/EpostSetinfoService.java b/src/main/java/com/worker/scheduler/epost/service/EpostSetinfoService.java index 662d10c..2e84f90 100644 --- a/src/main/java/com/worker/scheduler/epost/service/EpostSetinfoService.java +++ b/src/main/java/com/worker/scheduler/epost/service/EpostSetinfoService.java @@ -38,41 +38,54 @@ public class EpostSetinfoService { private final DataSource epDataSource; public EPostDto.SetInfo findSetInfo() { - + // 기본정보 CpSetinfoId cpInfoId = CpSetinfoId.builder() .codeName(env.getProperty("e-post.info.cp.codeName")) .groupCode(env.getProperty("e-post.info.cp.groupCode")) .detailCode(env.getProperty("e-post.info.cp.detailCode")) .build(); - CpSetinfoId epInfoId = CpSetinfoId.builder() .codeName(env.getProperty("e-post.info.ep.codeName")) .groupCode(env.getProperty("e-post.info.ep.groupCode")) .detailCode(env.getProperty("e-post.info.ep.detailCode")) .build(); + // Epost정보 CpSetinfoId cpDocId = CpSetinfoId.builder() .codeName(env.getProperty("e-post.docCode.cp.codeName")) .groupCode(env.getProperty("e-post.docCode.cp.groupCode")) .detailCode(env.getProperty("e-post.docCode.cp.detailCode")) .build(); - CpSetinfoId epDocId = CpSetinfoId.builder() .codeName(env.getProperty("e-post.docCode.ep.codeName")) .groupCode(env.getProperty("e-post.docCode.ep.groupCode")) .detailCode(env.getProperty("e-post.docCode.ep.detailCode")) .build(); + // 전자고지 정보(사용여부) + CpSetinfoId cpEnsId = CpSetinfoId.builder() + .codeName(env.getProperty("ens.info.cp.codeName")) + .groupCode(env.getProperty("ens.info.cp.groupCode")) + .detailCode(env.getProperty("ens.info.cp.detailCode")) + .build(); + CpSetinfoId epEnsId = CpSetinfoId.builder() + .codeName(env.getProperty("ens.info.ep.codeName")) + .groupCode(env.getProperty("ens.info.ep.groupCode")) + .detailCode(env.getProperty("ens.info.cp.detailCode")) + .build(); + // ----- CP ----- CpSetinfo cpEpostInfo = null; CpSetinfo cpEpostDocInfo = null; EPostDto.EPostInfo cpEPostInfo = null; + Boolean cpIsEns = false; if (isDsAvailable(cpDataSource)) { try { cpEpostInfo = cpSetinfoRepository.findById(cpInfoId).orElse(null); cpEpostDocInfo = cpSetinfoRepository.findById(cpDocId).orElse(null); cpEPostInfo = buildEPostInfo(cpEpostInfo, cpEpostDocInfo); + cpIsEns = cpSetinfoRepository.existsById(cpEnsId); } catch (Exception e) { log.warn("[CP] 조회/빌드 실패. CP스킵: {}", e.getMessage()); } @@ -84,12 +97,14 @@ public class EpostSetinfoService { CpSetinfo epEpostInfo = null; CpSetinfo epEpostDocInfo = null; EPostDto.EPostInfo epEPostInfo = null; + Boolean epIsEns = false; if (isDsAvailable(epDataSource)) { try { epEpostInfo = epSetinfoRepository.findById(epInfoId).orElse(null); epEpostDocInfo = epSetinfoRepository.findById(epDocId).orElse(null); epEPostInfo = buildEPostInfo(epEpostInfo, epEpostDocInfo); + epIsEns = epSetinfoRepository.existsById(epEnsId); } catch (Exception e) { log.warn("[EP] 조회/빌드 실패. EP 스킵: {}", e.getMessage()); } @@ -103,6 +118,8 @@ public class EpostSetinfoService { .cpEPostInfo(cpEPostInfo) // null 허용 .epSetinfo(epEpostInfo) // null 허용 .epEPostInfo(epEPostInfo) // null 허용 + .cpIsEns(cpIsEns) // null 허용 + .epIsEns(epIsEns) // null 허용 .build(); } diff --git a/src/main/java/com/worker/scheduler/smg/service/XmlSend.java b/src/main/java/com/worker/scheduler/smg/service/XmlSend.java index 49cbd3a..9744bba 100644 --- a/src/main/java/com/worker/scheduler/smg/service/XmlSend.java +++ b/src/main/java/com/worker/scheduler/smg/service/XmlSend.java @@ -8,7 +8,7 @@ import com.worker.domain.repo.ep.EpUserRepository; import com.worker.scheduler.smg.dto.SinmungoDto; import com.worker.scheduler.smg.repository.XmlSendQueryDslRepository; import com.worker.util.common.commEnum.StateEnum; -import com.worker.util.xmlFileMaker.XmlMacker; +import com.worker.util.xmlFileMaker.XmlMaker; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,7 +25,7 @@ import java.util.concurrent.ThreadLocalRandom; @Slf4j public class XmlSend { - private final XmlMacker xmlMacker; + private final XmlMaker xmlMaker; private final CpUserRepository cpUserRepository; private final EpUserRepository epUserRepository; private final XmlSendQueryDslRepository xmlSendQueryDslRepository; @@ -69,10 +69,10 @@ public class XmlSend { String.valueOf(ThreadLocalRandom.current().nextInt(0, 100_000_000)); //xml 구조 생성 - String xmlNode = xmlMacker.writeEsbAnswerXml(target, setInfo.getCpSetinfo(), makeInterfaceSeq); + String xmlNode = xmlMaker.writeEsbAnswerXml(target, setInfo.getCpSetinfo(), makeInterfaceSeq); // xml 생성 - xmlMacker.generateSinmungoXml(xmlNode, makeInterfaceSeq, setInfo.getCpSetinfo()); + xmlMaker.generateSinmungoXml(xmlNode, makeInterfaceSeq, setInfo.getCpSetinfo()); //그리고 만들어진놈 mmcode로 상태 업데이트해 cpAnswerRepository.findById(target.getMmCode()) @@ -95,10 +95,10 @@ public class XmlSend { String.valueOf(ThreadLocalRandom.current().nextInt(0, 100_000_000)); //xml 구조 생성 - String xmlNode = xmlMacker.writeEsbAnswerXml(target, setInfo.getCpSetinfo(), makeInterfaceSeq); + String xmlNode = xmlMaker.writeEsbAnswerXml(target, setInfo.getCpSetinfo(), makeInterfaceSeq); // xml 생성 - xmlMacker.generateSinmungoXml(xmlNode, makeInterfaceSeq, setInfo.getEpSetinfo()); + xmlMaker.generateSinmungoXml(xmlNode, makeInterfaceSeq, setInfo.getEpSetinfo()); //그리고 만들어진놈 mmcode로 상태 업데이트해 epAnswerRepository.findById(target.getMmCode()) diff --git a/src/main/java/com/worker/util/textFileMacker/TextMaker.java b/src/main/java/com/worker/util/textFileMacker/TextMaker.java new file mode 100644 index 0000000..ced83a7 --- /dev/null +++ b/src/main/java/com/worker/util/textFileMacker/TextMaker.java @@ -0,0 +1,4 @@ +package com.worker.util.textFileMacker; + +public class TextMaker { +} diff --git a/src/main/java/com/worker/util/xmlFileMaker/XmlMacker.java b/src/main/java/com/worker/util/xmlFileMaker/XmlMaker.java similarity index 99% rename from src/main/java/com/worker/util/xmlFileMaker/XmlMacker.java rename to src/main/java/com/worker/util/xmlFileMaker/XmlMaker.java index 456ad0a..5b62b28 100644 --- a/src/main/java/com/worker/util/xmlFileMaker/XmlMacker.java +++ b/src/main/java/com/worker/util/xmlFileMaker/XmlMaker.java @@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter; @Component @Slf4j -public class XmlMacker { +public class XmlMaker { // 답변처리 xml diff --git a/src/main/java/com/worker/util/zipFileMaker/ZipMaker.java b/src/main/java/com/worker/util/zipFileMaker/ZipMaker.java new file mode 100644 index 0000000..93fc1cb --- /dev/null +++ b/src/main/java/com/worker/util/zipFileMaker/ZipMaker.java @@ -0,0 +1,4 @@ +package com.worker.util.zipFileMaker; + +public class ZipMaker { +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 21805b0..17b2134 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -89,7 +89,16 @@ e-post: groupCode: DOC_CODE detailCode: DEV - +ens: + info: + cp: + codeName: ENS + groupCode: 1 + detailCode: 1 + ep: + codeName: ENS + groupCode: 1 + detailCode: 1 logging: file: diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 649cdfa..24b520e 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -89,7 +89,16 @@ e-post: groupCode: DOC_CODE detailCode: LOCAL - +ens: + info: + cp: + codeName: ENS + groupCode: 1 + detailCode: 1 + ep: + codeName: ENS + groupCode: 1 + detailCode: 1 logging: file: diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 2f7b592..f1ab9a2 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -89,6 +89,17 @@ e-post: groupCode: DOC_CODE detailCode: PROD +ens: + info: + cp: + codeName: ENS + groupCode: 1 + detailCode: 1 + ep: + codeName: ENS + groupCode: 1 + detailCode: 1 + logging: file: name: ./cc-logs/worker.log