/// <summary> /// 学生完成课时学习后,创建课后任务 /// </summary> public Yw_StudentTask CreateTaskAutoAfterStudy(int studentId, int lesProgressId) { StudentStudyBll studyBll = new StudentStudyBll(); Yw_StudentLessonProgress lesProgress = studyBll.GetStuLessonProgressById(lesProgressId); if (lesProgress.Yle_Percent < 100 && lesProgress.Yle_SubjectCount > 0)//学生课时学习中,如果题目全部作对,就不创建课后任务 { Yw_StudentCourseProgress progress = studyBll.GetProgressByStudentCourse(studentId, lesProgress.Yle_CourseId); return(CreateStudyPractice(progress, studentId, lesProgress.Yle_LessonId, lesProgress.Yle_LessonIndex, lesProgressId, null, StudyTaskTypeEnum.系统课后任务)); } return(null); }
/// <summary> /// 生成新的学习进度数据 /// </summary> /// <param name="studentId">学生id</param> /// <param name="courseId">课程id</param> /// <param name="lessonId">课时id</param> /// <returns></returns> public Yw_StudentLessonProgress GetNewProgressByStudent(int studentId, int courseId, int lessonId) { if (ScpRepository.GetByStudentCourse(studentId, courseId) != null)//如果此学生有此课程 { LessonBll bll = new LessonBll(); var lesson = bll.GetLesson(lessonId); //获取最后一次学习进度 var progress = StuLesProgressRepository.GetLastProgress(studentId, lessonId); //学习进度 var newProgress = new Yw_StudentLessonProgress() { Yle_StudentId = studentId, Yle_CourseId = courseId, Yle_LessonId = lessonId, Yle_LessonIndex = lesson.Ycl_Index, Yle_CreateTime = DateTime.Now, Yle_CoinFromUIndex = 1, Yle_LastStudyTime = DateTime.Now, Yle_StartStudyTime = DateTime.Now, Yle_UnitIndex = 1, Yle_StudySeconds = 0, Yle_IsFinished = false, Yle_IsLastest = true, Yle_key = Guid.NewGuid().ToString("N").ToLower() }; //学生答题记录 var newAnswers = new Yw_StudentLessonAnswer() { Yla_StudentId = studentId, Yla_CourseId = courseId, Yla_LessonId = lessonId, Yla_StudentAnswer = "", Yla_StudentCoin = "" }; if (progress == null)//如果没有学习进度,则重新添加一个学习进度 { StuLesProgressRepository.Insert(newProgress); newAnswers.Yla_LessonProgressId = newProgress.Yle_Id; StuLessonAnsRepository.Insert(newAnswers); } else //否则新增加一个学习进度,并且修改最大金币发放单元 { newProgress.Yle_CoinFromUIndex = progress.Yle_CoinFromUIndex > progress.Yle_UnitIndex ? progress.Yle_CoinFromUIndex : progress.Yle_UnitIndex;//修改最大金币发放单元 StuLesProgressRepository.Insert(newProgress); newAnswers.Yla_LessonProgressId = newProgress.Yle_Id; StuLessonAnsRepository.Insert(newAnswers); } return(newProgress); } return(null); }
/// <summary> /// 获取最新的课时数据,并更新学习进度秘钥 /// </summary> /// <param name="studentId">学生id</param> /// <param name="courseId">课程id</param> /// <param name="lessonId">课时id</param> /// <returns></returns> public Yw_StudentLessonProgress GetLastProgressByStudent(int studentId, int courseId, int lessonId) { var course = ScpRepository.GetByStudentCourse(studentId, courseId); if (course != null) //如果此学生有此课程 { ScpRepository.UpdateStudyTime(course.Yps_Id, DateTime.Now); //更新最后学习时间 LessonBll bll = new LessonBll(); var lesson = bll.GetLesson(lessonId); if (lesson.Ycl_CourseId != courseId || lesson.Ycl_Status != (int)LessonStatusEnum.合格) { return(null); } //如果课时的课程id不一致或课时不是合格状态,则返回空 //获取最后一次学习进度 var progress = StuLesProgressRepository.GetLastProgress(studentId, lessonId); var newProgress = new Yw_StudentLessonProgress { Yle_StudentId = studentId, Yle_CourseId = courseId, Yle_LessonId = lessonId, Yle_LessonIndex = lesson.Ycl_Index, Yle_CreateTime = DateTime.Now, Yle_CoinFromUIndex = 1, Yle_LastStudyTime = DateTime.Now, Yle_StartStudyTime = DateTime.Now, Yle_UnitIndex = 1, Yle_StudySeconds = 0, Yle_IsFinished = false, Yle_IsLastest = true, Yle_key = Guid.NewGuid().ToString("N").ToLower() }; var newAnswers = new Yw_StudentLessonAnswer() { Yla_StudentId = studentId, Yla_CourseId = courseId, Yla_LessonId = lessonId, Yla_StudentAnswer = "", Yla_StudentCoin = "" }; if (progress == null)//如果没有学习进度,则重新添加一个学习进度 { StuLesProgressRepository.Insert(newProgress); newAnswers.Yla_LessonProgressId = newProgress.Yle_Id; StuLessonAnsRepository.Insert(newAnswers); return(newProgress); } else if (progress.Yle_IsFinished) //如果学习进度完成了,则新增加一个学习进度,并且修改最大金币发放单元 { newProgress.Yle_CoinFromUIndex = progress.Yle_CoinFromUIndex > progress.Yle_UnitIndex ? progress.Yle_CoinFromUIndex : progress.Yle_UnitIndex; //修改最大金币发放单元 StuLesProgressRepository.Insert(newProgress); newAnswers.Yla_LessonProgressId = newProgress.Yle_Id; StuLessonAnsRepository.Insert(newAnswers); return(newProgress); } else //如果学习进度没有完成 { progress.Yle_key = StuLesProgressRepository.UpdateKey(progress.Yle_Id);//更新学习进度的秘钥 return(progress); } } return(null); }
/// <summary> /// 获取学习报告的统计部分 /// </summary> /// <param name="studentId"></param> /// <param name="taskId"></param> /// <returns></returns> public DtoStudentReport GetByStuLesAnswer(int studentId, int lessonProgressId) { StudentStudyBll studentStudyBll = new StudentStudyBll(); //var result = studentStudyBll.StuLesProgressRepository.IsHasStudy(lessonProgressId, studentId); //if (!result) //{ // throw new AbhsException(ErrorCodeEnum.NotStudyReport, AbhsErrorMsg.ConstNotStudyReport + " LessonProgressId:" + lessonProgressId); //} //演示异常使用,正式上线删除 var lesProgress = studentStudyBll.StuLesProgressRepository.IsHasStudys(lessonProgressId, studentId); if (lesProgress == null) { throw new AbhsException(ErrorCodeEnum.NotStudyReport, AbhsErrorMsg.ConstNotStudyReport + " LessonProgressId:" + lessonProgressId); } if (!lesProgress.Yle_IsFinished) { var errorlog = $"操作者:{studentId},操作时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},课程进度Id:{lessonProgressId},原因:课程状态未完成,开始学习时间:{lesProgress.Yle_StartStudyTime.ToString("yyyy-MM-dd HH:mm:ss")},结束学习时间:{lesProgress.Yle_FinishStudyTime.ToString("yyyy-MM-dd HH:mm:ss")},学习时长:{lesProgress.Yle_StudySeconds},已答题目数:{lesProgress.Yle_SubjectCount},数据创建时间:{lesProgress.Yle_CreateTime.ToString("yyyy-MM-dd HH:mm:ss")},数据修改时间:{lesProgress.Yle_UpdateTime.ToString("yyyy-MM-dd HH:mm:ss")}"; LogHelper.WriteLog(errorlog); //查询学习时长 Yw_StudentLessonProgress lessonProgress = studentStudyBll.StuLesProgressRepository.GetProgressByID(lessonProgressId); var studyTime = Convert.ToInt32(Math.Ceiling(lessonProgress.Yle_StudySeconds * 1.0 / 60)); //病句 选择题 if (lesProgress.Yle_LessonId == 10000) { return(GetSelect(studyTime)); } //断句 else if (lesProgress.Yle_LessonId == 10001) { return(GetMarkCut(studyTime)); } //阅读理解 填空 else if (lesProgress.Yle_LessonId == 10002) { return(GetFillBlank(studyTime)); } } //演示结束 //获取学生答案 Yw_StudentLessonAnswerExt lessonAnswer = studentStudyBll.StuLessonAnsRepository.GetStuLesAnswer(studentId, lessonProgressId) as Yw_StudentLessonAnswerExt; List <StudentAnswerCard> answerCard = lessonAnswer.Yla_Answer_Obj; DtoStudentReport studentReport = new DtoStudentReport(); if (answerCard != null) { //查询学习时长 Yw_StudentLessonProgress lessonProgress = studentStudyBll.StuLesProgressRepository.GetProgressByID(lessonProgressId); studentReport.StudyTime = Convert.ToInt32(Math.Ceiling(lessonProgress.Yle_StudySeconds * 1.0 / 60)); studentReport.StudyDate = answerCard.OrderBy(s => s.SubmitTime).FirstOrDefault().SubmitTime; studentReport.TotalStars = answerCard.Sum(s => s.TotalStars); studentReport.ResultCoins = answerCard.Sum(s => s.AnswerCollection.Sum(x => x.ResultCoins)); studentReport.TotalCoins = answerCard.Sum(s => s.TotalCoins); studentReport.TotalScore = Convert.ToInt32(Math.Round((answerCard.Sum(s => s.TotalStars) * 1.0 / (answerCard.Sum(s => s.AnswerCollection.Count) * 5.0) * 5), MidpointRounding.AwayFromZero)); studentReport.SubjectCount = answerCard.Sum(s => s.AnswerCollection.Count()); studentReport.KnowledgeRates = answerCard.Sum(s => s.TotalStars) * 1.0 / (answerCard.Sum(s => s.AnswerCollection.Count) * 5.0); double rates = Math.Round((double)(answerCard.Sum(s => s.AnswerCollection.Where(x => x.ResultStars == 5).Count())) / answerCard.Sum(s => s.AnswerCollection.Count()), 2) * 100; studentReport.ExcellentRates = rates; var answers = answerCard.Select(s => s.AnswerCollection).ToList(); List <StudentAnswerBase> answerBase = new List <StudentAnswerBase>(); foreach (var item in answers) { answerBase.AddRange(item.Where(x => x.KnowledgeId != 0).ToList()); } var knowledgeShow = answerBase.GroupBy(s => s.KnowledgeId); studentReport.Knowledge = GetKnowledge(knowledgeShow); } return(studentReport); }