Projekt

Obecné

Profil

« Předchozí | Další » 

Revize fadc220b

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

refs #6759: Pridan endpoint pro day-period.

Zobrazit rozdíly:

backend/app/Http/Controllers/DeviceController.php
177 177
        }
178 178
    }
179 179

  
180
    /**
181
     * Vrati denni prumery pro jednotlive typy vozidel.
182
     *
183
     * @param Request $request Request s parametry.
184
     * @param $id Id zarizeni.
185
     * @return Mixed_
186
     */
187
    public function getTrafficDayAverage(Request $request, $id) {
188
        // nacteni parametru
189
        $params = $this->loadDateTimeDirectionConstraints($request);
190
        $dateFrom = $params[self::DATE_FROM_PARAM];
191
        $dateTo = $params[self::DATE_TO_PARAM];
192
        $direction = $params[self::DIRECTION_PARAM];
193

  
194
        $device = Zarizeni::findByIdJoinAddress($id);
195
        if ($device != null) {
196
            $device->dateFrom = $dateFrom;
197
            $device->dateTo = $dateTo;
198

  
199
            if ($direction != null) {
200
                $device->direction = intval($direction);
201
            }
202

  
203
            $device->traffics = Zaznam::averageByDay($id, $dateFrom, $dateTo, $direction);
204
            return json_encode($device);
205
        } else {
206
            return response('Not found.', 404);
207
        }
208
    }
209

  
180 210
    public function getAll()
