| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """节日/节点事件日历与预热配置。"""
- from __future__ import annotations
- from dataclasses import dataclass
- from typing import Literal
- FestivalKind = Literal["statutory", "non_statutory"]
- EventType = Literal["节日/节气", "纪念日", "特定民生热点", "特定天气时段"]
- @dataclass(frozen=True)
- class FestivalEvent:
- """节点事件、类型及预热天数。"""
- name: str
- event_type: EventType
- prewarm_days: int
- kind: FestivalKind = "non_statutory"
- # 法定节假日:节日活跃期按国务院当年放假区间计算
- _STATUTORY = "statutory"
- _NON_STATUTORY = "non_statutory"
- _FESTIVAL_SOLAR = "节日/节气"
- _MEMORIAL = "纪念日"
- _LIVELIHOOD = "特定民生热点"
- _WEATHER = "特定天气时段"
- DEFAULT_FESTIVAL_EVENTS: tuple[FestivalEvent, ...] = (
- FestivalEvent("元旦", _FESTIVAL_SOLAR, 10, _STATUTORY),
- FestivalEvent("腊八节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("小年", _FESTIVAL_SOLAR, 7, _NON_STATUTORY),
- FestivalEvent("除夕", _FESTIVAL_SOLAR, 10, _NON_STATUTORY),
- FestivalEvent("春节", _FESTIVAL_SOLAR, 10, _STATUTORY),
- FestivalEvent("元宵节", _FESTIVAL_SOLAR, 7, _NON_STATUTORY),
- FestivalEvent("龙抬头", _FESTIVAL_SOLAR, 7, _NON_STATUTORY),
- FestivalEvent("妇女节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("上巳节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("劳动节", _FESTIVAL_SOLAR, 7, _STATUTORY),
- FestivalEvent("母亲节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("端午节", _FESTIVAL_SOLAR, 7, _STATUTORY),
- FestivalEvent("儿童节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("父亲节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("建党节", _FESTIVAL_SOLAR, 10, _NON_STATUTORY),
- FestivalEvent("建军节", _FESTIVAL_SOLAR, 10, _NON_STATUTORY),
- FestivalEvent("七夕节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("中元节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("教师节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("中秋节", _FESTIVAL_SOLAR, 7, _STATUTORY),
- FestivalEvent("重阳节", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("国庆节", _FESTIVAL_SOLAR, 7, _STATUTORY),
- FestivalEvent("立春", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("雨水", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("惊蛰", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("春分", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("清明", _FESTIVAL_SOLAR, 15, _STATUTORY),
- FestivalEvent("谷雨", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("立夏", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("小满", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("芒种", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("夏至", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("小暑", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("大暑", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("立秋", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("处暑", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("白露", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("秋分", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("寒露", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("霜降", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("立冬", _FESTIVAL_SOLAR, 7, _NON_STATUTORY),
- FestivalEvent("小雪", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("大雪", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("冬至", _FESTIVAL_SOLAR, 7, _NON_STATUTORY),
- FestivalEvent("小寒", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("大寒", _FESTIVAL_SOLAR, 5, _NON_STATUTORY),
- FestivalEvent("周总理逝世", _MEMORIAL, 7, _NON_STATUTORY),
- FestivalEvent("周总理诞辰", _MEMORIAL, 7, _NON_STATUTORY),
- FestivalEvent("七七事变纪念日", _MEMORIAL, 5, _NON_STATUTORY),
- FestivalEvent("日本投降", _MEMORIAL, 5, _NON_STATUTORY),
- FestivalEvent("毛主席逝世", _MEMORIAL, 30, _NON_STATUTORY),
- FestivalEvent("918纪念日", _MEMORIAL, 5, _NON_STATUTORY),
- FestivalEvent("毛主席诞辰", _MEMORIAL, 30, _NON_STATUTORY),
- FestivalEvent("公祭日", _MEMORIAL, 10, _NON_STATUTORY),
- FestivalEvent("台湾光复纪念日", _MEMORIAL, 5, _NON_STATUTORY),
- FestivalEvent("全国两会", _LIVELIHOOD, 30, _NON_STATUTORY),
- FestivalEvent("315", _LIVELIHOOD, 7, _NON_STATUTORY),
- FestivalEvent("高考", _LIVELIHOOD, 10, _NON_STATUTORY),
- FestivalEvent("三伏", _WEATHER, 15, _NON_STATUTORY),
- FestivalEvent("数九", _WEATHER, 5, _NON_STATUTORY),
- )
- def festival_events_payload() -> list[dict[str, int | str]]:
- return [
- {
- "name": event.name,
- "event_type": event.event_type,
- "prewarm_days": event.prewarm_days,
- "kind": event.kind,
- }
- for event in DEFAULT_FESTIVAL_EVENTS
- ]
|