Ejemplo n.º 1
0
        public PagerModel <UserExamSearchResultItem> Search()
        {
            ThrowExceptionIfValidateFailure();

            PagerModel <ExamUsers> searchPager = new PagerModel <ExamUsers>
            {
                Index = PageIndex,
                Size  = PageSize
            };

            //搜索结果
            searchPager = ExamUsersAccessor.GetList(searchPager,
                                                    userId: StudentId,
                                                    examId: ExamId,
                                                    markingStatus: Status);

            //转换后的结果数据
            var resultData = ConvertToSearchResult(searchPager.Table);

            //处理并输出结果
            return(new PagerModel <UserExamSearchResultItem>
            {
                Count = searchPager.Count,
                Index = searchPager.Index,
                Size = searchPager.Size,
                Table = resultData != null?resultData.ToList() : new List <UserExamSearchResultItem>()
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 统计我的考卷
        /// </summary>
        /// <returns></returns>
        public ExamStatistics StatisticsForExams()
        {
            var exams = ExamUsersAccessor.GetListFor(ID);

            var result = new ExamStatistics();

            //总数
            result.TotalExams      = exams.Count();
            result.TotalReviewed   = exams.Where(p => p.MarkingStatus == (int)ExamMarkingStatus.READED).Count();
            result.TotalWaitReview = exams.Where(p => p.PostTime.HasValue && p.MarkingStatus == (int)ExamMarkingStatus.DIDNOT_READ).Count();

            return(result);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 删除用户考卷信息
 /// </summary>
 /// <param name="deleteUser">执行删除操作的用户ID</param>
 /// <returns></returns>
 public bool Delete(long deleteUser)
 {
     ThrowExceptionIfValidateFailure(() =>
     {
         if (!CanDelete())
         {
             AddBrokenRule(UserExamMarkingFailureRule.CANNOT_DELETE);
         }
         else if (UserExam.UserId != deleteUser)
         {
             AddBrokenRule(UserExamMarkingFailureRule.NOACCESS_DELETE_THE_OTHERS);
         }
     });
     return(ExamUsersAccessor.Remove(UserExam));
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 保存用户参考的考卷信息
        /// </summary>
        /// <returns></returns>
        public bool Save()
        {
            ThrowExceptionIfValidateFailure();

            //题目及作答结果JSON
            string questionResultJson = JsonUtility.JsonSerializeObject(request.QuestionsResults);

            //用户参考试卷数据初始化
            var examUser = new Data.Entity.ExamUsers
            {
                Id            = ID,
                ExamId        = request.ExamId,
                UserId        = request.UserId,
                CreateTime    = request.CreateTime,
                Answer        = questionResultJson,
                MarkingStatus = (int)ExamMarkingStatus.DIDNOT_READ,
                MarkingTime   = null,
                PostTime      = null,
                Times         = 0,
                Total         = 0
            };

            //**调用仓储服务存储,并调用考卷使用事件**
            // 1、存储
            bool success = ExamUsersAccessor.Insert(examUser);

            // 2、调用考卷使用事件
            if (success)
            {
                eventsChannels.Clear();

                eventsChannels.AddEvent(new ExamUsedEvent(new ExamUsedEventState {
                    ExamId = request.ExamId
                }));

                eventsChannels.Execute();
            }

            return(success);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 提交阅卷成绩
        /// </summary>
        /// <param name="reviewUserId">阅卷人用户ID</param>
        /// <param name="QuestionScores"></param>
        /// <returns></returns>
        public bool SubmitMarking(long reviewUserId, Dictionary <long, int> QuestionScores)
        {
            ThrowExceptionIfValidateFailure(() =>
            {
                if (!CanMarking())
                {
                    AddBrokenRule(UserExamMarkingFailureRule.STATUS_CANNOT_MARKING);
                }
                else if (QuestionScores == null || QuestionScores.Count() < 1)
                {
                    AddBrokenRule(UserExamMarkingFailureRule.MARKING_QUESTION_SCORES_EXCEPTION);
                }
                else if (QuestionScores.Count() != QuestionSummaryList.Count())
                {
                    AddBrokenRule(UserExamMarkingFailureRule.MARKING_QUESTION_SCORES_EXCEPTION);
                }

                //循环遍历每一题的得分并记录,检测到未提交得分或得分异常时抛出异常
                foreach (var item in QuestionSummaryList)
                {
                    if (!QuestionScores.ContainsKey(item.QuestionId))
                    {
                        AddBrokenRule(UserExamMarkingFailureRule.PARTOF_QUESTION_NO_SCORE);
                        break;
                    }

                    int score = QuestionScores[item.QuestionId];

                    if (score > item.Score)
                    {
                        AddBrokenRule(UserExamMarkingFailureRule.QUESTION_LAST_SCORE_CANNOT_GREATERTHAN_SCORE);
                        break;
                    }

                    item.ActualScore = score;
                }
            });

            //更新用户考卷信息
            userExam.MarkingStatus = (int)ExamMarkingStatus.READED;
            userExam.MarkingTime   = DateTime.Now;
            userExam.Answer        = JsonUtility.JsonSerializeObject(QuestionSummaryList);
            userExam.Total         = QuestionSummaryList.Sum(p => p.ActualScore);

            //调用仓储服务更新
            bool success = ExamUsersAccessor.Update(UserExam);

            if (success)
            {
                //阅卷完成后的通知事件
                var @event = new MarkingCompleteNoticeEvent(new MarkingCompleteNoticeEventState
                {
                    ReviewUser = reviewUserId,
                    Exam       = Exam,
                    UserExam   = UserExam
                });

                eventsChannels.AddEvent(@event);

                eventsChannels.Execute();
            }

            return(success);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 提交考卷作答结果
        /// </summary>
        /// <returns></returns>
        public bool SubmitResult()
        {
            //原考卷的初始化的所有题目信息
            List <UserExamQuestionResult> questionResults = null;

            //验证业务数据规则
            ThrowExceptionIfValidateFailure(() =>
            {
                //解析出考卷的所有题目
                questionResults = JsonUtility.JsonDeserialize <List <UserExamQuestionResult> >(UserExam.Answer);

                if (questionResults == null || questionResults.Count() < 1)
                {
                    AddBrokenRule(SubmitExamPaperFailureRule.USER_EXAM_QUTIONS_EXCEPTION);
                }
                else
                {
                    //题目ID集合
                    var questionIds = questionResults.Select(p => p.QuestionId).ToArray();
                    //用户提交答案的题目ID集合
                    var submitQuestionIds = request.AnswerResults.Keys;

                    //交集数量
                    var intersectCount = questionIds.Intersect(submitQuestionIds).Count();

                    //交卷时的作答题目与考卷的题目不符时,视为错误的交卷
                    if (intersectCount != questionIds.Count())
                    {
                        AddBrokenRule(SubmitExamPaperFailureRule.ANSWERS_RESULT_INCOMPLETE);
                    }
                }
            });

            //保存答题结果,并触发答题事件

            // 1、先逐题记录答案
            foreach (var item in questionResults)
            {
                //本题作答结果
                string userAnswer = Request.AnswerResults[item.QuestionId];

                //记录到当前题目的答题结果中
                item.Result = userAnswer;
            }

            // 2、保存答题结果
            userExam.Answer   = JsonUtility.JsonSerializeObject(questionResults);
            userExam.PostTime = DateTime.Now;
            userExam.Times    = unchecked ((int)Math.Floor(DateTime.Now.Subtract(userExam.CreateTime).TotalMinutes));        //交卷时间-考卷创建时间=答题的总分钟数
            bool success = ExamUsersAccessor.Update(UserExam);

            // 2、触发答题事件
            if (success)
            {
                eventsChannels.Clear();

                eventsChannels.AddEvent(new ExamUserSubmitEvent(new ExamUserSubmitEventState
                {
                    UserExamId = Request.UserExamId,
                    ExamId     = UserExam.ExamId,
                    UserId     = Request.UserId
                }));

                eventsChannels.Execute();
            }

            return(success);
        }