Ejemplo n.º 1
0
        private void ProcessarFaturas(List <Fatura> faturas, DadosParaValidacao dadosParaValidacao)
        {
            for (int i = 0; i < faturas.Count; i += Config.MAX_FATURA_PER_TASK)
            {
                List <Fatura> faturasShard;

                if (faturas.Count < Config.MAX_FATURA_PER_TASK)
                {
                    faturasShard = faturas;
                }
                else if (i < faturas.Count && (faturas.Count - i) >= Config.MAX_FATURA_PER_TASK)
                {
                    faturasShard = faturas.GetRange(
                        index: i,
                        count: Config.MAX_FATURA_PER_TASK);
                }
                else
                {
                    var count = faturas.Count - i;

                    faturasShard = faturas.GetRange(
                        index: faturas.Count - count,
                        count: count);
                }

                tasks.Add(item: Task.Run(
                              action: () => EfetuarValidacao(
                                  faturas: faturasShard,
                                  dadosParaValidacao: dadosParaValidacao)));
            }
        }
Ejemplo n.º 2
0
        private static void Validar(List <Fatura> faturas, DadosParaValidacao dadosParaValidacao)
        {
            List <Task>      tasks      = new List <Task>();
            List <Validacao> validacoes = new List <Validacao>();

            foreach (var fatura in faturas)
            {
                tasks.Add(
                    item: Task.Run(
                        action: () =>
                {
                    var validacao = ValidarFatura(
                        fatura: fatura,
                        dadosParaValidacao: dadosParaValidacao);

                    validacoes.Add(item: validacao);
                }));
            }

            WaitTasks(tasks: tasks);

            foreach (var validacao in validacoes)
            {
                Mocks.FaturaRepository.UpdateStatus(validacao.Fatura);
            }
        }
Ejemplo n.º 3
0
        public static Validacao ValidarFatura(Fatura fatura, DadosParaValidacao dadosParaValidacao)
        {
            try
            {
                fatura.CNPJ = string.Concat(fatura.CNPJ.Where(char.IsDigit));
                var nomeArquivo = fatura.NomeArquivo;
                fatura.NomeArquivo = "Nome_Do_Arquivo";

                return(Mocks.Validacao(fatura));
            }
            catch (Exception ex)
            {
                var validacao = new Validacao
                {
                    Data     = DateTime.Now,
                    Fatura   = fatura,
                    FaturaId = fatura.Id,
                    Guia     = string.Empty,
                    Lote     = string.Empty
                };

                var ListValidacaoErroPrograma = new List <ValidacaoErro>();

                ListValidacaoErroPrograma.Add(new ValidacaoErro
                {
                    Descricao = "Ocorreu um erro",
                    Detalhes  = ex.Message
                });

                validacao.ListValidacaoErro.AddRange(ListValidacaoErroPrograma);

                return(validacao);
            }
        }
Ejemplo n.º 4
0
        private static void Validar(List <Fatura> faturas, DadosParaValidacao dadosParaValidacao, SemaphoreSlim semaphore)
        {
            List <Task>      tasks      = new List <Task>();
            List <Validacao> validacoes = new List <Validacao>();

            foreach (var fatura in faturas)
            {
                var task = new Task(delegate
                {
                    var validacao = ValidarFatura(fatura, dadosParaValidacao);
                    validacoes.Add(validacao);
                });
                tasks.Add(task);
                task.Start();
            }
            Task.WaitAll(tasks.ToArray());

            foreach (var validacao in validacoes)
            {
                semaphore.Wait();

                Mocks.FaturaRepository.UpdateStatusWithLock(validacao.Fatura);

                semaphore.Release();
            }
        }
