/// <param name="相关ID">考试设置或试卷内容ID</param> /// <param name="类型">0练习,1考试</param> public static string 得到在线考试Json(Guid 相关ID,byte 类型, Guid 用户ID) { int TestDuration = 0; 试卷内容 content = new 试卷内容(); if (类型 == 0) { 练习设置 exerciseSet=练习设置.练习设置查询.Where(a => a.试卷内容ID == 相关ID).First(); if (!exerciseSet.考生ID集合.Contains(用户ID)) { throw new Exception("你不在该练习的考生范围内,无权参加练习!"); } TestDuration = exerciseSet.考试时长; content=exerciseSet.试卷内容; } else { 考试设置 examSet = 考试设置.考试设置查询.Where(a => a.ID == 相关ID).First(); //判断是否是在考试时间内,是才能进入考试 if (DateTime.Now < examSet.考试开始时间) { throw new Exception("考试时间未到,不能进入考试!"); } if (DateTime.Now > examSet.考试结束时间) { throw new Exception("考试时间已过,不能进入考试!"); } if (!examSet.考生ID集合.Contains(用户ID)) { throw new Exception("你不在该考试的考生范围内,无权参加考试!"); } if (考生做过的试卷.考生做过的试卷查询.Any(a => a.相关ID == 相关ID && a.类型 == 1 && a.考生ID == 用户ID && a.是否是已提交的试卷 == true) == true) { throw new Exception("你已参加过本场考试,不能再次考试!"); } TestDuration = examSet.考试时长; content=examSet.试卷内容; } 试卷外部信息 outside = content.试卷外部信息; if (outside.试卷状态Enum == 1 || outside.试卷状态Enum == 3) { throw new Exception("该试卷已被删除!"); } if (outside.试卷状态Enum == 4) { throw new Exception("该试卷是草稿试卷,您无法参加考试!"); } 考生做过的试卷 memberDoneTest = new 考生做过的试卷(); memberDoneTest.类型 = 类型; memberDoneTest.相关ID = 相关ID; if (类型 == 0) { memberDoneTest.练习设置 = new 练习设置(); memberDoneTest.练习设置.试卷内容 = content; memberDoneTest.练习设置.试卷内容ID = content.ID; } else { memberDoneTest.考试设置 = new 考试设置(); memberDoneTest.考试设置.试卷内容 = content; memberDoneTest.考试设置.试卷内容ID = content.ID; } content = 试卷内容.去掉试卷中的试题的答案(content); string json = memberDoneTest.转化成Json(); json = json.Replace("\"考生ID\": null", "\"公共信息\":{\"考生ID\": null"); if (类型 == 0) { json = json.Replace(",\r\n \"练习设置\"", "},\r\n \"练习设置\""); } else { json = json.Replace(",\r\n \"考试设置\"", "},\r\n \"考试设置\""); } //格式化Json JObject bo = JObject.Parse(json); json = json.Replace("试卷内容\": {", "试卷内容\": {\"考试时长\":" + TestDuration + ","); JObject bo1 = JObject.Parse(json); string newJson = "{\"公共信息\":"; string common = bo1["公共信息"].ToString(); newJson = newJson + common+",\"试卷内容\":"; string test = string.Empty; if (类型 == 0) { test = bo1["练习设置"]["试卷内容"].ToString(); } else { test = bo1["考试设置"]["试卷内容"].ToString(); } newJson = newJson + test+"}"; return newJson; }
public static void 提交保存试卷(考生做过的试卷 考生做过的试卷, List<考生考试回答> 考生考试回答集合, List<试卷大题中试题> 试卷大题中试题集合) { //using (TransactionScope scope = new TransactionScope()) //{ LoveKaoExamEntities db = new LoveKaoExamEntities(); 考生做过的试卷表 memberDoneTest = new 考生做过的试卷表(); 考生做过的试卷表 dbMemberDoneTest = db.考生做过的试卷表.Where(a => a.考生ID == 考生做过的试卷.考生ID && a.相关ID == 考生做过的试卷.相关ID && a.是否是已提交的试卷 == false).FirstOrDefault(); //先删除原来保存的,再加入新的保存 if (dbMemberDoneTest != null) { db.考生做过的试卷表.DeleteObject(dbMemberDoneTest); //db.SaveChanges(); } memberDoneTest.ID = 考生做过的试卷.ID; memberDoneTest.答题结束时间 = 考生做过的试卷.答题结束时间; memberDoneTest.答题开始时间 = 考生做过的试卷.答题开始时间; memberDoneTest.考生ID = 考生做过的试卷.考生ID; if (考生做过的试卷.是否是已提交的试卷 == true) { memberDoneTest.客观题得分 = 计算客观题总得分(考生考试回答集合, 试卷大题中试题集合, db); } memberDoneTest.相关ID = 考生做过的试卷.相关ID; memberDoneTest.类型 = 考生做过的试卷.类型; memberDoneTest.是否是已提交的试卷 = 考生做过的试卷.是否是已提交的试卷; memberDoneTest.批改状态 = 考生做过的试卷.批改状态类型; memberDoneTest.主观题得分 = 考生做过的试卷.主观题总得分; db.考生做过的试卷表.AddObject(memberDoneTest); foreach (var memberTestAnswer in 考生考试回答集合) { memberTestAnswer.考生做过的试卷ID = memberDoneTest.ID; memberTestAnswer.保存考生考试回答(db); } db.SaveChanges(); //scope.Complete(); //} }