コード例 #1
0
        public JsonResult GetExaminationRecordsDistribution(int id)
        {
            List <string> distribution;
            RExamination  result = _examReportBL.GetExaminationRecordsDistribution(id, out distribution);

            var itemArray = new List <pieSeries>();

            foreach (string d in distribution)
            {
                itemArray.Add(new pieSeries
                {
                    name = d,
                    y    = result.RecordsDistribution[d]
                });
            }

            var res = new ChartModel
            {
                DivID     = "RecordsDistributionChart",
                charttype = Charttype.Pie,
                title     = result == null ? "" : result.ExaminationTitle + "成绩分布统计",
                pieseries = itemArray
            };

            return(Json(res, JsonRequestBehavior.AllowGet));
        }
コード例 #2
0
        /// <summary>
        ///     获得考试列表(报表模板)
        /// </summary>
        /// <param name="ExamName"></param>
        /// <param name="StartTime"></param>
        /// <param name="EndTime"></param>
        /// <returns></returns>
        public List <RExamination> GetCommonRExamination(string ExamName, string StartTime, string EndTime)
        {
            AllQuestion        = _examReportDB.GetAllList <tbQuestion>(true);
            AllQuestionSort    = _examReportDB.GetAllList <tbQuestionSort>(true);
            AllExampaper       = _examReportDB.GetAllList <tbExampaper>(true);
            AllExamSendStudent = _examinationDB.GettbExamSendStudent();

            var result = new List <RExamination>();

            foreach (tbExamination exam in _examinationDB.GetPublishExam().Where
                         (p =>
                         p.ExaminationTitle.Contains(ExamName) && p.ExamEndTime > StartTime.StringToDate(0) &&
                         p.ExamEndTime < (string.IsNullOrEmpty(EndTime) ? EndTime.StringToDate(1) : EndTime.StringToDate(1).AddDays(1).AddSeconds(-1))))
            {
                var tbExampaper = AllExampaper.FirstOrDefault(p => p._id == exam.PaperID);

                var temp = new RExamination
                {
                    _id                = exam._id,
                    ApprovalUser       = exam.ApprovalUser,
                    CreateTime         = exam.CreateTime,
                    ExamBeginTime      = exam.ExamBeginTime,
                    ExamEndTime        = exam.ExamEndTime,
                    ExaminationTitle   = exam.ExaminationTitle,
                    tbExamSendStudents = GetCommonRExamSendStudents(exam._id),
                    ExamLength         = exam.ExamLength,
                    ExamRules          = exam.ExamRules,
                    LastUpdateTime     = exam.LastUpdateTime,
                    PaperID            = exam.PaperID,
                    UserID             = exam.UserID,
                    PassScore          = exam.PassScore,
                    PercentFlag        = exam.PercentFlag,
                    PublishedFlag      = exam.PublishedFlag,
                    RadomOrderFlag     = exam.RadomOrderFlag,
                    SendMessageFlag    = exam.SendMessageFlag,
                    ShowType           = exam.ShowType,
                    Status             = exam.Status,
                    TestTimes          = exam.TestTimes
                };

                if (tbExampaper.ExamType == 0)
                {
                    temp.ExamPaperTotalScore = tbExampaper.QuestionList.Sum(p => p.QScore);
                }
                if (tbExampaper.ExamType == 1)
                {
                    temp.ExamPaperTotalScore =
                        tbExampaper.QuestionRule.Sum(
                            p => p.QLevelStr.Split(';').Sum(q => int.Parse(q.Split(':')[1])) * p.QScore);
                }
                result.Add(temp);
            }
            return(result);
        }
