[매입] mg_recv_svc → 전문수신 @Service (ACM-MG-004)
This commit is contained in:
parent
78788230f9
commit
1dd183a6db
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