312 lines
9.4 KiB
Java
312 lines
9.4 KiB
Java
package com.rjconsultores.ventaboletos.service.impl;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InputStreamReader;
|
|
import java.math.BigDecimal;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.text.ParseException;
|
|
import java.util.ArrayList;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.zkoss.lang.Strings;
|
|
import org.zkoss.util.resource.Labels;
|
|
|
|
import com.rjconsultores.ventaboletos.dao.TransportadoraDAO;
|
|
import com.rjconsultores.ventaboletos.dao.VoucherDAO;
|
|
import com.rjconsultores.ventaboletos.entidad.ContratoCorporativo;
|
|
import com.rjconsultores.ventaboletos.entidad.Parada;
|
|
import com.rjconsultores.ventaboletos.entidad.Transportadora;
|
|
import com.rjconsultores.ventaboletos.entidad.Voucher;
|
|
import com.rjconsultores.ventaboletos.enums.SituacaoVoucher;
|
|
import com.rjconsultores.ventaboletos.service.VoucherService;
|
|
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
|
|
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
|
import com.rjconsultores.ventaboletos.vo.configuracioneccomerciales.VoucherVO;
|
|
|
|
@Service("voucherService")
|
|
public class VoucherServiceImpl implements VoucherService {
|
|
|
|
@Autowired
|
|
private VoucherDAO voucherDAO;
|
|
|
|
@Autowired
|
|
private TransportadoraDAO transportadoraDAO;
|
|
|
|
public List<Voucher> obtenerTodos() {
|
|
return voucherDAO.obtenerTodos();
|
|
}
|
|
|
|
public Voucher obtenerID(Long id) {
|
|
return voucherDAO.obtenerID(id);
|
|
}
|
|
|
|
@Transactional
|
|
public Voucher suscribir(Voucher entidad) {
|
|
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
|
entidad.setFecModif(Calendar.getInstance().getTime());
|
|
entidad.setActivo(Boolean.TRUE);
|
|
|
|
return voucherDAO.suscribir(entidad);
|
|
}
|
|
|
|
@Transactional
|
|
public Voucher actualizacion(Voucher entidad) {
|
|
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
|
entidad.setFecModif(Calendar.getInstance().getTime());
|
|
return voucherDAO.actualizacion(entidad);
|
|
}
|
|
|
|
@Transactional
|
|
public void borrar(Voucher entidad) {
|
|
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
|
entidad.setFecModif(Calendar.getInstance().getTime());
|
|
entidad.setActivo(Boolean.FALSE);
|
|
|
|
voucherDAO.actualizacion(entidad);
|
|
}
|
|
|
|
@Override
|
|
public List<Voucher> buscarConsulta(Long voucherId,
|
|
String numContrato,
|
|
String nit,
|
|
String nomeTransportadora,
|
|
Date dataInicial,
|
|
Date dataFinal,
|
|
Integer origemId,
|
|
Integer destinoId) {
|
|
return voucherDAO.buscarConsulta(voucherId,
|
|
numContrato,
|
|
nit,
|
|
nomeTransportadora,
|
|
dataInicial,
|
|
dataFinal,
|
|
origemId,
|
|
destinoId);
|
|
}
|
|
|
|
@Override
|
|
public List<Voucher> buscarListaVoucher(Long numInicial,
|
|
Long numFinal,
|
|
String numContrato,
|
|
Long transportadora,
|
|
Long grupoContratoId,
|
|
Integer status,
|
|
Integer origem,
|
|
Integer destino) {
|
|
return voucherDAO.buscarListaVoucher(numInicial,
|
|
numFinal,
|
|
numContrato,
|
|
transportadora,
|
|
grupoContratoId,
|
|
status,
|
|
origem,
|
|
destino);
|
|
}
|
|
|
|
@Override
|
|
@Transactional
|
|
public List<VoucherVO> legalizar(Long numInicial,
|
|
Long numFinal,
|
|
String numContrato,
|
|
Transportadora transportadora,
|
|
BigDecimal valor,
|
|
Parada origem,
|
|
Parada destino) {
|
|
List<Voucher> dados = voucherDAO.buscarListaVoucher(numInicial,
|
|
numFinal,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null);
|
|
|
|
return efetuarLegalizacao(numContrato, transportadora, valor, origem, destino, dados);
|
|
}
|
|
|
|
private List<VoucherVO> efetuarLegalizacao(String numContrato,
|
|
Transportadora transportadora,
|
|
BigDecimal valor,
|
|
Parada origem,
|
|
Parada destino,
|
|
List<Voucher> dados) {
|
|
|
|
List<VoucherVO> retorno = new ArrayList<VoucherVO>();
|
|
for (Voucher vou : dados) {
|
|
|
|
if( validarLegalizacao(numContrato, origem, destino, retorno, vou) ) {
|
|
retorno.add(legalizar(transportadora, valor, vou));
|
|
}
|
|
}
|
|
|
|
return retorno;
|
|
}
|
|
|
|
private boolean validarLegalizacao(String numContrato,
|
|
Parada origem,
|
|
Parada destino,
|
|
List<VoucherVO> retorno,
|
|
Voucher vou) {
|
|
VoucherVO vo;
|
|
if( StringUtils.isNotEmpty(numContrato) && !vou.getContrato().getNumContrato().equals(numContrato)) {
|
|
vo = VoucherVO.converteVoucher(vou);
|
|
vo.setMensagem(Labels.getLabel("legalizacaoMassivaController.MSG.contratoDiferente"));
|
|
retorno.add(vo);
|
|
return false;
|
|
}
|
|
|
|
if( !vou.getStatus().equals(SituacaoVoucher.EMITIDO.getValor())) {
|
|
vo = VoucherVO.converteVoucher(vou);
|
|
vo.setMensagem(Labels.getLabel("legalizacaoMassivaController.MSG.statusDiferente"));
|
|
retorno.add(vo);
|
|
return false;
|
|
}
|
|
|
|
if( origem != null && !vou.getOrigenId().equals(origem.getParadaId())) {
|
|
vo = VoucherVO.converteVoucher(vou);
|
|
vo.setMensagem(Labels.getLabel("legalizacaoMassivaController.MSG.origemDiferente"));
|
|
retorno.add(vo);
|
|
return false;
|
|
}
|
|
|
|
if( destino != null && !vou.getDestinoId().equals(destino.getParadaId())) {
|
|
vo = VoucherVO.converteVoucher(vou);
|
|
vo.setMensagem(Labels.getLabel("legalizacaoMassivaController.MSG.destinoDiferente"));
|
|
retorno.add(vo);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private VoucherVO legalizar(Transportadora transportadora, BigDecimal valor, Voucher vou) {
|
|
VoucherVO vo;
|
|
|
|
try {
|
|
vou.setValorLegalizado(valor);
|
|
vou.setTransportadora(transportadora);
|
|
vou.setStatus(SituacaoVoucher.LEGALIZADO.getValor());
|
|
vou.setDataLegaliza(Calendar.getInstance().getTime());
|
|
|
|
vou = voucherDAO.actualizacion(vou);
|
|
vo = VoucherVO.converteVoucher(vou);
|
|
vo.setMensagem(Labels.getLabel("label.sucesso"));
|
|
}catch (Exception e) {
|
|
vo = VoucherVO.converteVoucher(vou);
|
|
vo.setMensagem(e.getMessage());
|
|
}
|
|
|
|
return vo;
|
|
}
|
|
|
|
@Override
|
|
@Transactional
|
|
public List<Voucher> faturar(List<Voucher> lista, Long numFatura, Date datCorte) {
|
|
for (Voucher vou : lista) {
|
|
if( Strings.isBlank(vou.getNumFatura()) ) {
|
|
if(numFatura != null) {
|
|
vou.setNumFatura(numFatura.toString());
|
|
}else {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if( vou.getDataCorte() == null ) {
|
|
if(datCorte != null) {
|
|
vou.setDataCorte(datCorte);
|
|
}else {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
vou.setStatus(SituacaoVoucher.FATURADO.getValor());
|
|
vou.setDataFatura(Calendar.getInstance().getTime());
|
|
voucherDAO.actualizacion(vou);
|
|
}
|
|
|
|
return lista;
|
|
}
|
|
|
|
@Override
|
|
@Transactional
|
|
public List<VoucherVO> lerArquivo(String stream) throws Exception{
|
|
List<VoucherVO> retorno = new ArrayList<VoucherVO>();
|
|
|
|
List<VoucherVO> arquivosEnviados = processarArquivoEnviado(stream);
|
|
|
|
for (VoucherVO vo : arquivosEnviados) {
|
|
if( StringUtils.isNotEmpty(vo.getMensagem()) ) {
|
|
retorno.add(vo);
|
|
continue;
|
|
}
|
|
|
|
Voucher voucher = voucherDAO.obtenerID(vo.getVoucherId());
|
|
|
|
if ( !validarLegalizacao(null, null, null, retorno, voucher)) {
|
|
continue;
|
|
}
|
|
|
|
Transportadora transportadora = transportadoraDAO.obtenerID(vo.getTransportadora().getTransportadoraId());
|
|
|
|
retorno.add(legalizar(transportadora, vo.getValorLegalizado(), voucher));
|
|
}
|
|
|
|
return retorno;
|
|
}
|
|
|
|
private List<VoucherVO> processarArquivoEnviado(String stream) throws IOException, ParseException {
|
|
String linha = null;
|
|
List<VoucherVO> arquivo = new ArrayList<VoucherVO>();
|
|
|
|
InputStream inputStream = converterInputStream(stream);
|
|
|
|
try( BufferedReader leitor = new BufferedReader(new InputStreamReader(inputStream))){
|
|
|
|
while ((linha = leitor.readLine()) != null) {
|
|
if( linha.isEmpty() || linha.startsWith("ID;")) {
|
|
continue;
|
|
}
|
|
|
|
VoucherVO voucher = new VoucherVO();
|
|
String[] split = linha.split(";");
|
|
voucher.setVoucherId( Long.valueOf(split[0]) );
|
|
voucher.setContrato( new ContratoCorporativo(split[1]) );
|
|
voucher.setDataValidade( DateUtil.getDateFromString(split[2], DateUtil.ddMMaaaa));
|
|
voucher.setStatus(SituacaoVoucher.EMITIDO.getValor());
|
|
voucher.setDescOrigem(split[3]);
|
|
voucher.setDescDestino(split[4]);
|
|
voucher.setValorLicitado( new BigDecimal(split[5].replace(',', '.')) );
|
|
|
|
if( split[6].equals("INFORMAR")) {
|
|
voucher.setMensagem(Labels.getLabel("legalizacaoMassivaController.MSG.faltaValor"));
|
|
}else {
|
|
voucher.setValorLegalizado( new BigDecimal(split[6].replace(',', '.')) );
|
|
}
|
|
|
|
if( split[7].equals("INFORMAR")) {
|
|
voucher.setMensagem(Labels.getLabel("legalizacaoMassivaController.MSG.faltaTransportadora"));
|
|
}else {
|
|
voucher.setTransportadora( new Transportadora( Long.valueOf( split[7])) );
|
|
}
|
|
arquivo.add(voucher);
|
|
}
|
|
}
|
|
|
|
return arquivo;
|
|
}
|
|
|
|
private InputStream converterInputStream(String in){
|
|
byte[] buff = in.getBytes(StandardCharsets.UTF_8);
|
|
return new ByteArrayInputStream(buff);
|
|
}
|
|
}
|