/// <summary> /// Recebe coleção de passagens aprovadas para processamento no ConectSys. /// </summary> /// <param name="passagensAprovadas">PassagemAprovadaEstacionamentoDto[]</param> /// <returns>PassagensAprovadasParkResponse</returns> public PassagensAprovadasParkResponse Execute(List <PassagemAprovadaEstacionamentoDto> passagensAprovadasPark) { var response = new PassagensAprovadasParkResponse(); var execucaoId = Guid.NewGuid(); response.ExecucaoId = execucaoId; Log.Info($"ID: {execucaoId} - Início - Execução Passagens Aprovadas Park."); if (passagensAprovadasPark != null && passagensAprovadasPark.Any()) { SalvarAprovadasStagingConectSys(passagensAprovadasPark, response, execucaoId); } var jsonResponse = JsonConvert.SerializeObject(response); Log.Info($"ID: {execucaoId} - Fim - Execução Passagens Aprovadas Park. Retorno: {jsonResponse}."); return(response); }
private void SalvarAprovadasStagingConectSys(List <PassagemAprovadaEstacionamentoDto> passagensAprovadas, PassagensAprovadasParkResponse response, Guid execucaoId) { try { var transacoes = passagensAprovadas?.Select(c => c.TransacaoEstacionamento).ToList(); var transacaoStaging = Mapper.Map <List <TransacaoPassagemEstacionamentoLoteStaging> >(transacoes); var idsTransacoes = transacoes.Select(x => x.RegistroTransacaoId).ToList(); var extratos = passagensAprovadas?.Select(c => c.Extrato).ToList(); var extratosStaging = Mapper.Map <List <ExtratoLoteStaging> >(extratos); var conveniadoInformacoes = passagensAprovadas?.Select(c => c.ConveniadoInformacoesRPS).ToList(); var conveniadoInformacoesStaging = Mapper.Map <List <ConveniadoInformacoesRpsLoteStaging> >(conveniadoInformacoes); var detalhePassagens = passagensAprovadas?.SelectMany(c => c.TransacaoEstacionamento.Detalhes).ToList(); var detalhePassagemStaging = new List <DetalhePassagemEstacionamentoLoteStaging>(); detalhePassagens.ForEach(x => detalhePassagemStaging.Add(Mapper.Map <DetalhePassagemEstacionamentoLoteStaging>(x))); var pistaInformacoes = passagensAprovadas?.Select(c => c.PistaInformacoesRPS).ToList(); var pistaInformacoesRpsStaging = Mapper.Map <List <PistaInformacoesRPSLoteStaging> >(pistaInformacoes); TransactionContextHelper.ExecuteTransaction((aprovadas) => { Log.Debug($"ID: {execucaoId} - Início - Staging Passagens Aprovadas Park - ConectSys."); using (var datasourceConectSys = AdoDataSourceProvider.GetDataSource(DbConnectionDataSourceType.ConectSys)) { try { datasourceConectSys.Connection.BulkInsert(transacaoStaging, "TransacaoPassagemEstacionamentoStaging"); datasourceConectSys.Connection.BulkInsert(extratosStaging, "ExtratoLoteStaging"); datasourceConectSys.Connection.BulkInsert(detalhePassagemStaging, "DetalhePassagemEstacionamentoStaging"); datasourceConectSys.Connection.BulkInsert(conveniadoInformacoesStaging, "ConveniadoInformacoesRPSStaging"); datasourceConectSys.Connection.BulkInsert(pistaInformacoesRpsStaging, "PistaInformacoesRpsStaging"); response.QtdConveniadoInformacoesRPSStaging = conveniadoInformacoesStaging.Count; response.QtdDetalhePassagemEstacionamentoStaging = detalhePassagemStaging.Count; response.QtdPistaInformacoesRPSStaging = pistaInformacoesRpsStaging.Count; response.QtdTransacaoPassagemEstacionamentoStaging = transacaoStaging.Count; } catch (Exception ex) { Log.Fatal($"ID: {execucaoId} - Erro Fatal - Staging Passagem Aprovadas Park - ConectSys", ex); response.SucessoStagingConectSys = false; } } Log.Debug($"ID: {execucaoId} - Fim - Staging Passagens Aprovadas Park - ConectSys"); }, passagensAprovadas); TransactionContextHelper.ExecuteTransaction((aprovadas) => { using (var dataSourceConectPark = new DbConnectionDataSource("ConectParkConnStr")) { var command = new AtualizarRegistroTransacaoProcessadoCommand(dataSourceConectPark); command.Execute(new AtualizarRegistroTransacaoProcessadoArgs { RegistroTransacaoIds = idsTransacoes }); } }, passagensAprovadas); } catch (Exception ex) { Log.Fatal($"ID: {execucaoId} - Erro Fatal. Erro: {ex.Message}", ex); } }