public Resultado <Digital, Falha> Executar(IdentificarSocioPorDigitalComando comando) { var tempoIdentificacao = new Stopwatch(); tempoIdentificacao.Start(); if (_identificadoresDeDigital == null) { _identificadoresDeDigital = new ConcurrentBag <ServicoIdentificacaoDigital>(); } if (_identificadoresDeDigital.Count == 0) { if (_configuracoesBiometriaRepositorio.Recuperar(comando.Estacao) is var configuracaoBiometria && configuracaoBiometria.EhFalha) { return(configuracaoBiometria.Falha); } if (_fabricaMotorBuscaBiometrica.CriarMotorDeBuscaBiometrica(configuracaoBiometria.Sucesso.ParceiroSdkDigital) is var motorBusca && motorBusca.EhFalha) { return(motorBusca.Falha); } if (_digitaisRepositorio.RecuperarNumeroTotalDigitais() is var quantidadeDigitais && quantidadeDigitais.EhFalha) { return(quantidadeDigitais.Falha); } var digitaisPorPagina = (quantidadeDigitais.Sucesso / configuracaoBiometria.Sucesso.QuantidadeThreadsIdentificacaoDigital) + configuracaoBiometria.Sucesso.QuantidadeThreadsIdentificacaoDigital; for (int pagina = 1; pagina <= configuracaoBiometria.Sucesso.QuantidadeThreadsIdentificacaoDigital; pagina++) { if (_digitaisRepositorio.RecuperarPagina(pagina, digitaisPorPagina) is var digitais && digitais.EhFalha) { return(digitais.Falha); } if (digitais.Sucesso.Count() > 0) { _identificadoresDeDigital.Add(new ServicoIdentificacaoDigital(motorBusca.Sucesso, digitais.Sucesso)); } } } var digital = Digital.NovaNaoEncontrada(); Parallel.ForEach(_identificadoresDeDigital, async(identificadorDigital, estadoLoop) => { var resultado = await identificadorDigital.IdentificarAsync(comando.Template); if (resultado.EhSucesso) { digital = resultado.Sucesso; estadoLoop.Break(); } }); tempoIdentificacao.Stop(); return(digital.Id == 0 ? Resultado <Digital, Falha> .NovaFalha(Falha.Nova(404, "Digitão não encontrada")) : Resultado <Digital, Falha> .NovoSucesso(digital)); }
public void Nao_Posso_Identificar_Digital_No_Banco_Quando_Informo_Template_Inexistente() { var digitais = _digitaisDataAccessTestes.CarregarDigitaisParaIdentificacao(); var digitalLida = _digitaisDataAccessTestes.CarregarDigitalNaoEncontrada(); var resultado = Resultado <Digital, Falha> .NovoSucesso(digitalLida); var tempo = new Stopwatch(); tempo.Start(); foreach (var digital in digitais) { resultado = _sdk.IdentificarDigital(digitalLida.TemplateIso, digital); if (resultado.EhSucesso) { Assert.Fail($"Digital não deveria ser localizada, mas foi dado match com {resultado.Sucesso.Matricula}"); } } tempo.Stop(); Assert.IsTrue(tempo.Elapsed.TotalSeconds < 5); Assert.IsTrue(resultado.EhFalha); Assert.IsTrue(resultado.Falha.Codigo == 404); }