/// <summary> /// Recebe coleção de passagens aprovadas para processamento no ConectSys. /// </summary> /// <param name="passagensAprovadasEdi"></param> /// <returns>PassagensAprovadasEdiResponse</returns> public PassagensAprovadasEdiResponse Execute(List <PassagemAprovadaEDIDto> passagensAprovadasEdi) { var execucaoId = Guid.NewGuid(); var response = new PassagensAprovadasEdiResponse { ExecucaoId = execucaoId }; Log.Info($"ID: {execucaoId} - Início - Execução Passagens Aprovadas Edi."); if (passagensAprovadasEdi != null && passagensAprovadasEdi.Any()) { SalvarAprovadasStagingConectSys(passagensAprovadasEdi, response, execucaoId); } var jsonResponse = JsonConvert.SerializeObject(response); Log.Info($"ID: {execucaoId} - Fim - Execução Passagens Aprovadas Edi. Retorno: {jsonResponse}."); return(response); }
private void SalvarAprovadasStagingConectSys(List <PassagemAprovadaEDIDto> passagensAprovadas, PassagensAprovadasEdiResponse response, Guid execucaoId) { var sw = new Stopwatch(); sw.Start(); try { TransactionContextHelper.ExecuteTransaction((aprovadas) => { Log.Debug($"ID: {execucaoId} Início - Staging Passagens Aprovadas Edi - Conectsys."); using (var datasourceConectSys = AdoDataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSys)) { try { var transacoes = passagensAprovadas.Any(c => c.TransacaoPassagemEDI != null) ? passagensAprovadas.Where(c => c.TransacaoPassagemEDI != null).Select(c => c.TransacaoPassagemEDI) : null; var transacoesStaging = Mapper.Map <List <TransacaoPassagemLoteStaging> >((transacoes ?? new List <TransacaoPassagemEDIDto>())); var transacoesProvisorias = passagensAprovadas.Any(c => c.TransacaoProvisoriaEDI != null) ? passagensAprovadas.Where(c => c.TransacaoProvisoriaEDI != null).Select(c => c.TransacaoProvisoriaEDI) : null; var transacaosProvisoriaStaging = Mapper.Map <IEnumerable <TransacaoProvisoriaEDIDto>, IEnumerable <TransacaoPassagemLoteStaging> >(transacoesProvisorias); if (transacaosProvisoriaStaging != null) { transacoesStaging.AddRange(transacaosProvisoriaStaging); } transacoesStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsertTransacoes(transacoesStaging, "TransacaoPassagemEdiStaging"); var detalheTrfRecusados = passagensAprovadas.Any(c => c.DetalheTRFRecusaEvasao != null) ? passagensAprovadas.Select(c => c.DetalheTRFRecusaEvasao) : null; var detalheTrfRecusadosStaging = Mapper.Map <List <DetalheTRFRecusadoLoteStaging> >((detalheTrfRecusados ?? new List <DetalheTRFRecusadoDto>())); detalheTrfRecusadosStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(detalheTrfRecusadosStaging, "DetalheTRFRecusadoLoteStaging"); var detalheTrfAprovadosManualmente = passagensAprovadas.Any(c => c.DetalheTRFAprovadoManualmente != null) ? passagensAprovadas.Select(c => c.DetalheTRFAprovadoManualmente) : null; var detalheTrfAprovadosManualmenteStaging = Mapper.Map <List <DetalheTRFAprovadaManualmenteLoteStaging> >((detalheTrfAprovadosManualmente ?? new List <DetalheTRFAprovadoManualmenteDto>())); detalheTrfAprovadosManualmenteStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(detalheTrfAprovadosManualmenteStaging, "DetalheTRFAprovadaManualmenteLoteStaging"); var extratos = passagensAprovadas.Any(c => c.Extrato != null) ? passagensAprovadas.Select(c => c.Extrato) : null; var extratosStaging = Mapper.Map <List <ExtratoLoteStaging> >((extratos ?? new List <ExtratoDto>())); extratosStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(extratosStaging, "ExtratoLoteStaging"); var eventos = passagensAprovadas.Any(c => c.EventoPrimeiraPassagemManual != null) ? passagensAprovadas.Select(c => c.EventoPrimeiraPassagemManual) : null; var eventoStaging = Mapper.Map <List <EventoLoteStaging> >((eventos ?? new List <EventoDto>())); eventoStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(eventoStaging, "EventoLoteStaging"); var configuracoesAdesao = passagensAprovadas.Any(c => c.ConfiguracaoAdesao != null) ? passagensAprovadas.Select(c => c.ConfiguracaoAdesao) : null; var configuracoesAdesaoStaging = Mapper.Map <List <ConfiguracaoAdesaoLoteStaging> >((configuracoesAdesao ?? new List <ConfiguracaoAdesaoDto>())); configuracoesAdesaoStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(configuracoesAdesaoStaging, "ConfiguracaoAdesaoLoteStaging"); var divergenciasCategoriaConfirmada = passagensAprovadas.Any(c => c.DivergenciaCategoriaConfirmada != null) ? passagensAprovadas.Select(c => c.DivergenciaCategoriaConfirmada) : null; var divergenciasCategoriaConfirmadaStaging = Mapper.Map <List <DivergenciaCategoriaConfirmadaLoteStaging> >((divergenciasCategoriaConfirmada ?? new List <DivergenciaCategoriaConfirmadaDto>())); divergenciasCategoriaConfirmadaStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(divergenciasCategoriaConfirmadaStaging, "DivergenciaCategoriaConfirmadaLoteStaging"); var veiculos = passagensAprovadas.Any(c => c.Veiculo != null) ? passagensAprovadas.Select(c => c.Veiculo) : null; var veiculosStaging = Mapper.Map <List <VeiculoLoteStaging> >((veiculos ?? new List <VeiculoDto>())); veiculosStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(veiculosStaging, "VeiculoLoteStaging"); var detalhesViagem = passagensAprovadas.Any(c => c.Viagens != null) ? passagensAprovadas.SelectMany(c => c.Viagens) : null; var detalhesViagemStaging = Mapper.Map <List <DetalheViagemLoteStaging> >((detalhesViagem ?? new List <DetalheViagemDto>())); detalhesViagemStaging.ForEach(x => x.ExecucaoId = execucaoId); datasourceConectSys.Connection.BulkInsert(detalhesViagemStaging, "DetalheViagemLoteStaging"); response.QtdTransacaoPassagemEDIStaging = transacoesStaging.Count; response.QtdDetalheTRFRecusaEvasaoStaging = detalheTrfRecusadosStaging.Count; response.QtdTransacaoProvisoriaEDIStaging = transacoesStaging.Count(x => x.TransacaoProvisoria); response.QtdDetalheTRFAprovadoManualmenteStaging = detalheTrfAprovadosManualmenteStaging.Count; response.QtdExtratoStaging = extratosStaging.Count; response.QtdEventoStaging = eventoStaging.Count; response.QtdConfiguracaoAdesaoStaging = configuracoesAdesaoStaging.Count; response.QtdDivergenciaCategoriaConfirmadaStaging = divergenciasCategoriaConfirmadaStaging.Count; response.QtdVeiculoStaging = veiculosStaging.Count; response.QtdDetalheViagemStaging = detalhesViagemStaging.Count; } catch (Exception ex) { Log.Fatal($"ID: {execucaoId} - Erro Fatal - Staging Passagens Aprovadas Edi - ConectSys.", ex); response.SucessoStagingConectSys = false; } } Log.Debug($"ID: {execucaoId} - Fim - Staging Passagens Aprovadas Edi - ConectSys."); }, passagensAprovadas); } catch (Exception ex) { Log.Fatal($"ID: {execucaoId} - Erro Fatal. Erro: {ex.Message}", ex); } sw.Stop(); response.TempoExecucaoStagingConectSys = sw.Elapsed; Log.Debug($"Json Response BulkInsert {JsonConvert.SerializeObject(response)}"); }