示例#1
0
        public JsonResult SubmitPublishExam(int Id)
        {
            int           result  = 0;
            string        content = "";
            tbExamination exam    = _examinationBL.GetExamination(Id);

            if (exam != null)
            {
                int flag = JudgeCanPublishExam(Id, string.Join(",", exam.ApprovalUser));
                if (flag == 0)
                {
                    if (exam.ExamEndTime.ToLocalTime() > DateTime.Now)
                    {
                        exam.PublishedFlag = 1;
                        result             = _examinationBL.ModifyExamination(exam) ? 1 : 0;
                        content            = "发布成功!";
                    }
                    else
                    {
                        content = "对不起,该考试时间已经结束,不能发布!";
                    }
                }
                else
                {
                    result  = 3;
                    content = flag == 1 ? "发布失败!<br/> 原因:该考试的所授权的考生无效!" : "发布失败!<br/> 原因:该考试所添加的批阅人无效!";
                }
            }
            return(Json(new
            {
                result,
                content
            }, JsonRequestBehavior.DenyGet));
        }
示例#2
0
        /// <summary>
        /// 获取考试中试卷与学员答题情况的基本信息
        /// </summary>
        /// <param name="examUserID">考试关联学员ID</param>
        /// <returns></returns>
        public ExampaperShow GetExampaperBaseInforShow(int examUserID)
        {
            var exampaper   = new ExampaperShow();
            var examuser    = Etdb.GetSingleById <tbExamSendStudent>(examUserID);               //考生考试信息
            var exam        = Etdb.GetSingleById <tbExampaperRedundancy>(examuser.ExamPaperID); //试卷信息
            var examination = new tbExamination();

            if (examuser.SourceType == 0)
            {
                examination = Etdb.GetSingleById <tbExamination>(examuser.RelationID);
            }
            exampaper.TotalScore          = exam.ExampaperScore;
            exampaper.ExampaperType       = exam.ExamType;
            exampaper.QuestionTypeStrShow = exam.QuestionTypeOrder.GetQuestionTypeStr();
            //获取试题
            GetExampaper(exampaper, exam, examuser, examination);
            //初始化学员答案
            exampaper.QuestionList.ForEach(p => exampaper.StudentAnswer.Add(new StudentAnswer
            {
                Answer    = p.UserAnswer,
                Qid       = p.QuestionID,
                QType     = p.QType,
                UserScore = p.UserAnswerScore
            }));
            return(exampaper);
        }
示例#3
0
        /// <summary>
        ///     新增或修改考试
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public ActionResult EditExamination(int?Id)
        {
            var exam = new tbExamination();

            if (Id.HasValue)
            {
                exam = _examinationBL.GetExamination(Id.Value);
                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.Aggregate("", (current, id) => current + (id + ","));

            if (!string.IsNullOrEmpty(ApprovalUserIds))
            {
                ApprovalUserIds = ApprovalUserIds.Remove(ApprovalUserIds.Length - 1);
            }
            if (exam != null)
            {
                tbExampaper paper = _exampaperBL.GetExampaper(exam.PaperID);
                if (paper != null)
                {
                    ViewBag.PaperName = paper.ExampaperTitle;
                }
            }

            ViewBag.ApprovalUserIds = ApprovalUserIds;
            return(View(exam));
        }
示例#4
0
        /// <summary>
        ///     考试详细
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public ActionResult ExaminationDetail(int Id)
        {
            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.Aggregate("", (current, id) => current + (id + ","));
                if (!string.IsNullOrEmpty(ApprovalUserIds))
                {
                    ApprovalUserIds = ApprovalUserIds.Remove(ApprovalUserIds.Length - 1);
                }
                tbExampaper paper = _exampaperBL.GetExampaper(exam.PaperID);
                if (paper != null)
                {
                    ViewBag.PaperName = paper.ExampaperTitle;
                }
                ViewData["personids"] = string.Join(",",
                                                    _examinationBL.GettbExamSendAllStudent(Id)
                                                    .Select(p => p.UserID)
                                                    .Distinct());
                ViewBag.ApprovalUserIds = ApprovalUserIds;
            }
            else
            {
                exam        = new tbExamination();
                ViewBag.Msg = "对不起,该考试不存在或已被删除!";
            }
            return(View(exam));
        }
示例#5
0
        public JsonResult PublishExamResult(int Id)
        {
            int           result  = 0;
            string        content = "";
            tbExamination exam    = _examinationBL.GetExamination(Id);

            if (exam != null)
            {
                if (exam.PublishedFlag == 1)
                {
                    exam.PublishResult = 1;
                    result             = _examinationBL.ModifyExamination(exam) ? 1 : 0;
                    content            = "发布成绩成功!!";
                }
                else
                {
                    content = "对不起,该考试尚未对学员发布,不能发布成绩!";
                }
            }
            else
            {
                content = "该考试已在其他地方被删除!";
            }
            return(Json(new
            {
                result,
                content
            }, JsonRequestBehavior.DenyGet));
        }
示例#6
0
        /// <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);
        }
示例#7
0
        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));
        }
