///// <summary> ///// chấm điểm cho 1 sinh viên ///// </summary> ///// <param name="examhallstudent"></param> ///// <returns></returns> public JsonResult GetMark(string examhallstudentcode) { // kiểm tra xem còn bản ghi examhallstudentcode này trên server ko EXAMHALLSTUDENT_BUS examhallstudentBus = new EXAMHALLSTUDENT_BUS(); var examhallstudent = examhallstudentBus.GetByID(new EXAMHALLSTUDENT_OBJ.BusinessObjectID(examhallstudentcode)); var ret = (examhallstudent == null) ? -1 : 0; if (ret >= 0) { // lấy kết quả thi của sinh viên này EXAMRESULT_BUS examresultBus = new EXAMRESULT_BUS(); var examresult = examresultBus.getAllBy2("EXAMFORMDETAILCODE", new fieldpara("EXAMHALLSTUDENTCODE", examhallstudentcode, 0)); if (examresult != null && examresult.Count > 0) { // lấy danh sách câu hỏi và câu trả lời của sinh viên, trừ các dạng câu hỏi: điền vào đoạn trống tự điền từ, viết lại câu, viết đoạn văn, nghe nói, viết DataSet ds = new DataSet(); ret = examresultBus.getExamresult(ref ds, "examresult", examresult[0].EXAMHALLSTUDENTCODE); List <EXAMRESULT_OBJ> liResult1 = new List <EXAMRESULT_OBJ>(); // danh sách câu hỏi kiểu trắc nghiệm List <EXAMRESULT_OBJ> liResultFg = new List <EXAMRESULT_OBJ>(); // lấy danh sách câu hỏi dạng điền vào đoạn trống tự gõ từ List <EXAMRESULT_OBJ> liResultRw = new List <EXAMRESULT_OBJ>(); // lấy danh sách câu hỏi dạng viết lại câu if (ret >= 0) { foreach (DataRow r in ds.Tables["examresult"].Rows) { var objtemp = new EXAMRESULT_OBJ { EXAMFORMDETAILCODE = com.string4Row(r, "examformdetailcode", ""), QUESTIONCODE = com.string4Row(r, "questioncode", ""), ANSWERCODE = com.string4Row(r, "answercode", ""), ANSWERTEXT = com.string4Row(r, "answertext", ""), QUESTIONGROUPCODE = com.string4Row(r, "questiongroupcode", "") }; string questiontype = com.string4Row(r, "questiontype", ""); // nếu thuộc 6 dạng này thì add vào result1 if (questiontype.Equals("MC") || questiontype.Equals("FI") || questiontype.Equals("CO") || questiontype.Equals("LA") || questiontype.Equals("PA") || questiontype.Equals("MS")) { liResult1.Add(objtemp); } // nếu là dạng điền vào đoạn trống thì add vào resulf FG if (questiontype.Equals("FG")) { liResultFg.Add(objtemp); } // nếu là dạng điền vào đoạn trống thì add vào resulfRW if (questiontype.Equals("RW")) { liResultRw.Add(objtemp); } } } // lấy danh sách câu hỏi và câu trả lời trong đề thi của sinh viên var examformcode = examresult[0].EXAMFORMCODE; ds = new DataSet(); ret = examresultBus.getExamform(ref ds, "examform", examformcode); List <dynamic> liQuestion = new List <dynamic>(); if (ret >= 0) { foreach (DataRow r in ds.Tables["examform"].Rows) { dynamic question = new ExpandoObject(); question.QUESTIONCODE = com.string4Row(r, "code", ""); // mã câu hỏi question.TRUEANSWER = com.string4Row(r, "trueanswer", ""); // đáp án đúng // question.MARK = com.string4Row(r, "mark", ""); // số điểm cho câu hỏi này question.MARK = float.Parse(com.string4Row(r, "mark", ""), CultureInfo.InvariantCulture.NumberFormat); question.CONTENT = com.string4Row(r, "content", ""); // nội dung câu hỏi, sử dụng trong trường hợp điền vào đoạn trống tự gõ từ, viết lại câu liQuestion.Add(question); } } // so sánh dạng trắc nghiệm, nếu đúng thì update lại điểm List <EXAMRESULT_OBJ> dataUpdate = new List <EXAMRESULT_OBJ>(); List <fieldpara> lipa = new List <fieldpara>(); foreach (var item in liResult1) { foreach (var item2 in liQuestion) { if (item.QUESTIONCODE == item2.QUESTIONCODE && item.ANSWERCODE == item2.TRUEANSWER) { item.EXAMHALLSTUDENTCODE = examhallstudentcode; item.EXAMFORMCODE = examformcode; lipa.Clear(); lipa.Add(new fieldpara("EXAMHALLSTUDENTCODE", examhallstudentcode, 0)); lipa.Add(new fieldpara("EXAMFORMDETAILCODE", item.EXAMFORMDETAILCODE, 0)); lipa.Add(new fieldpara("QUESTIONCODE", item.QUESTIONCODE, 0)); lipa.Add(new fieldpara("QUESTIONGROUPCODE", item.QUESTIONGROUPCODE, 0)); var obj = examresultBus.GetByKey(lipa.ToArray()); if (obj != null) { obj.MARK = 1; if (item2.MARK > 0) { obj.MARK = item2.MARK; } dataUpdate.Add(obj); } else { ret = -1; } } } } // so sánh dạng điền vào chỗ trống tự gõ từ foreach (var item in liResultFg) { foreach (var item2 in liQuestion) { if (item.QUESTIONCODE == item2.QUESTIONCODE) { // so sánh câu trả lời của sinh viên có khớp với đáp án hay không string answer = item.ANSWERTEXT; // Câu trả lời của sinh viên string trueanswer = item2.CONTENT; // Nội dung câu trả lời answer = answer.Trim(); // loại bỏ các kí tự html trueanswer = StripHtml(trueanswer).Trim(); if (String.Compare(answer, trueanswer, StringComparison.OrdinalIgnoreCase) == 0) { item.EXAMHALLSTUDENTCODE = examhallstudentcode; item.EXAMFORMCODE = examformcode; lipa.Clear(); lipa.Add(new fieldpara("EXAMHALLSTUDENTCODE", examhallstudentcode, 0)); lipa.Add(new fieldpara("EXAMFORMDETAILCODE", item.EXAMFORMDETAILCODE, 0)); lipa.Add(new fieldpara("QUESTIONCODE", item.QUESTIONCODE, 0)); lipa.Add(new fieldpara("QUESTIONGROUPCODE", item.QUESTIONGROUPCODE, 0)); var obj = examresultBus.GetByKey(lipa.ToArray()); if (obj != null) { obj.MARK = 1; if (item2.MARK > 0) { obj.MARK = item2.MARK; } dataUpdate.Add(obj); } else { ret = -1; } } } } } // so sánh dạng viết lại câu foreach (var item in liResultRw) { foreach (var item2 in liQuestion) { if (item.QUESTIONCODE == item2.QUESTIONCODE) { // so sánh câu trả lời của sinh viên có khớp với đáp án hay không string answer = item.ANSWERTEXT; // Câu trả lời của sinh viên string trueanswer = item2.CONTENT; // Nội dung câu trả lời answer = answer.Trim(); // loại bỏ các kí tự html trueanswer = StripHtml(trueanswer).Trim(); // regex về dạng chuẩn answer = RegexAnswer(answer); if (String.Compare(answer, trueanswer, StringComparison.OrdinalIgnoreCase) == 0) { item.EXAMHALLSTUDENTCODE = examhallstudentcode; item.EXAMFORMCODE = examformcode; lipa.Clear(); lipa.Add(new fieldpara("EXAMHALLSTUDENTCODE", examhallstudentcode, 0)); lipa.Add(new fieldpara("EXAMFORMDETAILCODE", item.EXAMFORMDETAILCODE, 0)); lipa.Add(new fieldpara("QUESTIONCODE", item.QUESTIONCODE, 0)); lipa.Add(new fieldpara("QUESTIONGROUPCODE", item.QUESTIONGROUPCODE, 0)); var obj = examresultBus.GetByKey(lipa.ToArray()); if (obj != null) { obj.MARK = 1; if (item2.MARK > 0) { obj.MARK = item2.MARK; } dataUpdate.Add(obj); } else { ret = -1; } } } } } if (dataUpdate.Count > 0) { //mặc định khi vào danh sách này là xóa thành công nên ret= 1; //duyệt toàn bộ danh sách bản ghi để xóa examresultBus.BeginTransaction(); ret = examresultBus.UpdateMultiItems(dataUpdate); if (ret < 0) { //Trong trường hợp nhiều thao tác, có một thao tác không thành công, //hàm này được gọi để quay lại trạng thái trước khi thực hiện (bắt đầu từ khi gọi BeginTransaction() examresultBus.RollbackTransaction(); } else { //Sau khi thao tác dữ liệu thành công, hàm này được gọi để thực hiện ghi vào cơ sở dữ liệu examresultBus.CommitTransaction(); } } return(Json(new { ret }, JsonRequestBehavior.AllowGet)); } } examhallstudentBus.CloseConnection(); return(Json(new { }, JsonRequestBehavior.AllowGet)); }
public JsonResult UpdateExamResult(List <QuestionAnswer> listobj, EXAMFORM_OBJ examform, List <EXAMFORMDETAIL_OBJ> listexamformdetail, string examhallstudentcode) { //bài thi của sinh viên sẽ đưa lên gồm có : mã câu hỏi,mã câu trả lời, nội dung câu trả lời // examformcode: mã đề thi , examformdetailcode: mã phần thi // answerfile: link file muốn lưu trên server cho bài thi nói ////list answer, QuestionAnswer {MaCauHoi,MaXTL} var ret = 0; int add = 0; QUESTIONTYPE_BUS busQuestiontype = new QUESTIONTYPE_BUS(); List <QUESTIONTYPE_OBJ> liQuestiontype = busQuestiontype.getAllBy2(); busQuestiontype.CloseConnection(); // list question answer // List<QuestionAnswer> listStudentAnswer = JsonConvert.DeserializeObject<List<QuestionAnswer>>(listobj); List <QuestionAnswer> listStudentAnswer = listobj; if (listStudentAnswer.Count <= 0) { ret = -1; } //list EXAMFORMDETAIL_OBJ // List<EXAMFORMDETAIL_OBJ> listEXamDetail = JsonConvert.DeserializeObject<List<EXAMFORMDETAIL_OBJ>>(listexamformdetail); List <EXAMFORMDETAIL_OBJ> listEXamDetail = listexamformdetail; if (listEXamDetail.Count <= 0) { ret = -2; } // list examform // string exCode = examformcode; // EXAMFORM_OBJ objExForm = JsonConvert.DeserializeObject<EXAMFORM_OBJ>(exCode); EXAMFORM_OBJ objExForm = examform; //examhallstudentcode string exHallcode = examhallstudentcode; //object examresult EXAMRESULT_BUS bus = new EXAMRESULT_BUS(); QUESTION_BUS busQuestion = new QUESTION_BUS(); // QUESTIONGROUP_BUS busQGroup = new QUESTIONGROUP_BUS(); // duyet trong list examformdetail foreach (var item in listEXamDetail) { //lay danh sach question theo tung questiongroup trong examformdetail List <QUESTION_OBJ> liQuestion = busQuestion.getAllBy2("CODE", new fieldpara("QUESTIONGROUPCODE", item.QUESTIONGROUPCODE)); //duyet trong list question foreach (var question in liQuestion) { //duyet trong danh sach cau tra loi cua sinh vien de dua ra la cau hoi nay la cap nhat hay them moi foreach (var answer in listStudentAnswer) { //kiem tra su ton tai cua cau hoi if (answer.MaCauHoi == question.CODE) { //question group to determinecasse writing var objTemp = bus.GetByID(new EXAMRESULT_OBJ.BusinessObjectID(exHallcode, item.CODE, question.CODE)); //chua co thi tuc la them moi if (objTemp == null) { add = 1; objTemp = new EXAMRESULT_OBJ(); } objTemp.EXAMHALLSTUDENTCODE = exHallcode; objTemp.EXAMFORMDETAILCODE = item.CODE; objTemp.EXAMFORMCODE = objExForm.CODE; objTemp.QUESTIONCODE = question.CODE; objTemp.QUESTIONGROUPCODE = item.QUESTIONGROUPCODE; switch (getCodeview(liQuestiontype, item.TESTSTRUCTDETAILCODE)) // thực chất là item._QUESTIONGROUPCODE.QUESTIONTYPECODE nhưng do ko gửi được _QUESTIONGROUPCODE lên, do đó gán tạm TESTSTRUCTDETAILCODE = (item._QUESTIONGROUPCODE.QUESTIONTYPECODE) { //multichoice //1 case "MC": //"1707130001": objTemp.ANSWERCODE = answer.MaCauTL; objTemp.ANSWERTEXT = ""; break; //single choice case //2 case "MS": objTemp.ANSWERCODE = answer.MaCauTL; objTemp.ANSWERTEXT = ""; break; //case CO, true,false,not given //3 case "CO": objTemp.ANSWERCODE = answer.MaCauTL; objTemp.ANSWERTEXT = ""; break; //write //4 case "WR": // "1707130007": objTemp.ANSWERCODE = ""; objTemp.ANSWERTEXT = answer.MaCauTL; break; //rewrite //5 case "RW": // "1707130004": objTemp.ANSWERCODE = ""; objTemp.ANSWERTEXT = answer.MaCauTL; break; //NGHE NOI //6 case "LA": // "1708300007": //LA objTemp.ANSWERFILE = GetName(answer.MaCauTL); break; //trường hợp điền từ vào ô trống //7 case "FG": objTemp.ANSWERCODE = ""; objTemp.ANSWERTEXT = answer.MaCauTL; break; //TRUONG HOP KEO THA VAO O TRONG //8 case "FI": objTemp.ANSWERCODE = answer.MaCauTL; objTemp.ANSWERTEXT = ""; break; // Keo tha vao o trong //9 case "FF": objTemp.ANSWERCODE = answer.MaCauTL; objTemp.ANSWERTEXT = ""; break; //cau hoi ghep doi //10 case "PA": objTemp.ANSWERCODE = answer.MaCauTL; objTemp.ANSWERTEXT = ""; break; //dạng câu hỏi sắp xếp lại câu //11 case "RA": objTemp.ANSWERTEXT = answer.MaCauTL; objTemp.ANSWERCODE = ""; break; default: objTemp.ANSWERCODE = ""; objTemp.ANSWERTEXT = ""; break; } objTemp.LOCK = objExForm.LOCK; objTemp.LOCKDATE = DateTime.Now; objTemp.MARK = 0; if (add > 0) { ret = bus.insert(objTemp); } else { objTemp._ID.QUESTIONCODE = question.CODE; objTemp._ID.EXAMFORMDETAILCODE = item.CODE; objTemp._ID.EXAMHALLSTUDENTCODE = exHallcode; ret = bus.update(objTemp); } } } } } if (ret >= 0) { _ses.tSOURCEPATHSESSION?.Clear(); _ses.tDESTINATIONPATHSESSION?.Clear(); } return(Json(new { ret }, JsonRequestBehavior.AllowGet)); }