====== Liberação de Acesso ao Restaurante Universitário ======
Para controlar o acesso das pessoas ao Restaurante Universitário (R.U.), foram instaladas catracas eletrônicas com o objetivo de registrar de forma on-line o acesso ao R.U. Para gerenciar a liberação/negação do giro da catraca fisicamente, foi desenvolvido um aplicativo desktop que libera o acesso aos usuários pagantes bem como para os discentes com bolsa auxílio alimentação ou residência.
Para o aplicativo desktop funcionar corretamente, deve-se instalar o mesmo na máquina do usuário que irá gerenciar o acesso das pessoas ao R.U bem como configurar corretamente a catraca (ver como configurar no tópico "Passos para instalação do sistema de Catraca/Digital"). O público que acessa o R.U. é bem diversificado, em geral é composto por:
* Discentes da Universidade com sua digital devidamente cadastrada no sistema SIGAA e que possuem Bolsa Auxílio ([[desenvolvimento:especificacoes:sigaa:sae:casos_de_uso:deae:bolsa_auxilio:solicitacao_de_bolsa_auxilio_alimentacao|Alimentação]] ou [[desenvolvimento:especificacoes:sigaa:sae:casos_de_uso:deae:bolsa_auxilio:solicitacao_de_bolsa_auxilio_residencia
|Residência]])
* Discentes de outra instituição de ensino e/ou cidade, geralmente participando de eventos;
* Pessoas pagantes da região;
* Qualquer outra pessoa em ocasisão esporádica que seja autorizada pelo SAE;
O software que gerencia o controle de acesso ao R.U. pode liberar o acesso de duas maneiras:
- Automáticamente através da digital dos próprios alunos. Ou seja, o software verifica de forma on-line se o discente pode ter acesso a refeição daquele dia/horário em particular.
- Manualmente através de comando realizado pelo operador do sofware de acordo com o tipo de pessoa que está acessando o R.U naquele momento.
===== Descrição do Caso de Uso =====
* O operador do software deve solicitar aos discentes bolsistas para colocarem o dedo no leitor biométrico para que o sistema possa analisar e liberar (ou não) o acesso ao Restaurante (é levado em consideração: horário da refeição que o aluno está solicitando o acesso, dia da semana e se o discente já usufruiu do benefício naquele dia). Uma vez os critérios sendo atendidos, a catraca é liberada. Quando a catraca é girada o registro desse acesso é imediatamente registrado no sistema.
* O usuário do software pode liberar/autorizar o acesso de qualquer pessoa e especificar o perfil no qual essa pessoa se encaixe (usuário pagante, usuário eventual, etc.). Deve-se justificar o motivo da liberação quando a pessoa **não for pagante.**
* Como o acesso ao R.U é extremamente elevado (por parte de pessoas pagantes e discentes bolsistas) existe teclas de atalho para acelerar a liberação de uma pessoa pagante.
====== Cadastro de Pessoas ======
Como foi descrito acima, esse caso de uso funciona basicamente fazendo autenticação de digitais. Obviamente é necessário ser realizado um cadastro de digitais entre a comunidade da universidade para que possa existir uma base de digitais. Para isso, foi criado um aplicativo que realiza essa função específica. Para mais detalhes acesse a [[desenvolvimento:especificacoes:sigaa:sae:sistema_desktop:cadastro_digital_usuarios|especificação do aplicativo de Cadastro de Pessoas]].
====== Estrutura de implementação ======
Para desenvolver esse caso de uso foi utilizado como principal ferramenta o Netbeans, que permitiu prototipar/gerar a interface gráfica de forma rápida. Os outros softwares e tecnologias utilizadas no desenvolvimento desse caso de uso estão detalhados abaixo (todos os SDKS estão disponíveis em \\10.3.128.50\Sistemas\Catraca):
* Eclipse Galileu
* NetBeans 6.7.1 (para desenvolvimento do módulo desktop, usando componentes Swing)
* Spring Remote (para comunição entre o Desktop e o sistema servidor)
* Leitor Digital Microsoft DG2-00004 Finger Print Reader for Windows (os drivers para funcionamento desse equipamento faz parte do SDK Griaule Biometrics)
* SDK Griaule Biometrics (http://www.griaulebiometrics.com) - usa-se a API desse software para interagir com o leitor da digital
* SDK EasyInner (SDK para comunicação entre o desktop e a Catraca eletrônica ou módulo de desenvolvimento equivalente que simula a catraca)
====== Aplicando Licença do Software da Griaule ======
O software da Griaule por default é instalado com licença de 90 dias. Para aplicar a licença, pode usar o software Licence Manager 2008 que gerencia as licenças de forma gráfica no Windows. Ele gera um key de acordo com o PC e aplica a licença.
OBS: quando a licença é aplicado no PC, é gerado um arquivo GrFingerLicenseAgreement.txt. Porém, o software da Griaule não remove o GrFingerLicenseAgreement.txt antigo (que corresponde a versão trial de 90 dias). É necessário remover o arquivo GrFingerLicenseAgreement.txt antigo para que a licença passe a funcionar corretamente.
===== Reconhecimento da Digital =====
O reconhecimento de digital é realizado através do SDK da Griaule. Esse SDK possui muitas [[ http://www.griaulebiometrics.com/page/pt-br/fingerprint_sdk/features|características]], entre elas existe a identificação um-para-muitos ilimitada. Ou seja, uma digital capturada pode ser analisada com lista de outras digitais existentes.
Para reconhecimento da digital pela aplicação, o SKD trabalha seguindo o seguinte fluxo:
- Inicia capturando a imagem do leitor biométrico,
- É extraido um template dessa imagem,
- Esse template é utilizado para se comparar com algum outro template existente (no banco de dados, por exemplo) assim é possível verificar se a digital capturada pelo leitor bate com alguma outra existente.
- Esse fluxo é repetido enquanto a aplicação estiver funcionando.
A nível de código Java, para fazermos uma aplicação trabalhar capturando digitais através do leitor usando o SDK da Griaule, devemos implementar as interfaces:
^ Classe ^ Descrição |
| IStatusEventListener | Interface responsável por receber eventos do sensor de digital, ou seja, quando o usuário insere o dedo no dispositivo. |
| IImageEventListener | Esta interface é responsável por receber receber as imagens adquiridas pelo sensor. |
| IFingerEventListener | Esta é a interface responsável por receber eventos de status do sensor. |
O JavaDoc completo está disponível no [[http://www.griaulebiometrics.com/javadoc/GrFingerJava/com/griaule/grfingerjava/package-summary.html|site da Grialue]].
A nível de implementação, seria semelhante ao exemplo abaixo:
public class CapturaDigital implements IStatusEventListener, IImageEventListener, IFingerEventListener {
public void onSensorPlug(String arg0) {
}
public void onSensorUnplug(String arg0) {
}
public void onImageAcquired(String arg0, FingerprintImage arg1) {
}
public void onFingerDown(String arg0) {
}
public void onFingerUp(String arg0) {
}
}
Uma vez obtida a digital do sensor, é possivel comparar o que foi capturado pelo sensor com outras digitais existentes. O exemplo abaixo mostra como comparar uma digital extraída com uma lista de digitais armazenada em uma Collection.
/**
* Realiza a comparação da digital extraída com as digitais que estão na coleção
* em memória
*
* @param digitalExtraidaSensor
* @return
* @throws Exception
*/
public DiscenteDTO identify(byte[] digitalExtraidaSensor) throws Exception {
DiscenteDTO discenteLocalizadoByDigital = null;
try {
MatchingContext fingerprintSDK = new MatchingContext();
} catch (GrFingerJavaException e1) {
throw new Exception(e1);
}
Template template = new Template(digitalExtraidaSensor);
fingerprintSDK.prepareForIdentification(template);
for ( DiscenteDTO discenteDTO : digitaisDiscentesTurmaAberta ) {
for ( byte[] digital : discenteDTO.getDigitais() ) {
Template referenceTemplate = new Template(digital);
boolean matched = fingerprintSDK.identify(referenceTemplate);
if (matched) {
discenteLocalizadoByDigital = discenteDTO;
break;
}
}
}
fingerprintSDK.destroy();
return discenteLocalizadoByDigital;
}
Esse fluxo pode ser analisado em mais detalhes no Diagrama de Sequencia abaixo:
{{:desenvolvimento:especificacoes:sigaa:sae:sistema_desktop:sequencia.png|}}
Para as aplicações desenvolvidas em Java e para rodar no Windows com suporte ao Microsoft Fingerprint Reader, os seguintes arquivos devem ser distribuídos junto ao aplicativo:
* GrFingerJava.jar (requerido para todas as aplicações Java)
* grfingerjava.dll (requerido para Windows)
* pthreadVC2.dll (requerido para Windows)
* CapPluginFingercap.dll (requerido pelo Windows para suportar o Microsoft Fingerprint Reader)
===== Classes Módulo Desktop - Sistema do R.U. =====
^ Classe ^ Descrição |
| default.EasyInner | Classe fornecida pela TopData que possui uma lista de comandados pré-definidos que podem disparar eventos na catraca eletrônica |
| default.EasyInnerOnLine | Essa classe implementa os comandos que serão enviados a catraca eletrônica. Os comandos que podem ser enviados são definidos na classe EasyInner |
| default.FormLiberacao | Tela utilizada para acionar o giro da catraca. Tela utilizada pelo operador do software para liberar o acesso das pessoas sem precisar utilizada a digital |
| default.FormPrincipal | Tela principal que exibe o discente identificado, os dias de alimentação que o mesmo tem direito, etc. Uma vez essa tela aberta automaticamente ela ativa o leitor de digital de forma a ler o dedo inserido. |
| default.Main | Usado para startar a aplicação, abre o a tela de Login. |
| default.TelaLoginRU | Primeira tela que é aberta solicitando os dados do usuário para abrir a tela principal do sistema. |
| default.TipoRefeicaoRU | Classe que contém os tipos de refeição. |
| default.UsuarioLogado | Usuário que representa localmente o usuário que está logado no aplivativo. |
| default.UtilDigital | Classe utilitária que possui vários métodos "listeners". Utilizada para interagir com o leitor de digital do sistema do R.U. |
| br.ufrn.sigaa.assistencia.remoto.DiasAlimentacaoDTO | Classe DTO que possui o discente, os dias de alimentação permitidos, tipo de bolsa, etc. |
| br.ufrn.sigaa.assistencia.remoto.DiscenteAcessoDuplicadoRUException | Classe de exceção que é disparada quando discente tenta fazer acesso inválido ao R.U. |
| br.ufrn.sigaa.assistencia.remoto.IdentificacaoController | Interface que possui os métodos que serão implementados pela classe que fará a comunicação remota através do Spring Remote. |
| br.ufrn.sigaa.assistencia.remoto.PessoaDTO | Classe DTO que representa uma pessoa. |
| br.ufrn.sigaa.assistencia.remoto.SistemasDelegate | Classe delegate que possui os métodos fazem as chamada remotas ao servidor. |
| br.ufrn.sigaa.assistencia.remoto.applicationContext.xml | Arquivo XML utilizado pelo Spring para fazer a comunicação remota entre Desktop-Servidor |
===== Acionamento eletrônico da catraca =====
Para a liberação da catraca, é necessário usar os comandos fornecedios pela DLL do EasyInner. Como pode ser visto na classe abaixo existem quatro métodos relacionados a liberação da catraca:
public class EasyInner {
...
public native int LiberarCatracaEntrada(int Inner);
public native int LiberarCatracaSaida(int Inner);
public native int LiberarCatracaEntradaInvertida(int Inner);
public native int LiberarCatracaSaidaInvertida(int Inner);
...
}
^ Classe ^ Descrição |
| LiberarCatracaEntrada| Libera a entrada no sentido padrão configurado de fábrica. |
| LiberarCatracaSaida| Libera a saída no sentido padrão configurado de fábrica. |
| LiberarCatracaEntradaInvertida| Libera a entrada no sentido **oposto** padrão configurado de fábrica. |
| LiberarCatracaSaidaInvertida| Libera a saída no sentido **oposto** padrão configurado de fábrica. |
A nível de implementação, existe uma classe que "escuta" os eventos da catraca, como pode ser visto no código abaixo:
public class EasyInnerOnLine implements Runnable {
...
case ESTADO_LIBERA_GIRO_CATRACA:
Ret = Inner.LiberarCatracaEntrada(InnerTemp.Numero);
...
}
===== Instalação do ambiente de desenvolvimento para trabalhar com a catraca/módulo de desenvolvimento =====
Como deve ser feito para instalar o software que irá trabalhar com a catraca bem como com o reconhecimento da digital do aluno.
**1 - Instalação dos softwares**
*Acessar a máquina que contém os softwares de instalação '\\10.3.128.50' na pasta 'sistemas\Catraca'
*Instalar o java (jdk-6u5-windows-i586-p.exe)
*Instalar o Fingerprint_SDK_Java_2009_Installer.jar (e copiar todos os arquivos da pasta BIN para \Windows\System32
*Descompactar e instalar o SDK-EasyInner-01-20.zip (www.topdata.com.br)
*Instalar o jmf-2_1_1e-windows-i586.exe
*Instalar driver da webcam que vai ser utilizada (\\10.3.128.50\sistemas\Downloads\WEBCAM\DriverCameraVaiParaRU)
* Criar pasta "C:\temp\fotos"
* Instalar o driver do leitor biométrico correspondente
**2 - Configurar a Catraca**
*Ligar a catraca pressionando a tecla de OK (da catraca)
*Número do Inner: 01 (OK)
*IP do Servidor: (colocar o endereço IP do computador conectado a catraca)
*IP Inner fixo? (OK) -> Coloca o IP designado para a catraca (Inner Net) (OK)
*Máscara de subrede? (OK) -> coloca a máscara (255.255.252.000) (OK)
*Sem Gateway? (OK)
*Porta padrão? (OK)
*Código da empresa: 0000 (OK)
*Padrão do cartão: 2 (Padrão Livre - PL)
*Inner Catraca: (OK)
*1 - Top/Box: 1 (Top/Box)
*Com urna:
*Buffer cheio? 2
3 - Copiar todos os arquivos do SDK da Griaule (que foi instalada na máquina) da pasta 'bin' (...\Griaule\FingerPrint\bin) para a pasta 'system32' do windows (...\windows\system32)
4 - Copiar o arquivo '\Sistemas\Catraca\GRIAULE\GRIAULE\grfingerjava.jar' da máquina '\\10.3.128.50' para a pasta 'ext' do java (...\java\jre1.6.0-05\lib\ext).
5 - Copiar a pasta 'Sistemas\Catraca\AcessoRUDesktop' com o sistema desktop da máquina '\\10.3.128.50' para o computador que vai utiliza o software.
===== Instalação do Griaule no Linux 32 bits =====
O software da Griaule e o leitor Microsoft Fingerprint funciona em Linux 32 bits. Foi testado com sucesso na versão 9.10 do Ubuntu. Para instalar no Linux, os passos são:
- Instalar Griaule normalmente através do .jar (Fingerprint_SDK_Java_2009_Installer.jar)
- Instalar pacote **scanbuttond** (sudo aptitude install scanbuttond)
- Conectar o leitor Fingerprint na porta USB e localizar onde o dispositivo foi montado no sistema através do terminal usado **"lsusb"**
- Dá permissão leitura/escrita no dispositivo montado dentro de **/dev/bus/usb**.
* Exemplo: se o dispositivo foi montado em **/dev/bus/usb/007/003** deve-se fazer: **chmod 777 003**
- Startar o app Java (ChamadaBiometrica, por exemplo) para que o aplicativo carregue as libs do Griaule, dessa forma o leitor Fingerprint será ativado (ficando com a luz de captura acesa).
OBS: o app deve apontar para o diretório /bin do diretorio de instalação da Griaule (-Djava.library.path="/home/seu_usuario/Griaule/Fingerprint SDK Java 2009/bin"), caso contrario lançará a exceção: "Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no grfingerjava in java.library.path"
===== Telas do Sistema - Sistema do R.U. =====
{{:desenvolvimento:especificacoes:sigaa:sae:sistema_desktop:login.jpg|}}
Tela de login no sistema de RU
{{:desenvolvimento:especificacoes:sigaa:sae:sistema_desktop:tela_principal.jpg|}}
Tela principal
{{:desenvolvimento:especificacoes:sigaa:sae:sistema_desktop:liberacao.jpg|}}
Tela de liberação da catraca
===== Principais Regras de Negócio =====
* Quando um discentes bolsista tem acesso autorizado ao R.U. para alguma refeição ele fica impedido de acessar o R.U. para a mesma refeição naquele dia.
* Um acesso ao R.U. só é realmente contabilizado (ou seja, o acesso é registrado no sistema) quando a catraca eletrônica é fisicamente girada.
* Todas as liberações de catraca que são realizadas pelos operadores no software (ou seja, não é o próprio discente por digital) serão registradas para posterior consultar.
===== Classes Persistentes e Tabelas Envolvidas =====
^ Classe ^ Tabela |
| Sem classe persistente. | comum.public.identificacao_pessoa |
| Sem classe persistente. | sigaa.sae.registro_acesso_ru |
| Sem classe persistente. | sigaa.sae.tipo_liberacao_catraca |
Obs.:
* comum.public.identificacao_pessoa (Tabela armazena CPF e digital de discentes e servidores)
* sigaa.sae.registro_acesso_ru (Tabela que registra todos os acessos que são realizados ao restaurante através da catraca eletrônica)
* sigaa.sae.tipo_liberacao_catraca (Tabela que contém os tipos de liberação disponíveis para a liberação da catraca do RU)
====== Plano de Teste ======
Sistema: Desktop - Liberação de acesso a catraca
Módulo: SAE
Link(s): executar o arquivo AcessoRU.jar
Usuário: joilsonabrantes
Papel que usuário deve ter: CONTROLADOR_ACESSO_RESTAURANTE
===== Cenários de Teste =====
Se o discente ainda não possuir, deve-se cadastra-lo através do aplicativo de [[desenvolvimento:especificacoes:sigaa:sae:sistema_desktop:cadastro_digital_usuarios|Cadastro de Pessoas]] (é necessário ter Webcam e leitor de digital no PC).
Uma vez esse discente possuindo digital, deve-se solicitar uma Bolsa Auxílio de [[desenvolvimento:especificacoes:sigaa:sae:casos_de_uso:deae:bolsa_auxilio:solicitacao_de_bolsa_auxilio_alimentacao|Alimentação]] ou [[desenvolvimento:especificacoes:sigaa:sae:casos_de_uso:deae:bolsa_auxilio:solicitacao_de_bolsa_auxilio_residencia
|Residência]] para o mesmo pelo SIGAA, através do portal do SAE.
É necessário que a Bolsa Auxílio esteja com status "DEFERIDA E CONTEMPLADA", bem como ter os dias de alimentação que o discente irá usufruir desse benefício.
===== Dados para o Teste =====
* Usuário para solicitar Bolsa Auxílio e cadastrar Dias de Alimentação que o discente terá direito: gracacosta