using Edu.Model.ViewModel.Exam; using Edu.Model.ViewModel.Question; using Edu.Repository.Exam; using System; using System.Collections.Generic; using System.Linq; using System.Text; using VT.FW.DB; namespace Edu.Module.Exam { /// <summary> /// 处理阅卷 /// </summary> public partial class PaperModule { /// <summary> /// 学员答案仓储层对象 /// </summary> private readonly RB_Examination_StudentDetailsRepository examination_StudentDetailsRepository = new RB_Examination_StudentDetailsRepository(); /// <summary> /// 自动阅卷方法 /// </summary> /// <param name="IsHalfScore">多选题未选全给一半分(1-是,0-否)</param> /// <param name="PaperId">试卷编号</param> /// <param name="stuList">学员答题列表</param> /// <returns></returns> public bool AutoReviewPaperModule(int IsHalfScore, int PaperId, List<RB_Examination_StudentDetails_ViewModel> stuList) { bool flag = false; List<RB_Examination_Details_ViewModel> questionList = examination_DetailsRepository.GetExaminationDetailsListRepository(new RB_Examination_Details_ViewModel() { QPaperIds = PaperId.ToString() }); List<RB_Examination_StudentDetails_ViewModel> answerList = new List<RB_Examination_StudentDetails_ViewModel>(); if (questionList != null && questionList.Count > 0) { foreach (var sItem in questionList) { var answerModel = stuList?.Where(qitem => qitem.DetailsId == sItem.Id)?.FirstOrDefault(); if (answerModel != null && answerModel.Id > 0) { switch (sItem.QuestionTypeKey) { //单选题 case "single": answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = (sItem.Answer == answerModel.StundetAnswer) ? sItem.Score : 0 }); break; //多选题 case "multiple": if (IsHalfScore == 0) { answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = (sItem.Answer == answerModel.StundetAnswer) ? sItem.Score : 0 }); } else { decimal multScore = 0; var oldAnswerList= Common.ConvertHelper.StringToFileList(sItem.Answer); var newAnswerList = Common.ConvertHelper.StringToFileList(answerModel.StundetAnswer); bool isExists = true; if (newAnswerList != null && newAnswerList.Count > 0) { foreach (var nItem in newAnswerList) { if (isExists) { if (!oldAnswerList.Contains(nItem)) { isExists = false; } } } if (sItem.Answer == answerModel.StundetAnswer) { multScore = sItem.Score; } else if (isExists) { multScore = sItem.Score / 2; } } answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = multScore }); } break; //填空题 case "fill-in": break; //判断题 case "judge": answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = (sItem.Answer == answerModel.StundetAnswer) ? sItem.Score : 0 }); break; //简答题 case "short-answer": break; //名词解释 case "noun-explanation": break; //论述题 case "essay-question": break; //计算题 case "calculation": break; //分录题 case "entry-problem": break; //资料题 case "data-question": break; //连线题 case "matching": answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = (sItem.Answer == answerModel.StundetAnswer) ? sItem.Score : 0 }); break; //排序题 case "sorting-problem": answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = (sItem.Answer == answerModel.StundetAnswer) ? sItem.Score : 0 }); break; //完型填空 case "cloze": var cloze_AnswerList= Common.Plugin.JsonHelper.DeserializeObject<List<SubAnswerItem>>(sItem.Answer.ToString()); var cloze_Stu_AnswerList= Common.Plugin.JsonHelper.DeserializeObject<List<SubAnswerItem>>(answerModel.StundetAnswer.ToString()); decimal clozeScore = 0; if (cloze_AnswerList != null && cloze_Stu_AnswerList != null && cloze_AnswerList.Count > 0 && cloze_Stu_AnswerList.Count > 0 && cloze_AnswerList.Count == cloze_Stu_AnswerList.Count) { for (var i = 0; i < cloze_AnswerList.Count; i++) { if (cloze_AnswerList[i].SubAnswer == cloze_Stu_AnswerList[i].SubAnswer) { clozeScore += cloze_AnswerList[i].SubScore; cloze_Stu_AnswerList[i].StudentScore = cloze_AnswerList[i].SubScore; } } } answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = clozeScore, StundetAnswer=Common.Plugin.JsonHelper.Serialize(cloze_Stu_AnswerList) }); break; //阅读理解 case "reading-comprehensio": var reading_AnswerList = Common.Plugin.JsonHelper.DeserializeObject<List<SubAnswerItem>>(sItem.Answer.ToString()); var reading_Stu_AnswerList = Common.Plugin.JsonHelper.DeserializeObject<List<SubAnswerItem>>(answerModel.StundetAnswer.ToString()); decimal readingScore = 0; if (reading_AnswerList != null && reading_Stu_AnswerList != null && reading_AnswerList.Count > 0 && reading_Stu_AnswerList.Count > 0 && reading_AnswerList.Count == reading_Stu_AnswerList.Count) { for (var i = 0; i < reading_AnswerList.Count; i++) { if (reading_AnswerList[i].SubQuestionKey != "fill-in" && reading_AnswerList[i].SubQuestionKey != "short-answer") { if (reading_AnswerList[i].SubAnswer == reading_Stu_AnswerList[i].SubAnswer) { readingScore += reading_AnswerList[i].SubScore; reading_Stu_AnswerList[i].StudentScore = reading_AnswerList[i].SubScore; } } } } answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = readingScore, StundetAnswer = Common.Plugin.JsonHelper.Serialize(reading_Stu_AnswerList) }); break; //口语题 case "spoken": break; //听力题 case "listening": var listening_AnswerList = Common.Plugin.JsonHelper.DeserializeObject<List<SubAnswerItem>>(sItem.Answer.ToString()); var listening_Stu_AnswerList = Common.Plugin.JsonHelper.DeserializeObject<List<SubAnswerItem>>(answerModel.StundetAnswer.ToString()); decimal listeningScore = 0; if (listening_AnswerList != null && listening_Stu_AnswerList != null && listening_AnswerList.Count > 0 && listening_Stu_AnswerList.Count > 0 && listening_AnswerList.Count == listening_Stu_AnswerList.Count) { for (var i = 0; i < listening_AnswerList.Count; i++) { if (listening_AnswerList[i].SubQuestionKey != "fill-in"&& listening_AnswerList[i].SubQuestionKey != "short-answer") { if (listening_AnswerList[i].SubAnswer == listening_Stu_AnswerList[i].SubAnswer) { listeningScore += listening_AnswerList[i].SubScore; listening_Stu_AnswerList[i].StudentScore = listening_AnswerList[i].SubScore; } } } } answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = listeningScore, StundetAnswer = Common.Plugin.JsonHelper.Serialize(listening_Stu_AnswerList) }); break; //公用选项题 case "sharing-choose": break; //其它题 case "other": break; //单选题-数字 case "single-number": answerList.Add(new RB_Examination_StudentDetails_ViewModel() { Id = answerModel.Id, StudentScore = (sItem.Answer == answerModel.StundetAnswer) ? sItem.Score : 0 }); break; } } } } if (answerList != null && answerList.Count > 0) { foreach (var item in answerList) { Dictionary<string, object> fileds = new Dictionary<string, object>() { {nameof(RB_Examination_StudentDetails_ViewModel.StudentScore),item.StudentScore }, {nameof(RB_Examination_StudentDetails_ViewModel.IsMarking),1 }, }; if (!string.IsNullOrEmpty(item.StundetAnswer)) { fileds.Add(nameof(RB_Examination_StudentDetails_ViewModel.StundetAnswer), item.StundetAnswer); } examination_StudentDetailsRepository.Update(fileds, new WhereHelper(nameof(RB_Examination_StudentDetails_ViewModel.Id), item.Id)); } } return flag; } } }