BusinessCalendar
Бизнес-календарь
Версия 4.6.0
© 2015-2023, ООО "Процессные технологии"
# Настройка
business.calendar.properties
название | описание | значение по умолчанию |
business.week.expressed.in.business.days | скольким бизнес-дням равняется 1 бизнес-неделя | 5 |
business.month.expressed.in.business.days | скольким бизнес-дням равняется 1 бизнес-месяц | 21 |
business.year.expressed.in.business.days | скольким бизнес-дням равняется 1 бизнес-год | 220 |
weekday.(dayname), где (dayname) = monday tuesday wednesday thursday friday saturday sunday | интервалы рабочего времени, заданные в формате [(daypart) [& (daypart)]*], где (daypart) задается в формате (время начала)-(время окончания) | |
holiday.(anystring), где (anystring) = любая строка | выходные дни, заданные в формате, определенном в настройке date.format.pattern | отсутствуют |
# Формат продолжительности
Продолжительность задается в формате
[+|-]<количество времени> [business] <единица измерения>
, где
- 1-й символ (необязательный) может указывать на направление смещения
- количество времени представлено целым числом
- business (необязательный) маркер бизнес-единиц времени
- единица измерения может быть одной из seconds (секунда), minutes (минута), hours (час), days (день), weeks (неделя), months (месяц), years (год)
Замечание. Бизнес-единица, использующая секунды не поддерживается.
# Алгоритм работы
Продолжительность не измеряется бизнес-единицами времени
Добавляется (или вычитается) указанное количество времени в указанных единицах к базовой дате используя java.util.Calendar.add(..).
Продолжительность измеряется бизнес-единицами времени
Подсчет для всех бизнес-единиц может вестись только в 2-х единицах времени: минуты и дни. В минутах ведется точный учет всех рабочих интервалов, а в днях - ведется учет любых рабочих дней.
Т.е. продолжительности 480 business minutes и 1 business days в общем случае не совпадают.
- Происходит перевод единиц: hours в minutes; weeks, months, years в days
- Если текущее время в базовой дате не попадает в рабочее время - в зависимости от направления подсчета происходит выравнивание к ближайшему рабочему времени
- Происходит простой подсчет по рабочим интервалам (для минут) или по рабочим дням до нахождения искомой даты-времени
# Расширение
В системе можно подменить реализацию бизнес-календаря на любой класс, реализующий интерфейс ru.runa.wfe.commons.bc.BusinessCalendar. Для этого необходимо в контексте Spring переписать бин с id = businessCalendar, например
<bean id="businessCalendar" class="ru.runa.timings.logic.AlfBusinessCalendar" />
Написать собственную реализацию удобно, наследуясь от абстрактного класса ru.runa.wfe.commons.bc.AbstractBusinessCalendar и реализовав метод
protected abstract BusinessDay getBusinessDay(Calendar calendar);
который возвращает информацию о рабочем времени за указанный день.