From ca814fe48084fafe3ff2ce2f3d77b2b0b3b1c8d9 Mon Sep 17 00:00:00 2001 From: Kurt92 Date: Tue, 1 Jul 2025 17:38:00 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20send=20xml=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/worker/dto/SinmungoDto.java | 8 ++ .../worker/scheduler/smg/service/XmlSend.java | 99 ++++++++++++++++++- .../com/worker/util/fileMaker/XmlMacker.java | 78 ++++++++------- 3 files changed, 146 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/worker/dto/SinmungoDto.java b/src/main/java/com/worker/dto/SinmungoDto.java index 28817cf..f2aa69a 100644 --- a/src/main/java/com/worker/dto/SinmungoDto.java +++ b/src/main/java/com/worker/dto/SinmungoDto.java @@ -123,6 +123,14 @@ public class SinmungoDto { } + @Data + @Builder + public static class UserInfos{ + private List cpUsers; + private List epUsers; + + } + } 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 b8c2def..5763642 100644 --- a/src/main/java/com/worker/scheduler/smg/service/XmlSend.java +++ b/src/main/java/com/worker/scheduler/smg/service/XmlSend.java @@ -1,21 +1,39 @@ package com.worker.scheduler.smg.service; +import com.worker.domain.entity.CpAnswer; +import com.worker.domain.entity.CpUser; import com.worker.domain.repo.cp.CpAnswerRepository; +import com.worker.domain.repo.cp.CpUserRepository; import com.worker.domain.repo.ep.EpAnswerRepository; +import com.worker.domain.repo.ep.EpUserRepository; import com.worker.dto.SinmungoDto; +import com.worker.dto.UserInfoDto; import com.worker.util.common.commEnum.StateEnum; +import com.worker.util.fileMaker.XmlMacker; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @RequiredArgsConstructor +@Slf4j public class XmlSend { + private final XmlMacker xmlMacker; + private final CpAnswerRepository cpAnswerRepository; private final EpAnswerRepository epAnswerRepository; + private final CpUserRepository cpUserRepository; + private final EpUserRepository epUserRepository; // 실행 대상 답변 찾기 public SinmungoDto.Send.Answers findAnswersByStatus(String status) { @@ -29,21 +47,94 @@ public class XmlSend { //send 디렉토리에 xml 생성 public void send(SinmungoDto.SetInfo setInfo, SinmungoDto.Send.Answers answers) { - // answers 에서 as_reuser 추출 - List reuser; - - // 추출한 reuser에서 user정보 조회 + // +// List reuser = Stream.concat( +// Optional.ofNullable(answers.getCpAnswer()).orElse(List.of()).stream(), +// Optional.ofNullable(answers.getEpAnswer()).orElse(List.of()).stream() +// ) +// .map(CpAnswer::getAsReuser) +// .filter(Objects::nonNull) +// .collect(Collectors.toList()); + // 대상 답변의 reuser를 순회하며 userInfo를 조회 +// List> CpUserInfos = answers.getCpAnswer().stream() +// .map(user -> cpUserRepository.findById(Long.valueOf(user.getAsReuser()))) +// .collect(Collectors.toList()); +// List> EpUserInfos = answers.getEpAnswer().stream() +// .map(user -> epUserRepository.findById(Long.valueOf(user.getAsReuser()))) +// .collect(Collectors.toList()); + + // 유저 정보 + SinmungoDto.Send.UserInfos userInfos = findUserInfos(answers); + // + + + log.info(userInfos.toString()); + log.info(userInfos.toString()); // main테이블 조회 + + // mm_state 별로 im_civil_abstract_l 값 업데이트 //awsers 만큼 // 위에서 조회한 정보들 조합해서 xml 생성 + //String 으로 xml 만들고 그거 파라미터로 파일생성하는 매서드로 가져가 + answers.getCpAnswer().forEach(cpAnswer -> + userInfos.getCpUsers().stream() + .filter(user -> Objects.equals(user.getUmCode(), cpAnswer.getAsReuser())) + .findFirst() + .ifPresent(user -> { + try { + xmlMacker.writeEsbAnswerXml(cpAnswer, user); + } catch (IOException e) { + throw new RuntimeException(e); + } + }) + ); + answers.getEpAnswer().forEach(epAnswer -> + userInfos.getEpUsers().stream() + .findFirst() + .filter(user -> Objects.equals(user.getUmCode(), epAnswer.getAsReuser())) + .ifPresent(user -> { + try { + xmlMacker.writeEsbAnswerXml(epAnswer, user); + } catch (IOException e) { + throw new RuntimeException(e); + } + }) + ); + } + + // answers 리스트에서 reuser를 통해 유저정보를 추출한다. + private SinmungoDto.Send.UserInfos findUserInfos(SinmungoDto.Send.Answers answers) { + + return SinmungoDto.Send.UserInfos.builder() + .cpUsers( + answers.getCpAnswer().stream() + .map(user -> cpUserRepository.findById(Long.valueOf(user.getAsReuser()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.collectingAndThen( + Collectors.toMap(CpUser::getUmCode, Function.identity(), (a, b) -> a), + m -> new ArrayList<>(m.values()) + )) + ) + .epUsers( + answers.getEpAnswer().stream() + .map(user -> epUserRepository.findById(Long.valueOf(user.getAsReuser()))) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.collectingAndThen( + Collectors.toMap(CpUser::getUmCode, Function.identity(), (a, b) -> a), + m -> new ArrayList<>(m.values()) + )) + ) + .build(); } diff --git a/src/main/java/com/worker/util/fileMaker/XmlMacker.java b/src/main/java/com/worker/util/fileMaker/XmlMacker.java index 98c5686..3073bab 100644 --- a/src/main/java/com/worker/util/fileMaker/XmlMacker.java +++ b/src/main/java/com/worker/util/fileMaker/XmlMacker.java @@ -1,5 +1,7 @@ package com.worker.util.fileMaker; +import com.worker.domain.entity.CpAnswer; +import com.worker.domain.entity.CpUser; import com.worker.dto.SinmungoDto; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -15,46 +17,50 @@ public class XmlMacker { // 답변처리 xml - public void writeEsbAnswerXml(SinmungoDto.SinmungoXml xmlDto, Path sendDir) throws IOException { -// String xml = -// "\n" + -// "\n" + -// " " + xmlDto.getInterface_seq_n() + "\n" + -// " " + xmlDto.getSys_gubun_c() + "\n" + -// " " + xmlDto.getAnc_code_v() + "\n" + -// " " + "180" + "\n" + -// " " + xmlDto.getPeti_anc_code_v() + "\n" + -// " " + xmlDto.getPeti_no_c() + "\n" + -// " " + xmlDto.getCivil_no_c() + "\n" + -// " " + xmlDto.getCivil_gist_v() + "\n" + -// " " + xmlDto.getCivil_abstract_l() + "\n" + -// " " + xmlDto.getPcd_dept_v() + "\n" + -// " " + xmlDto.getPcd_dept_nm_v() + "\n" + -// " " + xmlDto.getDuty_id_v() + "\n" + -// " " + xmlDto.getPcd_email_v() + "\n" + -// " " + xmlDto.getPcd_tel_v() + "\n" + -// " " + xmlDto.getPcd_rst_cont_l() + "\n" + -// " " + xmlDto.getDo_reg_d() + "\n" + -// " " + "N" + "\n" + -// " " + xmlDto.getPcd_anc_code_v() + "\n" + -// " " + xmlDto.getReg_d() + "\n" + -// " " + "2" + "\n" + -// " " + xmlDto.getSend_d() + "\n" + -// " " + xmlDto.getApply_d() + "\n" + -// " " + "Y" + "\n" + -// " " + "" + "\n" + -// " " + "" + "\n" + -// " " + "" + "\n" + -// " " + "" + "\n" + -// " " + xmlDto.getSrcorgcd() + "\n" + -// " " + "" + "\n" + -// "\n"; -// + public String writeEsbAnswerXml(CpAnswer answers, CpUser userInfo) throws IOException { + String xml = + "\n" + + "\n" + + " " + "랜덤으로 시퀀스 만드는데 랜덤으로 만들어도 됨?????" + "\n" + + " " + answers.getAsSysGubunC() + "\n" + + " " + answers.getAsState() + "\n" + + " " + "180" + "\n" + + " " + answers.getAsPetiAncCodeV() + "\n" + + " " + answers.getAsJsno() + "\n" + + " " + answers.getAsJsnoM() + "\n" + + " " + "이거 무슨 위반인지 로직" + "\n" + + " " + "mm_state 과태료 상태" + "\n" + + " " + "SG_DEPCODE??" + "\n" + + " " + "SG_SGGNAME" + "\n" + + " " + userInfo.getUmName() + "\n" + + " " + userInfo.getUmEmail() + "\n" + + " " + userInfo.getUmTelno() + "\n" + + " " + answers.getAsText() + "\n" + + " " + "현재시간 yyyymmddhhmmss" + "\n" + + " " + "N" + "\n" + + " " + "SG_DEPCODE??" + "\n" + + " " + "현재시간 yyyymmddhhmmss" + "\n" + + " " + "2" + "\n" + + " " + "현재시간 yyyymmddhhmmss" + "\n" + + " " + "현재시간 yyyymmddhhmmss" + "\n" + + " " + "Y" + "\n" + + " " + "" + "\n" + + " " + "" + "\n" + + " " + "" + "\n" + + " " + "" + "\n" + + " " + "상위기간 코드 -> setInfo 에서 가져옴" + "\n" + + " " + "" + "\n" + + "\n"; + + // String fileName = "EPOUGB$" + xmlDto.interface_seq_n() + ".xml"; // Path filePath = sendDir.resolve(fileName); // // // 저장 (EUCKR 인코딩) // Files.write(filePath, xml.getBytes(Charset.forName("EUC-KR"))); + + + return xml; } // 회수처리 xml (cp 상에선 서손처리) @@ -62,4 +68,6 @@ public class XmlMacker { } + + // send 디렉토리로 파일저장 }