选课
This commit is contained in:
1 parent
533ff6b9f6
commit
fdca6a3edf
8 files changed
+603
-25
No files matched your search
@@ -499,7 +499,8 @@ public sealed class CourseSelectionsController(
|
|||||||
round.AcademicTermId,
|
round.AcademicTermId,
|
||||||
[task.Id],
|
[task.Id],
|
||||||
cancellationToken);
|
cancellationToken);
|
||||||
if (candidateEntries.Count == 0)
|
if (CourseSelectionRules.RequiresPublishedSchedule(task.SchedulingMode) &&
|
||||||
|
candidateEntries.Count == 0)
|
||||||
return ConflictProblem("该教学班尚未发布课表,暂时不能办理代选。");
|
return ConflictProblem("该教学班尚未发布课表,暂时不能办理代选。");
|
||||||
|
|
||||||
foreach (var student in students)
|
foreach (var student in students)
|
||||||
@@ -804,7 +805,7 @@ public sealed class CourseSelectionsController(
|
|||||||
round.AcademicTermId,
|
round.AcademicTermId,
|
||||||
[task.Id],
|
[task.Id],
|
||||||
cancellationToken);
|
cancellationToken);
|
||||||
if (task.SchedulingMode == TeachingTaskSchedulingMode.Standard &&
|
if (CourseSelectionRules.RequiresPublishedSchedule(task.SchedulingMode) &&
|
||||||
candidateEntries.Count == 0)
|
candidateEntries.Count == 0)
|
||||||
return ConflictProblem("该教学班尚未发布课表,暂时不能选课。");
|
return ConflictProblem("该教学班尚未发布课表,暂时不能选课。");
|
||||||
var selectedTaskIds = await db.CourseEnrollments
|
var selectedTaskIds = await db.CourseEnrollments
|
||||||
|
|||||||
@@ -95,6 +95,47 @@ public sealed class TeachingTasksController(
|
|||||||
return Ok(new PagedResult<object>(items, total, page, pageSize));
|
return Ok(new PagedResult<object>(items, total, page, pageSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("options")]
|
||||||
|
public async Task<ActionResult> GetOptions(
|
||||||
|
Guid academicTermId,
|
||||||
|
TeachingTaskStatus status = TeachingTaskStatus.Published,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var items = await ScopedTasks()
|
||||||
|
.AsNoTracking()
|
||||||
|
.Where(x =>
|
||||||
|
x.AcademicTermId == academicTermId &&
|
||||||
|
x.Status == status)
|
||||||
|
.OrderBy(x => x.Course!.Code)
|
||||||
|
.ThenBy(x => x.TaskNumber)
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
x.Id,
|
||||||
|
x.TaskNumber,
|
||||||
|
x.Name,
|
||||||
|
x.AcademicTermId,
|
||||||
|
x.CourseId,
|
||||||
|
CourseCode = x.Course!.Code,
|
||||||
|
CourseName = x.Course.Name,
|
||||||
|
CourseNature = x.Course.Nature,
|
||||||
|
CollegeId = x.Course.CollegeId,
|
||||||
|
CollegeName = x.Course.College!.Name,
|
||||||
|
x.Capacity,
|
||||||
|
x.StartWeek,
|
||||||
|
x.EndWeek,
|
||||||
|
x.WeeklyHours,
|
||||||
|
x.SchedulingMode,
|
||||||
|
TeacherNames = x.Teachers
|
||||||
|
.OrderByDescending(item => item.IsPrimary)
|
||||||
|
.Select(item => item.Teacher!.Name),
|
||||||
|
ClassNames = x.Classes
|
||||||
|
.OrderBy(item => item.AdministrativeClass!.Code)
|
||||||
|
.Select(item => item.AdministrativeClass!.Name)
|
||||||
|
})
|
||||||
|
.ToListAsync(cancellationToken);
|
||||||
|
return Ok(items);
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet("{id:guid}")]
|
[HttpGet("{id:guid}")]
|
||||||
public async Task<ActionResult> GetOne(Guid id, CancellationToken cancellationToken)
|
public async Task<ActionResult> GetOne(Guid id, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ public static class CourseSelectionRules
|
|||||||
public static bool SupportsProxyEnrollment(CourseNature nature) =>
|
public static bool SupportsProxyEnrollment(CourseNature nature) =>
|
||||||
nature == CourseNature.GeneralRequired;
|
nature == CourseNature.GeneralRequired;
|
||||||
|
|
||||||
|
public static bool RequiresPublishedSchedule(TeachingTaskSchedulingMode schedulingMode) =>
|
||||||
|
schedulingMode == TeachingTaskSchedulingMode.Standard;
|
||||||
|
|
||||||
public static bool HasScheduleConflict(
|
public static bool HasScheduleConflict(
|
||||||
IEnumerable<ScheduleEntry> candidateEntries,
|
IEnumerable<ScheduleEntry> candidateEntries,
|
||||||
IEnumerable<ScheduleEntry> selectedEntries) =>
|
IEnumerable<ScheduleEntry> selectedEntries) =>
|
||||||
|
|||||||
Loaded 3 of 8 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user