/** [UC0811] Processar Requisições do Dispositivo Móvel. */ public void atualizarMovimentacao( DataInputStream data, HttpServletResponse response, OutputStream out) throws IOException { InputStreamReader reader = new InputStreamReader(data); BufferedReader buffer = new BufferedReader(reader); try { RetornoAtualizarFaturamentoMovimentoCelularHelper retorno = Fachada.getInstancia() .atualizarFaturamentoMovimentoCelular(buffer, false, false, null, null, buffer); if (retorno.getRelatorioConsistenciaProcessamento() != null) { logger.info("Erro ao atualizar faturamento movimento celular"); response.setContentLength(1); out.write(RESPOSTA_ERRO); out.flush(); } else if (retorno.getMensagemComunicacaoServidorCelular() != null) { logger.info("Validação encontrada. Retornando para o celular."); response.setContentLength(1 + retorno.getMensagemComunicacaoServidorCelular().length()); if (retorno.getIndicadorSucessoAtualizacao()) { out.write(RESPOSTA_OK); } else { out.write(RESPOSTA_ERRO); } out.write(retorno.getMensagemComunicacaoServidorCelular().getBytes()); out.flush(); } else { response.setContentLength(1); out.write(RESPOSTA_OK); out.flush(); logger.info("Fim: atualizar faturamento movimento celular"); } } catch (Exception e) { e.printStackTrace(); logger.error("Erro ao atualizar faturamento movimento celular"); response.setContentLength(1); out.write(RESPOSTA_ERRO); out.flush(); } }
@SuppressWarnings({"unchecked", "resource"}) public void finalizarMovimentacao( DataInputStream data, HttpServletResponse response, OutputStream out, int tipoFinalizacao) throws IOException { Fachada fachada = Fachada.getInstancia(); long imei = data.readLong(); Integer idRota = 0; InputStreamReader reader = new InputStreamReader(data); InputStreamReader readerOriginal = new InputStreamReader(data); BufferedReader buffer = new BufferedReader(reader); BufferedReader bufferOriginal = new BufferedReader(readerOriginal); Integer codRota = null; Integer setorComercial = null; Integer idLocalidade = null; Integer numeroSequenciaArquivo = null; try { String registro0 = buffer.readLine(); int indcFinalizacao = Integer.parseInt(registro0.substring(1, 2)); idLocalidade = Integer.parseInt(registro0.substring(2, 5)); setorComercial = Integer.parseInt(registro0.substring(5, 8)); codRota = Integer.parseInt(registro0.substring(8, 15)); if (registro0.length() == 17) { numeroSequenciaArquivo = Integer.parseInt(registro0.substring(15, 17)); idRota = fachada.obterIdRotaPorSetorComercialELocalidade(codRota, setorComercial, idLocalidade); } else { idRota = Integer.parseInt(registro0.substring(15, 19)); numeroSequenciaArquivo = Integer.parseInt(registro0.substring(19, 21)); } if (idRota == null) { String primeiroRegistro = buffer.readLine(); Integer matricula = Integer.parseInt(primeiroRegistro.substring(1, 10)); FiltroImovel filtroImovel = new FiltroImovel(); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("rotaAlternativa.setorComercial"); filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, matricula)); Collection<Imovel> colImovel = Fachada.getInstancia().pesquisar(filtroImovel, Imovel.class.getName()); Imovel imo = (Imovel) Util.retonarObjetoDeColecao(colImovel); idLocalidade = imo.getLocalidade().getId(); setorComercial = imo.getRotaAlternativa().getSetorComercial().getCodigo(); codRota = imo.getRotaAlternativa().getCodigo().intValue(); idRota = fachada.obterIdRotaPorSetorComercialELocalidade(codRota, setorComercial, idLocalidade); String linha; StringBuffer arquivo = new StringBuffer(); arquivo.append(primeiroRegistro + "\n"); while ((linha = buffer.readLine()) != null) { arquivo.append(linha + "\n"); } InputStream is = new ByteArrayInputStream(arquivo.toString().getBytes()); InputStreamReader readerRetorno = new InputStreamReader(is); buffer = new BufferedReader(readerRetorno); } Integer anoMesFaturamento = fachada.retornaAnoMesFaturamentoGrupoDaRota(idRota); Localidade localidade = new Localidade(idLocalidade); ArquivoTextoRetornoIS arquivoRetorno = new ArquivoTextoRetornoIS(); arquivoRetorno.setAnoMesReferencia(anoMesFaturamento); arquivoRetorno.setCodigoRota(codRota); arquivoRetorno.setCodigoSetorComercial(setorComercial); arquivoRetorno.setLocalidade(localidade); arquivoRetorno.setNomeArquivo(fachada.obterNomeArquivoRetorno(arquivoRetorno).toString()); arquivoRetorno.setTempoRetornoArquivo(new Date()); arquivoRetorno.setTipoFinalizacao(new Short(tipoFinalizacao + "")); arquivoRetorno.setUltimaAlteracao(new Date()); logger.info( "Finalizando arquivo Mobile [Imei=" + imei + ", Localidade: " + localidade.getId() + ", Setor: " + setorComercial + ", Rota: " + codRota + "]"); if (indcFinalizacao == FINALIZAR_LEITURA_ARQUIVO_IMOVEIS_FALTANDO) { buffer = fachada.removerImoveisJaProcessadosBufferImpressaoSimultanea(idRota, buffer); } RetornoAtualizarFaturamentoMovimentoCelularHelper retorno = null; if (buffer != null) { retorno = fachada.atualizarFaturamentoMovimentoCelular( buffer, false, true, idRota, arquivoRetorno, bufferOriginal); } if (retorno != null && (retorno.getRelatorioConsistenciaProcessamento() != null || retorno.getMensagemComunicacaoServidorCelular() != null)) { logger.info( "Erro ao finalizar rota [Imei=" + imei + ", Localidade: " + localidade.getId() + ", Setor: " + setorComercial + ", Rota: " + codRota + "]"); response.setContentLength(1); out.write(RESPOSTA_ERRO); out.flush(); } else { Integer[] idsSituacaoTransmissao = new Integer[1]; idsSituacaoTransmissao[0] = SituacaoTransmissaoLeitura.TRANSMITIDO; if (indcFinalizacao == FINALIZAR_LEITURA || indcFinalizacao == FINALIZAR_LEITURA_ARQUIVO_IMOVEIS_FALTANDO) { Integer diferenca = fachada .pesquisarDiferencaQuantidadeMovimentoContaPrefaturadaArquivoTextoRoteiroEmpresa( idRota, anoMesFaturamento); if (!fachada.isRotaDividida(idRota, anoMesFaturamento)) { if (diferenca != 0) { String msg = "Validação encontrada. Retornando para o celular"; msg += "[Diferença de imoveis: " + diferenca; msg += ", Imei=" + imei + ", Localidade: " + localidade.getId() + ", Setor: " + setorComercial + ", Rota: " + codRota + "]"; logger.info(msg); String mensagem = "mensagem=A quantidade de imóveis enviados não corresponde ao esperado"; response.setContentLength(1 + mensagem.getBytes().length); out.write(RESPOSTA_ERRO); out.write(mensagem.getBytes()); out.flush(); } else { fachada.atualizarArquivoTextoEnviadoPorRota( idRota, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.TRANSMITIDO); } } else { fachada.atualizarArquivoTextoDividido( idRota, anoMesFaturamento, numeroSequenciaArquivo, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.TRANSMITIDO); if (diferenca != 0) { String msg = "Validação encontrada. Retornando para o celular"; msg += "[Diferença de imoveis: " + diferenca; msg += ", Imei=" + imei + ", Localidade: " + localidade + ", Setor: " + setorComercial + ", Rota: " + codRota + "]"; logger.info(msg); String mensagem = "mensagem=A quantidade de imóveis enviados não corresponde ao esperado"; response.setContentLength(1 + mensagem.getBytes().length); out.write(RESPOSTA_ERRO); out.write(mensagem.getBytes()); out.flush(); } else { fachada.atualizarArquivoTextoEnviado( imei, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.TRANSMITIDO); if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente( idRota, anoMesFaturamento, idsSituacaoTransmissao)) { fachada.atualizarArquivoTextoEnviadoPorRota( idRota, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.TRANSMITIDO); } else { idsSituacaoTransmissao = new Integer[2]; idsSituacaoTransmissao[0] = SituacaoTransmissaoLeitura.TRANSMITIDO; idsSituacaoTransmissao[1] = SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO; if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente( idRota, anoMesFaturamento, idsSituacaoTransmissao)) { fachada.atualizarArquivoTextoEnviadoPorRota( idRota, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO); } } } } response.setContentLength(1); out.write(RESPOSTA_OK); out.flush(); logger.info( "Fim: finalizar rota [Localidade: " + localidade.getId() + ", Setor: " + setorComercial + ", Rota: " + codRota + "]"); } else if (indcFinalizacao == FINALIZAR_LEITURA_INCOMPLETA) { if (!fachada.isRotaDividida(idRota, anoMesFaturamento)) { fachada.atualizarArquivoTextoEnviadoPorRota( idRota, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO); } else { fachada.atualizarArquivoTextoEnviado( imei, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO); if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente( idRota, anoMesFaturamento, idsSituacaoTransmissao)) { fachada.atualizarArquivoTextoEnviadoPorRota( idRota, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.TRANSMITIDO); } else { idsSituacaoTransmissao = new Integer[2]; idsSituacaoTransmissao[0] = SituacaoTransmissaoLeitura.TRANSMITIDO; idsSituacaoTransmissao[1] = SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO; if (!fachada.verificarExistenciaArquivosDivididosSituacaoDiferente( idRota, anoMesFaturamento, idsSituacaoTransmissao)) { fachada.atualizarArquivoTextoEnviadoPorRota( idRota, SituacaoTransmissaoLeitura.EM_CAMPO, SituacaoTransmissaoLeitura.FINALIZADO_INCOMPLETO); } } } response.setContentLength(1); out.write(RESPOSTA_OK); out.flush(); logger.info( "Fim: finalizar rota [Localidade: " + localidade.getId() + ", Setor: " + setorComercial + ", Rota: " + codRota); } } } catch (Exception e) { e.printStackTrace(); logger.error( "Erro ao atualizar faturamento movimento celular [Localidade: " + idLocalidade + ", Setor: " + setorComercial + ", Rota: " + codRota); response.setContentLength(1); out.write(RESPOSTA_ERRO); out.flush(); } }