示例#8
0
        /// <summary>
        ///     获取考试的基本信息
        /// </summary>
        /// <param name="examUserID">考试人员ID</param>
        /// <param name="type">0:独立的考试</param>
        /// <returns></returns>
        public ExampaperShow GetExampaperBaseInforShow(int examUserID, int type = 0)
        {
            var exampaper = new ExampaperShow();                                //new 试卷对象
            var examuser  = Etdb.GetSingleByID <tbExamSendStudent>(examUserID); //单个考生考试信息
            //var exam = new tbExampaper();
            tbExampaper exam = null;
            //var examination = new tbExamination(); //考试分类对象
            tbExamination examination = null;

            exam = Etdb.GetSingleByID <tbExampaper>(examuser.ExamPaperID); //试卷对象
            if (type == 0)
            {
                examination = Etdb.GetSingleByID <tbExamination>(examuser.RelationID);
            }
            exampaper.ExampaperType       = exam.ExamType;
            exampaper.QuestionTypeStrShow = exam.QuestionTypeOrder.GetQuestionTypeStr();
            //获取试题
            if (examination != null)
            {
                GetExampaper(exampaper, exam, examuser, examination);
            }
            else
            {
                GetExampaper(exampaper, exam, examuser);
            }
            //初始化学员答案
            exampaper.QuestionList.ForEach(p => exampaper.StudentAnswer.Add(new StudentAnswer
            {
                Answer = p.UserAnswer,
                Qid    = p.QuestionID,
                QType  = p.QType
            }));
            return(exampaper);
        }
示例#9
0
        /// <summary>
        /// 添加培训班考试
        /// </summary>
        /// <returns></returns>
        public ActionResult AddClassExam(int classId)
        {
            var classmodel = _classManager.GetTrTrainClassById(classId);
            List <Tr_TrainClassToExam> examList = _classManager.GetTrainClassToExams(classId);

            if (!examList.Any())
            {
                examList = new List <Tr_TrainClassToExam>();
            }
            else
            {
                foreach (var exam in examList)
                {
                    if (exam.ExamID > 0)
                    {
                        tbExamination model = _examinationBL.GetExamination(exam.ExamID);
                        tbExampaper   paper = _exampaperBL.GetExampaper(model.PaperID);
                        exam.PaperID         = model.PaperID;
                        exam.Papername       = paper != null ? paper.ExampaperTitle : "";
                        exam.TestTimes       = model.TestTimes;
                        exam.RadomOrderFlag  = model.RadomOrderFlag;
                        exam.PassScore       = model.PassScore;
                        exam.ApprovalUserIds = model.ApprovalUser == null
                            ? ""
                            : model.ApprovalUser.GetString(defaultValue: "");
                    }
                }
            }
            ViewBag.classId    = classId;
            ViewBag.weightType = classmodel.WeightType;
            return(View(examList));
        }
示例#10
0
        public JsonResult DeleteExam(int Id)
        {
            int           result  = 0;
            string        content = "";
            tbExamination exam    = _examinationBL.GetExamination(Id);

            if (exam != null)
            {
                if (exam.PublishedFlag == 0)
                {
                    exam.Status = 1;
                    result      = _examinationBL.ModifyExamination(exam) ? 1 : 0;
                    content     = "删除成功!";
                }
                else
                {
                    content = "对不起,该考试已经发布,不能删除!";
                }
            }
            else
            {
                content = "该考试已在其他地方被删除!";
            }
            return(Json(new
            {
                result,
                content
            }, JsonRequestBehavior.DenyGet));
        }
