Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:arccnt:mod:msc [2016/06/21 06:01]
denis
doc:arccnt:mod:msc [2016/06/21 07:28] (текущий)
denis [card]
Строка 64: Строка 64:
  
 ====== Основные таблицы ====== ====== Основные таблицы ======
- +Во многих таблицах встречается поле deleted. Если значение в нем не равно 0, то запись считается удаленной и не будет участвовать при создании новых задач. 
-====== reader ​======+===== reader =====
 <code sql> <code sql>
             create table {schema}_READER (             create table {schema}_READER (
Строка 73: Строка 73:
                 IDNAME varchar(64),​                 IDNAME varchar(64),​
                 READERTYPE 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                 DELETED smallint default 0
               )               )
 </​code>​ </​code>​
  
-====== person ======+Владельцы карт.
  
 +===== 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 ===== ===== 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 ===== ===== 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 ===== ===== 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, если карта не имеет владельца.
  
  
Строка 95: Строка 182:
  
 При запуске модуль ожидает подключений к базе данных и к серверу данных,​ после чего циклически выполняет действия:​ При запуске модуль ожидает подключений к базе данных и к серверу данных,​ после чего циклически выполняет действия:​
-  - проверка поступления нового ​кода от считывателей,​ и если есть, фиксирование его в базе данных. + 
-  - генерирование новых задач +===== Получение и сохранение данных от считывателей ===== 
-  ​- ​закрытие просроченных задач+ 
 +Выполняется ​проверка поступления новых кодов от считывателей,​ и если есть, фиксирование ​их в базе данных в таблице ''​input''​. При этом выполняется поиск открытой задачи по данному считывателю,​ и, если у владельца карты есть права на задачу,​ в таблице ''​task''​ выполняется закрытие ​задачи со статусом 1 или 2. 
 + 
 +После успешной записи ​данных ​считывателю посылается обратная связь на светодиоды:​ 
 +  - длинный зеленый - задача закрыта 
 +  - длинный синий - задача не найдена,​ либо у владельца карты нет прав 
 +  - мигающий синий - карта не имеет владельца 
 + 
 +===== Генерирование новых задач ​===== 
 +По расписанию в таблице ''​schedule''​ создаются задачи и помещаются в таблицу ''​task''​. При этом сразу расчитываются даты открытия,​ закрытия и просрочки задачи. Дата просрочки вычисляется как дата начала следующей задачи по данному расписанию. 
 + 
 + 
 +===== Закрытие просроченных задач ​===== 
 +Открытые задачи,​ т.е. те у которых STATUS=0 и DT_REG is null, считаются просроченными,​ если DT_EXPIRE < текущее время. При этом в ''​task''​ для данной задачи прописывается STATUS=3 и DT_REG=текущее время. 
  
  
doc/arccnt/mod/msc.1466478078.txt.gz · Последние изменения: 2016/06/21 06:01 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0