====== Страница Артонит Сити ======
====== Онова системы: формирование очереди на запись и удаление. ======
{{ :city:order-cardidx-cardindev.png?nolink |}}
**Схема 1. Порядок формирования очереди карт на запись и удаление.**\\ \\
На схеме 1 изображена основа базы данных Артонит 10.\\
В таблице ss_accessuser хранится информация о наборе прав для каждого пользователя.\\
С помощью триггеров SS_ACCESSUSER_DELETECARD и SS_ACCESSUSER_WRITECARDS с использованием процедур cardidx_delete и cardidx_insert соответственно данные заносятся в таблицу cardidx.\\
Таблица cardidx является [[http://www.artonit.ru/index.php?option=com_content&view=article&id=91%3Atheoreticskudartonitsoft2&catid=55%3Atutorial&Itemid=76&limitstart=1|решением основной задачи СКУД]].\\
Данные в таблицу ss_accessuser записываются с помощью программ Менеджер карт или сервера интеграции SOAP_Integration.\\
Таблицей device управляет приложение Конфигуратор.\\
Очередь на запись и удаление формируется в таблице CARDIDX и обрабатывается АСервером.
====== Основные отличия Артонит Сити от Артонит 10: ======
- Иной порядок предоставления доступа. В Артонит Сити пользователю может быть присвоена любая комбинация категорий доступа.
- Категории доступа присваиваются пользователю. Это позволяет определить его права еще до выдачи идентификатора.
- введена аналитика событий. При выявлении ошибки в проходах система автоматически исправляет ошибку.
- имеется web-интерфейс для организации оперативной работы бюро пропусков. В web-интерфейсе можно быстро проверить свойства пользователя.
====== Версии Артонит Сити ======
^№ п/п^Версия^Дата^Изменения^
|1|1.2.5|20.10.2017|Выводится список пользователей, у которых нет карты. При переходе по ссылке есть возможность удалить выбранных жильцов из базы данных СКУД.\\ Введ анализ событий вида Недействительная карта и указана причина отказа.|
|2|1.2.6|Май 2019|При анализе событий выводится подробная информация о причине отказа. Выводится информация об активности пользователя, активности карты, анализ по категориям доступа. Аналитика формируется в момент вставки события.|
|3|1.2.7|окт. 2020|Внесены изменения при работе с удаленными картами. Более детально см. History. {{ :city:city_1_2_7-2020_10_02.zip |}}|
====== Проверка свойств пользователя/жильца ======
Артонит Сити позволяет быстро проверить свойство пользователя/жильца.
[[city:check_people|Проверка свойств пользователя/жильца]]
====== Аналитика событий. ======
В ходе эксплуатации СКУД всегда есть потребность знать: а правильно ли работает СКУД? Может, где-то есть сбои, о которых оператор не знает?
Например, где-то система не пропустила где-то сотрудника, где этот сотрудник может ходить. Сотрудник не понял причины отказа, но и не стал жаловаться на работу системы. Получается, что система работает некорректно, но никто об этом не знает, ибо жалоб нет.
Возможна и обратная ситуация: сотрудник не имеет право прохода через какую-нибудь дверь, но СКУД его пропускает. Сотрудник тоже не будет жаловаться, т.к. его такая ситуация устраивает.
Потому всегда надо знать ответ на вопрос: были ли сбои в работе СКУД?
Артонит Сити имеет ответ на этот вопрос.
[[city:analit|Анализ событий]].
====== Самопроверка ======
В базе данных есть два уровня представления информации о проходах.\\
Первый уровень - это таблица ss_accessuser, в которой хранятся права пользователя. Существенно: набор категорий доступа "привязан" к пользователю, а не к идентификатору.\\
Второй уровень - это таблица cardidx, в которой хранится список карт с указанием в какие точки прохода эти карты могут ходить.\\
Второй уровень хранинеия данных строится на основе первого уровня.\\
Есть вероятность, что в силу непредвиденных причин второй вариант неправильно построен (например, после обновления базы данных).\\
Ниже приводится SQL-запрос, который находит разночтения в вариантах представления информации.\\
Результат выполнения запроса - список номеров идентификаторов, которые имеются в Уровне 1, но отсутствуют в уровне 2.\\
select ac.id_dev, c.id_card from ss_accessuser ssu
join card c on ssu.id_pep=c.id_pep
join access ac on ssu.id_accessname=ac.id_accessname
left join cardidx cd on cd.id_card=c.id_card and cd.id_dev=ac.id_dev
join device d on d.id_dev=ac.id_dev and d."ACTIVE"=1
join device d2 on d2.id_ctrl=d.id_ctrl and d2.id_reader is null and d2."ACTIVE"=1
where
c."ACTIVE">0
and (c.timeend>'NOW' or c.timeend is null)
and c.id_cardtype in (1,2)
and cd.id_card is null
С этими номерами следует поступить так:
insert into CardIdx(ID_DB, ID_CARD, ID_DEV) values (1, :id_card, :id_dev);
Где\\
:id_card - c.id_card из предыдущего запроса,\\
:id_dev ac.id_dev из предыдущего запроса.\\
После выполнение указанных действий результата выполнения запроса Самопроверка должен быть пустым: данные точно соответствуют друг другу.
Либо сразу так:\\
select 'insert into CardIdx(ID_DB, ID_CARD, ID_DEV) values (1, '''||c.id_card ||''', '||ac.id_dev||');' from ss_accessuser ssu
join card c on ssu.id_pep=c.id_pep
join access ac on ssu.id_accessname=ac.id_accessname
left join cardidx cd on cd.id_card=c.id_card and cd.id_dev=ac.id_dev
join device d on d.id_dev=ac.id_dev and d."ACTIVE"=1
join device d2 on d2.id_ctrl=d.id_ctrl and d2.id_reader is null and d2."ACTIVE"=1
where
c."ACTIVE">0
and (c.timeend>'NOW' or c.timeend is null)
and c.id_cardtype in (1,2)
and cd.id_card is null
результат выборки в виде готового набора sql-запросов следует вставить в окно скриптов.
====== History ======
2.10.2020\\
Фактически выводился список все неактивных карт, коих было 4729 шт. А надо выводить только тех, у кого срок действия истек, но карта еще активна.
Изменения 2.10.2020
C:\xampp\htdocs\city\application\classes\Model\Stat.php
стр 557. Убрана проверка на срок действия. Теперь выводится все неактивные карты.
А до этого выводились только c.timeend<\'now\'.
Получается, что мы не видели карты, у которых срок действия не истек, но они уже были неактивны.
Добавлен метод Model::Factory('stat')->Get_unActiveCard();
Этот метод готовит список всех неактивных карт.
C:\xampp\htdocs\city\application\views\dashboard.php
стр. 21. Добавлена ссылка на метод HTML::anchor('people/find_unActiveCard'...
C:\xampp\htdocs\city\application\classes\Controller\People.php
добавлен метод action_find_unActiveCard()
Вызывается метод Model::Factory('stat')->Get_unActiveCard() и полученный список передается во view 'people/card_late'
Изменены вызовы view в
public function action_find_card_late()
и
public function action_find_unActiveCard()
при вызове теперь добавяется параметр title.
Оба метода выводят данные на одно и то же окно, и теперь меняется название окна, а сама формы и реализованные в ней методы работы с картами одинаковы.
Чтобы формы различались у них сделан разный титул.
C:\xampp\htdocs\city\application\i18n\ru.php
Добавлена запись
'unActiveCard' => 'Список неактивных карт. Эти карты можно либо удалить, либо продлить до указанной Вами даты.',
и изменена
'card_late_info' => 'Список карт с прошедшим сроком действия. Эти карты можно либо удалить, либо продлить до указанной Вами даты.',
было
'card_late_info' => 'Список карт с прошедшим сроком действия',
Добавлена
'pp'=>'№ п/п',
Изменена форма C:\xampp\htdocs\city\application\views\People\card_late.php
добавлена колонка с номером по порядку.