statsParJour.php 4.61 KB
Newer Older
1 2 3 4 5 6 7 8
<?php
require_once('config.php');
include_once('functions.php');
require_once('libs/Smarty.class.php');

//$smarty = new Smarty();

$minPeriode = new DateTime("2018-01-08");
9
$maxPeriode = new DateTime("2018-02-02");
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
$periodeEnCours = $minPeriode;

while($periodeEnCours < $maxPeriode)
{
    $h = intval($periodeEnCours->format('G'));
    $periodeEnCours->setTime($h - ($h % 6), 0);
    $filtreDate = $periodeEnCours->format('Y-m-d H:i:s');
    $maxDate = clone $periodeEnCours;
    $maxDate->add(new DateInterval('P1D'));
    $filtreMaxDate = $maxDate->format('Y-m-d H:i:s');

    //On récupère toutes les resume
    $requete = $pdo->query('SELECT r.*, s.insee 
    FROM resumeStatus r 
    INNER JOIN stations s ON s.code = r.code 
    WHERE r.date >= "'.$filtreDate.'" AND r.date < "'.$filtreMaxDate.'" AND r.duree = 360 ORDER BY r.code, r.date ASC');
    $resumes = $requete->fetchAll();

    //On parcourt les résumes, et on agglomère par station
    $stations = array();
    $minDate = null;
    $maxDate = null;
    foreach($resumes as $resume)
    {
        $codeStation = $resume['code'];
        if(!isset($stations[$codeStation]))
36 37 38 39 40
            $stations[$codeStation] = array('pris' => 0, 'rendu' => 0, 'Epris' => 0, 'Erendu' => 0, 'bornesPerdues' => [], 'bornesPerduesMax' => 0, 'insee' => $resume['insee']);
        $stations[$codeStation]['pris'] += $resume['nbBikePris'];
        $stations[$codeStation]['Epris'] +=  $resume['nbEBikePris'];
        $stations[$codeStation]['rendu'] += $resume['nbBikeRendu'];
        $stations[$codeStation]['Erendu'] +=  $resume['nbEBikeRendu'];
41 42
        if(isset($resume['nbEDockPerdusMoyenne']) && !is_null($resume['nbEDockPerdusMoyenne']))
            $stations[$codeStation]['bornesPerdues'][] = $resume['nbEDockPerdusMoyenne'];
JonathanMM's avatar
JonathanMM committed
43 44
        if(isset($resume['nbEDockPerdusMax']) && !is_null($resume['nbEDockPerdusMax']))
            $stations[$codeStation]['bornesPerduesMax'] = max($resume['nbEDockPerdusMax'], $stations[$codeStation]['bornesPerduesMax']);
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

        if($minDate == null || $minDate > $resume['date'])
            $minDate = $resume['date'];
        if($maxDate == null || $maxDate < $resume['date'])
            $maxDate = $resume['date'];
    }

    $minDateObj = new DateTime($minDate);
    $maxDateObj = new DateTime($maxDate);
    $maxDateObj->add(new DateInterval('PT6H')); //On ajoute 6 heures pour avoir la fin de la période
    /*$smarty->assign(array(
        'minDate' => $minDateObj->format('d/m à H:i'),
        'maxDate' => $maxDateObj->format('d/m à H:i')
    ));*/

    //On fait les stats sur les stations
    $stationsSansMouvement = 0;
    $totalPris = 0;
63
    $totalEPris = 0;
64
    $totalRendu = 0;
65
    $totalERendu = 0;
66
    $totalMoyenneBornesPerdues = 0;
JonathanMM's avatar
JonathanMM committed
67
    $totalMaxBornesPerdues = 0;
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
    $depts = array();
    $nomDept = array(
        75 => 'Paris',
        78 => 'Yvelines',
        91 => 'Essonne',
        92 => 'Hauts-de-Seine',
        93 => 'Seine-Saint-Denis',
        94 => 'Val-de-Marne',
        95 => 'Val-d\'Oise'
    );
    foreach($stations as $code => $stats)
    {
        if($stats['pris'] + $stats['rendu'] == 0)
            $stationsSansMouvement++;
        else
        {
            $totalPris += $stats['pris'];
            $totalRendu += $stats['rendu'];
86 87
            $totalEPris += $stats['Epris'];
            $totalERendu += $stats['Erendu'];
88 89 90 91 92 93 94
        }

        $deptStation = floor($stats['insee'] / 1000);
        if(!isset($depts[$deptStation]))
            $depts[$deptStation] = array('nb' => 1, 'nom' => (isset($nomDept[$deptStation]) ? $nomDept[$deptStation] : 'Inconnu'));
        else
            $depts[$deptStation]['nb']++;
95 96 97

        if(count($stats['bornesPerdues']) > 0)
            $totalMoyenneBornesPerdues += array_sum($stats['bornesPerdues']) / count($stats['bornesPerdues']);
JonathanMM's avatar
JonathanMM committed
98 99

        $totalMaxBornesPerdues += $stats['bornesPerduesMax'];
100 101
    }

102 103 104
    echo $periodeEnCours->format('d/m').': Retirés : '.($totalPris + $totalEPris).' (mécanique : '.$totalPris.' | électrique : '.$totalEPris.'); '.
    'Rendus : '.($totalRendu + $totalERendu).' (mécanique : '.$totalRendu.' | électrique : '.$totalERendu.'); '.
    'Bornes inutilisables : '.round($totalMoyenneBornesPerdues, 2).' (max : '.$totalMaxBornesPerdues.'); Stations sans mouvements : '.$stationsSansMouvement.'/'.count($stations)."<br />";
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

    /*$smarty->assign(array(
        'totalPris' => $totalPris,
        'totalRendu' => $totalRendu,
        'totalStation' => count($stations),
        'stationsSansMouvement' => $stationsSansMouvement
    ));

    $smarty->assign(array(
        'departements' => $depts
    ));*/
    $periodeEnCours->add(new DateInterval('P1D'));
}

//$smarty->display('stats.tpl');
exit();
?>