Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 41dd5f26

Přidáno uživatelem horkym před téměř 7 roky(ů)

refs #6943: Cron - uprava pro novou verzi databaze

Zobrazit rozdíly:

cron/cron.php
51 51
        }
52 52
        
53 53
        // Pridat zaznamy z vybraneho dne.
54
        $insertDate = array();
54 55
        $insertRTT = array();
55 56
        $insertRT = array();
56 57
        $insertOneDay = array();
57
        process_traffic_matrix($parser, $traffic, $trafficOneDay, $DAO->findFirstId("zaznam_cas"), $DAO->findFirstId("zaznam"), $DAO->findFirstId("zaznam_prum_den"), $insertRTT, $insertRT, $insertOneDay, $date->format("Y-m-d"));
58
        $DAO->insertTrafficData($insertRTT, $insertRT, $insertOneDay);
58
        process_traffic_matrix($parser, $traffic, $trafficOneDay, $DAO->findFirstId("datum"), $DAO->findFirstId("zaznam_cas"), $DAO->findFirstId("zaznam"), $DAO->findFirstId("zaznam_prum_den"), $insertDate, $insertRTT, $insertRT, $insertOneDay, $date->format("Y-m-d"));
59
        $DAO->insertTrafficData($insertDate, $insertRTT, $insertRT, $insertOneDay);
59 60
    } else if ($date != NULL) {
60 61
        // Data pro vybrany den uz v databazi jsou.
61 62
        $logs->log(Logging::WARNING, "Pro vybrany den (".$date->format("d.m.Y").") jiz data v databazi jsou.");
cron/dao/dao.php
12 12
    }
13 13
    
