优化排班功能

This commit is contained in:
hero920103 committed 2026-11-05 18:00:50 +08:00
1 parent 8acbe732ff
commit 8ba15d87b3
13 files changed
+2463 -565

No files matched your search

+13 -3
View File
@@ -98,7 +98,13 @@ func (c *BackendOaSchedulingController) scPlanInputFromBody(body map[string]inte
input.IncludeChild = scBoolValue(body, "include_child")
}
if _, msg := scDateSpan(input.StartDate, input.EndDate); msg != "" {
// 无期限方案:结束日期允许为空,落库时存哨兵值,发布时按滚动窗口分批生成
if scIsNoEnd(input.EndDate) {
if _, ok := scParseDate(input.StartDate); !ok {
return nil, "开始日期格式错误"
}
input.EndDate = scPlanNoEndDate
} else if _, msg := scDateSpan(input.StartDate, input.EndDate); msg != "" {
return nil, msg
}
@@ -181,6 +187,7 @@ func scPlanView(plan *models.OaSchedulePlan) map[string]interface{} {
"employee_names": plan.EmployeeNames,
"start_date": normalizeOaDate(plan.StartDate),
"end_date": normalizeOaDate(plan.EndDate),
"no_end": scIsNoEnd(plan.EndDate),
"weekdays": weekdays,
"shift_id": plan.ShiftID,
"shift_name": plan.ShiftName,
@@ -330,7 +337,7 @@ func (c *BackendOaSchedulingController) PlanPreview() {
return
}
dates, msg := scDateSpan(input.StartDate, input.EndDate)
dates, msg := scPlanGenWindow(input.StartDate, input.EndDate)
if msg != "" {
c.scFail(400, 400, msg)
return
@@ -369,6 +376,9 @@ func (c *BackendOaSchedulingController) PlanPreview() {
"workday_count": len(workdays),
"rest_count": len(dates) - len(workdays),
"entry_count": entryCount,
"no_end": scIsNoEnd(input.EndDate),
"gen_start": dates[0],
"gen_end": dates[len(dates)-1],
"shift": shift,
"scope_name": c.scScopeName(tid, input),
"template_name": input.TemplateName,
@@ -673,7 +683,7 @@ func (c *BackendOaSchedulingController) scPublishPlan(tid, uid uint64, username
return nil, fmt.Errorf("范围覆盖 %d 名员工,超过单次 %d 人上限", len(employees), scPlanMaxEmployees)
}
dates, msg := scDateSpan(normalizeOaDate(plan.StartDate), normalizeOaDate(plan.EndDate))
dates, msg := scPlanGenWindow(normalizeOaDate(plan.StartDate), normalizeOaDate(plan.EndDate))
if msg != "" {
return nil, errors.New(msg)
}