|
|
|
|
@ -3,10 +3,13 @@ package go.kr.project.api.external.service.impl;
|
|
|
|
|
import egovframework.exception.MessageException;
|
|
|
|
|
import go.kr.project.api.config.ApiConstant;
|
|
|
|
|
import go.kr.project.api.external.service.ExternalVehicleApiService;
|
|
|
|
|
import go.kr.project.api.internal.util.ExceptionDetailUtil;
|
|
|
|
|
import go.kr.project.api.model.request.BasicRequest;
|
|
|
|
|
import go.kr.project.api.model.request.LedgerRequest;
|
|
|
|
|
import go.kr.project.api.model.*;
|
|
|
|
|
import go.kr.project.api.model.response.*;
|
|
|
|
|
import go.kr.project.api.service.VmisCarBassMatterInqireLogService;
|
|
|
|
|
import go.kr.project.api.service.VmisCarLedgerFrmbkLogService;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.core.ParameterizedTypeReference;
|
|
|
|
|
@ -29,6 +32,8 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
|
|
|
|
|
private final RestTemplate restTemplate;
|
|
|
|
|
private final VmisProperties vmisProperties; // 프로퍼티 주입 (외부 API URL 구성에 사용)
|
|
|
|
|
private final VmisCarBassMatterInqireLogService bassMatterLogService; // 기본사항 조회 로그 서비스
|
|
|
|
|
private final VmisCarLedgerFrmbkLogService ledgerLogService; // 등록원부 로그 서비스
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<VehicleApiResponseVO> getVehiclesInfo(List<String> vehicleNumbers) {
|
|
|
|
|
@ -141,17 +146,22 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
public BasicResponse getBasicInfo(BasicRequest request) {
|
|
|
|
|
log.debug("차량 기본정보 조회 API 호출 - 차량번호: {}", request.getVhrno());
|
|
|
|
|
|
|
|
|
|
// Envelope로 감싸기 (요청 객체는 이미 모든 필수 파라미터를 포함)
|
|
|
|
|
Envelope<BasicRequest> requestEnvelope = new Envelope<>(request);
|
|
|
|
|
String generatedId = null;
|
|
|
|
|
try {
|
|
|
|
|
// 1) 최초 요청 로그 저장 (별도 트랜잭션)
|
|
|
|
|
VmisCarBassMatterInqireVO logEntity = VmisCarBassMatterInqireVO.fromRequest(request);
|
|
|
|
|
generatedId = bassMatterLogService.createInitialRequestNewTx(logEntity);
|
|
|
|
|
|
|
|
|
|
// HTTP 헤더 설정
|
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
|
// Envelope로 감싸기 (요청 객체는 이미 모든 필수 파라미터를 포함)
|
|
|
|
|
Envelope<BasicRequest> requestEnvelope = new Envelope<>(request);
|
|
|
|
|
|
|
|
|
|
HttpEntity<Envelope<BasicRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
|
|
|
|
|
// HTTP 헤더 설정
|
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// API 호출
|
|
|
|
|
HttpEntity<Envelope<BasicRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
|
|
|
|
|
|
|
|
|
|
// 2) API 호출
|
|
|
|
|
ResponseEntity<Envelope<BasicResponse>> responseEntity = restTemplate.exchange(
|
|
|
|
|
vmisProperties.getExternal().getApi().getUrl().buildBasicUrl(),
|
|
|
|
|
HttpMethod.POST,
|
|
|
|
|
@ -159,9 +169,14 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
new ParameterizedTypeReference<Envelope<BasicResponse>>() {}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 3) 응답 로그 업데이트 (별도 트랜잭션)
|
|
|
|
|
if (responseEntity.getStatusCode() == HttpStatus.OK && responseEntity.getBody() != null) {
|
|
|
|
|
List<BasicResponse> data = responseEntity.getBody().getData();
|
|
|
|
|
if (data != null && !data.isEmpty()) {
|
|
|
|
|
VmisCarBassMatterInqireVO update = VmisCarBassMatterInqireVO.fromResponse(generatedId, responseEntity.getBody());
|
|
|
|
|
if (update != null) {
|
|
|
|
|
bassMatterLogService.updateResponseNewTx(update);
|
|
|
|
|
}
|
|
|
|
|
return data.get(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -170,6 +185,21 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
// 4) 오류 로그 업데이트 (별도 트랜잭션)
|
|
|
|
|
if (generatedId != null) {
|
|
|
|
|
try {
|
|
|
|
|
String detail = ExceptionDetailUtil.buildForLog(e);
|
|
|
|
|
VmisCarBassMatterInqireVO errorLog = VmisCarBassMatterInqireVO.builder()
|
|
|
|
|
.carBassMatterInqireId(generatedId)
|
|
|
|
|
.cntcResultCode(ApiConstant.CNTC_RESULT_CODE_ERROR)
|
|
|
|
|
.cntcResultDtls(detail)
|
|
|
|
|
.build();
|
|
|
|
|
bassMatterLogService.updateResponseNewTx(errorLog);
|
|
|
|
|
log.error("[EXTERNAL-BASIC-ERR-LOG] API 호출 에러 정보 저장 완료(별도TX) - ID: {}, detail: {}", generatedId, detail, e);
|
|
|
|
|
} catch (Exception ignore) {
|
|
|
|
|
log.error("[EXTERNAL-BASIC-ERR-LOG] 에러 로그 저장 실패 - ID: {}", generatedId, ignore);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.error("차량 기본정보 조회 API 호출 실패 - 차량번호: {}", request.getVhrno(), e);
|
|
|
|
|
throw new MessageException("차량 기본정보 조회 실패: " + e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
@ -186,17 +216,22 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
public LedgerResponse getLedgerInfo(LedgerRequest request) {
|
|
|
|
|
log.debug("자동차 등록원부 조회 API 호출 - 차량번호: {}", request.getVhrno());
|
|
|
|
|
|
|
|
|
|
// Envelope로 감싸기 (요청 객체는 이미 모든 필수 파라미터를 포함)
|
|
|
|
|
Envelope<LedgerRequest> requestEnvelope = new Envelope<>(request);
|
|
|
|
|
String generatedId = null;
|
|
|
|
|
try {
|
|
|
|
|
// 1) 최초 요청 로그 저장 (별도 트랜잭션)
|
|
|
|
|
VmisCarLedgerFrmbkVO init = VmisCarLedgerFrmbkVO.fromRequest(request);
|
|
|
|
|
generatedId = ledgerLogService.createInitialRequestNewTx(init);
|
|
|
|
|
|
|
|
|
|
// HTTP 헤더 설정
|
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
|
// Envelope로 감싸기 (요청 객체는 이미 모든 필수 파라미터를 포함)
|
|
|
|
|
Envelope<LedgerRequest> requestEnvelope = new Envelope<>(request);
|
|
|
|
|
|
|
|
|
|
HttpEntity<Envelope<LedgerRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
|
|
|
|
|
// HTTP 헤더 설정
|
|
|
|
|
HttpHeaders headers = new HttpHeaders();
|
|
|
|
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// API 호출
|
|
|
|
|
HttpEntity<Envelope<LedgerRequest>> requestEntity = new HttpEntity<>(requestEnvelope, headers);
|
|
|
|
|
|
|
|
|
|
// 2) API 호출
|
|
|
|
|
ResponseEntity<Envelope<LedgerResponse>> responseEntity = restTemplate.exchange(
|
|
|
|
|
vmisProperties.getExternal().getApi().getUrl().buildLedgerUrl(),
|
|
|
|
|
HttpMethod.POST,
|
|
|
|
|
@ -204,10 +239,19 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
new ParameterizedTypeReference<Envelope<LedgerResponse>>() {}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 3) 응답 로그 업데이트 (마스터 + 상세, 별도 트랜잭션)
|
|
|
|
|
if (responseEntity.getStatusCode() == HttpStatus.OK && responseEntity.getBody() != null) {
|
|
|
|
|
List<LedgerResponse> data = responseEntity.getBody().getData();
|
|
|
|
|
if (data != null && !data.isEmpty()) {
|
|
|
|
|
return data.get(0);
|
|
|
|
|
LedgerResponse body = data.get(0);
|
|
|
|
|
VmisCarLedgerFrmbkVO masterUpdate = VmisCarLedgerFrmbkVO.fromResponseMaster(generatedId, body);
|
|
|
|
|
ledgerLogService.updateResponseNewTx(masterUpdate);
|
|
|
|
|
|
|
|
|
|
List<VmisCarLedgerFrmbkDtlVO> details = VmisCarLedgerFrmbkDtlVO.listFromResponse(body, generatedId);
|
|
|
|
|
if (details != null && !details.isEmpty()) {
|
|
|
|
|
ledgerLogService.saveDetailsNewTx(generatedId, details);
|
|
|
|
|
}
|
|
|
|
|
return body;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -215,6 +259,21 @@ public class ExternalVehicleApiServiceImpl implements ExternalVehicleApiService
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
// 4) 오류 로그 업데이트 (별도 트랜잭션)
|
|
|
|
|
if (generatedId != null) {
|
|
|
|
|
try {
|
|
|
|
|
String detail = ExceptionDetailUtil.buildForLog(e);
|
|
|
|
|
VmisCarLedgerFrmbkVO errorLog = VmisCarLedgerFrmbkVO.builder()
|
|
|
|
|
.carLedgerFrmbkId(generatedId)
|
|
|
|
|
.cntcResultCode(ApiConstant.CNTC_RESULT_CODE_ERROR)
|
|
|
|
|
.cntcResultDtls(detail)
|
|
|
|
|
.build();
|
|
|
|
|
ledgerLogService.updateResponseNewTx(errorLog);
|
|
|
|
|
log.error("[EXTERNAL-LEDGER-ERR-LOG] API 호출 에러 정보 저장 완료(별도TX) - ID: {}, detail: {}", generatedId, detail, e);
|
|
|
|
|
} catch (Exception ignore) {
|
|
|
|
|
log.error("[EXTERNAL-LEDGER-ERR-LOG] 에러 로그 저장 실패 - ID: {}", generatedId, ignore);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.error("자동차 등록원부 조회 API 호출 실패 - 차량번호: {}", request.getVhrno(), e);
|
|
|
|
|
throw new MessageException("자동차 등록원부 조회 실패: " + e.getMessage(), e);
|
|
|
|
|
}
|
|
|
|
|
|