Integração API Revenue Geoloc - bug#AL-5017

master
Wilian Domingues 2024-10-16 15:54:09 -03:00
parent c676f0fb36
commit 544cf7aa3d
7 changed files with 371 additions and 1 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId>
<artifactId>ModelWeb</artifactId>
<version>1.118.1</version>
<version>1.119.0</version>
<distributionManagement>
<repository>

View File

@ -0,0 +1,9 @@
package com.rjconsultores.ventaboletos.dao;
import com.rjconsultores.ventaboletos.entidad.RevenueConfig;
public interface RevenueConfigDAO {
public RevenueConfig obtenerRevenueConfigActivo();
}

View File

@ -0,0 +1,39 @@
package com.rjconsultores.ventaboletos.dao.hibernate;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.RevenueConfigDAO;
import com.rjconsultores.ventaboletos.entidad.RevenueConfig;
@Repository("revenueConfigDAO")
public class RevenueConfigHibernateDAO extends GenericHibernateDAO<RevenueConfig, Integer> implements RevenueConfigDAO {
@Autowired
public RevenueConfigHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
@Override
@SuppressWarnings("unchecked")
public RevenueConfig obtenerRevenueConfigActivo() {
Criteria c = getSession().createCriteria(getPersistentClass());
c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
c.setMaxResults(1);
List<RevenueConfig> list = c.list();
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
}

View File

@ -0,0 +1,175 @@
package com.rjconsultores.ventaboletos.entidad;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@SequenceGenerator(name = "REVENUE_CONFIG_SEQ", sequenceName = "REVENUE_CONFIG_SEQ", allocationSize = 1)
@Table(name = "REVENUE_CONFIG")
public class RevenueConfig implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "REVENUE_CONFIG_SEQ")
@Column(name = "REVENUECONFIG_ID")
private Integer revenueconfigId;
@Column(name = "INDUSACANALVENTA")
private Boolean indusacanalventa;
@Column(name = "ACTIVO")
private Boolean activo;
@Column(name = "FECMODIF")
@Temporal(TemporalType.TIMESTAMP)
private Date fecmodif;
@Column(name = "USUARIO_ID")
private Integer usuarioId;
@Column(name = "TOKEN")
private String token;
@Column(name = "CONNECTOR_ID")
private String connectorId;
@Column(name = "URL_PRICE")
private String urlPrice;
@Column(name = "URL_PRICE_CANALVENDA")
private String urlPriceCanalVenda;
@Column(name = "URL_MARKET")
private String urlMarket;
@Column(name = "URL_SITE")
private String urlSite;
@Column(name = "URL_ALERTA")
private String urlAlerta;
@Column(name = "URL_GEOLOC")
private String urlGeoLoc;
public Integer getRevenueconfigId() {
return revenueconfigId;
}
public void setRevenueconfigId(Integer revenueconfigId) {
this.revenueconfigId = revenueconfigId;
}
public Boolean getIndusacanalventa() {
return indusacanalventa;
}
public void setIndusacanalventa(Boolean indusacanalventa) {
this.indusacanalventa = indusacanalventa;
}
public Boolean getActivo() {
return activo;
}
public void setActivo(Boolean activo) {
this.activo = activo;
}
public Date getFecmodif() {
return fecmodif;
}
public void setFecmodif(Date fecmodif) {
this.fecmodif = fecmodif;
}
public Integer getUsuarioId() {
return usuarioId;
}
public void setUsuarioId(Integer usuarioId) {
this.usuarioId = usuarioId;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getConnectorId() {
return connectorId;
}
public void setConnectorId(String connectorId) {
this.connectorId = connectorId;
}
public String getUrlPrice() {
return urlPrice;
}
public void setUrlPrice(String urlPrice) {
this.urlPrice = urlPrice;
}
public String getUrlPriceCanalVenda() {
return urlPriceCanalVenda;
}
public void setUrlPriceCanalVenda(String urlPriceCanalVenda) {
this.urlPriceCanalVenda = urlPriceCanalVenda;
}
public String getUrlMarket() {
return urlMarket;
}
public void setUrlMarket(String urlMarket) {
this.urlMarket = urlMarket;
}
public String getUrlSite() {
return urlSite;
}
public void setUrlSite(String urlSite) {
this.urlSite = urlSite;
}
public String getUrlAlerta() {
return urlAlerta;
}
public void setUrlAlerta(String urlAlerta) {
this.urlAlerta = urlAlerta;
}
public String getUrlGeoLoc() {
return urlGeoLoc;
}
public void setUrlGeoLoc(String urlGeoLoc) {
this.urlGeoLoc = urlGeoLoc;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}

View File

@ -0,0 +1,13 @@
package com.rjconsultores.ventaboletos.service;
import com.rjconsultores.ventaboletos.entidad.RevenueConfig;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.vo.revenue.RevenueGeoloc;
public interface RevenueConfigService {
public RevenueConfig obtenerRevenueConfigActivo();
public RevenueGeoloc pesquisarGeoloc(String endereco) throws BusinessException;
}

View File

@ -0,0 +1,86 @@
package com.rjconsultores.ventaboletos.service.impl;
import java.lang.reflect.Type;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zkoss.util.resource.Labels;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.rjconsultores.ventaboletos.dao.RevenueConfigDAO;
import com.rjconsultores.ventaboletos.entidad.RevenueConfig;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.RevenueConfigService;
import com.rjconsultores.ventaboletos.vo.revenue.RevenueGeoloc;
@Service("revenueConfigService")
public class RevenueConfigServiceImpl implements RevenueConfigService {
private static Logger log = LogManager.getLogger(RevenueConfigService.class);
@Autowired
private RevenueConfigDAO revenueConfigDAO;
@Override
public RevenueConfig obtenerRevenueConfigActivo() {
return revenueConfigDAO.obtenerRevenueConfigActivo();
}
@Override
public RevenueGeoloc pesquisarGeoloc(String endereco) throws BusinessException {
RevenueGeoloc retorno = null;
try {
RevenueConfig revenueConfig = this.obtenerRevenueConfigActivo();
verificarRevenueConfigGeoloc(revenueConfig);
HttpPost request = new HttpPost(revenueConfig.getUrlGeoLoc());
request.addHeader("token-access", revenueConfig.getToken());
request.addHeader("connector-id", revenueConfig.getConnectorId());
request.addHeader("Content-type", "application/json");
JSONObject payload = new JSONObject();
payload.put("endereco", endereco);
HttpEntity entityPost = new StringEntity(payload.toString(), ContentType.APPLICATION_JSON);
request.setEntity(entityPost);
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() == 200 && response.getEntity() != null) {
Type listType = new TypeToken<List<RevenueGeoloc>>(){}.getType();
String entity = EntityUtils.toString(response.getEntity());
List<RevenueGeoloc> retornos = new Gson().fromJson(entity, listType);
if (!retornos.isEmpty()) {
retorno = retornos.get(0);
}
}
} catch (BusinessException e) {
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BusinessException(e.getMessage());
}
return retorno;
}
private void verificarRevenueConfigGeoloc(RevenueConfig revenueConfig) throws BusinessException {
if (revenueConfig == null || StringUtils.isBlank(revenueConfig.getUrlGeoLoc())) {
throw new BusinessException(Labels.getLabel("editarCatalogoDeParadaController.MSG.RevenueGeolocConfig.value"));
}
}
}

View File

@ -0,0 +1,48 @@
package com.rjconsultores.ventaboletos.vo.revenue;
import java.math.BigDecimal;
public class RevenueGeoloc {
private String enderecoPesquisa;
private String enderecoCompleto;
private BigDecimal latitude;
private BigDecimal longitude;
public String getEnderecoPesquisa() {
return enderecoPesquisa;
}
public void setEnderecoPesquisa(String enderecoPesquisa) {
this.enderecoPesquisa = enderecoPesquisa;
}
public String getEnderecoCompleto() {
return enderecoCompleto;
}
public void setEnderecoCompleto(String enderecoCompleto) {
this.enderecoCompleto = enderecoCompleto;
}
public BigDecimal getLatitude() {
return latitude;
}
public void setLatitude(BigDecimal latitude) {
this.latitude = latitude;
}
public BigDecimal getLongitude() {
return longitude;
}
public void setLongitude(BigDecimal longitude) {
this.longitude = longitude;
}
public boolean isLatitudeAndLongitude() {
return this.latitude != null && this.longitude != null;
}
}