feat : epost 개발중

1. 수동 실행
2. text file read
master
Kurt92 4 months ago
parent acc767f585
commit 4455639cb1

@ -1,5 +1,6 @@
package com.manual.controller;
import com.worker.scheduler.epost.schedule.EPostScheduler;
import com.worker.scheduler.smg.schedule.SinmungoInOutScheduler;
import com.worker.scheduler.tax.schedule.TaxSunapScheduler;
import com.worker.scheduler.update.schedule.WarSyncScheduler;
@ -18,9 +19,14 @@ import java.util.function.Consumer;
@RequiredArgsConstructor
public class RunController {
/**
* @ConditionalOnProperty
* DI
* */
private final Optional<WarSyncScheduler> warSyncScheduler;
private final Optional<SinmungoInOutScheduler> sinmungoInOutScheduler;
private final Optional<TaxSunapScheduler> taxSunapScheduler;
private final Optional<EPostScheduler> ePostScheduler;
// 공통 실행 헬퍼
@ -36,6 +42,9 @@ public class RunController {
.orElseGet(() -> ResponseEntity.status(503).body(notAvailableMsg));
}
/**
* CICD
* */
@PostMapping("/menual/update-war")
public ResponseEntity<String> updateWar() {
return runIfPresent(
@ -45,6 +54,9 @@ public class RunController {
);
}
/**
*
* */
@PostMapping("/menual/sinmungo-polling")
public ResponseEntity<String> sinmungoPolling() {
// 네가 사용한 메서드명을 그대로 호출
@ -55,6 +67,9 @@ public class RunController {
);
}
/**
*
* */
@PostMapping("/menual/sinmungo-send-answer")
public ResponseEntity<String> sinmungoSendAnswer() {
return runIfPresent(
@ -64,6 +79,9 @@ public class RunController {
);
}
/**
* CC
* */
@PostMapping("/menual/restart-parking-app")
public ResponseEntity<String> restartParkingApp() {
// TODO: 실제 재시작 로직 추가 (예: 서비스 호출/스크립트 실행 등)
@ -71,6 +89,10 @@ public class RunController {
return ResponseEntity.ok("Success");
}
/**
*
* */
@PostMapping("/menual/tax-sunap")
public ResponseEntity<String> taxSunap() {
return runIfPresent(
@ -79,4 +101,28 @@ public class RunController {
"TaxSunapScheduler not available (scheduler.tax.enabled=false?)"
);
}
/**
* E-Post
* */
@PostMapping("/menual/epost-rcv")
public ResponseEntity<String> ePostRcv() {
return runIfPresent(
ePostScheduler,
EPostScheduler::ePostRcvScheduler,
"EpostScheduler not available (scheduler.epost.enabled=false?)"
);
}
/**
* E-Post
* */
@PostMapping("/menual/epost-snd")
public ResponseEntity<String> ePostSnd() {
return runIfPresent(
ePostScheduler,
EPostScheduler::ePostSendScheduler,
"EpostScheduler not available (scheduler.epost.enabled=false?)"
);
}
}

@ -14,6 +14,8 @@ public class EPostDto {
@Getter
@Builder
public static class SetInfo {
private CpSetinfo cpSetinfo;
private CpSetinfo epSetinfo;
private EPostInfo cpEPostInfo;
private EPostInfo epEPostInfo;
}

@ -2,12 +2,17 @@ package com.worker.scheduler.epost.schedule;
import com.worker.scheduler.epost.dto.EPostDto;
import com.worker.scheduler.epost.service.EPostService;
import com.worker.scheduler.smg.dto.SinmungoDto;
import com.worker.util.fileReader.FileParserInterface;
import com.worker.util.fileReader.FileReader;
import com.worker.util.fileReader.text.impl.EpostTextFileParser;
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;
import java.util.List;
@Component
@RequiredArgsConstructor
@Slf4j
@ -15,6 +20,7 @@ import org.springframework.stereotype.Component;
public class EPostScheduler {
private final EPostService ePostService;
private final FileReader fileReader;
// @Scheduled(fixedRate = 10 * 60 * 1000L) // 10분
@ -49,11 +55,23 @@ public class EPostScheduler {
// @Scheduled(fixedRate = 10 * 60 * 1000) // 10분
public void ePostRcvScheduler() {
// esb경로 info
EPostDto.SetInfo setInfo = ePostService.findSetInfo();
String filePath = null;
if(setInfo.getCpSetinfo().getStrValue2().equals("")) filePath = setInfo.getCpSetinfo().getStrValue2();
else filePath = setInfo.getCpSetinfo().getStrValue2();
// esb경로의 택스트파일 읽기
//파일읽기
FileParserInterface<List<EPostDto.EPostFileRead>> parser = new EpostTextFileParser();
List<List<EPostDto.EPostFileRead>> parseResult = fileReader.readFiles(filePath, parser, ".xml");
// 결과 db 폴링
// 결과종류 - 접수(recv), 제작(prt), 배달(deliv)
ePostService.saveEpostResult();
}

@ -82,6 +82,10 @@ public class EPostService {
}
public void saveEpostResult() {
}
private EPostDto.EPostInfo buildEPostInfo(CpSetinfo ePostInfo, CpSetinfo ePostDocInfo) {

@ -42,10 +42,13 @@ public class SinmungoInOutScheduler {
log.info("신문고 신고 폴링 스케쥴러 시작!");
//setinfo 테이블에서 esb에이전트 정보 조회
SinmungoDto.SetInfo setInfo = dbPolling.findSetInfo();
String filePath = null;
if(setInfo.getCpSetinfo().getStrValue2().equals("")) filePath = setInfo.getCpSetinfo().getStrValue2();
else filePath = setInfo.getCpSetinfo().getStrValue2();
//파일읽기
FileParserInterface<SinmungoDto.SinmungoXml> parser = new SinmungoXmlFileParser();
List<SinmungoDto.SinmungoXml> parseResult = fileReader.readFiles(setInfo.getCpSetinfo().getStrValue2(), parser, ".xml");
List<SinmungoDto.SinmungoXml> parseResult = fileReader.readFiles(filePath, parser, ".xml");
if(parseResult.isEmpty()){
log.info("새로 읽을 xml 없음.");
@ -57,10 +60,12 @@ public class SinmungoInOutScheduler {
//deptCode로 cp/ep 대상 분리
// save cp
log.info(parseResult.size() + "개의 before parse 데이터");
log.info(setInfo.getEpSetinfo().getStrValue6());
List<SinmungoDto.SinmungoXml> cpList = parseResult.stream()
.filter(item -> {
try {
int deptCode = Integer.parseInt(item.getPcd_dept_v());
log.info(String.valueOf(deptCode));
return new ObjectMapper()
.readValue(setInfo.getCpSetinfo().getStrValue6(), new TypeReference<Map<String, List<Integer>>>() {})
.values().stream()
@ -72,14 +77,19 @@ public class SinmungoInOutScheduler {
})
.collect(Collectors.toList());
log.info(cpList.size() + "개의 cp xml 객체 생성");
dbPolling.saveCP(cpList, setInfo);
log.info("CP DB Insert Complete!");
if(!cpList.isEmpty()) {
dbPolling.saveCP(cpList, setInfo);
log.info("CP DB Insert Complete!");
}
// save ep
log.info(parseResult.size() + "개의 before parse 데이터");
log.info(setInfo.getEpSetinfo().getStrValue6());
List<SinmungoDto.SinmungoXml> epList = parseResult.stream()
.filter(item -> {
try {
int deptCode = Integer.parseInt(item.getPcd_dept_v());
log.info(String.valueOf(deptCode));
return new ObjectMapper()
.readValue(setInfo.getEpSetinfo().getStrValue6(), new TypeReference<Map<String, List<Integer>>>() {})
.values().stream()
@ -92,8 +102,11 @@ public class SinmungoInOutScheduler {
})
.collect(Collectors.toList());
log.info(epList.size() + "개의 ep xml 객체 생성");
dbPolling.saveEP(epList, setInfo);
log.info("EP DB Insert Complete!");
if(!epList.isEmpty()) {
dbPolling.saveEP(epList, setInfo);
log.info("EP DB Insert Complete!");
}
} catch (Exception e) {

@ -62,6 +62,8 @@ public class DbPolling {
.detailCode(env.getProperty("esb.info.cp.detailCode"))
.build()
).orElse(null);
List<CpBdong> cpBdongList = cpBdongRepository.findAll();
CpSetinfo epSetInfo = epSetinfoRepository.findById(
CpSetinfoId.builder()
@ -70,8 +72,6 @@ public class DbPolling {
.detailCode(env.getProperty("esb.info.ep.detailCode"))
.build()
).orElse(null);
List<CpBdong> cpBdongList = cpBdongRepository.findAll();
List<CpBdong> epBdongList = epBdongRepository.findAll();
return SinmungoDto.SetInfo.builder()

@ -1,14 +1,15 @@
package com.worker.util.fileReader.xml.impl;
package com.worker.util.fileReader.text.impl;
import com.worker.scheduler.epost.dto.EPostDto;
import com.worker.util.fileReader.FileParserInterface;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
@Component
public class EpostTextFileParser implements FileParserInterface<List<EPostDto.EPostFileRead>> {
/**

@ -81,8 +81,8 @@ e-post:
logging:
file:
name: ./cc-logs/worker.log
# charset:
# file: UTF-8
charset:
file: UTF-8
level:
root: info
org.springframework.scheduling: info

@ -34,7 +34,7 @@ scheduler:
smg:
enabled: true
epost:
enabled: false
enabled: true
tax-sunap:
enabled: false
update:
@ -61,14 +61,23 @@ tax-else:
e-post:
info:
cp:
codeName: EPOST_INFO
groupCode: INFO_1
detailCode: LOCAL
ep:
codeName: EPOST_INFO
groupCode: INFO_1
detailCode: LOCAL
doc-code:
cp:
codeName: EPOST_INFO
groupCode: DOC_CODE
detailCode: TEST
detailCode: LOCAL
ep:
codeName: EPOST_INFO
groupCode: DOC_CODE
detailCode: TEST
detailCode: LOCAL
logging:

@ -46,6 +46,26 @@ tax-else:
sunap: /mediate/ltis
e-post:
info:
cp:
codeName: EPOST_INFO
groupCode: INFO_1
detailCode: PROD
ep:
codeName: EPOST_INFO
groupCode: INFO_1
detailCode: PROD
doc-code:
cp:
codeName: EPOST_INFO
groupCode: DOC_CODE
detailCode: PROD
ep:
codeName: EPOST_INFO
groupCode: DOC_CODE
detailCode: PROD
logging:
file:
name: ./cc-logs/worker.log

@ -13,6 +13,8 @@
<option value="sinmungo-polling">Sinmungo Xml DB Polling</option>
<option value="sinmungo-send-answer">Create Xml Target Sinmungo Answer</option>
<option value="tax-sunap">Request Tax Sunap Result</option>
<option value="epost-rcv">E-Post Receive Result</option>
<option value="epost-snd">E-Post Send</option>
<!-- 필요한 스케쥴러 추가 -->
</select>
<button id="runSchedulerBtn">실행</button>

Loading…
Cancel
Save