84 lines
2.8 KiB
Java
84 lines
2.8 KiB
Java
package ru.soune.nocopy.service.dadata;
|
|||
|
|
|
||
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||
|
|
import lombok.RequiredArgsConstructor;
|
||
|
|
import lombok.extern.slf4j.Slf4j;
|
||
|
|
import okhttp3.*;
|
||
|
|
import org.springframework.beans.factory.annotation.Value;
|
||
|
|
import org.springframework.stereotype.Component;
|
||
|
|
import ru.soune.nocopy.dto.dadata.DaDataResponse;
|
||
|
|
import ru.soune.nocopy.dto.dadata.DaDataSuggestion;
|
||
|
|
import ru.soune.nocopy.dto.dadata.DaDataWrapper;
|
||
|
|
|
||
|
|
import java.io.IOException;
|
||
|
|
import java.util.concurrent.TimeUnit;
|
||
|
|
|
||
|
|
@Slf4j
|
||
|
|
@Component
|
||
|
|
@RequiredArgsConstructor
|
||
|
|
public class DaDataService {
|
||
|
|
|
||
|
|
@Value("${dadata.api-key}")
|
||
|
|
private String apiKey ;
|
||
|
|
|
||
|
|
@Value("${dadata.url}")
|
||
|
|
private String url ;
|
||
|
|
|
||
|
|
private final OkHttpClient httpClient;
|
||
|
|
|
||
|
|
public DaDataService() {
|
||
|
|
this.httpClient = new OkHttpClient.Builder()
|
||
|
|
.connectTimeout(5, TimeUnit.SECONDS)
|
||
|
|
.writeTimeout(5, TimeUnit.SECONDS)
|
||
|
|
.readTimeout(15, TimeUnit.SECONDS)
|
||
|
|
.callTimeout(20, TimeUnit.SECONDS)
|
||
|
|
.retryOnConnectionFailure(true)
|
||
|
|
.build();
|
||
|
|
}
|
||
|
|
|
||
|
|
public DaDataResponse callDaData(String inn) throws IOException {
|
||
|
|
if (apiKey == null || apiKey.isBlank()) {
|
||
|
|
throw new IllegalStateException("SearchAPI key not configured");
|
||
|
|
}
|
||
|
|
|
||
|
|
String jsonBody = String.format("{\"query\": \"%s\"}", inn);
|
||
|
|
|
||
|
|
Request request = new Request.Builder()
|
||
|
|
.url("https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party")
|
||
|
|
.post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonBody))
|
||
|
|
.header("Accept", "application/json")
|
||
|
|
.header("Authorization", "Token " + apiKey)
|
||
|
|
.build();
|
||
|
|
|
||
|
|
try (Response response = httpClient.newCall(request).execute()) {
|
||
|
|
ResponseBody body = response.body();
|
||
|
|
if (body == null) {
|
||
|
|
throw new IOException("Empty response body");
|
||
|
|
}
|
||
|
|
|
||
|
|
String jsonResponse = body.string();
|
||
|
|
|
||
|
|
ObjectMapper mapper = new ObjectMapper();
|
||
|
|
DaDataWrapper wrapper = mapper.readValue(jsonResponse, DaDataWrapper.class);
|
||
|
|
|
||
|
|
DaDataResponse daDataResponse = new DaDataResponse();
|
||
|
|
|
||
|
|
if (wrapper.getSuggestions() != null && !wrapper.getSuggestions().isEmpty()) {
|
||
|
|
DaDataSuggestion suggestion = wrapper.getSuggestions().get(0);
|
||
|
|
|
||
|
|
daDataResponse.setCompanyName(suggestion.getValue());
|
||
|
|
|
||
|
|
if (suggestion.getData() != null) {
|
||
|
|
daDataResponse.setInn(suggestion.getData().getInn());
|
||
|
|
|
||
|
|
if (suggestion.getData().getAddress() != null) {
|
||
|
|
daDataResponse.setAddress(suggestion.getData().getAddress().getValue());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return daDataResponse;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|