コード例 #1
0
ファイル: B_Analyze.cs プロジェクト: jiangzixuan/easyzy.com
        /// <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);
            });
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
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++;
                }
            }
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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 ? "" : "入库失败!");
        }
コード例 #9
0
        /// <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));
        }
コード例 #10
0
        /// <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));
            }
        }