Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
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)));
        }