コード例 #3
0
        public JsonResult ExportRecordsDistributionChart(string ExamName, string StartTime, string EndTime, int charId)
        {
            List <string>       distribution;
            List <RExamination> result = _examReportBL.GetExaminationRecordsDistribution(ExamName, StartTime, EndTime,
                                                                                         out distribution);
            RExamination instance = result.FirstOrDefault(p => p._id == charId);

            var itemArray = new List <pieSeries>();
            var table     = new DataTable();

            table.Columns.Add("考试名称");
            table.Columns.Add("考试时长(分钟)");
            table.Columns.Add("总分");
            foreach (string d in distribution)
            {
                table.Columns.Add(d);

                itemArray.Add(new pieSeries {
                    name = d, y = instance.RecordsDistribution[d]
                });
            }

            foreach (RExamination item in result)
            {
                var row = new List <object> {
                    item.ExaminationTitle, item.ExamLength, item.ExamPaperTotalScore
                };

                foreach (string d in distribution)
                {
                    row.Add(item.RecordsDistribution[d]);
                }

                table.Rows.Add(row.ToArray());
            }

            var res = new ChartModel
            {
                DivID     = "RecordsDistributionChart",
                charttype = Charttype.Pie,
                title     = instance.ExaminationTitle + "成绩分布统计",
                pieseries = itemArray
            };

            new Spreadsheet().ExportChart(new List <ChartModel> {
                res
            }, new List <DataTable> {
                table
            }, HttpContext);
            return(Json(1, JsonRequestBehavior.AllowGet));
        }
