feat: statusBulks feat

- 서비스 분리
      - 공통 메소드 클래스 분리
dev
gitea-관리자 2 years ago
parent 05f9c76134
commit 182aea57bb

@ -1,7 +1,7 @@
package kr.xit.batch.ens.job;
import kr.xit.batch.ens.task.SndngStatusBulksTasklet;
import kr.xit.biz.ens.service.IEnsBatchService;
import kr.xit.biz.ens.service.IEnsBatchStatusService;
import kr.xit.core.biz.batch.CustomRunIdIncrementer;
import kr.xit.core.biz.batch.listener.CustomJobListener;
import kr.xit.core.biz.batch.listener.CustomStepListener;
@ -46,7 +46,7 @@ public class SndngStatusBulksJobConfig {
private final StepBuilderFactory stepBuilderFactory;
private final IBatchCmmService lockService;
private final IEnsBatchService ensBatchService;
private final IEnsBatchStatusService statusService;
@Bean(name = JOB_NAME)
public Job sndngStatusBulksJob() {
@ -83,7 +83,7 @@ public class SndngStatusBulksJobConfig {
@Bean(name = JOB_NAME + "_step")
public Step execution() {
return stepBuilderFactory.get(JOB_NAME + "_step")
.tasklet(new SndngStatusBulksTasklet(ensBatchService))
.tasklet(new SndngStatusBulksTasklet(statusService))
.build();
}

@ -3,7 +3,7 @@ package kr.xit.batch.ens.task;
import java.util.UUID;
import kr.xit.batch.ens.task.cmm.TaskCmmUtils;
import kr.xit.biz.ens.model.EnsDTO;
import kr.xit.biz.ens.service.IEnsBatchService;
import kr.xit.biz.ens.service.IEnsBatchStatusService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
@ -32,7 +32,7 @@ import org.springframework.batch.repeat.RepeatStatus;
@Slf4j
@RequiredArgsConstructor
public class SndngStatusBulksTasklet implements Tasklet {
private final IEnsBatchService service;
private final IEnsBatchStatusService service;
@Override
@JobScope
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
@ -43,7 +43,7 @@ public class SndngStatusBulksTasklet implements Tasklet {
MDC.put("uri", "/v1/documents/bulk/status");
MDC.put("method", "POST");
service.findKkoMyDocStatusBulks(
service.statusBulks(
EnsDTO.BatchEnsRequest.builder()
.signguCode(contribution.getStepExecution().getJobParameters().getString("signguCode"))
.ffnlgCode(contribution.getStepExecution().getJobParameters().getString("ffnlgCode"))

@ -0,0 +1,35 @@
package kr.xit.biz.ens.cmm;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
/**
* <pre>
* description :
*
* packageName : kr.xit.biz.ens.cmm
* fileName : CmmEnsBizUtils
* author : limju
* date : 2023-10-31
* ======================================================================
*
* ----------------------------------------------------------------------
* 2023-10-31 limju
*
* </pre>
*/
public class CmmEnsBizUtils {
/**
* API set
* @return Map<String,String>
*/
public static Map<String,String> getHeadeMap(){
final Map<String, String> map = new HashMap<>();
map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
//map.put(HttpHeaders.AUTHORIZATION, "");
return map;
}
}

@ -218,6 +218,16 @@ public interface IEnsBatchMapper {
* </pre>
*/
<T> List<String> selectCloseTgts(final T t);
/**
* <pre>
*
* - tb_ens_sndng_mastr
* @param t status, newStatus
* @return int
* </pre>
*/
<T> int updateProcessSttusBulkSndngMst(final T t);
//----------------------------------------------------------------------
// close
//----------------------------------------------------------------------
@ -305,26 +315,20 @@ public interface IEnsBatchMapper {
// send
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// status
//----------------------------------------------------------------------
/**
* <pre>
*
* - tb_ens_sndng_mastr
* @param t status, newStatus
* @return int
*
* - tb_ens_sndng_mastr, tb_ens_unity_sndng_mastr
* - sndng_process_sttus : 'send-ok', 'sending1', 'sending2'
* @param t T
* @return List<EnsDTO.SndngMssageParam>
* </pre>
*/
<T> int updateProcessSttusBulkSndngMst(final T t);
//----------------------------------------------------------------------
// send
//----------------------------------------------------------------------
//----------------------------------------------------------------------
// status
//----------------------------------------------------------------------
<T> List<EnsDTO.SndngMssageParam> selectStatusBulkTgts(final T t);
/**
* <pre>

@ -55,7 +55,7 @@ public class EnsDTO {
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public static class SndngMssageParam implements Serializable {
public static class SndngMssageParam extends BatchEnsRequest {
private String signguCode;
private String ffnlgCode;
private String profile;
@ -87,10 +87,6 @@ public class EnsDTO {
*
*/
private int sndngCo;
/**
*
*/
private String sndngProcessSttus;
/**
*

@ -1,12 +1,12 @@
package kr.xit.biz.ens.service;
import static kr.xit.core.support.utils.JsonUtils.toObjByObj;
import egovframework.com.cmm.util.EgovDateUtil;
import egovframework.com.cmm.util.EgovStringUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@ -17,9 +17,11 @@ import kr.xit.batch.ens.task.cmm.TaskCmmUtils;
import kr.xit.biz.common.ApiConstants;
import kr.xit.biz.common.ApiConstants.SignguCode;
import kr.xit.biz.common.ApiConstants.SndngSeCode;
import kr.xit.biz.ens.cmm.CmmEnsBizUtils;
import kr.xit.biz.ens.mapper.IEnsBatchMapper;
import kr.xit.biz.ens.model.EnsDTO;
import kr.xit.biz.ens.model.EnsDTO.SendKakaoTgt;
import kr.xit.biz.ens.model.EnsDTO.SndngMssageParam;
import kr.xit.biz.ens.model.EnsKtBcDTO.KtBcMst;
import kr.xit.biz.ens.model.cntc.CntcDTO;
import kr.xit.biz.ens.model.kakao.KkopayDocAttrDTO.Receiver;
@ -33,6 +35,8 @@ import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.PropertyBulk;
import kr.xit.biz.ens.model.kt.KtCommonDTO.ErrorMsg;
import kr.xit.biz.ens.model.kt.KtCommonDTO.KtCommonResponse;
import kr.xit.biz.ens.model.kt.KtMmsSendDTO.KtMainSendReqData;
import kr.xit.biz.ens.model.pplus.PplusDTO.PpStatusRequest;
import kr.xit.biz.ens.model.pplus.PplusDTO.PpStatusResponse;
import kr.xit.core.exception.BizRuntimeException;
import kr.xit.core.model.ApiResponseDTO;
import kr.xit.core.spring.util.ApiWebClientUtil;
@ -46,9 +50,7 @@ import org.apache.commons.lang3.StringUtils;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -80,8 +82,9 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
private String apiKkoBulkStatus;
@Value("${contract.kt.api.bulksend}")
private String apiKtBcBulkSend;
@Value("${contract.kt.api.bulkstatus}")
private String apiKtBcBulkStatus;
@Value("${contract.pplus.api.bulkstatus}")
private String apiPplusBulkStatus;
private final EnsBatchRequireNewService requireNewService;
private final ApiWebClientUtil apiWebClient;
@ -344,55 +347,6 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
}
}
/**
* (bulks)
*
* @param reqDTO BatchEnsRequest
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void findKkoMyDocStatusBulks(final EnsDTO.BatchEnsRequest reqDTO) {
final String url = apiHost + apiKkoBulkStatus;
final List<String> docsBinderUuids = mapper.selectKakaoStatusTgts(reqDTO);
final List<List<String>> partitions = ListUtils.partition(docsBinderUuids, bulkKkoMaxCnt);
final List<ApiResponseDTO> apiResults = partitions.stream()
.map(uuids -> apiWebClient.exchange(
url,
HttpMethod.POST,
BulkStatusRequests.builder()
.signguCode(reqDTO.getSignguCode())
.ffnlgCode(reqDTO.getFfnlgCode())
.document_binder_uuids(uuids)
.build(),
ApiResponseDTO.class,
getHeadeMap())
).toList();
final List<BulkStatusResponses> resList = new ArrayList<>();
for(ApiResponseDTO apiResult : apiResults) {
if(apiResult.getData() != null) {
resList.add(JsonUtils.toObjByObj(apiResult.getData(), BulkStatusResponses.class));
}
}
// 결과 반영
resList.forEach(o ->
o.getDocuments().forEach(t -> {
mapper.updateKakaoStatusInfo(t);
mapper.updateCntcSndngResultByKkoMyDoc(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
*
@ -465,17 +419,6 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
// private method
//*************************************************************************
/**
* API set
* @return Map<String,String>
*/
private Map<String,String> getHeadeMap(){
final Map<String, String> map = new HashMap<>();
map.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
//map.put(HttpHeaders.AUTHORIZATION, "");
return map;
}
//-----------------------------------------------------------------------------------------------------------------
// accept
//-----------------------------------------------------------------------------------------------------------------
@ -757,7 +700,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
.documents(bulkSendList)
.build(),
ApiResponseDTO.class,
getHeadeMap())
CmmEnsBizUtils.getHeadeMap())
)
.toList();
@ -766,7 +709,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
String errMsg = null;
for(ApiResponseDTO apiResult : apiResults) {
if(apiResult.getData() != null) {
resList.add(JsonUtils.toObjByObj(apiResult.getData(), BulkSendResponses.class));
resList.add(toObjByObj(apiResult.getData(), BulkSendResponses.class));
isSuccess = true;
continue;
}
@ -918,7 +861,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
HttpMethod.POST,
mstDTO,
ApiResponseDTO.class,
getHeadeMap());
CmmEnsBizUtils.getHeadeMap());
}
)
.toList();
@ -928,7 +871,7 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
for(ApiResponseDTO apiResult : apiResults) {
// KT-BC API 정상 호출
if(ObjectUtils.isNotEmpty(apiResult.getData())) {
KtCommonResponse resDTO = JsonUtils.toObjByObj(apiResult.getData(), KtCommonResponse.class);
KtCommonResponse resDTO = toObjByObj(apiResult.getData(), KtCommonResponse.class);
assert resDTO != null;
reqDTO.setResultDt(resDTO.getResultDt());
@ -991,12 +934,12 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
throw BizRuntimeException.create(errors.toString());
}
}
//-----------------------------------------------------------------------------------------------------------------
/**
* <pre>
* KT BC send
* Post plus send
* @param tgtDTO SndngMssageParam
* </pre>
*/
@ -1004,4 +947,5 @@ public class EnsBatchService extends EgovAbstractServiceImpl implements IEnsBatc
private void sendBulkPplus(final EnsDTO.SndngMssageParam tgtDTO) {
requireNewService.sendPostPlus(tgtDTO);
}
//-----------------------------------------------------------------------------------------------------------------
}

@ -0,0 +1,206 @@
package kr.xit.biz.ens.service;
import static kr.xit.core.support.utils.JsonUtils.toObjByObj;
import java.util.ArrayList;
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.cmm.CmmEnsBizUtils;
import kr.xit.biz.ens.mapper.IEnsBatchMapper;
import kr.xit.biz.ens.model.EnsDTO;
import kr.xit.biz.ens.model.EnsDTO.SndngMssageParam;
import kr.xit.biz.ens.model.cntc.CntcDTO;
import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkStatusRequests;
import kr.xit.biz.ens.model.kakao.KkopayDocBulkDTO.BulkStatusResponses;
import kr.xit.biz.ens.model.pplus.PplusDTO.PpStatusRequest;
import kr.xit.biz.ens.model.pplus.PplusDTO.PpStatusResponse;
import kr.xit.core.exception.BizRuntimeException;
import kr.xit.core.model.ApiResponseDTO;
import kr.xit.core.spring.util.ApiWebClientUtil;
import kr.xit.core.support.utils.Checks;
import kr.xit.core.support.utils.JsonUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* <pre>
* description :
* - Transaction
* - Transactional(propagation = Propagation.REQUIRES_NEW)
* packageName : kr.xit.biz.ens.service
* fileName : EnsBatchService
* author : limju
* date : 2023-08-31
* ======================================================================
*
* ----------------------------------------------------------------------
* 2023-08-31 limju
*
* </pre>
*/
@RequiredArgsConstructor
@Service
public class EnsBatchStatusService extends EgovAbstractServiceImpl implements IEnsBatchStatusService {
@Value("${contract.host}")
private String apiHost;
@Value("${contract.kakao.api.bulkstatus}")
private String apiKkoBulkStatus;
@Value("${contract.pplus.api.bulkstatus}")
private String apiPplusBulkStatus;
private final EnsBatchRequireNewService requireNewService;
private final ApiWebClientUtil apiWebClient;
private final IEnsBatchMapper mapper;
private static final Validator validator = Validation.buildDefaultValidatorFactory()
.getValidator();
@Value("${contract.kakao.bulk-max-cnt}")
private int bulkKkoMaxCnt;
private static final String SNDNG_PROCESS_STTUS = "sndngProcessSttus";
private static final String UNITY_SNDNG_MST_ID = "unitySndngMastrId";
private static final String YMDHMS = ApiConstants.FMT_DT_EMPTY_DLT;
/**
* <pre>
*
*
* @param reqDTO BatchEnsRequest
* </pre>
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void statusBulks(final EnsDTO.BatchEnsRequest reqDTO) {
final String url = apiHost + apiKkoBulkStatus;
final List<SndngMssageParam> tgtList = mapper.selectStatusBulkTgts(reqDTO);
for (SndngMssageParam dto : tgtList) {
dto.setSignguCode(reqDTO.getSignguCode());
dto.setFfnlgCode(reqDTO.getFfnlgCode());
dto.setProfile(ApiConstants.PROFILE);
MDC.put(UNITY_SNDNG_MST_ID, dto.getUnitySndngMastrId());
MDC.put("sndngMastrId", dto.getSndngMastrId());
//MDC.put(SNDNG_PROCESS_STTUS, "send-fail" + dto.getTrySeq());
final String[] tryVal = {
Checks.checkVal(dto.getTry1(), ""),
Checks.checkVal(dto.getTry2(), ""),
Checks.checkVal(dto.getTry3(), "")
};
// 마스터 상태 변경값을 파라메터에서 받은 상태값으로 set
//dto.setNewSndngProcessSttus(reqDTO.getSndngProcessSttus());
final String seCode = tryVal[dto.getTrySeq() - 1];
// 업무 문서 구분에 따른 분기
switch (SndngSeCode.compare(seCode)) {
/*
* : tb_ens_kakao_my_doc
* : tb_ens_mobile_page_manage
* : tb_cntc_sndng_result
*/
case KAKAO -> statusKakao(dto);
case PPLUS -> statusBulkPplus(dto);
case KT_BC, SMS, E_GREEN -> {
return;
}
default -> throw BizRuntimeException.create(String.format("정의 되지 않은 문서 중개자[%s] 입니다", seCode));
}
}
}
//-----------------------------------------------------------------------------------------------------------------
// status
//-----------------------------------------------------------------------------------------------------------------
/**
* <pre>
*
*
* @param reqDTO BatchEnsRequest
* </pre>
*/
private void statusKakao(final SndngMssageParam reqDTO) {
final String url = apiHost + apiKkoBulkStatus;
final List<String> docsBinderUuids = mapper.selectKakaoStatusTgts(reqDTO);
final List<List<String>> partitions = ListUtils.partition(docsBinderUuids, bulkKkoMaxCnt);
final List<ApiResponseDTO> apiResults = partitions.stream()
.map(uuids -> apiWebClient.exchange(
url,
HttpMethod.POST,
BulkStatusRequests.builder()
.signguCode(reqDTO.getSignguCode())
.ffnlgCode(reqDTO.getFfnlgCode())
.document_binder_uuids(uuids)
.build(),
ApiResponseDTO.class,
CmmEnsBizUtils.getHeadeMap())
).toList();
final List<BulkStatusResponses> resList = new ArrayList<>();
for(ApiResponseDTO apiResult : apiResults) {
if(apiResult.getData() != null) {
resList.add(toObjByObj(apiResult.getData(), BulkStatusResponses.class));
}
}
// 결과 반영
resList.forEach(o ->
o.getDocuments().forEach(t -> {
mapper.updateKakaoStatusInfo(t);
mapper.updateCntcSndngResultByKkoMyDoc(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());
})
);
}
/**
* <pre>
*
*
* @param reqDTO BatchEnsRequest
* </pre>
*/
private void statusBulkPplus(final SndngMssageParam reqDTO) {
final String url = apiHost + apiPplusBulkStatus;
ApiResponseDTO apiResult = apiWebClient.exchange(
url,
HttpMethod.POST,
PpStatusRequest.builder()
.signguCode(reqDTO.getSignguCode())
.ffnlgCode(reqDTO.getFfnlgCode())
.build(),
ApiResponseDTO.class,
CmmEnsBizUtils.getHeadeMap());
if(apiResult.getData() != null) {
PpStatusResponse resDTO = JsonUtils.toObjByObj(apiResult.getData(), PpStatusResponse.class);
}
}
//-----------------------------------------------------------------------------------------------------------------
}

