Example #1
0
        public void Executar(int loteId)
        {
            var paginas            = this.unitOfWork.Obter(() => this.paginaRepositorio.ObterPdfsDoLote(loteId));
            var paginasNaoEnviadas = paginas.Where(x => x.CloudOk == false);

            Log.Application.InfoFormat("Lote {0} tem {1} paginas para envio", loteId, paginasNaoEnviadas.Count());

            var inicioLote       = DateTime.Now;
            var arquivosBaixados = new Dictionary <int, string>();

            Parallel.ForEach(paginasNaoEnviadas, Paralelizar.Em(Aplicacao.Nucleos), pagina =>
            {
                var arquivoLocal = string.Empty;

                try
                {
                    arquivoLocal = this.unitOfWork.Obter(() => this.baixaArquivoFileTransferServico
                                                         .BaixarArquivo(pagina.Id, pagina.TipoArquivo, dataCenterId: pagina.DataCenter));
                }
                catch (FileNotFoundException)
                {
                    arquivoLocal = @"c:\naoexiste.ddd";
                }
                finally
                {
                    arquivosBaixados.Add(pagina.Id, arquivoLocal);
                }
            });

            int i = 0;

            foreach (var pagina in paginasNaoEnviadas)
            {
                this.unitOfWork.Transacionar(() =>
                {
                    i++;
                    var inicio = DateTime.Now;

                    var arquivoLocal = arquivosBaixados[pagina.Id];

                    if (this.fileSystem.Exists(arquivoLocal) == false)
                    {
                        Log.Application.Error("Não foi possível baixar pagina " + pagina.Id + " do filetransfer. Não existe no fileTransfer " + pagina.DataCenter);

                        this.gravaLogDaPaginaServico.Executar(
                            LogPagina.AcaoPostadoNoCloud,
                            pagina.Id,
                            pagina.Documento.Id,
                            "Não Postado no Cloud. Não existia pdf no filetransfer");

                        this.paginaRepositorio.MarcarComoEnviadaCloud(pagina.Id);

                        var fim   = DateTime.Now;
                        var tempo = fim.Subtract(inicio);

                        Log.Application.InfoFormat("Processamento desta pagina {0} com erro em {1} ms", pagina.Id, tempo.TotalMilliseconds);
                    }

                    if (this.fileSystem.Exists(arquivoLocal))
                    {
                        Log.Application.InfoFormat("Enviando Pagina {0}", pagina.Id);

                        this.postaArquivoAmazonS3.PostarPagina(pagina, arquivoLocal);
                        this.paginaRepositorio.MarcarComoEnviadaCloud(pagina.Id);

                        var fim   = DateTime.Now;
                        var tempo = fim.Subtract(inicio);

                        Log.Application.InfoFormat("Pagina {0} enviada em {1} ms", pagina.Id, tempo.TotalMilliseconds);

                        this.gravaLogDaPaginaServico.Executar(
                            LogPagina.AcaoPostadoNoCloud,
                            pagina.Id,
                            pagina.Documento.Id,
                            "Pdf Postado no Cloud. Levou " + tempo.TotalMilliseconds + "ms");

                        Log.Application.DebugFormat("Pagina {0} Enviada", i);
                    }
                });
            }

            var fimLote   = DateTime.Now;
            var tempoLote = fimLote.Subtract(inicioLote);

            Log.Application.InfoFormat("Lote {0} marcado como enviado. Feito em {1}s", loteId, tempoLote.TotalSeconds);
            this.unitOfWork.Transacionar(() => this.loteRepositorio.MarcarComoEnviadoParaCloud(loteId));

            foreach (var arquivosBaixado in arquivosBaixados)
            {
                Log.Application.Info("Apagando do cache . " + arquivosBaixado.Value);
                this.fileSystem.DeleteFile(arquivosBaixado.Value);
            }
        }
