Browse Source

调整考试状态

guqiang 11 hours ago
parent
commit
cf9dedc679
1 changed files with 37 additions and 6 deletions
  1. 37 6
      src/Hotline.Application/Exam/Service/ExamManages/UserExamService.cs

+ 37 - 6
src/Hotline.Application/Exam/Service/ExamManages/UserExamService.cs

@@ -270,7 +270,26 @@ namespace Hotline.Application.Exam.Service.ExamManages
             {
                 userExam = _mapper.Map<SubmitExamDto, ExamUserExam>(submitExamDto, userExam);
 
+                userExam.ExamStatus = EExamStatus.Complete;
+
                 await _repository.UpdateWithValidateAsync(userExam, cancellationToken);
+
+                await CompleteExamManage(userExam.ExamId, cancellationToken);
+            }
+        }
+
+        private async Task CompleteExamManage(string examId, CancellationToken cancellationToken)
+        {
+            var userExams = await _repository.Queryable().Where(x => x.ExamId == examId).ToListAsync();
+
+            if (userExams.All(x => x.IsSubmit))
+            {
+                var repository = new ExamRepository<ExamManage>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
+                var examManage = await repository.GetAsync(x=>x.Id == examId);
+
+                examManage.ExamStatus = EExamStatus.Complete;
+
+                await repository.UpdateWithValidateAsync(examManage, cancellationToken);
             }
         }
 
@@ -278,7 +297,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
         {
             var userExam = await new ExamRepository<ExamUserExam>(_uow, _dataPermissionFilterBuilder, _serviceProvider).Queryable().Where(x => x.Id == addUserExamItemDto.UserExamId).FirstAsync();
 
-            var startExamViewResponse = await CheckExamValid(userExam);
+            var startExamViewResponse = await CheckExamValid(userExam, cancellationToken);
 
             if (!startExamViewResponse.CheckValidate())
             {
@@ -312,7 +331,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
             if (userExam.StartTime == null)
                 userExam.StartTime = DateTime.Now;
 
-            var startExamViewResponse = await CheckExamValid(userExam);
+            var startExamViewResponse = await CheckExamValid(userExam, cancellationToken);
 
             if (!startExamViewResponse.CheckValidate())
             {
@@ -325,7 +344,13 @@ namespace Hotline.Application.Exam.Service.ExamManages
 
             await _repository.UpdateWithValidateAsync(userExam, cancellationToken);
 
-            var examManage = await new ExamRepository<ExamManage>(_uow, _dataPermissionFilterBuilder, _serviceProvider).GetAsync(x => x.Id == userExam.ExamId);
+            var repository = new ExamRepository<ExamManage>(_uow, _dataPermissionFilterBuilder, _serviceProvider);            
+
+            var examManage = await repository.GetAsync(x => x.Id == userExam.ExamId);
+
+            examManage.ExamStatus = EExamStatus.Executing;
+
+            await repository.UpdateWithValidateAsync(examManage, cancellationToken);
 
             return new StartExamViewResponse
             {
@@ -335,11 +360,11 @@ namespace Hotline.Application.Exam.Service.ExamManages
             };
         }
 
-        private async Task<StartExamViewResponse> CheckExamValid(ExamUserExam examUserExam)
+        private async Task<StartExamViewResponse> CheckExamValid(ExamUserExam examUserExam, CancellationToken cancellationToken)
         {
             var examManageRepository = new ExamRepository<ExamManage>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
 
-            var examManage = await examManageRepository.Queryable().Where(x => x.Id == examUserExam.ExamId).FirstAsync();
+            var examManage = await examManageRepository.Queryable().Where(x => x.Id == examUserExam.ExamId).FirstAsync();            
 
             var startExamViewResponse = new StartExamViewResponse
             {
@@ -366,7 +391,13 @@ namespace Hotline.Application.Exam.Service.ExamManages
 
             startExamViewResponse.IsStart = true;
 
-            startExamViewResponse.TimeSpan = examManage?.TimeSpan ?? 0;
+            if (examManage.ExamStatus== EExamStatus.NoStart)
+            {
+                examManage.ExamStatus = EExamStatus.Executing;
+                await examManageRepository.UpdateWithValidateAsync(examManage,cancellationToken);
+            }
+
+                startExamViewResponse.TimeSpan = examManage?.TimeSpan ?? 0;
             startExamViewResponse.StartTime = examManage?.StartTime;
             return startExamViewResponse;
         }