Revize bad470c9
Přidáno uživatelem horkym před téměř 7 roky(ů)
cron_test/READ_ME.TXT | ||
---|---|---|
1 |
Vime, ze stazeni souboru, extrahovani a odstraneni jde (otestovany ruzne varianty, detaily do logu). |
|
2 |
To same komunikace s databazi, pocatecni inicializaci databaze (vlozeni typu vozidel), apod. |
|
3 |
Jedine, cim si nejsme jisti je zpracovani zaznamu (jedna se o velke mnozstvi dat a o slozity algoritmus zpracovani). |
|
4 |
Ukolem tohoto testovani je tedy zjistit, jestli se zaznamy o doprave spravne zpracovavaji. |
cron_test/cron.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "dao/dao.php"; |
|
4 |
require_once "db/db-web.php"; |
|
5 |
require_once "parser.php"; |
|
6 |
require_once "process_traffic_matrix.php"; |
|
7 |
|
|
8 |
function cron() { |
|
9 |
// Nacteni dat z testovacich souboru. |
|
10 |
cron_procedure(new DateTime("20180605")); |
|
11 |
} |
|
12 |
|
|
13 |
// Funkce, ktera je volana bud cron() nebo year_cron() a ktera stahne data pro dany den. |
|
14 |
function cron_procedure($date) { |
|
15 |
// Kvuli timeoutu. |
|
16 |
set_time_limit(0); |
|
17 |
|
|
18 |
// Objekt pro logovani. |
|
19 |
$logs = new Logging(); |
|
20 |
|
|
21 |
// Vytvoreni objektu pro komunikaci s DB. |
|
22 |
$dbh = new DB_WEB($logs); |
|
23 |
$DAO = new DAO(); |
|
24 |
$DAO->setDB($dbh); |
|
25 |
|
|
26 |
if ($date != NULL && $DAO->controlTrafficData($date->format("Y-m-d"))) { |
|
27 |
$logs->log(Logging::INFO, "Data k vybranemu dni (".$date->format("d.m.Y").") jeste v databazi nejsou."); |
|
28 |
$parser = new Parser($logs); |
|
29 |
$parser->doWork($date->format("Ymd")); |
|
30 |
|
|
31 |
$traffic = $parser->getTraffic(); |
|
32 |
$trafficOneDay = $parser->getTrafficOneDay(); |
|
33 |
$locations = $parser->getLocations(); |
|
34 |
|
|
35 |
$DAO->insertVehicles(); // Pokud nejsou typy vozidel v tabulce - pridat. |
|
36 |
|
|
37 |
// Pridat udaje o novych zarizenich. |
|
38 |
foreach ($locations as $l) { |
|
39 |
$DAO->insertLocationData($l); |
|
40 |
} |
|
41 |
|
|
42 |
// Pridat zaznamy z vybraneho dne. |
|
43 |
$insertDate = array(); |
|
44 |
$insertRTT = array(); |
|
45 |
$insertRT = array(); |
|
46 |
$insertOneDay = array(); |
|
47 |
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")); |
|
48 |
$DAO->insertTrafficData($insertDate, $insertRTT, $insertRT, $insertOneDay); |
|
49 |
} else if ($date != NULL) { |
|
50 |
// Data pro vybrany den uz v databazi jsou. |
|
51 |
$logs->log(Logging::WARNING, "Pro vybrany den (".$date->format("d.m.Y").") jiz data v databazi jsou."); |
|
52 |
} |
|
53 |
} |
|
54 |
|
|
55 |
?> |
cron_test/dao/dao.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "db/db-web.php"; |
|
4 |
require_once "location.php"; |
|
5 |
|
|
6 |
class DAO { |
|
7 |
|
|
8 |
protected $dbh; |
|
9 |
|
|
10 |
public function setDB($dbh) { |
|
11 |
$this->dbh = $dbh; |
|
12 |
} |
|
13 |
|
|
14 |
public function insertVehicles() { |
|
15 |
$query = "SELECT COUNT(*) AS total FROM vozidlo"; |
|
16 |
$stmt = $this->dbh->executeQuery($query); |
|
17 |
|
|
18 |
if ($stmt->fetchAssoc()["total"] < 1) { |
|
19 |
// Pokud v tabulce s vozidly neni zadny zaznam, pridat vsechny moznosti. |
|
20 |
$query = "INSERT INTO vozidlo (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 datum WHERE od >= '$dateStr' AND od < '".$dateTo->format('Y-m-d')."';"; |
|
40 |
$stmt = $this->dbh->executeQuery($query); |
|
41 |
return $stmt->fetchAssoc()["total"] < 1; |
|
42 |
} |
|
43 |
|
|
44 |
public function insertTrafficData($insertDate, $insertRTT, $insertRT, $insertOneDay) { |
|
45 |
for ($i = 0; $i < 4; $i++) { |
|
46 |
$query = ""; |
|
47 |
$values = ""; |
|
48 |
$counter = 0; |
|
49 |
$array = NULL; |
|
50 |
|
|
51 |
if ($i == 0) { |
|
52 |
$query = "INSERT INTO datum VALUES "; |
|
53 |
$array = &$insertDate; |
|
54 |
} else if ($i == 1) { |
|
55 |
$query = "INSERT INTO zaznam_cas VALUES "; |
|
56 |
$array = &$insertRTT; |
|
57 |
} else if ($i == 2) { |
|
58 |
$query = "INSERT INTO zaznam VALUES "; |
|
59 |
$array = &$insertRT; |
|
60 |
} else { |
|
61 |
$query = "INSERT INTO zaznam_prum_den VALUES "; |
|
62 |
$array = &$insertOneDay; |
|
63 |
} |
|
64 |
|
|
65 |
for ($j = 0; $j < count($array); $j++) { |
|
66 |
$values .= $array[$j].", "; |
|
67 |
$counter++; |
|
68 |
if ($counter == 1000 || $j == (count($array) - 1)) { |
|
69 |
$query_ = $query.substr($values, 0, strlen($values) - 2).";"; |
|
70 |
$stmt = $this->dbh->executeQuery($query_); |
|
71 |
|
|
72 |
$values = ""; |
|
73 |
$counter = 0; |
|
74 |
} |
|
75 |
} |
|
76 |
} |
|
77 |
} |
|
78 |
|
|
79 |
public function insertLocationData($location) { |
|
80 |
|
|
81 |
// --- Kontrola, zda je mesto v tabulce, pripadne jeho pridani. --- |
|
82 |
|
|
83 |
$townId = $this->conditionalInsertion($location, "mesto", -1); |
|
84 |
|
|
85 |
// --- Kontrola, zda je ulice v tabulce, pripadne jeji pridani. --- |
|
86 |
|
|
87 |
$streetId = $this->conditionalInsertion($location, "ulice", $townId); |
|
88 |
|
|
89 |
// --- Kontrola, zda je zarizeni v tabulce, pripadne jeho pridani. --- |
|
90 |
|
|
91 |
$query = "SELECT * FROM zarizeni WHERE id='".$location->device."';"; |
|
92 |
$stmt = $this->dbh->executeQuery($query); |
|
93 |
|
|
94 |
if (!($stmt->fetchAssoc())) { |
|
95 |
// Zarizeni se v tabulce jeste nenachazi. |
|
96 |
$query = "INSERT INTO zarizeni VALUES ('".$location->device."', '".$location->name."', '0', '$streetId');"; |
|
97 |
$stmt = $this->dbh->executeQuery($query); |
|
98 |
} |
|
99 |
|
|
100 |
} |
|
101 |
|
|
102 |
// Pro mesta a ulice. |
|
103 |
private function conditionalInsertion($location, $table, $townId) { |
|
104 |
$query = "SELECT id FROM $table WHERE nazev="; |
|
105 |
if ($townId < 0) { |
|
106 |
// Hledame mesto. |
|
107 |
$query .= "'".$location->town."';"; |
|
108 |
} else { |
|
109 |
// Hledame ulici (s odkazem na konkretni mesto - ruzna mesta mohou mit shodny nazev nejake ulice). |
|
110 |
$query .= "'".$location->street."' AND mesto_id='$townId';"; |
|
111 |
} |
|
112 |
$stmt = $this->dbh->executeQuery($query); |
|
113 |
|
|
114 |
$id = -1; |
|
115 |
if ($row = $stmt->fetchAssoc()) { |
|
116 |
// Zaznam uz je v tabulce. |
|
117 |
$id = $row["id"]; |
|
118 |
} else { |
|
119 |
// Zaznam se v tabulce jeste nenachazi - nalezeni id pro novy zaznam. |
|
120 |
$id = $this->findFirstId($table); |
|
121 |
|
|
122 |
$query = "INSERT INTO $table VALUES "; |
|
123 |
if ($townId < 0) { |
|
124 |
$query .= "('$id', '".$location->town."');"; |
|
125 |
} else { |
|
126 |
// Jestlize ulice v DB jeste neexistuje, nastavit geolokaci (nema smysl zem. sirku a delku zjistovat driv - nejedna se o dulezite informace pro CRON). |
|
127 |
$location->setGeolocation(); |
|
128 |
$query .= "('$id', '".$location->street."', '$townId', '".$location->lat."', '".$location->lng."');"; |
|
129 |
} |
|
130 |
|
|
131 |
// Vlozeni zaznamu do tabulky. |
|
132 |
$stmt = $this->dbh->executeQuery($query); |
|
133 |
} |
|
134 |
|
|
135 |
return $id; |
|
136 |
} |
|
137 |
|
|
138 |
public function findFirstId($table) { |
|
139 |
$query = "SELECT id FROM $table ORDER BY id DESC LIMIT 1;"; |
|
140 |
$stmt = $this->dbh->executeQuery($query); |
|
141 |
|
|
142 |
$id = -1; |
|
143 |
if ($row = $stmt->fetchAssoc()) { |
|
144 |
// V tabulce je vice zaznamu. |
|
145 |
$id = $row["id"] + 1; |
|
146 |
} else { |
|
147 |
// Tabulka je prazdna. |
|
148 |
$id = 1; |
|
149 |
} |
|
150 |
|
|
151 |
return $id; |
|
152 |
} |
|
153 |
|
|
154 |
} |
|
155 |
|
|
156 |
?> |
cron_test/data/READ_ME.TXT | ||
---|---|---|
1 |
// Obsah souboru "test_Ymd_doprava.csv" |
|
2 |
idDetektor - z tohoto udaje "10<ID_ZARIZENI>10<SMER>" bereme oznaceni zarizeni (detektoru) a smer, ve kterem snima (1 = ve smeru, 2 = v proti smeru). |
|
3 |
DatumCas - datum a cas zaznamu. |
|
4 |
Intenzita - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
5 |
IntenzitaN - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
6 |
Obsazenost - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
7 |
Rychlost - namerena rychlost (musi se brat v potaz i zaznamy s rychlosti 0.0 = rychlost nesla urcit). |
|
8 |
Stav - jestli je zarizeni funkcni (=1) nebo nefunkcni (<0). V aktualni verzi se s timto udajem nepracuje (pokud nam zarizeni da rozumny udaj, je nam jedno, jestli je funkcni nebo ne - do budoucna by chtelo opravit udaj v DB). |
|
9 |
TypVozidla - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
10 |
Trvani100 - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
11 |
RychlostHistorie - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
12 |
TypVozidla10 - konkretni typ vozidla (s obecnym oznacenim, 4 skupiny, nepracujeme). |
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
// Obsah souboru "test_Ymd_lokace.csv" |
|
17 |
Name - popis ulice (napr. z jakeho smeru zarizeni snima). |
|
18 |
Town - nazev mesta. |
|
19 |
Street - nazev ulice. |
|
20 |
IdDevice - KP<ID_ZARIZENI>, bereme oznaceni detektoru. |
|
21 |
idArea - NEPOTREBNE, NAHRAZENO PISMENEM "X". |
|
22 |
|
|
23 |
|
|
24 |
|
|
25 |
Jednotlive sloupce v obou souborech jsou oddeleny svislitkem. |
cron_test/data/test_20180605_doprava.csv | ||
---|---|---|
1 |
10056102|"2018-06-05 00:00:00.123"|X|X|X|17.000|0|X|X|X|8 |
|
2 |
10056102|"2018-06-05 00:00:01.546"|X|X|X|12.000|0|X|X|X|0 |
|
3 |
10056102|"2018-06-05 00:00:02.849"|X|X|X|68.000|0|X|X|X|2 |
|
4 |
10056102|"2018-06-05 00:00:03.048"|X|X|X|168.92|0|X|X|X|2 |
|
5 |
10056102|"2018-06-05 00:00:10.000"|X|X|X|94.557|0|X|X|X|2 |
|
6 |
10056102|"2018-06-05 00:00:12.804"|X|X|X|34.000|0|X|X|X|8 |
|
7 |
10056102|"2018-06-05 00:00:13.040"|X|X|X|00.000|0|X|X|X|2 |
|
8 |
10056102|"2018-06-05 00:00:14.144"|X|X|X|00.000|0|X|X|X|3 |
|
9 |
10056102|"2018-06-05 00:00:15.597"|X|X|X|16.000|0|X|X|X|1 |
|
10 |
10056102|"2018-06-05 00:14:59.999"|X|X|X|19.050|0|X|X|X|4 |
|
11 |
10056102|"2018-06-05 00:15:00.000"|X|X|X|25.150|0|X|X|X|2 |
|
12 |
10056101|"2018-06-05 00:15:52.324"|X|X|X|65.400|0|X|X|X|2 |
|
13 |
10055101|"2018-06-05 00:00:00.123"|X|X|X|17.000|0|X|X|X|2 |
|
14 |
10055101|"2018-06-05 00:00:01.546"|X|X|X|12.000|0|X|X|X|0 |
|
15 |
10055101|"2018-06-05 00:00:02.849"|X|X|X|68.000|0|X|X|X|8 |
|
16 |
10055101|"2018-06-05 00:00:03.048"|X|X|X|168.92|0|X|X|X|8 |
|
17 |
10055101|"2018-06-05 00:00:10.000"|X|X|X|94.557|0|X|X|X|8 |
|
18 |
10055101|"2018-06-05 00:00:12.804"|X|X|X|34.000|0|X|X|X|2 |
|
19 |
10055101|"2018-06-05 00:00:13.040"|X|X|X|00.000|0|X|X|X|8 |
|
20 |
10055101|"2018-06-05 00:00:14.144"|X|X|X|00.000|0|X|X|X|3 |
|
21 |
10055101|"2018-06-05 00:00:15.597"|X|X|X|16.000|0|X|X|X|1 |
|
22 |
10055101|"2018-06-05 00:14:59.999"|X|X|X|19.050|0|X|X|X|4 |
|
23 |
10055101|"2018-06-05 00:15:00.000"|X|X|X|25.150|0|X|X|X|8 |
|
24 |
10056101|"2018-06-05 00:25:46.059"|X|X|X|65.789|0|X|X|X|6 |
cron_test/data/test_20180605_lokace.csv | ||
---|---|---|
1 |
"Česká Kubice, směr od Německa"|"Česká Kubice"|"Česká Kubice"|"KP055"|X |
|
2 |
"Česká Kubice, směr od Babylonu"|"Česká Kubice"|"Česká Kubice"|"KP056"|X |
cron_test/db/db-exception.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "/../logging.php"; |
|
4 |
|
|
5 |
class DB_Exception extends Exception { |
|
6 |
|
|
7 |
public function __construct($logs = NULL, $message = false, $code = false) { |
|
8 |
if (!$message) { |
|
9 |
$this->message = mysql_error(); |
|
10 |
} |
|
11 |
if (!$code) { |
|
12 |
$this->code = mysql_errno(); |
|
13 |
} |
|
14 |
if ($logs != NULL) { |
|
15 |
$logs->log(Logging::ERROR, $this->__toString()); |
|
16 |
} |
|
17 |
} |
|
18 |
|
|
19 |
} |
|
20 |
|
|
21 |
?> |
cron_test/db/db-pdo.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "db-exception.php"; |
|
4 |
|
|
5 |
class DB_PDO { |
|
6 |
|
|
7 |
protected $user; |
|
8 |
protected $pass; |
|
9 |
protected $dbhost; |
|
10 |
protected $dbname; |
|
11 |
protected $dbh; |
|
12 |
|
|
13 |
protected $logs; |
|
14 |
|
|
15 |
public function __construct($user, $pass, $dbhost, $dbname) { |
|
16 |
$this->user = $user; |
|
17 |
$this->pass = $pass; |
|
18 |
$this->dbhost = $dbhost; |
|
19 |
$this->dbname = $dbname; |
|
20 |
} |
|
21 |
|
|
22 |
protected function connect() { |
|
23 |
$this->dbh = new PDO("mysql:host=".$this->dbhost.";dbname=".$this->dbname.";charset=utf8", $this->user, $this->pass); |
|
24 |
if (!$this->dbh) { |
|
25 |
throw new DB_Exception($this->logs); |
|
26 |
} |
|
27 |
} |
|
28 |
|
|
29 |
public function executeQuery($query) { |
|
30 |
if (!$this->dbh) { |
|
31 |
$this->connect(); |
|
32 |
} |
|
33 |
$ret = $this->dbh->query($query); |
|
34 |
if (!$ret) { |
|
35 |
throw new DB_Exception($this->logs); |
|
36 |
} else { |
|
37 |
$stmt = new DB_PDOStatement($this->dbh, $query, $this->logs); |
|
38 |
$stmt->result = $ret; |
|
39 |
$stmt->number = $ret->rowCount(); |
|
40 |
return $stmt; |
|
41 |
} |
|
42 |
} |
|
43 |
|
|
44 |
} |
|
45 |
|
|
46 |
class DB_PDOStatement { |
|
47 |
|
|
48 |
public $result; |
|
49 |
public $query; |
|
50 |
public $number; |
|
51 |
protected $dbh; |
|
52 |
|
|
53 |
private $logs; |
|
54 |
|
|
55 |
public function __construct($dbh, $query, $logs) { |
|
56 |
$this->query = $query; |
|
57 |
$this->dbh = $dbh; |
|
58 |
$this->logs = $logs; |
|
59 |
if (!$dbh) { |
|
60 |
throw new DB_Exception($this->logs, "Spojení s databází se nezdařilo!"); |
|
61 |
} |
|
62 |
} |
|
63 |
|
|
64 |
public function fetchAssoc() { |
|
65 |
if (!$this->result) { |
|
66 |
throw new DB_Exception($this->logs, "Dotaz nebyl vykonán!"); |
|
67 |
} |
|
68 |
return $this->result->fetch(PDO::FETCH_ASSOC); |
|
69 |
} |
|
70 |
|
|
71 |
} |
|
72 |
|
|
73 |
?> |
cron_test/db/db-web.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "db-pdo.php"; |
|
4 |
|
|
5 |
class DB_WEB extends DB_PDO { |
|
6 |
|
|
7 |
protected $user = "root"; |
|
8 |
protected $pass = ""; |
|
9 |
protected $dbhost = "localhost"; |
|
10 |
protected $dbname = "prujezd_vozidel"; |
|
11 |
|
|
12 |
protected $logs = NULL; |
|
13 |
|
|
14 |
public function __construct($logs) { |
|
15 |
$this->logs = $logs; |
|
16 |
} |
|
17 |
|
|
18 |
} |
|
19 |
|
|
20 |
?> |
cron_test/empty_database.sql | ||
---|---|---|
1 |
-- phpMyAdmin SQL Dump |
|
2 |
-- version 3.5.2.2 |
|
3 |
-- http://www.phpmyadmin.net |
|
4 |
-- |
|
5 |
-- Počítač: 127.0.0.1 |
|
6 |
-- Vygenerováno: Čtv 07. čen 2018, 00:14 |
|
7 |
-- Verze MySQL: 5.5.27-log |
|
8 |
-- Verze PHP: 5.4.6 |
|
9 |
|
|
10 |
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; |
|
11 |
SET time_zone = "+00:00"; |
|
12 |
|
|
13 |
|
|
14 |
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; |
|
15 |
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; |
|
16 |
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; |
|
17 |
/*!40101 SET NAMES utf8 */; |
|
18 |
|
|
19 |
-- |
|
20 |
-- Databáze: `prujezd_vozidel` |
|
21 |
-- |
|
22 |
CREATE DATABASE `prujezd_vozidel` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; |
|
23 |
USE `prujezd_vozidel`; |
|
24 |
|
|
25 |
-- -------------------------------------------------------- |
|
26 |
|
|
27 |
-- |
|
28 |
-- Struktura tabulky `datum` |
|
29 |
-- |
|
30 |
|
|
31 |
CREATE TABLE IF NOT EXISTS `datum` ( |
|
32 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
33 |
`od` datetime NOT NULL, |
|
34 |
`do` datetime NOT NULL, |
|
35 |
PRIMARY KEY (`id`) |
|
36 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
|
37 |
|
|
38 |
-- -------------------------------------------------------- |
|
39 |
|
|
40 |
-- |
|
41 |
-- Struktura tabulky `mesto` |
|
42 |
-- |
|
43 |
|
|
44 |
CREATE TABLE IF NOT EXISTS `mesto` ( |
|
45 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
46 |
`nazev` varchar(100) NOT NULL, |
|
47 |
PRIMARY KEY (`id`) |
|
48 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
|
49 |
|
|
50 |
-- -------------------------------------------------------- |
|
51 |
|
|
52 |
-- |
|
53 |
-- Struktura tabulky `ulice` |
|
54 |
-- |
|
55 |
|
|
56 |
CREATE TABLE IF NOT EXISTS `ulice` ( |
|
57 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
58 |
`nazev` varchar(255) NOT NULL, |
|
59 |
`mesto_id` bigint(20) NOT NULL, |
|
60 |
`zem_sirka` double NOT NULL DEFAULT '-1' COMMENT 'Zemepisna sirka podle GOOGLE.', |
|
61 |
`zem_delka` double NOT NULL DEFAULT '-1' COMMENT 'Zemepisna delka podle GOOGLE.', |
|
62 |
PRIMARY KEY (`id`), |
|
63 |
KEY `fk_ulice_mesto_idx` (`mesto_id`) |
|
64 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
|
65 |
|
|
66 |
-- -------------------------------------------------------- |
|
67 |
|
|
68 |
-- |
|
69 |
-- Struktura tabulky `vozidlo` |
|
70 |
-- |
|
71 |
|
|
72 |
CREATE TABLE IF NOT EXISTS `vozidlo` ( |
|
73 |
`id` bigint(20) NOT NULL COMMENT 'Odpovídá číslu skupiny vozidla (TypVozidla10 v csv souboru s daty). Hodnoty 0-10.', |
|
74 |
`nazev` varchar(45) NOT NULL, |
|
75 |
PRIMARY KEY (`id`) |
|
76 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
|
77 |
|
|
78 |
-- -------------------------------------------------------- |
|
79 |
|
|
80 |
-- |
|
81 |
-- Struktura tabulky `zarizeni` |
|
82 |
-- |
|
83 |
|
|
84 |
CREATE TABLE IF NOT EXISTS `zarizeni` ( |
|
85 |
`id` varchar(20) NOT NULL COMMENT 'Odpovídá idDevice v location.csv.', |
|
86 |
`smer_popis` varchar(255) NOT NULL COMMENT 'Odpovídá Name v locations.csv.', |
|
87 |
`stav` int(11) NOT NULL, |
|
88 |
`ulice_id` bigint(20) NOT NULL, |
|
89 |
PRIMARY KEY (`id`), |
|
90 |
KEY `fk_zarizeni_ulice1_idx` (`ulice_id`) |
|
91 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
|
92 |
|
|
93 |
-- -------------------------------------------------------- |
|
94 |
|
|
95 |
-- |
|
96 |
-- Struktura tabulky `zaznam` |
|
97 |
-- |
|
98 |
|
|
99 |
CREATE TABLE IF NOT EXISTS `zaznam` ( |
|
100 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
101 |
`vozidla_pocet` int(11) NOT NULL, |
|
102 |
`rychlost_prumer` double NOT NULL, |
|
103 |
`vozidla_id` bigint(20) NOT NULL, |
|
104 |
`zaznam_cas_id` bigint(20) NOT NULL, |
|
105 |
PRIMARY KEY (`id`), |
|
106 |
KEY `fk_zaznam_vozidla1_idx` (`vozidla_id`), |
|
107 |
KEY `fk_zaznam_zaznam_cas1_idx` (`zaznam_cas_id`) |
|
108 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
|
109 |
|
|
110 |
-- -------------------------------------------------------- |
|
111 |
|
|
112 |
-- |
|
113 |
-- Struktura tabulky `zaznam_cas` |
|
114 |
-- |
|
115 |
|
|
116 |
CREATE TABLE IF NOT EXISTS `zaznam_cas` ( |
|
117 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
118 |
`smer` int(11) NOT NULL COMMENT '1 nebo 2 viz struktura idDetektor v csv souboru s daty.', |
|
119 |
`zarizeni_id` varchar(20) NOT NULL, |
|
120 |
`datum_id` bigint(20) NOT NULL, |
|
121 |
PRIMARY KEY (`id`), |
|
122 |
KEY `fk_zaznam_cas_zarizeni1_idx` (`zarizeni_id`), |
|
123 |
KEY `datum_id` (`datum_id`) |
|
124 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
|
125 |
|
|
126 |
-- -------------------------------------------------------- |
|
127 |
|
|
128 |
-- |
|
129 |
-- Struktura tabulky `zaznam_prum_den` |
|
130 |
-- |
|
131 |
|
|
132 |
CREATE TABLE IF NOT EXISTS `zaznam_prum_den` ( |
|
133 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
134 |
`vozidla_pocet` int(11) NOT NULL, |
|
135 |
`rychlost_prumer` double NOT NULL, |
|
136 |
`smer` int(11) NOT NULL, |
|
137 |
`zarizeni_id` varchar(20) NOT NULL, |
|
138 |
`vozidla_id` bigint(20) NOT NULL, |
|
139 |
`datum_id` bigint(20) NOT NULL, |
|
140 |
PRIMARY KEY (`id`), |
|
141 |
KEY `zarizeni_id` (`zarizeni_id`), |
|
142 |
KEY `vozidla_id` (`vozidla_id`), |
|
143 |
KEY `datum_id` (`datum_id`) |
|
144 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
|
145 |
|
|
146 |
-- |
|
147 |
-- Omezení pro exportované tabulky |
|
148 |
-- |
|
149 |
|
|
150 |
-- |
|
151 |
-- Omezení pro tabulku `ulice` |
|
152 |
-- |
|
153 |
ALTER TABLE `ulice` |
|
154 |
ADD CONSTRAINT `fk_ulice_mesto` FOREIGN KEY (`mesto_id`) REFERENCES `mesto` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
155 |
|
|
156 |
-- |
|
157 |
-- Omezení pro tabulku `zarizeni` |
|
158 |
-- |
|
159 |
ALTER TABLE `zarizeni` |
|
160 |
ADD CONSTRAINT `fk_zarizeni_ulice1` FOREIGN KEY (`ulice_id`) REFERENCES `ulice` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
161 |
|
|
162 |
-- |
|
163 |
-- Omezení pro tabulku `zaznam` |
|
164 |
-- |
|
165 |
ALTER TABLE `zaznam` |
|
166 |
ADD CONSTRAINT `fk_zaznam_vozidla1` FOREIGN KEY (`vozidla_id`) REFERENCES `vozidlo` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
167 |
ADD CONSTRAINT `fk_zaznam_zaznam_cas1` FOREIGN KEY (`zaznam_cas_id`) REFERENCES `zaznam_cas` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
168 |
|
|
169 |
-- |
|
170 |
-- Omezení pro tabulku `zaznam_cas` |
|
171 |
-- |
|
172 |
ALTER TABLE `zaznam_cas` |
|
173 |
ADD CONSTRAINT `zaznam_cas_ibfk_1` FOREIGN KEY (`datum_id`) REFERENCES `datum` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
174 |
ADD CONSTRAINT `fk_zaznam_cas_zarizeni1` FOREIGN KEY (`zarizeni_id`) REFERENCES `zarizeni` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
175 |
|
|
176 |
-- |
|
177 |
-- Omezení pro tabulku `zaznam_prum_den` |
|
178 |
-- |
|
179 |
ALTER TABLE `zaznam_prum_den` |
|
180 |
ADD CONSTRAINT `zaznam_prum_den_ibfk_3` FOREIGN KEY (`datum_id`) REFERENCES `datum` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
181 |
ADD CONSTRAINT `zaznam_prum_den_ibfk_1` FOREIGN KEY (`zarizeni_id`) REFERENCES `zarizeni` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
182 |
ADD CONSTRAINT `zaznam_prum_den_ibfk_2` FOREIGN KEY (`vozidla_id`) REFERENCES `vozidlo` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
183 |
|
|
184 |
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; |
|
185 |
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; |
|
186 |
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
cron_test/index.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "cron.php"; |
|
4 |
require_once "logging.php"; |
|
5 |
|
|
6 |
echo "<h1>Zkouška cronu</h1>"; |
|
7 |
echo "<p>Spouštím script:</p>"; |
|
8 |
|
|
9 |
cron(); |
|
10 |
|
|
11 |
echo "<p>KONEC</p>"; |
|
12 |
|
|
13 |
?> |
cron_test/location.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
class Location { |
|
4 |
|
|
5 |
// Pouzivane atributy. |
|
6 |
public $name; |
|
7 |
public $town; |
|
8 |
public $street; |
|
9 |
public $device; |
|
10 |
|
|
11 |
// Nepouzivane. |
|
12 |
// public $area; |
|
13 |
|
|
14 |
// --- ZEMEPISNA SIRKA A DELKA A UDAJE POTREBNE K JEJICH ZJISTENI. --- |
|
15 |
|
|
16 |
private $key; |
|
17 |
private $locality; |
|
18 |
private $region; |
|
19 |
|
|
20 |
public $lat; |
|
21 |
public $lng; |
|
22 |
|
|
23 |
public function __construct($data) { |
|
24 |
$this->name = $data[0]; |
|
25 |
$this->town = $data[1]; |
|
26 |
$this->street = $data[2]; |
|
27 |
$this->device = substr($data[3], 2); |
|
28 |
// $this->area = $data[4]; |
|
29 |
|
|
30 |
$this->key = "AIzaSyCSx7hyAzQiG5uocJTeZgf1Z3lpDy4kpEk"; |
|
31 |
$this->locality = "Plzeňský kraj"; |
|
32 |
$this->region = "cz"; |
|
33 |
$this->lat = -1; |
|
34 |
$this->lng = -1; |
|
35 |
} |
|
36 |
|
|
37 |
// V pripade problemu, se ziskanim souboru protokolem HTTPS, v php.ini odkomentovat "extension=php_openssl.dll". |
|
38 |
public function setGeolocation() { |
|
39 |
$address = $this->town; |
|
40 |
if ($this->town != $this->street) { |
|
41 |
$address .= " ".$this->street; |
|
42 |
} |
|
43 |
$address .= " ".$this->locality; |
|
44 |
$address = str_replace(" ", "+", $address); // Nemusi byt, jen pro jistotu. |
|
45 |
|
|
46 |
$json = file_get_contents("https://maps.google.com/maps/api/geocode/json?address=$address&sensor=false®ion=".$this->region."&key=".$this->key); |
|
47 |
$json = json_decode($json, TRUE); |
|
48 |
if ($json["status"] == "OK") { |
|
49 |
$this->lat = $json["results"]["0"]["geometry"]["location"]["lat"]; |
|
50 |
$this->lng = $json["results"]["0"]["geometry"]["location"]["lng"]; |
|
51 |
} else { |
|
52 |
$this->lat = -1; |
|
53 |
$this->lng = -1; |
|
54 |
} |
|
55 |
} |
|
56 |
|
|
57 |
} |
|
58 |
|
|
59 |
?> |
cron_test/log/cron.txt | ||
---|---|---|
1 |
07.06.2018 00:16:03.043 |
|
2 |
--- INFO --- |
|
3 |
Data k vybranemu dni (05.06.2018) jeste v databazi nejsou. |
|
4 |
|
|
5 |
07.06.2018 00:16:03.070 |
|
6 |
--- INFO --- |
|
7 |
ZACATEK PROCEDURY pro den 05.06.2018. |
|
8 |
|
|
9 |
07.06.2018 00:16:03.077 |
|
10 |
--- INFO --- |
|
11 |
Zpracovavani zaznamu o doprave. |
|
12 |
|
|
13 |
07.06.2018 00:16:03.086 |
|
14 |
--- INFO --- |
|
15 |
Zpracovavani zaznamu o lokacich. |
|
16 |
|
|
17 |
07.06.2018 00:16:03.172 |
|
18 |
--- INFO --- |
|
19 |
KONEC PROCEDURY. |
|
20 |
|
|
21 |
07.06.2018 00:28:23.291 |
|
22 |
--- INFO --- |
|
23 |
Data k vybranemu dni (05.06.2018) jeste v databazi nejsou. |
|
24 |
|
|
25 |
07.06.2018 00:28:23.306 |
|
26 |
--- INFO --- |
|
27 |
ZACATEK PROCEDURY pro den 05.06.2018. |
|
28 |
|
|
29 |
07.06.2018 00:28:23.317 |
|
30 |
--- INFO --- |
|
31 |
Zpracovavani zaznamu o doprave. |
|
32 |
|
|
33 |
07.06.2018 00:28:23.398 |
|
34 |
--- INFO --- |
|
35 |
Zpracovavani zaznamu o lokacich. |
|
36 |
|
|
37 |
07.06.2018 00:28:23.409 |
|
38 |
--- INFO --- |
|
39 |
KONEC PROCEDURY. |
|
40 |
|
|
41 |
07.06.2018 00:35:30.813 |
|
42 |
--- INFO --- |
|
43 |
Data k vybranemu dni (05.06.2018) jeste v databazi nejsou. |
|
44 |
|
|
45 |
07.06.2018 00:35:30.829 |
|
46 |
--- INFO --- |
|
47 |
ZACATEK PROCEDURY pro den 05.06.2018. |
|
48 |
|
|
49 |
07.06.2018 00:35:30.838 |
|
50 |
--- INFO --- |
|
51 |
Zpracovavani zaznamu o doprave. |
|
52 |
|
|
53 |
07.06.2018 00:35:30.851 |
|
54 |
--- INFO --- |
|
55 |
Zpracovavani zaznamu o lokacich. |
|
56 |
|
|
57 |
07.06.2018 00:35:30.861 |
|
58 |
--- INFO --- |
|
59 |
KONEC PROCEDURY. |
|
60 |
|
cron_test/logging.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
class Logging { |
|
4 |
|
|
5 |
// Zpravy jsou pouze informativni. |
|
6 |
const INFO = 0; |
|
7 |
// Jedna se o mene zavazne stavy - treba data pro dany den jeste neexistuji. |
|
8 |
const WARNING = 1; |
|
9 |
// Doslo k padu cele procedury - napr. nepovedlo se vytvorit slozku pro extrahovana data. |
|
10 |
const ERROR = 2; |
|
11 |
|
|
12 |
// Soubor, do ktereho se budou zaznamy vkladat (defaultne ve slozce log). |
|
13 |
private $log_file; |
|
14 |
|
|
15 |
public function __construct() { |
|
16 |
$this->log_file = "log/cron.txt"; |
|
17 |
} |
|
18 |
|
|
19 |
public function log($type, $message) { |
|
20 |
$type_str = ""; |
|
21 |
switch ($type) { |
|
22 |
case self::INFO: $type_str = "INFO"; break; |
|
23 |
case self::WARNING: $type_str = "WARNING"; break; |
|
24 |
default: $type_str = "ERROR"; break; |
|
25 |
} |
|
26 |
|
|
27 |
$micro_date = microtime(); |
|
28 |
$date_array = explode(" ", $micro_date); |
|
29 |
$date = sprintf("%s.%03d", date("d.m.Y H:i:s", $date_array[1]), (int) ($date_array[0] * 1000)); |
|
30 |
|
|
31 |
file_put_contents($this->log_file, "$date\r\n--- $type_str ---\r\n$message\r\n\r\n", FILE_APPEND); |
|
32 |
} |
|
33 |
|
|
34 |
} |
|
35 |
|
|
36 |
?> |
cron_test/parser.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
require_once "traffic.php"; |
|
4 |
require_once "location.php"; |
|
5 |
require_once "logging.php"; |
|
6 |
|
|
7 |
class Parser { |
|
8 |
|
|
9 |
// Pro data o doprave - na kolik intervalu se ma rozdelit den (96 = 4 * 24 => intervaly po ctvrt hodine). |
|
10 |
public $HOW_MANY_INTERVALS = 96; |
|
11 |
|
|
12 |
// Pro data o doprave - jak dlouho v milisekundach trva jeden interval. |
|
13 |
public $intervalMilli; |
|
14 |
|
|
15 |
// Pole informaci o lokacich. |
|
16 |
private $locations; |
|
17 |
|
|
18 |
// Pole informaci o doprave - peti-rozmerne pole s nasledujici strukturou: |
|
19 |
// Zaklad tvori pole zarizeni. Pro kazde zarizeni je pak pole pro casove intervaly. |
|
20 |
// Kazdy casovy interval ma pole o dvou prvcich (dva smery). Pro kazdy smer je vytvoreno pole o jedenacti |
|
21 |
// prvcich (jedenact typu vozidel). Pro kazde vozidlo je vytvoreno pole o dvou prvcich (pocet vozidel, suma rychlosti). |
|
22 |
private $traffic; |
|
23 |
|
|
24 |
// Skoro to same jako $traffic, akorat bez rozmeru pro casove intervaly. |
|
25 |
private $trafficOneDay; |
|
26 |
|
|
27 |
// Objekt pro logovani do souboru cron.txt ve slozce log. |
|
28 |
private $logs; |
|
29 |
|
|
30 |
public function __construct($logs) { |
|
31 |
// Pro lokace se data predzpracovavat nemusi. |
|
32 |
$this->locations = array(); |
|
33 |
|
|
34 |
// Naopak u zaznamu je prilis zbytecnych informaci - k predzpracovani dojit musi. |
|
35 |
$this->intervalMilli = (int) (24 * 3600000 / $this->HOW_MANY_INTERVALS); |
|
36 |
$this->traffic = array(); |
|
37 |
$this->trafficOneDay = array(); |
|
38 |
|
|
39 |
$this->logs = $logs; |
|
40 |
} |
|
41 |
|
|
42 |
public function doWork($date) { |
|
43 |
// Stazeni archivu pri stestovani neresime. |
|
44 |
// Pouze zapis do logu a zavolani zpracovani obou souboru. |
|
45 |
$this->logs->log(Logging::INFO, "ZACATEK PROCEDURY pro den ".DateTime::createFromFormat("Ymd", $date)->format("d.m.Y")."."); |
|
46 |
$this->logs->log(Logging::INFO, "Zpracovavani zaznamu o doprave."); |
|
47 |
$this->parse("data/test_".$date."_doprava.csv", TRUE); |
|
48 |
$this->logs->log(Logging::INFO, "Zpracovavani zaznamu o lokacich."); |
|
49 |
$this->parse("data/test_".$date."_lokace.csv", FALSE); |
|
50 |
$this->logs->log(Logging::INFO, "KONEC PROCEDURY."); |
|
51 |
} |
|
52 |
|
|
53 |
private function parse($fileName, $traffic) { |
|
54 |
if (($file = fopen($fileName, "r"))) { |
|
55 |
while (($row = fgetcsv($file, 1000, "|"))) { |
|
56 |
if ($traffic) { |
|
57 |
$this->saveVehicleInfo(new Traffic($row)); |
|
58 |
} else { |
|
59 |
$this->locations[] = new Location($row); |
|
60 |
} |
|
61 |
} |
|
62 |
fclose($file); |
|
63 |
} |
|
64 |
} |
|
65 |
|
|
66 |
private function saveVehicleInfo($t) { |
|
67 |
// Kontrola, jestli je pro dane zarizeni vytvorene pole casu. |
|
68 |
if (!isSet($this->traffic[$t->device])) { |
|
69 |
// Vytvorit prvni dva rozmery pole pro dopravni data s rozdelenim na casove intervaly. |
|
70 |
$this->traffic[$t->device] = array(); |
|
71 |
for ($i = 0; $i < $this->HOW_MANY_INTERVALS; $i++) { |
|
72 |
$this->traffic[$t->device][$i] = NULL; |
|
73 |
} |
|
74 |
|
|
75 |
// U pole s prumery za cely den rovnou vytvorit vsechny rozmery. |
|
76 |
$this->trafficOneDay[$t->device] = array(); |
|
77 |
for ($i = 0; $i < 2; $i++) { |
|
78 |
$this->trafficOneDay[$t->device][$i] = array(); |
|
79 |
for ($j = 0; $j < 11; $j++) { |
|
80 |
$this->trafficOneDay[$t->device][$i][$j] = array(0, 0, 0); // Pocet danych vozidel, suma jejich rychlosti a pocet vozidel u kterych nesla stanovit rychlost. |
|
81 |
} |
|
82 |
} |
|
83 |
|
|
84 |
} |
|
85 |
|
|
86 |
// Zjisteni, do jakeho casoveho intervalu patri zaznam. |
|
87 |
list($date, $time) = explode(" ", $t->dateTime->format("Y-m-d H:i:s.u"), 2); |
|
88 |
list($hours, $minutes, $seconds) = explode(":", $time, 3); |
|
89 |
$interval = (int) (($hours * 3600000 + $minutes * 60000 + $seconds * 1000) / $this->intervalMilli); |
|
90 |
|
|
91 |
// Kontrola, jestli je pro dany casovy interval vytvorene pole pro smery. |
|
92 |
if ($this->traffic[$t->device][$interval] == NULL) { |
|
93 |
$this->traffic[$t->device][$interval] = array(); |
|
94 |
for ($i = 0; $i < 2; $i++) { |
|
95 |
$this->traffic[$t->device][$interval][$i] = array(); |
|
96 |
for ($j = 0; $j < 11; $j++) { |
|
97 |
$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. |
|
98 |
} |
|
99 |
} |
|
100 |
} |
|
101 |
|
|
102 |
// Ulozeni dulezitych informaci o danem zaznamu do pole s casovymi intervaly a i do pole se zaznamy za cely den. |
|
103 |
if ($t->speed < 1) { |
|
104 |
$this->traffic[$t->device][$interval][$t->direction][$t->type10][2]++; |
|
105 |
$this->trafficOneDay[$t->device][$t->direction][$t->type10][2]++; |
|
106 |
} else { |
|
107 |
$this->traffic[$t->device][$interval][$t->direction][$t->type10][0]++; |
|
108 |
$this->traffic[$t->device][$interval][$t->direction][$t->type10][1] += $t->speed; |
|
109 |
$this->trafficOneDay[$t->device][$t->direction][$t->type10][0]++; |
|
110 |
$this->trafficOneDay[$t->device][$t->direction][$t->type10][1] += $t->speed; |
|
111 |
} |
|
112 |
} |
|
113 |
|
|
114 |
public function getTraffic() { |
|
115 |
return $this->traffic; |
|
116 |
} |
|
117 |
|
|
118 |
public function getTrafficOneDay() { |
|
119 |
return $this->trafficOneDay; |
|
120 |
} |
|
121 |
|
|
122 |
public function getLocations() { |
|
123 |
return $this->locations; |
|
124 |
} |
|
125 |
|
|
126 |
} |
|
127 |
|
|
128 |
?> |
cron_test/process_traffic_matrix.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
function process_traffic_matrix($parser, $traffic, $trafficOneDay, $idDateTable, $idRecordTimeTable, $idRecordTable, $idRecordOneDayTable, &$insertDate, &$insertRTT, &$insertRT, &$insertOneDay, $date) { |
|
4 |
$times = array(); |
|
5 |
|
|
6 |
// Rekonstrukce casovych intervalu. |
|
7 |
for ($i = 0; $i < $parser->HOW_MANY_INTERVALS; $i++) { |
|
8 |
$times[$i] = array(); |
|
9 |
$times[$i][0] = new DateTime($date); |
|
10 |
$times[$i][1] = new DateTime($date); |
|
11 |
|
|
12 |
$fromSec = (int) (($i * $parser->intervalMilli) / 1000); |
|
13 |
$toSec = (int) (($i + 1) * $parser->intervalMilli / 1000); |
|
14 |
|
|
15 |
$fromHours = (int) ($fromSec / 3600); |
|
16 |
$fromMinutes = (int) (($fromSec - $fromHours * 3600) / 60); |
|
17 |
$fromSeconds = (int) ($fromSec - $fromHours * 3600 - $fromMinutes * 60); |
|
18 |
|
|
19 |
$toHours = (int) ($toSec / 3600); |
|
20 |
$toMinutes = (int) (($toSec - $toHours * 3600) / 60); |
|
21 |
$toSeconds = (int) ($toSec - $toHours * 3600 - $toMinutes * 60); |
|
22 |
|
|
23 |
$times[$i][0]->setTime($fromHours, $fromMinutes, $fromSeconds); |
|
24 |
$times[$i][1]->setTime($toHours, $toMinutes, $toSeconds); |
|
25 |
} |
|
26 |
|
|
27 |
// Priprava dat pro naplneni tabulek zaznam a zaznam_cas. |
|
28 |
foreach ($traffic as $device => $timeIntervals) { |
|
29 |
for ($t = 0; $t < $parser->HOW_MANY_INTERVALS; $t++) { |
|
30 |
if ($timeIntervals[$t] != NULL) { |
|
31 |
for ($d = 0; $d < 2; $d++) { |
|
32 |
$dataExists = FALSE; |
|
33 |
|
|
34 |
for ($v = 0; $v < 11; $v++) { |
|
35 |
$count_ = $timeIntervals[$t][$d][$v][0] + $timeIntervals[$t][$d][$v][2]; |
|
36 |
if ($count_ > 0) { |
|
37 |
$dataExists = TRUE; |
|
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')"; |
|
45 |
} |
|
46 |
} |
|
47 |
|
|
48 |
if ($dataExists) { |
|
49 |
$insertRTT[] = "('".$idRecordTimeTable++."', '".($d + 1)."', '$device', '".($idDateTable + $t)."')"; |
|
50 |
} |
|
51 |
} |
|
52 |
} |
|
53 |
} |
|
54 |
} |
|
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. |
|
64 |
foreach ($trafficOneDay as $device => $direction) { |
|
65 |
for ($d = 0; $d < 2; $d++) { |
|
66 |
for ($v = 0; $v < 11; $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')"; |
|
74 |
} |
|
75 |
} |
|
76 |
} |
|
77 |
} |
|
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 |
|
|
87 |
} |
|
88 |
|
|
89 |
?> |
cron_test/traffic.php | ||
---|---|---|
1 |
<?php |
|
2 |
|
|
3 |
class Traffic { |
|
4 |
|
|
5 |
// Pouzivane atributy. |
|
6 |
public $device; |
|
7 |
public $direction; |
|
8 |
public $dateTime; |
|
9 |
public $speed; |
|
10 |
public $type10; |
|
11 |
|
|
12 |
// TODO pouziti. |
|
13 |
public $state; |
|
14 |
|
|
15 |
// Nepouzivane. |
|
16 |
// public $intensity; |
|
17 |
// public $intensityN; |
|
18 |
// public $occupancy; |
|
19 |
// public $type; |
|
20 |
// public $duration; |
|
21 |
// public $history; |
|
22 |
|
|
23 |
public function __construct($data) { |
|
24 |
$this->device = substr($data[0], 2, 3); |
|
25 |
$this->direction = substr($data[0], 7) - 1; // Misto hodnot 1, 2 - hodnoty 0, 1 (kvuli poli). |
|
26 |
$this->dateTime = new DateTime($data[1]); |
|
27 |
// $this->intensity = $data[2]; |
|
28 |
// $this->intensityN = $data[3]; |
|
29 |
// $this->occupancy = $data[4]; |
|
30 |
$this->speed = (double) $data[5]; |
|
31 |
$this->state = (int) $data[6]; |
|
32 |
// $this->type = $data[7]; |
|
33 |
// $this->duration = $data[8]; |
|
34 |
// $this->history = $data[9]; |
|
35 |
$this->type10 = (int) $data[10]; |
|
36 |
} |
|
37 |
|
|
38 |
} |
|
39 |
|
|
40 |
?> |
cron_test/vystup.sql | ||
---|---|---|
1 |
-- phpMyAdmin SQL Dump |
|
2 |
-- version 3.5.2.2 |
|
3 |
-- http://www.phpmyadmin.net |
|
4 |
-- |
|
5 |
-- Počítač: 127.0.0.1 |
|
6 |
-- Vygenerováno: Čtv 07. čen 2018, 01:11 |
|
7 |
-- Verze MySQL: 5.5.27-log |
|
8 |
-- Verze PHP: 5.4.6 |
|
9 |
|
|
10 |
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; |
|
11 |
SET time_zone = "+00:00"; |
|
12 |
|
|
13 |
|
|
14 |
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; |
|
15 |
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; |
|
16 |
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; |
|
17 |
/*!40101 SET NAMES utf8 */; |
|
18 |
|
|
19 |
-- |
|
20 |
-- Databáze: `prujezd_vozidel` |
|
21 |
-- |
|
22 |
CREATE DATABASE `prujezd_vozidel` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; |
|
23 |
USE `prujezd_vozidel`; |
|
24 |
|
|
25 |
-- -------------------------------------------------------- |
|
26 |
|
|
27 |
-- |
|
28 |
-- Struktura tabulky `datum` |
|
29 |
-- |
|
30 |
|
|
31 |
CREATE TABLE IF NOT EXISTS `datum` ( |
|
32 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
33 |
`od` datetime NOT NULL, |
|
34 |
`do` datetime NOT NULL, |
|
35 |
PRIMARY KEY (`id`) |
|
36 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=98 ; |
|
37 |
|
|
38 |
-- |
|
39 |
-- Vypisuji data pro tabulku `datum` |
|
40 |
-- |
|
41 |
|
|
42 |
INSERT INTO `datum` (`id`, `od`, `do`) VALUES |
|
43 |
(1, '2018-06-05 00:00:00', '2018-06-05 00:15:00'), |
|
44 |
(2, '2018-06-05 00:15:00', '2018-06-05 00:30:00'), |
|
45 |
(3, '2018-06-05 00:30:00', '2018-06-05 00:45:00'), |
|
46 |
(4, '2018-06-05 00:45:00', '2018-06-05 01:00:00'), |
|
47 |
(5, '2018-06-05 01:00:00', '2018-06-05 01:15:00'), |
|
48 |
(6, '2018-06-05 01:15:00', '2018-06-05 01:30:00'), |
|
49 |
(7, '2018-06-05 01:30:00', '2018-06-05 01:45:00'), |
|
50 |
(8, '2018-06-05 01:45:00', '2018-06-05 02:00:00'), |
|
51 |
(9, '2018-06-05 02:00:00', '2018-06-05 02:15:00'), |
|
52 |
(10, '2018-06-05 02:15:00', '2018-06-05 02:30:00'), |
|
53 |
(11, '2018-06-05 02:30:00', '2018-06-05 02:45:00'), |
|
54 |
(12, '2018-06-05 02:45:00', '2018-06-05 03:00:00'), |
|
55 |
(13, '2018-06-05 03:00:00', '2018-06-05 03:15:00'), |
|
56 |
(14, '2018-06-05 03:15:00', '2018-06-05 03:30:00'), |
|
57 |
(15, '2018-06-05 03:30:00', '2018-06-05 03:45:00'), |
|
58 |
(16, '2018-06-05 03:45:00', '2018-06-05 04:00:00'), |
|
59 |
(17, '2018-06-05 04:00:00', '2018-06-05 04:15:00'), |
|
60 |
(18, '2018-06-05 04:15:00', '2018-06-05 04:30:00'), |
|
61 |
(19, '2018-06-05 04:30:00', '2018-06-05 04:45:00'), |
|
62 |
(20, '2018-06-05 04:45:00', '2018-06-05 05:00:00'), |
|
63 |
(21, '2018-06-05 05:00:00', '2018-06-05 05:15:00'), |
|
64 |
(22, '2018-06-05 05:15:00', '2018-06-05 05:30:00'), |
|
65 |
(23, '2018-06-05 05:30:00', '2018-06-05 05:45:00'), |
|
66 |
(24, '2018-06-05 05:45:00', '2018-06-05 06:00:00'), |
|
67 |
(25, '2018-06-05 06:00:00', '2018-06-05 06:15:00'), |
|
68 |
(26, '2018-06-05 06:15:00', '2018-06-05 06:30:00'), |
|
69 |
(27, '2018-06-05 06:30:00', '2018-06-05 06:45:00'), |
|
70 |
(28, '2018-06-05 06:45:00', '2018-06-05 07:00:00'), |
|
71 |
(29, '2018-06-05 07:00:00', '2018-06-05 07:15:00'), |
|
72 |
(30, '2018-06-05 07:15:00', '2018-06-05 07:30:00'), |
|
73 |
(31, '2018-06-05 07:30:00', '2018-06-05 07:45:00'), |
|
74 |
(32, '2018-06-05 07:45:00', '2018-06-05 08:00:00'), |
|
75 |
(33, '2018-06-05 08:00:00', '2018-06-05 08:15:00'), |
|
76 |
(34, '2018-06-05 08:15:00', '2018-06-05 08:30:00'), |
|
77 |
(35, '2018-06-05 08:30:00', '2018-06-05 08:45:00'), |
|
78 |
(36, '2018-06-05 08:45:00', '2018-06-05 09:00:00'), |
|
79 |
(37, '2018-06-05 09:00:00', '2018-06-05 09:15:00'), |
|
80 |
(38, '2018-06-05 09:15:00', '2018-06-05 09:30:00'), |
|
81 |
(39, '2018-06-05 09:30:00', '2018-06-05 09:45:00'), |
|
82 |
(40, '2018-06-05 09:45:00', '2018-06-05 10:00:00'), |
|
83 |
(41, '2018-06-05 10:00:00', '2018-06-05 10:15:00'), |
|
84 |
(42, '2018-06-05 10:15:00', '2018-06-05 10:30:00'), |
|
85 |
(43, '2018-06-05 10:30:00', '2018-06-05 10:45:00'), |
|
86 |
(44, '2018-06-05 10:45:00', '2018-06-05 11:00:00'), |
|
87 |
(45, '2018-06-05 11:00:00', '2018-06-05 11:15:00'), |
|
88 |
(46, '2018-06-05 11:15:00', '2018-06-05 11:30:00'), |
|
89 |
(47, '2018-06-05 11:30:00', '2018-06-05 11:45:00'), |
|
90 |
(48, '2018-06-05 11:45:00', '2018-06-05 12:00:00'), |
|
91 |
(49, '2018-06-05 12:00:00', '2018-06-05 12:15:00'), |
|
92 |
(50, '2018-06-05 12:15:00', '2018-06-05 12:30:00'), |
|
93 |
(51, '2018-06-05 12:30:00', '2018-06-05 12:45:00'), |
|
94 |
(52, '2018-06-05 12:45:00', '2018-06-05 13:00:00'), |
|
95 |
(53, '2018-06-05 13:00:00', '2018-06-05 13:15:00'), |
|
96 |
(54, '2018-06-05 13:15:00', '2018-06-05 13:30:00'), |
|
97 |
(55, '2018-06-05 13:30:00', '2018-06-05 13:45:00'), |
|
98 |
(56, '2018-06-05 13:45:00', '2018-06-05 14:00:00'), |
|
99 |
(57, '2018-06-05 14:00:00', '2018-06-05 14:15:00'), |
|
100 |
(58, '2018-06-05 14:15:00', '2018-06-05 14:30:00'), |
|
101 |
(59, '2018-06-05 14:30:00', '2018-06-05 14:45:00'), |
|
102 |
(60, '2018-06-05 14:45:00', '2018-06-05 15:00:00'), |
|
103 |
(61, '2018-06-05 15:00:00', '2018-06-05 15:15:00'), |
|
104 |
(62, '2018-06-05 15:15:00', '2018-06-05 15:30:00'), |
|
105 |
(63, '2018-06-05 15:30:00', '2018-06-05 15:45:00'), |
|
106 |
(64, '2018-06-05 15:45:00', '2018-06-05 16:00:00'), |
|
107 |
(65, '2018-06-05 16:00:00', '2018-06-05 16:15:00'), |
|
108 |
(66, '2018-06-05 16:15:00', '2018-06-05 16:30:00'), |
|
109 |
(67, '2018-06-05 16:30:00', '2018-06-05 16:45:00'), |
|
110 |
(68, '2018-06-05 16:45:00', '2018-06-05 17:00:00'), |
|
111 |
(69, '2018-06-05 17:00:00', '2018-06-05 17:15:00'), |
|
112 |
(70, '2018-06-05 17:15:00', '2018-06-05 17:30:00'), |
|
113 |
(71, '2018-06-05 17:30:00', '2018-06-05 17:45:00'), |
|
114 |
(72, '2018-06-05 17:45:00', '2018-06-05 18:00:00'), |
|
115 |
(73, '2018-06-05 18:00:00', '2018-06-05 18:15:00'), |
|
116 |
(74, '2018-06-05 18:15:00', '2018-06-05 18:30:00'), |
|
117 |
(75, '2018-06-05 18:30:00', '2018-06-05 18:45:00'), |
|
118 |
(76, '2018-06-05 18:45:00', '2018-06-05 19:00:00'), |
|
119 |
(77, '2018-06-05 19:00:00', '2018-06-05 19:15:00'), |
|
120 |
(78, '2018-06-05 19:15:00', '2018-06-05 19:30:00'), |
|
121 |
(79, '2018-06-05 19:30:00', '2018-06-05 19:45:00'), |
|
122 |
(80, '2018-06-05 19:45:00', '2018-06-05 20:00:00'), |
|
123 |
(81, '2018-06-05 20:00:00', '2018-06-05 20:15:00'), |
|
124 |
(82, '2018-06-05 20:15:00', '2018-06-05 20:30:00'), |
|
125 |
(83, '2018-06-05 20:30:00', '2018-06-05 20:45:00'), |
|
126 |
(84, '2018-06-05 20:45:00', '2018-06-05 21:00:00'), |
|
127 |
(85, '2018-06-05 21:00:00', '2018-06-05 21:15:00'), |
|
128 |
(86, '2018-06-05 21:15:00', '2018-06-05 21:30:00'), |
|
129 |
(87, '2018-06-05 21:30:00', '2018-06-05 21:45:00'), |
|
130 |
(88, '2018-06-05 21:45:00', '2018-06-05 22:00:00'), |
|
131 |
(89, '2018-06-05 22:00:00', '2018-06-05 22:15:00'), |
|
132 |
(90, '2018-06-05 22:15:00', '2018-06-05 22:30:00'), |
|
133 |
(91, '2018-06-05 22:30:00', '2018-06-05 22:45:00'), |
|
134 |
(92, '2018-06-05 22:45:00', '2018-06-05 23:00:00'), |
|
135 |
(93, '2018-06-05 23:00:00', '2018-06-05 23:15:00'), |
|
136 |
(94, '2018-06-05 23:15:00', '2018-06-05 23:30:00'), |
|
137 |
(95, '2018-06-05 23:30:00', '2018-06-05 23:45:00'), |
|
138 |
(96, '2018-06-05 23:45:00', '2018-06-06 00:00:00'), |
|
139 |
(97, '2018-06-05 00:00:00', '2018-06-06 00:00:00'); |
|
140 |
|
|
141 |
-- -------------------------------------------------------- |
|
142 |
|
|
143 |
-- |
|
144 |
-- Struktura tabulky `mesto` |
|
145 |
-- |
|
146 |
|
|
147 |
CREATE TABLE IF NOT EXISTS `mesto` ( |
|
148 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
149 |
`nazev` varchar(100) NOT NULL, |
|
150 |
PRIMARY KEY (`id`) |
|
151 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; |
|
152 |
|
|
153 |
-- |
|
154 |
-- Vypisuji data pro tabulku `mesto` |
|
155 |
-- |
|
156 |
|
|
157 |
INSERT INTO `mesto` (`id`, `nazev`) VALUES |
|
158 |
(1, 'Česká Kubice'); |
|
159 |
|
|
160 |
-- -------------------------------------------------------- |
|
161 |
|
|
162 |
-- |
|
163 |
-- Struktura tabulky `ulice` |
|
164 |
-- |
|
165 |
|
|
166 |
CREATE TABLE IF NOT EXISTS `ulice` ( |
|
167 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
168 |
`nazev` varchar(255) NOT NULL, |
|
169 |
`mesto_id` bigint(20) NOT NULL, |
|
170 |
`zem_sirka` double NOT NULL DEFAULT '-1' COMMENT 'Zemepisna sirka podle GOOGLE.', |
|
171 |
`zem_delka` double NOT NULL DEFAULT '-1' COMMENT 'Zemepisna delka podle GOOGLE.', |
|
172 |
PRIMARY KEY (`id`), |
|
173 |
KEY `fk_ulice_mesto_idx` (`mesto_id`) |
|
174 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; |
|
175 |
|
|
176 |
-- |
|
177 |
-- Vypisuji data pro tabulku `ulice` |
|
178 |
-- |
|
179 |
|
|
180 |
INSERT INTO `ulice` (`id`, `nazev`, `mesto_id`, `zem_sirka`, `zem_delka`) VALUES |
|
181 |
(1, 'Česká Kubice', 1, 49.369388, 12.8588044); |
|
182 |
|
|
183 |
-- -------------------------------------------------------- |
|
184 |
|
|
185 |
-- |
|
186 |
-- Struktura tabulky `vozidlo` |
|
187 |
-- |
|
188 |
|
|
189 |
CREATE TABLE IF NOT EXISTS `vozidlo` ( |
|
190 |
`id` bigint(20) NOT NULL COMMENT 'Odpovídá číslu skupiny vozidla (TypVozidla10 v csv souboru s daty). Hodnoty 0-10.', |
|
191 |
`nazev` varchar(45) NOT NULL, |
|
192 |
PRIMARY KEY (`id`) |
|
193 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
|
194 |
|
|
195 |
-- |
|
196 |
-- Vypisuji data pro tabulku `vozidlo` |
|
197 |
-- |
|
198 |
|
|
199 |
INSERT INTO `vozidlo` (`id`, `nazev`) VALUES |
|
200 |
(0, 'Neznámé vozidlo'), |
|
201 |
(1, 'Motocykl'), |
|
202 |
(2, 'Auto'), |
|
203 |
(3, 'Auto s přívěsem'), |
|
204 |
(4, 'Dodávka'), |
|
205 |
(5, 'Dodávka s přívěsem'), |
|
206 |
(6, 'Lehký nákladní automobil'), |
|
207 |
(7, 'Lehký nákladní automobil s přívěsem'), |
|
208 |
(8, 'Nákladní automobil'), |
|
209 |
(9, 'Nákladní automobil s přívěsem'), |
|
210 |
(10, 'Autobus'); |
|
211 |
|
|
212 |
-- -------------------------------------------------------- |
|
213 |
|
|
214 |
-- |
|
215 |
-- Struktura tabulky `zarizeni` |
|
216 |
-- |
|
217 |
|
|
218 |
CREATE TABLE IF NOT EXISTS `zarizeni` ( |
|
219 |
`id` varchar(20) NOT NULL COMMENT 'Odpovídá idDevice v location.csv.', |
|
220 |
`smer_popis` varchar(255) NOT NULL COMMENT 'Odpovídá Name v locations.csv.', |
|
221 |
`stav` int(11) NOT NULL, |
|
222 |
`ulice_id` bigint(20) NOT NULL, |
|
223 |
PRIMARY KEY (`id`), |
|
224 |
KEY `fk_zarizeni_ulice1_idx` (`ulice_id`) |
|
225 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
|
226 |
|
|
227 |
-- |
|
228 |
-- Vypisuji data pro tabulku `zarizeni` |
|
229 |
-- |
|
230 |
|
|
231 |
INSERT INTO `zarizeni` (`id`, `smer_popis`, `stav`, `ulice_id`) VALUES |
|
232 |
('055', 'Česká Kubice, směr od Německa', 0, 1), |
|
233 |
('056', 'Česká Kubice, směr od Babylonu', 0, 1); |
|
234 |
|
|
235 |
-- -------------------------------------------------------- |
|
236 |
|
|
237 |
-- |
|
238 |
-- Struktura tabulky `zaznam` |
|
239 |
-- |
|
240 |
|
|
241 |
CREATE TABLE IF NOT EXISTS `zaznam` ( |
|
242 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
243 |
`vozidla_pocet` int(11) NOT NULL, |
|
244 |
`rychlost_prumer` double NOT NULL, |
|
245 |
`vozidla_id` bigint(20) NOT NULL, |
|
246 |
`zaznam_cas_id` bigint(20) NOT NULL, |
|
247 |
PRIMARY KEY (`id`), |
|
248 |
KEY `fk_zaznam_vozidla1_idx` (`vozidla_id`), |
|
249 |
KEY `fk_zaznam_zaznam_cas1_idx` (`zaznam_cas_id`) |
|
250 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ; |
|
251 |
|
|
252 |
-- |
|
253 |
-- Vypisuji data pro tabulku `zaznam` |
|
254 |
-- |
|
255 |
|
|
256 |
INSERT INTO `zaznam` (`id`, `vozidla_pocet`, `rychlost_prumer`, `vozidla_id`, `zaznam_cas_id`) VALUES |
|
257 |
(1, 1, 12, 0, 1), |
|
258 |
(2, 1, 16, 1, 1), |
|
259 |
(3, 4, 110.49233333333, 2, 1), |
|
260 |
(4, 1, -1, 3, 1), |
|
261 |
(5, 1, 19.05, 4, 1), |
|
262 |
(6, 2, 25.5, 8, 1), |
|
263 |
(7, 1, 65.4, 2, 2), |
|
264 |
(8, 1, 65.789, 6, 2), |
|
265 |
(9, 1, 25.15, 2, 3), |
|
266 |
(10, 1, 12, 0, 4), |
|
267 |
(11, 1, 16, 1, 4), |
|
268 |
(12, 2, 25.5, 2, 4), |
|
269 |
(13, 1, -1, 3, 4), |
|
270 |
(14, 1, 19.05, 4, 4), |
|
271 |
(15, 4, 110.49233333333, 8, 4), |
|
272 |
(16, 1, 25.15, 8, 5); |
|
273 |
|
|
274 |
-- -------------------------------------------------------- |
|
275 |
|
|
276 |
-- |
|
277 |
-- Struktura tabulky `zaznam_cas` |
|
278 |
-- |
|
279 |
|
|
280 |
CREATE TABLE IF NOT EXISTS `zaznam_cas` ( |
|
281 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
282 |
`smer` int(11) NOT NULL COMMENT '1 nebo 2 viz struktura idDetektor v csv souboru s daty.', |
|
283 |
`zarizeni_id` varchar(20) NOT NULL, |
|
284 |
`datum_id` bigint(20) NOT NULL, |
|
285 |
PRIMARY KEY (`id`), |
|
286 |
KEY `fk_zaznam_cas_zarizeni1_idx` (`zarizeni_id`), |
|
287 |
KEY `datum_id` (`datum_id`) |
|
288 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; |
|
289 |
|
|
290 |
-- |
|
291 |
-- Vypisuji data pro tabulku `zaznam_cas` |
|
292 |
-- |
|
293 |
|
|
294 |
INSERT INTO `zaznam_cas` (`id`, `smer`, `zarizeni_id`, `datum_id`) VALUES |
|
295 |
(1, 2, '056', 1), |
|
296 |
(2, 1, '056', 2), |
|
297 |
(3, 2, '056', 2), |
|
298 |
(4, 1, '055', 1), |
|
299 |
(5, 1, '055', 2); |
|
300 |
|
|
301 |
-- -------------------------------------------------------- |
|
302 |
|
|
303 |
-- |
|
304 |
-- Struktura tabulky `zaznam_prum_den` |
|
305 |
-- |
|
306 |
|
|
307 |
CREATE TABLE IF NOT EXISTS `zaznam_prum_den` ( |
|
308 |
`id` bigint(20) NOT NULL AUTO_INCREMENT, |
|
309 |
`vozidla_pocet` int(11) NOT NULL, |
|
310 |
`rychlost_prumer` double NOT NULL, |
|
311 |
`smer` int(11) NOT NULL, |
|
312 |
`zarizeni_id` varchar(20) NOT NULL, |
|
313 |
`vozidla_id` bigint(20) NOT NULL, |
|
314 |
`datum_id` bigint(20) NOT NULL, |
|
315 |
PRIMARY KEY (`id`), |
|
316 |
KEY `zarizeni_id` (`zarizeni_id`), |
|
317 |
KEY `vozidla_id` (`vozidla_id`), |
|
318 |
KEY `datum_id` (`datum_id`) |
|
319 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ; |
|
320 |
|
|
321 |
-- |
|
322 |
-- Vypisuji data pro tabulku `zaznam_prum_den` |
|
323 |
-- |
|
324 |
|
|
325 |
INSERT INTO `zaznam_prum_den` (`id`, `vozidla_pocet`, `rychlost_prumer`, `smer`, `zarizeni_id`, `vozidla_id`, `datum_id`) VALUES |
|
326 |
(1, 1, 65.4, 1, '056', 2, 97), |
|
327 |
(2, 1, 65.789, 1, '056', 6, 97), |
|
328 |
(3, 1, 12, 2, '056', 0, 97), |
|
329 |
(4, 1, 16, 2, '056', 1, 97), |
|
330 |
(5, 5, 89.15675, 2, '056', 2, 97), |
|
331 |
(6, 1, -1, 2, '056', 3, 97), |
|
332 |
(7, 1, 19.05, 2, '056', 4, 97), |
|
333 |
(8, 2, 25.5, 2, '056', 8, 97), |
|
334 |
(9, 1, 12, 1, '055', 0, 97), |
|
335 |
(10, 1, 16, 1, '055', 1, 97), |
|
336 |
(11, 2, 25.5, 1, '055', 2, 97), |
|
337 |
(12, 1, -1, 1, '055', 3, 97), |
|
338 |
(13, 1, 19.05, 1, '055', 4, 97), |
|
339 |
(14, 5, 89.15675, 1, '055', 8, 97); |
|
340 |
|
|
341 |
-- |
|
342 |
-- Omezení pro exportované tabulky |
|
343 |
-- |
|
344 |
|
|
345 |
-- |
|
346 |
-- Omezení pro tabulku `ulice` |
|
347 |
-- |
|
348 |
ALTER TABLE `ulice` |
|
349 |
ADD CONSTRAINT `fk_ulice_mesto` FOREIGN KEY (`mesto_id`) REFERENCES `mesto` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
350 |
|
|
351 |
-- |
|
352 |
-- Omezení pro tabulku `zarizeni` |
|
353 |
-- |
|
354 |
ALTER TABLE `zarizeni` |
|
355 |
ADD CONSTRAINT `fk_zarizeni_ulice1` FOREIGN KEY (`ulice_id`) REFERENCES `ulice` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
356 |
|
|
357 |
-- |
|
358 |
-- Omezení pro tabulku `zaznam` |
|
359 |
-- |
|
360 |
ALTER TABLE `zaznam` |
|
361 |
ADD CONSTRAINT `fk_zaznam_vozidla1` FOREIGN KEY (`vozidla_id`) REFERENCES `vozidlo` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
362 |
ADD CONSTRAINT `fk_zaznam_zaznam_cas1` FOREIGN KEY (`zaznam_cas_id`) REFERENCES `zaznam_cas` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
363 |
|
|
364 |
-- |
|
365 |
-- Omezení pro tabulku `zaznam_cas` |
|
366 |
-- |
|
367 |
ALTER TABLE `zaznam_cas` |
|
368 |
ADD CONSTRAINT `zaznam_cas_ibfk_1` FOREIGN KEY (`datum_id`) REFERENCES `datum` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
369 |
ADD CONSTRAINT `fk_zaznam_cas_zarizeni1` FOREIGN KEY (`zarizeni_id`) REFERENCES `zarizeni` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
370 |
|
|
371 |
-- |
|
372 |
-- Omezení pro tabulku `zaznam_prum_den` |
|
373 |
-- |
|
374 |
ALTER TABLE `zaznam_prum_den` |
|
375 |
ADD CONSTRAINT `zaznam_prum_den_ibfk_3` FOREIGN KEY (`datum_id`) REFERENCES `datum` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
376 |
ADD CONSTRAINT `zaznam_prum_den_ibfk_1` FOREIGN KEY (`zarizeni_id`) REFERENCES `zarizeni` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, |
|
377 |
ADD CONSTRAINT `zaznam_prum_den_ibfk_2` FOREIGN KEY (`vozidla_id`) REFERENCES `vozidlo` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; |
|
378 |
|
|
379 |
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; |
|
380 |
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; |
|
381 |
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
Také k dispozici: Unified diff
refs #7029: Vytvoreni testu na zpracovani zaznamu o doprave
Vytvoreni testu na komplikovanou cast cronu (zpracovani konkretnich zaznamu o doprave). Ostatni casti cronu otestovany zkousenim aplikace.