Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
city:main [25.05.2020 08:47] buh [Самопроверка] |
city:main [02.10.2020 09:09] (текущий) buh [Версии Артонит Сити] |
||
---|---|---|---|
Строка 22: | Строка 22: | ||
^№ п/п^Версия^Дата^Изменения^ | ^№ п/п^Версия^Дата^Изменения^ | ||
|1|1.2.5|20.10.2017|Выводится список пользователей, у которых нет карты. При переходе по ссылке есть возможность удалить выбранных жильцов из базы данных СКУД.\\ Введ анализ событий вида Недействительная карта и указана причина отказа.| | |1|1.2.5|20.10.2017|Выводится список пользователей, у которых нет карты. При переходе по ссылке есть возможность удалить выбранных жильцов из базы данных СКУД.\\ Введ анализ событий вида Недействительная карта и указана причина отказа.| | ||
- | |1|1.2.6|Май 2019|При анализе событий выводится подробная информация о причине отказа. Выводится информация об активности пользоватея, активности карты, анализ по категориям доступа. Аналитика формируется в момент вставки события.| | + | |2|1.2.6|Май 2019|При анализе событий выводится подробная информация о причине отказа. Выводится информация об активности пользователя, активности карты, анализ по категориям доступа. Аналитика формируется в момент вставки события.| |
+ | |3|1.2.7|окт. 2020|Внесены изменения при работе с удаленными картами. Более детально см. History. {{ :city:city_1_2_7-2020_10_02.zip |}}| | ||
====== Проверка свойств пользователя/жильца ====== | ====== Проверка свойств пользователя/жильца ====== | ||
Артонит Сити позволяет быстро проверить свойство пользователя/жильца. | Артонит Сити позволяет быстро проверить свойство пользователя/жильца. | ||
Строка 40: | Строка 41: | ||
[[city:analit|Анализ событий]]. | [[city:analit|Анализ событий]]. | ||
====== Самопроверка ====== | ====== Самопроверка ====== | ||
- | В базе данных есть два уровня представления информации о проходах. | + | В базе данных есть два уровня представления информации о проходах.\\ |
- | + | Первый уровень - это таблица ss_accessuser, в которой хранятся права пользователя. Существенно: набор категорий доступа "привязан" к пользователю, а не к идентификатору.\\ | |
- | Первый уровень - это таблица ss_accessuser, в которой хранятся права пользователя. Существенно: набор категорий доступа "привязан" к пользователю, а не к идентификатору. | + | Второй уровень - это таблица cardidx, в которой хранится список карт с указанием в какие точки прохода эти карты могут ходить.\\ |
- | + | Второй уровень хранинеия данных строится на основе первого уровня.\\ | |
- | Второй уровень - это таблица cardidx, в которой хранится список карт с указанием в какие точки прохода эти карты могут ходить. | + | Есть вероятность, что в силу непредвиденных причин второй вариант неправильно построен (например, после обновления базы данных).\\ |
- | + | Ниже приводится SQL-запрос, который находит разночтения в вариантах представления информации.\\ | |
- | Второй уровень хранинеия данных строится на основе первого уровня. | + | Результат выполнения запроса - список номеров идентификаторов, которые имеются в Уровне 1, но отсутствуют в уровне 2.\\ |
- | + | ||
- | Есть вероятность, что в силу непредвиденных причин второй вариант неправильно построен (например, после обновления базы данных). | + | |
- | + | ||
- | Ниже приводится SQL-запрос, который находит разночтения в вариантах представления информации. | + | |
- | + | ||
- | Результат выполнения запроса - список номеров идентификаторов, которые имеются в Уровне 1, но отсутствуют в уровне 2. | + | |
- | + | ||
<code> | <code> | ||
- | select ac.id_dev, c.id_card, c.timestart, c.timeend, cd.id_card from ss_accessuser ssu | + | select ac.id_dev, c.id_card from ss_accessuser ssu |
join card c on ssu.id_pep=c.id_pep | join card c on ssu.id_pep=c.id_pep | ||
join access ac on ssu.id_accessname=ac.id_accessname | join access ac on ssu.id_accessname=ac.id_accessname | ||
Строка 70: | Строка 63: | ||
С этими номерами следует поступить так: | С этими номерами следует поступить так: | ||
<code> | <code> | ||
- | insert into CardIdx(ID_DB, ID_CARD, ID_DEV) values (:id_db, :id_card, :id_dev); | + | insert into CardIdx(ID_DB, ID_CARD, ID_DEV) values (1, :id_card, :id_dev); |
</code> | </code> | ||
+ | Где\\ | ||
+ | :id_card - c.id_card из предыдущего запроса,\\ | ||
+ | :id_dev ac.id_dev из предыдущего запроса.\\ | ||
После выполнение указанных действий результата выполнения запроса Самопроверка должен быть пустым: данные точно соответствуют друг другу. | После выполнение указанных действий результата выполнения запроса Самопроверка должен быть пустым: данные точно соответствуют друг другу. | ||
+ | |||
+ | Либо сразу так:\\ | ||
+ | <code> | ||
+ | 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 | ||
+ | </code> | ||
+ | результат выборки в виде готового набора 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 | ||
+ | добавлена колонка с номером по порядку. | ||
+ |