Esempio n. 1
0
        /// <summary>
        /// 获取学员集合
        /// </summary>
        /// <returns></returns>
        private List <Student> GetStudents()
        {
            ThrowExceptionIfValidateFailure();

            var tempStudents = new List <Student>();

            //获取学员学习计划集合
            var studentPlans = UserStudyPlanAccessor.GetStudentStudyPlans(ID);

            //学员ID集合
            var studentIds = studentPlans.Select(p => p.UserId).ToArray();

            //根据学员ID集合获取学员信息
            var students = UsersAccessor.GetUserList(studentIds);

            foreach (var user in students)
            {
                var plan = studentPlans.FirstOrDefault(p => p.UserId == user.UserId);

                tempStudents.Add(new Student
                {
                    UserId        = user.UserId,
                    Email         = user.Email,
                    Mobile        = user.Mobile,
                    Title         = user.Title,
                    Name          = user.Name,
                    Username      = user.Username,
                    StudyStatus   = plan.Status,
                    Progress      = plan.Progress,
                    LastStudyTime = plan.UpdateTime
                });
            }

            return(tempStudents);
        }
Esempio n. 2
0
        /// <summary>
        /// 统计我的学习计划
        /// </summary>
        /// <returns></returns>
        public StudyPlanStatistics StatisticsForStudyPlan()
        {
            var plans = UserStudyPlanAccessor.GetPlansFor(ID);

            var result = new StudyPlanStatistics();

            if (plans != null)
            {
                result.TotalNoStart  = plans.Where(p => p.Status == (int)UserStudyPlanStatus.NOTSTARTED).Count();
                result.TotalStudying = plans.Where(p => p.Status == (int)UserStudyPlanStatus.STUDYING).Count();
                result.TotalDone     = plans.Where(p => p.Status == (int)UserStudyPlanStatus.COMPLETE).Count();
            }

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// 执行搜索
        /// </summary>
        public PagerModel <Data.Entity.UserStudyPlan> Search()
        {
            ThrowExceptionIfValidateFailure();

            //定义用户学习计划查询器
            PagerModel <Data.Entity.UserStudyPlan> pager = new PagerModel <Data.Entity.UserStudyPlan>()
            {
                Index = PageIndex,
                Size  = PageSize
            };

            //分页获取用户学习计划列表
            UserStudyPlanAccessor.Get(pager, studentId: StudentId, status: StudyStatus);

            return(pager);
        }
Esempio n. 4
0
        public override void Execute()
        {
            Validate();

            var state = State as UserStudingPlansStatisticsEventState;

            //学习中的计划状态,指:未开始,学习中的状态
            var status = EnumUtility.GetEnumValues(typeof(UserStudyPlanStatus)).ToList();

            //排除已学习完成的
            status.Remove((int)UserStudyPlanStatus.COMPLETE);
            status.TrimExcess();

            //学员 学习计划数量
            int count = UserStudyPlanAccessor.GetPlansCount(state.UserId, status);

            //更新仓储数据
            UserStudyAccessor.UpdateStudyPlans(state.UserId, count);
        }
Esempio n. 5
0
        /// <summary>
        /// 获取指定学员的学习进度信息
        /// </summary>
        /// <returns></returns>
        private Student GetStudent(long studentId)
        {
            Student student = null;

            if (Students != null)
            {
                student = Students.FirstOrDefault(p => p.UserId == studentId);
            }
            else
            {
                //该学员的学习计划
                var userPlan = UserStudyPlanAccessor.Get(ID, studentId);

                //学习信息
                var user = UsersAccessor.Get(studentId);

                ThrowExceptionIfValidateFailure(() =>
                {
                    if (userPlan == null)
                    {
                        AddBrokenRule(StudyPlanEditFailureRule.STUDENT_NOT_EXISTS);
                    }
                });

                return(new Student
                {
                    UserId = studentId,
                    Email = user.Email,
                    Mobile = user.Mobile,
                    Username = user.Username,
                    Name = user.Name,
                    Title = user.Title,
                    StudyStatus = userPlan.Status,
                    Progress = userPlan.Progress,
                    LastStudyTime = userPlan.UpdateTime
                });
            }

            return(student);
        }
        public override void Execute()
        {
            Validate();

            //需要计算学习进度的学员及计划
            var studentsPlans = GetStuentPlans();

            //获取计划中的所有课程ID
            var allCourses = GetCourseIdsFor(studentsPlans?.Values);

            //所有课程对应的章节集合
            var courseChapters = CourseAccessor.GetCourseChaptersFor(allCourses);

            List <UserStudyPlanProgressModel> studentProgressList = new List <UserStudyPlanProgressModel>();

            if (studentsPlans == null)
            {
                return;
            }

            foreach (var item in studentsPlans)
            {
                //用户该课程相关的学习计划进度计算结果
                Dictionary <long, float> planProgressResult = CalculatePlanProgress(item.Key, item.Value, courseChapters);

                foreach (var result in planProgressResult)
                {
                    studentProgressList.Add(new UserStudyPlanProgressModel
                    {
                        StudentId = item.Key,
                        PlanId    = result.Key,
                        Progress  = result.Value,
                        Status    = (int)GetStatusFor(result.Value)
                    });
                }
            }

            //更新学习计划进度
            UserStudyPlanAccessor.UpdateProgress(studentProgressList);
        }
        /// <summary>
        /// 获取学员及计划
        /// </summary>
        /// <returns></returns>
        private Dictionary <long, List <PlanCoursesModel> > GetStuentPlans()
        {
            Dictionary <long, List <PlanCoursesModel> > dic = new Dictionary <long, List <PlanCoursesModel> >();

            if (state.StudentId.HasValue || state.StudentId > 0)
            {
                //当前学员持有该课程的计划
                var studentPlans = StudyPlanCourseAccessor.GetStudyPlansCoursesFor(state.StudentId.Value, state.CourseId);

                dic.Add(state.StudentId.Value, studentPlans);
            }
            else
            {
                //所有持有该课程的计划
                var plans = StudyPlanCourseAccessor.GetStudyPlansCoursesFor(state.CourseId);

                var planIds = plans.Select(p => p.PlanId).ToArray();

                //啊其他取持有这些计划的学员
                var studentPlanIdsDic = UserStudyPlanAccessor.GetStudentIdsFor(planIds);

                if (studentPlanIdsDic == null)
                {
                    return(null);
                }

                foreach (var item in studentPlanIdsDic)
                {
                    var studentId   = item.Key;
                    var itemPlanIds = item.Value;

                    var itemPlans = plans.Where(p => itemPlanIds.Contains(p.PlanId)).ToList();

                    dic.Add(studentId, itemPlans);
                }
            }

            return(dic);
        }