创建工作日历

工作日历可以使用带注解的 Java 接口在设计时创建,或者通过 Administration(管理) → Business calendars(工作日历) UI 界面在运行时创建。

运行时创建工作日历

打开 Administration → Business calendars 应用程序界面,点击 Create 按钮,打开 Business calendar editor(工作日历编辑器) 界面。

business calendar editor

输入下列参数:

  • Name - 日历的可读描述。

  • Code - 日历的唯一标识符。

在 Holidays(假日) 标签页,点击 Create 添加假日和周末。

business calendar holidays

该组件支持下列类型的假日:

  • Day of week(星期) - 允许指定每周的假日;例如,星期六和星期日。

    business calendar day of week
  • Specific date holiday(特定日期假日) - 允许设置某一日期的特定假日,例如,2022-08-03。

    business calendar specific date holiday
  • Annual holiday(年固定假日) - 每年重复的假日,例如,1 月 1 日。

    business calendar annual holiday
  • Cron-based holiday(基于 Cron 的假日) - 允许用 quartz CRON 格式指定特殊的假日。参阅 Cron 入门 了解更多信息。

    business calendar cron holiday

    它可以用来指定一些重要的假期,例如,每个月的第三个星期五 或 7月的第一个星期一 等。

在 Working schedule(工作日计划) 标签页,可以为一周的每天设置工作小时数。每天可以有多个工作时段,但是这些时段不能相互覆盖。

working sheduler editor

还可以在 Additional business days(额外工作日) 标签页将某些假日定义为工作日。如果这样的配置的某一天属于假日,也会按照工作日考虑。

additional business day editor

设计时创建工作日历

设计时可以用带注解的 Java 接口创建工作日历,示例:

@BusinessCalendar(name = "Sample Business Calendar",
                  code = "sample-business-calendar") (1)
public interface SampleBusinessCalendar {

    @CronHoliday(expression = "* * * 1-2 MAY ?") (2)
    @CronHoliday(expression = "* * * ? * 6#3")
    void cronHoliday();

    @WeeklyHoliday(DayOfWeek.SATURDAY)
    @WeeklyHoliday(value = DayOfWeek.SUNDAY,
            description = "Sunday is always a day for family") (3)
    void weeklyHolidays();

    @FixedDayHoliday(fixedDate = "2021-05-08") (4)
    @FixedDayHoliday(fixedDate = "2021-05-09")
    void fixedHoliday();

    @FixedYearlyHoliday(month = Month.NOVEMBER, dayOfMonth = 4) (5)
    @FixedYearlyHoliday(month = Month.JUNE, dayOfMonth = 12)
    void fixedYearlyHoliday();

    @ScheduledBusinessDay(dayOfWeek = DayOfWeek.MONDAY,
            startTime = "08:00", endTime = "17:00") (6)
    @ScheduledBusinessDay(dayOfWeek = DayOfWeek.WEDNESDAY,
            startTime = "09:00", endTime = "17:00")
    @ScheduledBusinessDay(dayOfWeek = DayOfWeek.FRIDAY,
            startTime = "10:00", endTime = "15:00")
    void scheduledBD();

    @AdditionalBusinessDay(fixedDate = "2021-05-06",
            startTime = "10:00", endTime = "16:30") (7)
    @AdditionalBusinessDay(fixedDate = "2021-05-07",
            startTime = "10:00", endTime = "16:30")
    void additionalBD();

}
1 带注解的工作日历是一个使用 @BusinessCalendar 注解的接口。你需要为该注解指定下列参数:
  • name - 日历的可读描述。

  • code - 日历的唯一标识符。

2 指定假日 - 以 quartz CRON 格式
3 指定假日 - 每周固定假日。
4 指定假日 - 特定日期假日。
5 指定假日 - 每年一次的假日。
6 指定工作日 - 计划工作日。
7 指定工作日 - 额外工作日。

设计时创建的工作日历与其他日历一起在列表展示,但是只能查看,不能修改。

business calendars