Анализ логики работы системы Орион Про и связей таблиц в БД показал, что учет рабочего времени сотрудников вполне возможно реализовать своими силами. Ниже представлена информационная модель системы так, как я ее вижу.
Информационная модель состоит из двух частей:
1. Процесс верификации персонального идентификатора (карты), принятия решения о предоставлении доступа и записи в таблицу pLogData результата.
2. Процесс расчета отработанного сотрудниками времени на основании записей в таблице pLogData.
Процесс верификации персонального идентификатора (карты), принятия решения о предоставлении доступа и записи в таблицу pLogData результата.
После предъявления карты считывателю, обработки контроллером кода карты и передачи его серверу в базе данных происходят следующие процессы:
- Поиск кода карты. В таблице pMark происходит поиск строки с полем CodeP равным полученному коду карты, в случае отсутствия в таблицу pLogData вносится запись с кодом «Доступ отклонен, неизвестный код» и доступ не предоставляется.
- Поиск пользователя, которому принадлежит карта. В таблице pList происходит поиск строки с полем ID равным полю Owner таблицы pMark.
- Поиск подразделения, к которому относится сотрудник. В таблице PDivision происходит поиск строки с полем ID равным полю Section таблицы pList.
- Поиск уровня доступа для подразделения сотрудника. В таблице Groups происходит поиск строки с полем ID равным полю GroupID таблицы PDivision.
- Поиск прав для уровня доступа. В таблице GrAccess происходит поиск строки с полем GroupID равным полю ID таблицы Groups.
- На основании прав уровня доступа проверяются два условия:
- 1.Верификация прав доступа к данной точке доступа.
- Поиск точки доступа. В таблице AcessPoint происходит поиск строки с полем ID равным полю AccessID таблицы GrAccess.
- Поиск считывателя. В таблице RdrAccessPoint происходит поиск строки с полем AccessPointID равным полю ID таблицы AcessPoint.
- 2. Проверка временного интервала для доступа.
- Поиск окна времени для уровня доступа. В таблице GTime происходит поиск строки к полем ID равным полю TimeZone таблицы GrAccess.
- Определение временного интервала для окна времени. В таблице TimeCont происходит поиск строки к полем TimeID равным полю ID таблицы GTime.
- В случае если доступ к считывателю разрешен пользователю и время текущей идентификации попадает в окно времени определенного для пользователя – пользователю предоставляется доступ и в таблицу pLogData вносятся запись с событием «Доступ предоставлен», в противном случае доступ не предоставляется и в таблицу pLogData вносятся запись с событием «Доступ отклонен, допустимый код»
- Из таблицы pLogData выбираются все строки со значением поля HozOrgan равным значению поля ID таблицы pList и сортируются по возрастанию времени, т.е. собираются данные о проходах через точки доступа.
- В таблице pList для каждой строки (строка содержит информацию об одном сотруднике) проверяется значение поля schedule.
- Значение поля schedule равно нулю – сотрудник работает по графику подразделения. В этом случае в таблице PDivision, для определения уровня доступа (поле GroupID), происходит поиск строки с полем ID равным значению поля Section таблицы pList.
- Значение поля schedule не равно нулю – сотрудник работает по индивидуальному графику и значение поля schedule есть идентификатор уровня доступа (GroupID).
- Определяются зоны доступа для уровня доступа сотрудника (поле AccessID таблицы GrAccess). Для этого в таблице GrAccess происходит поиск всех строк где значение поля GroupID равно найденному ранее GroupID.
- Определяется график работы сотрудника. Для этого в таблицах TimeCont (время) и GTime (график) происходит поиск всех строк со значением поля ID для таблицы GTime и TimeID для таблицы TimeCont равным значению поля TimeZone таблицы GrAccess.
- В поле ZoneIndex таблицы pLogData содержится номер зоны в которую вошел (из которой вышел сотрудник). Для получения ID зоны производится поиск строки таблицы AccessZone где значение поля GIndex равно значению поля ZoneIndex таблицы pLogData.
- После того, как все данные агрегированы и известны все проходы сотрудника за сутки, производится подсчет рабочего времени. Происходит сравнение зон доступа, в которых находился сотрудник и время его входа и выхода из них. Если сотрудник находился в зоне, определенной его уровнем доступа для учета рабочего времени во время определенное графиком – время работы суммируется, если нет – отбрасывается.
- По завершении цикла обсчета времени сотрудников за один день, цикл повторяется для следующего дня и т.д. до достижения последнего дня месяца.
Процесс расчета отработанного сотрудниками времени на основании записей в таблице pLogData.
За каждые сутки для каждого или указанных сотрудников выполняются следующие действия:
Еще раз повторю, все выше сказанное — мое видение процесса, а не техническая документация Болида.
Обладая этими простейшими знаниями вполне можно написать свой учет рабочего времени так, как вам хочется.