/// <summary> /// 保存图片答案 /// </summary> /// <param name="uanswer"></param> /// <param name="user"></param> /// <param name="mediaContent"></param> /// <returns></returns> public Question SaveAnswerImage(UserAnswer uanswer, User user, string mediaContent = null) { var uanswerdetail = uanswer.UserAnswerDetailList.FirstOrDefault(x => x.End == null); if (uanswerdetail == null) { uanswer.CompletedTime = DateTime.Now; uanswer.UserAnswerStatus = UserAnswerStatus.答题完成; this._userAnswerRepository.Update(uanswer); return(new Question() { Text = this._propertyService.GetValue("Answer.Complete"), AnswerType = AnswerType.End }); } var question = this._questionBankService.GetQuestion(uanswerdetail.UserAnswer.QuestionBank_Id, uanswerdetail.QuestionNo); var media = new UserAnswerDetail_Media() { MediaType = MediaType.Image, CreateTime = DateTime.Now, MediaContent = mediaContent, Text = "" }; // 写入多媒体答案 uanswerdetail.UserAnswerDetailMediaList.Add(media); this._userAnswerRepository.Update(uanswer); return(new Question() { AnswerType = AnswerType.Text, Text = "" }); }
/// <summary> /// 保存多媒体文件 /// </summary> /// <param name="media"></param> public void SaveUserAnswerDetailMedia(UserAnswerDetail_Media media) { _userAnswerDetailMediaRepository.Insert(media); }
/// <summary> /// 保存答案并获取下一题 /// </summary> /// <param name="uanswer"></param> /// <param name="answer"></param> /// <returns></returns> public Question SaveAnswer(UserAnswer uanswer, string answer, User user, MediaType mediaType = MediaType.None, string mediaContent = null) { var uanswerdetail = uanswer.UserAnswerDetailList.FirstOrDefault(x => x.End == null); if (uanswerdetail == null) { uanswer.CompletedTime = DateTime.Now; uanswer.UserAnswerStatus = UserAnswerStatus.答题完成; this._userAnswerRepository.Update(uanswer); return(new Question() { Text = this._propertyService.GetValue("Answer.Complete"), AnswerType = AnswerType.End }); } // 超过两小时,自动挂起 if (DateTime.Now.AddHours(-2) > uanswerdetail.Start) { uanswer.UserAnswerStatus = UserAnswerStatus.挂起; this._userAnswerRepository.Update(uanswer); return(new Question() { AnswerType = AnswerType.Text, Text = this._propertyService.GetValue("Answer.Timeout") }); } // 获取当前题目 var question = this._questionBankService.GetQuestion(uanswerdetail.UserAnswer.QuestionBank_Id, uanswerdetail.QuestionNo); var nuanswerdetail = new UserAnswerDetail(); // 语音答题处理文本数据 if (mediaType == MediaType.Voice) { answer = CorrectAnswer(answer, uanswerdetail.UserAnswer.QuestionBank_Id); } //decimal nextQ = 0; WeiExecuteResult analysisQResult = null; // 文本答题,判断是否为下一题 if (question.AnswerType == AnswerType.Text && this._propertyService.CheckCodeValue("Answer.Next", answer)) // (answer.Length < 20 && answer.IndexOf("下一题") != -1)) { // 文本题,跳转下一题 uanswerdetail.End = DateTime.Now; analysisQResult = this.TextAnalysis(uanswerdetail, question, nuanswerdetail); } else { // 保存语音 if (mediaType != MediaType.None) { // 写入多媒体答案 var mediaObj = new UserAnswerDetail_Media() { MediaType = mediaType, CreateTime = DateTime.Now, MediaContent = mediaContent, Text = answer, UserAnswerDetail_Id = uanswerdetail.Id }; this.SaveUserAnswerDetailMedia(mediaObj); } answer = answer.ToLower(); // 判断当前答案 switch (question.AnswerType) { case AnswerType.SingleCheck: uanswerdetail.Answer = answer; analysisQResult = this.SingleCheckAnalysis(uanswerdetail, question, nuanswerdetail); break; case AnswerType.MultiCheck: uanswerdetail.Answer = answer; analysisQResult = this.MultiCheckAnalysis(uanswerdetail, question, nuanswerdetail); break; case AnswerType.Tips: analysisQResult = this.TipsAnalysis(uanswerdetail, question, nuanswerdetail); break; default: if (uanswerdetail.Answer == null) { uanswerdetail.Answer = answer; } else { uanswerdetail.Answer += answer; } analysisQResult = WeiExecuteResultHelper.Failed(this._propertyService.GetValue("Answer.TextTips", 1)); break; } } Question nextqObj = null; if (analysisQResult.Success) { decimal nextqno = analysisQResult.Obj.ToDecimal(); nextqObj = this.NextQuestion(uanswer, question, nextqno, nuanswerdetail); } else { nextqObj = new Question() { AnswerType = AnswerType.Text, Text = analysisQResult.Message }; } //switch (nextQ) //{ // case 0: // nextqObj = new Question() // { // AnswerType = AnswerType.Text, // Text = "您可以继续追加回答,或者告诉我“下一题”保存答案!" // }; // break; // case -1: // nextqObj = new Question() // { // AnswerType = AnswerType.Text, // Text = "您的回答似乎不符,请尝试重新作答!" // }; // break; // case -2: // uanswer.UserAnswerStatus = UserAnswerStatus.挂起; // nextqObj = new Question() // { // AnswerType = AnswerType.Text, // Text = $"答题已暂停,在有效期内({uanswer.QuestionBank.ExpireDateEnd.Value.ToString("yyyyMMdd")})对我说题卷关键字可以继续作答。谢谢您的参与!" // }; // break; // default: // nextqObj = this._questionBankService.GetQuestion(uanswer.QuestionBank_Id, nextQ); // break; //} if (nextqObj != null) { // 判断是否是最后一题 switch (nextqObj.AnswerType) { case AnswerType.End: uanswerdetail.Next = 0; nuanswerdetail.End = DateTime.Now; uanswer.CompletedTime = DateTime.Now; uanswer.UserAnswerStatus = UserAnswerStatus.答题完成; break; case AnswerType.Break: uanswer.CompletedTime = DateTime.Now; nuanswerdetail.End = DateTime.Now; uanswer.UserAnswerStatus = UserAnswerStatus.已作废; break; //case AnswerType.Tips: // Task task = new Task(() => // { // _logger.Information("before begin task"); // System.Threading.Thread.Sleep(500); // _logger.Information("begin task"); // try // { // SaveAnswer(uanswer, "", user); // } // catch(Exception ex) // { // _logger.Error(ex.Message, ex); // } // _logger.Information("begin task"); // }); // task.Start(); // break; default: if (nextqObj.Id > 0) { uanswerdetail.Next = nextqObj.Sort; uanswerdetail.End = DateTime.Now; nuanswerdetail.QuestionNo = nextqObj.Sort; nuanswerdetail.Start = DateTime.Now; uanswer.UserAnswerDetailList.Add(nuanswerdetail); } break; } this._userAnswerRepository.Update(uanswer); return(nextqObj); } return(null); }