学籍异动:休学、复学、退学申请及辅导员→学院→教务处分级审批。

毕业审核:批次计算、缺失课程检查、人工复核、结果发布。
学位授予:毕业资格与 GPA 计算、人工调整、发布授予结果。
毕业离校:离校事项配置、责任角色分工、逐项办理及批次关闭。
This commit is contained in:
2026-07-24 17:30:05 +08:00 Unverified
parent 7493ab4a60
commit b0eaa20da6
34 changed files with 11137 additions and 8 deletions
@@ -0,0 +1,45 @@
using Jiaowu.Api.Domain.Common;
namespace Jiaowu.Api.Domain.Academic;
public sealed class DegreeAwardBatch : EntityBase
{
public required string Name { get; set; }
public int GraduationYear { get; set; }
public required string DegreeName { get; set; }
public decimal MinimumGradePoint { get; set; } = 2.0m;
public DegreeAwardBatchStatus Status { get; set; } = DegreeAwardBatchStatus.Draft;
public string? Notes { get; set; }
public DateTime? CalculatedAt { get; set; }
public DateTime? PublishedAt { get; set; }
public ICollection<DegreeAwardResult> Results { get; set; } = [];
}
public sealed class DegreeAwardResult : EntityBase
{
public Guid DegreeAwardBatchId { get; set; }
public DegreeAwardBatch? DegreeAwardBatch { get; set; }
public Guid StudentId { get; set; }
public Student? Student { get; set; }
public Guid GraduationAuditResultId { get; set; }
public GraduationAuditResult? GraduationAuditResult { get; set; }
public decimal AverageGradePoint { get; set; }
public DegreeAwardConclusion CalculatedConclusion { get; set; }
public DegreeAwardConclusion Conclusion { get; set; }
public required string ExceptionReason { get; set; }
public bool IsOverridden { get; set; }
public string? ReviewComment { get; set; }
public DateTime? ReviewedAt { get; set; }
}
public enum DegreeAwardBatchStatus
{
Draft = 1,
Published = 2
}
public enum DegreeAwardConclusion
{
NotGranted = 1,
Granted = 2
}
@@ -0,0 +1,50 @@
using Jiaowu.Api.Domain.Common;
namespace Jiaowu.Api.Domain.Academic;
public sealed class GraduationAuditBatch : EntityBase
{
public required string Name { get; set; }
public int GraduationYear { get; set; }
public int EnrollmentYear { get; set; }
public GraduationAuditBatchStatus Status { get; set; } =
GraduationAuditBatchStatus.Draft;
public string? Notes { get; set; }
public DateTime? CalculatedAt { get; set; }
public DateTime? PublishedAt { get; set; }
public ICollection<GraduationAuditResult> Results { get; set; } = [];
}
public sealed class GraduationAuditResult : EntityBase
{
public Guid GraduationAuditBatchId { get; set; }
public GraduationAuditBatch? GraduationAuditBatch { get; set; }
public Guid StudentId { get; set; }
public Student? Student { get; set; }
public Guid? CurriculumPlanId { get; set; }
public CurriculumPlan? CurriculumPlan { get; set; }
public StudentStatus StudentStatusSnapshot { get; set; }
public decimal RequiredCredits { get; set; }
public decimal EarnedCredits { get; set; }
public int RequiredCourseCount { get; set; }
public int PassedRequiredCourseCount { get; set; }
public int FailedCourseCount { get; set; }
public required string MissingCourseNames { get; set; }
public GraduationAuditConclusion CalculatedConclusion { get; set; }
public GraduationAuditConclusion Conclusion { get; set; }
public bool IsOverridden { get; set; }
public string? ReviewComment { get; set; }
public DateTime? ReviewedAt { get; set; }
}
public enum GraduationAuditBatchStatus
{
Draft = 1,
Published = 2
}
public enum GraduationAuditConclusion
{
Ineligible = 1,
Eligible = 2
}
@@ -0,0 +1,53 @@
using Jiaowu.Api.Domain.Common;
namespace Jiaowu.Api.Domain.Academic;
public sealed class GraduationClearanceBatch : EntityBase
{
public required string Name { get; set; }
public int GraduationYear { get; set; }
public GraduationClearanceBatchStatus Status { get; set; } =
GraduationClearanceBatchStatus.Open;
public string? Notes { get; set; }
public DateTime? ClosedAt { get; set; }
public ICollection<GraduationClearanceItem> Items { get; set; } = [];
}
public sealed class GraduationClearanceItem : EntityBase
{
public Guid GraduationClearanceBatchId { get; set; }
public GraduationClearanceBatch? GraduationClearanceBatch { get; set; }
public required string Code { get; set; }
public required string Name { get; set; }
public required string ResponsibleUnit { get; set; }
public required string ResponsibleRole { get; set; }
public bool IsRequired { get; set; } = true;
public int SortOrder { get; set; }
public ICollection<GraduationClearanceRecord> Records { get; set; } = [];
}
public sealed class GraduationClearanceRecord : EntityBase
{
public Guid GraduationClearanceItemId { get; set; }
public GraduationClearanceItem? GraduationClearanceItem { get; set; }
public Guid StudentId { get; set; }
public Student? Student { get; set; }
public GraduationClearanceRecordStatus Status { get; set; } =
GraduationClearanceRecordStatus.Pending;
public string? Notes { get; set; }
public DateTime? CompletedAt { get; set; }
public Guid? CompletedByUserId { get; set; }
}
public enum GraduationClearanceBatchStatus
{
Open = 1,
Closed = 2
}
public enum GraduationClearanceRecordStatus
{
Pending = 1,
Completed = 2,
Waived = 3
}