Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renato Muniz

Acumular Tempo Parado (rastreio)

Recommended Posts

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!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se entendi mas não seria mais simples gravar a data/hora apenas quando o status (parado/andado) mudar a busca seria uma simples diferença.

 

Publique o modelo pois facilita pensar uma solução.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Motta disse:

Não sei se entendi mas não seria mais simples gravar a data/hora apenas quando o status (parado/andado) mudar a busca seria uma simples diferença.

 

Publique o modelo pois facilita pensar uma solução.

 

 

Olá Motta, sim essas informações são gravadas nesse momento, mas mesmo assim como acumularia resolvendo todas as questões, estou modelando aqui uma opção que imaginei que talvez dê certo, o modelo para essa situação ainda to criando! Obg!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que a "apuração" não será possível via sql puro , ainda mais em mysql que não algo como "analytic functions" , acho que será necessário uma stored procedure para fazer isto.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Motta disse:

Creio que a "apuração" não será possível via sql puro , ainda mais em mysql que não algo como "analytic functions" , acho que será necessário uma stored procedure para fazer isto.

 

 

Vdd, é algo a se considerar! No mínimo resolver a quantidade de requisições ao servidor do banco!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por luannsr12
      Olá pessoal, ontem coloquei um repositório em meu GitHub , para quem deseja rastrear encomendas dos correios usando php, a chamada é bem simples, e retorna em JSON:
       
      <?php $obj = "CODIGO DE RASTREIO"; $url = "http://localhost/rastreio/api/obj.php?obj={$obj}"; $rastreio = file_get_contents($url); echo $rastreio; JSON:
      { "0": { "date":"10/06/2019", "hour":"14:14", "location":"SAO PAULO / SP", "action":"Objeto encaminhado", "message":"Objeto encaminhado de Agência dos Correios em SAO PAULO / SP para Unidade de Tratamento em SAO PAULO / SP", "change":"há 2 dias" } } https://github.com/luannsr12/correios-rastreio
      Vlw!!
    • Por noobroots
      Boa noite !
       
      Tenho  a seguinte query abaixo que me retorna a origem , a contagem e o percentual de  uma consulta.
      SELECT origem, count(*) AS contagem, count(origem) / (SELECT count(*) FROM atendimento_cad) * 100 as percentual          FROM atendimento_cad GROUP BY origem order by percentual desc  
      origem contagem    percentual 
      2000  5866    34.9875 3000   3099 18.4838 4000 2621 15.6328              
       
      porém preciso criar uma nova tabela para me retornar a soma do percentual ( acumulativo )ex:
       
      origem  contagem    percentual      Acumulado
      2000      5866              34.9875          34.9875
      3000      3099             18.4838          53.4713
      4000      2621             15.6328          69.1041
      e assim por diante até 100%
       
      Alguém pode me ajudar?
        
    • Por feeh27
      Bom dia,
       
      Estou procurando uma solução para avisar meu cliente por e-mail toda vez que o Correios atualizar o status do rastreio.
       
      A parte do envio do e-mail e de como obter o status eu já consegui resolver, o gargalo está em como montar um Webservice para requisitar no site dos correios o status e verificar se ele foi atualizado, se sim ele executa o script para o envio do e-mail.
       
      Para verificar se o status foi atualizado pensei em gravar ele no banco e depois verificar se houve alteração, não sei se é o melhor caminho, gostaria de uma opinião nessa parte.
       
      Atenciosamente,
      Felipe Dominguesche
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.