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); } }
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>); }