普通“添加排课”新增“理论课 / 实验课”类型。 自动排课会分别补足理论学时和实验学时。 实验课只能安排到实验室、实训室、机房、语音室等场地。 发布课表时分别校验理论、实验学时;任一未排足都不能发布。 普通课表及 Excel 导出会标注“实验课”。 历史排课保持不变,迁移后默认识别为理论课;后续新建或修订版本时再补充实验课。
139 lines
4.3 KiB
C#
139 lines
4.3 KiB
C#
using Jiaowu.Api.Domain.Common;
|
|
|
|
namespace Jiaowu.Api.Domain.Academic;
|
|
|
|
public sealed class SchedulePlan : EntityBase
|
|
{
|
|
public Guid AcademicTermId { get; set; }
|
|
public AcademicTerm? AcademicTerm { get; set; }
|
|
public required string Name { get; set; }
|
|
public required string Version { get; set; }
|
|
public SchedulePlanStatus Status { get; set; } = SchedulePlanStatus.Draft;
|
|
public string? Notes { get; set; }
|
|
public DateTime? PublishedAt { get; set; }
|
|
public ICollection<ScheduleEntry> Entries { get; set; } = [];
|
|
}
|
|
|
|
public sealed class ScheduleEntry : EntityBase
|
|
{
|
|
public Guid SchedulePlanId { get; set; }
|
|
public SchedulePlan? SchedulePlan { get; set; }
|
|
public Guid TeachingTaskId { get; set; }
|
|
public TeachingTask? TeachingTask { get; set; }
|
|
public ScheduleEntryKind Kind { get; set; } = ScheduleEntryKind.Lecture;
|
|
public Guid? ClassroomId { get; set; }
|
|
public Classroom? Classroom { get; set; }
|
|
public int DayOfWeek { get; set; }
|
|
public int StartPeriod { get; set; }
|
|
public int PeriodCount { get; set; }
|
|
public int StartWeek { get; set; }
|
|
public int EndWeek { get; set; }
|
|
public WeekPattern WeekPattern { get; set; }
|
|
public string? Notes { get; set; }
|
|
}
|
|
|
|
public sealed class ScheduleTimeSlot : EntityBase
|
|
{
|
|
public Guid AcademicTermId { get; set; }
|
|
public AcademicTerm? AcademicTerm { get; set; }
|
|
public int PeriodNumber { get; set; }
|
|
public required string Name { get; set; }
|
|
public TimeOnly StartsAt { get; set; }
|
|
public TimeOnly EndsAt { get; set; }
|
|
public bool IsEnabled { get; set; } = true;
|
|
}
|
|
|
|
public sealed class TeachingTaskScheduleConstraint : EntityBase
|
|
{
|
|
public Guid TeachingTaskId { get; set; }
|
|
public TeachingTask? TeachingTask { get; set; }
|
|
public bool RequiresClassroom { get; set; } = true;
|
|
public Guid? RequiredCampusId { get; set; }
|
|
public Campus? RequiredCampus { get; set; }
|
|
public Guid? RequiredBuildingId { get; set; }
|
|
public Building? RequiredBuilding { get; set; }
|
|
public string? AllowedDayOfWeeks { get; set; }
|
|
public int? EarliestPeriod { get; set; }
|
|
public int? LatestPeriod { get; set; }
|
|
public ICollection<TeachingTaskAllowedClassroom> AllowedClassrooms { get; set; } = [];
|
|
}
|
|
|
|
public sealed class TeachingTaskAllowedClassroom
|
|
{
|
|
public Guid TeachingTaskScheduleConstraintId { get; set; }
|
|
public TeachingTaskScheduleConstraint? TeachingTaskScheduleConstraint { get; set; }
|
|
public Guid ClassroomId { get; set; }
|
|
public Classroom? Classroom { get; set; }
|
|
}
|
|
|
|
public sealed class AutomaticScheduleJob : EntityBase
|
|
{
|
|
public Guid SchedulePlanId { get; set; }
|
|
public SchedulePlan? SchedulePlan { get; set; }
|
|
public Guid? ActiveSchedulePlanId { get; set; }
|
|
public Guid? RequestedByUserId { get; set; }
|
|
public AutomaticScheduleJobStatus Status { get; set; } =
|
|
AutomaticScheduleJobStatus.Queued;
|
|
public int TotalTasks { get; set; }
|
|
public int ProcessedTasks { get; set; }
|
|
public int CreatedEntries { get; set; }
|
|
public int CompletedTasks { get; set; }
|
|
public string? MessagesJson { get; set; }
|
|
public string? ErrorMessage { get; set; }
|
|
public DateTime? StartedAt { get; set; }
|
|
public DateTime? CompletedAt { get; set; }
|
|
}
|
|
|
|
public sealed class SchedulePublishJob : EntityBase
|
|
{
|
|
public Guid SchedulePlanId { get; set; }
|
|
public SchedulePlan? SchedulePlan { get; set; }
|
|
public Guid AcademicTermId { get; set; }
|
|
public Guid? ActiveAcademicTermId { get; set; }
|
|
public Guid? RequestedByUserId { get; set; }
|
|
public SchedulePublishJobStatus Status { get; set; } =
|
|
SchedulePublishJobStatus.Queued;
|
|
public int TotalSteps { get; set; } = 5;
|
|
public int CompletedSteps { get; set; }
|
|
public string? CurrentStep { get; set; }
|
|
public string? ErrorMessage { get; set; }
|
|
public DateTime? StartedAt { get; set; }
|
|
public DateTime? CompletedAt { get; set; }
|
|
}
|
|
|
|
public enum SchedulePlanStatus
|
|
{
|
|
Draft = 1,
|
|
Published = 2,
|
|
Archived = 3
|
|
}
|
|
|
|
public enum AutomaticScheduleJobStatus
|
|
{
|
|
Queued = 1,
|
|
Running = 2,
|
|
Succeeded = 3,
|
|
Failed = 4
|
|
}
|
|
|
|
public enum SchedulePublishJobStatus
|
|
{
|
|
Queued = 1,
|
|
Running = 2,
|
|
Succeeded = 3,
|
|
Failed = 4
|
|
}
|
|
|
|
public enum WeekPattern
|
|
{
|
|
All = 1,
|
|
Odd = 2,
|
|
Even = 3
|
|
}
|
|
|
|
public enum ScheduleEntryKind
|
|
{
|
|
Lecture = 1,
|
|
Experiment = 2
|
|
}
|