Ir para conteúdo

Arquivado

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

daniel8634

Rotina de fila com problema

Recommended Posts

Fala pessoal, tudo bem?

Estou com um problema com uma rotina, que tem como funcionalidade principal a fila, é uma rotina de fila, que basicamente funciona com o envio de uma solicitação e fica aguardando até o retorno dessa solicitação ser satisfeita, caso não ocorra passa para outra solicitação e fica com esse loop, até que se encerre o processo, o que esta ocorrendo é que aparentemente essa rotina fica travando em algum momento ou por algum motivo a resposta não chega de forma adequada para que o processo de fila funcione de forma correta, abaixo vou posta a rotina completa para vocês darem uma olhada e de repente visualizar algo que não esteja conseguindo visualizar, gostaria de contar com a ajuda de vocês para tentarem ver se tem algo de errado com a rotina.

 

<?php
error_reporting(0);
include_once '../apporioconfig/start_up.php';
header("Content-Type: application/json");

include 'pn_android.php';
include 'pn_iphone.php';
include 'one-signal.php';
include 'firebase_new.php';
$query = "select * from admin_panel_settings WHERE admin_panel_setting_id=1";
$result = $db->query($query);
$admin_settings = $result->row;
$normal_ride_radius = $admin_settings['normal_ride_radius'];
$admin_panel_request = $admin_settings['admin_panel_request'];
$admin_panel_firebase_id = $admin_settings['admin_panel_firebase_id'];

$onesignal_rest_key = $admin_settings['onesignal_rest_key'];
$onesignal_app_id = $admin_settings['onesignal_app_id'];
$onesignal_redirect_url = $admin_settings['onesignal_redirect_url'];

