File: /var/www/heifetz/heifetz-app/models/QueueStatus.php
<?php
declare(strict_types=1);
namespace Models;
use Core\DbLib\DbModel;
use Traits\ModelGetQuery;
/**
* @property int $id
* @property string $queue
* @property int $count
* @property string $time
*/
class QueueStatus extends DbModel
{
use ModelGetQuery;
protected static bool $hasCompanyRelation = false;
static string $tableName = 'queue_status';
public static function add($queueName, $time, $count): int|array
{
$minute = date('i');
$minute = $minute[0] . ($minute[1] > 5 ? 5 : 0);
$time = date('Y-m-d H:0' . $minute . ':00', strtotime($time));
$old = self::getQuery()->where('queue = ?', $queueName)->where('time = ?', $time)->fetchRow();
if (empty($old)) {
return self::create(['queue' => $queueName, 'count' => $count, 'time' => $time]);
}
self::update(['count' => $count], ['id' => $old->id]);
return $old->id;
}
public static function getData(): array
{
$startTime = date('Y-m-d H:i:00', strtotime('-1 hour'));
$records = self::getQuery()->where('time >= ?', $startTime)->order('time', 'DESC')->fetchAll();
$hours = [];
$minute = date('i');
$minute = $minute[0] . ($minute[1] > 5 ? 5 : 0);
$now = date('Y-m-d H:' . $minute . ':s');
for ($i = 0; $i < 12; $i++) {
$hours[] = date('H:i', strtotime($now . ' -' . $i * 5 . 'minute'));
}
$hours = array_values(array_reverse($hours));
$hoursMap = array_flip($hours);
$legend = [];
foreach ($records as $record) {
if (!in_array($record->queue, $legend)) {
$legend[] = $record->queue;
}
}
$legendMap = array_flip($legend);
$data = [];
foreach ($records as $record) {
$data[$record->queue][date('H:i', strtotime($record->time))] = $record->count;
}
$queueStatus = [
'legend' => $legend,
'hours' => $hours,
'data' => [],
];
foreach ($legend as $queue) {
if (!isset($queueStatus['data'][$legendMap[$queue]])) {
$queueStatus['data'][$legendMap[$queue]] = [
'name' => $queue,
'type' => 'line',
'smooth' => true,
'itemStyle' => ['normal' => ['areaStyle' => ['type' => 'default']]],
'data' => [],
];
}
foreach ($hours as $hour) {
if (!isset($queueStatus['data'][$legendMap[$queue]]['data'][$hoursMap[$hour]])) {
$queueStatus['data'][$legendMap[$queue]]['data'][$hoursMap[$hour]] = 0;
}
if (!empty($data[$queue][$hour])) {
$queueStatus['data'][$legendMap[$queue]]['data'][$hoursMap[$hour]] = $data[$queue][$hour];
}
}
}
return $queueStatus;
}
}