using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using VM; namespace Web.BLL { /// /// 考试Cache扩展帮助类 /// public class ExamCacheHelper { /// /// 公共试卷缓存 /// private PaperVM cache = null; /// /// 个人使用试卷缓存 /// private PaperVM cache2 = null; public ExamCacheHelper(PaperVM cache, PaperVM cache2) { this.cache = cache; this.cache2 = cache2; } /// /// 获取第一个问题类型问题ID /// /// public KeyValue GetFirstQuestionType() { KeyValue model = new KeyValue(); List list = cache.Details.ToList(); list.ForEach(x => { if (ExamCaches.QuestionCache.ContainsKey(x.QuesionId)) { x.StructType = ExamCaches.QuestionCache[x.QuesionId].StructType; x.StructTypeId = ExamCaches.QuestionCache[x.QuesionId].CharpterID; } }); var scorlist = GetTheoryQuestionType(); List list2 = new List(); string[] strAn = scorlist[0].strIdList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int an = 0; an < strAn.Length; an++) { list2.AddRange(list.Where(a => a.StructTypeId == Convert.ToInt32(strAn[an])).OrderBy(x => x.QuesionId).ToList()); } list2 = list2.OrderBy(x => x.QuesionId).ToList(); int StructType = 0; int questionId = 0; if (list2.Count > 0) { StructType = list2[0].StructType; questionId = list2[0].QuesionId; } model.Key = StructType; model.Value = questionId; return model; } /// /// 获取当前问题在试卷中排第几个 /// /// 问题类型 /// 问题ID /// public int GetCurrentIndex(int questionType, int questionId) { int index = 0; var model = ExamCaches.QuestionCache.Values.Where(x => x.Id == questionId).FirstOrDefault(); //获取本题在list中的位置 index = cache.Details.Where(x => x.QuesionId == questionId).Select(x => x.QuesionId).ToList().IndexOf(questionId); return index; } /// /// 返回排序后的题型最小值(及就是排在第一个单选题) /// /// 问题类型 /// 问题ID /// public KeyValue GetCharpterIdIndex() { var paix = GetTheoryQuestionType(); KeyValue model = new KeyValue(); model.Key = paix[0].Id; model.Value = paix[0].strIdList; return model; } /// /// 获取题型列表 /// /// 问题类型 /// 问题ID /// public List GetTheoryQuestionType() { //准备存放容器 List TheoryQuestionType = new List(); var scorlist = cache.ScoreInfo.ToList(); for (int f = 0; f < scorlist.Count; f++) { List QuestionType = scorlist[f].CharpterID.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList().ConvertAll(x => Convert.ToInt32(x)).ToList(); string key = scorlist[f].CharpterID; int value = QuestionType.Min(); TheoryQuestionTypeVM type = new TheoryQuestionTypeVM(); type.Id = value; type.strIdList = key; if (TrainingCaches.TheoryQuestionTypeCache.ContainsKey(value)) { type.TypeName = TrainingCaches.TheoryQuestionTypeCache[value].TypeName; } //题型Id int ty = 0; for (int a = 0; a x.CharpterID == QuestionType[a]).Select(x => x.StructType).FirstOrDefault(); if(ty!=0){ break; } } if (ty != 5) { type.Sort = ty; } else { if (type.TypeName == "简答题") { type.Sort = 6; } else if (type.TypeName == "论述题") { type.Sort = 7; } else { type.Sort = 8; } } TheoryQuestionType.Add(type); } //TheoryQuestionType = TheoryQuestionType.OrderBy(x => x.Id).ToList(); TheoryQuestionType = TheoryQuestionType.OrderBy(x => x.Sort).ToList(); return TheoryQuestionType; } /// /// 获取题型列表下所有题目 /// /// 问题类型 /// 问题ID /// public List GetPaperDetail() { //准备存放容器 List list = cache.Details.ToList(); list.ForEach(x => { x.StructTypeId = ExamCaches.QuestionCache.Where(a => a.Value.Id == x.QuesionId).Select(a => a.Value.CharpterID).FirstOrDefault(); }); List list2 = new List(); var questionType = GetTheoryQuestionType(); foreach (var item in questionType) { string[] strAn = item.strIdList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); List l = new List(); for (int an = 0; an < strAn.Length; an++) { l.AddRange(list.Where(a => a.StructTypeId == Convert.ToInt32(strAn[an])).OrderBy(x => x.QuesionId).ToList()); } l = l.OrderBy(x => x.QuesionId).ToList(); list2.AddRange(l); } return list2; } /// /// 根据当前问题位置,获取问题(问题类型,问题ID) /// /// 位置 /// 问题(问题类型,问题ID) public KeyValue GetKeyValueByIndex(int index, int PaperId, int? type, int LibraryId) { KeyValue model = new KeyValue(); // var papercont = ExamCaches.PaperCache.Where(x => x.Value.Id == PaperId ).FirstOrDefault(); PaperVM papercont = null; if (LibraryId == 23) { //认证考试 papercont = MvcHelper.User.ExamInfo.Where(x => x.Value.Id == PaperId).Select(x => x.Value).FirstOrDefault(); } else { //理论考试 papercont = ExamCaches.PaperCache.Where(x => x.Value.Id == PaperId).Select(x => x.Value).FirstOrDefault(); } //准备数据 List list = papercont.Details.ToList(); list.ForEach(x => { if (ExamCaches.QuestionCache.ContainsKey(x.QuesionId)) { x.StructType = ExamCaches.QuestionCache[x.QuesionId].StructType; x.StructTypeId = ExamCaches.QuestionCache[x.QuesionId].CharpterID; } }); List list2 = new List(); var charpter2 = GetTheoryQuestionType(); string strcharpter2 = null; for (int a = 0; a < charpter2.Count; a++) { string[] An = charpter2[a].strIdList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int b = 0; b < An.Length; b++) { if (An[b] == type.ToString()) { strcharpter2 = charpter2[a].strIdList; break; } } } string[] strAn = strcharpter2.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int an = 0; an < strAn.Length; an++) { list2.AddRange(list.Where(a => a.StructTypeId == Convert.ToInt32(strAn[an])).OrderBy(x => x.QuesionId).ToList()); } list2 = list2.OrderBy(x => x.QuesionId).ToList(); model.Key = list2[index].StructType; model.Value = list2[index].QuesionId; return model; } /// /// 获取用户填写的答案 /// /// 问题类型 /// 问题ID /// 答案 public List GetUserAnswers(int questionType, int questionId) { int userId = MvcHelper.User.Id; List answer = null; if (cache2.UserAnswer != null && cache2.UserAnswer.Count > 0) { if (questionType == (int)StructType.SelectRadio || questionType == (int)StructType.SelectCheckBox || questionType == (int)StructType.Determine) { var myAnswers = cache2.UserAnswer.Where(x => x.QuesionId == questionId && x.UserId == userId).Select(x => x.Answer1).ToList(); if (myAnswers != null && myAnswers.Count > 0) { answer = new List(); foreach (var item in myAnswers) { if (item.HasValue) { answer.Add(item.Value); } } } } } return answer; } /// /// 获取用户填写的答案 /// /// 问题类型 /// 问题ID /// 答案 public List GetUserAnswers2(int questionType, int questionId) { int userId = MvcHelper.User.Id; List answer = null; if (cache2.UserAnswer != null && cache2.UserAnswer.Count > 0) { answer = cache2.UserAnswer.Where(x => x.QuesionId == questionId && x.UserId == userId).Select(x => x.Answer2).ToList(); } return answer; } /// /// 获取用户填写的答案 /// /// 问题类型 /// 问题ID /// 答案 public List GetUserAnswers3(int questionType, int questionId) { int userId = MvcHelper.User.Id; List answer = null; if (cache2.UserAnswer != null && cache2.UserAnswer.Count > 0) { answer = cache2.UserAnswer.Where(x => x.QuesionId == questionId && x.UserId == userId).Select(x => x.Answer3).ToList(); } return answer; } /// /// 获取问题标记 /// /// 问题类型 /// 问题ID /// 是否被标记 public bool GetIsMark(int questionType, int questionId) { var bo = false; if (cache2.UserAnswerResult != null && cache2.UserAnswerResult.Count > 0) { var model = cache2.UserAnswerResult.Where(x => x.QuesionId == questionId && x.UserId == MvcHelper.User.Id).FirstOrDefault(); if (model != null) { bo = model.IsMark; } } return bo; } /// /// 获取展示信息 /// /// 问题类型 /// 问题ID /// 展示信息 public string GetInfoShow(int questionType, int questionId, int PaperId) { StringBuilder sb = new StringBuilder(); //准备存放容器 List list = cache.Details.ToList(); list.ForEach(x => { if (ExamCaches.QuestionCache.ContainsKey(x.QuesionId)) { x.StructTypeId = ExamCaches.QuestionCache[x.QuesionId].CharpterID; } }); List list2 = new List(); var qType = GetTheoryQuestionType(); string[] qTypes = null; for (int ag = 0; ag < qType.Count; ag++) { string[] strAn2 = qType[ag].strIdList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int g = 0; g < strAn2.Length; g++) { if (strAn2[g] == questionType.ToString()) { qTypes = qType[ag].strIdList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } } } foreach (var item in qTypes) { string[] strAn = item.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); List l = new List(); for (int an = 0; an < strAn.Length; an++) { l.AddRange(list.Where(a => a.StructTypeId == Convert.ToInt32(strAn[an])).OrderBy(x => x.QuesionId).ToList()); } list2.AddRange(l); } list2 = list2.OrderBy(x => x.QuesionId).ToList(); var qId = cache.Details.First(x => x.QuesionId == questionId); var typeName = TrainingCaches.TheoryQuestionTypeCache.Where(x => x.Value.Id == questionType).Select(x => x.Value.TypeName).FirstOrDefault(); var Score = cache.ScoreInfo.Where(x => x.CharpterID.Contains(questionType.ToString())).FirstOrDefault(); decimal RadioScore = Score.Score; sb.Append(typeName); sb.Append("(共").Append(list2.Count).Append("题,"); sb.Append("每题").Append(RadioScore.ToString("0.0")).Append("分,"); sb.Append("共").Append((list2.Count * RadioScore).ToString("0.0")).Append("分)"); sb.Append(", 当前为第").Append(list2.IndexOf(qId) + 1).Append("题"); return sb.ToString(); } /// /// 获取主题干 /// /// 问题类型 /// 问题ID /// 主题干 public string GetTopic(int questionType, int questionId, int PaperId) { //准备数据 List list = cache.Details.Where(x => x.ExamPaperId == PaperId).Distinct().ToList(); list.ForEach(x => { if (ExamCaches.QuestionCache.ContainsKey(x.QuesionId)) { x.StructTypeId = ExamCaches.QuestionCache[x.QuesionId].CharpterID; } }); StringBuilder sb = new StringBuilder(); var charpter = GetTheoryQuestionType(); List strcharpter = null; for (int a = 0; a < charpter.Count; a++) { string[] An = charpter[a].strIdList.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); for (int b = 0; b < An.Length; b++) { if (An[b] == questionType.ToString()) { strcharpter = charpter[a].strIdList.Split(',').ToList().ConvertAll(y => int.Parse(y)); } } } //准备数据 list = list.Where(a => strcharpter.Contains(a.StructTypeId)).ToList(); var qId = cache.Details.First(x => x.QuesionId == questionId); var mo1 = ExamCaches.QuestionCache.Where(x => x.Value.Id == questionId).FirstOrDefault(); var typeName = TrainingCaches.TheoryQuestionTypeCache.Where(x => x.Value.Id == questionType).Select(x => x.Value.TypeName).FirstOrDefault(); //拼接 sb.Append(" " + typeName + " " + (list.IndexOf(qId) + 1) + " : " + mo1.Value.Context + " "); return sb.ToString(); } /// /// 获取选项 /// /// /// public List OptionList(int questionId) { List option = new List(); var detail = ExamCaches.QuestionCache.Where(x => x.Value.Id == questionId).FirstOrDefault(); option = detail.Value.OptionList; return option; } /// /// 获取附件 /// /// /// public List Attachments(int questionId) { List option = new List(); var detail = ExamCaches.QuestionCache.Where(x => x.Value.Id == questionId).FirstOrDefault(); if (detail.Value.AttachmentList != null) { option = detail.Value.AttachmentList; } return option; } } }