feat : EPost Deliv 작업중. 레거시에서 해당로직 너무 이상해서, 새로작업중

master
Kurt92 3 months ago
parent 2cc5ad06a0
commit aecf820570

@ -1,8 +1,9 @@
# 델파이 데몬 마이그레이션
### 연계 디비폴링, 프로그램 업데이트를 위한 워커
기존 델파이 데몬을 스프링 스케쥴러로 대체한다.
기존 델파이 데몬을 스프링 스케쥴러로 대체한다. <br>
manual > 수동실행 및 모니터링<br>
worker > 메인 스케쥴러
@ -10,12 +11,15 @@
아래 명령어로 실행한다. </br>
jdk는 17버전</br>
기존 돌고있는 서비스의 영향을 주지 않기 위해 서버 시스템 환경변수는 그대로 둔다</br>
아래 명령어처럼 다운로드한 jdk 경로를 명시적으로 하여 실행하도록 한다.
아래 명령어처럼 다운로드한 jdk 경로를 명시적으로 하여 실행하도록 한다.</br>
25/9/8일 기준으로 자바 변경, 스크립트 bat파일을 통한 실행으로 변경. (아래 참조)
```
& "C:\Program Files\Eclipse Adoptium\jdk-17.0.15.6-hotspot\bin\java.exe" -jar "C:\Users\Administrator\Desktop\clean-parking-worker-0.0.1-SNAPSHOT.jar" --spring.profiles.active=local
<br>
<br>
```
```
start "" "C:\Program Files\Eclipse Adoptium\jdk-17.0.15.6-hotspot\bin\java.exe" -jar "C:\Users\Administrator\Desktop\clean-parking-worker-0.0.1-SNAPSHOT.jar" --spring.profiles.active=local >> "C:\logs\worker.log" 2>&1
```
- 자바 경로 , 배포할 jar파일 경로, 실행시 적용시킬 프로파일 순서이다.
@ -24,15 +28,18 @@ start "" "C:\Program Files\Eclipse Adoptium\jdk-17.0.15.6-hotspot\bin\java.exe"
- 대신 로그를 볼려면 실행로그파일을 따로 지정해줘야 된다.
<br/>
![스크린샷 2025-09-09 오전 10.13.50.png](../../../../../var/folders/qj/hwm278q51bg1yghyw_bybl5h0000gn/T/TemporaryItems/NSIRD_screencaptureui_TNPAv2/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202025-09-09%20%EC%98%A4%EC%A0%84%2010.13.50.png)
- 수동실행을 위한 뷰페이지 localhost:8011로 접속하면됨.
- 로그보기를 누르면 실시간 로그도 볼수 있음.
- 프로그램 실행유무는 로컬호스트 8011을 접속 가능 여부로 판단하면됨.
- 25/9/8일 화성 테스트중 Eclipse Adoptium jdk 의존성 문제 발견. 원인은 서버 2012 너무 예전버전이라 그럼.
- 그래서 zulu17 버전으로 변경
- 그래서 zulu17 버전으로 변경 (old os버전과의 호환성 문제가 덜하다고 함)
- c:/program files 안에 zip버전 자바 압축을 풀고 폴더명을 zulu17로 변경.
- 해당경로를 명시적으로 작성하여 자바 프로젝트를 실행시킨다.
- 아래는 스크립트 bat파일이다.
- 각 환경에 따라 디렉토리 위치만 변경해주면 된다.
- kill은 8011기준 pid를 찾아 kill한다. 만약 서비스 포트가 변경되면 해당 포트로 변경해준다.
- 실행시킬 .jar 옆(./)에 logs 디렉토리가 있어야함.
```
@echo off
start "" "C:\Program Files\zulu17\bin\javaw.exe" ^
@ -71,7 +78,9 @@ exit /b 0
[SetInfo] 필수 값 세팅 2</br>
- setinfo는 멀티 프라이머리키임. CODE_NAME, GROUP_CODE, DETAIL_CODE
- setinfo는 멀티 PK임. CODE_NAME, GROUP_CODE, DETAIL_CODE
[신문고]
- CODE_NANE(PK) : WORKER
- GROUP_CODE(PK) : INFO
- DETAIL_CODE(PK) : PROD
@ -82,4 +91,30 @@ exit /b 0
- STR_VALUE3 : ESB SEND 경로
- STR_VALUE4 : 신문고 xml 백업 경로
- STR_VALUE5 : 신문고 이미지 파일 백업경로
- STR_VALUE6 : 하위 모든 시군구 + 부서코드 제이슨 형태 ex) {"수정구":[41131, 3790009], "중원구":[41133, 3800009], "분당구": [41135, 3810070]}
- STR_VALUE6 : 하위 모든 시군구 + 부서코드 제이슨 형태 ex) {"수정구":[41131, 3790009], "중원구":[41133, 3800009], "분당구": [41135, 3810070]}
[E-Post]
- CODE_NANE(PK) :
- GROUP_CODE(PK) :
- DETAIL_CODE(PK) :
- INT_VALUE1 :
- INT_VALUE2 :
- STR_VALUE1 :
- STR_VALUE2 :
- STR_VALUE3 :
- STR_VALUE4 :
- STR_VALUE5 :
- STR_VALUE6 :
- CODE_NANE(PK) :
- GROUP_CODE(PK) :
- DETAIL_CODE(PK) :
- INT_VALUE1 :
- INT_VALUE2 :
- STR_VALUE1 :
- STR_VALUE2 :
- STR_VALUE3 :
- STR_VALUE4 :
- STR_VALUE5 :
- STR_VALUE6 :

@ -0,0 +1,63 @@
package com.worker.domain.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Table(
name = "cp_goji_send_hist",
indexes = {
@Index(name = "CP_GOJI_SEND_HIST_IDX1", columnList = "GH_GPCODE"),
@Index(name = "CP_GOJI_SEND_HIST_IDX2", columnList = "GH_SGGCODE, GH_SEND_DATE, GH_SEND_TIME"),
@Index(name = "CP_GOJI_SEND_HIST_IDX3", columnList = "GH_CON_KEY, GH_REGINO")
}
)
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CpGojiSendHist {
@Id
@Column(name = "GH_CODE", length = 18, nullable = false)
private String ghCode; // PK
@Column(name = "GH_GPCODE")
private Integer ghGpcode; // int(10)
@Column(name = "GH_SGGCODE", length = 5)
private String ghSggcode; // varchar(5)
@Column(name = "GH_CON_KEY", length = 30)
private String ghConKey; // varchar(30)
@Column(name = "GH_REGINO", length = 13)
private String ghRegino; // varchar(13)
@Column(name = "GH_SEND_DATE", length = 8)
private String ghSendDate; // varchar(8) (yyyyMMdd)
@Column(name = "GH_SEND_TIME", length = 4)
private String ghSendTime; // varchar(4) (HHmm)
@Column(name = "GH_RETURN_CD_STR", length = 100)
private String ghReturnCdStr; // varchar(100)
@Column(name = "GH_RECV_NAME", length = 70)
private String ghRecvName; // varchar(70)
@Column(name = "GH_RECV_RELT", length = 100)
private String ghRecvRelt; // varchar(100)
@Column(name = "GH_RESULT_CD", length = 2)
private String ghResultCd; // varchar(2)
@Column(name = "GH_RETURN_CD", length = 2)
private String ghReturnCd; // varchar(2)
@Column(name = "GH_RECV_RELT_CD", length = 2)
private String ghRecvReltCd; // varchar(2)
}

@ -0,0 +1,7 @@
package com.worker.domain.repo.cp;
import com.worker.domain.entity.CpGojiSendHist;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CpGojiSendHistRepository extends JpaRepository<CpGojiSendHist, Integer> {
}

@ -0,0 +1,7 @@
package com.worker.domain.repo.ep;
import com.worker.domain.entity.CpGojiSendHist;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EpGojiSendHistRepository extends JpaRepository<CpGojiSendHist, Integer> {
}

@ -79,6 +79,18 @@ public class EPostDto {
private String postProcStt;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class SearchPrtTarget {
private String conKey;
private String jobCd;
private String tgCode;
private String postProcStt;
}
@Getter
@Setter
@NoArgsConstructor
@ -88,7 +100,7 @@ public class EPostDto {
private String conOrg;
private String relorsectCd;
private String reletcdata;
private String extriRegymd;
private String extriRegYmd;
private String rceptYmd;
private String rceptId;
private String divKb;
@ -104,8 +116,8 @@ public class EPostDto {
@AllArgsConstructor
@Builder
public static class Prt {
private String conKey;
private String restNmbr;
private String conKey;
private String reletcdata;
private String dataCd;
private String mailCnt;

@ -2,24 +2,29 @@ package com.worker.scheduler.epost.repository;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.worker.domain.entity.CpGojiSendHist;
import com.worker.scheduler.epost.dto.EPostDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.worker.domain.entity.QCpGojiPrt.cpGojiPrt;
import static com.worker.domain.entity.QCpGojit.cpGojit;
import static com.worker.domain.entity.QEpostSenderDetail.epostSenderDetail;
import static com.worker.domain.entity.QEpostSenderReg.epostSenderReg;
@Slf4j
@Repository
//@RequiredArgsConstructor
@RequiredArgsConstructor
public class EPostQueryDslRepository {
// @Transactional(readOnly = true, transactionManager = "cpTransactionManager")
public List<EPostDto.SearchDelivTarget> findDelivResult(JPAQueryFactory queryFactory, List<EPostDto.Deliv> dtos, Set<String> cpDeptCode) {
@ -43,7 +48,8 @@ public class EPostQueryDslRepository {
.map(EPostDto.Deliv::getRegiNo)
.toList();
return queryFactory
List<EPostDto.SearchDelivTarget> results = queryFactory
.select(
Projections.fields(
EPostDto.SearchDelivTarget.class,
@ -64,25 +70,55 @@ public class EPostQueryDslRepository {
.innerJoin(epostSenderDetail).on(
cpGojiPrt.gpConKey.eq(epostSenderDetail.conKey),
cpGojiPrt.gpRegistNo.eq(epostSenderDetail.rgstNmbr)
)
)
.innerJoin(epostSenderReg).on(cpGojiPrt.gpConKey.eq(epostSenderReg.conKey))
.where(
cpGojiPrt.gpConKey.in(conKeys),
cpGojiPrt.gpRegistNo.in(reginos)
)
.fetch();
return results;
}
public List<EPostDto.Prt> findMakeResult(JPAQueryFactory queryFactory, List<EPostDto.Prt> dtos, Set<String> cpDeptCode) {
return null;
public List<EPostDto.SearchPrtTarget> findMakeResult(JPAQueryFactory queryFactory, List<EPostDto.Prt> dtos, Set<String> cpDeptCode) {
List<String> conKeys = dtos.stream()
.map(EPostDto.Prt::getConKey)
.filter(java.util.Objects::nonNull)
.map(String::trim)
.filter(s -> !s.isEmpty())
.filter(k -> {
String[] parts = k.split("-", 3);
return parts.length == 3 && cpDeptCode.stream().anyMatch(parts[1]::startsWith);
})
.distinct()
.toList();
return queryFactory
.select(
Projections.fields(
EPostDto.SearchPrtTarget.class,
epostSenderReg.conKey,
epostSenderReg.jobCd,
epostSenderReg.tgCode,
epostSenderReg.postProcStt
)
)
.from(epostSenderReg)
.where(
epostSenderReg.conKey.in(conKeys)
)
.fetch();
}
public List<EPostDto.SearchRecvTarget> findRceptResult(JPAQueryFactory queryFactory, List<EPostDto.Deliv> dtos, Set<String> cpDeptCode) {
public List<EPostDto.SearchRecvTarget> findRceptResult(JPAQueryFactory queryFactory, List<EPostDto.Recv> dtos, Set<String> cpDeptCode) {
List<String> conKeys = dtos.stream()
.map(EPostDto.Deliv::getConKey)
.map(EPostDto.Recv::getReletcdata)
.filter(java.util.Objects::nonNull)
.map(String::trim)
.filter(s -> !s.isEmpty())
@ -93,7 +129,7 @@ public class EPostQueryDslRepository {
.distinct()
.toList();
return queryFactory
List<EPostDto.SearchRecvTarget> results = queryFactory
.select(
Projections.fields(
EPostDto.SearchRecvTarget.class,
@ -101,30 +137,89 @@ public class EPostQueryDslRepository {
epostSenderReg.jobCd,
epostSenderReg.tgCode,
epostSenderReg.postProcStt
)
)
)
.from(epostSenderReg)
.where(
epostSenderReg.conKey.in(conKeys)
)
.fetch();
}
public void updateDelivResult(EPostDto.Deliv dto) {
// epQueryFactory
// .update(epostDelivResult)
// .set(epostDelivResult.delivRsltCd, dto.getDelivrsltcd())
// .where(
// epostDelivResult.conKey.eq(dto.getConKey())
// )
// .execute();
// updateRceptResult(queryFactory, dtos, results);
return results;
}
public void updateMakeResult(List<EPostDto.Deliv> dtos) {
public void updateRceptResult(JPAQueryFactory queryFactory, List<EPostDto.Recv> dtos, List<EPostDto.SearchRecvTarget> results) {
//gojit tg_post_proc_stt 가 05 미만이면 '05' 로 업데이트
results.forEach(result -> {
queryFactory.update(cpGojit)
.set(cpGojit.tgPostProcStt, "05")
.set(cpGojit.tgConKey, result.getConKey())
.where(
cpGojit.tgCode.eq(Long.valueOf(result.getTgCode()))
)
.execute();
});
//epost_send_reg에 콘키로 post_proc_stt 05로 업데이트, RCEPT_YMD 업데이트
dtos.forEach(dto -> {
queryFactory.update(epostSenderReg)
.set(epostSenderReg.postProcStt, "05")
.set(epostSenderReg.rceptYmd, dto.getRceptYmd())
.where(
epostSenderReg.conKey.eq(dto.getReletcdata())
)
.execute();
});
}
public void updateRceptResult(List<EPostDto.Deliv> dtos) {
// public void updateDelivResult(JPAQueryFactory queryFactory, List<EPostDto.Deliv> dtos, List<EPostDto.SearchDelivTarget> results) {
//
//
// String targetDateTime = null;
// String fileDateTime = null;
//
// dtos.forEach(dto -> {
// results.forEach(result -> {
// Long resultTime = Long.valueOf(result.getGpSendDate() + result.getGpSendTime());
// Long fileTime = Long.valueOf( dto.getDelivymd() + dto.getDelivhhmi());
// // 조회한 결과의 발송시간이 지금 파일로 들어온 발송내역보다 크면
// if(resultTime > fileTime && result.getConKey().equals(dto.getConKey())) {
//
// }
//
// //맥스 gh_code(yyyymmddhhmmss + 4자리 + 1) 조회후 히스트 테이블 인서트
// //EPOST_DELIV_RESULT 테이블 인서트
// CpGojiSendHist cpGojiSendHist = CpGojiSendHist.builder()
// .ghCode()
// .ghGpcode()
// .ghConKey()
// .ghRegino()
// .ghSendDate()
// .ghSendTime()
// .ghReturnCdStr()
// .ghRecvName()
// .ghRecvRelt()
// .ghResultCd()
// .ghReturnCd()
// .ghRecvReltCd()
// .build();
// cpGojiSendHist.save();
//
// });
// });
// }
public void updateMakeResult(List<EPostDto.Prt> dtos, List<EPostDto.EPostFileRead> parseResult) {
}

@ -60,6 +60,7 @@ public class EPostScheduler {
// esb경로 info
EPostDto.SetInfo setInfo = epostSetinfoService.findSetInfo();
String filePath = null;
if(!setInfo.getCpSetinfo().getStrValue4().equals("")) filePath = setInfo.getCpSetinfo().getStrValue4();
else filePath = setInfo.getEpSetinfo().getStrValue4();

@ -3,15 +3,14 @@ package com.worker.scheduler.epost.service;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.worker.domain.entity.CpGojit;
import com.worker.domain.entity.CpSetinfo;
import com.worker.domain.entity.CpSetinfoId;
import com.worker.domain.entity.EpostDelivResult;
import com.worker.domain.entity.*;
import com.worker.domain.repo.cp.CpEpostDelivResultRepository;
import com.worker.domain.repo.cp.CpEpostRceptResultRepository;
import com.worker.domain.repo.cp.CpGojiSendHistRepository;
import com.worker.domain.repo.cp.CpSetinfoRepository;
import com.worker.domain.repo.ep.EpEpostDelivResultRepository;
import com.worker.domain.repo.ep.EpEpostRceptResultRepository;
import com.worker.domain.repo.ep.EpGojiSendHistRepository;
import com.worker.domain.repo.ep.EpSetinfoRepository;
import com.worker.scheduler.epost.dto.EPostDto;
import com.worker.scheduler.epost.repository.EPostQueryDslRepository;
@ -39,6 +38,9 @@ public class EPostService {
private final EpEpostRceptResultRepository epEpostRceptResultRepository;
private final CpEpostDelivResultRepository cpEpostDelivResultRepository;
private final EpEpostDelivResultRepository epEpostDelivResultRepository;
private final CpGojiSendHistRepository cpGojiSendHistRepository;
private final EpGojiSendHistRepository epGojiSendHistRepository;
private final EPostQueryDslRepository ePostQueryDslRepository;
// RequiredArgsConstructor 퀄리파이어설정을 가져가지 않아서 쿼리팩토리는 autowired로 필드 주입
@ -68,13 +70,15 @@ public class EPostService {
Set<String> epDeptCode = parseDeptCode(setInfo, "ep");
List<EPostDto.SearchDelivTarget> cpDelivs = new ArrayList<>();
List<EPostDto.SearchDelivTarget> epDelivs = new ArrayList<>();
List<EPostDto.Prt> cpPrts = new ArrayList<>();
List<EPostDto.Prt> epPrts = new ArrayList<>();
List<EPostDto.Recv> cpRecvs = new ArrayList<>();
List<EPostDto.Recv> epRecvs = new ArrayList<>();
List<EPostDto.SearchPrtTarget> cpPrts = new ArrayList<>();
List<EPostDto.SearchPrtTarget> epPrts = new ArrayList<>();
List<EPostDto.SearchRecvTarget> cpRecvs = new ArrayList<>();
List<EPostDto.SearchRecvTarget> epRecvs = new ArrayList<>();
// target 체킹
parseResult.forEach(e -> {
if (e == null || e.getKind() == null) return;
switch(e.getKind()) {
case "deliv" -> {
if(setInfo.getCpSetinfo() != null)
@ -82,18 +86,18 @@ public class EPostService {
if(setInfo.getEpSetinfo() != null)
epDelivs.addAll(ePostQueryDslRepository.findDelivResult(epQueryFactory, e.getResult(), epDeptCode));
}
case "rcept" -> {
case "recv" -> {
if(setInfo.getCpSetinfo() != null)
cpRecvs.addAll(ePostQueryDslRepository.findRceptResult(cpQueryFactory, e.getResult(), cpDeptCode));
if(setInfo.getEpSetinfo() != null)
epRecvs.addAll(ePostQueryDslRepository.findRceptResult(epQueryFactory, e.getResult(), cpDeptCode));
}
// case "make" -> {
// if(setInfo.getCpSetinfo() != null)
// cpPrts.addAll();
// if(setInfo.getEpSetinfo() != null)
// epPrts.addAll();
// }
case "prt" -> {
if(setInfo.getCpSetinfo() != null)
cpPrts.addAll(ePostQueryDslRepository.findMakeResult(cpQueryFactory, e.getResult(), cpDeptCode));
if(setInfo.getEpSetinfo() != null)
epPrts.addAll(ePostQueryDslRepository.findMakeResult(epQueryFactory, e.getResult(), cpDeptCode));
}
}
@ -102,8 +106,14 @@ public class EPostService {
log.info(cpDelivs.toString());
log.info(epDelivs.toString());
// log.info(prts.toString());
// log.info(recvs.toString());
log.info(cpPrts.toString());
log.info(epPrts.toString());
log.info(cpRecvs.toString());
log.info(epRecvs.toString());
if(cpDelivs != null && !cpDelivs.isEmpty()) {
}
// if (delivs != null && !delivs.isEmpty()) insertDelivResults(delivs);
// if (prts != null && !prts.isEmpty()) insertPrtResults(prts);
@ -113,6 +123,63 @@ public class EPostService {
}
private void insertDelivResults(List<EPostDto.SearchDelivTarget> delivs, List<EPostDto.EPostFileRead> parseResults) {
List<CpGojiSendHist> finalCpResults = new ArrayList<>();
List<CpGojiSendHist> finalEpResults = new ArrayList<>();
List<EPostDto.Deliv> delivFileResults = parseResults.stream()
.filter(r -> "deliv".equalsIgnoreCase(r.getKind()))
.flatMap(r -> ((List<EPostDto.Deliv>) r.getResult()).stream())
.collect(Collectors.toList());
delivFileResults.forEach(fileResult -> {
delivs.forEach(deliv -> {
Long resultTime = Long.valueOf(deliv.getGpSendDate() + deliv.getGpSendTime());
Long fileTime = Long.valueOf( fileResult.getDelivymd() + fileResult.getDelivhhmi());
CpGojiSendHist cpGojiSendHist = CpGojiSendHist.builder()
.ghCode("//맥스값 추출 + 1")
// .ghGpcode()
// .ghConKey()
// .ghRegino()
// .ghSendDate()
// .ghSendTime()
// .ghReturnCdStr()
// .ghRecvName()
// .ghRecvRelt()
// .ghResultCd()
// .ghReturnCd()
// .ghRecvReltCd()
.build();
EpostDelivResult epostDelivResult = EpostDelivResult.builder()
.conKey(fileResult.getConKey())
.regino(fileResult.getRegiNo())
.delivYmd(fileResult.getDelivymd())
.delivHhmi(fileResult.getDelivhhmi())
.delivRsltCd(fileResult.getDelivrsltcd())
.nonDelivReasnCd(fileResult.getNondelivreasncd())
.nonDelivReasnCdNm(fileResult.getNondelivreasncdnm())
.subRecPrsnNm(fileResult.getSubrecprsnnm())
.relRecPrsnCd(fileResult.getRelrecprsncd())
.relRecPrsnCdNm(fileResult.getRelrecprsncdnm())
.build();
});
});
}
private void insertReceiveResults(List<EPostDto.Recv> recvs) {
@ -123,23 +190,7 @@ public class EPostService {
}
private void insertDelivResults(List<EPostDto.Deliv> delivs) {
List<EpostDelivResult> entities = delivs.stream()
.map(item -> EpostDelivResult.builder()
.conKey(item.getConKey())
.regino(item.getRegiNo())
.delivYmd(item.getDelivymd())
.delivHhmi(item.getDelivhhmi())
.delivRsltCd(item.getDelivrsltcd())
.nonDelivReasnCd(item.getDelivrsltcd())
.nonDelivReasnCdNm(item.getNondelivreasncdnm())
.subRecPrsnNm(item.getSubrecprsnnm())
.relRecPrsnCd(item.getRelrecprsncd())
.relRecPrsnCdNm(item.getRelrecprsncdnm())
.build())
.toList();
cpEpostDelivResultRepository.saveAll(entities);
}
private void insertPrtResults(List<EPostDto.Prt> prts) {}
private void insertRecvResults(List<EPostDto.Recv> recvs) {}

@ -81,7 +81,7 @@ public class EpostTextFileParser implements FileParserInterface<EPostDto.EPostFi
.conOrg(item[0])
.relorsectCd(item[1])
.reletcdata(item[2])
.extriRegymd(item[3])
.extriRegYmd(item[3])
.rceptYmd(item[4])
.rceptId(item[5])
.divKb(item[6])
@ -96,8 +96,8 @@ public class EpostTextFileParser implements FileParserInterface<EPostDto.EPostFi
private EPostDto.Prt parseToPrt(String[] item) {
return EPostDto.Prt.builder()
.conKey(item[0])
.restNmbr(item[1])
.restNmbr(item[0])
.conKey(item[1])
.reletcdata(item[2])
.dataCd(item[3])
.mailCnt(item[4])

Loading…
Cancel
Save