diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java b/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java index d2cb3ff..90a36b5 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/mapper/IEnsBatchMapper.java @@ -60,6 +60,7 @@ public interface IEnsBatchMapper { /** * 연계발송마스터 상태 변경 + * - tb_cntc_sndng_mastr : sndng_process_sttus * @param t status, newStatus * @return int */ @@ -72,7 +73,7 @@ public interface IEnsBatchMapper { // make //---------------------------------------------------------------------- /** - * 생성 대상 조회 + * 통합 발송 생성 대상 조회 * @param t * @return List */ @@ -122,6 +123,7 @@ public interface IEnsBatchMapper { /** * 통합발송마스터 상태 변경 + * - tb_ens_unity_sndng_mastr : sndng_process_sttus * @param t status, newStatus * @return int */ diff --git a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java index e5cea4b..a1e78b7 100644 --- a/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java +++ b/mens-batch/src/main/java/kr/xit/biz/ens/service/EnsBatchService.java @@ -17,6 +17,7 @@ import java.util.stream.Collectors; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; +import kr.xit.batch.ens.task.cmm.TaskCmmUtils; import kr.xit.biz.common.ApiConstants; import kr.xit.biz.common.ApiConstants.SndngSeCode; import kr.xit.biz.ens.mapper.IEnsBatchMapper; @@ -96,12 +97,32 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc private static final String UNITY_SNDNG_MST_ID = "unitySndngMastrId"; private static final String YMDHMS = "yyyyMMddHHmmss"; - //----------------------------------------------------------------------------------------------------------------- - // accept - //----------------------------------------------------------------------------------------------------------------- - /** + *
+     * accept(접수) 처리
+     *
+     * 1. 통합 발송 접수 대상 조회 : 발송처리상태가 접수(accept)인 데이타
+     *    -> {@link IEnsBatchMapper#selectAcceptTgts selectAcceptTgts}
+     *    - tb_cntc_sndng_mastr, tb_ens_tmplat_manage
+     *
+     * 2. 접수 대상 파라메터 validation : {@link #validatedAccept}
+     *    -> 파라메터 오류시 오류 처리 : 발송처리상태 접수실패(accept-fail)
+     *       {@link #updateAcceptCntcSndngMstFailStatus}
+     *       - tb_cntc_sndng_mastr
+     *    -> 오류 처리후 다음 데이터로 진행
+     *
+     * 3. 접수
+     *    3-1. 통합발송마스터 생성 : 발송처리상태 접수로
+     *         {@link IEnsBatchMapper#insertUnitySndngMst insertUnitySndngMst}
+     *         - tb_ens_unity_sndng_mastr
+     *    3-2. 통합발송상세 생성
+     *         {@link IEnsBatchMapper#insertUnitySndngDtls insertUnitySndngDtls}
+     *         - tb_ens_unity_sndng_detail
+     *    3-3. 연계발송마스터 상태 변경 : 발송처리상태가 접수완료(accept-ok)
+     *         {@link IEnsBatchMapper#updateProcessSttusCntcSndngMst updateProcessSttusCntcSndngMst}
+     *         - tb_cntc_sndng_mastr
      * @param reqDTO BatchEnsRequest
+     * 
*/ @Override @Transactional @@ -120,11 +141,10 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc // validation check final List valiList = mapper.selectAcceptVali(dto); - try { - validatedAccept(valiList); - } catch (Exception e) { + final String err = validatedAccept(valiList); + if(StringUtils.isNotEmpty(err)){ updateAcceptCntcSndngMstFailStatus(mstIdList, - "accept 생성 요청 실패(파라메터 오류) : " + EgovStringUtil.cutString(e.getMessage(), 300)); + "accept 생성 요청 실패(파라메터 오류) : " + EgovStringUtil.cutString(err, 300)); continue; } @@ -159,11 +179,268 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } /** + *
+     * make(생성) 처리
+     * 1. 통합 발송 생성 대상 조회
+     *    - 발송처리상태가 접수(accept-ok)인 데이타
+     *    - 발송처리상태가 1차, 2차 전송상태(sending1, sending2)인 데이타
+     *    -> {@link IEnsBatchMapper#selectMakeTgts selectMakeTgts}
+     *    - tb_ens_unity_sndng_mastr
+     *
+     * 2. 생성 : {@link #makeMstStatusUpdate}
+     *    - 발송처리상태 - make-ok
+     *      1차 발송 : try_seq - 1,
+     *                발송구분 - 템플릿관리테이블 try1
+     *      2차 발송 : try_seq - 2
+     *                발송구분 - 템플릿관리테이블 try2
+     *                발송건수 - 2차대상발송건수 조회({@link IEnsBatchMapper#selectSendOkTgts selectSendOkTgts})
+     * @param reqDTO BatchEnsRequest
+     * 
+ */ + @Override + @Transactional + public void make(final EnsDTO.BatchEnsRequest reqDTO) { + final String sndngProcessSttus2 = ApiConstants.SndngProcessStatus.SENDING1.getCode(); + final String sndngProcessSttus3 = ApiConstants.SndngProcessStatus.SENDING2.getCode(); + final List list = mapper.selectMakeTgts(reqDTO); + final List list2 = mapper.selectMakeTgts(sndngProcessSttus2); + + for (EnsDTO.SndngMssageParam dto : list) { + MDC.put(UNITY_SNDNG_MST_ID, dto.getUnitySndngMastrId()); + MDC.put(SNDNG_PROCESS_STTUS, "make-fail1"); + + dto.setSndngProcessSttus(reqDTO.getSndngProcessSttus()); + dto.setNewSndngProcessSttus(ApiConstants.SndngProcessStatus.MAKE_OK.getCode()); + //FIXME: try1,try2,tr3이 있는 경우 try1 이전에 try2,3이 실행될 수 있는 경우??? + dto.setTrySeq(1); + dto.setSndngSeCode(dto.getTry1()); + + makeMstStatusUpdate(dto); + } + + for (EnsDTO.SndngMssageParam dto : list2) { + MDC.put(UNITY_SNDNG_MST_ID, dto.getUnitySndngMastrId()); + MDC.put(SNDNG_PROCESS_STTUS, "make-fail2"); + + //try2 발송 대상이 있는지 확인 + final int sendCnt = mapper.selectSendOkTgts(dto); + + //없으면 연계 발송 마스터, 통합 발송 마스터 send-ok + if (sendCnt == 0) { + dto.setNewSndngProcessSttus(ApiConstants.SndngProcessStatus.SEND_OK.getCode()); + + if (mapper.updateProcessSttusCntcSndngMst(dto) != 1) { + throw BizRuntimeException.create("[make]연계 발송 마스터 상태변경 실패"); + } + if (mapper.updateProcessSttusUnitySndngMst(dto) != 1) { + throw BizRuntimeException.create("[make]통합 발송 마스터 상태변경 실패"); + } + } else { + //있으면 make + dto.setSndngProcessSttus(sndngProcessSttus2); + dto.setNewSndngProcessSttus(ApiConstants.SndngProcessStatus.MAKE_OK.getCode()); + dto.setTrySeq(2); + dto.setSndngCo(sendCnt); + dto.setSndngSeCode(dto.getTry2()); + + makeMstStatusUpdate(dto); + } + } + + //TODO:: GS 인증 시험에서 카카오, E-GREEN만 있어서 3단계는 필요 시 구현 + } + + /** + * 전자고지(문서) send bulks + * - 업무에 따라 카카오 | E-GREEN | SMS 발송 1. 발송/통합발송 마스터에서 대상 조회 2. send(발송) + * + * @param reqDTO BatchEnsRequest + */ + @Override + @Transactional + public void sendBulks(final EnsDTO.BatchEnsRequest reqDTO) { + + // 발송/통합발송 마스터에서 대상 조회 + final List tgtList = mapper.selectSendBulkTgts(reqDTO); + for (EnsDTO.SndngMssageParam tgtDTO : tgtList) { + tgtDTO.setSignguCode(reqDTO.getSignguCode()); + tgtDTO.setFfnlgCode(reqDTO.getFfnlgCode()); + MDC.put(UNITY_SNDNG_MST_ID, tgtDTO.getUnitySndngMastrId()); + MDC.put("sndngMastrId", tgtDTO.getSndngMastrId()); + MDC.put(SNDNG_PROCESS_STTUS, "send-fail" + tgtDTO.getTrySeq()); + + String[] tryVal = {Checks.checkVal(tgtDTO.getTry1(), ""), + Checks.checkVal(tgtDTO.getTry2(), ""), Checks.checkVal(tgtDTO.getTry3(), "")}; + + // 마스터 상태 변경값을 파라메터에서 받은 상태값으로 set + tgtDTO.setNewSndngProcessSttus(reqDTO.getSndngProcessSttus()); + + // 업무 문서 구분에 따른 분기 + switch (SndngSeCode.compare(tryVal[tgtDTO.getTrySeq() - 1])) { + // 카카오 + case KAKAO: + sendBulkKakaoMyDocs(tgtDTO); + break; + + // E-GREEN + case E_GREEN: + sendEgreen(tgtDTO); + break; + + // SMS + case SMS: + sendSms(tgtDTO); + break; + + default: + break; + } + } + } + + /** + * 카카오 내문서함 상태 조회(bulks) + * + * @param reqDTO BatchEnsRequest + */ + @Override + @Transactional + public void findKkoMyDocStatusBulks(final EnsDTO.BatchEnsRequest reqDTO) { + final String url = apiHost + apiBulkStatus;; + + final List docsBinderUuids = mapper.selectKakaoStatusTgts(reqDTO.getSndngProcessSttus()); + + List> partitions = ListUtils.partition(docsBinderUuids, bulkMaxCnt); + List> apiResults = partitions.stream() + .map(uuids -> + ApiResponseDTO.success( + apiWebClient.exchange( + url.toString(), + HttpMethod.POST, + BulkStatusRequests.builder() + .signguCode(reqDTO.getSignguCode()) + .ffnlgCode(reqDTO.getFfnlgCode()) + .document_binder_uuids(uuids) + .build(), + BulkStatusResponses.class, + getHeadeMap())) + ).collect(Collectors.toList()); + + + List resList = apiResults.stream() + .map(ApiResponseDTO::getData) + .collect(Collectors.toList()); + + // 결과 반영 + resList.forEach(o -> + o.getDocuments().forEach(t -> { + mapper.updateKakaoStatusInfo(t); + mapper.updateCntcSndngResult(CntcDTO.SndngResult.builder() + .documentBinderUuid(t.getDocument_binder_uuid()) + .sndngResultSttus(StringUtils.defaultString(String.valueOf(t.getStatus_data().getDoc_box_status()), "FAIL")) + .requstDt(Checks.isEmpty(t.getStatus_data().getDoc_box_sent_at())? null: t.getStatus_data().getDoc_box_sent_at().toString()) + .inqireDt(Checks.isEmpty(t.getStatus_data().getDoc_box_received_at())? null: t.getStatus_data().getDoc_box_received_at().toString()) + .readngDt(Checks.isEmpty(t.getStatus_data().getDoc_box_read_at())? null: t.getStatus_data().getDoc_box_read_at().toString()) + .errorCn(t.getError_message()) + .build()); + }) + ); + } + + /** + * send-ok 값에 따라 close + * + * @param reqDTO BatchEnsRequest + */ + @Override + @Transactional + public void close(final EnsDTO.BatchEnsRequest reqDTO) { + final List list = mapper.selectCloseTgts(reqDTO.getSndngProcessSttus()); + + // 연계발송 마스터(tb_cntc_sndng_mastr) 상태 변경 : send-ok -> close + for (String id : list) { + EnsDTO.SndngMssageParam paramDTO = EnsDTO.SndngMssageParam.builder() + .unitySndngMastrId(id) + .sndngProcessSttus(reqDTO.getSndngProcessSttus()) + .newSndngProcessSttus(ApiConstants.SndngProcessStatus.CLOSE.getCode()) + .build(); + + if (mapper.updateProcessSttusCntcSndngMst(paramDTO) != 1) { + throw BizRuntimeException.create("[close]연계 발송 마스터 상태변경 실패"); + } + if (mapper.updateProcessSttusUnitySndngMst(paramDTO) != 1) { + throw BizRuntimeException.create("[close]통합 발송 마스터 상태변경 실패"); + } + // 2차 이상 발송 시 발송 마스터가 1개 이상 존재 + if (mapper.updateProcessSttusBulkSndngMst(paramDTO) < 1) { + throw BizRuntimeException.create("[close]발송 마스터 상태변경 실패"); + } + } + } + //----------------------------------------------------------------------------------------------------------------- + // close + //----------------------------------------------------------------------------------------------------------------- + + /** + * 카카오 내문서함 발송요청 대상 조회(bulks) - + * + * @param reqDTO BatchEnsRequest + * @return List + */ + @Override + public List findKakaoSendTargets(final EnsDTO.BatchEnsRequest reqDTO) { + return mapper.selectKakaoSendTgts(reqDTO); + } + + /** + * 에러 발생시 마스터 테이블 처리 + * -> 배치 실행 오류 처리 + * @param dto EnsDTO.SndngMssageParam + * @see TaskCmmUtils#taskEnsBatchServiceUpdateErrorLog + */ + public void updateErrorLog(EnsDTO.SndngMssageParam dto) { + if ("SndngAcceptJob".equals(dto.getErrorCode())) { + mapper.updateProcessSttusCntcSndngMst(dto); + } else if ("SndngMakeJob".equals(dto.getErrorCode())) { + mapper.updateProcessSttusCntcSndngMst(dto); + mapper.updateProcessSttusUnitySndngMst(dto); + } else if ("SndngSendBulksJob".equals(dto.getErrorCode())) { + mapper.updateProcessSttusCntcSndngMst(dto); + mapper.updateProcessSttusUnitySndngMst(dto); + mapper.updateProcessSttusSndngMst(dto); + } + } + + + + + //************************************************************************* + // private method + //************************************************************************* + + /** + * API 서버 호출을 위한 헤더 set + * @return Map + */ + private Map getHeadeMap(){ + Map map = new HashMap<>(); + map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + //map.put(HttpHeaders.AUTHORIZATION, ""); + return map; + } + + //----------------------------------------------------------------------------------------------------------------- + // accept + //----------------------------------------------------------------------------------------------------------------- + /** + *
      * accept 파라메터 유효성 체크
      *
      * @param valiList List
+     * @return String 에러 내용
+     * 
*/ - private void validatedAccept(List valiList) { + private String validatedAccept(List valiList) { List errors = new ArrayList<>(); int idx = 0; @@ -238,6 +515,14 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } break; + //FIXME : KT 데이타 적합성 체크 + case KT_BC: + break; + + //FIXME : Post plus 데이타 적합성 체크 + case PPLUS: + break; + default: break; } @@ -245,19 +530,19 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } } - if (errors.size() > 0) { - throw BizRuntimeException.create(errors.toString()); - } + return errors.size() > 0 ? errors.toString() : StringUtils.EMPTY; } /** - * accpet 파라메처 체크오류시 마스터 상태 변경 - 실패 - * - * @param mstIdList + *
+     * 연계발송마스터 상태 변경
+     * accpet 파라메처 체크오류시 마스터 상태 실패로 변경
+     * @param mstIdList List
      * @param stsErrMsg
+     * 
+ * @see IEnsBatchMapper#updateProcessSttusCntcSndngMst(Object) */ - private void updateAcceptCntcSndngMstFailStatus(final List mstIdList, - final String stsErrMsg) { + private void updateAcceptCntcSndngMstFailStatus(final List mstIdList, final String stsErrMsg) { for (String id : mstIdList) { EnsDTO.SndngMssageParam paramDTO = EnsDTO.SndngMssageParam.builder() @@ -272,75 +557,21 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } } //----------------------------------------------------------------------------------------------------------------- - // accept - //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- // make //----------------------------------------------------------------------------------------------------------------- - - /** - * tryCnt 값에 따라 분기 - 1:카카오 - * - * @param reqDTO BatchEnsRequest - */ - @Override - @Transactional - public void make(final EnsDTO.BatchEnsRequest reqDTO) { - final String sndngProcessSttus2 = ApiConstants.SndngProcessStatus.SENDING1.getCode(); - final String sndngProcessSttus3 = ApiConstants.SndngProcessStatus.SENDING2.getCode(); - final List list = mapper.selectMakeTgts(reqDTO); - final List list2 = mapper.selectMakeTgts(sndngProcessSttus2); - - for (EnsDTO.SndngMssageParam dto : list) { - MDC.put(UNITY_SNDNG_MST_ID, dto.getUnitySndngMastrId()); - MDC.put(SNDNG_PROCESS_STTUS, "make-fail1"); - - dto.setSndngProcessSttus(reqDTO.getSndngProcessSttus()); - dto.setNewSndngProcessSttus(ApiConstants.SndngProcessStatus.MAKE_OK.getCode()); - //FIXME: try1,try2,tr3이 있는 경우 try1 이전에 try2,3이 실행될 수 있는 경우??? - dto.setTrySeq(1); - dto.setSndngSeCode(dto.getTry1()); - - makeMstStatusUpdate(dto); - } - - for (EnsDTO.SndngMssageParam dto : list2) { - MDC.put(UNITY_SNDNG_MST_ID, dto.getUnitySndngMastrId()); - MDC.put(SNDNG_PROCESS_STTUS, "make-fail2"); - - //try2 발송 대상이 있는지 확인 - final int sendCnt = mapper.selectSendOkTgts(dto); - - //없으면 연계 발송 마스터, 통합 발송 마스터 send-ok - if (sendCnt == 0) { - dto.setNewSndngProcessSttus(ApiConstants.SndngProcessStatus.SEND_OK.getCode()); - - if (mapper.updateProcessSttusCntcSndngMst(dto) != 1) { - throw BizRuntimeException.create("[make]연계 발송 마스터 상태변경 실패"); - } - if (mapper.updateProcessSttusUnitySndngMst(dto) != 1) { - throw BizRuntimeException.create("[make]통합 발송 마스터 상태변경 실패"); - } - } else { - //있으면 make - dto.setSndngProcessSttus(sndngProcessSttus2); - dto.setNewSndngProcessSttus(ApiConstants.SndngProcessStatus.MAKE_OK.getCode()); - dto.setTrySeq(2); - dto.setSndngCo(sendCnt); - dto.setSndngSeCode(dto.getTry2()); - - makeMstStatusUpdate(dto); - } - } - - //TODO:: GS 인증 시험에서 카카오, E-GREEN만 있어서 3단계는 필요 시 구현 - } - /** - * make 데이타 생성 1. master 2. detail 2. master 상태 변경 - * + *
+     * make 처리
+     * 1. 발송마스터 생성 : {@link IEnsBatchMapper#insertSndngMst insertSndngMst}
+     *                   - tb_ens_sndng_mastr
+     * 2. 문서 중개자별 발송 상세 생성 : {@link #insertEnsDetailByTry}
+     * 3.
+     *   3-1. 연계발송마스터상태 변경 : {@link IEnsBatchMapper#updateProcessSttusCntcSndngMst}
+     *   3-2. 통합발송마스터상태 변경 : {@link IEnsBatchMapper#updateProcessSttusUnitySndngMst}
      * @param dto SndngMssageParam
+     * 
*/ private void makeMstStatusUpdate(EnsDTO.SndngMssageParam dto) { // 1. master @@ -366,14 +597,25 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } /** - * make 데이타 생성 - 2. detail - * + *
+     * make 상세 데이타 생성 : 문서 중개자별 상세 데이타 생셩
+     * - 최초(전송 없슴), 1차 전송, 2차 전송 데이타 대상
+     * KAKAO   - {@link IEnsBatchMapper#insertKakaoMyDocs(Object) insertKakaoMyDocs}
+     *         - tb_ens_kakao_my_doc
+     * E_GREEN - {@link IEnsBatchMapper#insertPostSndng(Object) insertPostSndng}
+     *         - tb_ens_post_sndng
+     * SMS     - {@link IEnsBatchMapper#insertSmsSndng(Object) insertSmsSndng}
+     *         - tb_ens_sms_sndng
      * @param dto SndngMssageParam
      * @return int
+     * 
*/ private int insertEnsDetailByTry(final EnsDTO.SndngMssageParam dto) { - String[] tryVal = {Checks.checkVal(dto.getTry1(), ""), Checks.checkVal(dto.getTry2(), ""), - Checks.checkVal(dto.getTry3(), "")}; + String[] tryVal = { + Checks.checkVal(dto.getTry1(), ""), + Checks.checkVal(dto.getTry2(), ""), + Checks.checkVal(dto.getTry3(), "") + }; switch (SndngSeCode.compare(tryVal[dto.getTrySeq() - 1])) { case KAKAO: return mapper.insertKakaoMyDocs(dto); @@ -389,60 +631,10 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } } //----------------------------------------------------------------------------------------------------------------- - // make - //----------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------- // send //----------------------------------------------------------------------------------------------------------------- - - /** - * 전자고지(문서) send - 업무에 따라 카카오 | E-GREEN | SMS 발송 1. 발송/통합발송 마스터에서 대상 조회 2. send(발송) - * - * @param reqDTO BatchEnsRequest - */ - @Override - @Transactional - public void sendBulks(final EnsDTO.BatchEnsRequest reqDTO) { - - // 발송/통합발송 마스터에서 대상 조회 - final List tgtList = mapper.selectSendBulkTgts(reqDTO); - for (EnsDTO.SndngMssageParam tgtDTO : tgtList) { - tgtDTO.setSignguCode(reqDTO.getSignguCode()); - tgtDTO.setFfnlgCode(reqDTO.getFfnlgCode()); - MDC.put(UNITY_SNDNG_MST_ID, tgtDTO.getUnitySndngMastrId()); - MDC.put("sndngMastrId", tgtDTO.getSndngMastrId()); - MDC.put(SNDNG_PROCESS_STTUS, "send-fail" + tgtDTO.getTrySeq()); - - String[] tryVal = {Checks.checkVal(tgtDTO.getTry1(), ""), - Checks.checkVal(tgtDTO.getTry2(), ""), Checks.checkVal(tgtDTO.getTry3(), "")}; - - // 마스터 상태 변경값을 파라메터에서 받은 상태값으로 set - tgtDTO.setNewSndngProcessSttus(reqDTO.getSndngProcessSttus()); - - // 업무 문서 구분에 따른 분기 - switch (SndngSeCode.compare(tryVal[tgtDTO.getTrySeq() - 1])) { - // 카카오 - case KAKAO: - sendBulkKakaoMyDocs(tgtDTO); - break; - - // E-GREEN - case E_GREEN: - sendEgreen(tgtDTO); - break; - - // SMS - case SMS: - sendSms(tgtDTO); - break; - - default: - break; - } - } - } - /** * 카카오페이 전자문서 발송요청 처리 * @@ -849,139 +1041,9 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc } } } - //----------------------------------------------------------------------------------------------------------------- - // send - //----------------------------------------------------------------------------------------------------------------- - //----------------------------------------------------------------------------------------------------------------- - // status - //----------------------------------------------------------------------------------------------------------------- - /** - * 카카오 내문서함 상태 조회(bulks) - * - * @param reqDTO BatchEnsRequest - */ - @Override - @Transactional - public void findKkoMyDocStatusBulks(final EnsDTO.BatchEnsRequest reqDTO) { - final String url = apiHost + apiBulkStatus;; - - final List docsBinderUuids = mapper.selectKakaoStatusTgts(reqDTO.getSndngProcessSttus()); - - List> partitions = ListUtils.partition(docsBinderUuids, bulkMaxCnt); - List> apiResults = partitions.stream() - .map(uuids -> - ApiResponseDTO.success( - apiWebClient.exchange( - url.toString(), - HttpMethod.POST, - BulkStatusRequests.builder() - .signguCode(reqDTO.getSignguCode()) - .ffnlgCode(reqDTO.getFfnlgCode()) - .document_binder_uuids(uuids) - .build(), - BulkStatusResponses.class, - getHeadeMap())) - ).collect(Collectors.toList()); - - - List resList = apiResults.stream() - .map(ApiResponseDTO::getData) - .collect(Collectors.toList()); - - // 결과 반영 - resList.forEach(o -> - o.getDocuments().forEach(t -> { - mapper.updateKakaoStatusInfo(t); - mapper.updateCntcSndngResult(CntcDTO.SndngResult.builder() - .documentBinderUuid(t.getDocument_binder_uuid()) - .sndngResultSttus(StringUtils.defaultString(String.valueOf(t.getStatus_data().getDoc_box_status()), "FAIL")) - .requstDt(Checks.isEmpty(t.getStatus_data().getDoc_box_sent_at())? null: t.getStatus_data().getDoc_box_sent_at().toString()) - .inqireDt(Checks.isEmpty(t.getStatus_data().getDoc_box_received_at())? null: t.getStatus_data().getDoc_box_received_at().toString()) - .readngDt(Checks.isEmpty(t.getStatus_data().getDoc_box_read_at())? null: t.getStatus_data().getDoc_box_read_at().toString()) - .errorCn(t.getError_message()) - .build()); - }) - ); - } - //----------------------------------------------------------------------------------------------------------------- - // status //----------------------------------------------------------------------------------------------------------------- - //----------------------------------------------------------------------------------------------------------------- - // close - //----------------------------------------------------------------------------------------------------------------- - /** - * send-ok 값에 따라 close - * - * @param reqDTO BatchEnsRequest - */ - @Override - @Transactional - public void close(final EnsDTO.BatchEnsRequest reqDTO) { - final List list = mapper.selectCloseTgts(reqDTO.getSndngProcessSttus()); - - // 연계발송 마스터(tb_cntc_sndng_mastr) 상태 변경 : send-ok -> close - for (String id : list) { - EnsDTO.SndngMssageParam paramDTO = EnsDTO.SndngMssageParam.builder() - .unitySndngMastrId(id) - .sndngProcessSttus(reqDTO.getSndngProcessSttus()) - .newSndngProcessSttus(ApiConstants.SndngProcessStatus.CLOSE.getCode()) - .build(); - - if (mapper.updateProcessSttusCntcSndngMst(paramDTO) != 1) { - throw BizRuntimeException.create("[close]연계 발송 마스터 상태변경 실패"); - } - if (mapper.updateProcessSttusUnitySndngMst(paramDTO) != 1) { - throw BizRuntimeException.create("[close]통합 발송 마스터 상태변경 실패"); - } - // 2차 이상 발송 시 발송 마스터가 1개 이상 존재 - if (mapper.updateProcessSttusBulkSndngMst(paramDTO) < 1) { - throw BizRuntimeException.create("[close]발송 마스터 상태변경 실패"); - } - } - } - //----------------------------------------------------------------------------------------------------------------- - // close - //----------------------------------------------------------------------------------------------------------------- - - /** - * 에러 발생시 마스터 테이블 처리 - * - * @param dto EnsDTO.SndngMssageParam - */ - public void updateErrorLog(EnsDTO.SndngMssageParam dto) { - if ("SndngAcceptJob".equals(dto.getErrorCode())) { - mapper.updateProcessSttusCntcSndngMst(dto); - } else if ("SndngMakeJob".equals(dto.getErrorCode())) { - mapper.updateProcessSttusCntcSndngMst(dto); - mapper.updateProcessSttusUnitySndngMst(dto); - } else if ("SndngSendBulksJob".equals(dto.getErrorCode())) { - mapper.updateProcessSttusCntcSndngMst(dto); - mapper.updateProcessSttusUnitySndngMst(dto); - mapper.updateProcessSttusSndngMst(dto); - } - } - - - /** - * 카카오 내문서함 발송요청 대상 조회(bulks) - - * - * @param reqDTO BatchEnsRequest - * @return List - */ - @Override - public List findKakaoSendTargets(final EnsDTO.BatchEnsRequest reqDTO) { - return mapper.selectKakaoSendTgts(reqDTO); - } - - - private Map getHeadeMap(){ - Map map = new HashMap<>(); - map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); - //map.put(HttpHeaders.AUTHORIZATION, ""); - return map; - } } diff --git a/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml b/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml index 84ce1b6..5e221ed 100644 --- a/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml +++ b/mens-batch/src/main/resources/egovframework/mapper/biz/ens-mysql-mapper.xml @@ -7,7 +7,7 @@ diff --git a/mens-core/src/main/java/kr/xit/biz/common/ApiConstants.java b/mens-core/src/main/java/kr/xit/biz/common/ApiConstants.java index 2352a21..44a9356 100644 --- a/mens-core/src/main/java/kr/xit/biz/common/ApiConstants.java +++ b/mens-core/src/main/java/kr/xit/biz/common/ApiConstants.java @@ -149,7 +149,9 @@ public class ApiConstants { public enum SndngSeCode { SMS("SMS"), KAKAO("KKO-MY-DOC"), - E_GREEN("E-GREEN") + E_GREEN("E-GREEN"), + KT_BC("KT-BC"), + PPLUS("POST-PLUS") ; private final String code;