181 211
    {
182 212
        return Zarizeni::getAllJoinAddress();
......
203 233
     * Defaultni hodnoty jsou null.
204 234
     *
205 235
     * @param Request $request Request ze ktere budou nacitany parametry.
236
     * @return array Pole s nactenymi parametry.
206 237
     */
207 238
    private function loadDateTimeDirectionConstraints(Request $request)
208 239
    {
backend/app/Http/routes.php
12 12
*/
13 13

  
14 14
$apiUrlRoot='/api/v1/';
15
$corsMiddle = 'cors';
16
$jwtMiddle = 'jwtauth';
15 17

  
16 18
/**
17 19
 * Welcome endpoint.
......
24 26
 * Vrati seznam mericich zarizeni.
25 27
 */
26 28
$app->get($apiUrlRoot.'devices', [
27
    'middleware' => ['cors', 'jwtauth'],
29
    'middleware' => [$corsMiddle, $jwtMiddle],
28 30
    'uses' => 'DeviceController@getDevice'
29 31
]);
30 32

  
......
33 35
 * Vrati zaznamy o doprav e za casovy usek pro dane zarizeni.
34 36
 */
35 37
$app->get($apiUrlRoot.'devices/{id}', [
36
    'middleware' => ['cors', 'jwtauth'],
38
    'middleware' => [$corsMiddle, $jwtMiddle],
37 39
    'uses' => 'DeviceController@getDeviceByIdWithTraffic'
38 40
]);
39 41

  
40 42
$app->get($apiUrlRoot.'devices/{id}/csv', [
41
    'middleware' => 'jwtauth',
43
    'middleware' => $jwtMiddle,
42 44
    'uses' => 'DeviceController@getDeviceByIdAsCsv'
43 45
]);
44 46

  
......
46 48
 * Vrati prumery dopravy pro danze zarizeni za casovy usek.
47 49
 */
48 50
$app->get($apiUrlRoot.'devices/{id}/time-period', [
49
    'middleware' => ['cors', 'jwtauth'],
51
    'middleware' => [$corsMiddle, $jwtMiddle],
50 52
    'uses' => 'DeviceController@getTrafficAverageByDevice'
51 53
]);
52 54

  
53 55

  
56
/**
57
 * Vrati denni prumery podle typu vozidla
58
 */
59
$app->get($apiUrlRoot.'devices/{id}/day-period', [
60
    'middleware' => [$corsMiddle, $jwtMiddle],
61
    'uses' => 'DeviceController@getTrafficDayAverage'
62
]);
63

  
54 64
/**
55 65
 * Vrati vsechny typy aut.
56 66
 */
57 67
$app->get($apiUrlRoot.'vehicles', [
58
    'middleware' => ['cors', 'jwtauth'],
68
    'middleware' => [$corsMiddle, $jwtMiddle],
59 69
    'uses' => 'VehicleController@getAll'
60 70
]);
61 71

  
......
63 73
 * Vrati vsechna mesta.
64 74
 */
65 75
$app->get($apiUrlRoot.'cities', [
66
    'middleware' => ['cors', 'jwtauth'],
76
    'middleware' => [$corsMiddle, $jwtMiddle],
67 77
    'uses' => 'LocationController@getCities'
68 78
]);
69 79

  
backend/app/Model/Zaznam.php
20 20
    protected $table = 'zaznam';
21 21

  
22 22
    /**
23
     * Vrati posledni datum pro ktere existuji nejake zaznamy.
23
     * Vrati posledni datum pro ktere existuji zaznamy v tabulce zaznam_cas.
24 24
     * @return String Posledni datum pro ktere existuji zaznamy.
25 25
     */
26 26
    public static function lastInsertedDate()
27 27
    {
28
        return DB::table('datum')->select(DB::raw('max(date(od)) as last_day'))->get();
28
        return DB::table('zaznam_cas')
29
            ->join('datum', 'zaznam_cas.datum_id', '=', 'datum.id')
30
            ->select(DB::raw(
31
                'max(date(datum.od)) as last_day'
32
            ))
33
            ->get();
34
    }
35

  
36
    /**
37
     * Vrati posledni datum pro ktere existuji zaznamy v tabulce zaznam_prum_den.
38
     * @return String Posledni datum pro ktere existuji zaznamy.
39
     */
40
    public static function lastDayAverageInsertedDate() {
41
        return DB::table('zaznam_prum_den')
42
            ->join('datum', 'zaznam_prum_den.datum_id', '=', 'datum.id')
43
            ->select(DB::raw('
44
                max(date(datum.od)) as last_day_from,
45
                max(date(datum.do)) as last_day_to'
46
            ))
47
            ->get();
29 48
    }
30 49

  
31 50
    /**
......
37 56
     * @param String $timeFrom Pocatecni cas. Null znamena 00:00.
38 57
     * @param String $timeTo Koncovy cas. Null znamena 23:59.
39 58
     * @param int $direction Pozadovany smer. Null znamena oba smery.
40
     * @return array Prumery dopravy pro casovy usek podle typu vozidla.
59
     * @return \stdClass Prumery dopravy pro casovy usek podle typu vozidla.
41 60
     */
42 61
    public static function averageByDevice($deviceId, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction)
43 62
    {
......
86 105
        return $query->get();
87 106
    }
88 107

  
108
    /**
109
     * Vrati denni prumery podle typu vozidla.
110
     *
111
     * @param integer $deviceId Id Zarizeni.
112
     * @param String $dateFrom Pocatecni datum. Null znamená poledni vlozeny den.
113
     * @param String $dateTo Koncove datum. Null znamena posledni vlozeny den.
114
     * @param integer $direction Pozadovany smer. Null znamena oba smery.
115
     * @return \stdClass Denni prumery podle typu vozidla.
116
     */
117
    public static function averageByDay($deviceId, $dateFrom, $dateTo, $direction) {
118
        $lastDateFrom = null;
119
        $lastDateTo = null;
120
        $lastDate = null;
121
        $dir = null;
122

  
123
        // jedno z omezujicich dat je null => ziskej posledni vlozene datum
124
        if ($dateFrom == null || $dateTo == null) {
125
            $lastDate = Zaznam::lastDayAverageInsertedDate();
126
            if ($lastDate == null) {
127
                // database is empty
128
                return "no-data";
129
            } else {
130
                $lastDateFrom = $lastDate[0]->last_day_from;
131
                $lastDateTo = $lastDate[0]->last_day_to;
132
            }
133
        }
134

  
135
        // vytvoreni query - vsechno to dat dohromady
136
        $query = DB::table('zaznam_prum_den')
137
            ->join('datum', 'zaznam_prum_den.datum_id', '=', 'datum.id')
138
            ->select(DB::raw("
139
                date_format(datum.od, '%Y-%m-%d') as date,
140
                zaznam_prum_den.rychlost_prumer as speedAverage,
141
                zaznam_prum_den.vozidla_pocet as numberVehicle,
142
                zaznam_prum_den.vozidlo_id as typeVehicle
143
            "))
144
            ->whereDate('datum.od', '>=', $dateFrom == null ? $lastDateFrom : $dateFrom)
145
            ->whereDate('datum.do', '<=', $dateTo == null ? $lastDateTo : $dateTo)
146
            ->where('zaznam_prum_den.zarizeni_id', '=', $deviceId);
147

  
148
        if ($direction != null) {
149
            $query = $query->where('zaznam_prum_den.smer', '=', $direction);
150
        }
151

  
152
        // pridat grouping a razeni nakonec
153
        $query = $query
154
            ->groupBy('date', 'typeVehicle')
155
            ->orderBy('date', 'asc')
156
            ->orderBy('zaznam_prum_den.vozidlo_id', 'asc');
157

  
158
        return $query->get();
159

  
160
    }
161

  
89 162
    /**
90 163
     * Vrati zaznamy pro urcite zarizeni.
91 164
     * Typ vozidla je vracen s kazdym zaznamem.

Také k dispozici: Unified diff