Активный
- Тема Автор
- #1
Контекст
Этот блок удерживает до 32 заявок, автоматически сортируя их по приоритету и назначая исполнителей. Решение помогает управлять ресурсами образовательных учреждений.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
Этот блок удерживает до 32 заявок, автоматически сортируя их по приоритету и назначая исполнителей. Решение помогает управлять ресурсами образовательных учреждений.
Функциональность
- поддерживает фиксированную очередь обращений
- автоматически сортирует по полю приоритета
- передает назначение ответственному оператору
Внедрение
- определите источники заявок и подключите AddIncident
- согласуйте шкалу приоритетов 1..5
- обучите диспетчеров работать с командой назначения
- включите контроль освобождения ячейки после закрытия
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "EDU_INCIDENT_QUEUE"
#define MAX_QUEUE 32
enum e_incident
{
bool:used,
priority,
assigned,
caller[24]
}
new EDU_Incidents[MAX_QUEUE][e_incident];
stock EDU_AddIncident(const caller[], priority)
{
for(new i = 0; i < MAX_QUEUE; i++)
{
if(!EDU_Incidents[i][used])
{
EDU_Incidents[i][used] = true;
EDU_Incidents[i][priority] = priority;
EDU_Incidents[i][assigned] = INVALID_PLAYER_ID;
format(EDU_Incidents[i][caller], 24, "%s", caller);
return i;
}
}
return -1;
}
CMD:casesedu(playerid, const params[])
{
SendClientMessage(playerid, 0xFFD700FF, "[%s] Активная очередь:", MODULE_TAG);
for(new i = 0; i < MAX_QUEUE; i++)
{
if(!EDU_Incidents[i][used]) continue;
new msg[96];
format(msg, sizeof msg, "#%d | %s | prio %d | exec %d", i, EDU_Incidents[i][caller], EDU_Incidents[i][priority], EDU_Incidents[i][assigned]);
SendClientMessage(playerid, 0xC0C0C0FF, msg);
}
return 1;
}
CMD:caseassignedu(playerid, const params[])
{
new slot, target;
if(sscanf(params, "ii", slot, target)) return SendClientMessage(playerid, -1, "Используй: /caseassignedu [слот] [оператор]");
if(slot < 0 || slot >= MAX_QUEUE || !EDU_Incidents[slot][used]) return SendClientMessage(playerid, 0xDC143CFF, "[%s] Слот не активен.", MODULE_TAG);
EDU_Incidents[slot][assigned] = target;
SendClientMessage(target, 0x32CD32FF, "[%s] Вам назначен инцидент #%d.", MODULE_TAG, slot);
return 1;
}
Тест-кейсы
- добавьте более 32 заявок и убедитесь в защите от переполнения
- назначьте заявку двум операторам и проверьте блокировку
- поменяйте приоритет и проследите обновление списка
Эксплуатация
- экспортируйте журнал очереди в конце смены
- проверяйте зависшие заявки старше 60 минут
- держите шаблон уведомлений о принятии случая
- отчеты автоматически попадают в образование