/// <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); } }
public bool Delete() { ThrowExceptionIfValidateFailure(() => { if (!CanDelete()) { AddBrokenRule(QuestionEditFailureRule.CANNOT_DELETE); } }); return(QuestionsAccessor.Delete(ID)); }
public bool SetDisable() { ThrowExceptionIfValidateFailure(() => { if (!CanSetDisable()) { AddBrokenRule(QuestionEditFailureRule.STATUS_CANNOT_SET_TO_DISABLE); } }); return(QuestionsAccessor.SetStatus(ID, (int)QuestionStatus.DISABLED)); }
/// <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); }
/// <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)); }
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)); }
public QuestionManage(long questionId) { this.ID = questionId; Question = QuestionsAccessor.Get(questionId); }
/// <summary> /// 获取课程下的所有题目信息 /// </summary> /// <param name="status">题目状态,为NULL时表示不限制</param> /// <returns></returns> public List <QuestionSimpleInfo> GetQuestions(int?status = null) { return(QuestionsAccessor.GetSimpleAllFor(ID, status)); }