Ejemplo n.º 5
0
        public void StartProcess()
        {
            var listRegraSADT       = new List <Regra>();
            var listRegraInternacao = new List <Regra>();

            try
            {
                {   // Iniciar LightInjection Scope
                    // ServiceLocator de Repositorios
                    // Objeto de configuração de e-mail

                    var iteration = 0;

                    while (!_cancellationToken.IsCancellationRequested)
                    {
                        var faturas = Mocks.FaturaEmpty;

                        // Numero maximo de iterações na PoC
                        if (iteration < Config.MAX_WHILE_ITERATION)
                        {
                            faturas = Mocks.Faturas(qtdFaturas: Config.NUMBER_OF_INVOICE);

                            iteration++;
                        }
                        else
                        {
                            Program.OnStop();
                        }

                        VerificarAtualizacaoDeRegras(
                            listRegraSADT: listRegraSADT,
                            listRegraInternacao: listRegraInternacao);

                        if (faturas.Any())
                        {
                            var dadosParaValidacao = new DadosParaValidacao(
                                listRegraSADT: listRegraSADT,
                                listRegraInternacao: listRegraInternacao);

                            ProcessarFaturas(faturas, dadosParaValidacao);
                        }

                        if (tasks.Count > 0)
                        {
                            WaitTasks(tasks: tasks);
                        }
                        else
                        {
                            Thread.Sleep(millisecondsTimeout: Config.POOLING_INTERVAL);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Mocks.ServiceRepository.Update("Erro - " + ex.Message);
            }
        }
Ejemplo n.º 6
0
        public static Validacao ValidarFatura(Fatura fatura, DadosParaValidacao dadosParaValidacao)
        {
            try
            {
                unsafe
                {
                    var cnpj = stackalloc char[Config.CNPJ_MAX_SIZE];
                    var i    = 0;

                    foreach (var c in fatura.CNPJ)
                    {
                        if (char.IsDigit(c))
                        {
                            cnpj[i] = c;
                            i++;
                        }
                    }

                    fatura.CNPJ = new string(value : cnpj);
                }

                var nomeArquivo = fatura.NomeArquivo;
                fatura.NomeArquivo = "Nome_Do_Arquivo";

                return(Mocks.Validacao(fatura));
            }
            catch (Exception ex)
            {
                var validacao = new Validacao
                {
                    Data     = DateTime.Now,
                    Fatura   = fatura,
                    FaturaId = fatura.Id,
                    Guia     = string.Empty,
                    Lote     = string.Empty
                };

                var ListValidacaoErroPrograma = new List <ValidacaoErro>();

                ListValidacaoErroPrograma.Add(new ValidacaoErro
                {
                    Descricao = "Ocorreu um erro",
                    Detalhes  = ex.Message
                });

                validacao.ListValidacaoErro.AddRange(ListValidacaoErroPrograma);

                return(validacao);
            }
        }
Ejemplo n.º 7
0
        private static void EfetuarValidacao(List <Fatura> faturas, DadosParaValidacao dadosParaValidacao)
        {
            {   // Inicializa escopo do LightInjector
                try
                {
                    Mocks.ServiceRepository.Update("Iniciando processo - " + DateTime.Now);

                    Validar(faturas, dadosParaValidacao);

                    Mocks.ServiceRepository.Update("Finalizando processo - " + DateTime.Now);
                }
                catch (Exception ex)
                {
                    Mocks.ServiceRepository.Update("Erro - " + ex.Message);
                }
            }
        }
Ejemplo n.º 8
0
        public void StartProcess()
        {
            var ListRegraSADT       = new List <Regra>();
            var ListRegraInternacao = new List <Regra>();

            try
            {
                {   // Iniciar LightInjection Scope
                    // ServiceLocator de Repositorios
                    // Objeto de configuração de e-mail

                    var iteration = 0;

                    while (true)
                    {
                        var faturas = Mocks.FaturaEmpty;

                        // Numero maximo de iterações na PoC
                        if (iteration < Config.MAX_WHILE_ITERATION)
                        {
                            faturas = Mocks.Faturas(qtdFaturas: Config.NUMBER_OF_INVOICE);

                            iteration++;
                        }
                        else
                        {
                            // Cannot break :(
                            // break;
                        }

                        if (faturas.Any())
                        {
                            var lastUpdate      = DateTime.MinValue;
                            var ListTodasRegras = new List <Regra>();
                            ListTodasRegras.AddRange(ListRegraSADT);
                            ListTodasRegras.AddRange(ListRegraInternacao);
                            var dataInsercao  = ListTodasRegras.Count > 0 ? ListTodasRegras.Max(o => o.DataInsercao) : DateTime.MinValue;
                            var dataAlteracao = ListTodasRegras.Count > 0 ? ListTodasRegras.Max(o => o.DataAlteracao) : DateTime.MinValue;

                            lastUpdate = dataInsercao;
                            if (dataAlteracao > dataInsercao)
                            {
                                lastUpdate = dataAlteracao;
                            }

                            // Utiliza lastUpdate para verificar se ocorreu atualização das listas
                            if (ListTodasRegras.Count <= 0)
                            {
                                Mocks.Regras.CarregarListaDeRegras(
                                    listRegraSADT: ListRegraSADT,
                                    listRegraInternacao: ListRegraInternacao);
                            }

                            SemaphoreSlim semaphore = new SemaphoreSlim(1);

                            var dadosParaValidacao = new DadosParaValidacao(
                                listRegraSADT: ListRegraSADT,
                                listRegraInternacao: ListRegraInternacao);

                            Task task = new Task(delegate
                            {
                                EfetuarValidacao(faturas, dadosParaValidacao, semaphore);
                            });
                            task.Start();
                        }

                        Thread.Sleep(Config.POOLING_INTERVAL);
                    }
                }
            }
            catch (Exception ex)
            {
                Mocks.ServiceRepository.Update("Erro - " + ex.Message);
            }
        }