AdmMono/src/com/rjconsultores/ventaboletos/service/impl/VoucherServiceImpl.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);
}
}