Ejemplo n.º 1
0
        /// <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 = ""
            });
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 保存多媒体文件
 /// </summary>
 /// <param name="media"></param>
 public void SaveUserAnswerDetailMedia(UserAnswerDetail_Media media)
 {
     _userAnswerDetailMediaRepository.Insert(media);
 }
Ejemplo n.º 3
0
        /// <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);
        }