示例#1
0
        /// <summary>
        /// 转换数据为<see cref="UserExamQuestionSummary"/>类型数据
        /// </summary>
        /// <param name="results"></param>
        /// <returns></returns>
        private IEnumerable <UserExamQuestionSummary> ConvertToQuestionSummary(IEnumerable <UserExamQuestionResult> results)
        {
            if (results == null)
            {
                yield break;
            }

            //题目ID集合
            var questionIds = results.Select(p => p.QuestionId).ToArray();
            //获取各题的正确答案
            var rightAnswers = QuestionsAccessor.GetAnswersFor(questionIds);

            //循环处理数据类型,并添加上正确答案
            foreach (var item in results)
            {
                //本题的正确答案(或参考答案)
                var answerJsonData = rightAnswers.ContainsKey(item.QuestionId) ? rightAnswers[item.QuestionId] : string.Empty;

                //反序列化出答案(或解析)内容
                var deserContext = new AnswerDeserializeContext(item.Type);
                var answers      = deserContext.Deserialize(answerJsonData);

                //过滤出正确的答案选项编号(或解析内容)
                var rightCodeArray = RightAnswersFilter(answers, item.Type);

                //题目摘要数据对象
                var summary = new UserExamQuestionSummary(item);
                summary.RightAnswer = rightCodeArray != null?string.Join(",", rightCodeArray) : string.Empty;                  //将多个正确答案(或答案解析内容)用英文逗号分隔

                yield return(summary);
            }
        }
示例#2
0
        public bool Delete()
        {
            ThrowExceptionIfValidateFailure(() =>
            {
                if (!CanDelete())
                {
                    AddBrokenRule(QuestionEditFailureRule.CANNOT_DELETE);
                }
            });

            return(QuestionsAccessor.Delete(ID));
        }
示例#3
0
        public bool SetDisable()
        {
            ThrowExceptionIfValidateFailure(() =>
            {
                if (!CanSetDisable())
                {
                    AddBrokenRule(QuestionEditFailureRule.STATUS_CANNOT_SET_TO_DISABLE);
                }
            });

            return(QuestionsAccessor.SetStatus(ID, (int)QuestionStatus.DISABLED));
        }
示例#4
0
        /// <summary>
        /// 执行搜索
        /// </summary>
        public PagerModel <Data.Entity.Questions> Search()
        {
            ThrowExceptionIfValidateFailure();

            PagerModel <Data.Entity.Questions> pager = new PagerModel <Data.Entity.Questions>()
            {
                Index = PageIndex,
                Size  = PageSize
            };

            QuestionsAccessor.Get(pager, Keyword, type: QuestionType, courseId: CourseId, questionIds: QuestionIds, status: Status);

            return(pager);
        }
示例#5
0
        /// <summary>
        /// 保存题目
        /// </summary>
        /// <returns></returns>
        public bool Save()
        {
            ThrowExceptionIfValidateFailure();

            Questions question = new Questions
            {
                QuestionId = ID,
                Answer     = Answer,
                Count      = Count,
                CourseId   = CourseId,
                CreateTime = CreateTime,
                LastTime   = LastTime,
                Marking    = Marking,
                Status     = Status,
                SubjectId  = SubjectId,
                Topic      = Topic,
                Type       = Type,
                UserId     = UserId
            };

            return(QuestionsAccessor.Insert(question));
        }
示例#6
0
        public bool ModifyTo(QuestionModifyState state)
        {
            ThrowExceptionIfValidateFailure(() =>
            {
                if (state == null)
                {
                    AddBrokenRule(QuestionEditFailureRule.MODIFY_STATE_CANNOT_EMPTY);
                }
                else if (CanModify())
                {
                    //题目所属课程不存在
                    if (!CourseAccessor.Exists(state.CourseId))
                    {
                        AddBrokenRule(QuestionEditFailureRule.COURSE_NOT_EXISTS);
                    }

                    //题目类型无效
                    if (!((IList)Enum.GetValues(typeof(QuestionType))).Contains((QuestionType)state.Type))
                    {
                        AddBrokenRule(QuestionEditFailureRule.QUESTION_TYPE_ERROR);
                    }

                    //题目标题不能为空
                    if (string.IsNullOrWhiteSpace(state.Topic))
                    {
                        AddBrokenRule(QuestionEditFailureRule.TOPIC_CANNOT_EMPTY);
                    }

                    // 如果->非问答题且答案项为NULL,则抛出错误;
                    // 否则->题目类型与答案项进能校验,校验规则如下:
                    //  1、匹配,则验证答案项设置是否有效
                    //  2、不匹配,则添加业务错误
                    if (state.Type != (int)QuestionType.ESSAY_QUESTION && state.AnswerOptions == null)
                    {
                        AddBrokenRule(QuestionEditFailureRule.ANSWER_OPTIONS_CANNOT_EMPTY);
                    }
                    else if (QuestionTools.CheckAnswerOptionsType(state.AnswerOptions, state.Type))
                    {
                        //题目的答案项验证失败
                        if (!state.AnswerOptions.Validate())
                        {
                            if (state.AnswerOptions is SingleChoiceAnswer)
                            {
                                AddBrokenRule(QuestionEditFailureRule.SINGLE_CHOICE_ANSWER_OPTIONS_ERROR);
                            }
                            else if (state.AnswerOptions is MultipleChoiceAnswer)
                            {
                                AddBrokenRule(QuestionEditFailureRule.MULTIPLE_CHOICE_ANSWER_OPTIONS_ERROR);
                            }
                            else if (state.AnswerOptions is TrueFalseAnswer)
                            {
                                AddBrokenRule(QuestionEditFailureRule.TRUE_FALSE_ANSWER_OPTIONS_ERROR);
                            }
                            else if (state.AnswerOptions is GapFillingAnswer)
                            {
                                AddBrokenRule(QuestionEditFailureRule.GAP_FILLING_ANSWER_OPTIONS_ERROR);
                            }
                        }
                    }
                    else
                    {
                        AddBrokenRule(QuestionEditFailureRule.QUESTION_TYPE_AND_ANSWER_OPTIONS_REGEX_FAILURE);
                    }
                }
                else
                {
                    AddBrokenRule(QuestionEditFailureRule.CANNOT_EDIT);
                }
            });

            if (state.SubjectId == 0)
            {
                state.ReviseProperty();
            }


            return(QuestionsAccessor.Update(
                       ID,
                       state.CourseId,
                       state.SubjectId,
                       state.Type,
                       state.Marking,
                       state.Topic,
                       state.Answer,
                       state.Status));
        }
示例#7
0
        public QuestionManage(long questionId)
        {
            this.ID = questionId;

            Question = QuestionsAccessor.Get(questionId);
        }
示例#8
0
 /// <summary>
 /// 获取课程下的所有题目信息
 /// </summary>
 /// <param name="status">题目状态,为NULL时表示不限制</param>
 /// <returns></returns>
 public List <QuestionSimpleInfo> GetQuestions(int?status = null)
 {
     return(QuestionsAccessor.GetSimpleAllFor(ID, status));
 }