コード例 #4
0
        public JsonResult GetQuestionSortCorrectReport(string ExamName, string StartTime, string EndTime,
                                                       int pageSize = 20, int pageIndex = 1)
        {
            List <string>       questionSort;
            List <RExamination> result = _examReportBL.GetQuestionSortCorrectReport(ExamName, StartTime, EndTime,
                                                                                    out questionSort);

            RExamination MaxRate = result.OrderByDescending(p => p.QuesSortCorrectMaxRate).FirstOrDefault();
            RExamination MinRate = result.OrderBy(p => p.QuesSortCorrectMinRate).FirstOrDefault();
            IOrderedEnumerable <RExamination> ave = result.OrderByDescending(p => p.QuesSortCorrectAverageRate);

            int totalCount = result.Count;

            result = result.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            var charArray = new List <Series>();
            var xAxis     = new List <String>();
            var head      = new StringBuilder
                                (@"<tr>
                            <th class='tl'>考试名称 [ 题库名: 正确率 ]</th>
                            <th class='Raster_8'>考试时长(分钟)</th>
                            <th class='Raster_5'>总分</th>");

            foreach (string sort in questionSort)
            {
                //head.Append("<th>" + sort + "</th>");
                //xAxis.Add(sort.Length > 10 ? sort.Substring(0, 10) + "..." : sort);
                xAxis.Add(sort);
            }
            head.Append(@"</tr>");

            var itemArray = new object[result.Count()];
            int n         = 0;

            foreach (RExamination item in result)
            {
                var body = new StringBuilder(@"<tr>

                    <td title='" + item.ExaminationTitle + @"'><p class='c33'><strong>"
                                             + item.ExaminationTitle + @"</strong></p><p class='Info'>");


                var series = new Series
                {
                    name = item.ExaminationTitle,
                    data = new List <double>()
                };

                bool falg = false;

                foreach (string sort in questionSort)
                {
                    if (item.QuesSortCorrectRate[sort] != -1)
                    {
                        body.Append(sort + ": " + item.QuesSortCorrectRate[sort] + "%" + "<span>|</span>");
                        falg = true;
                    }
                    series.data.Add(item.QuesSortCorrectRate[sort] == -1 ? 0 : item.QuesSortCorrectRate[sort]);
                }

                body = falg ? body.Remove(body.Length - 14, 14) : body;

                body.Append("</p></td><td title='" + item.ExamLength + @"' class='tc'>" + item.ExamLength + @"</td>
                    <td title='" + (item.PercentFlag == 1 ? item.ExamPaperTotalScore : 100) + @"'class='tc'>"
                            + (item.PercentFlag == 1 ? item.ExamPaperTotalScore : 100) + @"</td></tr>");


                //body.Append("</tr>");
                var temp = new
                {
                    body = body.ToString()
                };

                itemArray[n] = temp;
                n++;

                charArray.Add(series);
            }
            var res = new ChartModel
            {
                DivID     = "QuestionSortCorrectChart",
                xAxis     = xAxis,
                series    = charArray,
                charttype = Charttype.Line,
                yText     = "题库正确率(%)",
                title     = "题库正确率统计"
            };

            return(Json(new
            {
                result = 1,
                dataList = itemArray.ToList(),
                recordCount = totalCount,
                MaxRate,
                MinRate,
                MaxAve = ave.FirstOrDefault(),
                MinAve = ave.LastOrDefault(),
                head = head.ToString(),
                res
            }, JsonRequestBehavior.AllowGet));
        }
コード例 #5
0
        public JsonResult GetQuestionCorrectReport(string ExamName, string StartTime, string EndTime, int pageSize = 20,
                                                   int pageIndex = 1)
        {
            List <RExamination> result = _examReportBL.GetQuestionCorrectReport(ExamName, StartTime, EndTime);

            RExamination MaxRate = result.OrderByDescending(p => p.QuesTypeCorrectMaxRate).FirstOrDefault();
            RExamination MinRate = result.OrderBy(p => p.QuesTypeCorrectMinRate).FirstOrDefault();
            IOrderedEnumerable <RExamination> ave = result.OrderByDescending(p => p.QuesTypeCorrectAverageRate);

            int totalCount = result.Count;

            result = result.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();

            var itemArray = new object[result.Count()];
            int n         = 0;
            var charArray = new List <Series>();

            foreach (RExamination item in result)
            {
                var temp = new
                {
                    item._id,
                    item.ExaminationTitle,
                    item.ExamLength,
                    ExamBeginTime = item.ExamBeginTime.ToLocalTime().ToString(),
                    ExamEndTime   = item.ExamEndTime.ToLocalTime().ToString(),
                    item.TestTimes,
                    item.PassScore,
                    item.PercentFlag,
                    item.ExamPaperTotalScore,
                    danxuan =
                        item.QuesTypeCorrectRate[QuestionType.单选题.ToString()] == -1
                                ? "--"
                                : item.QuesTypeCorrectRate[QuestionType.单选题.ToString()].ToString() + "%",
                    duoxuan =
                        item.QuesTypeCorrectRate[QuestionType.多选题.ToString()] == -1
                                ? "--"
                                : item.QuesTypeCorrectRate[QuestionType.多选题.ToString()].ToString() + "%",
                    panduan =
                        item.QuesTypeCorrectRate[QuestionType.判断题.ToString()] == -1
                                ? "--"
                                : item.QuesTypeCorrectRate[QuestionType.判断题.ToString()].ToString() + "%",
                    qingjing =
                        item.QuesTypeCorrectRate[QuestionType.情景题.ToString()] == -1
                                ? "--"
                                : item.QuesTypeCorrectRate[QuestionType.情景题.ToString()].ToString() + "%",
                    tiankong =
                        item.QuesTypeCorrectRate[QuestionType.填空题.ToString()] == -1
                                ? "--"
                                : item.QuesTypeCorrectRate[QuestionType.填空题.ToString()].ToString() + "%",
                    wenda =
                        item.QuesTypeCorrectRate[QuestionType.问答题.ToString()] == -1
                                ? "--"
                                : item.QuesTypeCorrectRate[QuestionType.问答题.ToString()].ToString() + "%"
                };
                itemArray[n] = temp;
                n++;

                charArray.Add(new Series
                {
                    name = item.ExaminationTitle,
                    data = new List <double>
                    {
                        item.QuesTypeCorrectRate["单选题"] == -1 ? 0 : item.QuesTypeCorrectRate["单选题"],
                        item.QuesTypeCorrectRate["多选题"] == -1 ? 0 : item.QuesTypeCorrectRate["多选题"],
                        item.QuesTypeCorrectRate["判断题"] == -1 ? 0 : item.QuesTypeCorrectRate["判断题"],
                        item.QuesTypeCorrectRate["情景题"] == -1 ? 0 : item.QuesTypeCorrectRate["情景题"],
                        item.QuesTypeCorrectRate["填空题"] == -1 ? 0 : item.QuesTypeCorrectRate["填空题"],
                        item.QuesTypeCorrectRate["问答题"] == -1 ? 0 : item.QuesTypeCorrectRate["问答题"]
                    }
                });
            }

            var xAxis = new List <String>
            {
                "单选题",
                "多选题",
                "判断题",
                "情景题",
                "填空题",
                "问答题"
            };
            var res = new ChartModel
            {
                DivID     = "QuestionCorrectChart",
                xAxis     = xAxis,
                series    = charArray,
                charttype = Charttype.Line,
                yText     = "题型正确率(%)",
                title     = "题型正确率统计"
            };

            return(Json(new
            {
                result = 1,
                dataList = itemArray.ToList(),
                recordCount = totalCount,
                MaxRate,
                MinRate,
                MaxAve = ave.FirstOrDefault(),
                MinAve = ave.LastOrDefault(),
                res
            }, JsonRequestBehavior.AllowGet));
        }
コード例 #6
0
        public RExamination GetExaminationRecordsDistribution(int id, out List <string> distribution, int ScoreSize = 9,
                                                              int ScoreCount = 5)
        {
            AllQuestion        = _examReportDB.GetAllList <tbQuestion>(true);
            AllQuestionSort    = _examReportDB.GetAllList <tbQuestionSort>(true);
            AllExampaper       = _examReportDB.GetAllList <tbExampaper>(true);
            AllExamSendStudent = _examinationDB.GettbExamSendStudent();
            distribution       = new List <string>();

            tbExamination exam = _examinationDB.GetPublishExam().FirstOrDefault(p => p._id == id);

            if (exam == null)
            {
                return(null);
            }
            var tbExampaper = AllExampaper.FirstOrDefault(p => p._id == exam.PaperID);

            var result = new RExamination
            {
                _id                = exam._id,
                ApprovalUser       = exam.ApprovalUser,
                CreateTime         = exam.CreateTime,
                ExamBeginTime      = exam.ExamBeginTime,
                ExamEndTime        = exam.ExamEndTime,
                ExaminationTitle   = exam.ExaminationTitle,
                tbExamSendStudents = GetCommonRExamSendStudents(exam._id),
                ExamLength         = exam.ExamLength,
                ExamRules          = exam.ExamRules,
                LastUpdateTime     = exam.LastUpdateTime,
                PaperID            = exam.PaperID,
                UserID             = exam.UserID,
                PassScore          = exam.PassScore,
                PercentFlag        = exam.PercentFlag,
                PublishedFlag      = exam.PublishedFlag,
                RadomOrderFlag     = exam.RadomOrderFlag,
                SendMessageFlag    = exam.SendMessageFlag,
                ShowType           = exam.ShowType,
                Status             = exam.Status,
                TestTimes          = exam.TestTimes
            };

            if (tbExampaper.ExamType == 0)
            {
                result.ExamPaperTotalScore = tbExampaper.QuestionList.Sum(p => p.QScore);
            }
            if (tbExampaper.ExamType == 1)
            {
                result.ExamPaperTotalScore =
                    tbExampaper.QuestionRule.Sum(
                        p => p.QLevelStr.Split(';').Sum(q => int.Parse(q.Split(':')[1])) * p.QScore);
            }

            //得到分数梯度
            var Distribution = new List <List <int> >();
            int i            = 100;
            int n            = 0;

            while (i >= 0 && n < ScoreCount)
            {
                string a    = i + "-";
                var    temp = new List <int> {
                    i
                };
                i -= ScoreSize;
                if (n == 0)
                {
                    i--;
                }
                if (i >= 0 && n != ScoreCount - 1)
                {
                    temp.Add(i);
                    a += i;
                }
                else
                {
                    temp.Add(0);
                    a += 0;
                }

                Distribution.Add(temp);
                distribution.Add(a);
                n++;
                i--;
            }

            var RecordsDistribution = new Dictionary <string, int>();

            for (int m = 0; m < Distribution.Count; m++)
            {
                RecordsDistribution[Distribution[m].Max() + "-" + Distribution[m].Min()] =
                    result.tbExamSendStudents.Count(
                        p =>
                        100 * p.GetTotalScore / result.ExamPaperTotalScore <= Distribution[m].Max() &&
                        100 * p.GetTotalScore / result.ExamPaperTotalScore >= Distribution[m].Min());
            }

            result.RecordsDistribution = RecordsDistribution;
            return(result);
        }