Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:arccnt:mod:msc [2016/06/21 05:46]
denis
doc:arccnt:mod:msc [2016/06/21 07:28] (текущий)
denis [card]
Строка 59: Строка 59:
 ^Параметр^По умолчанию^Описание^ ^Параметр^По умолчанию^Описание^
 |**db** ​ |  ''​db'' ​ |Модуль базы данных ​ | |**db** ​ |  ''​db'' ​ |Модуль базы данных ​ |
-|**refmod** ​ |  ​''​-'' ​ ​|Модуль,​ содержащий теги от считывателей ​ |+|**refmod** ​ |  -  |Модуль,​ содержащий теги от считывателей ​ |
 |**script** ​ |  ''​msc'' ​ |Имя dbscr-скрипта ​ | |**script** ​ |  ''​msc'' ​ |Имя dbscr-скрипта ​ |
 |**schema** ​ |  ''​msc'' ​ |Название схемы (префикс для имен метаобъектов в базе данных) ​ | |**schema** ​ |  ''​msc'' ​ |Название схемы (префикс для имен метаобъектов в базе данных) ​ |
 +
 +====== Основные таблицы ======
 +Во многих таблицах встречается поле deleted. Если значение в нем не равно 0, то запись считается удаленной и не будет участвовать при создании новых задач.
 +===== reader =====
 +<code sql>
 +            create table {schema}_READER (
 +                ID integer not null primary key,
 + ISGROUP smallint default 0,
 +                NAME varchar(128),​
 +                IDNAME varchar(64),​
 +                READERTYPE varchar(64),​
 +                DELETED smallint default 0
 +              )
 +</​code>​
 +**ISGROUP** -- 0 - обычная запись,​ 1 - группа\\
 +**NAME** - текстовое название считывателя\\
 +**IDNAME** - имя модуля считывателя,​ по которому будут созданы теги\\
 +**READERTYPE** - пока только ''​promauto''​\\
 +===== person =====
 +<code sql>
 +            create table {schema}_PERSON (
 +                ID integer not null primary key,
 + ISGROUP smallint default 0,
 +                NAME varchar(128),​
 +                DELETED smallint default 0
 +              )
 +</​code>​
 +
 +Владельцы карт.
 +
 +===== card =====
 +<code sql>
 +            create table {schema}_CARD (
 +                ID integer not null primary key,
 +                PERSON_ID integer references {schema}_PERSON on delete cascade on update cascade,
 +                CODE varchar(32),​
 +                DT_CREATE timestamp,
 +                DELETED smallint default 0
 +              )
 +</​code>​
 +
 +Карты.
 +
 +**CODE** - код карты в десятичном формате,​ пример:​ "​89,​11,​36277"​
 +===== schedule =====
 +<code sql>
 +            create table {schema}_SCHEDULE (
 +                ID integer not null primary key,
 +                READER_ID integer references {schema}_READER on delete cascade on update cascade,
 +         TIMETBL varchar(1024),​
 + DURATION integer,
 +                DESCR varchar(256),​
 + AUTOTASK smallint default 1,
 +                DELETED smallint default 0
 +              )
 +</​code>​
 +
 +Расписание по которому будут генерироваться задачи.
 +
 +**TIMETABLE** - задание время для автоматического создания задач. Формат записи на примерах:​
 +|e/​0800 ​ |Ежедневно в 8:00  |
 +|e/0800 0830  |Ежедневно в 8:00 и 8:30  |
 +|w 1 2 3 4 5/0800 0830  |Каждую неделю по будням в 8:00 и 8:30  |
 +|m 1 10 20/0000 1200  |Каждый месяц 1-го, 10-го и 20-го числа в 00:00 и 12:00  |
 +|d 20160621 20160622/​0800 0830  |21.06.2016 и 22.06.2016 в 8:00 и 8:30  |
 +|e/0800;m 1 4/​0830 ​ |Ежедневно в 8:00 и в каждый понедельник и четверг в 8:30  |
 +
 +**DURATION** - длительность задачи в минутах. В течение этого времени от начала задачи требуется ее выполнение.\\
 +**AUTOTASK** - если 1, то разрешена автоматическая генерация задач по данному расписанию.
 +
 +===== task =====
 +<code sql>
 +            create table {schema}_TASK (
 +                ID integer not null primary key,
 +                SCHEDULE_ID integer references {schema}_SCHEDULE on delete cascade on update cascade,
 +                READER_ID integer references {schema}_READER on delete cascade on update cascade,
 +                PERSON_ID integer references {schema}_PERSON on delete set null on update cascade,
 +                DT_CREATE timestamp,
 +                DT_BEGIN timestamp,
 +                DT_END timestamp,
 +                DT_EXPIRE timestamp,
 +                DT_REG timestamp,
 +                STATUS smallint,
 +                DELETED smallint default 0
 +              )
 +</​code>​
 +
 +Таблица содержит задачи на обслуживание определенного оборудования со считывателемя. ​
 +
 +**DT_CREATE** - создание задачи - момент создания записи в таблицы.\\
 +**DT_BEGIN** - начало задачи - с какого момента можно подносить карту к считывателю.\\
 +**DT_END** - окончание задачи - поднесение карты после этого момента будет засчитано как выполнение с опозданием.\\
 +**DT_EXPIRE** - максимальное время жизни открытой задачи,​ после которого она автоматически закрывается со статусом ''​3''​.\\
 +**DT_REG** - дата и время выполнения задачи (поднесения карты).\\
 +**PERSON_ID** - человек,​ выполнивший задачу.\\
 +**STATUS** - статус задачи:​
 +^Код статуса ​ ^Описание ​ ^
 +|  0  |Открыта ​ |
 +|  1  |Закрыта во время ​ |
 +|  2  |Закрыта с опозданием |
 +|  3  |Закрыта по просрочке ​ |
 +|  4  |Отменена ​ |
 +
 +===== input =====
 +<code sql>
 +            create table {schema}_INPUT (
 +                ID integer not null primary key,
 +                CARD_ID integer references {schema}_CARD on delete cascade on update cascade,
 +                READER_ID integer references {schema}_READER on delete cascade on update cascade,
 +                PERSON_ID integer references {schema}_PERSON on delete set null on update cascade,
 +                DT timestamp
 +              )
 +</​code>​
 +
 +В данной таблице сохраняются все считывания карт. PERSON_ID может содержать null, если карта не имеет владельца.
 +
 +
 +====== Работа модуля ======
 +
 +При запуске модуль ожидает подключений к базе данных и к серверу данных,​ после чего циклически выполняет действия:​
 +
 +===== Получение и сохранение данных от считывателей =====
 +
 +Выполняется проверка поступления новых кодов от считывателей,​ и если есть, фиксирование их в базе данных в таблице ''​input''​. При этом выполняется поиск открытой задачи по данному считывателю,​ и, если у владельца карты есть права на задачу,​ в таблице ''​task''​ выполняется закрытие задачи со статусом 1 или 2.
 +
 +После успешной записи данных считывателю посылается обратная связь на светодиоды:​
 +  - длинный зеленый - задача закрыта
 +  - длинный синий - задача не найдена,​ либо у владельца карты нет прав
 +  - мигающий синий - карта не имеет владельца
 +
 +===== Генерирование новых задач =====
 +По расписанию в таблице ''​schedule''​ создаются задачи и помещаются в таблицу ''​task''​. При этом сразу расчитываются даты открытия,​ закрытия и просрочки задачи. Дата просрочки вычисляется как дата начала следующей задачи по данному расписанию.
 +
 +
 +===== Закрытие просроченных задач =====
 +Открытые задачи,​ т.е. те у которых STATUS=0 и DT_REG is null, считаются просроченными,​ если DT_EXPIRE < текущее время. При этом в ''​task''​ для данной задачи прописывается STATUS=3 и DT_REG=текущее время.
 +
 +
  
doc/arccnt/mod/msc.1466477213.txt.gz · Последние изменения: 2016/06/21 05:46 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0