Example #2
0
        public void Executar(int loteId)
        {
            var lote = this.unitOfWork.Obter(() => this.loteRepositorio.ObterPorId(loteId));

            if (lote.CloudOk == false)
            {
                ////Apenas pra envitar erros de status e fase
                throw new Exception("Lote " + lote.Id + " ainda não foi enviado para cloud e não poderá enviar os jpgs agora.");
            }

            if (lote.JpegsEnviadosParaCloud)
            {
                ////Apenas pra envitar erros de status e fase
                throw new Exception("Lote " + lote.Id + " já teve seus jpegs enviados.");
            }

            var paginas            = this.unitOfWork.Obter(() => this.paginaRepositorio.ObterJpegsDoLote(loteId));
            var paginasNaoEnviadas = paginas.Where(x => x.CloudOk == false);

            var arquivosBaixados = new Dictionary <int, string>();

            Parallel.ForEach(paginasNaoEnviadas, Paralelizar.Em(Aplicacao.Nucleos), pagina =>
            {
                var arquivoLocal = string.Empty;

                try
                {
                    arquivoLocal = this.unitOfWork.Obter(() => this.baixaArquivoFileTransferServico
                                                         .BaixarArquivo(pagina.Id, pagina.TipoArquivo, dataCenterId: pagina.DataCenter));
                }
                catch (FileNotFoundException)
                {
                    arquivoLocal = @"c:\naoexiste.ddd";
                }
                finally
                {
                    arquivosBaixados.Add(pagina.Id, arquivoLocal);
                }
            });

            foreach (var pagina in paginasNaoEnviadas)
            {
                this.unitOfWork.Transacionar(() =>
                {
                    var inicio       = DateTime.Now;
                    var arquivoLocal = arquivosBaixados[pagina.Id];

                    if (this.fileSystem.Exists(arquivoLocal) == false)
                    {
                        Log.Application.Error("Não foi possível baixar pagina " + pagina.Id + " do filetransfer. Não existe no fileTransfer " + pagina.DataCenter);

                        this.gravaLogDaPaginaServico.Executar(
                            LogPagina.AcaoPostadoNoCloud,
                            pagina.Id,
                            pagina.Documento.Id,
                            "Não Postado no Cloud. Não existia jpeg no filetransfer");

                        this.paginaRepositorio.MarcarComoEnviadaCloud(pagina.Id);

                        var fim   = DateTime.Now;
                        var tempo = fim.Subtract(inicio);

                        Log.Application.InfoFormat("Processamento desta pagina {0} com erro em {1} ms", pagina.Id, tempo.TotalMilliseconds);
                    }

                    if (this.fileSystem.Exists(arquivoLocal))
                    {
                        Log.Application.InfoFormat("Enviando Pagina {0}", pagina.Id);

                        this.postaArquivoAmazonS3.PostarPagina(pagina, arquivoLocal);
                        this.paginaRepositorio.MarcarComoEnviadaCloud(pagina.Id);

                        var fim   = DateTime.Now;
                        var tempo = fim.Subtract(inicio);

                        Log.Application.InfoFormat("Pagina {0} enviada em {1} ms", pagina.Id, tempo.TotalMilliseconds);

                        this.gravaLogDaPaginaServico.Executar(
                            LogPagina.AcaoPostadoNoCloud,
                            pagina.Id,
                            pagina.Documento.Id,
                            "Jpeg Postado no Cloud. Levou " + tempo.TotalMilliseconds + "ms");
                    }
                });
            }

            this.unitOfWork.Transacionar(() => this.loteRepositorio.MarcarComoJpegsEnviadosParaCloud(loteId));

            foreach (var arquivosBaixado in arquivosBaixados)
            {
                Log.Application.Info("Apagando jpeg do cache . " + arquivosBaixado.Value);
                this.fileSystem.DeleteFile(arquivosBaixado.Value);
            }
        }
        public List <ItemParaSeparacao> Executar(IList <ItemParaSeparacao> itensParaSeparacao)
        {
            var paralelismo = Paralelizar.Em(2);

#if DEBUG
            paralelismo = Paralelizar.Em(1);
#endif
            Parallel.For(0, itensParaSeparacao.Count, paralelismo, i =>
            {
                var pagina = itensParaSeparacao[i].Pagina;

                try
                {
                    itensParaSeparacao[i].CarregarBitmap();
                }
                catch (ImagemInvalidaException exception)
                {
                    this.gravaLogDaPaginaServico.ExecutarNovaThread(
                        LogPagina.AcaoPaginaErroSeparador,
                        pagina.Id,
                        pagina.Documento.Id,
                        "Imagem corrompida ou outro problema");

                    throw new ImagemInvalidaException("Imagem corrompida ou outro problema");
                }

                Log.Application.DebugFormat("Processando arquivo #{0}", pagina.Id);

                if (pagina.Id == 137830)
                {
                    var asdf = 1;
                }

                try
                {
                    if (Contexto.SeparadorPorCarimbo)
                    {
                        ////var carimbo = new CarimboSeparador();
                        ////var tempoParaAnalisarCarimbo = MedirTempo.De(() => carimbo = this.localizadorCarimboService.ExecutarPorBitmaps(itensParaSeparacao[i]));
                        ////Log.Application.DebugFormat("Medição TEMPO analise de carimbo  ---- : {0}", tempoParaAnalisarCarimbo.TotalMilliseconds);

                        var carimbo = this.localizadorCarimboService.ExecutarPorBitmaps(itensParaSeparacao[i]);

                        if (carimbo.Localizado)
                        {
                            pagina.Separadora         = true;
                            pagina.AnaliseConteudoOcr = PaginaTipoOcr.TipoSeparadorCarimbo;
                            Log.Application.DebugFormat("Carimbo localizado na pagina #{0}", pagina.Id);
                        }
                    }

                    var imagemEmBranco = false;

                    var tempoParaVerificarBranco = MedirTempo.De(() => imagemEmBranco = this.manipulaImagemServico
                                                                                        .ImagemEmBranco(itensParaSeparacao[i], Contexto.MinWidthPixel, Contexto.MinHeightPixel, Contexto.MinMargemPixel));

                    Log.Application.DebugFormat("Tempo avaliação imagem branca/carimbo separador: {0}ms", tempoParaVerificarBranco.TotalMilliseconds);
                    if (imagemEmBranco)
                    {
                        pagina.EmBranco           = true;
                        pagina.AnaliseConteudoOcr = PaginaTipoOcr.TipoBranco;
                    }
                    else
                    {
                        this.identificarPaginaSeparadora.Executar(itensParaSeparacao, itensParaSeparacao[i]);
                    }
                }
                catch (Exception exception)
                {
                    Log.Application.Error(exception);
                    throw;
                }

                ////dispose final do bitmap
                itensParaSeparacao[i].DescarregarBitmap();
            });

            return(itensParaSeparacao as List <ItemParaSeparacao>);
        }