@ -27,8 +27,6 @@ public interface IEnsBatchService {
void sendBulks(final EnsDTO.BatchEnsRequest reqDTO);
void findKkoMyDocStatusBulks(final EnsDTO.BatchEnsRequest reqDTO);
List<EnsDTO.SendKakaoTgt> findKakaoSendTargets(final EnsDTO.BatchEnsRequest reqDTO);
void updateErrorLog(EnsDTO.SndngMssageParam dto);

@ -0,0 +1,22 @@
package kr.xit.biz.ens.service;
import kr.xit.biz.ens.model.EnsDTO;
/**
* <pre>
* description :
*
* packageName : kr.xit.biz.ens.service
* fileName : IEnsBatchService
* author : limju
* date : 2023-08-31
* ======================================================================
*
* ----------------------------------------------------------------------
* 2023-08-31 limju
*
* </pre>
*/
public interface IEnsBatchStatusService {
void statusBulks(final EnsDTO.BatchEnsRequest reqDTO);
}

@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.ExampleObject;
import io.swagger.v3.oas.annotations.tags.Tag;
import kr.xit.biz.ens.model.EnsDTO;
import kr.xit.biz.ens.service.IEnsBatchService;
import kr.xit.biz.ens.service.IEnsBatchStatusService;
import kr.xit.core.model.ApiResponseDTO;
import kr.xit.core.model.IApiResponse;
import lombok.RequiredArgsConstructor;
@ -36,6 +37,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping(value = "/batch/ens/v1")
public class EnsBatchController {
private final IEnsBatchService service;
private final IEnsBatchStatusService statusService;
@Operation(summary = "통합문서 접수", description = "통합문서 접수")
@io.swagger.v3.oas.annotations.parameters.RequestBody(required = true, content = {
@ -128,7 +130,7 @@ public class EnsBatchController {
})
@PostMapping(value = "/findStatusBulks", produces = MediaType.APPLICATION_JSON_VALUE)
public IApiResponse findStatusBulks(@RequestBody final EnsDTO.BatchEnsRequest reqDTO){
service.findKkoMyDocStatusBulks(reqDTO);
statusService.statusBulks(reqDTO);
return ApiResponseDTO.success();
}

@ -22,4 +22,7 @@ contract:
api:
bulksend: /api/ens/kt/v1/mainSend
bulkstatus: /api/ens/kt/v1/messageResult
pplus:
api:
bulkstatus: /api/ens/pplus/v1/status

@ -852,6 +852,26 @@
<!-- =================================================================================== -->
<!-- ================================ status ============================================= -->
<!-- =================================================================================== -->
<select id="selectStatusBulkTgts" resultType="kr.xit.biz.ens.model.EnsDTO$SndngMssageParam">
/** ens-mysql-mapper|selectStatusBulkTgts-상태 요청 대상 조회|julim */
SELECT tesm.sndng_mastr_id
, tesm.unity_sndng_mastr_id
, tesm.tmplat_id
, tesm.sndng_co
, tesm.try_seq
, tesm.sndng_process_sttus
, teusm.try1
, teusm.try2
, teusm.try3
, teusm.try_cnt
FROM tb_ens_sndng_mastr tesm
JOIN tb_ens_unity_sndng_mastr teusm
ON tesm.unity_sndng_mastr_id = teusm.unity_sndng_mastr_id
WHERE tesm.sndng_process_sttus IN ('send-ok', 'sending1', 'sending2')
AND tesm.signgu_code = #{signguCode}
AND tesm.ffnlg_code = #{ffnlgCode}
</select>
<select id="selectKakaoStatusTgts" resultType="string">
/** ens-mysql-mapper|selectKakaoStatusTgts-카카오 문서 상태 조회 대상 목록 조회|julim */
SELECT document_binder_uuid

Loading…
Cancel
Save