public override void Execute()
        {
            Validate();

            var state = State as ExamUserSubmitEventState;

            ExamsAccessor.AddAnswerSubmitTimes(state.ExamId);
        }
Exemple #2
0
        public override void Execute()
        {
            Validate();

            var state = State as ExamUsedEventState;

            ExamsAccessor.AddUsedTimes(state.ExamId);
        }
Exemple #3
0
        /// <summary>
        /// 将<see cref="ExamUsers"/>类型转换为<see cref="UserExamSearchResultItem"/>类型数据
        /// </summary>
        /// <param name="sourceData"><see cref="ExamUsers"/>源数据</param>
        /// <returns></returns>
        public IEnumerable <UserExamSearchResultItem> ConvertToSearchResult(IEnumerable <ExamUsers> sourceData)
        {
            if (sourceData == null)
            {
                yield break;
            }

            //得到用户集合
            long[] userIds = sourceData.Select(p => p.UserId).ToArray();
            var    users   = UsersAccessor.GetSimpleUsers(userIds);

            //得到考卷模板集合
            long[] examIds = sourceData.Select(p => p.ExamId).ToArray();
            var    exams   = ExamsAccessor.GetSimpleExams(examIds);

            //循环处理
            foreach (var item in sourceData)
            {
                var user = users.FirstOrDefault(p => p.UserId == item.UserId);
                var exam = exams.FirstOrDefault(p => p.ExamId == item.ExamId);

                var result = new UserExamSearchResultItem
                {
                    UserExamId    = item.Id,
                    UserId        = item.UserId,
                    ExamId        = item.ExamId,
                    ActualTime    = item.Times,
                    MarkingStatus = item.MarkingStatus,
                    MarkingTime   = item.MarkingTime,
                    CreateTime    = item.CreateTime,
                    PostTime      = item.PostTime,
                    Score         = item.Total
                };

                if (user != null)
                {
                    result.UserMobile = user.Mobile;
                    result.UserName   = user.Name;
                    result.UserTitle  = user.Title;
                }

                if (exam != null)
                {
                    result.ExamTitle = exam.Title;
                    result.ExamType  = exam.ExamType;
                    result.MaxTime   = exam.Time;
                    result.Total     = exam.Total;
                    result.Pass      = exam.Pass;
                }

                yield return(result);
            }
        }
Exemple #4
0
        /// <summary>
        /// 设置状态为禁用
        /// </summary>
        /// <returns></returns>
        public bool SetDisable()
        {
            ThrowExceptionIfValidateFailure(() =>
            {
                if (!CanSetDisable())
                {
                    AddBrokenRule(ExamsManageFailureRule.STATUS_CANNOT_SET_DISABLED);
                }
            });

            return(ExamsAccessor.SetStatus(ID, (int)ExamsStatus.DISABLED));
        }
Exemple #5
0
        /// <summary>
        /// 执行搜索
        /// </summary>
        /// <returns></returns>
        public PagerModel <Data.Entity.Exams> Search()
        {
            ThrowExceptionIfValidateFailure();

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

            ExamsAccessor.GetList(pager, Keyword, courseId: CourseId, type: Type, status: Status);

            return(pager);
        }
Exemple #6
0
        /// <summary>
        /// 从<see cref="ExamsModifyState"/>对象更新考卷
        /// </summary>
        /// <param name="state"></param>
        /// <returns></returns>
        public bool ModifyTo(ExamsModifyState state)
        {
            ThrowExceptionIfValidateFailure(() =>
            {
                if (state == null)
                {
                    AddBrokenRule(ExamsManageFailureRule.MODIFYSTATE_OBJECT_IS_NULL);
                }
                else
                {
                    //考卷标题为Empty
                    if (string.IsNullOrWhiteSpace(state.Title))
                    {
                        AddBrokenRule(ExamsManageFailureRule.TITLE_CANNOT_EMPTY);
                    }

                    //该考卷未指定题库
                    var questionCount = state.Questions.SplitToLongArray().Count();
                    if (questionCount < 1)
                    {
                        AddBrokenRule(ExamsManageFailureRule.QUESTIONS_CANNOT_EMPTY);
                    }

                    //及格分不能大于等于总分是不允许的
                    if (state.Pass >= state.Total)
                    {
                        AddBrokenRule(ExamsManageFailureRule.PASS_MUST_LESS_THAN_TO_TOTAL);
                    }

                    //总分及各题分是否一致
                    var totalSum = state.RedioTotal + state.MultipleTotal + state.JudgeTotal + state.FillingTotal + state.AskTotal;
                    if (totalSum != state.Total)
                    {
                        AddBrokenRule(ExamsManageFailureRule.TOTAL_NOT_EQUALS_SUM);
                    }

                    //如果有设置考卷的使用有效时间,则开始时间必须小于结束时间
                    if (state.StartTime.HasValue && state.EndTime.HasValue && state.StartTime.Value >= state.EndTime.Value)
                    {
                        AddBrokenRule(ExamsManageFailureRule.STARTTIME_MUST_BE_BEFORE_THE_ENDTIME);
                    }
                }
            });

            //映射数据实体对象后存储
            var editExams = CreateNewExamsFor(state);

            return(ExamsAccessor.Update(editExams));
        }
Exemple #7
0
        /// <summary>
        /// 保存考卷
        /// </summary>
        /// <returns></returns>
        public bool Save()
        {
            ThrowExceptionIfValidateFailure();

            var exam = new Data.Entity.Exams
            {
                ExamId        = ID,
                UserId        = Request.UserId,
                ExamType      = Request.ExamType,
                Title         = Request.Title,
                Questions     = Request.Questions,
                CourseIds     = Request.CourseIds,
                Remarks       = Request.Remarks,
                Time          = Request.Time,
                Pass          = Request.Pass,
                Total         = Request.Total,
                Status        = (int)Status,
                Radio         = Request.Radio,
                RedioTotal    = Request.RedioTotal,
                Multiple      = Request.Multiple,
                MultipleTotal = Request.Multiple,
                Judge         = Request.Judge,
                JudgeTotal    = Request.JudgeTotal,
                Filling       = Request.Filling,
                FillingTotal  = Request.FillingTotal,
                Ask           = Request.Ask,
                AskTotal      = Request.AskTotal,
                CreateTime    = DateTime.Now,
                StartTime     = Request.StartTime,
                EndTime       = Request.EndTime,
                Answers       = 0,
                UseCount      = 0
            };

            return(ExamsAccessor.Insert(exam));
        }