Untitled
unknown
java
3 years ago
7.6 kB
4
Indexable
public <T> ResponseEntity<T> scheduleAppointment(Optional<Garage> garageOptional, ScheduleAppointmentRequest appointmentRequest, String userId, String userType) throws Exception { Gson gson = new Gson(); String offerId = appointmentRequest.getOfferId(); Long smartIQVehicleId; String kavakCatalogId = "f75c5be516fe"; Integer kilometers = null; Vehicle vehicleTemp = null; Optional<Offer> offerOptional = offerService.findFirstByOfferId(offerId); if (!offerOptional.isPresent()) { throw new NotFoundException(); } Offer offer = offerOptional.get(); String carId = offer.getCarId(); if (!garageOptional.isPresent()) { List<Vehicle> vehicles = vehicleService.findFirstByCarId(carId, userId, userType); if (vehicles != null && vehicles.size() > 0) { vehicleTemp = vehicles.get(0); smartIQVehicleId = vehicleTemp.getSmartIQVehicleId(); kilometers = vehicleTemp.getKilometers(); } else { throw new NotFoundException(); } } else { Garage garage = garageOptional.get(); smartIQVehicleId = garage.getSmartIQVehicleId(); kilometers = garage.getKilometers(); vehicleTemp = garage.getVehicle(); } SHVehicleCatalog shVehicleCatalog = shCatalogDataService.findBySmartIQVehicleId(smartIQVehicleId); if (shVehicleCatalog == null) { throw new WrongCatalogInfoException(); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); KavakCustomerDTO kavakCustomerDTO = KavakCustomerDTO.builder() .email(appointmentRequest.getCustomer().getEmail()) .phone(appointmentRequest.getCustomer().getPhone()) .fullName(appointmentRequest.getCustomer().getFirstName() + " " + appointmentRequest.getCustomer().getLastName()) .build(); KavakVehicleDTO kavakVehicleDTO = KavakVehicleDTO.builder() .catalogId(kavakCatalogId) .mileage(kilometers) .plate(appointmentRequest.getPlateNumber()) .build(); KavakScheduleAppointmentRequestDTO kavakScheduleAppointmentRequestDTO = KavakScheduleAppointmentRequestDTO.builder() .branchId(Long.valueOf(appointmentRequest.getCentreId())) .startTime(sdf.format(appointmentRequest.getAppointmentStartTime())) .endTime(sdf.format(appointmentRequest.getAppointmentEndTime())) .externalId(carId) .valuationPrice(offer.getRetailPrice().longValue()) .kavakVehicleDTO(kavakVehicleDTO) .kavakCustomerDTO(kavakCustomerDTO) .build(); String apiURL = baseUrl + "/appointments"; RestTemplate restTemplate = new RestTemplate(); restTemplate.setErrorHandler(new ResponseErrorHandler() { @Override public boolean hasError(ClientHttpResponse response) { return false; } @Override public void handleError(ClientHttpResponse response) throws IOException { System.err.println("HTTP Response Code" + response.getStatusCode()); } }); HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); headers.add("x-consumer-key", kavakToken); Centre centre = getBranch(appointmentRequest.getCentreId()); Timestamp cal = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("GMT+3"))); VavaAppointment vavaAppointment = VavaAppointment.builder() .carId(carId) .centreId(appointmentRequest.getCentreId()) .centreName(centre.getCentreName()) .centreEmail(centre.getEmail()) .centrePhone(centre.getPhone()) .centreAddress(centre.getAddress() == null ? null : centre.getAddress().getFullAddress()) .phone(appointmentRequest.getCustomer().getPhone()) .email(appointmentRequest.getCustomer().getEmail()) .lastName(appointmentRequest.getCustomer().getLastName()) .firstName(appointmentRequest.getCustomer().getFirstName()) .minPrice(offer.getRetailPrice()) .maxPrice(offer.getRetailPrice()) .startDate(new Timestamp(appointmentRequest.getAppointmentStartTime().getTime())) .endDate(new Timestamp(appointmentRequest.getAppointmentEndTime().getTime())) .status(AppointmentStatusEnums.IN_PROGRESS.name()) .createDate(cal) .updateDate(cal) .build(); log.info("Kavak appointment schedule request: " + gson.toJson(kavakScheduleAppointmentRequestDTO)); HttpEntity<String> entity = new HttpEntity(kavakScheduleAppointmentRequestDTO, headers); try { ResponseEntity<String> result = restTemplate.exchange(apiURL, HttpMethod.POST, entity, String.class); log.info("Kavak appointment schedule response: " + result.getBody()); if (result.getStatusCodeValue() == 200) { appointmentService.save(vavaAppointment); if (garageOptional.isPresent()) { garageService.updateStatusAndPlateNumber(C2BStatusEnums.IN_SALES_PROCESS.name(), appointmentRequest.getPlateNumber(), carId, userType, userId); } else { Garage garage = vehicleTemp.getGarage(); garage.setTitle(Utils.getVehicleTitle(shVehicleCatalog)); garage.setPricingStatus(C2BStatusEnums.PRICED.name()); garage.setStatus(C2BStatusEnums.IN_SALES_PROCESS.name()); garage.setPlateNumber(appointmentRequest.getPlateNumber()); garageService.saveBase(garage); } garageLogService.saveGarageLog(carId, C2BStatusEnums.IN_SALES_PROCESS.name(), ApprovementEnums.CREATED.name(), "", userId); Type collectionType = new TypeToken<KavakApiResponseDto<String>>() {}.getType(); KavakApiResponseDto<String> kavakApiResponseDto = gson.fromJson(result.getBody(),collectionType); T t = (T) gson.fromJson(kavakApiResponseDto.getData(), KavakApiAppointmentResponseDTO.class); return new ResponseEntity<>(t, result.getStatusCode()); } else { Type collectionType = new TypeToken<KavakApiResponseDto<String>>() {}.getType(); KavakApiResponseDto<String> responseDto = gson.fromJson(result.getBody(),collectionType); if (!ObjectUtils.isEmpty(responseDto.getValidations())) { throw new DetailedInvalidRequestException(String.join(" ", responseDto.getValidations())); } throw new Exception(MessageTypes.INTERNAL_SERVER_ERROR.getMessage()); } } catch (HttpClientErrorException | HttpServerErrorException httpClientOrServerExc) { throw new Exception(MessageTypes.INTERNAL_SERVER_ERROR.getMessage()); } } }
Editor is loading...