/// <summary> /// 提交答案对象 同步跟读(单词,句子)、听力考试、模拟考试 /// </summary> /// <param name="answer"></param> /// <returns></returns> public bool SubmitWork(SpeekingAnswersEntity <WorkAnswerContract <ReadAnswerEntity> > answers) { if (answers == null) { return(false); } //分享答案数据包写入答案表 此处答案方式提交都是一致的 根据类型不同提取数据 //答案JSON编码 answers.AnswerData.ForEach(item => { item.AnswerContent = JSONHelper.Encode <List <ReadAnswerEntity> >(item.Answers); }); if (answers.Is_Work == 1) { var worksInfo = answers.worksInfo; //查询是否已做过 var unitWork = workService.GetUserUnitWork(answers.worksInfo.ContentId, answers.worksInfo.DoWorkId); worksInfo.Status = 3;//手动更新状态 worksInfo.SubmitCount = 1; worksInfo.WorkLong = Convert.ToInt32(worksInfo.WorkLong / 1000) + 1; worksInfo.WorkScore = worksInfo.ActualScore; if (unitWork != null) { worksInfo.WorkScore = 100; worksInfo.WorkLong = worksInfo.WorkLong + unitWork.WorkLong; //时长相加 worksInfo.DoId = unitWork.DoId; worksInfo.Comment = unitWork.Comment; worksInfo.CommentType = unitWork.CommentType; if (worksInfo.ActualScore < unitWork.ActualScore) {//如果成绩小于之前成绩 则沿用历史成绩 worksInfo.ActualScore = unitWork.ActualScore; } worksInfo.SubmitCount = unitWork.SubmitCount + 1; } return(workService.DoUnitWorks(worksInfo, answers.AnswerData) > 0); } else { var practiceInfo = answers.practiceInfo; practiceInfo.Status = 3;//手动更新状态 practiceInfo.WorkLong = Convert.ToInt32(practiceInfo.WorkLong / 1000) + 1; return(workService.DoIndepPractice(practiceInfo, answers.AnswerData) > 0); } }
public virtual JsonResult SubmitWork(WorkParam baseParam, long doWorkId, long contentId) { if (baseParam.workStatus == 2 || baseParam.workStatus == 3) { //跟读作业通过接口调用,其他作业只允许提交一次 return(Json(new ReturnResult(101, "无法重复提交已完成的作业"))); } if (baseParam.DoWorkBase.WorkBaseStatus != 0) { return(Json(new ReturnResult(102, "这份作业已经被老师取消布置啦,再去作业系统看看有没有重新布置哦!"))); } var unitWorks = baseParam.UnitWork ?? new UnitWorksContract(); //第一次提交,baseParam.UnitWork是为null. var actualScore = 0m; var content = Request.Form["content"]; var answerList = new List <WorkAnswerContract>(); if (!string.IsNullOrWhiteSpace(content)) //目前只做试题批改,后期有新的类型再修改 { var questionCount = Convert.ToInt32(Request.Form["questionCount"]); var userAnswer = JSONHelper.Decode <List <WorkAnswerContract <QuestionAnswer> > >(content); var correctService = DependencyResolver.Current.GetService <CorrectService>(); var wikiQues = new List <Ques.Core.Models.Question>(); answerList = correctService.WikiQuesCorrect(userAnswer, ref actualScore, ref wikiQues); answerList.ForEach(t => t.ResourceType = ResourceModuleOptions.Question.ToString()); unitWorks.CorrectRate = questionCount > 0 ? answerList.Count(t => t.Assess == 1) * 1.0m / questionCount : 0; } if (!string.IsNullOrWhiteSpace(Request.Form["workScore"])) { unitWorks.WorkScore = Convert.ToDecimal(Request.Form["workScore"]); } unitWorks.ContentId = contentId; unitWorks.RecordId = baseParam.WorkResource.RecordId; unitWorks.WorkId = baseParam.DoWorkBase.WorkID; unitWorks.DoWorkId = doWorkId; unitWorks.SubmitUserId = baseParam.User.UserID; unitWorks.SubmitUserName = baseParam.User.UserName; unitWorks.ActualScore = actualScore; unitWorks.SubmitDate = DateTime.Now; unitWorks.IsTimeOut = unitWorks.SubmitDate > baseParam.DoWorkBase.EffectiveDate; unitWorks.SubmitCount = unitWorks.SubmitCount + 1; unitWorks.Status = 3; unitWorks.WorkLong = Convert.ToInt32(Request["workLong"]); unitWorks.WorkLong = unitWorks.WorkLong < 1 ? 1 : unitWorks.WorkLong; var doId = workService.DoUnitWorks(unitWorks, answerList, baseParam.DoWorkBase.TotalNum); #region 发送消息 if (doId > 0 && actualScore >= 70) { var msg = new CApi.Client.XiXinClient(); var workname = "我于" + unitWorks.SubmitDate.ToString("MM月dd日 HH:mm") + "提交了“" + baseParam.WorkResource.ResourceName + "”,得分" + actualScore + ","; if (actualScore >= 70 && actualScore < 80) { workname += "成绩中等。"; } else if (actualScore >= 80 && actualScore < 90) { workname += "成绩良好。"; } else if (actualScore >= 90) { workname += "成绩优秀。"; } //异步发送习信与书房消息 System.Threading.Tasks.Task.Factory.StartNew(() => msg.SendToFamily(baseParam.User.UserID, workname)); System.Threading.Tasks.Task.Factory.StartNew(() => SendMessage(baseParam.User, "作业消息", workname)); } #endregion return(Json(doId == 0 ? new ReturnResult("作业提交失败,请稍后再试") : new ReturnResult <long>(doId))); }