You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
VIPS/src/main/java/go/kr/project/vmis/service/CarLedgerFrmbkLogService.java

62 lines
2.6 KiB
Java

package go.kr.project.vmis.service;
import go.kr.project.vmis.mapper.CarLedgerFrmbkMapper;
import go.kr.project.vmis.model.ledger.CarLedgerFrmbkDtlVO;
import go.kr.project.vmis.model.ledger.CarLedgerFrmbkVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* 자동차 등록 원부(갑) 로그 전용 서비스.
* - 모든 로깅(write)은 별도 트랜잭션(REQUIRES_NEW)으로 수행하여 상위 트랜잭션 롤백의 영향을 받지 않도록 한다.
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class CarLedgerFrmbkLogService {
private final CarLedgerFrmbkMapper mapper;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public String createInitialRequestNewTx(CarLedgerFrmbkVO request) {
String id = mapper.selectNextCarLedgerFrmbkId();
request.setCarLedgerFrmbkId(id);
int result = mapper.insertCarLedgerFrmbk(request);
if (result != 1) {
throw new RuntimeException("자동차 등록 원부(갑) 최초요청 등록 실패");
}
log.info("[LEDGER-REQ-LOG] 최초 요청 저장(별도TX) - ID: {}, 차량번호: {}", id, request.getDmndVhrno());
return id;
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateResponseNewTx(CarLedgerFrmbkVO response) {
if (response.getCarLedgerFrmbkId() == null) {
throw new IllegalArgumentException("자동차 등록 원부(갑) ID는 필수입니다.");
}
int updated = mapper.updateCarLedgerFrmbk(response);
if (updated != 1) {
throw new RuntimeException("자동차 등록 원부(갑) 정보 업데이트 실패 - ID: " + response.getCarLedgerFrmbkId());
}
log.info("[LEDGER-RES-LOG] 마스터 응답 업데이트(별도TX) - ID: {}, 결과코드: {}",
response.getCarLedgerFrmbkId(), response.getCntcResultCode());
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveDetailsNewTx(String masterId, List<CarLedgerFrmbkDtlVO> details) {
if (details == null || details.isEmpty()) return;
for (CarLedgerFrmbkDtlVO dtl : details) {
String dtlId = mapper.selectNextCarLedgerFrmbkDtlId();
dtl.setCarLedgerFrmbkDtlId(dtlId);
dtl.setCarLedgerFrmbkId(masterId);
mapper.insertCarLedgerFrmbkDtl(dtl);
}
log.info("[LEDGER-RES-LOG] 상세 {}건 저장(별도TX) - ID: {}", details.size(), masterId);
}
}