/// <summary> /// 获取学生任务报告的统计部分 /// </summary> /// <param name="studentId"></param> /// <param name="taskId"></param> /// <returns></returns> public DtoStudentReport GetByStudentTask(int studentId, int taskId) { StudentPracticeBll studentPracticeBll = new StudentPracticeBll(); var result = studentPracticeBll.StudentTaskRepository.IsHasTaskReport(studentId, taskId); if (!result) { throw new AbhsException(ErrorCodeEnum.NotStudyReport, AbhsErrorMsg.ConstNotStudyReport); } //获取学生答案 Yw_StudentStudyTaskAnswerExt answer = studentPracticeBll.StuStudyTaskAnsRepo.GetByStudentTask(studentId, taskId) as Yw_StudentStudyTaskAnswerExt; StudentAnswerCard answerCard = answer.Yta_Answer_Obj; DtoStudentReport studentReport = new DtoStudentReport(); if (answerCard != null) { studentReport.StudyDate = answerCard.SubmitTime; studentReport.TotalScore = Convert.ToInt32(Math.Round(answerCard.TotalStars * 1.0 / (answerCard.AnswerCollection.Count() * 5) * 5, MidpointRounding.AwayFromZero)); studentReport.TotalStars = answerCard.TotalStars; studentReport.StudyTime = Convert.ToInt32(Math.Ceiling(answerCard.UseTime * 1.0 / 60)); studentReport.ResultCoins = answerCard.AnswerCollection.Select(s => s.ResultCoins).Sum(); studentReport.TotalCoins = answerCard.TotalCoins; studentReport.SubjectCount = answerCard.AnswerCollection.Count(); double rates = Math.Round((double)(answerCard.AnswerCollection.Where(x => x.ResultStars == 5).Count()) / answerCard.AnswerCollection.Count(), 2) * 100; studentReport.ExcellentRates = rates; List <Yw_Knowledge> knowledges = new List <Yw_Knowledge>(); var knowledgeShow = answerCard.AnswerCollection.Where(x => x.KnowledgeId != 0).GroupBy(s => s.KnowledgeId); studentReport.Knowledge = GetKnowledge(knowledgeShow); } return(studentReport); }
public Yw_StudentStudyTaskAnswer Get(int id) { Yw_StudentStudyTaskAnswer obj = GetEntity(id); if (obj == null) { return(null); } Yw_StudentStudyTaskAnswerExt realObj = TranslatorFactory.Translator <Yw_StudentStudyTaskAnswer, Yw_StudentStudyTaskAnswerExt>(obj); realObj.EnableAudit(); return(realObj); }
public Yw_StudentStudyTaskAnswer GetByStudentTask(int studentId, int taskId) { string sql = "select * from Yw_StudentStudyTaskAnswer where Yta_StudentId=@StudentId and Yta_StudentStudyTaskId=@TaskId"; Yw_StudentStudyTaskAnswer obj = Query(sql, new { StudentId = studentId, TaskId = taskId }).FirstOrDefault(); if (obj == null) { return(null); } Yw_StudentStudyTaskAnswerExt realObj = TranslatorFactory.Translator <Yw_StudentStudyTaskAnswer, Yw_StudentStudyTaskAnswerExt>(obj); realObj.EnableAudit(); return(realObj); }
/// <summary> /// 获取任务报告或练习报告的题目部分 /// </summary> /// <param name="studentId"></param> /// <param name="taskId"></param> /// <param name="pageIndex"></param> /// <returns></returns> public Tuple <List <StudentAnswerBase>, Dictionary <int, Yw_SubjectContent>, Dictionary <int, Yw_Subject>, int, int> GetReportSubject(int studentId, int taskId, int pageIndex) { StudentPracticeBll studentPracticeBll = new StudentPracticeBll(); int pageSize = 10; //获取学生答案 Yw_StudentStudyTaskAnswerExt answer = studentPracticeBll.StuStudyTaskAnsRepo.GetByStudentTask(studentId, taskId) as Yw_StudentStudyTaskAnswerExt; List <StudentAnswerBase> answerCard = new List <StudentAnswerBase>(); Dictionary <int, Yw_SubjectContent> subjectContent = new Dictionary <int, Yw_SubjectContent>(); Dictionary <int, Yw_Subject> subjects = new Dictionary <int, Yw_Subject>(); answerCard = answer.Yta_Answer_Obj.AnswerCollection; var subjectIds = answerCard.Select(s => s.SubjectId).ToList(); if ((pageIndex - 1) * pageSize < subjectIds.Count) { answerCard = answerCard.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); var pageIds = subjectIds.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); subjectContent = GetTaskSubject(pageIds).ToDictionary(x => x.Ysc_SubjectId, x => x); subjects = GetSubjects(pageIds).ToDictionary(x => x.Ysj_Id, x => x); } Tuple <List <StudentAnswerBase>, Dictionary <int, Yw_SubjectContent>, Dictionary <int, Yw_Subject>, int, int> reportTuple = new Tuple <List <StudentAnswerBase>, Dictionary <int, Yw_SubjectContent>, Dictionary <int, Yw_Subject>, int, int>(answerCard, subjectContent, subjects, pageSize, subjectIds.Count); return(reportTuple); }
/// <summary> /// 保存课后任务或者练习题答案 /// </summary> public void SaveResult(int studentId, int taskId, int useTime, List <StudentAnswerBase> answers, StudyTaskTypeEnum taskType = 0, int partId = 0) { Yw_StudentTask stk = StudentTaskRepository.GetByStudentTask(studentId, taskId); if (stk.Yuk_Status == (int)StudentTaskStatusEnum.已完成) { throw new AbhsException(ErrorCodeEnum.StudentTaskStatusInvalid, AbhsErrorMsg.ConstStudentTaskStatusInvalid); } int totalStars = answers.Sum(x => x.ResultStars); int totalCoins = CalcCoins(answers); int fiveStarsAnswers = answers.Count(x => x.ResultStars == 5); var finishTime = DateTime.Now; //更新学生任务记录表 stk.Yuk_StartTime = finishTime.AddSeconds(0 - useTime);//反算时间 stk.Yuk_FinishTime = finishTime; stk.Yuk_StudentScore = totalStars; stk.Yuk_GainCoins = totalCoins; stk.Yuk_RightSubjectCount = fiveStarsAnswers; if (answers.Count > 0) { stk.Yuk_Percent = (int)(Math.Round(fiveStarsAnswers * 1.0 / answers.Count, 2) * 100); } stk.Yuk_Status = (int)StudentTaskStatusEnum.已完成; StudentTaskRepository.Update(stk); StudentAnswerCard card = new StudentAnswerCard(); card.UseTime = useTime; card.SubmitTime = finishTime.ToString("yyyy-MM-dd HH:mm:ss"); card.Part = partId; card.AnswerCollection = answers; card.TotalStars = totalStars; card.TotalCoins = totalCoins; //学生任务答题结果 Yw_StudentStudyTaskAnswerExt answer = new Yw_StudentStudyTaskAnswerExt(); answer.Yta_StudentId = studentId; answer.Yta_StudentStudyTaskId = stk.Yuk_Id; answer.Yta_TaskId = taskId; answer.Yta_Answer_Obj = card; answer.Yta_CreateTime = DateTime.Now; StuStudyTaskAnsRepo.Add(answer); //学生最近答题记录 Yw_StudyTask task = StudyTaskRepository.Get(taskId); StudentBll studentBll = new StudentBll(); List <int> ids = task.Ysk_SubjectIds.Split(',').Select(x => Convert.ToInt32(x)).ToList(); studentBll.RefreshStudentRecentSubject(studentId, ids); StudentInfoBll bll = new StudentInfoBll(); bll.AddCoins(studentId, totalCoins); if (taskType == StudyTaskTypeEnum.系统课后任务) { new StudentPracticeBll().PublishStudyTaskMessage( task.Ysk_CourseId, task.Ysk_LessonId, studentId, useTime, answers.Count, totalCoins); } else if (taskType == StudyTaskTypeEnum.课后练习) { new StudentPracticeBll().PublishStudyPractiseMessage( task.Ysk_CourseId, task.Ysk_LessonId, studentId, useTime, answers.Count, totalCoins); } //课程学习 = 1, 课后任务 = 2, 课后练习 = 3 StudyWrongSourceEnum?source = null; switch (taskType) { case StudyTaskTypeEnum.系统课后任务: case StudyTaskTypeEnum.老师课后任务: source = StudyWrongSourceEnum.课后任务; break; case StudyTaskTypeEnum.课后练习: source = StudyWrongSourceEnum.课后练习; break; default: source = StudyWrongSourceEnum.课后任务; break; } new StudentWrongBookBll().SaveWrongBook( new List <StudentAnswerCard> { card }, new DtoStudentWrongBook { CourseId = task.Ysk_CourseId, LessonId = task.Ysk_LessonId, LessonProgressId = task.Ysk_LessonProgressId, Source = source.Value, StudentId = studentId, StudyTaskId = taskId }); }