示例#1
0
        public async Task <IActionResult> Details(int?id, DateTime?Inicio, DateTime?Fim)
        {
            if (id == null)
            {
                return(NotFound());
            }
            if (!Inicio.HasValue)
            {
                Inicio = DateTime.Now.AddDays(-3).Date;
            }
            if (!Fim.HasValue)
            {
                Fim = DateTime.Now.Date;
            }
            ViewBag.Fim    = Fim;
            ViewBag.Inicio = Inicio;
            var relogio = await _context.Relogios
                          .FirstOrDefaultAsync(m => m.Id == id);

            try
            {
                IRelogioService relogioService = (IRelogioService)ActivatorUtilities.CreateInstance(this._serviceProvider, typeof(RelogioHenry));
                await relogioService.LerRelogioELancarAsync(relogio, Inicio.Value, Fim.Value.AddDays(1), lancar : false);
            }catch (Exception e)
            {
                _logger.LogError("Não foi possível ler o relógio. Mostrando dados adquiridos anteriormente");
            }
            relogio.Registros = _context.Registros.Where(r => r.IdRelogio == relogio.Id && r.Marcacao > Inicio && r.Marcacao < Fim).OrderBy(r => r.Marcacao).ToList();
            if (relogio == null)
            {
                return(NotFound());
            }

            return(View(relogio));
        }
示例#2
0
        public override Task DoWork(CancellationToken cancellationToken)
        {
            try
            {
                _logger.LogInformation($"{DateTime.Now:hh:mm:ss} Iniciando ciclo e leitura.");
                using var scope = _serviceProvider.CreateScope();
                var _pontoSyncContext  = scope.ServiceProvider.GetRequiredService <PontoSyncContext>();
                var _frequenciaContext = scope.ServiceProvider.GetRequiredService <FrequenciaContext>();
                var relogios           = _pontoSyncContext.Relogios.ToList();
                int count = 0;
                Parallel.ForEach(relogios, relogio =>
                {
                    try
                    {
                        IRelogioService relogioService = (IRelogioService)ActivatorUtilities.CreateInstance(_serviceProvider.CreateScope().ServiceProvider, typeof(RelogioHenry));
                        DateTime inicio;
                        //Se nunca havia sido lido antes, ler os últimos 60 minutos.
                        if (relogio.UltimoSucesso == null)
                        {
                            inicio = DateTime.Now.AddMinutes(-60);
                        }
                        else
                        {
                            //Se já havia sido lido, recuperar no máximo 3 dias de leitura.
                            if ((DateTime.Now.Date - relogio.UltimoSucesso.Value.Date).TotalDays > 3)
                            {
                                inicio = DateTime.Now.AddDays(-3);
                            }
                            //Se a leitura é recente ler desde o último sucesso, e 15 minutos de sobreposição.
                            else
                            {
                                inicio = relogio.UltimoSucesso.Value.AddMinutes(-15);
                            }
                        }
                        relogioService.LerRelogioELancarAsync(relogio, inicio, DateTime.Now, true);
                    }
                    catch (Exception e)
                    {
                        count++;
                        _logger.LogError(1, e, $"Problema lendo o relógio {relogio.Nome} com o IP {relogio.URL} e descrito como {relogio.Descricao}");
                    }
                }
                                 );

                _logger.LogInformation($"{DateTime.Now:hh:mm:ss} Terminado ciclo e leitura. Quantidade de erros:" + count);
            }
            catch {
                _logger.LogError("Erro crítico no Job de leitura do relógio");
            }

            return(Task.CompletedTask);
        }