14 14
    public function insertVehicles() {
15
        $query = "SELECT COUNT(*) AS total FROM vozidla";
15
        $query = "SELECT COUNT(*) AS total FROM vozidlo";
16 16
        $stmt = $this->dbh->executeQuery($query);
17 17
        
18 18
        if ($stmt->fetchAssoc()["total"] < 1) {
19
            // Pokud v tabulce s vozidlama neni zadny zaznam, pridat vsechny moznosti.
20
            $query = "INSERT INTO vozidla (id, nazev) VALUES ";
19
            // Pokud v tabulce s vozidly neni zadny zaznam, pridat vsechny moznosti.
20
            $query = "INSERT INTO vozidlo (id, nazev) VALUES ";
21 21
            $query .= "('0', 'Neznámé vozidlo'), ";
22 22
            $query .= "('1', 'Motocykl'), ";
23 23
            $query .= "('2', 'Auto'), ";
......
36 36
    public function controlTrafficData($dateStr) {
37 37
        $dateTo = new DateTime($dateStr);
38 38
        $dateTo->modify("+1 day");
39
        $query = "SELECT COUNT(*) AS total FROM zaznam_cas WHERE datetime_od >= '$dateStr' AND datetime_od < '".$dateTo->format('Y-m-d')."';";
39
        $query = "SELECT COUNT(*) AS total FROM datum WHERE od >= '$dateStr' AND od < '".$dateTo->format('Y-m-d')."';";
40 40
        $stmt = $this->dbh->executeQuery($query);
41 41
        return $stmt->fetchAssoc()["total"] < 1;
42 42
    }
43 43
    
44
    public function insertTrafficData($insertRTT, $insertRT, $insertOneDay) {
45
        for ($i = 0; $i < 3; $i++) {
44
    public function insertTrafficData($insertDate, $insertRTT, $insertRT, $insertOneDay) {
45
        for ($i = 0; $i < 4; $i++) {
46 46
            $query = "";
47 47
            $values = "";
48 48
            $counter = 0;
49 49
            $array = NULL;
50 50
            
51 51
            if ($i == 0) {
52
                $query = "INSERT INTO datum VALUES ";
53
                $array = &$insertDate;
54
            } else if ($i == 1) {
52 55
                $query = "INSERT INTO zaznam_cas VALUES ";
53 56
                $array = &$insertRTT;
54
            } else if ($i == 1) {
57
            } else if ($i == 2) {
55 58
                $query = "INSERT INTO zaznam VALUES ";
56 59
                $array = &$insertRT;
57 60
            } else {
......
62 65
            for ($j = 0; $j < count($array); $j++) {
63 66
                $values .= $array[$j].", ";
64 67
                $counter++;
65
                if ($counter == 500 || $j == (count($array) - 1)) {
68
                if ($counter == 1000 || $j == (count($array) - 1)) {
66 69
                    $query_ = $query.substr($values, 0, strlen($values) - 2).";";
67 70
                    $stmt = $this->dbh->executeQuery($query_);
68 71
                    
cron/parser.php
105 105
            for ($i = 0; $i < 2; $i++) {
106 106
                $this->trafficOneDay[$t->device][$i] = array();
107 107
                for ($j = 0; $j < 11; $j++) {
108
                    $this->trafficOneDay[$t->device][$i][$j] = array(0, 0); // Pocet danych vozidel, suma jejich rychlosti.
108
                    $this->trafficOneDay[$t->device][$i][$j] = array(0, 0, 0); // Pocet danych vozidel, suma jejich rychlosti a pocet vozidel u kterych nesla stanovit rychlost.
109 109
                }
110 110
            }
111 111
            
......
122 122
            for ($i = 0; $i < 2; $i++) {
123 123
                $this->traffic[$t->device][$interval][$i] = array();
124 124
                for ($j = 0; $j < 11; $j++) {
125
                    $this->traffic[$t->device][$interval][$i][$j] = array(0, 0); // Pocet danych vozidel, suma jejich rychlosti.
125
                    $this->traffic[$t->device][$interval][$i][$j] = array(0, 0, 0); // Pocet danych vozidel, suma jejich rychlosti a pocet vozidel u kterych nesla stanovit rychlost.
126 126
                }
127 127
            }
128 128
        }
129 129
        
130
        // Ulozeni dulezitych informaci o danem zaznamu.
131
        $this->traffic[$t->device][$interval][$t->direction][$t->type10][0]++;
132
        $this->traffic[$t->device][$interval][$t->direction][$t->type10][1] += $t->speed;
133
        
134
        // Ulozeni i do pole s prumery za cely den.
135
        $this->trafficOneDay[$t->device][$t->direction][$t->type10][0]++;
136
        $this->trafficOneDay[$t->device][$t->direction][$t->type10][1] += $t->speed;
130
        // Ulozeni dulezitych informaci o danem zaznamu do pole s casovymi intervaly a i do pole se zaznamy za cely den.
131
        if ($t->speed < 1) {
132
            $this->traffic[$t->device][$interval][$t->direction][$t->type10][2]++;
133
            $this->trafficOneDay[$t->device][$t->direction][$t->type10][2]++;
134
        } else {
135
            $this->traffic[$t->device][$interval][$t->direction][$t->type10][0]++;
136
            $this->traffic[$t->device][$interval][$t->direction][$t->type10][1] += $t->speed;
137
            $this->trafficOneDay[$t->device][$t->direction][$t->type10][0]++;
138
            $this->trafficOneDay[$t->device][$t->direction][$t->type10][1] += $t->speed;
139
        }
137 140
    }
138 141
    
139 142
    private function download($date, $zipUrl, $dir, $downloaded) {
cron/process_traffic_matrix.php
1 1
<?php
2 2

  
3
function process_traffic_matrix($parser, $traffic, $trafficOneDay, $idRecordTimeTable, $idRecordTable, $idRecordOneDayTable, &$insertRTT, &$insertRT, &$insertOneDay, $date) {
3
function process_traffic_matrix($parser, $traffic, $trafficOneDay, $idDateTable, $idRecordTimeTable, $idRecordTable, $idRecordOneDayTable, &$insertDate, &$insertRTT, &$insertRT, &$insertOneDay, $date) {
4 4
    $times = array();
5 5
    
6
    // Rekonstrukce casovych intervalu.
6 7
    for ($i = 0; $i < $parser->HOW_MANY_INTERVALS; $i++) {
7 8
        $times[$i] = array();
8 9
        $times[$i][0] = new DateTime($date);
......
23 24
        $times[$i][1]->setTime($toHours, $toMinutes, $toSeconds);
24 25
    }
25 26
    
27
    // Priprava dat pro naplneni tabulek zaznam a zaznam_cas.
26 28
    foreach ($traffic as $device => $timeIntervals) {
27 29
        for ($t = 0; $t < $parser->HOW_MANY_INTERVALS; $t++) {
28 30
            if ($timeIntervals[$t] != NULL) {
......
30 32
                    $dataExists = FALSE;
31 33
                    
32 34
                    for ($v = 0; $v < 11; $v++) {
33
                        if ($timeIntervals[$t][$d][$v][0] > 0) {
35
                        $count_ = $timeIntervals[$t][$d][$v][0] + $timeIntervals[$t][$d][$v][2];
36
                        if ($count_ > 0) {
34 37
                            $dataExists = TRUE;
35
                            $insertRT[] = "('".$idRecordTable++."', '".$timeIntervals[$t][$d][$v][0]."', '".($timeIntervals[$t][$d][$v][1] / $timeIntervals[$t][$d][$v][0])."', '$v', '$idRecordTimeTable')";
38
                            $speed_ = -1.0;
39
                            
40
                            if ($timeIntervals[$t][$d][$v][0] > 0) {
41
                                $speed_ = $timeIntervals[$t][$d][$v][1] / (double) $timeIntervals[$t][$d][$v][0];
42
                            }
43
                            
44
                            $insertRT[] = "('".$idRecordTable++."', '$count_', '$speed_', '$v', '$idRecordTimeTable')";
36 45
                        }
37 46
                    }
38 47
                    
39 48
                    if ($dataExists) {
40
                        $insertRTT[] = "('".$idRecordTimeTable++."', '".$times[$t][0]->format("Y-m-d H:i:s.u")."', '".$times[$t][1]->format("Y-m-d H:i:s.u")."', '".($d + 1)."', '$device')";
49
                        $insertRTT[] = "('".$idRecordTimeTable++."', '".($d + 1)."', '$device', '".($idDateTable + $t)."')";
41 50
                    }
42 51
                }
43 52
            }
44 53
        }
45 54
    }
46 55
    
56
    // Priprava dat pro naplneni tabulky datum. Budou vlozeny veskere casove intervaly. Je nemozne, aby neexistovalo alespon jedno zarizeni,
57
    // ktere v dany casovy interval detekuje alespon jeden dopravni prostredek. I kdyby takova situace nastala, dane intervaly take mohou
58
    // slouzit pro pouziti ve statistikach.
59
    for ($i = 0; $i < $parser->HOW_MANY_INTERVALS; $i++) {
60
        $insertDate[] = "('".$idDateTable++."', '".$times[$i][0]->format("Y-m-d H:i:s")."', '".$times[$i][1]->format("Y-m-d H:i:s")."')";
61
    }
62
    
63
    // Priprava dat pro naplneni tabulky zaznam_prum_den.
47 64
    foreach ($trafficOneDay as $device => $direction) {
48 65
        for ($d = 0; $d < 2; $d++) {
49 66
            for ($v = 0; $v < 11; $v++) {
50
                if ($direction[$d][$v][0] > 0) {
51
                    $insertOneDay[] = "('".$idRecordOneDayTable++."', '".$direction[$d][$v][0]."', '".($direction[$d][$v][1] / $direction[$d][$v][0])."', '$date', '".($d + 1)."', '$device', '$v')";
67
                $count_ = $direction[$d][$v][0] + $direction[$d][$v][2];
68
                if ($count_ > 0) {
69
                    $speed_ = -1.0;
70
                    if ($direction[$d][$v][0] > 0) {
71
                        $speed_ = $direction[$d][$v][1] / (double) $direction[$d][$v][0];
72
                    }
73
                    $insertOneDay[] = "('".$idRecordOneDayTable++."', '$count_', '$speed_', '".($d + 1)."', '$device', '$v', '$idDateTable')";
52 74
                }
53 75
            }
54 76
        }
55 77
    }
56 78
    
79
    // Priprava posledniho zaznamu ke vlozeni do tabulky datum (cely den - vzdy bude alespon jeden udaj).
80
    $timeFrom = new DateTime($date);
81
    $timeFrom->setTime(0, 0, 0);
82
    $timeTo = new DateTime($date);
83
    $timeTo->setTime(0, 0, 0);
84
    $timeTo->modify("+1 day");
85
    $insertDate[] = "('$idDateTable', '".$timeFrom->format("Y-m-d H:i:s")."', '".$timeTo->format("Y-m-d H:i:s")."')";
86
    
57 87
}
58 88

  
59 89
?>
cron/traffic.php
27 27
        // $this->intensity = $data[2];
28 28
        // $this->intensityN = $data[3];
29 29
        // $this->occupancy = $data[4];
30
        $this->speed = $data[5];
31
        $this->state = $data[6];
30
        $this->speed = (double) $data[5];
31
        $this->state = (int) $data[6];
32 32
        // $this->type = $data[7];
33 33
        // $this->duration = $data[8];
34 34
        // $this->history = $data[9];
35
        $this->type10 = $data[10];
35
        $this->type10 = (int) $data[10];
36 36
    }
37 37
    
38 38
}

Také k dispozici: Unified diff