public bool BatchSubmitUserAnswer(BatchSubmitUserAnswerInput data) { try { using (MyExaminationContext context = new MyExaminationContext()) { // 用户检查. MeUser user = context.Users.Find(data.UserID); if (user == null) { // 用户不存在. return(false); } // 用户考试数据检查. MeUserExamination userExamination = context.UserExaminations.Find(data.UserExaminationID); if (userExamination == null) { // 用户考试数据不存在. return(false); } if (userExamination.UserID != data.UserID) { // 参数不正确, 当前用户对别人的考试进行回答. return(false); } if (userExamination.ExaminationFinishTime != null) { // 考试已经结束. return(false); } foreach (QuestionAnswer item in data.QuestionAnswers) { // 获取具体的问题. MeQuestion question = context.Questions.Find(item.QuestionID); if (question == null) { // 问题不存在. return(false); } // 单选的情况下,检查 提交的答案, 是否是 可选答案. if (question.QuestionType == MeQuestionType.OneOption) { long questionOptionID = 0; if (!Int64.TryParse(item.OneOptionAnswer, out questionOptionID)) { // 对于 单选/多选, 提交的数据, 无法解析为 long 值. return(false); } MeQuestionOption questionOption = context.QuestionOptions.Find(questionOptionID); if (questionOption == null) { // 不存在的 答案选项. return(false); } if (questionOption.QuestionID != item.QuestionID) { // 答案选项, 与 问题不匹配. return(false); } } // 多选的情况下,检查 提交的答案, 是否是 可选答案. if (question.QuestionType == MeQuestionType.MulOption) { foreach (string answerString in item.MulOptionAnswer) { long questionOptionID = 0; if (!Int64.TryParse(answerString, out questionOptionID)) { // 对于 单选/多选, 提交的数据, 无法解析为 long 值. return(false); } MeQuestionOption questionOption = context.QuestionOptions.Find(questionOptionID); if (questionOption == null) { // 不存在的 答案选项. return(false); } if (questionOption.QuestionID != item.QuestionID) { // 答案选项, 与 问题不匹配. return(false); } } } var answerQuery = from answerData in context.UserAnswers where answerData.UserExaminationID == data.UserExaminationID && answerData.UserID == data.UserID && answerData.QuestionID == item.QuestionID select answerData; MeUserAnswer userAnswerData = answerQuery.SingleOrDefault(); if (userAnswerData == null) { // 是首次回答. userAnswerData = new MeUserAnswer() { // 用户考试ID. UserExaminationID = data.UserExaminationID, // 用户ID. UserID = data.UserID, // 问题ID. QuestionID = item.QuestionID, // 回答. UserAnswer = item.ResultAnswer, }; context.UserAnswers.Add(userAnswerData); } else { // 是修改之前的回答. userAnswerData.UserAnswer = item.ResultAnswer; } } context.SaveChanges(); } return(true); } catch (Exception ex) { logger.Error(ex.Message, ex); return(false); } }
public bool BatchSubmitUserAnswer([FromBody] BatchSubmitUserAnswerInput data) { return(this._ExaminationService.BatchSubmitUserAnswer(data)); }