/// <summary> /// 生成统计信息 /// </summary> /// <param name="answer"></param> public static void GenerateAnalyze(T_Answer answer) { Task.Run(() => { dto_User u = null; if (answer.StudentId == 0) { u = new dto_User() { SchoolId = 0, GradeId = 0, ClassId = 0, TrueName = "试用用户" }; } else { u = B_UserRedis.GetUser(answer.StudentId); } IncreaseClassSubmitCount(answer.ZyId, u); var ansl = JsonConvert.DeserializeObject <List <dto_UserAnswer> >(answer.AnswerJson); InsertStudentPoint(answer.ZyId, answer.StudentId, answer.CreateDate, ansl, u); IncreaseQuesCorrectCount(answer.ZyId, ansl, u); IncreaseOptionSelectCount(answer.ZyId, ansl, u); }); }
public ActionResult GetQuestionAndAnswers(int courseId, long zyId, int studentId) { int id = IdNamingHelper.Decrypt(IdNamingHelper.IdTypeEnum.Zy, zyId); dto_Zy zy = B_ZyRedis.GetZy(id); T_Answer answer = null; if (zy.UserId == 0) { return(PartialView()); } else { answer = B_Answer.GetAnswer(id, (studentId == 0 ? UserId : studentId)); } List <dto_UserAnswer> ansl = null; if (answer != null) { ViewBag.PicPrefix = Util.GetAppSetting("UploadUrlPrefix") + "/"; ViewBag.AnswerImg = answer.AnswerImg; ansl = JsonConvert.DeserializeObject <List <dto_UserAnswer> >(answer.AnswerJson); } List <dto_Question> ql = B_ZyRedis.GetQdbZyQuestions(courseId, id); if (ql != null) { foreach (dto_Question q in ql) { if (!q.haschildren && Const.OBJECTIVE_QUES_TYPES.Contains(q.ptypeid)) { q.SAnswer = ansl == null ? "" : ansl.Find(b => b.QId == q.id).Answer; } //隐藏真实Id q.NewId = IdNamingHelper.Encrypt(IdNamingHelper.IdTypeEnum.Ques, q.id); q.id = 0; if (q.Children != null && q.Children.Count > 0) { q.Children.ForEach(a => { if (Const.OBJECTIVE_QUES_TYPES.Contains(a.ptypeid)) { a.SAnswer = ansl == null ? "" : ansl.Find(b => b.QId == a.id).Answer; } a.NewId = IdNamingHelper.Encrypt(IdNamingHelper.IdTypeEnum.Ques, a.id); a.id = 0; }); } } } ViewBag.QuesList = ql; return(PartialView()); }
/// <summary> /// 获取答案 /// </summary> /// <param name="zyId"></param> /// <param name="userId"></param> /// <returns></returns> public static T_Answer GetAnswer(int zyId, int userId) { T_Answer model = null; using (MySqlDataReader dr = MySqlHelper.ExecuteReader(Util.GetConnectString(ZyConnString), "select Id, ZyId, ZyType, StudentId, AnswerJson, AnswerImg, Submited, CreateDate from T_Answer where ZyId = @ZyId and StudentId = @StudentId", "@ZyId".ToInt32InPara(zyId), "@StudentId".ToInt32InPara(userId))) { if (dr != null && dr.HasRows) { model = MySqlDBHelper.ConvertDataReaderToEntitySingle <T_Answer>(dr); } } return(model); }
public static T_Answer GetZyAnswer(int zyId, string trueName) { T_Answer model = null; using (MySqlDataReader dr = MySqlHelper.ExecuteReader(Util.GetConnectString(ZyConnString), "select Id, ZyId, StudentId, TrueName, AnswerJson, AnswerImg, CreateDate, Ip, IMEI, MobileBrand, SystemType, Browser from T_Answer where ZyId = @ZyId and TrueName = @TrueName", "@ZyId".ToInt32InPara(zyId), "@TrueName".ToVarCharInPara(trueName))) { if (dr != null && dr.HasRows) { model = MySqlDBHelper.ConvertDataReaderToEntitySingle <T_Answer>(dr); } } return(model); }
/// <summary> /// 提交答案 /// </summary> /// <param name="a"></param> /// <returns></returns> public static bool InsertZyAnswer(T_Answer a) { int i = MySqlHelper.ExecuteNonQuery(Util.GetConnectString(PaperConnString), "insert into T_Answer(PaperId, StudentId, AnswerJson, AnswerImg, Submited, CreateDate, Ip, IMEI, MobileBrand, SystemType, Browser) values (@ZyId, @StudentId, @AnswerJson, @AnswerImg, @Submited, @CreateDate, @Ip, @IMEI, @MobileBrand, @SystemType, @Browser);", "@ZyId".ToInt32InPara(a.PaperId), "@StudentId".ToInt32InPara(a.StudentId), "@AnswerJson".ToVarCharInPara(a.AnswerJson), "@AnswerImg".ToVarCharInPara(a.AnswerImg), "@Submited".ToBitInPara(a.Submited), "@CreateDate".ToDateTimeInPara(a.CreateDate), "@Ip".ToVarCharInPara(a.Ip), "@IMEI".ToVarCharInPara(a.IMEI), "@MobileBrand".ToVarCharInPara(a.MobileBrand), "@SystemType".ToVarCharInPara(a.SystemType), "@Browser".ToVarCharInPara(a.Browser) ); return(i > 0); }
/// <summary> /// 重置试题状态 /// </summary> /// <param name="paperKey"></param> private void RestoreQuestionState(string paperKey) { DataTable table = ExamHandle.TryGetData(Sql.GET_USER_ANSWER, paperKey); foreach (T_TradeQuestion question in PaperData.QuestionCollection) { question.Answer = new ObservableCollection <T_Answer>(); DataRow[] rows = table.Select("F_QUESTION_KEY='" + question.Key + "'"); if (rows.Length > 0)// 只要有一个答案,表示这个提肯定做过了。 { var aw = new T_Answer(); aw.Key = rows[0]["F_KEY"].ToString(); question.State = QuestionState.Complete; question.Answer.Add(aw); PaperData.CompletedQuestion++; } } }
public JsonResult GetAnswerPicList(long zyId) { int id = IdNamingHelper.Decrypt(IdNamingHelper.IdTypeEnum.Zy, zyId); T_Answer ans = B_Answer.GetAnswer(id, UserId); string[] imglist2 = null; if (ans != null && !string.IsNullOrEmpty(ans.AnswerImg)) { string[] imglist = ans.AnswerImg.Split(','); imglist2 = new string[imglist.Length]; for (int i = 0; i < imglist.Length; i++) { imglist2[i] = Util.GetAppSetting("UploadUrlPrefix") + "/" + imglist[i]; } } dto_AjaxJsonResult <string> r = new dto_AjaxJsonResult <string>(); r.code = AjaxResultCodeEnum.Success; r.message = ""; r.data = ((ans == null || string.IsNullOrEmpty(ans.AnswerImg)) ? "" : string.Join(",", imglist2)); return(Json(r)); }
public static string SubmitAnswer(int courseId, long paperId, int studentId, string questions, string answers, string systemType, string browser) { int id = IdNamingHelper.Decrypt(IdNamingHelper.IdTypeEnum.Paper, paperId); //作业提交验证 T_Answer ans = D_Paper.GetAnswer(id, studentId); if (ans != null && ans.Submited) { return("不能重复提交!"); } //todo submit List <string> submitQlist = questions.Split(',').ToList(); List <string> submitAlist = string.IsNullOrEmpty(answers) ? new List <string>() : answers.Split(',').ToList(); if (submitQlist.Count != submitAlist.Count) { return("试题信息有误,提交失败!"); } List <dto_Question> ql = GetPaperQuestions(courseId, paperId); List <dto_UserAnswer> al = new List <dto_UserAnswer>(); ql.ForEach(a => { if (a.haschildren && a.Children != null) { foreach (var c in a.Children) { if (Const.OBJECTIVE_QUES_TYPES.Contains(c.ptypeid)) { int i = submitQlist.IndexOf(IdNamingHelper.Encrypt(IdNamingHelper.IdTypeEnum.Ques, c.id).ToString()); al.Add(new dto_UserAnswer() { QId = c.id, PTypeId = c.ptypeid, Score = 0, Answer = (i == -1 ? "" : submitAlist[i]), CAnswer = c.quesanswer, Point = 0 }); } else { al.Add(new dto_UserAnswer() { QId = c.id, PTypeId = c.ptypeid, Score = 0, Answer = "", CAnswer = "", Point = 0 }); } } } else { if (Const.OBJECTIVE_QUES_TYPES.Contains(a.ptypeid)) { int i = submitQlist.IndexOf(IdNamingHelper.Encrypt(IdNamingHelper.IdTypeEnum.Ques, a.id).ToString()); al.Add(new dto_UserAnswer() { QId = a.id, PTypeId = a.ptypeid, Score = 0, Answer = (i == -1 ? "" : submitAlist[i]), CAnswer = a.quesanswer, Point = 0 }); } else { al.Add(new dto_UserAnswer() { QId = a.id, PTypeId = a.ptypeid, Score = 0, Answer = "", CAnswer = "", Point = 0 }); } } }); bool isok = false; T_Answer answer = new T_Answer() { PaperId = id, StudentId = studentId, Submited = true, CreateDate = DateTime.Now, AnswerJson = JsonConvert.SerializeObject(al), AnswerImg = "", Ip = ClientUtil.Ip, IMEI = ClientUtil.IMEI, MobileBrand = ClientUtil.MobileBrand, SystemType = systemType, Browser = browser }; if (ans != null) { isok = D_Paper.UpdateAnswerJson(id, studentId, answer.AnswerJson); } else { isok = D_Paper.InsertZyAnswer(answer); } return(isok ? "" : "入库失败!"); }
/// <summary> /// 上传答案图片 /// 因为ajaxfileupload限制,这里不能返回json,所以特殊处理返回string /// </summary> /// <param name="zyId"></param> /// <returns></returns> public string UploadAnswerImage(long zyId) { dto_AjaxJsonResult <string> r = new dto_AjaxJsonResult <string>(); int id = IdNamingHelper.Decrypt(IdNamingHelper.IdTypeEnum.Zy, zyId); dto_Zy zy = B_ZyRedis.GetZy(id); //试用作业验证 if (zy.UserId == 0) { r.code = AjaxResultCodeEnum.Error; r.message = "试用作业仅用于数据展示,不允许进行操作!<br/>注册成为正式用户后即可体验所有功能!"; r.data = ""; return(JsonConvert.SerializeObject(r)); } #region 访问权限验证 dto_AjaxJsonResult <dto_Zy> r1 = AccessJudge(UserId, zy); if (r1.code == AjaxResultCodeEnum.Error) { r.code = AjaxResultCodeEnum.Error; r.message = r1.message; r.data = ""; return(JsonConvert.SerializeObject(r)); } #endregion //作业提交验证 T_Answer ans = B_Answer.GetAnswer(id, UserId); if (ans != null && ans.Submited) { r.code = AjaxResultCodeEnum.Error; r.message = "作业已提交,不能再上传答案图片!"; r.data = ""; return(JsonConvert.SerializeObject(r)); } //上传 HttpFileCollection files = System.Web.HttpContext.Current.Request.Files; r = ZyImgUploader.Upload(files); bool isok = false; if (r.code == AjaxResultCodeEnum.Success) { //入库 if (ans == null) { T_Answer AnsAdd = new T_Answer() { ZyId = zy.Id, ZyType = zy.Type, StudentId = UserId, Submited = false, CreateDate = DateTime.Now, AnswerJson = "", AnswerImg = r.data, Ip = ClientUtil.Ip, IMEI = ClientUtil.IMEI, MobileBrand = ClientUtil.MobileBrand, SystemType = Request.Browser.Platform.ToString(), Browser = Request.Browser.Browser.ToString() }; isok = B_Answer.InsertZyAnswer(AnsAdd); } else { isok = B_Answer.AddZyImg(zy.Id, UserId, r.data); } } if (!isok) { r.code = AjaxResultCodeEnum.Error; r.message = "入库失败!"; r.data = ""; return(JsonConvert.SerializeObject(r)); } r.data = Util.GetAppSetting("UploadUrlPrefix") + "/" + r.data; return(JsonConvert.SerializeObject(r)); }
/// <summary> /// 提交答案 /// 仍然做各种状态判断 /// </summary> /// <param name="zyId"></param> /// <param name="questions"></param> /// <param name="answers"></param> /// <returns></returns> public JsonResult SubmitAnswer(long zyId, string questions, string answers) { dto_AjaxJsonResult <string> r = new dto_AjaxJsonResult <string>(); int id = IdNamingHelper.Decrypt(IdNamingHelper.IdTypeEnum.Zy, zyId); dto_Zy zy = B_ZyRedis.GetZy(id); //试用作业验证 if (zy.UserId == 0) { r.code = AjaxResultCodeEnum.Error; r.message = "试用作业仅用于数据展示,不允许进行操作!<br/>注册成为正式用户后即可体验所有功能!"; r.data = ""; return(Json(r)); } #region 访问权限验证 dto_AjaxJsonResult <dto_Zy> r1 = AccessJudge(UserId, zy); if (r1.code == AjaxResultCodeEnum.Error) { r.code = AjaxResultCodeEnum.Error; r.message = r1.message; r.data = ""; return(Json(r)); } #endregion //作业提交验证 T_Answer ans = B_Answer.GetAnswer(id, UserId); if (ans != null && ans.Submited) { r.code = AjaxResultCodeEnum.Error; r.message = "作业已提交,不能重复提交!"; r.data = ""; return(Json(r)); } //todo submit List <string> submitQlist = questions.Split(',').ToList(); List <string> submitAlist = string.IsNullOrEmpty(answers) ? new List <string>() : answers.Split(',').ToList(); if (submitQlist.Count != submitAlist.Count) { r.code = AjaxResultCodeEnum.Error; r.message = "试题信息有误,提交失败!"; r.data = ""; return(Json(r)); } string qjson = B_ZyRedis.GetQdbZyQuesJson(id); List <dto_ZyQuestion> ql = JsonConvert.DeserializeObject <List <dto_ZyQuestion> >(qjson); List <dto_UserAnswer> al = new List <dto_UserAnswer>(); ql.ForEach(a => { string CAnswer = ""; if (Const.OBJECTIVE_QUES_TYPES.Contains(a.PTypeId)) { if (a.QId == a.PQId) { CAnswer = B_QuesRedis.GetQuestion(zy.CourseId, a.QId).quesanswer; } else { CAnswer = B_QuesRedis.GetQuestion(zy.CourseId, a.PQId).Children.Find(b => b.id == a.QId).quesanswer; } } int i = submitQlist.IndexOf(IdNamingHelper.Encrypt(IdNamingHelper.IdTypeEnum.Ques, a.QId).ToString()); al.Add(new dto_UserAnswer() { QId = a.QId, PTypeId = a.PTypeId, Score = a.Score, Answer = (i == -1 ? "" : submitAlist[i]), CAnswer = CAnswer, Point = 0 }); }); bool isok = false; T_Answer answer = new T_Answer() { ZyId = id, ZyType = zy.Type, StudentId = UserId, Submited = true, CreateDate = DateTime.Now, AnswerJson = JsonConvert.SerializeObject(al), AnswerImg = "", Ip = ClientUtil.Ip, IMEI = ClientUtil.IMEI, MobileBrand = ClientUtil.MobileBrand, SystemType = Request.Browser.Platform.ToString(), Browser = Request.Browser.Browser.ToString() }; if (ans != null) { isok = B_Answer.UpdateAnswerJson(id, UserId, answer.AnswerJson); } else { isok = B_Answer.InsertZyAnswer(answer); } if (isok) { //写统计表 B_Analyze.GenerateAnalyze(answer); r.code = AjaxResultCodeEnum.Success; r.message = ""; r.data = ""; return(Json(r)); } else { r.code = AjaxResultCodeEnum.Error; r.message = "提交入库失败!"; r.data = ""; return(Json(r)); } }