Конвейер разрешений Orbit ночного режима для армии

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Контекст
ведёт поток заявок на постройки и их стадии держит ночные смены в курсе каждой секунды поддерживает оперативные группы армии.

Функциональность
  • отслеживает статусы проверки для департамента развития ночного контура и наносит данные на ночную сетку Watcher
  • управляет портал Orbit через панель Permit без задержек
  • прогнозирует зависшие заявки и заранее предупреждает инспекторов

Внедрение
  • прописать справочник категорий и ночные ключи доступа перед вводом
  • сверить план приёмных часов с марки Chronos
  • назначить ответственных за группа рецензентов и ночной резерв каналов
  • загрузить сценарии шаблон отказа и ночные регламенты

Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define MODULE_TAG "ARM_PERMIT_ORBIT_NIGHT"
#define PERMIT_CAP 36

enum e_permit
{
    bool:active,
    status,
    owner,
    category[24],
    address[48]
};
new ARM_Permits[PERMIT_CAP][e_permit];

CMD:permitorbitnstatarmy(playerid, const params[])
{
    SendClientMessage(playerid, 0xFFEBCDFF, "[%s] Заявки:", MODULE_TAG);
    for(new i = 0; i < PERMIT_CAP; i++)
    {
        if(!ARM_Permits[i][active]) continue;
        new msg[144];
        format(msg, sizeof msg, "#%d st:%d | %s | %s", i, ARM_Permits[i][status], ARM_Permits[i][category], ARM_Permits[i][address]);
        SendClientMessage(playerid, 0xFFEBCDFF, msg);
    }
    return 1;
}

CMD:permitorbitnctlarmy(playerid, const params[])
{
    new action[8], slot, status, owner;
    new category[24], address[48];
    if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /permitorbitnctlarmy file/status/remove");

    if(!strcmp(action, "file", true))
    {
        if(sscanf(params, "s[8]is[24]s[48]i", action, slot, category, address, owner)) return SendClientMessage(playerid, -1, "/permitorbitnctlarmy file [слот] [категория] [адрес] [id]");
        ARM_Permits[slot][active] = true;
        ARM_Permits[slot][status] = 0;
        ARM_Permits[slot][owner] = owner;
        format(ARM_Permits[slot][category], 24, "%s", category);
        format(ARM_Permits[slot][address], 48, "%s", address);
    }
    else if(!strcmp(action, "status", true))
    {
        if(sscanf(params, "s[8]ii", action, slot, status)) return SendClientMessage(playerid, -1, "/permitorbitnctlarmy status [слот] [0-3]");
        ARM_Permits[slot][status] = status;
        new msg[96];
        format(msg, sizeof msg, "[%s] Статус заявки #%d теперь %d.", MODULE_TAG, slot, status);
        SendClientMessage(ARM_Permits[slot][owner], 0x32CD32FF, msg);
    }
    else if(!strcmp(action, "remove", true))
    {
        if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/permitorbitnctlarmy remove [слот]");
        ARM_Permits[slot][active] = false;
    }
    return 1;
}

Тест-кейсы
  • провести испытание: подать заявку и прогнать все статусы — ожидать корректного сигнала
  • смоделировать отказ: удалить заявку в середине потока — убедиться что резерв подхватил
  • сравнить отчёт с кадастровый журнал и подтвердить отсутствие расхождений

Эксплуатация
  • еженедельно выгружать отчёты
  • контролировать заявки старше 12 часов
  • проводить ночные аудиты вместе с инспекторов
  • держать план реагирования на зависшие заявки актуальным
  • отчёты автоматически попадают в армия
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху