Refactoring google maps api
This commit is contained in:
@@ -1,44 +0,0 @@
|
||||
package it.integry.ems.controller;
|
||||
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.types.LatLng;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
|
||||
@RestController
|
||||
@Scope("request")
|
||||
public class MapController {
|
||||
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_MAP_GETCOORDINATE_BY_CITY, method = RequestMethod.GET)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse getCoordinateByCity(HttpServletRequest request,
|
||||
@RequestParam String cityName) {
|
||||
ServiceRestResponse resp;
|
||||
try {
|
||||
LatLng coordinates = mapService.getCoordinateByCity(cityName);
|
||||
resp = ServiceRestResponse.createPositiveResponse(coordinates);
|
||||
} catch (Exception e) {
|
||||
logger.error(request.getRequestURI(), e);
|
||||
resp = ServiceRestResponse.createNegativeResponse();
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
package it.integry.ems.service;
|
||||
|
||||
import com.google.maps.GeoApiContext;
|
||||
import com.google.maps.GeocodingApi;
|
||||
import com.google.maps.model.AddressComponent;
|
||||
import com.google.maps.model.AddressComponentType;
|
||||
import com.google.maps.model.GeocodingResult;
|
||||
import com.google.maps.model.Geometry;
|
||||
import it.integry.ems_model.types.LatLng;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class MapService {
|
||||
@Autowired
|
||||
private KeyManagerService keyManagerService;
|
||||
|
||||
public LatLng getCoordinateByCity(String cityName) throws Exception {
|
||||
GeoApiContext context = new GeoApiContext.Builder()
|
||||
.apiKey(getApiKey())
|
||||
.build();
|
||||
GeocodingResult[] results = GeocodingApi.geocode(context, cityName).await();
|
||||
|
||||
if (results != null && results.length > 0) {
|
||||
Geometry geometry = results[0].geometry;
|
||||
|
||||
LatLng latLngIntegry = new LatLng();
|
||||
latLngIntegry.set(new BigDecimal(geometry.location.lat), new BigDecimal(geometry.location.lng));
|
||||
|
||||
return latLngIntegry;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public IndirizzoDTO geocode(String address) throws Exception {
|
||||
GeoApiContext gtx = new GeoApiContext.Builder().apiKey(getApiKey()).build();
|
||||
GeocodingResult[] results = GeocodingApi.geocode(gtx, address).await();
|
||||
|
||||
return geocodeToDto(results);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param results
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public IndirizzoDTO geocodeToDto(GeocodingResult[] results) throws Exception {
|
||||
if (results.length > 0) {
|
||||
IndirizzoDTO indirizzoDTO = new IndirizzoDTO();
|
||||
for (AddressComponent component : results[0].addressComponents) {
|
||||
List<AddressComponentType> types = Arrays.asList(component.types);
|
||||
if (types.contains(AddressComponentType.ROUTE)) {
|
||||
indirizzoDTO.setVia(component.longName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.STREET_NUMBER)) {
|
||||
indirizzoDTO.setNumeroCivico(component.longName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.COUNTRY)) {
|
||||
indirizzoDTO.setNazione(component.shortName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_2)) {
|
||||
indirizzoDTO.setProv(component.shortName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_3) || types.contains(AddressComponentType.LOCALITY)) { // LOCALITY
|
||||
indirizzoDTO.setCitta(component.longName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.POSTAL_CODE)) {
|
||||
indirizzoDTO.setCap(component.longName.toUpperCase());
|
||||
}
|
||||
}
|
||||
|
||||
if (indirizzoDTO.getVia() != null) {
|
||||
String indirizzo = indirizzoDTO.getVia();
|
||||
if (indirizzoDTO.getNumeroCivico() != null) {
|
||||
indirizzo += ", " + indirizzoDTO.getNumeroCivico();
|
||||
}
|
||||
indirizzoDTO.setIndirizzo(indirizzo);
|
||||
}
|
||||
|
||||
indirizzoDTO.setLat(BigDecimal.valueOf(results[0].geometry.location.lat));
|
||||
indirizzoDTO.setLng(BigDecimal.valueOf(results[0].geometry.location.lng));
|
||||
|
||||
// String address = (results[0].formattedAddress);
|
||||
return indirizzoDTO;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param lat
|
||||
* @param lng
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public IndirizzoDTO reverseGeocode(double lat, double lng) throws Exception {
|
||||
GeoApiContext gtx = new GeoApiContext.Builder().apiKey(getApiKey()).build();
|
||||
com.google.maps.model.LatLng coords = new com.google.maps.model.LatLng();
|
||||
coords.lat = lat;
|
||||
coords.lng = lng;
|
||||
GeocodingResult[] results = GeocodingApi.reverseGeocode(gtx, coords).await();
|
||||
return geocodeToDto(results);
|
||||
}
|
||||
|
||||
|
||||
private String getApiKey() throws Exception {
|
||||
return keyManagerService.getGmapsApiKey();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package it.integry.ems.service.comuni.controller;
|
||||
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.comuni.base.CapCittaProv;
|
||||
import it.integry.ems.service.comuni.dto.SavePositionRequestDTO;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.exceptions.ComuniException;
|
||||
import it.integry.ems.service.comuni.service.ComuniService;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@Scope("request")
|
||||
public class ComuniController {
|
||||
|
||||
@Autowired
|
||||
private ComuniService comuniService;
|
||||
|
||||
@PostMapping(value = "savePosition")
|
||||
public ServiceRestResponse savePosition(@RequestParam(CommonConstants.PROFILE_DB) String config,
|
||||
@RequestBody SavePositionRequestDTO request) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.savePosition(request));
|
||||
}
|
||||
|
||||
@PostMapping(value = "infoComuni")
|
||||
public ServiceRestResponse getInfoComuni(@RequestParam(required = false) String nome,
|
||||
@RequestParam(required = false) String cap,
|
||||
@RequestParam(required = false) String codiceCatastale,
|
||||
@RequestParam(required = false) String indirizzo,
|
||||
@RequestParam(required = false) String prov,
|
||||
@RequestParam(required = false) String regione) throws ComuniException {
|
||||
|
||||
List<Comune> filteredComuni = comuniService.filterComuni(nome, codiceCatastale, prov, regione);
|
||||
if (!UtilityString.isNullOrEmpty(indirizzo) || !UtilityString.isNullOrEmpty(cap)) {
|
||||
filteredComuni = comuniService.filterIndirizzo(filteredComuni, cap, indirizzo);
|
||||
}
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(filteredComuni);
|
||||
}
|
||||
|
||||
@PostMapping(value = "capCittaProv")
|
||||
public ServiceRestResponse getCapCittaProv(@RequestParam(required = false) String nome,
|
||||
@RequestParam(required = false) String cap,
|
||||
@RequestParam(required = false) String prov) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.getCapCittaProv(nome, cap, prov));
|
||||
}
|
||||
|
||||
@PostMapping(value = "searchComuni")
|
||||
public ServiceRestResponse searchComuni(@RequestParam() String q,
|
||||
@RequestParam(required = false) Integer limit) {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(comuniService.searchComuni(q, limit));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package it.integry.ems.service.comuni.dto;
|
||||
|
||||
public class SavePositionRequestDTO {
|
||||
|
||||
private String descrizione;
|
||||
private String citta;
|
||||
private String indirizzo;
|
||||
private String cap;
|
||||
private String prov;
|
||||
private String nazione;
|
||||
|
||||
private double lat;
|
||||
private double lng;
|
||||
|
||||
public String getDescrizione() {
|
||||
return descrizione;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setDescrizione(String descrizione) {
|
||||
this.descrizione = descrizione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCitta() {
|
||||
return citta;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setCitta(String citta) {
|
||||
this.citta = citta;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getIndirizzo() {
|
||||
return indirizzo;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setIndirizzo(String indirizzo) {
|
||||
this.indirizzo = indirizzo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCap() {
|
||||
return cap;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setCap(String cap) {
|
||||
this.cap = cap;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getProv() {
|
||||
return prov;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setProv(String prov) {
|
||||
this.prov = prov;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNazione() {
|
||||
return nazione;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setNazione(String nazione) {
|
||||
this.nazione = nazione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public double getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setLat(double lat) {
|
||||
this.lat = lat;
|
||||
return this;
|
||||
}
|
||||
|
||||
public double getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public SavePositionRequestDTO setLng(double lng) {
|
||||
this.lng = lng;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,43 +1,68 @@
|
||||
package it.integry.ems.service.comuni.service;
|
||||
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.comuni.dto.SavePositionRequestDTO;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.entity.StbPosizioni;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.service.comuni.base.CapCittaProv;
|
||||
import it.integry.ems.service.comuni.base.ComuniSearchableFields;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.exceptions.ComuniException;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Scope("request")
|
||||
public class ComuniService {
|
||||
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
@Autowired
|
||||
private UnitaTerritorialiService unitaTerritorialiService;
|
||||
|
||||
private Logger logger = LogManager.getLogger();
|
||||
@Autowired
|
||||
private EntityProcessor entityProcessor;
|
||||
|
||||
@Autowired
|
||||
private MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
public List<Comune> getComuni() {
|
||||
return unitaTerritorialiService.getComuni();
|
||||
}
|
||||
|
||||
public StbPosizioni savePosition(SavePositionRequestDTO savePositionRequestDTO) throws Exception {
|
||||
StbPosizioni position = new StbPosizioni()
|
||||
.setCitta(savePositionRequestDTO.getCitta())
|
||||
.setIndirizzo(savePositionRequestDTO.getIndirizzo())
|
||||
.setProv(savePositionRequestDTO.getProv())
|
||||
.setCap(savePositionRequestDTO.getCap())
|
||||
.setNazione(savePositionRequestDTO.getNazione())
|
||||
.setLat(BigDecimal.valueOf(savePositionRequestDTO.getLat()))
|
||||
.setLng(BigDecimal.valueOf(savePositionRequestDTO.getLng()));
|
||||
|
||||
position.setOperation(OperationType.INSERT);
|
||||
entityProcessor.processEntity(position, multiDBTransactionManager);
|
||||
|
||||
position.setOperation(OperationType.SELECT_OBJECT);
|
||||
return position;
|
||||
}
|
||||
|
||||
/**
|
||||
* Metodo che filtra l'intera lista dei comuni corrispondenti ai parametri specificati
|
||||
*
|
||||
* @param nome Nome del comune
|
||||
* @param cap Codice Avviamento Postale
|
||||
* @param codiceCatastale Codice Catastale
|
||||
* @param prov Provincia
|
||||
* @param regione Regione
|
||||
@@ -48,7 +73,6 @@ public class ComuniService {
|
||||
List<Comune> comuni = unitaTerritorialiService.getComuni();
|
||||
|
||||
comuni = this.filterComuniByAttribute(ComuniSearchableFields.NOME, nome, comuni);
|
||||
// comuni = this.filterComuniByAttribute(ComuniSearchableFields.CAP, cap, comuni);
|
||||
comuni = this.filterComuniByAttribute(ComuniSearchableFields.CODICE_CATASTALE, codiceCatastale, comuni);
|
||||
comuni = this.filterComuniByAttribute(ComuniSearchableFields.PROVINCIA, prov, comuni);
|
||||
comuni = this.filterComuniByAttribute(ComuniSearchableFields.REGIONE, regione, comuni);
|
||||
@@ -64,7 +88,16 @@ public class ComuniService {
|
||||
}
|
||||
}
|
||||
|
||||
/**/
|
||||
/**
|
||||
* Metodo che restituisce un oggetto {@link CapCittaProv} contenente le informazioni di CAP, Città e Provincia
|
||||
* filtrando i comuni in base ai parametri specificati.
|
||||
*
|
||||
* @param nome Nome del comune
|
||||
* @param cap Codice di Avviamento Postale
|
||||
* @param prov Sigla della provincia
|
||||
* @return Un oggetto {@link CapCittaProv} con le informazioni richieste
|
||||
* @throws Exception se si verifica un errore durante il recupero dei dati
|
||||
*/
|
||||
public CapCittaProv getCapCittaProv(String nome, String cap, String prov) throws Exception {
|
||||
|
||||
CapCittaProv comune = new CapCittaProv();
|
||||
@@ -87,7 +120,7 @@ public class ComuniService {
|
||||
for (Comune result : resultList) {
|
||||
provFound = result.getSigla();
|
||||
cittaFound = result.getNome();
|
||||
if (result.getCap().size() != 0){
|
||||
if (!result.getCap().isEmpty()){
|
||||
capFound = result.getCap().get(0);
|
||||
}
|
||||
comune.setProv(provFound);
|
||||
@@ -103,10 +136,10 @@ public class ComuniService {
|
||||
}
|
||||
|
||||
public List<Comune> filterIndirizzo(List<Comune> comuni, String cap, String indirizzo) throws ComuniException {
|
||||
List<Comune> result = new ArrayList<Comune>();
|
||||
List<Comune> result = new ArrayList<>();
|
||||
try {
|
||||
if (!UtilityString.isNullOrEmpty(cap)) {
|
||||
IndirizzoDTO indirizzoDTO = mapService.geocode(cap);
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.geocode(cap);
|
||||
|
||||
if (indirizzoDTO == null) {
|
||||
comuni.clear();
|
||||
@@ -130,7 +163,7 @@ public class ComuniService {
|
||||
String _nome = UtilityString.blankIfNull(comune.getNome());
|
||||
String _prov = UtilityString.blankIfNull(comune.getSigla());
|
||||
String rawAddress = indirizzo + " " + _nome + " " + _prov;
|
||||
IndirizzoDTO indirizzoDTO = mapService.geocode(rawAddress);
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.geocode(rawAddress);
|
||||
if (indirizzoDTO != null) {
|
||||
String _cap = indirizzoDTO.getCap();
|
||||
if (_cap != null) {
|
||||
@@ -210,7 +243,7 @@ public class ComuniService {
|
||||
* @return Lista dei comuni corrispondenti
|
||||
*/
|
||||
public List<Comune> searchComuni(String qs, Integer limit) {
|
||||
List<Comune> result = new ArrayList<Comune>();
|
||||
List<Comune> result = new ArrayList<>();
|
||||
if (!UtilityString.isNullOrEmpty(qs)) {
|
||||
|
||||
List<Comune> listComuni = unitaTerritorialiService.getComuni();
|
||||
|
||||
@@ -428,8 +428,6 @@ public class EmsRestConstants {
|
||||
public static final String PATH_UPDATE_MTB_MOVI_NUM_MOV = PATH + "updateMtbMoviNumMov";
|
||||
public static final String PATH_SET_COORDINATE_GEO_CLIE = PATH + "setCoodinateGeoClie";
|
||||
public static final String PATH_MIGRATE_GEOLOCATION_FOR_RLAVR = PATH + "migrateGeolocationForRlavr";
|
||||
public static final String PATH_REVERSE_GEOCODE = PATH + "reverseGeocode";
|
||||
public static final String PATH_GET_POSITION_FROM_COORDS = PATH + "getPositionFromCoords";
|
||||
public static final String PATH_GET_RICORRENZE = PATH + "getRicorrenze";
|
||||
public static final String PATH_IMPORT_PRESENZE = PATH + "importPresenze";
|
||||
public static final String PATH_SAVE_TRANSACTION_FARMMES = PATH + "saveTransactionFarmmes";
|
||||
@@ -497,7 +495,6 @@ public class EmsRestConstants {
|
||||
public static final String PATH_EXPORT_FATTURE_FPX = PATH + "exportFattureFpx";
|
||||
public static final String PATH_EXPORT_EMAIL_FPX = PATH + "exportEmailFpx";
|
||||
public static final String PATH_READ_FPX_INBOX = PATH + "readFpxInbox";
|
||||
public static final String PATH_GEOCODE = PATH + "geocode";
|
||||
public static final String PATH_GIACENZA_ISTANTANEA = PATH + "giacenzaIstantanea";
|
||||
public static final String PATH_GIACENZA_ARTICOLI_DA_BANCALE = PATH + "giacenzaArticoliBancale";
|
||||
public static final String PATH_RETTIFICA_INV_MAG = PATH + "rettificaInvMag";
|
||||
@@ -517,11 +514,6 @@ public class EmsRestConstants {
|
||||
|
||||
public static final String PATH_LOG_SOAP_SERVICES = PATH + "logSoapServices";
|
||||
|
||||
//MAP
|
||||
public static final String PATH_EXPORT_LAYER_MAP = PATH + "exportLayerMap";
|
||||
public static final String PATH_MAP_GETCOORDINATE_BY_ADDRESS = PATH + "map/getCoordinatesByAddress";
|
||||
public static final String PATH_MAP_GETCOORDINATE_BY_CITY = PATH + "map/getCoordinatesByCity";
|
||||
|
||||
//WMS SERVICES
|
||||
public static final String PATH_EXPORT_ART_DIALOGO = PATH + "exportArtDialogo";
|
||||
private static final String USERNAME_LOGIN = "ADMINREST";
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package it.integry.googleCloudApi.controller;
|
||||
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@RestController
|
||||
@Scope("request")
|
||||
public class GeocodingController {
|
||||
|
||||
@Autowired
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
@GetMapping(value = "geocode")
|
||||
public ServiceRestResponse geocode(@RequestParam("address") String address) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(geocodingService.geocode(address));
|
||||
}
|
||||
|
||||
@GetMapping(value = "reverseGeocode")
|
||||
public ServiceRestResponse reverseGeocode(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestParam BigDecimal lat,
|
||||
@RequestParam BigDecimal lng) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(geocodingService.reverseGeocode(lat.doubleValue(), lng.doubleValue()));
|
||||
}
|
||||
|
||||
@GetMapping(value = "getPositionFromCoords")
|
||||
public ServiceRestResponse getPositionFromCoords(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestParam BigDecimal lat,
|
||||
@RequestParam BigDecimal lng) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(geocodingService.getPositionFromCoords(lat, lng));
|
||||
}
|
||||
|
||||
@GetMapping(value = "map/getCoordinatesByCity")
|
||||
public ServiceRestResponse getCoordinateByCity(@RequestParam String cityName) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(geocodingService.getCoordinateByCity(cityName));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package it.integry.googleCloudApi.controller;
|
||||
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.googleCloudApi.service.PlacesService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@Scope("request")
|
||||
@RequestMapping("/google/places")
|
||||
public class PlacesController {
|
||||
|
||||
@Autowired
|
||||
private PlacesService placesService;
|
||||
|
||||
@GetMapping(value = "autoCompleteAddress")
|
||||
public ServiceRestResponse autoCompleteAddress(@RequestParam String address,
|
||||
@RequestParam String language,
|
||||
@RequestParam String uuid) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(placesService.autoCompleteAddress(address, language, uuid));
|
||||
}
|
||||
|
||||
@GetMapping(value = "placeDetails")
|
||||
public ServiceRestResponse placeDetails(@RequestParam String placeId,
|
||||
@RequestParam String uuid) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(placesService.placeDetails(placeId, uuid));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package it.integry.googleCloudApi.dto;
|
||||
|
||||
public class AutoCompleteAddressDTO {
|
||||
|
||||
private String description;
|
||||
private String placeId;
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public AutoCompleteAddressDTO setDescription(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getPlaceId() {
|
||||
return placeId;
|
||||
}
|
||||
|
||||
public AutoCompleteAddressDTO setPlaceId(String placeId) {
|
||||
this.placeId = placeId;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
package it.integry.ems_model.utility.dto;
|
||||
package it.integry.googleCloudApi.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class IndirizzoDTO {
|
||||
public Long idPosizione;
|
||||
public String via;
|
||||
public String numeroCivico;
|
||||
public String indirizzo; // (via + numeroCivico)
|
||||
public String cap;
|
||||
public String citta;
|
||||
public String prov;
|
||||
public String nazione;
|
||||
public BigDecimal lat;
|
||||
public BigDecimal lng;
|
||||
private Long idPosizione;
|
||||
private String via;
|
||||
private String numeroCivico;
|
||||
private String indirizzo; // (via + numeroCivico)
|
||||
private String cap;
|
||||
private String citta;
|
||||
private String prov;
|
||||
private String nazione;
|
||||
private BigDecimal lat;
|
||||
private BigDecimal lng;
|
||||
|
||||
public Long getIdPosizione() {
|
||||
return idPosizione;
|
||||
@@ -27,71 +27,80 @@ public class IndirizzoDTO {
|
||||
return via;
|
||||
}
|
||||
|
||||
public void setVia(String via) {
|
||||
public IndirizzoDTO setVia(String via) {
|
||||
this.via = via;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNumeroCivico() {
|
||||
return numeroCivico;
|
||||
}
|
||||
|
||||
public void setNumeroCivico(String numeroCivico) {
|
||||
public IndirizzoDTO setNumeroCivico(String numeroCivico) {
|
||||
this.numeroCivico = numeroCivico;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getIndirizzo() {
|
||||
return indirizzo;
|
||||
}
|
||||
|
||||
public void setIndirizzo(String indirizzo) {
|
||||
public IndirizzoDTO setIndirizzo(String indirizzo) {
|
||||
this.indirizzo = indirizzo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCap() {
|
||||
return cap;
|
||||
}
|
||||
|
||||
public void setCap(String cap) {
|
||||
public IndirizzoDTO setCap(String cap) {
|
||||
this.cap = cap;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCitta() {
|
||||
return citta;
|
||||
}
|
||||
|
||||
public void setCitta(String citta) {
|
||||
public IndirizzoDTO setCitta(String citta) {
|
||||
this.citta = citta;
|
||||
}
|
||||
|
||||
public String getNazione() {
|
||||
return nazione;
|
||||
}
|
||||
|
||||
public void setNazione(String nazione) {
|
||||
this.nazione = nazione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getProv() {
|
||||
return prov;
|
||||
}
|
||||
|
||||
public void setProv(String prov) {
|
||||
public IndirizzoDTO setProv(String prov) {
|
||||
this.prov = prov;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNazione() {
|
||||
return nazione;
|
||||
}
|
||||
|
||||
public IndirizzoDTO setNazione(String nazione) {
|
||||
this.nazione = nazione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public void setLat(BigDecimal lat) {
|
||||
public IndirizzoDTO setLat(BigDecimal lat) {
|
||||
this.lat = lat;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public void setLng(BigDecimal lng) {
|
||||
public IndirizzoDTO setLng(BigDecimal lng) {
|
||||
this.lng = lng;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
package it.integry.googleCloudApi.service;
|
||||
|
||||
import com.google.maps.GeocodingApi;
|
||||
import com.google.maps.model.*;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.KeyManagerService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.entity.StbPosizioni;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.LatLng;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.utility.GoogleApiUtility;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
@Service
|
||||
@Scope("request")
|
||||
public class GeocodingService {
|
||||
|
||||
@Autowired
|
||||
private KeyManagerService keyManagerService;
|
||||
|
||||
@Autowired
|
||||
public EntityProcessor entityProcessor;
|
||||
|
||||
@Autowired
|
||||
public MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
@Autowired
|
||||
public SetupGest setupGest;
|
||||
|
||||
public IndirizzoDTO geocode(String address) throws Exception {
|
||||
GeocodingResult[] results = GeocodingApi.geocode(GoogleApiUtility.getGeoApiContext(keyManagerService), address).await();
|
||||
|
||||
return GoogleApiUtility.buildIndirizzoDTO(results);
|
||||
}
|
||||
|
||||
public IndirizzoDTO reverseGeocode(double lat, double lng) throws Exception {
|
||||
com.google.maps.model.LatLng location = new com.google.maps.model.LatLng(lat, lng);
|
||||
GeocodingResult[] results = GeocodingApi.reverseGeocode(GoogleApiUtility.getGeoApiContext(keyManagerService), location).await();
|
||||
|
||||
return GoogleApiUtility.buildIndirizzoDTO(results);
|
||||
}
|
||||
|
||||
public IndirizzoDTO getPositionFromCoords(BigDecimal lat, BigDecimal lng) throws Exception {
|
||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||
IndirizzoDTO indirizzo;
|
||||
|
||||
double formattedLat = lat.setScale(5, RoundingMode.HALF_EVEN).doubleValue();
|
||||
double formattedLng = lng.setScale(5, RoundingMode.HALF_EVEN).doubleValue();
|
||||
int distance = setupGest.getSetupInteger(conn, "MAPS", "SETUP", "GEOCODE_PRECISION", 50);
|
||||
|
||||
String nearbyPointQuery = "SELECT * from ( " +
|
||||
" SELECT *,(6371392.896 * acos(cos(radians(" + formattedLat + ")) * cos(radians(lat)) * " +
|
||||
" cos(radians(lng) - radians(" + formattedLng + ")) + " +
|
||||
" sin(radians(" + formattedLat + ")) * sin(radians(lat)))) AS distance " +
|
||||
" FROM stb_posizioni " +
|
||||
" ) distance_points " +
|
||||
"where distance < " + distance +
|
||||
" ORDER BY distance";
|
||||
|
||||
StbPosizioni stbPosizioni = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, nearbyPointQuery, StbPosizioni.class);
|
||||
|
||||
if (stbPosizioni != null) {
|
||||
indirizzo = new IndirizzoDTO()
|
||||
.setIdPosizione(stbPosizioni.getId())
|
||||
.setCap(stbPosizioni.getCap())
|
||||
.setCitta(stbPosizioni.getCitta())
|
||||
.setLat(stbPosizioni.getLat())
|
||||
.setLng(stbPosizioni.getLng())
|
||||
.setNazione(stbPosizioni.getNazione())
|
||||
.setVia(stbPosizioni.getIndirizzo())
|
||||
.setProv(stbPosizioni.getProv())
|
||||
.setIndirizzo(stbPosizioni.getIndirizzo());
|
||||
} else {
|
||||
indirizzo = reverseGeocode(lat.doubleValue(), lng.doubleValue());
|
||||
|
||||
stbPosizioni = new StbPosizioni()
|
||||
.setLat(lat)
|
||||
.setLng(lng)
|
||||
.setCap(indirizzo.getCap())
|
||||
.setCitta(indirizzo.getCitta())
|
||||
.setIndirizzo(indirizzo.getIndirizzo())
|
||||
.setNazione(indirizzo.getNazione())
|
||||
.setProv(indirizzo.getProv());
|
||||
|
||||
stbPosizioni.setOperation(OperationType.INSERT);
|
||||
entityProcessor.processEntity(stbPosizioni, multiDBTransactionManager);
|
||||
|
||||
indirizzo.setIdPosizione(stbPosizioni.getId());
|
||||
}
|
||||
|
||||
return indirizzo;
|
||||
}
|
||||
|
||||
public LatLng getCoordinateByCity(String cityName) throws Exception {
|
||||
GeocodingResult[] results = GeocodingApi.geocode(GoogleApiUtility.getGeoApiContext(keyManagerService), cityName).await();
|
||||
|
||||
if (results != null && results.length > 0) {
|
||||
Geometry geometry = results[0].geometry;
|
||||
|
||||
return new LatLng()
|
||||
.set(new BigDecimal(geometry.location.lat), new BigDecimal(geometry.location.lng));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package it.integry.googleCloudApi.service;
|
||||
|
||||
import com.google.maps.PlacesApi;
|
||||
import com.google.maps.model.AutocompletePrediction;
|
||||
import com.google.maps.model.PlaceDetails;
|
||||
import it.integry.ems.service.KeyManagerService;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.AutoCompleteAddressDTO;
|
||||
import it.integry.googleCloudApi.utility.GoogleApiUtility;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class PlacesService {
|
||||
|
||||
@Autowired
|
||||
private KeyManagerService keyManagerService;
|
||||
|
||||
/**
|
||||
* Autocompletes an address based on the input string and returns a list of suggestions.
|
||||
* <p>
|
||||
* This method uses a session token to group user interactions within a single session,
|
||||
* improving the billing model and the accuracy of prediction ranking, as recommended
|
||||
* by the Google Places API documentation.<p/>
|
||||
*
|
||||
* <p><b>Session Token Best Practices (from Google):</b></p>
|
||||
* <ul>
|
||||
* <li>A session token is used to group Autocomplete and Place Details requests.</li>
|
||||
* <li>Generate a new UUID when a user starts typing in a search field.</li>
|
||||
* <li>Reuse the same token for all autocomplete requests and the final place details request during the session.</li>
|
||||
* <li>Do not reuse a session token across different user interactions.</li>
|
||||
* <li>Each session should last no longer than a few minutes.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param address The address string to autocomplete.
|
||||
* @param language The language for the autocomplete results.
|
||||
* @param uuid A UUID string representing the session token for the autocomplete request.
|
||||
* @return A list of AutoCompleteAddressDTO containing address suggestions.
|
||||
* @throws Exception If there is an error during the API call.
|
||||
*/
|
||||
public List<AutoCompleteAddressDTO> autoCompleteAddress(String address, String language, String uuid) throws Exception {
|
||||
AutocompletePrediction[] predictions = PlacesApi.placeAutocomplete(
|
||||
GoogleApiUtility.getGeoApiContext(keyManagerService),
|
||||
address,
|
||||
GoogleApiUtility.getSessionToken(uuid)
|
||||
).language(language).await();
|
||||
|
||||
return Arrays.stream(predictions)
|
||||
.map(x ->
|
||||
new AutoCompleteAddressDTO().setDescription(x.description).setPlaceId(x.placeId)
|
||||
).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves detailed information about a place using its Place ID.
|
||||
*
|
||||
* <p>This method uses the same session token used during the autocomplete session,
|
||||
* which allows Google to link the details request to the user's prior autocomplete queries.
|
||||
* This results in more relevant results and a more efficient billing structure.<p/>
|
||||
*
|
||||
* <p>See: <a href="https://developers.google.com/maps/documentation/places/web-service/session-tokens">Google documentation</a></p>
|
||||
*
|
||||
* @param placeId The unique identifier for the place.
|
||||
* @param uuid The same session token used in the autocomplete request (as a UUID string).
|
||||
* @return An IndirizzoDTO containing detailed address information, or null if not found.
|
||||
* @throws Exception If there is an error during the API call.
|
||||
*/
|
||||
public IndirizzoDTO placeDetails(String placeId, String uuid) throws Exception {
|
||||
PlaceDetails details = PlacesApi.placeDetails(
|
||||
GoogleApiUtility.getGeoApiContext(keyManagerService),
|
||||
placeId,
|
||||
GoogleApiUtility.getSessionToken(uuid)
|
||||
).await();
|
||||
|
||||
if (details != null) return GoogleApiUtility.buildIndirizzoDTO(details);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package it.integry.googleCloudApi.utility;
|
||||
|
||||
import com.google.maps.GeoApiContext;
|
||||
import com.google.maps.PlaceAutocompleteRequest;
|
||||
import com.google.maps.model.AddressComponent;
|
||||
import com.google.maps.model.AddressComponentType;
|
||||
import com.google.maps.model.GeocodingResult;
|
||||
import com.google.maps.model.PlaceDetails;
|
||||
import it.integry.ems.service.KeyManagerService;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class GoogleApiUtility {
|
||||
|
||||
/**
|
||||
* Creates a GeoApiContext using the API key from KeyManagerService.
|
||||
*
|
||||
* @param keyManagerService The service to retrieve the Google Maps API key.
|
||||
* @return A configured GeoApiContext instance.
|
||||
* @throws Exception if there is an issue retrieving the API key or building the context.
|
||||
*/
|
||||
public static GeoApiContext getGeoApiContext(KeyManagerService keyManagerService) throws Exception {
|
||||
return new GeoApiContext.Builder().apiKey(keyManagerService.getGmapsApiKey()).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a session token for PlaceAutocompleteRequest using a UUID.
|
||||
*
|
||||
* @param uuid The UUID string to create the session token.
|
||||
* @return A PlaceAutocompleteRequest.SessionToken instance.
|
||||
*/
|
||||
public static PlaceAutocompleteRequest.SessionToken getSessionToken(String uuid) {
|
||||
UUID uuidObj = UUID.fromString(uuid);
|
||||
return new PlaceAutocompleteRequest.SessionToken(uuidObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an IndirizzoDTO from a GeocodingResult or PlaceDetails object.
|
||||
*
|
||||
* @param obj The object containing address information, either GeocodingResult[] or PlaceDetails.
|
||||
* @return An IndirizzoDTO populated with the address details.
|
||||
* @throws IllegalArgumentException if the object type is unsupported.
|
||||
*/
|
||||
public static <T> IndirizzoDTO buildIndirizzoDTO(T obj) {
|
||||
if (obj instanceof GeocodingResult[]) {
|
||||
GeocodingResult[] results = (GeocodingResult[]) obj;
|
||||
if (results.length == 0) return null;
|
||||
GeocodingResult result = results[0];
|
||||
|
||||
return addressComponentsToDto(result.addressComponents)
|
||||
.setLat(BigDecimal.valueOf(result.geometry.location.lat))
|
||||
.setLng(BigDecimal.valueOf(result.geometry.location.lng));
|
||||
} else if (obj instanceof PlaceDetails) {
|
||||
PlaceDetails result = (PlaceDetails) obj;
|
||||
|
||||
return addressComponentsToDto(result.addressComponents)
|
||||
.setLat(BigDecimal.valueOf(result.geometry.location.lat))
|
||||
.setLng(BigDecimal.valueOf(result.geometry.location.lng));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unsupported type: " + obj.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
private static IndirizzoDTO addressComponentsToDto(AddressComponent[] addressComponents) {
|
||||
IndirizzoDTO indirizzoDTO = new IndirizzoDTO();
|
||||
|
||||
for (AddressComponent component : addressComponents) {
|
||||
List<AddressComponentType> types = Arrays.asList(component.types);
|
||||
|
||||
if (types.contains(AddressComponentType.ROUTE)) {
|
||||
indirizzoDTO.setVia(component.longName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.STREET_NUMBER)) {
|
||||
indirizzoDTO.setNumeroCivico(component.longName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.COUNTRY)) {
|
||||
indirizzoDTO.setNazione(component.shortName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_2)) {
|
||||
indirizzoDTO.setProv(component.shortName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_3) || types.contains(AddressComponentType.LOCALITY)) { // LOCALITY
|
||||
indirizzoDTO.setCitta(component.longName.toUpperCase());
|
||||
} else if (types.contains(AddressComponentType.POSTAL_CODE)) {
|
||||
indirizzoDTO.setCap(component.longName.toUpperCase());
|
||||
}
|
||||
}
|
||||
|
||||
if (indirizzoDTO.getVia() != null) {
|
||||
String indirizzo = indirizzoDTO.getVia();
|
||||
if (indirizzoDTO.getNumeroCivico() != null) {
|
||||
indirizzo += ", " + indirizzoDTO.getNumeroCivico();
|
||||
}
|
||||
indirizzoDTO.setIndirizzo(indirizzo);
|
||||
}
|
||||
|
||||
return indirizzoDTO;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import it.integry.ems.activity.dto.UserWorkHoursClockOutRequestDTO;
|
||||
import it.integry.ems.activity.dto.UserWorkHoursStatusDTO;
|
||||
import it.integry.ems.exception.PrimaryDatabaseNotPresentException;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.system.service.SystemService;
|
||||
import it.integry.ems.user.dto.UserDTO;
|
||||
@@ -22,7 +23,7 @@ import it.integry.ems_model.utility.Query;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityDate;
|
||||
import it.integry.ems_model.utility.UtilityLocalDate;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.firebase.dto.MessageDTO;
|
||||
import it.integry.firebase.dto.NotificationDTO;
|
||||
import it.integry.firebase.dto.android.AndroidConfigDTO;
|
||||
@@ -69,6 +70,9 @@ public class UserWorkHoursService {
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
public void clockIn(String username, UserWorkHoursClockInRequestDTO userWorkHoursClockInRequestDTO) throws Exception {
|
||||
if (!userWorkHoursClockInRequestDTO.isValidPosition())
|
||||
throw new Exception("Posizione di ingresso non valida");
|
||||
@@ -92,7 +96,7 @@ public class UserWorkHoursService {
|
||||
jtbRLavt.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
|
||||
final IndirizzoDTO positionFromCoords =
|
||||
utilityService.getPositionFromCoords(userWorkHoursClockInRequestDTO.getPositionLatitude(), userWorkHoursClockInRequestDTO.getPositionLongitude());
|
||||
geocodingService.getPositionFromCoords(userWorkHoursClockInRequestDTO.getPositionLatitude(), userWorkHoursClockInRequestDTO.getPositionLongitude());
|
||||
|
||||
JtbRLavr jtbRLavr = new JtbRLavr()
|
||||
.setDaOra(userWorkHoursClockInRequestDTO.getTimestamp() != null ?
|
||||
@@ -136,7 +140,7 @@ public class UserWorkHoursService {
|
||||
jtbRLavt.setFlagTrasferta("S");
|
||||
|
||||
final IndirizzoDTO positionFromCoords =
|
||||
utilityService.getPositionFromCoords(userWorkHoursClockOutRequestDTO.getPositionLatitude(), userWorkHoursClockOutRequestDTO.getPositionLongitude());
|
||||
geocodingService.getPositionFromCoords(userWorkHoursClockOutRequestDTO.getPositionLatitude(), userWorkHoursClockOutRequestDTO.getPositionLongitude());
|
||||
|
||||
JtbRLavr jtbRLavr = new JtbRLavr()
|
||||
.setCodJcom(userWorkHoursClockOutRequestDTO.getCodJcom())
|
||||
|
||||
@@ -13,11 +13,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.response.EsitoType;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.response.StatusResponse;
|
||||
import it.integry.ems.rules.businessLogic.AccountingBusinessLogic;
|
||||
import it.integry.ems.service.comuni.base.CapCittaProv;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.exceptions.ComuniException;
|
||||
import it.integry.ems.service.comuni.service.ComuniService;
|
||||
import it.integry.ems.status.ServiceChecker;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
@@ -32,7 +28,6 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.xml.ws.soap.SOAPFaultException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@@ -45,22 +40,28 @@ public class ContabilController {
|
||||
|
||||
@Autowired
|
||||
private ServiceChecker serviceChecker;
|
||||
|
||||
@Autowired
|
||||
private ContabilService contabilService;
|
||||
|
||||
@Autowired
|
||||
private AutofatturaService autofatturaService;
|
||||
|
||||
@Autowired
|
||||
private ScadenzeService scadenzeService;
|
||||
|
||||
@Autowired
|
||||
private PassaggioAnno passaggioAnno;
|
||||
|
||||
@Autowired
|
||||
private RegCorrispettivoService regCorrispettivoService;
|
||||
@Autowired
|
||||
private ComuniService comuniService;
|
||||
|
||||
@Autowired
|
||||
private RequestDataDTO requestDataDTO;
|
||||
|
||||
@Autowired
|
||||
private AmmortamentiService ammortamentiService;
|
||||
|
||||
@Autowired
|
||||
private SEPAService SEPAService;
|
||||
|
||||
@@ -198,41 +199,6 @@ public class ContabilController {
|
||||
return ServiceRestResponse.createPositiveResponse(contabilService.checkIban(iban));
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/infoComuni", method = RequestMethod.POST)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse getInfoComuni(HttpServletRequest request, @RequestParam(required = false) String nome,
|
||||
@RequestParam(required = false) String cap,
|
||||
@RequestParam(required = false) String codiceCatastale,
|
||||
@RequestParam(required = false) String indirizzo,
|
||||
@RequestParam(required = false) String prov,
|
||||
@RequestParam(required = false) String regione) throws ComuniException {
|
||||
List<Comune> filteredComuni = comuniService.filterComuni(nome, codiceCatastale, prov, regione);
|
||||
if (!UtilityString.isNullOrEmpty(indirizzo) || !UtilityString.isNullOrEmpty(cap)) {
|
||||
filteredComuni = comuniService.filterIndirizzo(filteredComuni, cap, indirizzo);
|
||||
}
|
||||
return ServiceRestResponse.createPositiveResponse(filteredComuni);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/capCittaProv", method = RequestMethod.POST)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse getCapCittaProv(HttpServletRequest request, @RequestParam(required = false) String nome,
|
||||
@RequestParam(required = false) String cap,
|
||||
@RequestParam(required = false) String prov) throws Exception {
|
||||
CapCittaProv comune = comuniService.getCapCittaProv(nome, cap, prov);
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(comune);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/searchComuni", method = RequestMethod.POST)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse searchComuni(HttpServletRequest request,
|
||||
@RequestParam() String q,
|
||||
@RequestParam(required = false) Integer limit) throws Exception {
|
||||
List<Comune> results = comuniService.searchComuni(q, limit);
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(results);
|
||||
}
|
||||
|
||||
@ExceptionHandler(SOAPFaultException.class)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse handleSOAPException(HttpServletRequest request, HttpServletResponse response, SOAPFaultException ex) {
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.annimon.stream.Stream;
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.contabil.dto.DettaglioIncassoTitoliDTO;
|
||||
import it.integry.ems.contabil.dto.DistintaEffettiDTO;
|
||||
import it.integry.ems.contabil.dto.DistinteIncassiDTO;
|
||||
import it.integry.ems.contabil.dto.IncassoTitoloDTO;
|
||||
import it.integry.ems.contabil.iban.base.IbanBase;
|
||||
import it.integry.ems.contabil.iban.exceptions.IbanException;
|
||||
@@ -16,19 +15,18 @@ import it.integry.ems.contabil.partitaIva.services.CheckVatService;
|
||||
import it.integry.ems.rules.businessLogic.AccountingBusinessLogic;
|
||||
import it.integry.ems.rules.businessLogic.enums.TipoPartita;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
import it.integry.ems_model.base.EntityBase;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.db.ResultSetMapper;
|
||||
import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.exception.EntityException;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -58,7 +56,7 @@ public class ContabilService {
|
||||
@Autowired
|
||||
private EntityProcessor entityProcessor;
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
private void updateDataExport(Date dataDist, Integer rifDist) throws Exception {
|
||||
VtbDist vtbDist = new VtbDist()
|
||||
@@ -154,7 +152,7 @@ public class ContabilService {
|
||||
if (address.value != null) {
|
||||
IndirizzoDTO indirizzoDTO = null;
|
||||
try {
|
||||
indirizzoDTO = mapService.geocode(address.value);
|
||||
indirizzoDTO = geocodingService.geocode(address.value);
|
||||
} catch (Exception e) {
|
||||
logger.error("checkVat", e);
|
||||
}
|
||||
|
||||
@@ -66,9 +66,8 @@ import it.integry.ems.response.EsitoType;
|
||||
import it.integry.ems.response.FileItem;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.entity.VtbDist;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
@@ -109,7 +108,7 @@ public class SEPAService {
|
||||
@Autowired
|
||||
private EntityProcessor entityProcessor;
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
public ServiceRestResponse getSepaXml(Date dataDist, Integer rifDist) throws Exception {
|
||||
ServiceRestResponse resp = new ServiceRestResponse();
|
||||
|
||||
@@ -9,7 +9,7 @@ import it.integry.ems.rules.completing.QueryRules;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.MailService;
|
||||
import it.integry.ems.service.MailTemplateService;
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.service.dto.GenericComunicationMailTemplateDataDTO;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
@@ -59,7 +59,7 @@ public class OrdiniImportService {
|
||||
@Autowired
|
||||
private MailService mailService;
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
|
||||
public EntityBase importOrdineDialogo(DialogoJsonDTO dialogoJsonDTO, String type, String format) throws Exception {
|
||||
|
||||
@@ -6,16 +6,16 @@ import it.integry.ems._context.ApplicationContextProvider;
|
||||
import it.integry.ems.production.agribook.model.*;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.utility.UtilityFile;
|
||||
import it.integry.ems.utility.service.UtilityService;
|
||||
import it.integry.ems_model.entity.MtbDepo;
|
||||
import it.integry.ems_model.entity.MtbDepoPosizioni;
|
||||
import it.integry.ems_model.entity.MtbPartitaMag;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -36,7 +36,6 @@ public class AgribookOrderController {
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
|
||||
@Autowired
|
||||
private AgribookOrderService agribookOrderService;
|
||||
|
||||
@@ -173,7 +172,7 @@ public class AgribookOrderController {
|
||||
|
||||
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
|
||||
EntityProcessor entityProcessor = ApplicationContextProvider.getApplicationContext().getBean(EntityProcessor.class);
|
||||
UtilityService utilityService = ContextLoader.getCurrentWebApplicationContext().getBean(UtilityService.class);
|
||||
GeocodingService geocodingService = ContextLoader.getCurrentWebApplicationContext().getBean(GeocodingService.class);
|
||||
|
||||
List<MtbDepoPosizioni> mtbDepoPosizioni =
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), "SELECT * FROM mtb_depo_posizioni", MtbDepoPosizioni.class);
|
||||
@@ -195,8 +194,8 @@ public class AgribookOrderController {
|
||||
BigDecimal lat = x.getValue().get(0).getLat();
|
||||
BigDecimal lng = x.getValue().get(0).getLng();
|
||||
|
||||
// //Creazione posizione con coords
|
||||
IndirizzoDTO indirizzoDTO = utilityService.getPositionFromCoords(lat, lng);
|
||||
//Creazione posizione con coords
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.getPositionFromCoords(lat, lng);
|
||||
|
||||
|
||||
MtbDepoPosizioni matchPosizione = Stream.of(mtbDepoPosizioni)
|
||||
|
||||
@@ -6,16 +6,16 @@ import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import it.integry.ems.production.agribook.model.*;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.user.UserSession;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
import it.integry.ems.utility.service.UtilityService;
|
||||
import it.integry.ems_model.base.EntityBase;
|
||||
import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import it.integry.ems_model.utility.dto.PaginatedDTO;
|
||||
import org.apache.commons.text.StringSubstitutor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -1322,7 +1322,7 @@ public class AgribookOrderService {
|
||||
throw new Exception("Nessun dato da salvare.");
|
||||
}
|
||||
|
||||
UtilityService utilityService = ContextLoader.getCurrentWebApplicationContext().getBean(UtilityService.class);
|
||||
GeocodingService geocodingService = ContextLoader.getCurrentWebApplicationContext().getBean(GeocodingService.class);
|
||||
|
||||
List<MtbDepoPosizioni> mtbDepoPosizioni =
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), "SELECT * FROM mtb_depo_posizioni", MtbDepoPosizioni.class);
|
||||
@@ -1335,7 +1335,7 @@ public class AgribookOrderService {
|
||||
|
||||
for (AgribookSaveCoordsDTO saveCoordsDTO : agribookSaveCoordsDTOS) {
|
||||
// Creazione posizione con coords
|
||||
IndirizzoDTO indirizzoDTO = utilityService.getPositionFromCoords(saveCoordsDTO.getLat(), saveCoordsDTO.getLng());
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.getPositionFromCoords(saveCoordsDTO.getLat(), saveCoordsDTO.getLng());
|
||||
|
||||
String codMdep = saveCoordsDTO.getCodMdep();
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.annimon.stream.Stream;
|
||||
import it.integry.ems.Import.dto.AnomalieDTO;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.MailService;
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.annotation.SqlField;
|
||||
@@ -19,7 +19,7 @@ import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.UtilityBigDecimal;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -51,7 +51,7 @@ public class AnagImportService {
|
||||
private SetupGest setupGest;
|
||||
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
@Autowired
|
||||
private MailService mailService;
|
||||
@@ -106,7 +106,7 @@ public class AnagImportService {
|
||||
String codVdes = (String) cliente.get("cod_vdes");
|
||||
String indirizzo = (String) cliente.get("indirizzo");
|
||||
|
||||
IndirizzoDTO indirizzoDTO = mapService.geocode(indirizzo);
|
||||
IndirizzoDTO indirizzoDTO = geocodingService.geocode(indirizzo);
|
||||
|
||||
BigDecimal lat = null;
|
||||
BigDecimal lng = null;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package it.integry.ems.utility.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.response.EsitoType;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.response.StatusResponse;
|
||||
import it.integry.ems.service.HttpRestWrapper;
|
||||
import it.integry.ems.status.ServiceChecker;
|
||||
import it.integry.ems.utility.dto.C2EArgDTO;
|
||||
import it.integry.ems.utility.dto.PdfDTO;
|
||||
@@ -30,12 +28,10 @@ import javax.xml.validation.Schema;
|
||||
import javax.xml.validation.SchemaFactory;
|
||||
import javax.xml.validation.Validator;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@Scope(value = "request")
|
||||
|
||||
public class UtilityController {
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
@@ -72,15 +68,6 @@ public class UtilityController {
|
||||
return utilityService.splitPDF(pdfList);
|
||||
}
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_GEOCODE, method = RequestMethod.GET)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse geocode(HttpServletRequest request,
|
||||
@RequestParam("address") String address) throws Exception {
|
||||
|
||||
return utilityService.geocode(address);
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_CMD_2_EXPORT, method = RequestMethod.POST)
|
||||
public @ResponseBody
|
||||
Object cmd2Export(HttpServletRequest request,
|
||||
@@ -134,7 +121,7 @@ public class UtilityController {
|
||||
public @ResponseBody ServiceRestResponse readRemoteFile(@RequestBody JsonNode body) {
|
||||
ServiceRestResponse response;
|
||||
try {
|
||||
if(body.has("url")) {
|
||||
if (body.has("url")) {
|
||||
String url = body.get("url").asText();
|
||||
response = ServiceRestResponse.createPositiveResponse(UtilityService.readRemoteFile(url));
|
||||
} else {
|
||||
@@ -149,48 +136,10 @@ public class UtilityController {
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_MIGRATE_GEOLOCATION_FOR_RLAVR, method = RequestMethod.GET)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse setGeolocationFromCoordinate(HttpServletRequest request, @RequestParam(CommonConstants.PROFILE_DB) String configuration) {
|
||||
ServiceRestResponse setGeolocationFromCoordinate(@RequestParam(CommonConstants.PROFILE_DB) String configuration) throws Exception {
|
||||
|
||||
ServiceRestResponse response = new ServiceRestResponse();
|
||||
try {
|
||||
utilityService.migrateLocalizationForRlavr();
|
||||
return response;
|
||||
//UtilityEntity.toServiceRestResponse(entities).get(0);
|
||||
} catch (Exception e) {
|
||||
logger.error(request.getRequestURI(), e);
|
||||
response = new ServiceRestResponse(EsitoType.KO, configuration, e);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_REVERSE_GEOCODE, method = RequestMethod.GET)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse reverseGeocode(
|
||||
HttpServletRequest request,
|
||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestParam BigDecimal lat,
|
||||
@RequestParam BigDecimal lng
|
||||
) {
|
||||
|
||||
ServiceRestResponse response;
|
||||
try {
|
||||
response = utilityService.reverseGeocode(lat, lng);
|
||||
return response;
|
||||
} catch (Exception e) {
|
||||
logger.error(request.getRequestURI(), e);
|
||||
response = new ServiceRestResponse(EsitoType.KO, configuration, e);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_GET_POSITION_FROM_COORDS, method = RequestMethod.GET)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse getPositionFromCoords(HttpServletRequest request,
|
||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestParam BigDecimal lat,
|
||||
@RequestParam BigDecimal lng) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(utilityService.getPositionFromCoords(lat, lng));
|
||||
utilityService.migrateLocalizationForRlavr();
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
|
||||
@RequestMapping(value = EmsRestConstants.PATH_GET_RICORRENZE, method = RequestMethod.GET)
|
||||
@@ -204,7 +153,7 @@ public class UtilityController {
|
||||
@RequestMapping(value = EmsRestConstants.PATH_EXTRACT_SSCC, method = RequestMethod.GET)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse extractSSCC(HttpServletRequest request,
|
||||
@RequestParam("barcode") String barcode) throws Exception {
|
||||
@RequestParam("barcode") String barcode) throws Exception {
|
||||
return ServiceRestResponse.createPositiveResponse(UtilityBarcode.extractSSCC(barcode));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import it.integry.ems.report.dto.PairsDTO;
|
||||
import it.integry.ems.response.EsitoType;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.MapService;
|
||||
import it.integry.googleCloudApi.service.GeocodingService;
|
||||
import it.integry.ems.service.ReportProcessor;
|
||||
import it.integry.ems.service.exception.EmptyReportException;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
@@ -23,11 +23,9 @@ import it.integry.ems_model.db.ResultSetMapper;
|
||||
import it.integry.ems_model.entity.JtbRLavr;
|
||||
import it.integry.ems_model.entity.JtbRLavt;
|
||||
import it.integry.ems_model.entity.JtbRicorrenze;
|
||||
import it.integry.ems_model.entity.StbPosizioni;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import it.integry.ems_model.utility.dto.IndirizzoDTO;
|
||||
import it.integry.googleCloudApi.dto.IndirizzoDTO;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -42,7 +40,6 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.net.URL;
|
||||
import java.sql.Date;
|
||||
import java.sql.*;
|
||||
@@ -61,14 +58,11 @@ public class UtilityService {
|
||||
private ReportProcessor reportProcessor;
|
||||
|
||||
@Autowired
|
||||
private MapService mapService;
|
||||
private GeocodingService geocodingService;
|
||||
|
||||
@Autowired
|
||||
public EntityProcessor entityProcessor;
|
||||
|
||||
@Autowired
|
||||
private SetupGest setupGest;
|
||||
|
||||
private Logger logger = LogManager.getLogger();
|
||||
|
||||
|
||||
@@ -278,20 +272,6 @@ public class UtilityService {
|
||||
return response;
|
||||
}
|
||||
|
||||
public ServiceRestResponse geocode(String address) throws Exception {
|
||||
ServiceRestResponse response = new ServiceRestResponse(EsitoType.OK);
|
||||
IndirizzoDTO indirizzo = mapService.geocode(address);
|
||||
response.setJsonObject(indirizzo);
|
||||
return response;
|
||||
}
|
||||
|
||||
public ServiceRestResponse reverseGeocode(BigDecimal lat, BigDecimal lng) throws Exception {
|
||||
ServiceRestResponse response = new ServiceRestResponse(EsitoType.OK);
|
||||
IndirizzoDTO indirizzo = mapService.reverseGeocode(lat.doubleValue(), lng.doubleValue());
|
||||
response.setJsonObject(indirizzo);
|
||||
return response;
|
||||
}
|
||||
|
||||
public ServiceRestResponse cmd2Export(C2EArgDTO arguments) throws Exception {
|
||||
ServiceRestResponse response = new ServiceRestResponse(EsitoType.OK);
|
||||
|
||||
@@ -663,7 +643,7 @@ public class UtilityService {
|
||||
try {
|
||||
double lat = rs.getDouble("lat");
|
||||
double lng = rs.getDouble("lng");
|
||||
IndirizzoDTO address = getPositionFromCoords(BigDecimal.valueOf(lat), BigDecimal.valueOf(lng));
|
||||
IndirizzoDTO address = geocodingService.getPositionFromCoords(BigDecimal.valueOf(lat), BigDecimal.valueOf(lng));
|
||||
if (address == null) {
|
||||
logger.debug("nessun indirizzo trovato per le coordinate : [ " + lat + " , " + lng + " ]");
|
||||
continue;
|
||||
@@ -703,71 +683,6 @@ public class UtilityService {
|
||||
entityProcessor.processEntityList(testate, false);
|
||||
}
|
||||
|
||||
private Long getAddressPositionId(IndirizzoDTO address) throws Exception {
|
||||
String query = " SELECT top 1 id from stb_posizioni where " +
|
||||
" ISNULL(citta,'') = ISNULL(" + UtilityDB.valueToString(address.getCitta()) + ",'') AND " +
|
||||
" ISNULL(indirizzo,'') = ISNULL(" + UtilityDB.valueToString(address.getIndirizzo()) + ",'') AND " +
|
||||
" ISNULL(cap,'') = ISNULL(" + UtilityDB.valueToString(address.getCap()) + ",'') AND " +
|
||||
" ISNULL(prov,'') = ISNULL(" + UtilityDB.valueToString(address.getProv()) + ",'') AND " +
|
||||
" ISNULL(nazione,'') = ISNULL(" + UtilityDB.valueToString(address.getNazione()) + ",'')";
|
||||
Connection connection = multiDBTransactionManager.getPrimaryConnection();
|
||||
PreparedStatement ps = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
|
||||
ResultSet rs = ps.executeQuery();
|
||||
if (rs.next()) {
|
||||
return rs.getLong("id");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IndirizzoDTO getPositionFromCoords(BigDecimal lat, BigDecimal lng) throws Exception {
|
||||
double formattedLat = lat.setScale(5, RoundingMode.HALF_EVEN).doubleValue();
|
||||
double formattedLng = lng.setScale(5, RoundingMode.HALF_EVEN).doubleValue();
|
||||
int distance = setupGest.getSetupInteger(multiDBTransactionManager.getPrimaryConnection(), "MAPS", "SETUP", "GEOCODE_PRECISION", 50);
|
||||
|
||||
String nearbyPointQuery = "SELECT * from ( " +
|
||||
" SELECT *,(6371392.896 * acos(cos(radians(" + formattedLat + ")) * cos(radians(lat)) * " +
|
||||
" cos(radians(lng) - radians(" + formattedLng + ")) + " +
|
||||
" sin(radians(" + formattedLat + ")) * sin(radians(lat)))) AS distance " +
|
||||
" FROM stb_posizioni " +
|
||||
" ) distance_points " +
|
||||
"where distance < " + distance +
|
||||
" ORDER BY distance";
|
||||
|
||||
final HashMap<String, Object> nearbyPoints = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), nearbyPointQuery);
|
||||
IndirizzoDTO dto;
|
||||
|
||||
if (nearbyPoints != null) {
|
||||
dto = new IndirizzoDTO();
|
||||
dto.setIdPosizione(UtilityHashMap.getValueIfExists(nearbyPoints, "id"));
|
||||
dto.setCap(UtilityHashMap.getValueIfExists(nearbyPoints, "cap"));
|
||||
dto.setCitta(UtilityHashMap.getValueIfExists(nearbyPoints, "citta"));
|
||||
dto.setLat(UtilityHashMap.getValueIfExists(nearbyPoints, "lat"));
|
||||
dto.setLng(UtilityHashMap.getValueIfExists(nearbyPoints, "lng"));
|
||||
dto.setNazione(UtilityHashMap.getValueIfExists(nearbyPoints, "nazione"));
|
||||
dto.setVia(UtilityHashMap.getValueIfExists(nearbyPoints, "indirizzo"));
|
||||
dto.setProv(UtilityHashMap.getValueIfExists(nearbyPoints, "prov"));
|
||||
dto.setIndirizzo(UtilityHashMap.getValueIfExists(nearbyPoints, "indirizzo"));
|
||||
} else {
|
||||
dto = mapService.reverseGeocode(lat.doubleValue(), lng.doubleValue());
|
||||
|
||||
StbPosizioni stbPosizioni = new StbPosizioni();
|
||||
stbPosizioni.setOperation(OperationType.INSERT);
|
||||
stbPosizioni.setLat(lat);
|
||||
stbPosizioni.setLng(lng);
|
||||
stbPosizioni.setCap(dto.getCap());
|
||||
stbPosizioni.setCitta(dto.getCitta());
|
||||
stbPosizioni.setIndirizzo(dto.getIndirizzo());
|
||||
stbPosizioni.setNazione(dto.getNazione());
|
||||
stbPosizioni.setProv(dto.getProv());
|
||||
entityProcessor.processEntity(stbPosizioni, multiDBTransactionManager);
|
||||
|
||||
dto.setIdPosizione(stbPosizioni.getId());
|
||||
}
|
||||
|
||||
return dto;
|
||||
|
||||
}
|
||||
|
||||
public List<JtbRicorrenze> getRicorrenze(String anno) throws Exception {
|
||||
String sql = "SELECT *, CAST(0 AS BIT) AS isCompleanno\n" +
|
||||
"FROM jtb_ricorrenze\n" +
|
||||
|
||||
Reference in New Issue
Block a user