feat : epost text파일 reader 구현중

master
Kurt92 4 months ago
parent 419a67c88c
commit 8064b72996

@ -0,0 +1,58 @@
package com.worker.domain.entity;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class EpostRceptResult {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "RR_CODE", nullable = false, updatable = false)
private Integer rrCode;
@Column(name = "CON_ORG", length = 13, nullable = false)
private String conOrg;
@Column(name = "RELORSECT_CD", length = 15, nullable = false)
private String relOrsectCd;
@Column(name = "RELETCDATA", length = 200, nullable = false)
private String reletcData;
@Column(name = "EXTRI_REGYMD", length = 8, nullable = false)
private String extriRegymd;
@Column(name = "RCEPT_YMD", length = 8)
private String rceptYmd;
@Column(name = "RCEPT_ID", length = 5)
private String rceptId;
@Column(name = "DIV_KB", length = 3, nullable = false)
private String divKb;
@Column(name = "RCEPT_CNT", nullable = false)
private Integer rceptCnt;
@Column(name = "RCEPT_AMT")
private Integer rceptAmt;
@Column(name = "USEFEE_AMT")
private Integer usefeeAmt;
@Column(name = "TOTPOST_PRC")
private Integer totpostPrc;
@Column(name = "JOB_CD")
private Integer jobCd;
}

