|
@@ -142,8 +142,8 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
var examAnswerRepository = new ExamRepository<ExamAnswer>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
var userExamItemRepository = new ExamRepository<ExamUserExamItem>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
|
|
|
- var userExamItemTable = userExamItemRepository.Queryable().Where(i=> i.QuestionId == examQuestionRequest.QuestionId);
|
|
|
- var userExamTable = _repository.Queryable().Where(u=> u.UserId == _sessionContext.UserId);
|
|
|
+ var userExamItemTable = userExamItemRepository.Queryable().Where(i => i.QuestionId == examQuestionRequest.QuestionId);
|
|
|
+ var userExamTable = _repository.Queryable().Where(u => u.UserId == _sessionContext.UserId);
|
|
|
var examAnswerTable = examAnswerRepository.Queryable();
|
|
|
|
|
|
var examAnswers = await examAnswerTable.InnerJoin(userExamItemTable, (e, i) => e.UserExamItemId == i.Id)
|
|
@@ -183,7 +183,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
var result = queryable.GroupBy(x => x.QuestionType).Select(m => new ExamQuestionViewResponse
|
|
|
{
|
|
|
QuestionType = m.Key,
|
|
|
- Questions = m.GroupBy(g=>g.QuestionId).Select(n => new SimpleViewResponse
|
|
|
+ Questions = m.GroupBy(g => g.QuestionId).Select(n => new SimpleViewResponse
|
|
|
{
|
|
|
Id = n.Key
|
|
|
}).ToList()
|
|
@@ -288,7 +288,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
|
|
|
if (userExams.All(x => x.IsSubmit))
|
|
|
{
|
|
|
- var examManage = await _examManageRepository.GetAsync(x=>x.Id == examId);
|
|
|
+ var examManage = await _examManageRepository.GetAsync(x => x.Id == examId);
|
|
|
|
|
|
examManage.ExamStatus = EExamStatus.Complete;
|
|
|
|
|
@@ -377,7 +377,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
private async Task<StartExamViewResponse> CheckExamValid(ExamUserExam examUserExam, CancellationToken cancellationToken)
|
|
|
{
|
|
|
|
|
|
- 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
|
|
|
{
|
|
@@ -407,7 +407,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
|
|
|
startExamViewResponse.IsStart = true;
|
|
|
|
|
|
- if (examManage.ExamStatus== EExamStatus.NoStart)
|
|
|
+ if (examManage.ExamStatus == EExamStatus.NoStart)
|
|
|
{
|
|
|
await UpdateExamStatus(examManage, cancellationToken);
|
|
|
}
|
|
@@ -434,7 +434,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
{
|
|
|
CallBack = () =>
|
|
|
{
|
|
|
- var response = new StartExamViewResponse
|
|
|
+ var response = new StartExamViewResponse
|
|
|
{
|
|
|
IsJoin = false,
|
|
|
IsStart = false,
|
|
@@ -457,7 +457,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
{
|
|
|
CallBack = () =>
|
|
|
{
|
|
|
- var response = new StartExamViewResponse
|
|
|
+ var response = new StartExamViewResponse
|
|
|
{
|
|
|
IsJoin = false,
|
|
|
IsStart = false,
|
|
@@ -608,7 +608,8 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
Label = qo.Label,
|
|
|
IsAnswer = qo.IsAnswer,
|
|
|
IsSelected = o.Id != null,
|
|
|
- Score = s.Score
|
|
|
+ QuestionScore = s.Score,
|
|
|
+ Score = i.Score
|
|
|
}
|
|
|
);
|
|
|
|
|
@@ -623,6 +624,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
Answer = g.FirstOrDefault().Answer,
|
|
|
QuestionType = g.Key.QuestionType,
|
|
|
Id = g.Key.Id,
|
|
|
+ QuestionScore = g.FirstOrDefault().QuestionScore,
|
|
|
Score = g.FirstOrDefault().Score,
|
|
|
Title = g.FirstOrDefault().Title,
|
|
|
CorrectAnswer = g.Key.QuestionType.CheckSelectType() ? string.Join(",", g.Where(i => i.IsAnswer).Select(n => n.Label).Distinct()) : g.FirstOrDefault()?.CorrectAnswer
|
|
@@ -714,7 +716,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
public async Task<GradingResultPageViewResponse> GetGradingResultPagedList(GradingPagedRequest gradingPagedRequest)
|
|
|
{
|
|
|
// 只要有阅卷记录就在已阅卷列表中,已阅卷和未阅卷会有重复数据,只有所有记录都已阅卷才会从未阅卷列表中排除
|
|
|
- var userExamTable = _repository.Queryable().WhereIF(gradingPagedRequest.IsCheck!=null, x => x.IsCheck == gradingPagedRequest.IsCheck && x.IsSubmit);
|
|
|
+ var userExamTable = _repository.Queryable().WhereIF(gradingPagedRequest.IsCheck != null, x => x.IsCheck == gradingPagedRequest.IsCheck && x.IsSubmit);
|
|
|
|
|
|
var examManageTable = new ExamRepository<ExamManage>(_uow, _dataPermissionFilterBuilder, _serviceProvider).Queryable();
|
|
|
|
|
@@ -733,7 +735,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
TotalScore = e.TotalScore,
|
|
|
ExamName = e.Name,
|
|
|
ExamCode = e.Code,
|
|
|
- IsCheck = SqlFunc.Subqueryable<ExamUserExam>().Where(x=>x.ExamId == e.Id && x.IsCheck).Any(),
|
|
|
+ IsCheck = SqlFunc.Subqueryable<ExamUserExam>().Where(x => x.ExamId == e.Id && x.IsCheck).Any(),
|
|
|
Id = e.Id,
|
|
|
Remark = e.Remark
|
|
|
});
|
|
@@ -763,7 +765,9 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
{
|
|
|
var gradingExamItemDto = batchGradingExamItemDto.Items.Find(m => m.UserExamItemId == x.Id);
|
|
|
|
|
|
- var updateUserExamItem = _mapper.Map<GradingExamItemDto, ExamUserExamItem>(gradingExamItemDto,x);
|
|
|
+ var updateUserExamItem = _mapper.Map<GradingExamItemDto, ExamUserExamItem>(gradingExamItemDto, x);
|
|
|
+
|
|
|
+ updateUserExamItem.IsCheck = true;
|
|
|
|
|
|
updateUserExamItems.Add(updateUserExamItem);
|
|
|
});
|
|
@@ -774,27 +778,27 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
|
|
|
var userExamId = userExamItems.FirstOrDefault()?.UserExamId;
|
|
|
// 计算本次考试得分
|
|
|
- var userExamItemsInCheck = await _userExamItemRepository.Queryable().Where(x => x.UserExamId == userExamId).ToListAsync();
|
|
|
- var updateExamItemDTOs = new List<UpdateUserExamItemDto>();
|
|
|
- userExamItemsInCheck.ForEach(x =>
|
|
|
- {
|
|
|
- var updateUserExamItem = _mapper.Map<ExamUserExamItem, UpdateUserExamItemDto>(x);
|
|
|
-
|
|
|
- updateExamItemDTOs.Add(updateUserExamItem);
|
|
|
- });
|
|
|
- await CalcuteExamItemScore(_userExamItemRepository, updateExamItemDTOs,cancellationToken);
|
|
|
+ var userExamItemsInCheck = await _userExamItemRepository.Queryable()
|
|
|
+ .InnerJoin<ExamQuestionBak>((u, q) => u.QuestionId == q.QuestionId)
|
|
|
+ .Where((u, q) => u.UserExamId == userExamId && (q.QuestionType == EQuestionType.Single || q.QuestionType == EQuestionType.Multi || q.QuestionType == EQuestionType.Judge)).Select((u, q) => new UpdateUserExamItemDto
|
|
|
+ {
|
|
|
+ QuestionId = u.QuestionId,
|
|
|
+ QuestionType = q.QuestionType,
|
|
|
+ UserExamId = u.UserExamId,
|
|
|
+ }).Distinct().ToListAsync();
|
|
|
+ await CalcuteExamItemScore(_userExamItemRepository, userExamItemsInCheck, cancellationToken);
|
|
|
|
|
|
await CalcuteTotalScore(_userExamItemRepository, userExamId, cancellationToken);
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public async Task<List<ExamUserViewResponse>> GetUserListAsync(ExamUserQueryRequest examUserQueryRequest)
|
|
|
{
|
|
|
- var userExamTable = _repository.Queryable().Where(x => x.ExamId == examUserQueryRequest.ExamId);
|
|
|
- var queryable = await userExamTable.InnerJoin<User>((ux, u) => ux.UserId == u.Id).Select((ux,u) => new ExamUserViewResponse
|
|
|
+ var userExamTable = _repository.Queryable().Where(x => x.ExamId == examUserQueryRequest.ExamId);
|
|
|
+ var queryable = await userExamTable.InnerJoin<User>((ux, u) => ux.UserId == u.Id).Select((ux, u) => new ExamUserViewResponse
|
|
|
{
|
|
|
ExamId = ux.ExamId,
|
|
|
UserId = ux.UserId,
|
|
@@ -850,8 +854,8 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
var examManageRepository = new ExamRepository<ExamManage>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
var testPaperItemRepository = new ExamRepository<Exams.ExamManages.ExamQuestionBak>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
var examQuestionScoreRepository = new ExamRepository<ExamQuestionScoreBak>(_uow, _dataPermissionFilterBuilder, _serviceProvider);
|
|
|
- var testPaperOptionsTable = testPaperItemOptionsRepository.Queryable().Where(x => questionIds.Contains( x.QuestionId ) && x.IsAnswer);
|
|
|
- var testPaperItemTable = testPaperItemRepository.Queryable().Where(x => x.QuestionType== EQuestionType.Single || x.QuestionType == EQuestionType.Multi || x.QuestionType == EQuestionType.Judge);
|
|
|
+ var testPaperOptionsTable = testPaperItemOptionsRepository.Queryable().Where(x => questionIds.Contains(x.QuestionId) && x.IsAnswer);
|
|
|
+ var testPaperItemTable = testPaperItemRepository.Queryable().Where(x => x.QuestionType == EQuestionType.Single || x.QuestionType == EQuestionType.Multi || x.QuestionType == EQuestionType.Judge);
|
|
|
var userExamTable = _repository.Queryable().Where(x => userExamIds.Contains(x.Id));
|
|
|
var examManageTable = examManageRepository.Queryable();
|
|
|
var testPaperOptionIds = await testPaperOptionsTable.InnerJoin(testPaperItemTable, (t, i) => t.ExamQuestionId == i.Id)
|
|
@@ -868,7 +872,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
|
|
|
|
|
|
foreach (var addUserExamItemDto in addUserExamItemDtos)
|
|
|
- {
|
|
|
+ {
|
|
|
var isCorrect = userExamItemOptions.Select(x => x.QuestionOptionId).OrderBy(x => x).SequenceEqual(testPaperOptionIds.OrderBy(x => x));
|
|
|
var userExamItem = userExamItems.FirstOrDefault(x => x.QuestionId == addUserExamItemDto.QuestionId);
|
|
|
if (userExamItem != null)
|
|
@@ -876,10 +880,10 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
userExamItem.IsCheck = true;
|
|
|
userExamItem.Score = isCorrect ? examQuesiontScores.FirstOrDefault(x => x.QuestionType == addUserExamItemDto.QuestionType)?.Score : 0;
|
|
|
userExamItem.ToUpdate(_sessionContext);
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
await userExamItemRepository.UpdateWithValidateAsync(userExamItems, cancellationToken);
|
|
|
}
|
|
|
|
|
@@ -905,11 +909,11 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
if (examManage != null)
|
|
|
{
|
|
|
userExam.IsSuccess = userExam.Score > examManage.CutoffScore;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
userExam.ToUpdate(_sessionContext);
|
|
|
|
|
|
- await _repository.UpdateWithValidateAsync(userExam,cancellationToken);
|
|
|
+ await _repository.UpdateWithValidateAsync(userExam, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -920,7 +924,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
userExamItem.UserExamItemOptionses = await AddUserExamItemOptions(addUserExamItemDto, cancellationToken);
|
|
|
|
|
|
userExamItem.ExamAnswers = await AddExamAnswer(addUserExamItemDto, userExamItem.Id, cancellationToken);
|
|
|
-
|
|
|
+
|
|
|
|
|
|
await userExamItemRepository.AddNav(userExamItem)
|
|
|
.Include(x => x.UserExamItemOptionses)
|
|
@@ -975,7 +979,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- private async Task<List<ExamAnswer>> AddExamAnswer(AddUserExamItemDto addUserExamItemDto,string id, CancellationToken cancellationToken)
|
|
|
+ private async Task<List<ExamAnswer>> AddExamAnswer(AddUserExamItemDto addUserExamItemDto, string id, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (addUserExamItemDto.QuestionType.CheckSelectType()) return null;
|
|
|
|
|
@@ -1091,7 +1095,7 @@ namespace Hotline.Application.Exam.Service.ExamManages
|
|
|
await _examAnswerRepository.ValidateAddAsync(examAnswer, cancellationToken);
|
|
|
|
|
|
examAnswers.Add(examAnswer);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
return examAnswers;
|
|
|
}
|