Ir ao conteúdo
  • Cadastre-se

Renato Muniz

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa noite pessoal, minha Entity tem um campo @NumberFormat(pattern = "#,##0.00") transient BigDecimal total; Esse campo é calculando la no meu repository com um JOIN.... o problema é que quando ponho ele não transitório eu não consigo exibir o valor dele na View tento como acima, como abaixo: @Transient @Column(updatable = false, insertable = false) @NumberFormat(pattern = "#,##0.00") private BigDecimal valortemporario; Meu desejo é utilizar esse campo calculado na View, mas sem persistir ele, quqndo mando salvar os dados enviando o objeto esse campo vai junto, utilizando o transient BigDecimal total ele retira da persistência mas não me deixa visualizar na view, to a um tempão procurando solução e não encontro, obrigado desde já!! Abaixo seque a query so pra efeito de visualizar o caso num todo!! public interface AtendimentosRepository extends JpaRepository<Atendimentos, Long> { String sqlPrincipal = "SELECT id_heados, usuario_heados, cadastro_heados, " + " sinistronumero_heados, pecastotal.valortemporario as total, " + "corretor_heados, custosadicionais_heados, veiculo_heados, empresa_heados, seguradora_heados, " + " datalanc_heados, dataprevsaida_heados, dataentrada_heados, deducao_heados,extramaoobra_heados ," + " extrapeca_heados, franquia_heados, maoobra_heados, materialpintura_heados,obschecklist_heados, " + " veiculo_km_heados, obsextras_heados,tipoatendimento_heados, totalpecas_heados, " + " datasaida_heados FROM heados " + " LEFT JOIN ( (SELECT pedos.controle_pedos,adicional_pedos," + " sum( ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') ) - ( " + " ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') ) * COALESCE(desconto_pedos,'0') /100" + " ) ) as valortemporario FROM pedos as pedos WHERE adicional_pedos = 'N'" + " group by pedos.controle_pedos) ) pecastotal ON controle_pedos " + " WHERE id_heados = :controle "; @Query(value = sqlPrincipal, nativeQuery = true) public Atendimentos atendimentoByControle(@Param("controle") Long controle); Obrigado!!! Renato Muniz.
  2. Olá pessoal , sempre nas minhas tabelas nunca criei campo Total, nos casos tipo... tabela_venda e tabela_pedidos, o que eu faço é um join somando os campos valor*quantidade daí é criado um campo "temporario" (Total)... correto?? pois bem, agora programando em java (spring) + JPA me deparei com problemas na hora de criar minhas classes anotadas como @Entity, pois esse campo "temporario" ta difícil de manipular na classe, pois na hora de persistir no banco ele o "JPA" tenta gravar esse campo "Total" também. Existe uma tag @transient que inibe essa persistência no banco, ele retira da serialização, porém também nao consigo visualizar o conteúdo dele na view (no HTML), ou seja, ele nao carrega nos métodos get() vem sempre null!! sei aqui é relacionado a banco de dados e acabei falando mais da linguagem do que o próprio banco, mas voltando ao assunto... Vocês preferem criar o campo Total da tabela e assim ter a preocupação de sempre atualizar o campo ao incluir ou editar um valor da tabela Pedidos , ou preferem fazer um JOIN executando um SUM(), dessa forma nao precisando se preocupar com atualizações na tabela Vendas???? com o zendFramework (PHP) eu nao tinha problema nenhuma fazia o que queria "mandava e desmandava" mas no "Spring" a coisa mudou!! Qual a preferência de vcs!! ?? obrigado! Renato Muniz.
  3. Obrigado por responder @DiF , na verdade o "problema" nem seria pra adquirir as empresas do determinado usuário, teria que ser uma tabela assim mesmo como você mencionou, o problema é que uso Spring + JPA , daí no meu repository onde monto a tabela eu nao tenho fazer um loop pra criar um where com as empresas que o usuario selecionasse para pesquisa, a ideia é a seguinte: quanto o usuario fosse fazer um pesquisa dos atendimentos por exemplo, ele poderia escolher quais as empresas ele quer filtrar, com um (select multiselect por exemplo), daí lá na montagem da pesquisa eu faria um laço dessa forma whr = " where " for empresas : emp { whr = whr + " atendimento.empresa = "+ emp.id+ " or " } do no fim das contas a string ficaria assim: where atendimento.empresa = 1 OR atendimento.empresa = 1 ... etc... resolveria, o problema é la no meu repository que é esse cara abaixo.. public interface AtendimentosRepository extends CrudRepository<Atendimentos, Long> { String sqlPrincipal = "SELECT id_heados, usuario_heados, cadastro_heados, " + " sinistronumero_heados, corretor_heados, " + " custosadicionais_heados, veiculo_heados, empresa_heados, " + " seguradora_heados, " + " pecastotal.totalpecas as totalpecas, " + " datalanc_heados, dataprevsaida_heados, dataentrada_heados, deducao_heados,extramaoobra_heados ," + " extrapeca_heados, franquia_heados, maoobra_heados, materialpintura_heados,obschecklist_heados, " + " veiculo_km_heados, obsextras_heados,tipoatendimento_heados, " + " datasaida_heados FROM heados " + " LEFT JOIN ( (SELECT pedos.controle_pedos,adicional_pedos," + " sum( ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') ) - ( " + " ( COALESCE(valor_pedos,'0') * COALESCE(quantidade_pedos,'0') ) * COALESCE(desconto_pedos,'0') /100" + " ) ) as totalpecas FROM pedos as pedos WHERE adicional_pedos = 'N'" + " group by pedos.controle_pedos) ) pecastotal ON controle_pedos " //----- AQUI QUE SERIA O FOR PRA MONTAR A LINHA DO WHERE COM AS EMPRESAS QUE O USUARIO SELECIONOU + " WHERE id_heados = :controle "; @Query(value = sqlPrincipal, nativeQuery = true) public Atendimentos atendimentoByControle(@Param("controle") Long controle); } ele nao deixa adicionar linhas que neo extenda do repository, pelo menos eu nao consegui, daí tem um tal de criteria, que meio chato de fazer mas vou ter q da uma estudada AT+ e obrigado
  4. Olá pessoal bom dia, olha só... to terminando um sistema, daí tem o seguinte, cada usuário logado terá N empresas "oficina mecânica" cadastrada em seu nome, possibilitando ele selecionar em qual deseja incluir um cadastro, dessa forma , nas pesquisas por exemplo de clientes "MARIA" o sistema terá que filtrar todas as "MARIAS" que esteja cadastrada com 1 das empresas deste usuário logado, exemplo. Pensei em fazer da seguinte forma... o usuario 1 tem no nome dele a empresa , 1,2,3 (IDs) em uma subtabela *** QUANDO O USUÁRIO LOGAR O SISTEMA VAI GUARDAR OS IDS DAS EMPRESAS EM QUE ELE ESTA CADASTRADO, ASSIM QUANDO ELE FOR INCLUIR ALGO, O SISTEMA DA UM FOR NOS IDS E INCLUI DE ACORDO COM A QTD DE IDS *** FAZENDO A REFERENCIA DOS CADASTROS AO IDS DAS EMPRESAS ou seja pra cada inclusão do cadastro eu gravo na sub-tabela a mesma quantidade de registros que o usuário tem cadastrado nas empresas, ou seja, se o usuário é cadastrado em 3 empresas eu incluo na tabela para o relacionamento 3 registros , pensando num sistema grande essa tabela vai crescer bastante não acham??? enfim, daí para fazer a pesquisa seria tipo isso "select id_cadatro, subtabela.id_cadastro from cadastros left join subtabela on idsub = id_cad" for (ids_cadastrados as subtabela) where " o r" + "subtabela.id_cadastro = subtabelaid_subtabela " endfor teria uma maneira melhor? qq vcs acham?? isso vai ocorrer em varias outras tabelas... e assim esse retorno de dados será bem grande, esse intuito é pra resolver o seguinte... o cliente vai controlar varias empresas dele no mesmo sistema e ele quer as informações numa só tela, os relatórios das empresas que ele controla, em precisar ta logando em uma determinada empresa, sei que eu posso por um SELECT pra ele escolher na hora de fazer um filtro ou na hora de incluir um cadastro, mas queria fazer automático quando cadastrar um cliente ele ficar visível para as 3 empresas que ele controla qq dúvida to por aqui pessoal, já agradeço desde já!!! obrigado!!! bom dia à todos!! Oss!!
  5. Bom dia pessoal AJUDA por favor , há dois dias estou tentando acumular o tempo parado do veículo, através das informações que recebo do rastreador, é o seguinte... a cada 1min recebo as informações, uma delas é se o veiculo está parado 0 = parado , 1 = em movimento, entre as outras colunas tem uma data_hora (dd/mm/yy hh:mm), a cada recebimento e SE parado , preciso ficar acumulando o tempo parado do mesmo!! Certamente já pensei dessas maneiras, ao receber uma nova informação e SE parado, vou procurar na tabela de todas as informações, a último momento parado do mesmo veículo , daí subtraio a hora atual com a hora do momento anterior, exemplo , peguei a informação atual PARADO agora as 08:00, fui buscar na tabela a ultima informação PARADO, registrado anteriormente, que foi as 07:30, então entre eles tem um tempo de 30min, daí teoricamente ele ficou parado 30min. O problema é que essas informações vou solicitar a cada 1min e registrar tudo no banco, esse banco logo logo, vai crescer muito, um exemplo aqui é uma tabala do sistema antigo, tem mais de 16 milhões, imagina a cada 1min eu ter que fazer essa consulta, pegar o ultimo registro do determinado veiculo PARADO nessa tabela. Fora que ao atualiza a janela do sistema (WEB, Java , Spring), preciso fazer além desse filtro os outros.. Outra Maneira seria criar uma tabela separada, (Tempo_Parado), e registrar o momento (data_hora) , veiculo_id, daí a tabela fica um pouco menor que a do rastreio propriamente dito, então a cada 1min se o veiculo tiver parado, vou nessa tabela e procuro o momento da ultima parada dele, e vou acumulando. Mas tem um problema nessas teoria.. imagina só... o cara parou as 8:00 daí fui acumulando ate as 8:30, já tenho aí 30min parado, agora o cara começou a se movimentar... rodou uns 30min e o cara para novamente...... ou seja PAROU as 9:00, quando eu for pegar a última hora que ele parou o sistema vai trazer 08:30, e se eu for usar a técnica acima citado por mim, o sistema vai calcular assim , ultima parada as 8:30, pardou agora as 9:00, tempo parado MAIS 30min... espero que vocês tenham entendido...... Pensando um pouco agora, eu poderia quando filtrar as ultimas paradas, sempre pegar as duas 2 ultimas informações, e se a penúltima informação era EM MOVIMENTO, ja sei que essa parada agora é uma parada START e não um continuação de PARADO, tipo... 07:30 Parado 08:00 Parado --------30min 08:10 Movimento 08:30 Parado se for pelo sistema, ele vai calcular 8:30 - 8:00 vai trazer 30min PARADO, que não é (nessa última situação ele nao ficou parado 30min), na verdade ele parou agora o que pensei nesse caso foi, pegar esses 2 últimos, e caso o penúltimo seja EM MOVIMENTO, desconsiderar o calculo e somente gravar que parou, daí na próxima consulta PARADO as 8:50, o sistema vai me trazer 8:50 - 8:30 = 20min parado. Assim acredito que funcione, porém vai da trabalho e pesando no banco terá muitas consultas em tabelas grandes de volume!!! Qualquer dica de vocês pode ajudar a melhorar, deve ter algo mais simples!!! Agradeço desde já!!!! Bom dia!!!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...