Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
doc:arccnt:mod:msc [2016/06/21 05:40] denis создано |
doc:arccnt:mod:msc [2016/06/21 07:28] (текущий) denis [card] |
||
---|---|---|---|
Строка 56: | Строка 56: | ||
</configuration> | </configuration> | ||
</code> | </code> | ||
+ | |||
+ | ^Параметр^По умолчанию^Описание^ | ||
+ | |**db** | ''db'' |Модуль базы данных | | ||
+ | |**refmod** | - |Модуль, содержащий теги от считывателей | | ||
+ | |**script** | ''msc'' |Имя dbscr-скрипта | | ||
+ | |**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=текущее время. | ||
+ | |||
+ | |||
+ |