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 landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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