Revize 788fa6d8
Přidáno uživatelem horkym před asi 7 roky(ů)
cron/dao/dao.php | ||
---|---|---|
1 | 1 |
<?php |
2 | 2 |
|
3 | 3 |
require_once "db/db-web.php"; |
4 |
require_once "location.php"; |
|
4 | 5 |
|
5 | 6 |
class DAO { |
6 | 7 |
|
7 | 8 |
protected $dbh; |
8 |
|
|
9 |
|
|
9 | 10 |
public function setDB($dbh) { |
10 | 11 |
$this->dbh = $dbh; |
11 | 12 |
} |
12 | 13 |
|
14 |
public function insertVehicles() { |
|
15 |
$query = "SELECT COUNT(*) AS total FROM vozidla"; |
|
16 |
$stmt = $this->dbh->executeQuery($query); |
|
17 |
|
|
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 "; |
|
21 |
$query .= "('0', 'Neznámé vozidlo'), "; |
|
22 |
$query .= "('1', 'Motocykl'), "; |
|
23 |
$query .= "('2', 'Auto'), "; |
|
24 |
$query .= "('3', 'Auto s přívěsem'), "; |
|
25 |
$query .= "('4', 'Dodávka'), "; |
|
26 |
$query .= "('5', 'Dodávka s přívěsem'), "; |
|
27 |
$query .= "('6', 'Lehký nákladní automobil'), "; |
|
28 |
$query .= "('7', 'Lehký nákladní automobil s přívěsem'), "; |
|
29 |
$query .= "('8', 'Nákladní automobil'), "; |
|
30 |
$query .= "('9', 'Nákladní automobil s přívěsem'), "; |
|
31 |
$query .= "('10', 'Autobus');"; |
|
32 |
$stmt = $this->dbh->executeQuery($query); |
|
33 |
} |
|
34 |
} |
|
35 |
|
|
36 |
public function controlTrafficData($dateStr) { |
|
37 |
$dateTo = new DateTime($dateStr); |
|
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')."';"; |
|
40 |
$stmt = $this->dbh->executeQuery($query); |
|
41 |
return $stmt->fetchAssoc()["total"] < 1; |
|
42 |
} |
|
43 |
|
|
44 |
public function insertTrafficData($insertRTT, $insertRT) { |
|
45 |
for ($i = 0; $i < 2; $i++) { |
|
46 |
$query = ""; |
|
47 |
$values = ""; |
|
48 |
$counter = 0; |
|
49 |
$array = NULL; |
|
50 |
|
|
51 |
if ($i == 0) { |
|
52 |
$query = "INSERT INTO zaznam_cas VALUES "; |
|
53 |
$array = &$insertRTT; |
|
54 |
} else { |
|
55 |
$query = "INSERT INTO zaznam VALUES "; |
|
56 |
$array = &$insertRT; |
|
57 |
} |
|
58 |
|
|
59 |
for ($j = 0; $j < count($array); $j++) { |
|
60 |
$values .= $array[$j].", "; |
|
61 |
$counter++; |
|
62 |
if ($counter == 500 || $j == (count($array) - 1)) { |
|
63 |
$query_ = $query.substr($values, 0, strlen($values) - 2).";"; |
|
64 |
$stmt = $this->dbh->executeQuery($query_); |
|
65 |
|
|
66 |
$values = ""; |
|
67 |
$counter = 0; |
|
68 |
} |
|
69 |
} |
|
70 |
} |
|
71 |
} |
|
72 |
|
|
73 |
public function insertLocationData($location) { |
|
74 |
|
|
75 |
// --- Kontrola, zda je mesto v tabulce, pripadne jeho pridani. --- |
|
76 |
|
|
77 |
$townId = $this->conditionalInsertion($location, "mesto", -1); |
|
78 |
|
|
79 |
// --- Kontrola, zda je ulice v tabulce, pripadne jeji pridani. --- |
|
80 |
|
|
81 |
$streetId = $this->conditionalInsertion($location, "ulice", $townId); |
|
82 |
|
|
83 |
// --- Kontrola, zda je zarizeni v tabulce, pripadne jeho pridani. --- |
|
84 |
|
|
85 |
$query = "SELECT * FROM zarizeni WHERE id='".$location->device."';"; |
|
86 |
$stmt = $this->dbh->executeQuery($query); |
|
87 |
|
|
88 |
if (!($stmt->fetchAssoc())) { |
|
89 |
// Zarizeni se v tabulce jeste nenachazi. |
|
90 |
$query = "INSERT INTO zarizeni VALUES ('".$location->device."', '".$location->name."', '0', '$streetId');"; |
|
91 |
$stmt = $this->dbh->executeQuery($query); |
|
92 |
} |
|
93 |
|
|
94 |
} |
|
95 |
|
|
96 |
// Pro mesta a ulice. |
|
97 |
private function conditionalInsertion($location, $table, $townId) { |
|
98 |
$query = "SELECT id FROM $table WHERE nazev="; |
|
99 |
if ($townId < 0) { |
|
100 |
// Hledame mesto. |
|
101 |
$query .= "'".$location->town."';"; |
|
102 |
} else { |
|
103 |
// Hledame ulici (s odkazem na konkretni mesto - ruzna mesta mohou mit shodny nazev nejake ulice). |
|
104 |
$query .= "'".$location->street."' AND mesto_id='$townId';"; |
|
105 |
} |
|
106 |
$stmt = $this->dbh->executeQuery($query); |
|
107 |
|
|
108 |
$id = -1; |
|
109 |
if ($row = $stmt->fetchAssoc()) { |
|
110 |
// Zaznam uz je v tabulce. |
|
111 |
$id = $row["id"]; |
|
112 |
} else { |
|
113 |
// Zaznam se v tabulce jeste nenachazi - nalezeni id pro novy zaznam. |
|
114 |
$id = $this->findFirstId($table); |
|
115 |
|
|
116 |
$query = "INSERT INTO $table VALUES "; |
|
117 |
if ($townId < 0) { |
|
118 |
$query .= "('$id', '".$location->town."');"; |
|
119 |
} else { |
|
120 |
$query .= "('$id', '".$location->street."', '$townId');"; |
|
121 |
} |
|
122 |
|
|
123 |
// Vlozeni zaznamu do tabulky. |
|
124 |
$stmt = $this->dbh->executeQuery($query); |
|
125 |
} |
|
126 |
|
|
127 |
return $id; |
|
128 |
} |
|
129 |
|
|
130 |
public function findFirstId($table) { |
|
131 |
$query = "SELECT id FROM $table ORDER BY id DESC LIMIT 1;"; |
|
132 |
$stmt = $this->dbh->executeQuery($query); |
|
133 |
|
|
134 |
$id = -1; |
|
135 |
if ($row = $stmt->fetchAssoc()) { |
|
136 |
// V tabulce je vice zaznamu. |
|
137 |
$id = $row["id"] + 1; |
|
138 |
} else { |
|
139 |
// Tabulka je prazdna. |
|
140 |
$id = 1; |
|
141 |
} |
|
142 |
|
|
143 |
return $id; |
|
144 |
} |
|
145 |
|
|
13 | 146 |
} |
14 | 147 |
|
15 | 148 |
?> |
Také k dispozici: Unified diff
#6351: Ulozeni dat do databaze
Pridan hlavni skript pro spusteni zpracovani dat z minuleho dne (cron.php). Pridana funkce pro pripravu dat o lokacich a o doprave pro ulozeni do databaze (process_traffic_matrix.php). Pridany funkce pro ulozeni dat do databaze (dao.php).