/// <summary> /// Добавляет ответ пользователя, выбранный из набора вариантов ответов /// </summary> /// <param name="lmsEventLmsTasksetAppUserAnswerTaskAnswer"></param> /// <returns></returns> public async Task AddLmsEventLmsTasksetAppUserAnswerTaskAnswerAsync(LmsEventLmsTasksetAppUserAnswerTaskAnswer lmsEventLmsTasksetAppUserAnswerTaskAnswer) { _context.LmsEventLmsTasksetAppUserAnswerTaskAnswers.Add(lmsEventLmsTasksetAppUserAnswerTaskAnswer); await _context.SaveChangesAsync(); }
/// <summary> /// Добавляет ответ пользователя /// </summary> /// <param name="lmsEventLmsTasksetAppUserAnswer">Бланк объекта ответа</param> /// <param name="choosedAnswers">Идентификаторы выбранных пользователем ответов из списка ответов</param> /// <param name="uploadedFile">Загруженный пользователем файл</param> /// <returns></returns> public async Task AddAppUserAnswerAsync(LmsEventLmsTasksetAppUserAnswer lmsEventLmsTasksetAppUserAnswer, int[] choosedAnswers, IFormFile uploadedFile) { // Обрабатываем ответы пользователя на тестовые задания и текстовый ввод if ((choosedAnswers != null && choosedAnswers.Count() > 0) || !string.IsNullOrWhiteSpace(lmsEventLmsTasksetAppUserAnswer.AnswerAsText)) { // Загружаем задание с вариантами ответов var lmsTask = await _lmsTaskSetRepository.GetLmsTaskAsync(lmsEventLmsTasksetAppUserAnswer.LmsTaskId); if (lmsTask != null && lmsTask.LmsTaskAnswers != null && lmsTask.LmsTaskAnswers.Count > 0) { int numberOfPoints = 0; var correctTaskAnswers = lmsTask.LmsTaskAnswers.Where(ta => ta.IsCorrect); // Обрабатываем случаи, когда пользователь выбирал ответы if (choosedAnswers != null && choosedAnswers.Count() > 0 && correctTaskAnswers.Count() == choosedAnswers.Count()) { bool isAllCorrectAnswersChoosed = true; foreach (var correctTaskAnswer in correctTaskAnswers) { if (!choosedAnswers.Contains(correctTaskAnswer.LmsTaskAnswerId)) { isAllCorrectAnswersChoosed = false; break; } } // Если все ответы правильные, назначаем балл по значению из настроек задания if (isAllCorrectAnswersChoosed) { numberOfPoints = lmsTask.NumberOfPoints; } lmsEventLmsTasksetAppUserAnswer.NumberOfPoints = numberOfPoints; } // Обрабатываем случай, когда пользователь вводил ответ в текстовое поле if (!string.IsNullOrWhiteSpace(lmsEventLmsTasksetAppUserAnswer.AnswerAsText) && correctTaskAnswers.Count() > 0) { // Приводим строки к общему виду и сравниваем string sUserAnswer = lmsEventLmsTasksetAppUserAnswer.AnswerAsText.Trim().ToLower().Replace(',', '.'); foreach (var correctTaskAnswer in correctTaskAnswers) { string sCorrectAnswer = correctTaskAnswer.LmsTaskAnswerText.Trim().ToLower().Replace(',', '.'); if (sUserAnswer == sCorrectAnswer) { lmsEventLmsTasksetAppUserAnswer.NumberOfPoints = lmsTask.NumberOfPoints; } // Обработка вопроса типа "ввод числа" if (lmsTask.LmsTaskTypeId == (int)LmsTaskTypesEnum.InputNumber) { double dUserAnswer = 0; double dCorrectAnswer = 0; bool isUserAnswerParsed = double.TryParse(sUserAnswer, out dUserAnswer); bool isCorrectAnswerParsed = double.TryParse(sCorrectAnswer, out dCorrectAnswer); if (isUserAnswerParsed && isCorrectAnswerParsed) { double stdErr = (dUserAnswer - dCorrectAnswer) * 100 / dCorrectAnswer; if (stdErr < 0.5) // Допустимое отклонение - 0.5% { lmsEventLmsTasksetAppUserAnswer.NumberOfPoints = lmsTask.NumberOfPoints; } else { lmsEventLmsTasksetAppUserAnswer.NumberOfPoints = 0; } } } } } } // Сохраняем ответы пользователя if (lmsEventLmsTasksetAppUserAnswer.LmsEventLmsTasksetAppUserAnswerTaskAnswers == null) { lmsEventLmsTasksetAppUserAnswer.LmsEventLmsTasksetAppUserAnswerTaskAnswers = new List <LmsEventLmsTasksetAppUserAnswerTaskAnswer>(); } foreach (var choosedAnswer in choosedAnswers) { var newChoosedAnswerRecord = new LmsEventLmsTasksetAppUserAnswerTaskAnswer { LmsTaskAnswerId = choosedAnswer }; lmsEventLmsTasksetAppUserAnswer.LmsEventLmsTasksetAppUserAnswerTaskAnswers.Add(newChoosedAnswerRecord); } } // Сохраняем ответ пользователя в виде скан-копии решения if (uploadedFile != null) { var newFileModel = await _fileModelRepository.UploadLmsAppUserAnswer(uploadedFile); if (newFileModel != null) { lmsEventLmsTasksetAppUserAnswer.AnswerAsFile = newFileModel; lmsEventLmsTasksetAppUserAnswer.AnswerAsFileId = newFileModel.Id; } } _context.LmsEventLmsTasksetsAppUserAnswers.Add(lmsEventLmsTasksetAppUserAnswer); await _context.SaveChangesAsync(); }