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)); }
/// <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); }
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)); }
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)); }
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)); }
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); }