BusinessCalendar

Материал из RunaWFE
Версия от 11:35, 26 декабря 2020; WikiSysop (обсуждение | вклад) (1 версия импортирована)
Перейти к навигации Перейти к поиску

Бизнес-календарь

Версия 4.5.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 в общем случае не совпадают.

  1. Происходит перевод единиц: hours в minutes; weeks, months, years в days
  2. Если текущее время в базовой дате не попадает в рабочее время - в зависимости от направления подсчета происходит выравнивание к ближайшему рабочему времени
  3. Происходит простой подсчет по рабочим интервалам (для минут) или по рабочим дням до нахождения искомой даты-времени

# Расширение

В системе можно подменить реализацию бизнес-календаря на любой класс, реализующий интерфейс 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);

, который возвращает информацию о рабочем времени за указанный день.