fix: EnsBatchRequireNew 신규 반영
- 배치 biz requiredNew service 분리 -> @Transactional(propagation = Propagation.REQUIRES_NEW) 메소드 클래스 분리dev
parent
64d760f107
commit
9eddbbdf78
@ -0,0 +1,261 @@
|
||||
package kr.xit.biz.ens.service;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import javax.validation.Validation;
|
||||
import javax.validation.Validator;
|
||||
import kr.xit.biz.common.ApiConstants;
|
||||
import kr.xit.biz.common.ApiConstants.SndngSeCode;
|
||||
import kr.xit.biz.ens.mapper.IEnsBatchMapper;
|
||||
import kr.xit.biz.ens.model.EnsDTO;
|
||||
import kr.xit.biz.ens.model.cntc.CntcDTO;
|
||||
import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses;
|
||||
import kr.xit.biz.sms.service.ISmsMessageService;
|
||||
import kr.xit.core.exception.BizRuntimeException;
|
||||
import kr.xit.core.support.utils.Checks;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* description : 모바일 전자고지 배치 서비스 class
|
||||
* - {@code @Transactional(propagation = Propagation.REQUIRES_NEW)} 적용 서비스 분리
|
||||
* - 동일 class 서비스 메소드 호출시 Propagation.REQUIRES_NEW 미 동작
|
||||
* packageName : kr.xit.biz.ens.service
|
||||
* fileName : EnsBatchRequireNewService
|
||||
* author : limju
|
||||
* date : 2023-08-31
|
||||
* ======================================================================
|
||||
* 변경일 변경자 변경 내용
|
||||
* ----------------------------------------------------------------------
|
||||
* 2023-08-31 limju 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class EnsBatchRequireNewService extends EgovAbstractServiceImpl implements
|
||||
IEnsBatchRequireNewService {
|
||||
private final IEnsBatchMapper mapper;
|
||||
private final ISmsMessageService smsService;
|
||||
|
||||
private static final Validator validator = Validation.buildDefaultValidatorFactory()
|
||||
.getValidator();
|
||||
|
||||
@Value("${file.cmm.upload.root}")
|
||||
private String fileRoot;
|
||||
|
||||
@Value("${file.cmm.upload.post}")
|
||||
private String filePost;
|
||||
|
||||
/**
|
||||
* 카카오문서 요청 결과 반영
|
||||
*
|
||||
* @param mstIdList List<String> 발송마스터 ID 목록
|
||||
* @param resList List<KkopayDocBulkDTO.BulkSendResponses> 카카오내문서함 발송요청 결과 목록
|
||||
* @param unitySndMstId String 통합발송 마스터 ID
|
||||
*/
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void saveKkoMyDocResult(final List<String> mstIdList, String unitySndMstId,
|
||||
final List<BulkSendResponses> resList) {
|
||||
// 결과 반영
|
||||
resList.forEach(o ->
|
||||
o.getDocuments().forEach(
|
||||
t -> {
|
||||
// 카카오페이 문서요청 결과 반영
|
||||
mapper.updateKakaoSendBulksResult(t);
|
||||
// 모바일 페이지 컨텐트 생성
|
||||
if (Checks.isNotEmpty(t.getDocument_binder_uuid())) {
|
||||
//tgtDTO.setUnitySndngDetailId(t.getExternal_document_uuid());
|
||||
mapper.insertMobilePageManage(t.getExternal_document_uuid());
|
||||
}
|
||||
// 연계발송결과 생성
|
||||
insertKkoMyDocCntcSndngResult(SndngSeCode.KAKAO.getCode(),
|
||||
t.getExternal_document_uuid(), t.getError_message());
|
||||
})
|
||||
);
|
||||
|
||||
// 마스터 상태 변경
|
||||
updateKkoMyDocSendSndngMstStatus(mstIdList, unitySndMstId, "카카오 문서 발송요청 실패(발송마스터 데이타 오류)");
|
||||
}
|
||||
|
||||
/**
|
||||
* E-GREEN 우편 발송요청 파일 처리
|
||||
*
|
||||
* @param tgtDTO EnsDTO.SndngMssageParam
|
||||
*/
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void sendEgreen(final EnsDTO.SndngMssageParam tgtDTO) {
|
||||
final List<EnsDTO.PostSndng> list = mapper.selectPostTgts(tgtDTO);
|
||||
final String filePath = fileRoot + filePost;
|
||||
final String fileName = list.get(0).getConKey() + ".txt";
|
||||
|
||||
if (!egreenFileWrite(filePath, fileName, list)) {
|
||||
throw BizRuntimeException.create("우편 파일 생성 실패");
|
||||
}
|
||||
|
||||
EnsDTO.SndngMssageParam paramDTO = EnsDTO.SndngMssageParam.builder()
|
||||
.unitySndngMastrId(list.get(0).getUnitySndngMastrId())
|
||||
.sndngMastrId(list.get(0).getSndngMastrId())
|
||||
.newSndngProcessSttus(list.get(0).getSndngProcessSttus())
|
||||
.build();
|
||||
updateStepSendMststatus(paramDTO, "E-GREEN");
|
||||
}
|
||||
|
||||
/**
|
||||
* SMS 전송 처리 - xit SMS : 별도 서비스 call
|
||||
*
|
||||
* @param tgtDTO EnsDTO.SndngMssageParam
|
||||
* @see kr.xit.biz.sms.service.SmsMessageService#sendSmsList(List)
|
||||
*/
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void sendSms(final EnsDTO.SndngMssageParam tgtDTO) {
|
||||
final List<EnsDTO.SmsSndng> list = mapper.selectSmsSendTgts(tgtDTO);
|
||||
|
||||
// Orcale DB - 서비스 분리
|
||||
smsService.sendSmsList(list);
|
||||
|
||||
EnsDTO.SndngMssageParam paramDTO = EnsDTO.SndngMssageParam.builder()
|
||||
.unitySndngMastrId(list.get(0).getUnitySndngMastrId())
|
||||
.sndngMastrId(list.get(0).getSndngMastrId())
|
||||
.newSndngProcessSttus(list.get(0).getSndngProcessSttus())
|
||||
.build();
|
||||
updateStepSendMststatus(paramDTO, "SMS");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 카카오 내문서함 문서발송요청 연계결과(tb_cntc_sndng_result) 생성
|
||||
*
|
||||
* @param sndngSeCode 발송구분코드 - KKO-MY-DOC|E-GREEN|SMS
|
||||
* @param unitySndngDetailId 통합 발송 상세 ID
|
||||
* @param errMessage 에러메세지(API호출 결과 에러 메세지)
|
||||
*/
|
||||
private void insertKkoMyDocCntcSndngResult(final String sndngSeCode,
|
||||
final String unitySndngDetailId, final String errMessage) {
|
||||
String rsltSts = StringUtils.defaultString(errMessage,
|
||||
ApiConstants.DocBoxStatus.SENT.getCode());
|
||||
mapper.insertCntcSndngResult(CntcDTO.SndngResult.builder()
|
||||
.unitySndngDetailId(unitySndngDetailId)
|
||||
.sndngSeCode(sndngSeCode)
|
||||
.sndngResultSttus(
|
||||
rsltSts.equals(ApiConstants.DocBoxStatus.SENT.getCode()) ? "SENT" : "FAIL")
|
||||
.errorCn(errMessage)
|
||||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 카카오 내문서함 발송요청후 연계발송마스터 / 통합발송마스터 / 발송마스터 상태 변경 send-ok|sending1|sending2
|
||||
*
|
||||
* @param mstIdList 발송마스터 ID 목록
|
||||
* @param unitySndMstId String 통합발송 마스터 ID
|
||||
* @param stsErrMsg String
|
||||
*/
|
||||
private void updateKkoMyDocSendSndngMstStatus(final List<String> mstIdList,
|
||||
final String unitySndMstId, final String stsErrMsg) {
|
||||
|
||||
for (String id : mstIdList) {
|
||||
EnsDTO.SndngMssageParam dto = mapper.selectSndProcessStatus(id)
|
||||
.orElseThrow(() -> BizRuntimeException.create(stsErrMsg));
|
||||
EnsDTO.SndngMssageParam paramDTO = EnsDTO.SndngMssageParam.builder()
|
||||
.sndngMastrId(id)
|
||||
.unitySndngMastrId(unitySndMstId)
|
||||
.newSndngProcessSttus(dto.getNewSndngProcessSttus())
|
||||
.build();
|
||||
|
||||
if (mapper.updateProcessSttusCntcSndngMst(paramDTO) != 1) {
|
||||
throw BizRuntimeException.create("[send-카카오]연계 발송 마스터 상태변경 실패");
|
||||
}
|
||||
if (mapper.updateProcessSttusUnitySndngMst(paramDTO) != 1) {
|
||||
throw BizRuntimeException.create("[send-카카오]통합 발송 마스터 상태변경 실패");
|
||||
}
|
||||
if (mapper.updateProcessSttusSndngMst(paramDTO) != 1) {
|
||||
throw BizRuntimeException.create("[send-카카오]발송 마스터 상태변경 실패");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* E-GREEN 발송 처리 - 파일 생성
|
||||
*
|
||||
* @param filePath String
|
||||
* @param fileName String
|
||||
* @param list List<EnsDTO.PostSndng>
|
||||
* @return boolean
|
||||
*/
|
||||
private boolean egreenFileWrite(final String filePath, final String fileName,
|
||||
final List<EnsDTO.PostSndng> list) {
|
||||
try {
|
||||
File folder = new File(filePath);
|
||||
if (!folder.exists()) //noinspection ResultOfMethodCallIgnored
|
||||
{
|
||||
folder.mkdirs();
|
||||
}
|
||||
|
||||
File file = new File(filePath + fileName);
|
||||
if (!file.exists()) {
|
||||
if (!file.createNewFile()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) {
|
||||
|
||||
for (EnsDTO.PostSndng postSndng : list) {
|
||||
writer.write(StringUtils.defaultString(postSndng.getConKey()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSenderNm()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSenderZipNo()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSenderAddr()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSenderDetailAddr()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getReceiverSendNo()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getReceiverNm()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getReceiverZipNo()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getReceiverAddr()) + "|");
|
||||
writer.write(
|
||||
StringUtils.defaultString(postSndng.getReceiverDetailAddr()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSschnge1()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSschnge2()) + "|");
|
||||
writer.write(StringUtils.defaultString(postSndng.getSschnge3()));
|
||||
writer.newLine();
|
||||
}
|
||||
writer.flush();
|
||||
} catch (IOException e) {
|
||||
throw BizRuntimeException.create(e.getMessage());
|
||||
}
|
||||
} catch (IOException ie) {
|
||||
throw BizRuntimeException.create(ie.getMessage());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 문서 전송후 마스터 상태 변경
|
||||
*
|
||||
* @param paramDTO EnsDTO.SndngMssageParam
|
||||
* @param workCfg String
|
||||
*/
|
||||
private void updateStepSendMststatus(final EnsDTO.SndngMssageParam paramDTO,
|
||||
final String workCfg) {
|
||||
if (mapper.updateProcessSttusCntcSndngMst(paramDTO) != 1) {
|
||||
throw BizRuntimeException.create(String.format("[send-%s]연계 발송 마스터 상태변경 실패", workCfg));
|
||||
}
|
||||
if (mapper.updateProcessSttusUnitySndngMst(paramDTO) != 1) {
|
||||
throw BizRuntimeException.create(String.format("[send-%s]통합 발송 마스터 상태변경 실패", workCfg));
|
||||
}
|
||||
if (mapper.updateProcessSttusSndngMst(paramDTO) != 1) {
|
||||
throw BizRuntimeException.create(String.format("[send-%s]발송 마스터 상태변경 실패", workCfg));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package kr.xit.biz.ens.service;
|
||||
|
||||
import java.util.List;
|
||||
import kr.xit.biz.ens.model.EnsDTO;
|
||||
import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkSendResponses;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* description : 모바일 전자고지 배치 서비스 class
|
||||
* - {@code @Transactional(propagation = Propagation.REQUIRES_NEW)} 적용 서비스 분리
|
||||
* - 동일 class 서비스 메소드 호출시 Propagation.REQUIRES_NEW 미 동작
|
||||
*
|
||||
* packageName : kr.xit.biz.ens.service
|
||||
* fileName : IEnsBatchRequireNewService
|
||||
* author : limju
|
||||
* date : 2023-08-31
|
||||
* ======================================================================
|
||||
* 변경일 변경자 변경 내용
|
||||
* ----------------------------------------------------------------------
|
||||
* 2023-08-31 limju 최초 생성
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
public interface IEnsBatchRequireNewService {
|
||||
|
||||
void saveKkoMyDocResult(final List<String> mstIdList, String unitySndMstId, final List<BulkSendResponses> resList);
|
||||
void sendEgreen(final EnsDTO.SndngMssageParam tgtDTO);
|
||||
void sendSms(final EnsDTO.SndngMssageParam tgtDTO);
|
||||
}
|
Loading…
Reference in New Issue