Пример #1
0
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            int.TryParse(txtDistanciaDaReta.Text.Trim(), out int distanciaDaReta);

            if (distanciaDaReta <= 0)
            {
                MessageBox.Show("A distância da reta é obrigatória", "Operação inválida", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            _calculoService.RealizarCalculo(new Calculo(Startup.IdConfiguracao, Startup.IdUsuario, distanciaDaReta)).Wait();

            txtDistanciaDaReta.Text = string.Empty;

            CarregarGrids();

            MessageBox.Show("Cálculo realizado com sucesso. Aguardando aprovação", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        public CalculoQueueManager(
            ICalculoService service,
            IPeriodoPericulosidadeService periculosidadeService)
        {
            _service = service;
            _periculosidadeService = periculosidadeService;

            _connectionFactory = new ConnectionFactory()
            {
                //Uri = new Uri("amqp://*****:*****@toad.rmq.cloudamqp.com/qaawhjrg"),
                HostName = "localhost",
                UserName = "******",
                Password = "******"
            };

            var conn    = _connectionFactory.CreateConnection();
            var channel = conn.CreateModel();

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (sender, ev) =>
            {
                var message = Encoding.UTF8.GetString(ev.Body);
                var command = JsonConvert.DeserializeObject <CalcularSalarioCommand>(message);

                Console.WriteLine($"{DateTime.Now} [Worker - Cálculos] Nova mensagem recebida: {message}");

                var horasPericulosidade = _periculosidadeService.Obter(command.NumeroCartao);
                command.HorasComPericulosidade = horasPericulosidade.Sum(h => h.HorasComPericulosidade);

                horasPericulosidade.ForEach(h =>
                {
                    h.MarcarComoCalculado();
                    _periculosidadeService.Salvar(h);
                });

                var calculo = _service.RealizarCalculo(command);
                Publicar(calculo);
            };

            channel.BasicConsume(FILA_A_PROCESSAR, true, consumer);
        }
        private void DoWork(object state)
        {
            var command = _messageQueueManager.Consumir();

            if (command == null)
            {
                return;
            }

            var horasPericulosidade = _periculosidadeService.Obter(command.NumeroCartao);

            command.HorasComPericulosidade = horasPericulosidade.Sum(h => h.HorasComPericulosidade);

            horasPericulosidade.ForEach(h =>
            {
                h.MarcarComoCalculado();
                _periculosidadeService.Salvar(h);
            });

            var calculo = _service.RealizarCalculo(command);

            _messageQueueManager.Publicar(calculo);
        }