示例#11
0
        /// <summary>
        /// 判断是否可以进入考试
        /// </summary>
        /// <param name="euID">考试人员ID</param>
        /// <param name="type">0:列表进入;1:真正进入</param>
        /// <returns>为0时,如果可以进入,则直接返回考试信息</returns>
        public JsonResult IsCanExamTest(int euId, int type = 0)
        {
            int leavePageTimes   = 0;
            tbExamSendStudent eu = _examTestManager.GetExamUser(euId);

            if (eu.RemainingTime == 0)
            {
                return(Json(new { result = 0, msg = "您的考试时间已用完,不可进入!" }, JsonRequestBehavior.AllowGet));
            }
            int examTestTimes = 0;

            //当SourceType不等于0的时候 表示是课程下的考试
            if (eu.SourceType == 0)
            {
                tbExamination exam = _examinationManager.GetExamination(eu.RelationID);
                examTestTimes = exam.TestTimes;
                if (exam.LeavePageTimes < eu.LeavePageTimes)
                {
                    return(Json(new { result = 0, msg = "您离开页面的总次数已用完,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
                if (eu.TestTimes >= exam.TestTimes)
                {
                    return(Json(new { result = 0, msg = "进入次数已达到上限,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
                if (exam.ExamEndTime.ToLocalTime() <= DateTime.Now)
                {
                    return(Json(new { result = 0, msg = "本场考试已经结束,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
            }
            else if (eu.SourceType == 1)
            {
            }
            //if (type == 1)
            //{
            eu.TestTimes += 1;
            _examTestManager.SaveExamUser(eu);
            return(Json(new { result = 1, msg = "开始考试!" }, JsonRequestBehavior.AllowGet));
            //}

            //var exambase = _examTestManager.GetExamBaseInforShow(euId, leavePageTimes);

            //return Json(new
            //{
            //    result = 1,
            //    msg = "参与考试!",
            //    data = new
            //    {
            //        exambase.ExamRuleList,
            //        exambase.ExamEndTime,
            //        exambase.ExamStartTime,
            //        exambase.ExamLength,
            //        exambase.ExamTitle,
            //        exambase.UserRemainingTime
            //    },
            //    testTimes = eu.TestTimes > 1000 ? 0 : examTestTimes - eu.TestTimes,
            //    examTestTimes = examTestTimes
            //}, JsonRequestBehavior.AllowGet);
        }
示例#12
0
        /// <summary>
        /// 获取考试中试卷与学员答题情况的基本信息
        /// </summary>
        /// <param name="examUserIDs">考试关联学员ID</param>
        /// <returns></returns>
        public List <ExampaperShow> GetExampaperBaseInforShow(IEnumerable <int> examUserIDs)
        {
            var list         = new List <ExampaperShow>();
            var examuserList = Etdb.GetAllList <tbExamSendStudent>(Query.And(new[]
            {
                Query.In("_id", new BsonArray(examUserIDs))
            }));
            var exampaperList = Etdb.GetAllList <tbExampaperRedundancy>(Query.And(new[]
            {
                Query.In("_id", new BsonArray(examuserList.Select(p => p.ExamPaperID)))
            }));
            var examList = Etdb.GetAllList <tbExamination>(Query.And(new[]
            {
                Query.In("_id", new BsonArray(examuserList.Where(p => p.SourceType == 0).Select(p => p.RelationID)))
            }));

            foreach (var examUserID in examUserIDs)
            {
                var exampaper   = new ExampaperShow();
                var examuser    = examuserList.Find(p => p._id == examUserID);
                var exam        = exampaperList.Find(p => p._id == examuser.ExamPaperID);
                var examination = new tbExamination();
                if (examuser.SourceType == 0)
                {
                    examination = examList.Find(p => p._id == examuser.RelationID);
                }
                exampaper.ExampaperType       = exam.ExamType;
                exampaper.ExampaperID         = exam._id;
                exampaper.QuestionTypeStrShow = exam.QuestionTypeOrder.GetQuestionTypeStr();
                //获取试题
                GetExampaper(exampaper, exam, examuser, examination);
                //初始化学员答案
                exampaper.QuestionList.ForEach(p => exampaper.StudentAnswer.Add(new StudentAnswer
                {
                    Answer    = p.UserAnswer,
                    Qid       = p.QuestionID,
                    QType     = p.QType,
                    UserScore = p.UserAnswerScore
                }));
                list.Add(exampaper);
            }
            return(list);
        }
示例#13
0
        /// <summary>
        ///     判断是否可以进入考试
        /// </summary>
        /// <param name="euID">考试人员ID</param>
        /// <param name="flag">0:列表进入;1:真正进入</param>
        /// <returns></returns>
        public JsonResult JudgeCanExamTest(int euID, int flag)
        {
            tbExamSendStudent eu = ExamTestBL.GetExamUser(euID);

            //当SourceType不等于0的时候 表示是课程下的考试
            //if (eu.SourceType == 0)
            //{
            if (eu.SourceType == 0)
            {
                tbExamination exam = ExaminationBL.GetExamination(eu.RelationID);
                if (eu.TestTimes >= exam.TestTimes)
                {
                    return(Json(new { result = 0, message = "进入次数已达到上限!" }, JsonRequestBehavior.AllowGet));
                }
                if (exam.ExamEndTime.ToLocalTime() <= DateTime.Now)
                {
                    return(Json(new { result = 0, message = "本场考试已经结束,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
                eu.TestTimes += 1;
                if (flag == 1)
                {
                    ExamTestBL.SaveExamUser(eu);
                }
            }
            //}
            else
            {
                var coursepaper = ICoCoursePaperBL.GetCo_CourseMainPaper(eu.RelationID);
                if (eu.TestTimes >= coursepaper.TestTimes)
                {
                    return(Json(new { result = 0, message = "进入次数已达到上限!" }, JsonRequestBehavior.AllowGet));
                }
                eu.TestTimes += 1;
                if (flag == 1)
                {
                    ExamTestBL.SaveExamUser(eu);
                }
                //ICoCoursePaperBL.UpdateTestTimes(eu.RelationID);
            }
            return(Json(new { result = 1 }, JsonRequestBehavior.AllowGet));
        }
示例#14
0
        /// <summary>
        /// 培训班课程
        /// </summary>
        /// <returns></returns>
        public ActionResult AddClassCourse(int classId)
        {
            var classmodel = _classManager.GetTrTrainClassById(classId);
            List <Tr_TrainClassToCourse> courseList = _classManager.GetTrainClassToCourses(classId);

            if (courseList.Count > 0)
            {
                foreach (var course in courseList)
                {
                    course.resourceLsit = _classManager.GetTrainClassToCourseResources(course.ID);
                    course.contentLsit  = _classManager.GetTrainClassToCourseContents(course.ID);
                    course.checkLsit    = _classManager.GetTrainClassToCourseChecks(course.ID);
                    if (!course.resourceLsit.Any())
                    {
                        course.resourceLsit = new List <Tr_TrainClassToCourseResource>();
                    }
                    if (!course.contentLsit.Any())
                    {
                        course.contentLsit = new List <Tr_TrainClassToCouseContent>();
                    }
                    if (!course.checkLsit.Any())
                    {
                        course.checkLsit = new List <Tr_TrainClassToCouseCheck>();
                    }
                }
            }
            else
            {
                courseList = new List <Tr_TrainClassToCourse>();
            }

            ViewBag.classId     = classId;
            ViewBag.weightType  = classmodel.WeightType;
            ViewBag.CourseModel = courseList;

            //return View(courseList);


            /*
             *
             * return View(examList);
             */

            List <Tr_TrainClassToExam> examList = _classManager.GetTrainClassToExams(classId);

            if (!examList.Any())
            {
                examList = new List <Tr_TrainClassToExam>();
            }
            else
            {
                foreach (var exam in examList)
                {
                    if (exam.ExamID > 0)
                    {
                        tbExamination model = _examinationBL.GetExamination(exam.ExamID);
                        tbExampaper   paper = _exampaperBL.GetExampaper(model.PaperID);
                        exam.PaperID         = model.PaperID;
                        exam.Papername       = paper != null ? paper.ExampaperTitle : "";
                        exam.TestTimes       = model.TestTimes;
                        exam.RadomOrderFlag  = model.RadomOrderFlag;
                        exam.PassScore       = model.PassScore;
                        exam.ApprovalUserIds = model.ApprovalUser == null
                            ? ""
                            : model.ApprovalUser.GetString(defaultValue: "");
                    }
                }
            }
            ViewBag.ExamModel = examList;


            List <Tr_TrainClassToPractical> practList = _classManager.GetTrainClassToPracticals(classId);

            if (!practList.Any())
            {
                practList = new List <Tr_TrainClassToPractical>();
            }
            //return View(practList);
            ViewBag.PractModel = practList;

            return(View());
        }
示例#15
0
        public JsonResult SaveClassExam(string data, int classId)
        {
            try
            {
                var dataList = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Tr_TrainClassToExam> >(data);
                if (dataList.Any())
                {
                    _classManager.BatchDeleteTrainClassToExam(classId);
                    foreach (var exam in dataList)
                    {
                        var timespan = (int)(exam.EndTime - exam.StartTime).TotalMinutes;
                        if (timespan < exam.ExamLength)
                        {
                            return(Json(new { result = 3, content = LanguageResources.Exam.Examination.String3 },
                                        JsonRequestBehavior.DenyGet));
                        }

                        if (exam.ExamType == 1)
                        {
                            exam.ExamID = 0;
                        }

                        if (exam.ExamType == 0)
                        {
                            tbExamination exammodel = new tbExamination();
                            exammodel.PaperID          = exam.PaperID;
                            exammodel.ScoreOpenFlag    = 0;
                            exammodel.ApprovalUser     = exam.ApprovalUser;
                            exammodel.ExamBeginTime    = exam.StartTime;
                            exammodel.ExamEndTime      = exam.EndTime;
                            exammodel.ExaminationTitle = exam.ExamTitle;
                            exammodel.ExamLength       = exam.ExamLength;
                            exammodel.PassScore        = exam.PassScore;
                            exammodel.PercentFlag      = 0;
                            exammodel.PublishedFlag    = 0;
                            exammodel.RadomOrderFlag   = exam.RadomOrderFlag;
                            exammodel.ShowType         = 0;
                            exammodel.TestTimes        = exam.TestTimes;
                            exammodel.ExamRules        = "";
                            exammodel.StartCheating    = 1;
                            exammodel.LeavePageTimes   = int.MaxValue;
                            exammodel.AutoMarking      = 1;
                            exammodel.LastUpdateTime   = DateTime.Now;
                            exammodel.CreateTime       = DateTime.Now;
                            exammodel.UserID           = CurrentUser.UserId;
                            exammodel.TenantId         = CurrentTenant.TenantId;
                            exammodel.UserCount        = 0;
                            if (string.IsNullOrEmpty(exam.ApprovalUserIds))
                            {
                                exammodel.ApprovalUser = new List <int>();
                            }
                            else
                            {
                                exammodel.ApprovalUser =
                                    exam.ApprovalUserIds.Split(',')
                                    .Distinct()
                                    .Where(p => !string.IsNullOrEmpty(p))
                                    .Select(int.Parse)
                                    .ToList();
                            }
                            if (exam.ExamID == 0)
                            {
                                _examinationBL.AddExamination(exammodel);
                            }
                            else
                            {
                                exammodel._id = exam.ExamID;
                                _examinationBL.ModifyExamination(exammodel);
                            }
                            exam.ExamID = exammodel._id;
                        }
                        _classManager.AddTrainClassToExam(exam);
                    }
                }
                return(Json(new { result = 1, content = "保存成功" }, JsonRequestBehavior.AllowGet));
            }
            catch
            {
                return(Json(new { result = 0, content = "保存失败" }, JsonRequestBehavior.AllowGet));
            }
        }
示例#16
0
        /// <summary>
        /// 课程、考试、实践考评一起保存
        /// </summary>
        /// <returns></returns>
        public JsonResult SaveCourseExamPract(int classId, string courseData, string examData, string practData)
        {
            try
            {
                using (TransactionScope tran = new TransactionScope())
                {
                    #region == 保存课程信息 ==
                    var dataList = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Tr_TrainClassToCourse> >(courseData);
                    var addList  = new List <int>();
                    if (dataList.Any())
                    {
                        _classManager.BatchDeleteCourse(classId);
                        foreach (var course in dataList)
                        {
                            course.Code = "wxdewco" + DateTime.Now.ToString("yyyyMMddHHmmss");
                            if (course.CourseType == 1)
                            {
                                course.CourseId = 0;
                                course.PlanType = 1;
                            }
                            course.CreateUserID = CurrentUser.UserId;
                            course.CreateTime   = DateTime.Now;
                            course.OrderTime    = DateTime.Now;
                            _classManager.AddTrainClassToCourse(course);
                            var contents = new List <Tr_TrainClassToCouseContent>();
                            var checks   = new List <Tr_TrainClassToCouseCheck>();
                            var resource = new List <Tr_TrainClassToCourseResource>();

                            if (course.IsSend == 1)
                            {
                                addList.Add(course.ID);
                            }

                            foreach (var content in course.contentLsit)
                            {
                                content.CourseId = course.ID;
                                contents.Add(content);
                            }
                            foreach (var check in course.checkLsit)
                            {
                                check.CourseId = course.ID;
                                checks.Add(check);
                            }
                            foreach (var res in course.resourceLsit)
                            {
                                res.ClassCourseId = course.ID;
                                resource.Add(res);
                            }
                            _classManager.BatchDeleteCourseResource(course.ID);
                            _classManager.AddTrainClassToCourseResourceS(resource);
                            _classManager.AddTrainClassToCourseContentS(contents);
                            _classManager.AddTrainClassToCourseCheckS(checks);
                        }
                    }
                    #endregion

                    #region == 保存考试信息 ==
                    var examDataList = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Tr_TrainClassToExam> >(examData);
                    if (examDataList.Any())
                    {
                        _classManager.BatchDeleteTrainClassToExam(classId);
                        foreach (var exam in examDataList)
                        {
                            var timespan = (int)(exam.EndTime - exam.StartTime).TotalMinutes;
                            if (timespan < exam.ExamLength)
                            {
                                return(Json(new { result = 3, content = LanguageResources.Exam.Examination.String3 },
                                            JsonRequestBehavior.DenyGet));
                            }

                            if (exam.ExamType == 1)
                            {
                                exam.ExamID = 0;
                            }

                            if (exam.ExamType == 0)
                            {
                                tbExamination exammodel = new tbExamination();
                                exammodel.PaperID          = exam.PaperID;
                                exammodel.ScoreOpenFlag    = 0;
                                exammodel.ApprovalUser     = exam.ApprovalUser;
                                exammodel.ExamBeginTime    = exam.StartTime;
                                exammodel.ExamEndTime      = exam.EndTime;
                                exammodel.ExaminationTitle = exam.ExamTitle;
                                exammodel.ExamLength       = exam.ExamLength;
                                exammodel.PassScore        = exam.PassScore;
                                exammodel.PercentFlag      = 0;
                                exammodel.PublishedFlag    = 0;
                                exammodel.RadomOrderFlag   = exam.RadomOrderFlag;
                                exammodel.ShowType         = 0;
                                exammodel.TestTimes        = exam.TestTimes;
                                exammodel.ExamRules        = "";
                                exammodel.StartCheating    = 1;
                                exammodel.LeavePageTimes   = int.MaxValue;
                                exammodel.AutoMarking      = 1;
                                exammodel.LastUpdateTime   = DateTime.Now;
                                exammodel.CreateTime       = DateTime.Now;
                                exammodel.UserID           = CurrentUser.UserId;
                                exammodel.TenantId         = CurrentTenant.TenantId;
                                exammodel.UserCount        = 0;
                                if (string.IsNullOrEmpty(exam.ApprovalUserIds))
                                {
                                    exammodel.ApprovalUser = new List <int>();
                                }
                                else
                                {
                                    exammodel.ApprovalUser =
                                        exam.ApprovalUserIds.Split(',')
                                        .Distinct()
                                        .Where(p => !string.IsNullOrEmpty(p))
                                        .Select(int.Parse)
                                        .ToList();
                                }
                                if (exam.ExamID == 0)
                                {
                                    _examinationBL.AddExamination(exammodel);
                                }
                                else
                                {
                                    exammodel._id = exam.ExamID;
                                    _examinationBL.ModifyExamination(exammodel);
                                }
                                exam.ExamID = exammodel._id;
                            }
                            _classManager.AddTrainClassToExam(exam);
                        }
                    }
                    #endregion

                    #region == 保存实践考评信息 ==
                    var practDataList = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Tr_TrainClassToPractical> >(practData);
                    if (practDataList.Any())
                    {
                        _classManager.BatchDeleteTrainClassToPractical(classId);
                        _classManager.AddTrainClassToPracticalS(practDataList);
                    }
                    #endregion

                    tran.Complete();
                }

                return(Json(new { result = 1, content = "保存成功" }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(new { result = 0, content = "保存失败," + ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
示例#17
0
        public ActionResult ClassView(int classId)
        {
            Tr_TrainClass model = _classManager.GetTrTrainClassById(classId);

            //课程
            List <Tr_TrainClassToCourse> courseList = _classManager.GetTrainClassToCourses(classId);

            if (courseList.Count > 0)
            {
                foreach (var course in courseList)
                {
                    course.resourceLsit = _classManager.GetTrainClassToCourseResources(course.ID);
                    course.contentLsit  = _classManager.GetTrainClassToCourseContents(course.ID);
                    course.checkLsit    = _classManager.GetTrainClassToCourseChecks(course.ID);
                    if (!course.resourceLsit.Any())
                    {
                        course.resourceLsit = new List <Tr_TrainClassToCourseResource>();
                    }
                    if (!course.contentLsit.Any())
                    {
                        course.contentLsit = new List <Tr_TrainClassToCouseContent>();
                    }
                    if (!course.checkLsit.Any())
                    {
                        course.checkLsit = new List <Tr_TrainClassToCouseCheck>();
                    }
                }
            }
            else
            {
                courseList = new List <Tr_TrainClassToCourse>();
            }
            //考试
            List <Tr_TrainClassToExam> examList = _classManager.GetTrainClassToExams(classId);

            if (!examList.Any())
            {
                examList = new List <Tr_TrainClassToExam>();
            }
            else
            {
                foreach (var exam in examList)
                {
                    if (exam.ExamID > 0)
                    {
                        tbExamination emodel = _examinationBL.GetExamination(exam.ExamID);
                        tbExampaper   paper  = _exampaperBL.GetExampaper(emodel.PaperID);
                        exam.PaperID         = emodel.PaperID;
                        exam.Papername       = paper != null ? paper.ExampaperTitle : "";
                        exam.TestTimes       = emodel.TestTimes;
                        exam.RadomOrderFlag  = emodel.RadomOrderFlag;
                        exam.PassScore       = emodel.PassScore;
                        exam.ApprovalUserIds = emodel.ApprovalUser == null
                            ? ""
                            : emodel.ApprovalUser.GetString(defaultValue: "");
                    }
                }
            }
            //考评
            List <Tr_TrainClassToPractical> practList = _classManager.GetTrainClassToPracticals(classId);

            if (!practList.Any())
            {
                practList = new List <Tr_TrainClassToPractical>();
            }
            var maxbatch       = _planManager.GetMaxBatch(classId, 1);
            var approvelist    = _planManager.GeTrPlanApproveList(classId, 1, maxbatch).OrderBy(p => p.Step);
            var newApprovelist = new List <Tr_PlanApproveList>();
            var flag           = false;

            foreach (var approve in approvelist)
            {
                if (!flag)
                {
                    if (approve.ApproveStatus == 0)
                    {
                        flag = true;
                        newApprovelist.Add(approve);
                    }
                    else
                    {
                        newApprovelist.Add(approve);
                    }
                }
            }
            ViewBag.approvelist = newApprovelist;

            List <Tr_TrainClassToUser> userlist = _classManager.GetClassToUsers(classId);

            ViewBag.UserIds = userlist.Select(p => p.UserId).GetString();

            ViewBag.Courses    = courseList;
            ViewBag.Exams      = examList;
            ViewBag.Practicals = practList;
            return(View(model));
        }
示例#18
0
        /// <summary>
        /// 获取一个考试的详情【考前须知、试卷信息】
        /// </summary>
        /// <param name="euId"></param>
        /// <returns></returns>
        public JsonResult GetExamDetailByEuId(int euId, int dw = 0)
        {
            try
            {
                int leavePageTimes   = 0;
                tbExamSendStudent eu = _examTestManager.GetExamUser(euId);
                if (eu.RemainingTime == 0 && dw == 0)
                {
                    return(Json(new { result = 0, msg = "您的考试时间已用完,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
                int           examTestTimes = 0;
                tbExamination exam          = _examinationManager.GetExamination(eu.RelationID);
                examTestTimes = exam.TestTimes;
                if (exam.LeavePageTimes < eu.LeavePageTimes && dw == 0)
                {
                    return(Json(new { result = 0, msg = "您离开页面的总次数已用完,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
                if (eu.TestTimes >= exam.TestTimes && dw == 0)
                {
                    return(Json(new { result = 0, msg = "进入次数已达到上限,不可进入!" }, JsonRequestBehavior.AllowGet));
                }
                if (exam.ExamEndTime.ToLocalTime() <= DateTime.Now && dw == 0)
                {
                    return(Json(new { result = 0, msg = "本场考试已经结束,不可进入!" }, JsonRequestBehavior.AllowGet));
                }

                var exambase = _examTestManager.GetExamBaseInforShow(euId, leavePageTimes);

                var exampaper = _examTestManager.GetExampaperBaseInforShow(euId);

                List <KeyValuePair <string, string> > filePath = new List <KeyValuePair <string, string> >();
                foreach (var item in exampaper.QuestionList)
                {
                    if (item.QType == 6)
                    {
                        foreach (var p in item.FileUpload)
                        {
                            p.fileName = "http://" + Request.Url.Authority + p._fileName;
                            filePath.Add(new KeyValuePair <string, string>(p._fileName, p._fileName));
                        }
                    }
                }

                string txtContent = Newtonsoft.Json.JsonConvert.SerializeObject(new
                {
                    exambase = new
                    {
                        exambase.ExamRuleList,
                        exambase.ExamEndTime,
                        exambase.ExamStartTime,
                        exambase.ExamLength,
                        exambase.ExamTitle,
                        exambase.UserRemainingTime
                    },
                    exampaper = new
                    {
                        QuestionList = exampaper.QuestionList.Select(p => new
                        {
                            FileUpload = p.FileUpload.Select(f => new
                            {
                                fileName = f._fileName,
                                fileType = f._fileType
                            }),
                            p.QAnswerType,
                            p.QType,
                            QuestionAnswer = p.QuestionAnswer.Select(q => new
                            {
                                q.AnswerContent,
                                q.AnswerType,
                                q.Order,
                                q.oldOrder
                            }),
                            p.QuestionContent,
                            p.QuestionID,
                            p.QuestionOrder,
                            p.FillBlankCount,
                            p.UserAnswer,
                            p.Score
                        })
                    },
                    testTimes = examTestTimes - eu.TestTimes
                });
                string jsonfilename = Guid.NewGuid().ToString();

                string jsonfilefilepath = Server.MapPath(Url.Addr("~/UploadFiles/ExamQuestionResource/") + jsonfilename + ".json");
                System.IO.File.WriteAllText(jsonfilefilepath, txtContent);
                filePath.Add(new KeyValuePair <string, string>(jsonfilefilepath, "data.json"));

                string zipFilePath = "";
                long   filesize    = 0;
                if (filePath.Count > 0)
                {
                    string filename = Guid.NewGuid().ToString();
                    if (!Directory.Exists(Server.MapPath("~/UploadFiles/tmp/")))
                    {
                        Directory.CreateDirectory(Server.MapPath("~/UploadFiles/tmp/"));
                    }
                    FileZipHelper.PackFiles(Server.MapPath("~/UploadFiles/tmp/" + filename + ".zip"), filePath);
                    zipFilePath = "http://" + Request.Url.Authority + Url.Addr("~/UploadFiles/tmp/") + filename + ".zip";
                    filesize    = new System.IO.FileInfo(Server.MapPath("~/UploadFiles/tmp/" + filename + ".zip")).Length;
                }

                return(Json(new
                {
                    result = 1,
                    msg = "获取成功!",
                    zipFilePath = zipFilePath,
                    FileSize = filesize
                }, JsonRequestBehavior.AllowGet));
            }
            catch
            {
                return(Json(new
                {
                    result = 0,
                    msg = "获取失败!"
                }, JsonRequestBehavior.AllowGet));
            }
        }
示例#19
0
        /// <summary>
        ///     获取试卷的试题
        /// </summary>
        /// <param name="exampaper">试卷信息</param>
        /// <param name="exam">试卷信息</param>
        /// <param name="examuser">学员答案</param>
        /// <param name="examination">考试信息</param>
        /// <returns></returns>
        public void GetExampaper(ExampaperShow exampaper, tbExampaper exam, tbExamSendStudent examuser,
                                 tbExamination examination)
        {
            if (exampaper.ExampaperType == 0)
            {
                #region 正常

                IMongoQuery       query  = Query.In("_id", new BsonArray(exam.QuestionList.Select(p => p.Qid)));
                List <tbQuestion> quList = Etdb.GetAllList <tbQuestion>(query); //获取试题
                exam.QuestionList.ForEach(p =>
                {
                    tbQuestion 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.QuestionAnswer[0].AnswerType,
                            QType           = qu.QuestionType,
                            QuestionContent = qu.QuestionContent,
                            QuestionID      = qu._id,
                            QuestionLevel   = ((QuestionLevel)qu.QuestionLevel).ToString(),
                            QuestionOrder   = p.QOrder,
                            Score           = p.QScore,
                            UserAnswer      = an == null ? "" : (an.Answer),
                            FillBlankCount  =
                                qu.QuestionContent.Split(new[] { "()" }, StringSplitOptions.None).Count() - 1
                        };
                        qu.QuestionAnswer.OrderBy(o => o.Order)
                        .ToList()
                        .ForEach(pa => newqu.QuestionAnswer.Add(new MQuestionAnswer
                        {
                            AnswerContent = pa.Answer,
                            AnswerFlag    = pa.AnswerFlag,
                            AnswerType    = pa.AnswerType,
                            Order         = pa.Order,
                            QuID          = newqu.QuestionID,
                            QType         = newqu.QType
                        }));
                        qu.FileUpload.ForEach(pa => newqu.FileUpload.Add(new QuestionFile
                        {
                            _fileName = pa.FileName,
                            _fileType = pa.FileType,
                            _realName = pa.RealName
                        }));
                        exampaper.QuestionList.Add(newqu);
                    }
                });

                #endregion
            }
            else
            {
                #region 随机

                List <tbQuestion> questionList = Etdb.GetAllList <tbQuestion>(Query.EQ("Status", 0));
                exam.QuestionRule.ForEach(p =>
                {
                    var newqulist = new List <tbQuestion>();
                    foreach (string s in p.QLevelStr.Split(';'))
                    {
                        newqulist.AddRange(
                            questionList.Where(
                                qu =>
                                p.QSort == qu.QuestionSortID && p.Qtype == qu.QuestionType &&
                                s.Split(':')[0].StringToInt32() == qu.QuestionLevel)
                            .ToList()
                            .RandomGetSome(s.Split(':')[1].StringToInt32()));
                    }
                    newqulist.ForEach(qu =>
                    {
                        var newqu = new MQuestion
                        {
                            QAnswerType     = qu.QuestionAnswer[0].AnswerType,
                            QType           = qu.QuestionType,
                            QuestionContent = qu.QuestionContent,
                            QuestionID      = qu._id,
                            QuestionLevel   = ((QuestionLevel)qu.QuestionLevel).ToString(),
                            QuestionOrder   = 0,
                            Score           = p.QScore,
                            UserAnswer      = "",
                            FillBlankCount  = qu.QuestionContent.Split(new[] { "()" }, StringSplitOptions.None).Count() - 1
                        };
                        qu.QuestionAnswer.OrderBy(o => o.Order)
                        .ToList()
                        .ForEach(pa => newqu.QuestionAnswer.Add(new MQuestionAnswer
                        {
                            AnswerContent = pa.Answer,
                            AnswerFlag    = pa.AnswerFlag,
                            AnswerType    = pa.AnswerType,
                            Order         = pa.Order,
                            QuID          = newqu.QuestionID,
                            QType         = newqu.QType
                        }));
                        qu.FileUpload.ForEach(pa => newqu.FileUpload.Add(new QuestionFile
                        {
                            _fileName = pa.FileName,
                            _fileType = pa.FileType,
                            _realName = pa.RealName
                        }));
                        exampaper.QuestionList.Add(newqu);
                    });
                });

                #endregion
            }
            if (exampaper.ExampaperType == 1 || (examination._id > 0 && examination.RadomOrderFlag == 1))
            //if (exampaper.ExampaperType == 1 )
            {
                //排序
                int order = 1;
                foreach (string s in exam.QuestionTypeOrder.Split(','))
                {
                    exampaper.QuestionList.Where(p => p.QType == s.StringToInt32())
                    .ToList()
                    .RandomListOrder()
                    .ForEach(p =>
                    {
                        p.QuestionOrder = order;
                        order++;
                    });
                }
            }
            exampaper.QuestionList = exampaper.QuestionList.OrderBy(p => p.QuestionOrder).ToList();
        }
示例#20
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);
        }
示例#21
0
        public JsonResult SubmitEditExamination(tbExamination exam, string personIds, string ApprovalUser)
        {
            string content = "";
            int    result  = 0;
            int    examId  = exam._id > 0 ? exam._id : 0;

            if (exam.ExamBeginTime > DateTime.Now)
            {
                int flag = JudgeCanPublishExam(examId, ApprovalUser, personIds);
                if (flag == 0)
                {
                    if (string.IsNullOrEmpty(ApprovalUser))
                    {
                        exam.ApprovalUser = new List <int>();
                    }
                    else
                    {
                        exam.ApprovalUser =
                            ApprovalUser.Split(',')
                            .Distinct()
                            .Where(p => !string.IsNullOrEmpty(p))
                            .Select(int.Parse)
                            .ToList();
                    }
                    if (exam._id > 0)
                    {
                        tbExamination tempExam = _examinationBL.GetExamination(exam._id);
                        examId = exam._id;
                        if (tempExam != null)
                        {
                            tempExam.ApprovalUser     = exam.ApprovalUser;
                            tempExam.ExamBeginTime    = exam.ExamBeginTime;
                            tempExam.ExamEndTime      = exam.ExamEndTime;
                            tempExam.ExaminationTitle = exam.ExaminationTitle;
                            tempExam.ExamLength       = exam.ExamLength;
                            tempExam.PaperID          = exam.PaperID;
                            tempExam.PassScore        = exam.PassScore;
                            tempExam.PercentFlag      = exam.PercentFlag;
                            tempExam.PublishedFlag    = exam.PublishedFlag;
                            tempExam.RadomOrderFlag   = exam.RadomOrderFlag;
                            tempExam.ShowType         = exam.ShowType;
                            tempExam.TestTimes        = exam.TestTimes;
                            // tempExam.UserID = exam.UserID;不更新创建人
                            result  = _examinationBL.ModifyExamination(tempExam) ? 1 : 0;
                            content = "修改成功!";
                        }
                    }
                    else
                    {
                        exam.CreateTime = DateTime.Now;
                        exam.UserID     = Session["userID"].StringToInt32();
                        result          = _examinationBL.AddExamination(exam) > 0 ? 1 : 0;
                        content         = "新增成功!";
                        examId          = exam._id;
                    }
                    if (exam.PublishedFlag == 1)
                    {
                        content = "发布成功!";
                    }
                    ChangtbExamSendStudent(personIds, exam._id); //授权参与考试的人员
                }
                else
                {
                    result  = 3;
                    content = flag == 1 ? "该考试的所授权的考生无效!" : "该考试所添加的批阅人无效!";
                }
            }
            else
            {
                result  = 3;
                content = "考试开始时间不能小于服务器系统时间!";
            }
            return(Json(new
            {
                result,
                content,
                examId
            }, JsonRequestBehavior.DenyGet));
        }
示例#22
0
 /// <summary>
 ///     新增考试
 /// </summary>
 /// <param name="exam"></param>
 /// <returns></returns>
 public int AddExamination(tbExamination exam)
 {
     return(_examinationDb.Insert(exam));
 }
示例#23
0
 /// <summary>
 ///     修改考试
 /// </summary>
 /// <param name="exam"></param>
 /// <returns></returns>
 public bool ModifyExamination(tbExamination exam)
 {
     return(_examinationDb.Modify(exam));
 }
示例#24
0
        /// <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();
        }