PDVApp: mudanças entre as edições

De BIS Wiki
Ir para navegação Ir para pesquisar
Criou página com '= Inicialização do Sistema = == PDVStarter == O sistema se inicializa na classe '''br.com.biserp.pdv.main.PDVStarter''', que na verdade não passa de uma casca. Pois sua...'
 
Linha 1: Linha 1:
= Inicialização do Sistema =  
= Inicialização do Sistema =  
A inicialização do aplicativo segue as seguintes regras:
# '''PDVStarter''' - Classe executável substituível, que originalmente só repassar o fluxo para o '''PDVUpdater''';
## '''PDVUpdater''' - Aceita alguns comando de inicialização na linha de comando, valida se é a única instância rodando e inicializa o Singleton '''PDVApp''' e a '''PDVUI''';
### '''PDVApp''' - Repsonsável por manter o workflow do checkout funcionando;
### '''PDVUI''' - Responsável por montar a UI que representa o estado e condições do PDVApp, além de fornecer outras telas de consultas e status, e interaje com o usuário;


== PDVStarter ==
== PDVStarter ==
Linha 16: Linha 22:
* '''-autoSaleTest''' - Carrega um arquivo de vendas automáticas. Esse arquivo deve conter o que deve ser vendido, e as vendas serão feitas automaticamente no horário programado.
* '''-autoSaleTest''' - Carrega um arquivo de vendas automáticas. Esse arquivo deve conter o que deve ser vendido, e as vendas serão feitas automaticamente no horário programado.
* '''-noUI''' - Não inicializa a UI do PDVApp. Útil quando estamos utilizando o -saleFile
* '''-noUI''' - Não inicializa a UI do PDVApp. Útil quando estamos utilizando o -saleFile
Valida se é a única instância tentando bloquear o arquivo '''.\\instance.lock''' no diretório da aplicação.
== PDVApp ==
O '''PDVApp''' funciona com uma série de máquinas de estado que definem o ponto de funcionamento da aplicação, conforme descritos a seguir:
== Workflow Principal: '''PDVState''' ==
Esse é o WORKFLOW geral da aplicação é definida nos valores da enum '''PDVState''':
* '''START''' - Valor inicial, utilizado somente na inicialização da aplicação.
*: Define o Workflow de '''StartCheckStatus''' como '''INITING''' e dispara sua Thread de funcionamento.
*: Quanto o processo de checagem incial ocorre o '''PDVState''' passa para o estado '''STARTCHECK'''.
== Workdlow de Validação de Inicialização: '''StartCheckStatus''' ==
Esse é o WORKFLOW que cuida da checagem e inicialização inicial do sistema. Seus funcionamento é assim:
* '''INITING''' - Estado inicial de começo das checkagens;
*: Neste estágio o sistema começa a ser inicializado, como carregamento dos bundles.
*: Tudo inicializado com sucesso, passa para o estado '''CHECKING_LOCALDB'''.
* '''CHECKING_LOCALDB''' - Estado para verificação do banco de dados.
*: Verifica se o banco de dados existe, se não existir o cria;
*: Passa para o estado '''CHECKING_LOCALDB_VERSION''';
* '''CHECKING_LOCALDB_VERSION''' - Verifica se o banco de dados está na versão correta e faz as alterações/atualizações necessárias;
*: Quando atualizado passa para o '''CHECKING_INSTALLATION''';
* '''CHECKING_INSTALLATION'''- Valida se a instalação do PDV está ok (empresa configurada, dados sincronizados, etc.).
*: Se a instalação estiver OK vai para o estado '''INSTALLATION_OK''', caso contrário para '''INSTALLATION_NEEDED'''.
* '''INSTALLATION_NEEDED'''
*: Nesse estado o PDVApp não faz nada, mas serve de sinalização para o '''PDVUI''' que a instalação precisa ser realizada, e a tela é exibida. Quando a tela de instalação é finalizada, o PDVUI sinaliza para o '''PDVAapp''' que volta para o estado de '''CHECKING_INSTALLATION'''.
* '''INSTALLATION_OK''' - Estado sem operação, apenas sinalizando que a Instalação está completa.
*: Passa automaticamente para o estado '''START_TERMINALAPP'''.
* '''START_TERMINALAPP''' - Inicializa o Terminal Client (Reponsável por realizar a comunicação com o servidor).
*: Após inicializá-lo passa automaticamente para o estado '''CHECKING_SERVER_ID'''.
* '''CHECKING_SERVER_ID''' - Valida se o ID atual configurado na estação PDV está válido e cadastrado corretamente no servidor.
*: Se o cadastro estiver OK passa para '''LOAD_CHECKOUT_DATA''', caso contrário trava a aplicação em erro para garantir que seja reinstalada.
* '''LOAD_CHECKOUT_DATA''' - Carrega as informações do checkout, se tiver persistido, ou se encontrar no banco de dados algum checkout aberto.
*: Passa para o '''START_SYNCDATA'''.
* '''START_SYNCDATA''' - Inicializa a Thread responsável por sincronizar os dados com/do servidor.
*: Passa para o '''OK'''.
* '''OK''' - Estado em que o WORKFLOW finalizou com sucesso. Utilizado para sinalizar outras partes do sistema que a inicialização terminou com sucesso e o sistema está pronto para ser utilizado.
*: Sinaliza o PDVApp de que este workflou finalizou através do método '''app.freeStartCheck()''', que dá sequência no workflow '''PDVState'''.
== PDVUI ==

Edição das 17h51min de 28 de janeiro de 2025

Inicialização do Sistema

A inicialização do aplicativo segue as seguintes regras:

  1. PDVStarter - Classe executável substituível, que originalmente só repassar o fluxo para o PDVUpdater;
    1. PDVUpdater - Aceita alguns comando de inicialização na linha de comando, valida se é a única instância rodando e inicializa o Singleton PDVApp e a PDVUI;
      1. PDVApp - Repsonsável por manter o workflow do checkout funcionando;
      2. PDVUI - Responsável por montar a UI que representa o estado e condições do PDVApp, além de fornecer outras telas de consultas e status, e interaje com o usuário;

PDVStarter

O sistema se inicializa na classe br.com.biserp.pdv.main.PDVStarter, que na verdade não passa de uma casca. Pois sua única função é chamar a classe br.com.biserp.pdv.main.PDVUpdater que executa as diversas tarefas de inicialização do sistema, como atualização, verificação etc.


Usabilidade da PDVStarter
A função da PDVStarter é simplesmente permitir que outras classes substituam a inicialização do sistema, como a interceptação de um sniffer, logger ou debugger no sistema. Bastando que uma um pacote (.jar) esteja antes no classpath de inicialização e que contenha a mesma classe (e package), isso fará com que a classe do pacote externo seja carrega primeiro pelo Java, impedindo a classe padrão de ser executada.


PDVUpdater

Esta classe que concentra as tarefas de inicialização da aplicação recebe os seguintes parâmetros:

  • -help - Exibe este menu de opções.
  • -testDarumaFW - Não inicializa a aplicacao. Tenta apenas inicializar as bibliotecas da DarumaDramework, verificando se as DLLs estão OK. Não faz comunicação com a impressora.
  • -watcher - Habilita uma thread que imprime o valor de algumas variáveis do sistema a cada segundo no console do sistema.
  • -autoSaleTest - Carrega um arquivo de vendas automáticas. Esse arquivo deve conter o que deve ser vendido, e as vendas serão feitas automaticamente no horário programado.
  • -noUI - Não inicializa a UI do PDVApp. Útil quando estamos utilizando o -saleFile


Valida se é a única instância tentando bloquear o arquivo .\\instance.lock no diretório da aplicação.

PDVApp

O PDVApp funciona com uma série de máquinas de estado que definem o ponto de funcionamento da aplicação, conforme descritos a seguir:

Workflow Principal: PDVState

Esse é o WORKFLOW geral da aplicação é definida nos valores da enum PDVState:

  • START - Valor inicial, utilizado somente na inicialização da aplicação.
    Define o Workflow de StartCheckStatus como INITING e dispara sua Thread de funcionamento.
    Quanto o processo de checagem incial ocorre o PDVState passa para o estado STARTCHECK.



Workdlow de Validação de Inicialização: StartCheckStatus

Esse é o WORKFLOW que cuida da checagem e inicialização inicial do sistema. Seus funcionamento é assim:

  • INITING - Estado inicial de começo das checkagens;
    Neste estágio o sistema começa a ser inicializado, como carregamento dos bundles.
    Tudo inicializado com sucesso, passa para o estado CHECKING_LOCALDB.
  • CHECKING_LOCALDB - Estado para verificação do banco de dados.
    Verifica se o banco de dados existe, se não existir o cria;
    Passa para o estado CHECKING_LOCALDB_VERSION;
  • CHECKING_LOCALDB_VERSION - Verifica se o banco de dados está na versão correta e faz as alterações/atualizações necessárias;
    Quando atualizado passa para o CHECKING_INSTALLATION;
  • CHECKING_INSTALLATION- Valida se a instalação do PDV está ok (empresa configurada, dados sincronizados, etc.).
    Se a instalação estiver OK vai para o estado INSTALLATION_OK, caso contrário para INSTALLATION_NEEDED.
  • INSTALLATION_NEEDED
    Nesse estado o PDVApp não faz nada, mas serve de sinalização para o PDVUI que a instalação precisa ser realizada, e a tela é exibida. Quando a tela de instalação é finalizada, o PDVUI sinaliza para o PDVAapp que volta para o estado de CHECKING_INSTALLATION.
  • INSTALLATION_OK - Estado sem operação, apenas sinalizando que a Instalação está completa.
    Passa automaticamente para o estado START_TERMINALAPP.
  • START_TERMINALAPP - Inicializa o Terminal Client (Reponsável por realizar a comunicação com o servidor).
    Após inicializá-lo passa automaticamente para o estado CHECKING_SERVER_ID.
  • CHECKING_SERVER_ID - Valida se o ID atual configurado na estação PDV está válido e cadastrado corretamente no servidor.
    Se o cadastro estiver OK passa para LOAD_CHECKOUT_DATA, caso contrário trava a aplicação em erro para garantir que seja reinstalada.


  • LOAD_CHECKOUT_DATA - Carrega as informações do checkout, se tiver persistido, ou se encontrar no banco de dados algum checkout aberto.
    Passa para o START_SYNCDATA.
  • START_SYNCDATA - Inicializa a Thread responsável por sincronizar os dados com/do servidor.
    Passa para o OK.


  • OK - Estado em que o WORKFLOW finalizou com sucesso. Utilizado para sinalizar outras partes do sistema que a inicialização terminou com sucesso e o sistema está pronto para ser utilizado.
    Sinaliza o PDVApp de que este workflou finalizou através do método app.freeStartCheck(), que dá sequência no workflow PDVState.


PDVUI