Files
Academic-Affairs-System/src/Jiaowu.Api/Domain/Academic/ScheduleEntities.cs
T
biss f0f59419d5 实验课现在直接进入普通排课流程,不再要求先到实验排课模块逐个安排。
普通“添加排课”新增“理论课 / 实验课”类型。
自动排课会分别补足理论学时和实验学时。
实验课只能安排到实验室、实训室、机房、语音室等场地。
发布课表时分别校验理论、实验学时;任一未排足都不能发布。
普通课表及 Excel 导出会标注“实验课”。
历史排课保持不变,迁移后默认识别为理论课;后续新建或修订版本时再补充实验课。
2026-08-02 16:54:41 +08:00

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
}