|
|
|
|
@ -10,7 +10,7 @@ import java.util.List;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
public class EpostTextFileParser implements FileParserInterface<List<EPostDto.EPostFileRead>> {
|
|
|
|
|
public class EpostTextFileParser implements FileParserInterface<EPostDto.EPostFileRead> {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 텍스트 파일을 읽어 구분자로 split 하여 반환한다.
|
|
|
|
|
@ -18,12 +18,18 @@ public class EpostTextFileParser implements FileParserInterface<List<EPostDto.EP
|
|
|
|
|
* @return 각 라인을 구분자로 split 한 결과 리스트
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<EPostDto.EPostFileRead> parse(File file) throws Exception {
|
|
|
|
|
final String separator = "|"; // 필요시 외부 주입 가능
|
|
|
|
|
public EPostDto.EPostFileRead parse(File file) throws Exception {
|
|
|
|
|
|
|
|
|
|
String fileKind = file.getName();
|
|
|
|
|
|
|
|
|
|
final String separator = "|";
|
|
|
|
|
final Pattern SEP = Pattern.compile(Pattern.quote(separator)); // 정규식 이스케이프
|
|
|
|
|
final int EXPECTED_COLS = 12; // 컬럼 수 기대치
|
|
|
|
|
|
|
|
|
|
List<EPostDto.EPostFileRead> results = new ArrayList<>();
|
|
|
|
|
EPostDto.EPostFileRead results = new EPostDto.EPostFileRead();
|
|
|
|
|
List<EPostDto.Recv> recvs = new ArrayList<>();
|
|
|
|
|
List<EPostDto.Prt> prts = new ArrayList<>();
|
|
|
|
|
List<EPostDto.Deliv> delivs = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
// 파일 인코딩이 EUC-KR 계열이면 Charset 지정 권장 (예: EUC-KR)
|
|
|
|
|
try (BufferedReader br = new BufferedReader(
|
|
|
|
|
@ -37,38 +43,82 @@ public class EpostTextFileParser implements FileParserInterface<List<EPostDto.EP
|
|
|
|
|
String[] item = SEP.split(line, -1);
|
|
|
|
|
|
|
|
|
|
// 컬럼 수 검증(짧으면 스킵 or 예외)
|
|
|
|
|
if (item.length < EXPECTED_COLS) {
|
|
|
|
|
// 로그 찍고 continue 하거나 예외 던지기
|
|
|
|
|
System.err.println("열 개수 부족: " + file.getName() + " -> " + line);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// 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);
|
|
|
|
|
if (fileKind.contains("recv")) {
|
|
|
|
|
recvs.add(parseToRecv(item));
|
|
|
|
|
results = EPostDto.EPostFileRead.<EPostDto.Recv>builder()
|
|
|
|
|
.kind("recv")
|
|
|
|
|
.result(recvs)
|
|
|
|
|
.build();
|
|
|
|
|
} else if (fileKind.contains("prt")) {
|
|
|
|
|
prts.add(parseToPrt(item));
|
|
|
|
|
results = EPostDto.EPostFileRead.<EPostDto.Prt>builder()
|
|
|
|
|
.kind("prt")
|
|
|
|
|
.result(prts)
|
|
|
|
|
.build();
|
|
|
|
|
} else if (fileKind.contains("deliv")) {
|
|
|
|
|
delivs.add(parseToDeliv(item));
|
|
|
|
|
results = EPostDto.EPostFileRead.<EPostDto.Deliv>builder()
|
|
|
|
|
.kind("deliv")
|
|
|
|
|
.result(delivs)
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private EPostDto.Recv parseToRecv(String[] item) {
|
|
|
|
|
return EPostDto.Recv.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();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private EPostDto.Prt parseToPrt(String[] item) {
|
|
|
|
|
return EPostDto.Prt.builder()
|
|
|
|
|
.conKey(item[0])
|
|
|
|
|
.restNmbr(item[1])
|
|
|
|
|
.reletcdata(item[2])
|
|
|
|
|
.dataCd(item[3])
|
|
|
|
|
.mailCnt(item[4])
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private EPostDto.Deliv parseToDeliv(String[] item) {
|
|
|
|
|
return EPostDto.Deliv.builder()
|
|
|
|
|
.conKey(item[0])
|
|
|
|
|
.regiNo(item[1])
|
|
|
|
|
.delivYmd(item[2])
|
|
|
|
|
.delivHhmd(item[3])
|
|
|
|
|
.delivRsltCd(item[4])
|
|
|
|
|
.sendDate(item[5])
|
|
|
|
|
.sendTime(item[6])
|
|
|
|
|
.resultCd(item[7])
|
|
|
|
|
.aDate(item[8])
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|