diff --git a/src/main/java/com/worker/scheduler/epost/service/EPostSendService.java b/src/main/java/com/worker/scheduler/epost/service/EPostSendService.java index 2812765..15b7dbd 100644 --- a/src/main/java/com/worker/scheduler/epost/service/EPostSendService.java +++ b/src/main/java/com/worker/scheduler/epost/service/EPostSendService.java @@ -2,6 +2,7 @@ package com.worker.scheduler.epost.service; import com.querydsl.jpa.impl.JPAQueryFactory; import com.worker.domain.entity.CpGojiPrt; +import com.worker.domain.entity.CpSetinfo; import com.worker.domain.entity.EpostRgstNmbr; import com.worker.domain.entity.EpostSenderDetail; import com.worker.domain.repo.cp.CpEPostRgstNmbr; @@ -24,6 +25,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @RequiredArgsConstructor @@ -176,7 +178,12 @@ public class EPostSendService { } // 택스트파일 생성 try { - textMaker.generateTextFile(cpSendEpostTargets, epSendEpostTargets, cpSendEgojiTargets, epSendEgojiTargets); + List allTargets = Stream.of(cpSendEpostTargets, epSendEpostTargets, cpSendEgojiTargets, epSendEgojiTargets) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + if(setInfo.getCpSetinfo() != null) textMaker.generateTextFile(allTargets, setInfo.getCpSetinfo()); + else textMaker.generateTextFile(allTargets, setInfo.getEpSetinfo()); + } catch (Exception e) { log.error("ZIP 파일 생성 실패 : " + e.getMessage()); } diff --git a/src/main/java/com/worker/scheduler/smg/service/DbPolling.java b/src/main/java/com/worker/scheduler/smg/service/DbPolling.java index fd9cc8f..3e76d2d 100644 --- a/src/main/java/com/worker/scheduler/smg/service/DbPolling.java +++ b/src/main/java/com/worker/scheduler/smg/service/DbPolling.java @@ -443,11 +443,23 @@ public class DbPolling { //이미지 파일명을 mmCode + abcd 를 붙여 변환한다. private void changeImgFileNmToMmcode(List eachList, int index, String mmcode) { - for(int i = 0; i < eachList.get(index).getImgParsers().size(); i++ ) { - char suffix = (char) ('A' + i); // A, B, C, D ... - if(eachList.get(index).getImgParsers().get(i).getFileType() == 1) { - eachList.get(index).getImgParsers().get(i).setFileName(mmcode+suffix+".jpg"); - } else eachList.get(index).getImgParsers().get(i).setFileName(mmcode+suffix+"Z.mp4"); + var xml = eachList.get(index); + if (xml == null || xml.getImgParsers() == null) return; + + var imgs = xml.getImgParsers(); + + // 최대 4개(k, l, m, n)만 처리 + int limit = Math.min(imgs.size(), 4); + for (int i = 0; i < limit; i++) { + var img = imgs.get(i); + if (img == null) continue; + + char suffix = (char) ('k' + i); // k, l, m, n + if (img.getFileType() == 1) { + img.setFileName(mmcode + suffix + ".jpg"); + } else { + img.setFileName(mmcode + suffix + "Z.mp4"); + } } } diff --git a/src/main/java/com/worker/util/textFileMacker/TextMaker.java b/src/main/java/com/worker/util/textFileMacker/TextMaker.java index bbb713b..5676a92 100644 --- a/src/main/java/com/worker/util/textFileMacker/TextMaker.java +++ b/src/main/java/com/worker/util/textFileMacker/TextMaker.java @@ -1,11 +1,20 @@ package com.worker.util.textFileMacker; +import com.worker.domain.entity.CpSetinfo; import com.worker.scheduler.epost.dto.EPostDto; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Component @Slf4j @@ -14,15 +23,30 @@ 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 cpSendEpostTargets, - List epSendEpostTargets, - List cpSendEgojiTargets, - List epSendEgojiTargets - ) { + public void generateTextFile(List sendTargets, CpSetinfo setInfo) { - // cpSendTargets을 - log.info(epSendEpostTargets.toString()); + // 전체 타겟을 콘키별로 묶음. + Map> sendTargetGroupingByConkey = sendTargets.stream() + .collect(Collectors.groupingBy(EPostDto.SendTarget.Target::getConKey)); + //key로 택스트파일 생성 + sendTargetGroupingByConkey.forEach((conKey, targets) -> { + Path baseDir = Path.of(setInfo.getStrValue8()); + Path out = baseDir.resolve(conKey + ".txt"); + + List lines = new ArrayList<>(targets.size()); + for(int i = 0; i < targets.size(); i++) { + EPostDto.SendTarget.Target target = targets.get(i); + lines.add(addLine(target, String.valueOf(i), String.valueOf(targets.size()), conKey)); + } + try { + Files.write(out, lines, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + } catch (IOException e) { + throw new UncheckedIOException("파일 쓰기 실패: " + out, e); + } + }); + + log.info(sendTargetGroupingByConkey.toString()); }