$user_id = $_REQUEST['user_id'];
$coupon_code = $_REQUEST['coupon_code'];
$pickup_lat = $_REQUEST['pickup_lat'];
$pickup_long = $_REQUEST['pickup_long'];
$pickup_location = $_REQUEST['pickup_location'];
$drop_lat = $_REQUEST['drop_lat'];
$drop_long = $_REQUEST['drop_long'];
$drop_location = $_REQUEST['drop_location'];
$car_type_id = $_REQUEST['car_type_id'];
$language_code = $_REQUEST['language_code'];
$payment_option_id = $_REQUEST['payment_option_id'];
$card_id = $_REQUEST['card_id'];
$pem_file = $_REQUEST['pem_file'];
if ($user_id != "" && $pickup_lat != "" && $pickup_long != "" && $pickup_location != "" && $car_type_id != "" && $payment_option_id != "") {
    if ($pem_file == "") {
        $pem_file = 1;
    }

    $time = date("H:i:s");
    $dt = DateTime::createFromFormat('!d/m/Y', date("d/m/Y"));
    $data = $dt->format('M j');
    $day = date("l");
    $date1 = $day . ", " . $data;
    $date1 = strftime('%d-%m-%Y', strtotime($date1)); //CONTROLD - 13/10/2018 - Alteração para formatar data


    $query3 = "select * from driver where verification_status=1 AND driver_category IN (1,3) AND car_type_id='$car_type_id'  
    and online_offline = 1 and driver_admin_status=1 and busy=0 and login_logout=1 order by rand()";
    $result3 = $db->query($query3);
    $ex_rows = $result3->num_rows;
    if ($ex_rows == 0) {
        $image = "";
        $last_time_stamp = date("h:i:s A");
        $query1 = "INSERT INTO no_driver_ride_table(user_id,coupon_code, pickup_lat, pickup_long,pickup_location,drop_lat,drop_long,drop_location,
	    ride_date,ride_time,ride_type,ride_status,ride_image,car_type_id,payment_option_id,card_id,last_time_stamp) 
	    VALUES ('$user_id','$coupon_code','$pickup_lat','$pickup_long','$pickup_location','$drop_lat','$drop_long','$drop_location',
	    '$date1','$time','1','1','$image','$car_type_id','$payment_option_id','$card_id','$last_time_stamp')";
        $db->query($query1);
        $language = "select * from table_messages where language_code='$language_code' and message_id=34";
        $lang_result = $db->query($language);
        $lang_list = $lang_result->row;
        $message = $lang_list['message'];
        $re = array('result' => 0, 'msg' => $message);
    } else {

        $list3 = $result3->rows;
        $c = array();
        foreach ($list3 as $login3) {
            $driver_lat = $login3['current_lat'];
            $driver_long = $login3['current_long'];

            $theta = $pickup_long - $driver_long;
            $dist = sin(deg2rad($pickup_lat)) * sin(deg2rad($driver_lat)) + cos(deg2rad($pickup_lat)) * cos(deg2rad($driver_lat)) * cos(deg2rad($theta));
            $dist = acos($dist);
            $dist = rad2deg($dist);
            $miles = $dist * 60 * 1.1515;
            $km = $miles * 1.609344;
            if ($km <= $normal_ride_radius) {
                $c[] = array("driver_id" => $login3['driver_id'], "distance" => $km, );
            }
        }
        // inicio rotina grava viagem
        //print_r($c);


        if (!empty($c)) {

            // aqui - CONTROLD - 28/01/2019 - Validação para verificar se já tem viagem em andamento ao solicitar uma nova viagem

            $query_verifica = "select user_id,viagem from user where user_id='$user_id' and viagem = 'S' order by user_id asc";
            $result_verifica = $db->query($query_verifica);
            $quant_verifica = $result_verifica->num_rows;

            //if ($quant_verifica >= 1) {                
            //    $re = array('result' => 0, 'msg' => "Você já possui uma viagem em andamento, aguarde o motorista ou cancele a viagem.", 'details' => "");
            //}else{
                
              $image = "";
              $date = date("Y-m-d");
              $last_time_stamp = date("h:i:s A");
              $query1 = "INSERT INTO ride_table (user_id,coupon_code, pickup_lat,pickup_long,pickup_location,drop_lat,drop_long,drop_location,
                ride_date,ride_time,ride_type,ride_status,ride_image,car_type_id,payment_option_id,card_id,last_time_stamp,date,pem_file) 
                    VALUES ('$user_id','$coupon_code','$pickup_lat','$pickup_long','$pickup_location','$drop_lat','$drop_long','$drop_location',
                '$date1','$time','1','1','$image','$car_type_id','$payment_option_id','$card_id','$last_time_stamp','$date','$pem_file')";
                $db->query($query1);
                $last_id = $db->getLastId();
                $query3 = "select * from ride_table where ride_id='$last_id'";
                $result3 = $db->query($query3);
                $list = $result3->row;
                $ride_status = $list['ride_status'];
            
                $data_viagem = $list['ride_time'];
            
                sendMessage($onesignal_app_id, $onesignal_redirect_url, $onesignal_rest_key);
                $firebase_id = uniqid();
                new_ride_sound($admin_panel_firebase_id, $firebase_id);
                clear($admin_panel_firebase_id, $firebase_id);
                $nodes = array();
                $repetir = 0;
                foreach ($c as $value) {
                    $distance[] = $value['distance'];
                }
            
            

                $repetir = 0;
                $id_motorista = "aaaa";
                //array_multisort($distance, SORT_ASC, $c);
                foreach ($c as $driver) { 
                // echo "aqui envia push ".$driver['driver_id'] ."<br>";
                // echo "repetir: ".$repetir;
                // push                
                    // aqui
                    $ride_id = (string)$last_id;
                    $nodes[$driver_id] = array('ride_id' => $ride_id, 'ride_status' => "1");
                    $query3 = "select * from driver_ride_allocated where driver_id='$driver_id'";
                    $result3 = $db->query($query3);
                    $driver_allocated = $result3->row;
                    if (empty($driver_allocated)) {
                        $query5 = "INSERT INTO driver_ride_allocated (driver_id,ride_id,ride_mode) VALUES ('$driver_id','$ride_id','1')";
                        $db->query($query5);
                    } else {
                        $query5 = "UPDATE driver_ride_allocated SET ride_id='$ride_id' WHERE driver_id='$driver_id'";
                        $db->query($query5);
                    }


                    if ($repetir == 1){
                         break;
                    }
                                    $driver_id = $driver['driver_id'];
                                    $query4 = "select * from driver where driver_id='$driver_id'";
                                    $result4 = $db->query($query4);
                                    $list4 = $result4->row;
                                    $device_id = $list4['device_id'];
                                    $language = "select * from table_messages where language_code='$language_code' and message_id=35";
                                    $lang_result = $db->query($language);
                                    $lang_list = $lang_result->row;
                                    $message = $lang_list['message'];
                                    $ride_id = (String)$last_id;
                                    $ride_status = '1';

                                    //echo "device id: ".$device_id."<br>";
                                    //echo "driver id: ".$driver_id."<br>";
                                    
                                    
                                    $codi_motorista = $driver['driver_id'];
                                    $query5 = "INSERT INTO ride_allocated (allocated_ride_id, allocated_driver_id,allocated_date) VALUES ('$ride_id','$codi_motorista','$date')";
                                    $db->query($query5);        
                                    
                                    
                                    new_ride($nodes,$admin_panel_firebase_id);
                                    if ($device_id != "") {
                                       // echo "entrou para enviar push"."<br>";
                                        if ($list4['flag'] == 1) {
                                             IphonePushNotificationDriver($device_id, $message, $ride_id, $ride_status, $pem_file);
                                        }else {
                                            //echo "entrou no push android "."<br>";
                                            //echo "device id: ".$device_id. "<br>";
                                            //echo "message id: ".$message. "<br>";
                                            //echo "ride id: ".$ride_id. "<br>";
                                            //echo "ride status id: ".$ride_status. "<br>";
                                            AndroidPushNotificationDriver($device_id, $message, $ride_id, $ride_status);
                                         }
                                    }                       
                
                //fim push
                //echo "entrou 0";
                //echo "motorista while: ".$driver['driver_id'];
                //echo "id do motorista: ".$id_motorista ."<br>";
                //echo "id do driver: ".$driver['driver_id'] ."<br>";
                    while ($repetir == 0) {
                        
                        $hora_atual = date('H:i:s');
                        //echo "hora atual: ".$hora_atual;
                        //echo "<br>"." hora da viagem: ".$data_viagem;
                       // echo "<br>"." diferença: ".calculaTempo($data_viagem,$hora_atual);
                        //echo "<br>"."hora da viagem: ".$data_viagem;
                    
                    
                    
                        // inicio
                    
                        //echo "data 1: ".$data_viagem;
                        //echo "<br>"."data 2 ".$hora_atual;
                    
                    
                    /*
                        if (calculaTempo($data_viagem,$hora_atual) >= 01){
                             //echo "parou na hora deu tempo "."<br>";
                       
                            //$query_tempo = "UPDATE ride_table SET ride_status='40' WHERE user_id = '$user_id' and ride_id='$ride_id'";
                           // $db->query($query_tempo);
                        
                            $repetir = 1;
                         break;
                         
                       }
                       */
                       
                       
                       
                       
                        /*}
                        else{
                            echo "entrou na hora continuou"."<br>";
                            continue;
                              
                             //    continue;
                        }
                        */
                        
                    
                    
                    
                    
                    //fim
                    //echo "chegou rejeita? <br>"; 
                    
                        $id_driver = $driver['driver_id'];
                        //echo "id driver: ".$id_driver."<br>";
                        //echo "id da viagem ".$ride_id ."<br>";
                        $query_rejeita = "select reject_ride_id,reject_driver_id from ride_reject where reject_ride_id = '$ride_id' 
                                      and reject_driver_id='$id_driver'";
                        $result_rejeita = $db->query($query_rejeita);
                        $list_rejeita = $result_rejeita->num_rows;

                        //echo "id do motorista: ".$driver['driver_id'] ."<br>";
                         //echo "rejeitou? ".$list_rejeita ."<br>";
                         
                       
                        if ($list_rejeita > 0){
                            //&& $codigo_motorista != $driver['driver_id']) {  
                            //echo "entrou 2";
                            //print_r("print motorista id: ".$driver);
                            //echo "motorista: ".$driver['driver_id'];
                            //echo "passou print <br>";                            
                                
                            //// echo "entrou rejeitou"."<br>";
                            $repetir = 0;
                            //$list_rejeita = 1;
                            break; 
                            //continue;
                        }
                        else{
                            //echo "entrou else rejeitou"."<br>";
                            $repetir = 0;
                            //continue;
                        } 
                        

                        // aceitou viagem
                        //echo "aceitou: entrando verificação se aceitou";
                        //echo "Chegou aceitou viagem"."<br>";
                        //sleep(5);
                        $query_consulta = "select ride_status from ride_table where ride_id = '$ride_id' and ride_status = '3' and user_id = '$user_id'";
                        $result_consulta = $db->query($query_consulta);
                        $lista_consulta = $result_consulta->num_rows;
                        //$repetir = $lista_consulta;

                        //echo "aceitou: " . $lista_consulta;
                        
                        
                        if ($lista_consulta >= 1) {

                            //echo "aceitou viagem"."<br>";
                            $repetir = 1;
                           // break;
                        }else{
                             //echo "continuou aceitou viagem"."<br>";
                             $repetir = 0;
                            continue;
                        }   
                        
                        
                    
                    //fim aceitou viagem
                    
                    // auto cancelada
                        //echo "Chegou entrou alto cancelada"."<br>";
                        $query_autocancel = "select ride_status from ride_table where ride_id = '$ride_id' and (ride_status = '2' or ride_status = '15') and user_id = '$user_id'";
                        $result_autocancel = $db->query($query_autocancel);
                        $lista_autocancel = $result_autocancel>num_rows;
                        
                        
                        if ($lista_autocancel >= 1) {
                        //echo "entrou alto cancelada"."<br>";
                        
                            $repetir = 1;
                           // break;
                        
                        }else{
                           //echo "continuou auto cancelada"."<br>";
                          //  continue;
                        }   
                        
                        
                    
                    
                        
                        $query_autocancel_passageiro = "select ride_status from ride_table where ride_id = '$ride_id' and ride_status = '40' and user_id = '$user_id'";
                        $result_autocancel_passageiro = $db->query($query_autocancel_passageiro);
                        $lista_autocancel_passageiro = $result_autocancel_passageiro>num_rows;
                        if ($lista_autocancel_passageiro >= 1) {
                        // echo "entrou alto cancelada"."<br>";
                            $repetir = 1;
                            break;
                        }else{
                            //echo "continuou auto cancelada"."<br>";
                            continue;
                        }   
                        
                    
                    
                        // fim auto cancelada

                         // verifica se passou 1 minuto em relação a solicitação da viagem, caso sim sai fora
                    

                    
                    
                        //$hora_atual = date('H:i:s');
                        //echo "hora atual: ".$hora_atual;
                        //echo "Diferença de hora: ".difDeHoras($hora_atual,$data_viagem);

                        // fim
                    

                        //echo "aqui envia push";
                        
                        if ($repetir == 0){
                            continue;
                        }
                        
                        $id_motorista = $driver['driver_id'];
                
                 }
            
            }

            // 28/01/2019 - CONTROLD - Atualiza campo na tabela de usuarios para controlar solicitação de viagens
            //$query_update_user = "UPDATE user SET viagem='S' WHERE user_id='$user_id'";
            //$db->query($query_update_user);


                    $query5 = "INSERT INTO table_user_rides(booking_id,ride_mode,user_id) VALUES ('$last_id','1','$user_id')";
                    $db->query($query5);
        
                    $query3 = "select * from ride_table where ride_id='$last_id'";
                    $result3 = $db->query($query3);
                    $list = $result3->row;
                    //echo "entrou aqui";
                    $re = array('result' => 1, 'msg' => "" . $km, 'details' => $list);          
   
         //}      
        } else {
            $image = "";
            $last_time_stamp = date("h:i:s A");
            $query1 = "INSERT INTO no_driver_ride_table (user_id,coupon_code, pickup_lat, pickup_long,pickup_location,drop_lat,drop_long,drop_location,
    	    ride_date,ride_time,ride_type,ride_status,ride_image,car_type_id,payment_option_id,card_id,last_time_stamp) 
	        VALUES ('$user_id','$coupon_code','$pickup_lat','$pickup_long','$pickup_location','$drop_lat','$drop_long','$drop_location',
	        '$date','$time','1','1','$image','$car_type_id','$payment_option_id','$card_id','$last_time_stamp')";
            $db->query($query1);
            $language = "select * from table_messages where language_code='$language_code' and message_id=36";
            $lang_result = $db->query($language);
            $lang_list = $lang_result->row;
            $message = $lang_list['message'];
            $re = array('result' => 0, 'msg' => "Sem motorista", );
        }
    }

    }else{
        $re = array('result' => 0, 'msg' => "Faltou informar algum campo");   
    }    
   
    echo json_encode($re, JSON_PRETTY_PRINT);
    
    
    
 
    /*
    
function difDeHoras($hIni, $hFinal)
{        
    // Separa á hora dos minutos
    $hIni = explode(':', $hIni);
    $hFinal = explode(':', $hFinal);
    
    // Converte a hora e minuto para segundos
    $hIni = (60 * 60 * $hIni[0]) + (60 * $hIni[1]);
    $hFinal = (60 * 60 * $hFinal[0]) + (60 * $hFinal[1]);
    
    // Verifica se a hora final é maior que a inicial
    if(!($hIni < $hFinal)) {
        return false;
    }
    
    // Calcula diferença de horas
    $difDeHora = $hFinal - $hIni;
    
    //Converte os segundos para Hora e Minuto
    $tempo = $difDeHora / (60 * 60);
    $tempo = explode('.', $tempo); // Aqui divide o restante da hora, pois se não for inteiro, retornará um decimal, o minuto, será o valor depois do ponto.
    $hora = $tempo[0];
    @$minutos = (float) (0) . '.' . $tempo[1]; // Aqui forçamos a conversão para float, para não ter erro.
    $minutos = $minutos * 60; // Aqui multiplicamos o valor que sobra que é menor que 1, por 60, assim ele retornará o minuto corretamente, entre 0 á 59 minutos.
    $minutos = explode('.', $minutos); // Aqui damos explode para retornar somente o valor inteiro do minuto. O que sobra será os segundos
    $minutos = $minutos[0];
    
    //Aqui faz uma verificação, para retornar corretamente as horas, mas se não quiser, só mandar retornar a variavel hora e minutos
    if (!(isset($tempo[1]))) {
        if($hora == 1){
            return $hora;
        } else {
            return $hora;
        }
    } else {
        if($hora == 1){
            if($minutos == 1){
                return $hora;//'A diferen&ccedil;a &eacute; de ' . $hora . ' Hora e ' .$minutos . ' Minuto.';
            } else {
                return $hora;//'A diferen&ccedil;a &eacute; de ' . $hora . ' Hora e ' .$minutos . ' Minutos.';
            }
        } else {
            if($minutos == 1){
                return $minutos;
            } else {
                return $minutos;
            }
        }
    }
    
}  

*/
  
  
function calculaTempo($hora_inicial, $hora_final) {
$i = 1;
$tempo_total;

$tempos = array($hora_final, $hora_inicial);

foreach($tempos as $tempo) {
$segundos = 0;

list($h, $m, $s) = explode(':', $tempo);
$segundos += $h * 3600;
$segundos += $m * 60;
$segundos += $s;

$tempo_total[$i] = $segundos;

$i++;
}
$segundos = $tempo_total[1] - $tempo_total[2];

$horas = floor($segundos / 3600);
$segundos -= $horas * 3600;
$minutos = str_pad((floor($segundos / 60)), 2, '0', STR_PAD_LEFT);
$segundos -= $minutos * 60;
$segundos = str_pad($segundos, 2, '0', STR_PAD_LEFT);

return "$minutos";
}  
  
 ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas preciso entender e resolver um problema.
       
      Tenho uma Rotina que o usuário seleciona os produtos que deseja para requerer ao setor responsável.
       
      O usuário escolhe um produto qualquer e Clicla em um button para incluir a lista.

      O problema que estou enfrentando é que após escolher o produto e teclar ENTER o Sistema já salva no BD.
       
      Gostaria de criar uma Tecla de Atalho, para quando incluir/escolher o produto na lista, o usuário tecla como exemplo:
      ALT+A  para agregar a lista
      ALT+S para salvar a lista de itens desejados.

      Assim, quando teclar enter, o sistema não dispara o GRAVAR na Base de Dados.

      Grato,

      Cesar
       
       
       
×

Informação importante

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