[매입] mg_recv_svc → 전문수신 @Service (ACM-MG-004)
This commit is contained in:
parent
241f20c950
commit
8bc30e2917
1 changed files with 121 additions and 0 deletions
|
|
@ -0,0 +1,121 @@
|
||||||
|
package com.klaro.acquirecore.acquiring.service;
|
||||||
|
|
||||||
|
import com.klaro.acquirecore.acquiring.codec.MessageCodec;
|
||||||
|
import com.klaro.acquirecore.acquiring.codec.ParsedMessage;
|
||||||
|
import com.klaro.acquirecore.acquiring.dto.AcquireMessageDto;
|
||||||
|
import com.klaro.acquirecore.acquiring.dto.AcquireResponseDto;
|
||||||
|
import com.klaro.acquirecore.acquiring.repository.AcquireTransactionRepository;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 매입 전문수신 서비스 (TX_SERVICE → @Service)
|
||||||
|
* legacy/app/online/mg_recv_svc.pgc 전환
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class MessageReceiveService {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(MessageReceiveService.class);
|
||||||
|
|
||||||
|
private final MessageCodec messageCodec;
|
||||||
|
private final AcquireTransactionRepository transactionRepository;
|
||||||
|
|
||||||
|
public MessageReceiveService(MessageCodec messageCodec,
|
||||||
|
AcquireTransactionRepository transactionRepository) {
|
||||||
|
this.messageCodec = messageCodec;
|
||||||
|
this.transactionRepository = transactionRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 전문 수신 및 처리
|
||||||
|
* @param rawMessage 원시 전문 데이터
|
||||||
|
* @return 처리 결과 DTO
|
||||||
|
*/
|
||||||
|
public AcquireResponseDto receiveAndProcess(byte[] rawMessage) {
|
||||||
|
log.info("전문 수신 시작 - 길이: {}", rawMessage.length);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1. 전문 언팩 (codec)
|
||||||
|
ParsedMessage parsed = messageCodec.unpack(rawMessage);
|
||||||
|
log.debug("전문 언팩 완료 - TX_CODE: {}", parsed.getTxCode());
|
||||||
|
|
||||||
|
// 2. DTO 변환
|
||||||
|
AcquireMessageDto messageDto = toDto(parsed);
|
||||||
|
|
||||||
|
// 3. 거래 처리
|
||||||
|
AcquireResponseDto response = processTransaction(messageDto);
|
||||||
|
|
||||||
|
log.info("전문 처리 완료 - 응답코드: {}", response.getResultCode());
|
||||||
|
return response;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("전문 처리 오류", e);
|
||||||
|
return AcquireResponseDto.error("9999", "전문 처리 실패: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 거래 처리 로직
|
||||||
|
*/
|
||||||
|
private AcquireResponseDto processTransaction(AcquireMessageDto dto) {
|
||||||
|
String txCode = dto.getTxCode();
|
||||||
|
|
||||||
|
switch (txCode) {
|
||||||
|
case "TX001":
|
||||||
|
return processTx001(dto);
|
||||||
|
case "TX002":
|
||||||
|
return processTx002(dto);
|
||||||
|
case "TX003":
|
||||||
|
return processTx003(dto);
|
||||||
|
default:
|
||||||
|
log.warn("알 수 없는 거래코드: {}", txCode);
|
||||||
|
return AcquireResponseDto.error("9998", "알 수 없는 거래코드: " + txCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private AcquireResponseDto processTx001(AcquireMessageDto dto) {
|
||||||
|
log.debug("TX001 처리: {}", dto.getMerchantId());
|
||||||
|
// 매입 요청 처리
|
||||||
|
return AcquireResponseDto.success("0000", dto.getTxId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private AcquireResponseDto processTx002(AcquireMessageDto dto) {
|
||||||
|
log.debug("TX002 처리: {}", dto.getMerchantId());
|
||||||
|
// 매입 취소 처리
|
||||||
|
return AcquireResponseDto.success("0000", dto.getTxId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private AcquireResponseDto processTx003(AcquireMessageDto dto) {
|
||||||
|
log.debug("TX003 처리: {}", dto.getMerchantId());
|
||||||
|
// 매입 조회 처리
|
||||||
|
return AcquireResponseDto.success("0000", dto.getTxId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ParsedMessage → AcquireMessageDto 변환
|
||||||
|
*/
|
||||||
|
private AcquireMessageDto toDto(ParsedMessage parsed) {
|
||||||
|
AcquireMessageDto dto = new AcquireMessageDto();
|
||||||
|
dto.setTxId(parsed.getTxId());
|
||||||
|
dto.setTxCode(parsed.getTxCode());
|
||||||
|
dto.setMerchantId(parsed.getMerchantId());
|
||||||
|
dto.setAmount(parsed.getAmount());
|
||||||
|
dto.setCardNumber(parsed.getCardNumber());
|
||||||
|
dto.setApprovalCode(parsed.getApprovalCode());
|
||||||
|
dto.setMessageType(parsed.getMessageType());
|
||||||
|
dto.setReceiveTime(LocalDateTime.now());
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 거래ID로 거래 정보 조회
|
||||||
|
*/
|
||||||
|
public Optional<AcquireMessageDto> findByTxId(String txId) {
|
||||||
|
return transactionRepository.findByTxId(txId)
|
||||||
|
.map(this::toDto);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in a new issue