Pessoal, sou novato em programação e estou com uma situação que não consigo implementar a seguinte ideia:
A empresa está desenvolvendo um software pecuário e temos a seguinte situação:
Ao efetuar o cadastro de animais (gado) iniciamos com o nascimento do bezerro que vai até 12 meses. Após passamos a classificá-lo como garrote e esse vai até 24 meses e finalmente, entra a fase adulta, indo de 24 meses acima e no caso, passa para boi.
Desta forma, como eu posso implementar no meu sistema para que quando eu cadastrar um animal, o sistema altere automaticamente esse animal, mudando a classe dele (bezerro x garrote x boi) quando atingir a idade?
Como implementar isso no código JAVA e banco de dados PostGresql?
A atualização automaticamente vai dar baixa no código atual (bezerro cód. 1111) e mudar para um novo código (garrote cod 1112)… Isso terá de afetar a base de dados…
Nâo to conseguindo ter a ideia para implementação dessas rotinas…
Desculpe se não está sendo feita a postagem no local correto. Só novo no GUJ.
Agradeço a atenção e ajuda.
Ótima semana.
Adilson Reis
Alterar classificação de um produto quando este atingir determinada idade?
7 Respostas
Nao sei exatamente em qual parte está sua dúvida em java, mas em alto nível uma soluçao seria:
- Criar uma funçao que encontre todos bezerros e os transforme em garrotes
- Criar uma funçao que encontre todos garrotes e os transforme em adultos
- Criar uma tarefa agendada para rodar todos os dias que execute as funçoes acima.
Para agendar tarefas você pode procurar sobre Cron jobs, Quartz ou schedulers em geral.
O problema é que como você mesmo disse, teria de ser algo em nível avançado, e os meus conhecimentos ainda são básicos, mas eu entendi a sua linha de raciocínio.
Vou tentar estudar alguma coisa, buscar ajuda.
Obrigado.
Outra opção, caso queira deixar essa tarefa no banco de dados, é usar um job agendado. No caso do Postgre, há o PGAgent, que permite criar uma tarefa e configurar sua execução para um determinado horário. Veja: https://www.pgadmin.org/docs/1.4/pgagent-jobs.html .
Basicamente, você cria um script (como uma trigger ou procedure) que executa sozinha (sem interferência da aplicação) em um determinado horário (1h da manhã, por exemplo, quando provavelmente há pouco acesso ao sistema). É um método muito usado para tarefas assim, especialmente se forem gigantes.
Abraço.
Um bezerro que passou a ser garrote continua sendo o mesmo animal na base.
Isso é talvez o grande problema. No caso como o TerraSkilll falou as triggers ou procedures farão isso para você. O detalhe é que terá de varrer todos os “bezerros” (desde o cadastro até 12 meses) e o mesmo para os “garrotes” que passarão a ser bois. De fato ter no banco um campo “bezerro” ou “garrote” não vai fazer muito sentido. Talvez, em alto nível, ter um “nome” ou “tipo” e depois você “eleva” ele para o próximo nível (bezerro para garrote e assim vai) será mais fácil de controlar. Mantendo sempre a mesma ID (se estiver pensando nisso) você sempre vai achar o “animal” não importando se está em bezerro, garrote ou boi. E o controle estará bem mais na sua mão.
Acredito eu…
Apesar da sugestao do @TerraSkill ser totalmente válida, eu geralmente evito jobs e procedures no banco quando posso, por alguns problemas que costumam vir acompanhados disso:
-
A lógica de decidir o tipo do animal, fica separada do resto da aplicaçao (na procedure). E manter procedures em controle de versao nem sempre é tao simples (Garantir que a procedure instalada no banco é a mesma no controle de versao)
-
Para novas pessoas trabalhando no sistema, nao é muito intuitivo descobrir como a categoria dos animais muda “sozinha”. O primeiro lugar que vao procurar é no código fonte e nao vao encontrar nada. (Trabalhei num lugar uma vez que usava um job do oracle para gerar amortizaçao de contabilidade. O desenvolvedor na época atribuiu a “alguma mágica” o fato das parcelas aparecerem todo mês. Descobri de onde vinha aquilo apenas alguns meses depois quando a lógica falhou num ano bissexto)
-
Automatizar testes na aplicaçao é geralmente muito mais simples do que em procedures no banco.
Enfim, nada que seja impossível de resolver, mas geralmente deixar lógica na aplicaçao é a coisa mais simples a fazer e bom o suficiente.
Concordo. Minha ideia foi sugerir uma alternativa. Cada solução traz suas próprias particularidades.
Abraço.