====== Страница Артонит Сити ====== ====== Онова системы: формирование очереди на запись и удаление. ====== {{ :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 добавлена колонка с номером по порядку.