[매입] mg_recv_svc → 전문수신 @Service (ACM-MG-004)

This commit is contained in:
forge-bot 2026-07-18 11:10:30 +00:00
parent 78788230f9
commit 1dd183a6db

View file

@ -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;
}
}