public JsonResult GetExaminationById(int Id) { ClassExamShow exammodel = new ClassExamShow(); tbExamination exam = _examinationBL.GetExamination(Id); if (exam != null) { exam.ExamBeginTime = exam.ExamBeginTime.ToLocalTime(); exam.ExamEndTime = exam.ExamEndTime.ToLocalTime(); exam.LastUpdateTime = exam.LastUpdateTime.ToLocalTime(); } string ApprovalUserIds = exam.ApprovalUser == null ? "" : exam.ApprovalUser.GetString(defaultValue: ""); tbExampaperRedundancy paper = _exampaperBL.GetExampaperRedundancy(exam.PaperID); exammodel.ExamID = exam != null ? exam._id : 0; exammodel.PaperID = paper != null ? paper.ExampaperId : 0; exammodel.PaperName = paper != null ? paper.ExampaperTitle : ""; exammodel.ExaminationTitle = exam.ExaminationTitle; exammodel.ExamBeginTime = exam.ExamBeginTime.ToString("yyyy-MM-dd"); exammodel.ExamEndTime = exam.ExamEndTime.ToString("yyyy-MM-dd"); exammodel.ExamLength = exam.ExamLength; exammodel.TestTimes = exam.TestTimes; exammodel.RadomOrderFlag = exam.RadomOrderFlag; exammodel.PassScore = exam.PassScore; exammodel.ApprovalUserIds = ApprovalUserIds; return(Json(new { result = exammodel }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 所有的考试 /// </summary> /// <param name="classId"></param> /// <returns></returns> public List <Tr_TrainClassToExam> GetClassExamShow(int classId) { var examList = _dataAccess.GetList <Tr_TrainClassToExam>(" Tr_TrainClassToExam.IsDelete=0 and ClassId=" + classId); if (examList.Any()) { var dbExamList = _examinationDb.GetAllExamination(examList.Select(p => p.ExamID)); var dbPaperList = _exampaperDb.GetExampaperRedundancyList(); foreach (var exam in examList) { if (exam.ExamID > 0) { tbExamination model = dbExamList.FirstOrDefault(p => p._id == exam.ExamID); tbExampaperRedundancy paper = dbPaperList.FirstOrDefault(p => p.ExampaperId == model.PaperID); exam.PaperID = paper != null ? paper._id : 0; exam.Papername = paper != null ? paper.ExampaperTitle : "--"; exam.TestTimes = model.TestTimes; exam.RadomOrderFlag = model.RadomOrderFlag; exam.PassScore = model.PassScore; } } } return(examList); }
/// <summary> /// 个人学习记录统计 - 详情 - 考试 /// </summary> /// <param name="userId"></param> /// <param name="starttime"></param> /// <param name="endtime"></param> /// <returns></returns> public List <Rpt_UserStatistics_Exam> GetUserStatisticsUserExamDetailByUser(int userId, DateTime?starttime, DateTime?endtime) { //获取我的考试信息 List <tbExamSendStudent> myTotalExamList = _examTestDB.GetMyExamList(userId); //相关的考试 List <tbExamination> examlist = _examinationDB.GetAllExamination(myTotalExamList.Select(p => p.RelationID)) .FindAll(p => (!starttime.HasValue || p.ExamBeginTime.ToLocalTime() >= starttime.Value) && (!endtime.HasValue || p.ExamEndTime.ToLocalTime() <= endtime.Value) && p.AlreadySendScore == 1 ); //相关的试卷 List <tbExampaperRedundancy> paperList = _exampaperDB.GetAllExampaperRedundancy(examlist.Select(p => p.PaperID)); //筛选后的我的考试 var list = new List <Rpt_UserStatistics_Exam>(); foreach (var item in myTotalExamList) { var exam = examlist.FirstOrDefault(pa => pa._id == item.RelationID); if (exam != null && exam.PublishResult == 1) { tbExampaperRedundancy paper = paperList.FirstOrDefault(pa => pa._id == exam.PaperID); if (paper != null && paper.ExampaperScore > 0) { list.Add(new Rpt_UserStatistics_Exam { ExamID = item.RelationID, ExamTitle = exam.ExaminationTitle, StartTime = exam.ExamBeginTime.ToLocalTime(), EndTime = exam.ExamEndTime.ToLocalTime(), UserTestTimes = item.TestTimes, ExamTestTimes = exam.TestTimes, GetScore = exam.AlreadySendScore == 1 ? item.Score + "" : "--", PassScore = (int)(paper.ExampaperScore * exam.PassScore / 100), ExamScore = paper.ExampaperScore, PassFlag = exam.AlreadySendScore == 1 ? (exam.PublishResult == 1 ? item.IsPass : 0) : -1, DoExamStatus = item.DoExamStatus }); } } } // list = list.OrderByDescending(p => p.ExamUserID).Skip((pageIndex - 1) * pageSize).Take(pageSize); return(list); }
public void SavePromotionWayPostList(out List <int> deleteIds, int promotionId, List <PromotionStage> list) { deleteIds = new List <int>(); var _exampaperDB = new RetechWing.BusinessCommon.Examination.ExaminationCommonMethod(); string where = string.Format(" Ab_PromotionStage.IsDelete = 0 and Ab_PromotionStage.PromotionId = {0} ", promotionId); var postList = _dataAccess.GetList <PromotionStage>(where); if (postList.Count > 0) { foreach (var item in postList) { var tmp = list.Find(p => p.PostId == item.PostId); if (tmp == null) { deleteIds.Add(item.StageId); UpdatePostPromotion(item.PostId, 0); } else { item.Description = tmp.Description; item.Period = tmp.Period; item.ObligatoryLessScore = tmp.ObligatoryLessScore; item.ElectiveLessScore = tmp.ElectiveLessScore; item.PassScore = tmp.PassScore; item.OrderNum = tmp.OrderNum; if (tmp.ExamId > 0) { tbExampaper exampaper = _exampaperDB.GetSingleById <tbExampaper>(tmp.ExamId); tbExampaperRedundancy model = new tbExampaperRedundancy { ExampaperId = exampaper._id, Description = exampaper.Description, Distribution = exampaper.Distribution, ExamSortID = exampaper.ExamSortID, TrainDetailId = exampaper.TrainDetailId, UserID = exampaper.UserID, CreateTime = exampaper.CreateTime, ExampaperAvailable = exampaper.ExampaperAvailable, ExampaperOpen = exampaper.ExampaperOpen, ExampaperScore = exampaper.ExampaperScore, ExampaperTitle = exampaper.ExampaperTitle, ExamType = exampaper.ExamType, LastUpdateTime = exampaper.LastUpdateTime, QuestionList = exampaper.QuestionList, QuestionRule = exampaper.QuestionRule, QuestionTypeOrder = exampaper.QuestionTypeOrder, Realname = exampaper.Realname, Status = exampaper.Status, TenantId = exampaper.TenantId }; item.ExamId = _exampaperDB.Insert <tbExampaperRedundancy>(model); } _dataAccess.UpdateEntity(item); list.Remove(tmp); } } } if (deleteIds.Count > 0) { _dataAccess.UpdateField("Ab_PromotionStage", "IsDelete", "1", "where StageId in (" + deleteIds.GetString() + ")"); } if (list.Count > 0) { foreach (var item in list) { if (item.ExamId > 0) { tbExampaper exampaper = _exampaperDB.GetSingleById <tbExampaper>(item.ExamId); tbExampaperRedundancy model = new tbExampaperRedundancy { ExampaperId = exampaper._id, Description = exampaper.Description, Distribution = exampaper.Distribution, ExamSortID = exampaper.ExamSortID, TrainDetailId = exampaper.TrainDetailId, UserID = exampaper.UserID, CreateTime = exampaper.CreateTime, ExampaperAvailable = exampaper.ExampaperAvailable, ExampaperOpen = exampaper.ExampaperOpen, ExampaperScore = exampaper.ExampaperScore, ExampaperTitle = exampaper.ExampaperTitle, ExamType = exampaper.ExamType, LastUpdateTime = exampaper.LastUpdateTime, QuestionList = exampaper.QuestionList, QuestionRule = exampaper.QuestionRule, QuestionTypeOrder = exampaper.QuestionTypeOrder, Realname = exampaper.Realname, Status = exampaper.Status, TenantId = exampaper.TenantId }; item.ExamId = _exampaperDB.Insert <tbExampaperRedundancy>(model); } } _dataAccess.AddEntities(list); } }
///// <summary> ///// 添加试卷冗余(通过试卷) ///// </summary> ///// <param name="exampaper">试卷</param> ///// <returns></returns> //public int InsertExampaperRedundancy(tbExampaper exampaper) //{ // tbExampaperRedundancy model = new tbExampaperRedundancy // { // ExampaperId = exampaper._id, // Description = exampaper.Description, // Distribution = exampaper.Distribution, // ExamSortID = exampaper.ExamSortID, // TrainDetailId = exampaper.TrainDetailId, // UserID = exampaper.UserID, // CreateTime = exampaper.CreateTime, // ExampaperAvailable = exampaper.ExampaperAvailable, // ExampaperOpen = exampaper.ExampaperOpen, // ExampaperScore = exampaper.ExampaperScore, // ExampaperTitle = exampaper.ExampaperTitle, // ExamType = exampaper.ExamType, // LastUpdateTime = exampaper.LastUpdateTime, // QuestionList = exampaper.QuestionList, // QuestionRule = exampaper.QuestionRule, // QuestionTypeOrder = exampaper.QuestionTypeOrder, // Realname = exampaper.Realname, // Status = exampaper.Status, // TenantId = exampaper.TenantId // }; // return EDB.Insert(model); //} ///// <summary> ///// 添加试卷冗余(通过试卷ID) ///// </summary> ///// <param name="exampaperId">试卷ID</param> ///// <returns></returns> //public int InsertExampaperRedundancy(int exampaperId) //{ // tbExampaper exampaper = EDB.GetSingleById<tbExampaper>(exampaperId); // tbExampaperRedundancy model = new tbExampaperRedundancy // { // ExampaperId = exampaper._id, // Description = exampaper.Description, // Distribution = exampaper.Distribution, // ExamSortID = exampaper.ExamSortID, // TrainDetailId = exampaper.TrainDetailId, // UserID = exampaper.UserID, // CreateTime = exampaper.CreateTime, // ExampaperAvailable = exampaper.ExampaperAvailable, // ExampaperOpen = exampaper.ExampaperOpen, // ExampaperScore = exampaper.ExampaperScore, // ExampaperTitle = exampaper.ExampaperTitle, // ExamType = exampaper.ExamType, // LastUpdateTime = exampaper.LastUpdateTime, // QuestionList = exampaper.QuestionList, // QuestionRule = exampaper.QuestionRule, // QuestionTypeOrder = exampaper.QuestionTypeOrder, // Realname = exampaper.Realname, // Status = exampaper.Status, // TenantId = exampaper.TenantId // }; // return EDB.Insert(model); //} /// <summary> /// 添加试卷冗余(通过试卷ID) /// </summary> /// <param name="exampaperId">试卷ID</param> /// <param name="oldExampaperRedundancyId">已冗余ID 【如果未冗余过,则传0】</param> /// <returns></returns> public int InsertExampaperRedundancy(int exampaperId, int oldExampaperRedundancyId) { if (oldExampaperRedundancyId > 0) { var old = EDB.GetSingleById <tbExampaperRedundancy>(oldExampaperRedundancyId); if (old.ExampaperId == exampaperId) { return(oldExampaperRedundancyId); } tbExampaper exampaper = EDB.GetSingleById <tbExampaper>(exampaperId); var coll = MongoPooledConnection.WriteDatabase.GetCollection("tbExampaperRedundancy"); coll.Remove(Query.And(new[] { Query.EQ("_id", oldExampaperRedundancyId) }), WriteConcern.Acknowledged); int seq = MongoBaseMethod.GetSeqence("SeqencetbExampaperRedundancy"); tbExampaperRedundancy model = new tbExampaperRedundancy { _id = seq, ExampaperId = exampaper._id, Description = exampaper.Description, Distribution = exampaper.Distribution, ExamSortID = exampaper.ExamSortID, TrainDetailId = exampaper.TrainDetailId, UserID = exampaper.UserID, CreateTime = exampaper.CreateTime, ExampaperAvailable = exampaper.ExampaperAvailable, ExampaperOpen = exampaper.ExampaperOpen, ExampaperScore = exampaper.ExampaperScore, ExampaperTitle = exampaper.ExampaperTitle, ExamType = exampaper.ExamType, LastUpdateTime = exampaper.LastUpdateTime, QuestionList = exampaper.QuestionList, QuestionRule = exampaper.QuestionRule, QuestionTypeOrder = exampaper.QuestionTypeOrder, Realname = exampaper.Realname, Status = exampaper.Status, TenantId = exampaper.TenantId }; coll.Insert(model, WriteConcern.Acknowledged); return(seq); } var exampap = EDB.GetSingleById <tbExampaper>(exampaperId); var tbExampaperR = new tbExampaperRedundancy { ExampaperId = exampap._id, Description = exampap.Description, Distribution = exampap.Distribution, ExamSortID = exampap.ExamSortID, TrainDetailId = exampap.TrainDetailId, UserID = exampap.UserID, CreateTime = exampap.CreateTime, ExampaperAvailable = exampap.ExampaperAvailable, ExampaperOpen = exampap.ExampaperOpen, ExampaperScore = exampap.ExampaperScore, ExampaperTitle = exampap.ExampaperTitle, ExamType = exampap.ExamType, LastUpdateTime = exampap.LastUpdateTime, QuestionList = exampap.QuestionList, QuestionRule = exampap.QuestionRule, QuestionTypeOrder = exampap.QuestionTypeOrder, Realname = exampap.Realname, Status = exampap.Status, TenantId = exampap.TenantId }; return(EDB.Insert(tbExampaperR)); }
/// <summary> /// 获取试卷的试题 /// </summary> /// <param name="exampaper">试卷信息</param> /// <param name="exam">试卷信息</param> /// <param name="examuser">学员答案</param> /// <param name="examination">考试信息</param> private void GetExampaper(ExampaperShow exampaper, tbExampaperRedundancy exam, tbExamSendStudent examuser, tbExamination examination) { var radomOrder = string.IsNullOrWhiteSpace(examination.RadomOrderFlag) ? new string[0] : examination.RadomOrderFlag.Split(','); //IMongoQuery query = Query.In("_id", new BsonArray(exam.QuestionList.Select(p => p.Qid))); IMongoQuery query = Query.In("_id", new BsonArray(examuser.StudentAnswerList.Select(p => p.Qid))); if (!examuser.StudentAnswerList.Any()) { //如果没有试题,则加入试题 if (exam.ExamType == 0) { exam.QuestionList.ForEach(p => { examuser.StudentAnswerList.Add(new ReStudentExamAnswer { Qid = p.Qid, Questionid = p.Questionid, Order = p.QOrder, QType = p.QType, Score = p.QScore, DoneFlag = 0, Answer = "", Evlution = "", GetScore = 0, WrongQuestionFlag = 0 }); }); } else { examuser = new RetechWing.BusinessCommon.Examination.GenerateExampaper().RandomGenerate(examuser, exam.QuestionRule); var questionIds = examuser.StudentAnswerList.Select(p => p.Questionid); var questions = Etdb.GetAllList <tbQuestion>(Query.In("_id", new BsonArray(questionIds))); int i = 1; foreach (var item in examuser.StudentAnswerList) { var tmp = questions.FirstOrDefault(p => p._id == item.Questionid); var questionRed = new tbQuestionRedundancy { QuestionId = tmp._id, QuestionSortID = tmp.QuestionSortID, QuestionOpen = tmp.QuestionOpen, UserID = tmp.UserID, CreateTime = tmp.CreateTime, FileUpload = tmp.FileUpload, LastUpdateTime = tmp.LastUpdateTime, QuestionAnalysis = tmp.QuestionAnalysis, QuestionAnswer = tmp.QuestionAnswer, QuestionAnswerKeys = tmp.QuestionAnswerKeys, QuestionAvailable = tmp.QuestionAvailable, QuestionContent = tmp.QuestionContent, QuestionKey = tmp.QuestionKey, QuestionLevel = tmp.QuestionLevel, QuestionType = tmp.QuestionType, Status = tmp.Status, TenantId = tmp.TenantId }; item.Qid = Etdb.Insert <tbQuestionRedundancy>(questionRed); item.Order = i; i++; } } Etdb.Modify <tbExamSendStudent>(examuser); query = Query.In("_id", new BsonArray(examuser.StudentAnswerList.Select(p => p.Qid))); } ////从缓存中读取所有问题 //List<tbQuestionRedundancy> quList; //获取试题 //var cachekey = "examquestions:tenant:" + exam.TenantId; //quList = _cacheService.Get<List<tbQuestionRedundancy>>(cachekey); //if (quList == null || quList.Count == 0) //{ // quList = Etdb.GetAllList<tbQuestionRedundancy>(query); // _cacheService.Set(cachekey, quList, CachingExpirationType.Stable); //} var quList = Etdb.GetAllList <tbQuestionRedundancy>(query); //题目随机 if (radomOrder.Contains("1")) { var radomList = new List <int>(); var next = 0; var length = examuser.StudentAnswerList.Count; for (int i = 0; i < length; i++) { do { next = new Random().Next(); if (!radomList.Contains(next)) { examuser.StudentAnswerList[i].Order = next; radomList.Add(next); break; } } while (true); } } var m = 0; examuser.StudentAnswerList.OrderBy(p => p.Order).ToList().ForEach(p => { p.Order = ++m; tbQuestionRedundancy qu = quList.FirstOrDefault(q => q._id == p.Qid); if (qu != null) { ReStudentExamAnswer an = examuser == null ? null : examuser.StudentAnswerList.FirstOrDefault( pa => pa.Qid == p.Qid); var newqu = new MQuestion { QAnswerType = qu.QuestionType == 6 ? qu.QuestionAnswer[0].AnswerType : 0, QType = qu.QuestionType, //QuestionContent = qu.QuestionContent, QuestionContent = qu.QuestionContent.NoHtml().HtmlDecode(), QuestionID = qu._id, QuestionLevel = EnumsLanguage.GetString(((QuestionLevel)qu.QuestionLevel).ToString()), QuestionOrder = p.Order, Score = p.Score, UserAnswer = an == null ? "" : (an.Answer), UserAnswerScore = an == null ? 0 : an.GetScore, FillBlankCount = qu.QuestionContent.Split(new[] { "()" }, StringSplitOptions.None).Length - 1, WrongQuestionFlag = an == null ? 0 : an.WrongQuestionFlag, QuestionAnalysis = qu.QuestionAnalysis }; //记录选项随机前的原有序号 var tmpquestionlist = new List <MQuestionAnswer>(); //选择随机 if (radomOrder.Contains("2")) { var radomList = new List <int>(); var next = 0; var length = qu.QuestionAnswer.Count; for (int i = 0; i < length; i++) { do { next = new Random().Next(); if (!radomList.Contains(next)) { tmpquestionlist.Add(new MQuestionAnswer { Order = next, oldOrder = qu.QuestionAnswer[i].Order }); qu.QuestionAnswer[i].Order = next; radomList.Add(next); break; } } while (true); } } var n = 0; qu.QuestionAnswer.OrderBy(o => o.Order).ToList().ForEach(pa => { var tmp = tmpquestionlist.FirstOrDefault(t => t.Order == pa.Order); pa.Order = ++n; newqu.QuestionAnswer.Add(new MQuestionAnswer { AnswerContent = pa.Answer, AnswerFlag = pa.AnswerFlag, AnswerType = pa.AnswerType, Order = pa.Order, QuID = newqu.QuestionID, QType = newqu.QType, oldOrder = tmp == null ? pa.Order : tmp.oldOrder }); }); qu.FileUpload.ForEach(pa => newqu.FileUpload.Add(new QuestionFile { _fileName = pa.FileName, _fileType = pa.FileType, _realName = pa.RealName })); exampaper.QuestionList.Add(newqu); } }); exampaper.QuestionList = exampaper.QuestionList.OrderBy(p => p.QuestionOrder).ToList(); }