@ -33,6 +33,23 @@ public class EPostDto {
private List<SggCode> sggCodes;
}
@Getter
@Builder
public static class EPostFileRead {
private String conOrg;
private String relorsectCd;
private String reletcdata;
private String extriRegymd;
private String rceptYmd;
private String rceptId;
private String divKb;
private String rceptCnt;
private String rceptAmt;
private String usefeeAmt;
private String totpostPrc;
private String jobCd;
}
public static class SggCode {
private String sggCode;
private String sggName;

@ -4,18 +4,20 @@ import com.worker.scheduler.epost.dto.EPostDto;
import com.worker.scheduler.epost.service.EPostService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
@Slf4j
@ConditionalOnProperty(name = "scheduler.epost.enabled", havingValue = "true")
public class EPostScheduler {
private final EPostService ePostService;
// @Scheduled(fixedRate = 10 * 60 * 1000) // 10분
// @Scheduled(fixedRate = 10 * 60 * 1000L) // 10분
public void ePostSendScheduler() {
/**

@ -9,7 +9,7 @@ import com.worker.util.common.commEnum.DateTimePatternEnum;
import com.worker.util.common.commEnum.FileKind;
import com.worker.util.common.commEnum.LawGBEnum;
import com.worker.util.common.commEnum.TakeSeCdEnum;
import com.worker.util.xmlFileReader.XmlReader;
import com.worker.util.fileReader.FileReader;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -34,7 +34,7 @@ import java.util.stream.Stream;
public class DbPolling {
private final Environment env;
private final XmlReader xmlReader;
private final FileReader fileReader;
private final CpSetinfoRepository cpSetinfoRepository;
private final EpSetinfoRepository epSetinfoRepository;
@ -322,14 +322,14 @@ public class DbPolling {
private void fileBackup(CpSetinfo setInfo, List<SinmungoDto.SinmungoXml> eachList) {
//xml 백업
xmlReader.xmlFileBackup(Paths.get(setInfo.getStrValue2()), Paths.get(setInfo.getStrValue4()), eachList);
fileReader.xmlFileBackup(Paths.get(setInfo.getStrValue2()), Paths.get(setInfo.getStrValue4()), eachList);
//이미지 백업
List<SinmungoDto.ImgParser> imgParsers = eachList.stream()
.flatMap(result -> result.getImgParsers().stream())
.collect(Collectors.toList());
xmlReader.imgLocalSave(Paths.get(setInfo.getStrValue5()), imgParsers);
fileReader.imgLocalSave(Paths.get(setInfo.getStrValue5()), imgParsers);
}
/**

@ -0,0 +1,9 @@
package com.worker.util.fileReader;
import java.io.File;
public interface FileParserInterface<T> {
T parse(File file) throws Exception;
}

@ -1,4 +1,4 @@
package com.worker.util.xmlFileReader;
package com.worker.util.fileReader;
import com.worker.scheduler.smg.dto.SinmungoDto;
import lombok.extern.slf4j.Slf4j;
@ -19,17 +19,17 @@ import java.util.stream.Stream;
@Component
@Slf4j
public class XmlReader {
public class FileReader {
public <T> List<T> readXmlFiles(String dirPath, XmlParserInterface<T> parser) {
public <T> List<T> readFiles(String dirPath, FileParserInterface<T> parser, String ext) {
File dir = new File(dirPath);
File[] files = dir.listFiles((d, name) -> name.endsWith(".xml"));
File[] files = dir.listFiles((d, name) -> name.endsWith(ext));
List<T> result = new ArrayList<>();
if (files != null) {
for (File file : files) {
try {
// XmlParser를 통해 호출 리스트에 add
// FileParser를 통해 호출 리스트에 add
result.add(parser.parse(file));
} catch (Exception e) {
System.err.println("파싱 실패: " + file.getName());

@ -0,0 +1,43 @@
//package com.worker.util.fileReader.text;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import java.io.BufferedReader;
//import java.io.FileReader;
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.regex.Pattern;
//
//@Component
//@Slf4j
//public class TextFileReader {
//
//
//
//
//
//
// /**
// * 텍스트 파일을 읽어 구분자로 split 하여 반환한다.
// * @param filePath 파일 경로
// * @param separator 구분자 (",", "|", "/", "₩" 등)
// * @return 각 라인을 구분자로 split 한 결과 리스트
// */
// public List<String[]> fileParse(String filePath, String separator) {
// List<String[]> list = new ArrayList<>();
// try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
// String line;
// while ((line = br.readLine()) != null) {
// // 빈 값도 보존하기 위해 limit=-1 옵션 추가
// String[] tokens = line.split(Pattern.quote(separator), -1);
// list.add(tokens);
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// return list;
// }
//
//}

@ -0,0 +1,79 @@
package com.worker.util.fileReader.xml.impl;
import com.worker.scheduler.epost.dto.EPostDto;
import com.worker.util.fileReader.FileParserInterface;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class EpostTextFileParser implements FileParserInterface<List<EPostDto.EPostFileRead>> {
/**
* split .
* @return split
*/
@Override
public List<EPostDto.EPostFileRead> parse(File file) throws Exception {
final String separator = "|"; // 필요시 외부 주입 가능
final Pattern SEP = Pattern.compile(Pattern.quote(separator)); // 정규식 이스케이프
final int EXPECTED_COLS = 12; // 컬럼 수 기대치
List<EPostDto.EPostFileRead> results = new ArrayList<>();
// 파일 인코딩이 EUC-KR 계열이면 Charset 지정 권장 (예: EUC-KR)
try (BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(file), java.nio.charset.StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) {
if (line.isEmpty()) continue; // 빈 줄 스킵(원하면 제거)
// 빈값 보존 위해 limit=-1
String[] item = SEP.split(line, -1);
// 컬럼 수 검증(짧으면 스킵 or 예외)
if (item.length < EXPECTED_COLS) {
// 로그 찍고 continue 하거나 예외 던지기
System.err.println("열 개수 부족: " + file.getName() + " -> " + line);
continue;
}
// 필요 시 trim
for (int i = 0; i < item.length; i++) item[i] = item[i].trim();
EPostDto.EPostFileRead result = EPostDto.EPostFileRead.builder()
.conOrg(item[0])
.relorsectCd(item[1])
.reletcdata(item[2])
.extriRegymd(item[3])
.rceptYmd(item[4])
.rceptId(item[5])
.divKb(item[6])
.rceptCnt(item[7])
.rceptAmt(item[8])
.usefeeAmt(item[9])
.totpostPrc(item[10])
.jobCd(item[11])
.build();
results.add(result);
}
}
return results;
}
}

@ -1,8 +1,8 @@
package com.worker.util.xmlFileReader.impl;
package com.worker.util.fileReader.xml.impl;
import com.worker.scheduler.smg.dto.SinmungoDto;
import com.worker.util.common.commEnum.FileKind;
import com.worker.util.xmlFileReader.XmlParserInterface;
import com.worker.util.fileReader.FileParserInterface;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@ -15,7 +15,7 @@ import java.util.Base64;
import java.util.List;
@Component
public class SinmungoXmlParser implements XmlParserInterface<SinmungoDto.SinmungoXml> {
public class SinmungoXmlFileParser implements FileParserInterface<SinmungoDto.SinmungoXml> {
@Override
public SinmungoDto.SinmungoXml parse(File file) throws Exception {

@ -1,9 +0,0 @@
package com.worker.util.xmlFileReader;
import java.io.File;
public interface XmlParserInterface<T> {
T parse(File file) throws Exception;
}

@ -1,4 +0,0 @@
package com.worker.util.xmlFileReader.impl;
public class EpostXmlParser {
}
Loading…
Cancel
Save