Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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
            });
        }