HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;
    }

}