更新日历功能
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
package holiday
|
||||
|
||||
// fallbackData 内置的 2024-2026 年中国法定节假日/调休数据,
|
||||
// 数据严格来自国务院办公厅历年《关于部分节假日安排的通知》原文。
|
||||
//
|
||||
// 用途:当外网接口不可达(内网部署、机房无外网出口、接口临时故障)且数据库
|
||||
// 中也没有对应年份数据时,用本表兜底,保证日历控件always能显示休/班标记。
|
||||
//
|
||||
// 维护约定:每年 11 月国务院办公厅发布次年通知后,按下述格式补齐新一年数据
|
||||
// (只补休假日与调休上班日两类,普通周末由前端按星期判定,不入表):
|
||||
//
|
||||
// notices = append(notices, yearNotice{Year: 2027, ...})
|
||||
//
|
||||
// 注意:这里只存"放假"与"补班"两类特殊日期;普通周六日不记录。
|
||||
var fallbackData = buildFallback()
|
||||
|
||||
// yearNotice 单一年度的放假安排,按通知原文逐条录入。
|
||||
type yearNotice struct {
|
||||
Year int
|
||||
// Holidays 放假日期区间:[开始日, 结束日],闭区间。
|
||||
// 结束日与开始日相同表示只放一天;空串表示结束日等于开始日。
|
||||
Holidays []dayRange
|
||||
// Workdays 调休上班日(周末补班)。
|
||||
Workdays []string
|
||||
}
|
||||
|
||||
type dayRange struct {
|
||||
Start string
|
||||
End string
|
||||
Name string
|
||||
}
|
||||
|
||||
// yearNotices 各界各类节日的原始安排。
|
||||
//
|
||||
// 数据来源:
|
||||
// - 2024:国办发明电〔2023〕7号
|
||||
// - 2025:国办发明电〔2024〕12号
|
||||
// - 2026:2025年11月4日国办通知
|
||||
var yearNotices = []yearNotice{
|
||||
{
|
||||
Year: 2024,
|
||||
Holidays: []dayRange{
|
||||
{Start: "2024-01-01", Name: "元旦"},
|
||||
{Start: "2024-02-10", End: "2024-02-17", Name: "春节"},
|
||||
{Start: "2024-04-04", End: "2024-04-06", Name: "清明节"},
|
||||
{Start: "2024-05-01", End: "2024-05-05", Name: "劳动节"},
|
||||
{Start: "2024-06-10", Name: "端午节"},
|
||||
{Start: "2024-09-15", End: "2024-09-17", Name: "中秋节"},
|
||||
{Start: "2024-10-01", End: "2024-10-07", Name: "国庆节"},
|
||||
},
|
||||
Workdays: []string{
|
||||
"2024-02-04", "2024-02-18",
|
||||
"2024-04-07",
|
||||
"2024-04-28", "2024-05-11",
|
||||
"2024-09-14",
|
||||
"2024-09-29", "2024-10-12",
|
||||
},
|
||||
},
|
||||
{
|
||||
Year: 2025,
|
||||
Holidays: []dayRange{
|
||||
{Start: "2025-01-01", Name: "元旦"},
|
||||
{Start: "2025-01-28", End: "2025-02-04", Name: "春节"},
|
||||
{Start: "2025-04-04", End: "2025-04-06", Name: "清明节"},
|
||||
{Start: "2025-05-01", End: "2025-05-05", Name: "劳动节"},
|
||||
{Start: "2025-05-31", End: "2025-06-02", Name: "端午节"},
|
||||
{Start: "2025-10-01", End: "2025-10-08", Name: "国庆节、中秋节"},
|
||||
},
|
||||
Workdays: []string{
|
||||
"2025-01-26", "2025-02-08",
|
||||
"2025-04-27",
|
||||
"2025-09-28", "2025-10-11",
|
||||
},
|
||||
},
|
||||
{
|
||||
Year: 2026,
|
||||
Holidays: []dayRange{
|
||||
{Start: "2026-01-01", End: "2026-01-03", Name: "元旦"},
|
||||
{Start: "2026-02-15", End: "2026-02-23", Name: "春节"},
|
||||
{Start: "2026-04-04", End: "2026-04-06", Name: "清明节"},
|
||||
{Start: "2026-05-01", End: "2026-05-05", Name: "劳动节"},
|
||||
{Start: "2026-06-19", End: "2026-06-21", Name: "端午节"},
|
||||
{Start: "2026-09-25", End: "2026-09-27", Name: "中秋节"},
|
||||
{Start: "2026-10-01", End: "2026-10-07", Name: "国庆节"},
|
||||
},
|
||||
Workdays: []string{
|
||||
"2026-01-04",
|
||||
"2026-02-14", "2026-02-28",
|
||||
"2026-05-09",
|
||||
"2026-09-20", "2026-10-10",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// buildFallback 把 yearNotices 展开成按日期索引的 Day 列表。
|
||||
func buildFallback() []Day {
|
||||
out := make([]Day, 0, 256)
|
||||
for _, n := range yearNotices {
|
||||
for _, r := range n.Holidays {
|
||||
for _, d := range expandRange(r.Start, r.End) {
|
||||
out = append(out, Day{
|
||||
Date: d,
|
||||
Name: r.Name,
|
||||
Type: TypeHoliday,
|
||||
Year: n.Year,
|
||||
Source: SourceBuiltin,
|
||||
})
|
||||
}
|
||||
}
|
||||
for _, d := range n.Workdays {
|
||||
out = append(out, Day{
|
||||
Date: d,
|
||||
Name: "调休上班",
|
||||
Type: TypeWorkday,
|
||||
Year: n.Year,
|
||||
Wage: 1,
|
||||
Source: SourceBuiltin,
|
||||
})
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user