using Server.Factory; using System; using System.Collections.Generic; using System.Linq; using System.Web; using VM; using Utils; namespace Web { public class ExamBLL { /// <summary> /// 理论考核自动组卷 /// </summary> /// <param name="paper"></param> public void TheoAutoFormPaper(PaperVM paper) { paper.Details = new List<PaperDetailVM>(); var scoreInfo = paper.ScoreInfo; foreach (var item in scoreInfo) { var charpterList = item.CharpterID.Split(',').Select(l => int.Parse(l)).ToList(); var questions = (from x in ExamCaches.QuestionCache where charpterList.Contains(x.Value.CharpterID) && (x.Value.Status != (int)QuestionStauts.Delete && x.Value.Status != (int)QuestionStauts.Close) && (x.Value.UserId == paper.UserId || x.Value.UserId == 0) && !(ExamCaches.QuestionHiddenCache.Values.Where(y => y.UserId == paper.UserId).Select(y => y.QuestionId).ToList()).Contains(x.Value.Id) // &&x.Value.UserId==paper.UserId orderby Guid.NewGuid() select x.Key).Take(item.Count).ToList(); paper.Details.AddRange(questions.Select(l => new PaperDetailVM { QuesionId = l })); } } /// <summary> /// 认证考试自动组卷 /// </summary> /// <param name="paper"></param> /// <param name="errCode"></param> /// <returns></returns> public bool CertAutoFromPaper(PaperVM paper, out string errCode) { //获取班级Id int classId = MvcHelper.User.UserClassInfo[0].ClassId; //根据班级Id获取教师Id int teacherId = StructureCaches.ClassCache[classId].TeacherId; errCode = string.Empty; paper.Details = new List<PaperDetailVM>(); var scoreInfo = paper.ScoreInfo; foreach (var item in scoreInfo) { var charpterList = item.CharpterID.Split(',').Select(l => int.Parse(l)).ToList(); var questions = (from x in ExamCaches.QuestionCache where charpterList.Contains(x.Value.CharpterID) && (x.Value.Status != (int)QuestionStauts.Delete && x.Value.Status != (int)QuestionStauts.Close) && (x.Value.UserId == teacherId || x.Value.UserId == 0) && !(ExamCaches.QuestionHiddenCache.Values.Where(y => y.UserId == teacherId).Select(y=>y.QuestionId).ToList()).Contains(x.Value.Id) orderby Guid.NewGuid() select x.Key).Take(item.Count).ToList(); if (questions.Count < item.Count) { errCode = TrainingCaches.TheoryChapterCache[paper.CharpterList[0].CharpterID].ChapterName + "题量不足!"; return false; } paper.Details.AddRange(questions.Select(l => new PaperDetailVM { QuesionId = l })); } return true; } /// <summary> /// 分页获取用户总结信息 /// </summary> /// <param name="paperId"></param> /// <param name="classID"></param> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="total"></param> /// <returns></returns> public List<PaperUserSummaryVM> PageGetUserSummary(int paperId, int? classID, bool sortWay, int pageIndex, int pageSize, out int total) { total = 0; List<PaperUserSummaryVM> source = null; if (!ExamCaches.UserSummaryCache.ContainsKey(paperId)) { source = SvrFactory.Instance.ExamSvr.GetAllUserSummaryByPaperId(paperId); if (source != null && source.Count > 0) { ExamCaches.UserSummaryCache.SyncCache(paperId, source, false); } } else { source = ExamCaches.UserSummaryCache[paperId]; } var res = (classID.HasValue ? source.Where(l => l.ClassId == classID.Value): source ); if (sortWay) return res.OrderBy(x=>x.Score).Page(pageIndex, pageSize, out total); else return res.OrderByDescending(x => x.Score).Page(pageIndex, pageSize, out total); } } }