[매입] mg_recv_svc → 전문수신 @Service #6
1 changed files with 88 additions and 0 deletions
|
|
@ -0,0 +1,88 @@
|
|||
package com.klaro.acquirecore.acquiring.service;
|
||||
|
||||
import com.klaro.acquirecore.acquiring.codec.MessageCodec;
|
||||
import com.klaro.acquirecore.acquiring.codec.UnpackedMessage;
|
||||
import com.klaro.acquirecore.acquiring.dto.TxRequest;
|
||||
import com.klaro.acquirecore.acquiring.dto.TxResponse;
|
||||
import com.klaro.acquirecore.acquiring.repository.TxRepository;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* TX_SERVICE: 전문수신 서비스
|
||||
* Legacy: mg_recv_svc.pgc
|
||||
* Handles incoming acquiring transaction messages, unpacks, processes, and stores.
|
||||
*/
|
||||
@Service
|
||||
public class TxService {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(TxService.class);
|
||||
|
||||
private final MessageCodec messageCodec;
|
||||
private final TxRepository txRepository;
|
||||
|
||||
public TxService(MessageCodec messageCodec, TxRepository txRepository) {
|
||||
this.messageCodec = messageCodec;
|
||||
this.txRepository = txRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
* 수신된 전문을 처리합니다.
|
||||
*
|
||||
* @param rawMessage 원본 바이트 전문
|
||||
* @return 처리 결과 응답
|
||||
*/
|
||||
public TxResponse processMessage(byte[] rawMessage) {
|
||||
log.info("Processing incoming message, length={}", rawMessage.length);
|
||||
|
||||
try {
|
||||
// 1. 전문 언팩 (디코딩)
|
||||
UnpackedMessage unpacked = messageCodec.unpack(rawMessage);
|
||||
log.debug("Message unpacked: txType={}, traceNo={}",
|
||||
unpacked.getTxType(), unpacked.getTraceNo());
|
||||
|
||||
// 2. TX 요청 변환
|
||||
TxRequest request = toTxRequest(unpacked);
|
||||
|
||||
// 3. 거래 처리 (DB 저장)
|
||||
txRepository.save(request);
|
||||
|
||||
// 4. 응답 생성
|
||||
return buildResponse(unpacked, "00", "Approved");
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("Message processing failed", e);
|
||||
return buildErrorResponse(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private TxRequest toTxRequest(UnpackedMessage unpacked) {
|
||||
TxRequest request = new TxRequest();
|
||||
request.setTraceNo(unpacked.getTraceNo());
|
||||
request.setTxType(unpacked.getTxType());
|
||||
request.setMerchantId(unpacked.getMerchantId());
|
||||
request.setAmount(unpacked.getAmount());
|
||||
request.setCardNo(unpacked.getCardNo());
|
||||
request.setExpiryDate(unpacked.getExpiryDate());
|
||||
request.setInstallments(unpacked.getInstallments());
|
||||
request.setMessageRaw(unpacked.getRawData());
|
||||
return request;
|
||||
}
|
||||
|
||||
private TxResponse buildResponse(UnpackedMessage unpacked, String respCode, String respMsg) {
|
||||
TxResponse response = new TxResponse();
|
||||
response.setTraceNo(unpacked.getTraceNo());
|
||||
response.setRespCode(respCode);
|
||||
response.setRespMsg(respMsg);
|
||||
response.setTxType(unpacked.getTxType());
|
||||
return response;
|
||||
}
|
||||
|
||||
private TxResponse buildErrorResponse(String errorMessage) {
|
||||
TxResponse response = new TxResponse();
|
||||
response.setRespCode("99");
|
||||
response.setRespMsg(errorMessage != null ? errorMessage : "Unknown error");
|
||||
return response;
|
||||
}
|
||||
}
|
||||
Reference in a new issue