Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adiciona FechaPlp #99

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version=0.0.28-BETA
version=1.0.0-SNAPSHOT
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import br.com.correios.api.postagem.exception.ObjetoPlpFoiPostadoException;
import br.com.correios.api.postagem.exception.ObjetoPlpInexistenteOuJaFoiCanceladoException;
import br.com.correios.api.postagem.exception.ObjetoPlpJaFoiCanceladoException;
import br.com.correios.api.postagem.plp.CorreiosLogToPlpDocumentoConverter;
import br.com.correios.api.postagem.plp.CorreiosLogToDocumentoPlpConverter;
import br.com.correios.api.postagem.plp.DocumentoPlp;
import br.com.correios.api.postagem.plp.NovaPlpBuilder;
import br.com.correios.api.postagem.plp.NovaPlpToCorreiosLogConverter;
import br.com.correios.api.postagem.plp.ObjetoPostado;
import br.com.correios.api.postagem.webservice.CorreiosClienteWebService;
import br.com.correios.api.postagem.xml.XmlPlpParser;
Expand All @@ -26,7 +28,7 @@ public class CorreiosPostagemApi {
private final CorreiosServicoPostagemAPI correiosServicoPostagemAPI;

public CorreiosPostagemApi(CorreiosCredenciais credenciais) {
this.correiosServicoPostagemAPI = new SoapCorreiosServicoPostagemAPI(credenciais, new CorreiosClienteWebService(), new ClienteRetornadoDosCorreiosToClienteConverter(), new XmlPlpParser(), new CorreiosLogToPlpDocumentoConverter());
this.correiosServicoPostagemAPI = new SoapCorreiosServicoPostagemAPI(credenciais, new CorreiosClienteWebService(), new ClienteRetornadoDosCorreiosToClienteConverter(), new XmlPlpParser(), new CorreiosLogToDocumentoPlpConverter(), new NovaPlpToCorreiosLogConverter());
}

/**
Expand Down Expand Up @@ -78,4 +80,10 @@ public void cancelaObjetoDaPlp(Long plpId, String numeroEtiqueta) throws ObjetoP
}
}

/**
* Cria uma nova PLP atraves dos dados do pacote, destinatario e remetente (metodo fechaPLP do WSDL do Correios)
*/
public NovaPlpBuilder novaPlp() {
return new NovaPlpBuilder(correiosServicoPostagemAPI);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import br.com.correios.api.postagem.cliente.ClienteEmpresa;
import br.com.correios.api.postagem.cliente.ContratoEmpresa;
import br.com.correios.api.postagem.plp.DocumentoPlp;
import br.com.correios.api.postagem.plp.NovaPlp;
import br.com.correios.api.postagem.plp.Plp;

public interface CorreiosServicoPostagemAPI {

Expand All @@ -15,4 +17,6 @@ public interface CorreiosServicoPostagemAPI {
Optional<DocumentoPlp> buscaDocumentoPlp(Long plpId, String etiqueta);

boolean cancelaObjetoDaPlp(Long plpId, String numeroEtiqueta);

Plp fechaPlp(String cartaoDePostagem, Long codigoPlpCliente, NovaPlp novaPlp);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,23 @@

import static java.lang.String.format;

import java.util.LinkedList;
import java.util.List;

import com.google.common.base.Optional;

import br.com.correios.api.converter.Converter;
import br.com.correios.api.exception.CorreiosServicoSoapException;
import br.com.correios.api.postagem.cliente.ClienteEmpresa;
import br.com.correios.api.postagem.cliente.ClienteRetornadoDosCorreiosToClienteConverter;
import br.com.correios.api.postagem.cliente.ContratoEmpresa;
import br.com.correios.api.postagem.exception.CorreiosPostagemAutenticacaoException;
import br.com.correios.api.postagem.plp.CorreiosLogToDocumentoPlpConverter;
import br.com.correios.api.postagem.plp.DocumentoPlp;
import br.com.correios.api.postagem.plp.NovaPlp;
import br.com.correios.api.postagem.plp.NovaPlpToCorreiosLogConverter;
import br.com.correios.api.postagem.plp.ObjetoPlp;
import br.com.correios.api.postagem.plp.Plp;
import br.com.correios.api.postagem.plp.PlpNaoFechadaException;
import br.com.correios.api.postagem.webservice.CorreiosClienteApi;
import br.com.correios.api.postagem.xml.Correioslog;
import br.com.correios.api.postagem.xml.XmlPlpParser;
Expand All @@ -23,32 +32,31 @@ class SoapCorreiosServicoPostagemAPI implements CorreiosServicoPostagemAPI {

private final CorreiosClienteApi clienteApi;
private final CorreiosCredenciais credenciais;
private final Converter<ClienteERP, ClienteEmpresa> clienteEmpresaConverter;
private final ClienteRetornadoDosCorreiosToClienteConverter clienteEmpresaConverter;
private final XmlPlpParser xmlPlpParser;
private final Converter<Correioslog, Optional<DocumentoPlp>> documentoPlpConverter;
private final CorreiosLogToDocumentoPlpConverter documentoPlpConverter;
private final NovaPlpToCorreiosLogConverter correiosPlpConverter;

SoapCorreiosServicoPostagemAPI(CorreiosCredenciais credenciais,
CorreiosClienteApi clienteApi,
Converter<ClienteERP, ClienteEmpresa> clienteEmpresaConverter,
XmlPlpParser xmlPlpParser,
Converter<Correioslog, Optional<DocumentoPlp>> documentoPlpConverter) {
SoapCorreiosServicoPostagemAPI(CorreiosCredenciais credenciais, CorreiosClienteApi clienteApi,
ClienteRetornadoDosCorreiosToClienteConverter clienteEmpresaConverter, XmlPlpParser xmlPlpParser,
CorreiosLogToDocumentoPlpConverter documentoPlpConverter,
NovaPlpToCorreiosLogConverter correiosPlpConverter) {

this.credenciais = credenciais;
this.clienteApi = clienteApi;
this.clienteEmpresaConverter = clienteEmpresaConverter;
this.xmlPlpParser = xmlPlpParser;
this.documentoPlpConverter = documentoPlpConverter;
this.correiosPlpConverter = correiosPlpConverter;
}

@Override
public Optional<ClienteEmpresa> buscaCliente(ContratoEmpresa contratoEmpresa) {
try {
ClienteERP clienteRetornadoDosCorreios = clienteApi.getCorreiosWebService().buscaCliente(contratoEmpresa.getContrato(), contratoEmpresa.getCartaoDePostagem(), credenciais.getUsuario(), credenciais.getSenha());

return Optional.fromNullable(clienteRetornadoDosCorreios)
.transform(clienteEmpresaConverter::convert)
.transform(Optional::of)
.or(Optional.<ClienteEmpresa>absent());
return Optional.fromNullable(clienteRetornadoDosCorreios).transform(clienteEmpresaConverter::convert)
.transform(Optional::of).or(Optional.<ClienteEmpresa>absent());

} catch (AutenticacaoException e) {
throw new CorreiosPostagemAutenticacaoException(format("Ocorreu um erro ao se autenticar nos correios com a seguinte credencial: %s", credenciais));
Expand All @@ -62,41 +70,27 @@ public Optional<DocumentoPlp> buscaDocumentoPlp(Long plpId) {
try {
String xmlPlp = clienteApi.getCorreiosWebService().solicitaXmlPlp(plpId, credenciais.getUsuario(), credenciais.getSenha());

boolean xmlPlpDosCorreiosEstaValido = xmlPlp != null && !xmlPlp.isEmpty();
return getDocumentoPlpValidadoAPartirDo(xmlPlp);

if (xmlPlpDosCorreiosEstaValido) {
return xmlPlpParser.convert(xmlPlp)
.transform(documentoPlpConverter::convert)
.or(Optional.<DocumentoPlp>absent());
}
} catch (AutenticacaoException e) {
throw new CorreiosPostagemAutenticacaoException(format("Ocorreu um erro ao se autenticar nos correios com a seguinte credencial: %s", credenciais));
} catch (SigepClienteException e) {
throw new CorreiosServicoSoapException(format("Ocorreu um erro ao chamar o servico com o PLP de id %d", plpId), e);
}

return Optional.absent();
}

@Override
public Optional<DocumentoPlp> buscaDocumentoPlp(Long plpId, String etiqueta) {
try {
String xmlPlp = clienteApi.getCorreiosWebService().solicitaPLP(plpId, etiqueta, credenciais.getUsuario(), credenciais.getSenha());

boolean xmlPlpDosCorreiosEstaValido = xmlPlp != null && !xmlPlp.isEmpty();
return getDocumentoPlpValidadoAPartirDo(xmlPlp);

if (xmlPlpDosCorreiosEstaValido) {
return xmlPlpParser.convert(xmlPlp)
.transform(documentoPlpConverter::convert)
.or(Optional.<DocumentoPlp>absent());
}
} catch (AutenticacaoException e) {
throw new CorreiosPostagemAutenticacaoException(format("Ocorreu um erro ao se autenticar nos correios com a seguinte credencial: %s", credenciais));
} catch (SigepClienteException e) {
throw new CorreiosServicoSoapException(format("Ocorreu um erro ao chamar o servico com o PLP de id %d", plpId), e);
}

return Optional.absent();
}

@Override
Expand All @@ -110,4 +104,40 @@ public boolean cancelaObjetoDaPlp(Long plpId, String numeroEtiqueta) {
}
}

private Optional<DocumentoPlp> getDocumentoPlpValidadoAPartirDo(String xmlPlp) {
boolean xmlPlpDosCorreiosEstaValido = xmlPlp != null && !xmlPlp.isEmpty();

if (xmlPlpDosCorreiosEstaValido) {
Optional<Correioslog> correiosLog = xmlPlpParser.getObjectFrom(xmlPlp);

if (correiosLog.isPresent() && correiosLog.get().getPlp() != null) {
return Optional.of(documentoPlpConverter.convert(correiosLog.get()));
}
}

return Optional.absent();
}

@Override
public Plp fechaPlp(String cartaoDePostagem, Long codigoPlpCliente, NovaPlp novaPlp) {
try {
Correioslog correiosLog = correiosPlpConverter.convert(novaPlp);

List<String> etiquetasSemDigitoVerificador = new LinkedList<>();

for (ObjetoPlp objetoPlp : novaPlp.getObjetosPlp()) {
etiquetasSemDigitoVerificador.add(objetoPlp.getNumeroDaEtiquetaSemDigitoVerificador());
}

String xmlFrom = xmlPlpParser.getXmlFrom(correiosLog);

Long plpId = clienteApi.getCorreiosWebService()
.fechaPlpVariosServicos(xmlFrom, codigoPlpCliente, cartaoDePostagem, etiquetasSemDigitoVerificador, credenciais.getUsuario(), credenciais.getSenha());

return new Plp(plpId);
} catch (Exception e) {
throw new PlpNaoFechadaException(e);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,12 @@ public class DestinatarioDoObjeto {
*
* Somente o Complemento não é obrigatório
*/
private EnderecoDoDestinatario enderedo;
private EnderecoDoDestinatario endereco;

public DestinatarioDoObjeto(String nome, DadosDeContatoDoDestinatario dadosDeContato,
EnderecoDoDestinatario enderedo) {
public DestinatarioDoObjeto(String nome, DadosDeContatoDoDestinatario dadosDeContato, EnderecoDoDestinatario endereco) {
this.nome = nome;
this.dadosDeContato = dadosDeContato;
this.enderedo = enderedo;
this.endereco = endereco;
}

public String getNome() {
Expand All @@ -40,8 +39,8 @@ public DadosDeContatoDoDestinatario getDadosDeContato() {
return dadosDeContato;
}

public EnderecoDoDestinatario getEnderedo() {
return enderedo;
public EnderecoDoDestinatario getEndereco() {
return endereco;
}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package br.com.correios.api.postagem.exception;

public class PlpException extends RuntimeException {
public class ParseIncorretoNoXmlPlpException extends RuntimeException {

private static final long serialVersionUID = 4238354294423806208L;

public PlpException(String message, Exception e) {
public ParseIncorretoNoXmlPlpException(String message, Exception e) {
super(message, e);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import java.util.ArrayList;
import java.util.List;

import com.google.common.base.Optional;

import br.com.correios.api.converter.Converter;
import br.com.correios.api.postagem.remetente.RemetenteDaPostagem;
import br.com.correios.api.postagem.remetente.RemetenteDosCorreiosToRemetenteConverter;
Expand All @@ -13,14 +11,12 @@
import br.com.correios.api.postagem.xml.ObjetoPostal;
import br.com.correios.api.postagem.xml.Remetente;

public class CorreiosLogToPlpDocumentoConverter implements Converter<Correioslog, Optional<DocumentoPlp>> {
public class CorreiosLogToDocumentoPlpConverter implements Converter<Correioslog, DocumentoPlp> {

@Override
public Optional<DocumentoPlp> convert(Correioslog correioslog) {
public DocumentoPlp convert(Correioslog correioslog) {
DadosPlp plpDosCorreios = correioslog.getPlp();
if (plpDosCorreios == null) {
return Optional.absent();
}

InformacoesPlp plp = new PlpDosCorreiosToPlpConverter().convert(plpDosCorreios);

Remetente remetenteDosCorreios = correioslog.getRemetente();
Expand All @@ -36,9 +32,7 @@ public Optional<DocumentoPlp> convert(Correioslog correioslog) {
listaDeObjetosPostados.add(objetoPostado);
}

DocumentoPlp documentoPlp = new DocumentoPlp(correioslog.getTipoArquivo(), correioslog.getVersaoArquivo(), plp, remetente, correioslog.getFormaPagamento(), listaDeObjetosPostados);

return Optional.of(documentoPlp);
return new DocumentoPlp(correioslog.getTipoArquivo(), correioslog.getVersaoArquivo(), plp, remetente, correioslog.getFormaPagamento(), listaDeObjetosPostados);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package br.com.correios.api.postagem.plp;

public class DestinatarioDoObjetoPlp {

private final String nome;
private final Endereco endereco;

DestinatarioDoObjetoPlp(String nome, Endereco endereco) {
this.nome = nome;
this.endereco = endereco;
}

public String getNome() {
return nome;
}

public Endereco getEndereco() {
return endereco;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package br.com.correios.api.postagem.plp;

public class DestinatarioDoObjetoPlpBuilder {

private String nome;
private Endereco endereco;

public DestinatarioDoObjetoPlpComNomeBuilder comNome(String nomeDoDestinatario) {
this.nome = nomeDoDestinatario;
return new DestinatarioDoObjetoPlpComNomeBuilder(this);
}

public class DestinatarioDoObjetoPlpComNomeBuilder {

private DestinatarioDoObjetoPlpBuilder builder;

public DestinatarioDoObjetoPlpComNomeBuilder(DestinatarioDoObjetoPlpBuilder builder) {
this.builder = builder;
}

public DestinatarioDoObjetoPlpComEnderecoBuilder comEndereco(Endereco enderecoDoDestinatario) {
builder.endereco = enderecoDoDestinatario;
return new DestinatarioDoObjetoPlpComEnderecoBuilder(builder);
}

}

public class DestinatarioDoObjetoPlpComEnderecoBuilder {

private DestinatarioDoObjetoPlpBuilder builder;

public DestinatarioDoObjetoPlpComEnderecoBuilder(DestinatarioDoObjetoPlpBuilder builder) {
this.builder = builder;
}

public DestinatarioDoObjetoPlp build() {
return new DestinatarioDoObjetoPlp(builder.nome, builder.endereco);
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package br.com.correios.api.postagem.plp;

import java.math.BigDecimal;

import br.com.correios.api.postagem.dimensao.DimensoesDoObjeto.TipoDoObjetoSendoEnviado;

public class DimensoesDoObjetoPlp {

private final TipoDoObjetoSendoEnviado tipoDoObjetoSendoEnviado;
private final BigDecimal altura;
private final BigDecimal comprimento;
private final BigDecimal largura;
private final BigDecimal diametro;

DimensoesDoObjetoPlp(TipoDoObjetoSendoEnviado tipoDoObjetoSendoEnviado, BigDecimal altura, BigDecimal comprimento, BigDecimal largura, BigDecimal diametro) {
this.tipoDoObjetoSendoEnviado = tipoDoObjetoSendoEnviado;
this.altura = altura;
this.comprimento = comprimento;
this.largura = largura;
this.diametro = diametro;
}

public BigDecimal getAltura() {
return altura;
}

public BigDecimal getComprimento() {
return comprimento;
}

public BigDecimal getLargura() {
return largura;
}

public BigDecimal getDiametro() {
return diametro;
}

public TipoDoObjetoSendoEnviado getTipoDoObjetoSendoEnviado() {
return tipoDoObjetoSendoEnviado;
}

}
Loading