/* * 进度汇总逻辑: * * 1.用户每次学习课程时需要往 Member_ClassUnitContentSchedule 中插入数据,作为当前的章节小进度. * 2.当当前章节所有的课程学习结束,需要判断当前在章节是否学习结束; * 3.在修改章节进度和总进度时,需要重新验证所有的章节进度是否已完成(可能存在章节追加的情况). * 4.若当前章节全部学习结束,需要在总进度表中 Member_ClassRegister 更改CurrentSchedule(当前章节进度),TotalSchedule(总课程进度). * * 所用表: select * from Member_ClassRegister select * from Course_UnitContent --1文本,2影音教材,3讨论,4作业 5测试,6结业考试 select * from Member_ClassUnitContentSchedule select * from Course_Detail select * from Course_UnitDetail * * [课程]下 分 [章]下 分 [节]下 分 [活动] * 同时也可以在[章]下面没有节,只有[活动],所以需要获取章下面所有的活动 */ /// <summary> /// 更新总体进度 /// </summary> /// <param name="iUnitId">当前[活动]所在[节]的ID</param> /// <param name="iClassId"></param> /// <param name="iTrainingId"></param> /// <param name="iAccountId"></param> /// <param name="iUnitContent"></param> private void UpdateOverallProgress(int iUnitId, int iClassId, int iTrainingId, int iAccountId, int iUnitContent) { var unitBll = new Course_UnitContentBLL(); var detailBll = new Class_DetailBLL(); var UnitDetailBll = new Course_UnitDetailBLL(); var ClassRegisterBll = new Member_ClassRegisterBLL(); var Member_ClassUnitContentSchedulebll = new Member_ClassUnitContentScheduleBLL(); int iOverChapterCount = 0, iChapterTotalCount = 0;//完成的[章]的数量,当前课程需要学习的[章]总数,该[章]已完成的[节]的数量(该章的进度) //用户的在线学习模块都要插入一条数据到Member_ClassUnitContentSchedule,作为当前小章节的学习进度 if (this.InsertMember_ClassUnitContentSchedule(iClassId, iTrainingId, iAccountId, iUnitContent)) { var List_Course_UnitDetail = UnitDetailBll.GetList(" ParentId = 0 AND Display = 1 AND Delflag = 0 AND TrainingId = " + iTrainingId, string.Empty); iChapterTotalCount = List_Course_UnitDetail.Count;//当前课程学员需要完成学习的总章数 foreach (var ChapterItem in List_Course_UnitDetail) { bool bolResult = this.GetChapterProgress(ChapterItem.Id, iClassId, ChapterItem.TrainingId.Value, iAccountId); if (bolResult)//当前[章]的进度 { iOverChapterCount++; } } //[Status] 1等待学校审核 2学校审核通过 3学校审核不通过 4开班机构审核通过 5开班机构审核不通过 int iPlanId = Code.SiteCache.Instance.PlanId; string strWhere = string.Format(@" AccountId = {0} AND ClassId = {1} AND PlanId = {2} and TrainingId = {3} and Delflag = 0 AND Status = 4", iAccountId, iClassId, iPlanId, iTrainingId); var List_Member_ClassRegister = ClassRegisterBll.GetList(strWhere, "CreateDate"); if (List_Member_ClassRegister != null && List_Member_ClassRegister.Count == 1) { var Model_Member_ClassRegister = List_Member_ClassRegister[0]; Model_Member_ClassRegister.CurrentSchedule = iOverChapterCount;//[章,节]完成数 Model_Member_ClassRegister.TotalSchedule = iChapterTotalCount;//课程总章,节数 Model_Member_ClassRegister.CreateDate = DateTime.Now; bool bolResult = ClassRegisterBll.Update(Model_Member_ClassRegister); } } }
/// <summary> /// 在线学习-[单元测试]提交 /// </summary> /// <returns></returns> public ActionResult LearnOnLineQuizEdit(List<Member_CourseContentAnswerOther> listOther) { string strVerson = string.Empty; int iClassId = 0, iAccountId = 0, iPlanId = 0, iResultId = 0, iUnitContent = 0, iTrainingId = 0, iQuestionCnt = 0, iRightCount = 0, iWrongCount = 0; double dblScoreTotal = 0, dblGetScore = 0, dblResultScore = 0; var stbSqlWhere = new StringBuilder(); //获取 答题总数,答题正确的个数,答题错误的个数,结果 iQuestionCnt = listOther.Count;//总题数 bool bolResult = false; var unitQuesBll = new Course_UnitQuestionBLL(); var CourseContentAnswerBll = new Member_CourseContentAnswerBLL(); var unitBll = new Course_UnitContentBLL(); var Member_ClassUnitContentSchedulebll = new Member_ClassUnitContentScheduleBLL(); iAccountId = Code.SiteCache.Instance.LoginInfo.UserId; iPlanId = Code.SiteCache.Instance.PlanId; //获取[单元测试]总得分 foreach (var item in listOther) { //获取该题目的正确答案 var Model_Ques = unitQuesBll.GetModel(item.Id, string.Empty); if (!string.IsNullOrEmpty(item.Credits)) { double dblCre = 0; double.TryParse(item.Credits, out dblCre); dblScoreTotal += dblCre;//获取所有题目的答案的总得分 if (item.Answer == Model_Ques.Answer) { iRightCount++;//正确答题数 dblResultScore += dblCre;//用户得分 } else iWrongCount++;//错误答题数 strVerson = item.Verson;//题目版本号,一批题目的版本号都一样 iUnitContent = item.UnitContentId;//一批题目的UnitContentId都一样 iClassId = item.ClassId;//一批题目的ClassId都一样 iTrainingId = item.TrainingId;//一批题目的TrainingId都一样 } } //若课程已结束禁止操作 if (this.GetCourseIsOver(iClassId, iTrainingId, iAccountId)) return Json(new { Result = true, Msg = "提交失败.当前课程已结束,不能执行该操作!" }, JsonRequestBehavior.AllowGet); ////查看当前活动是否已打分,若已打分则禁止操作[待删除.打分操作为自动打分,不作为判断条件] //if (this.GetActivityScore(iClassId, iTrainingId, iAccountId, iUnitContent)) // return Json(new { Result = false, Msg = "提交失败.当前活动已打分,不能执行该操作!" }, JsonRequestBehavior.AllowGet); //提交时,判断其剩余考试次数 stbSqlWhere.AppendFormat(@"UnitContent = {0} AND ClassId = {1} AND AccountId = {2} AND Delflag = 0", iUnitContent, iClassId, iAccountId); var ResultBll = new Member_ContentAnswerResultBLL(); var List_Member_ContentAnswerResult = ResultBll.GetList(stbSqlWhere.ToString()); int iRowsCount = List_Member_ContentAnswerResult.Tables[0].Rows.Count;//获取已考试的次数 var model = unitBll.GetModel(iUnitContent, string.Empty); if (iRowsCount >= model.TestCnt && model.TestCnt != -1) { return Json(new { Result = false, Msg = "试题提交失败。你的单元测试 - [ " + model.Title + " ] 剩余答题次数不足!" }, JsonRequestBehavior.AllowGet); } var ResultModel = new Member_ContentAnswerResult(); ResultModel.Verson = strVerson; ResultModel.UnitContent = iUnitContent; ResultModel.ClassId = iClassId; ResultModel.Score = decimal.Parse(dblResultScore.ToString());//用户的答题得分 ResultModel.QuestionCnt = iQuestionCnt; ResultModel.RightAnswer = iRightCount; ResultModel.WrongAnswer = iWrongCount; ResultModel.Result = bolResult; ResultModel.AccountId = iAccountId; ResultModel.Delflag = false; ResultModel.CreateDate = DateTime.Now; //将数据插入到总分表 bool bolRes = this.InsertMember_ContentAnswerResult(ResultModel, out iResultId); if (bolRes) { foreach (var itemQues in listOther) { //获取该题目的正确答案 var Model_Ques = unitQuesBll.GetModel(itemQues.Id, string.Empty); double dblGetCreTmp = 0; double.TryParse(itemQues.Credits, out dblGetCreTmp); //将用户的[单元测试]答案保存 Member_CourseContentAnswer Model_Answer = new Member_CourseContentAnswer(); Model_Answer.AnswerResult = iResultId; Model_Answer.Question = itemQues.Id; Model_Answer.Answer = itemQues.Answer; Model_Answer.Result = Model_Ques.Answer == itemQues.Answer;//比对正确答案 dblGetScore += Model_Ques.Answer == itemQues.Answer ? dblGetCreTmp : 0;//当前学员答题得分 Model_Answer.AccountId = iAccountId; Model_Answer.Delflag = false; Model_Answer.CreateDate = DateTime.Now; //将数据插入到学员答题内容表,用户的[课程评价]答案保存 bolRes = CourseContentAnswerBll.Add(Model_Answer); } } if (bolRes) { //更新总进度 this.UpdateOverallProgress(model.UnitId.Value, iClassId, iTrainingId, iAccountId, iUnitContent); //查询该学员的[单元测试]的成绩中最大分数的数据对象 var Model_ActivityMaxScore = this.GetActivityMaxScore(iClassId, iTrainingId, iAccountId, iUnitContent); if (Model_ActivityMaxScore != null) { var strWhere_Activity = string.Format(@" Status = 1 AND Delflag = 0 AND ClassId = {0} AND TrainingId = {1} AND AccountId = {2} AND UnitContent IN ({3})", iClassId, iTrainingId, iAccountId, iUnitContent); var List_ClassUnitContentSchedule = Member_ClassUnitContentSchedulebll.GetList(strWhere_Activity, "Id"); if (List_ClassUnitContentSchedule != null && List_ClassUnitContentSchedule.Count == 1) { var Model_ClassUnitContentSchedule = List_ClassUnitContentSchedule[0]; ScoreSetHelper.ScoreSet(Model_ClassUnitContentSchedule.Id, 4, iClassId, iPlanId, iAccountId, Model_ActivityMaxScore.Score.ToDouble(), Model_ClassUnitContentSchedule.score == null); } } return Json(new { Result = true, Msg = "单元测试提交成功!", TotalScore = dblGetScore }, JsonRequestBehavior.AllowGet); } else { return Json(new { Result = false, Msg = "单元测试提交失败!" }, JsonRequestBehavior.AllowGet); } }
/// <summary> /// 用户的在线学习模块都要插入一条数据到Member_ClassUnitContentSchedule,作为学习进度 /// 为当前学习[节]的学习进度 /// </summary> /// <param name="iClassId"></param> /// <param name="iTrainingId"></param> /// <param name="iAccountId"></param> /// <param name="iUnitContent"></param> /// <returns></returns> private bool InsertMember_ClassUnitContentSchedule(int iClassId, int iTrainingId, int iAccountId, int iUnitContent) { var bolResult = false; var model = new Member_ClassUnitContentSchedule(); var comBll = new Member_ClassUnitContentScheduleBLL(); var strOrderBy = "CreateDate"; var stbSqlWhere = new StringBuilder(); stbSqlWhere.Append("Status = 1 AND Delflag = 0"); stbSqlWhere.AppendFormat("AND ClassId = {0} AND TrainingId={1} AND AccountId={2} AND UnitContent={3}", iClassId, iTrainingId, iAccountId, iUnitContent); var List_Member_Class = comBll.GetList(stbSqlWhere.ToString(), strOrderBy); //当数据不存在的时候添加一条数据进去,否则仅修改最后时间 if (List_Member_Class == null || List_Member_Class.Count <= 0) { model.ClassId = iClassId; model.TrainingId = iTrainingId; model.AccountId = iAccountId; model.UnitContent = iUnitContent; model.Delflag = false; model.Status = true; model.CreateDate = DateTime.Now; if (comBll.Add(model)) { bolResult = true; } } else if (List_Member_Class != null && List_Member_Class.Count == 1) { model = List_Member_Class[0]; model.CreateDate = DateTime.Now; if (comBll.Update(model)) { bolResult = true; } } return bolResult; }
/// <summary> /// 设置分数 /// </summary> /// <param name="iUnitType">//1阅读,2讨论 /// <param name="IsAdd">True:新增 False:删除</param> /// <param name="obj">数据对象</param> private void ScoreSet(int iUnitType, int? iUnitContent = 0, int iClassId = 0, int iTrainingId = 0, bool IsAdd = false, Object obj = null) { var scheduleBll = new Member_ClassUnitContentScheduleBLL(); var replyBll = new Course_UnitReplyDetailBLL(); int iPlanId = 0, iAccountId = 0, iUnitId = 0; double dblScore = 0; var stbSqlWhere = new StringBuilder(); if (iUnitType == 1) { iPlanId = Code.SiteCache.Instance.PlanId; iAccountId = Code.SiteCache.Instance.LoginInfo.UserId; stbSqlWhere.AppendFormat(" ClassId = {0} AND TrainingId = {1} AND AccountId = {2} AND UnitContent = {3} AND Status = 1 AND Delflag = 0", iClassId, iTrainingId, iAccountId, iUnitContent); var List_Schedule = scheduleBll.GetList(stbSqlWhere.ToString(), string.Empty); if (List_Schedule != null && List_Schedule.Count > 0 && List_Schedule[0].score == null)//当存在记录,并且Score=null时记录分数 { Web.Code.ScoreSetHelper.ScoreSet(iUnitContent, iUnitType, iClassId, iPlanId, iAccountId, dblScore); } } else if (iUnitType == 2)//讨论 参与次数要 >=1 { var model = obj as Course_UnitReplyDetail; iUnitContent = model.UnitContent; iClassId = model.ClassId; iPlanId = Code.SiteCache.Instance.PlanId; iAccountId = model.AccountId; stbSqlWhere.AppendFormat(" ClassId = {0} AND AccountId = {1} AND UnitContent = {2} AND Display = 1 AND Delflag = 0", iClassId, iAccountId, iUnitContent); var List_ReplyDetail = replyBll.GetList(stbSqlWhere.ToString(), string.Empty); if (List_ReplyDetail != null) { if (IsAdd) { if (List_ReplyDetail.Count <= 0) { Web.Code.ScoreSetHelper.ScoreSet(iUnitContent, iUnitType, iClassId, iPlanId, iAccountId, dblScore, true); } } else { Web.Code.ScoreSetHelper.ScoreSet(iUnitContent, iUnitType, iClassId, iPlanId, iAccountId, dblScore, false); } } //获取当前活动的UnitId var unitContentBll = new Course_UnitContentBLL(); var Model_UnitContent = unitContentBll.GetModel(iUnitContent.Value, string.Empty); iUnitId = Model_UnitContent.UnitId == null ? 0 : Model_UnitContent.UnitId.Value; //获取TrainingId var unitDetailBll = new Course_UnitDetailBLL(); var Model_UnitDetail = unitDetailBll.GetModel(iUnitId, string.Empty); iTrainingId = Model_UnitDetail.TrainingId == null ? 0 : Model_UnitDetail.TrainingId.Value; //更新总进度 this.UpdateOverallProgress(iUnitId, iClassId, iTrainingId, iAccountId, iUnitContent.Value);//分数添加之后更新总进度 } }
/// <summary> /// 获取当前[章]的进度是否已完成 /// </summary> /// <param name="iUnitId">当前节ID</param> /// <param name="iClassId">当前登录用户的班级ID</param> /// <param name="iTrainingId">当前课程ID</param> /// <param name="iAccountId">当前登录用户ID</param> /// <param name="iPartOverCount">已完成的[节]的数量</param> /// <returns></returns> private bool GetChapterProgress(int iUnitId, int iClassId, int iTrainingId, int iAccountId) { var UnitContentBll = new Course_UnitContentBLL(); var Member_ClassUnitContentSchedulebll = new Member_ClassUnitContentScheduleBLL(); int iActivityTotalCount = 0; var strActitityId = string.Empty;//活动的Id //获取最外层的章的ID,得到该章下面所有的节 var Molde_Course_UnitDetail = this.GetCourse_UnitDetail(iUnitId, iTrainingId); if (Molde_Course_UnitDetail != null) { //根据课程ID和最外层的章的ID, 获取该[章]下面所有的活动 string strWhere = string.Format(@" UnitId IN (Select Course_UnitDetail.Id from Course_UnitDetail where (Id = {0} OR parentId = {0}) AND TrainingId = {1} AND Display = 1 AND Delflag = 0) AND Display=1 AND Delflag=0", Molde_Course_UnitDetail.Id, iTrainingId); List<Course_UnitContent> List_Course_UnitContent = UnitContentBll.GetList(strWhere, "Sort"); iActivityTotalCount = List_Course_UnitContent.Count;//得到该[章],[节]下面所有的活动数 if (iActivityTotalCount <= 0)//当[章],[节]下面没有活动时,默认该章未完成 return false; //获取活动的Id foreach (var item in List_Course_UnitContent) { strActitityId += item.Id + ","; } strActitityId = strActitityId.Substring(0, strActitityId.LastIndexOf(',')); //联合Member_ClassUnitContentSchedule 查看当前用户有没有将当前小章节的课程学习完 var strWhere_Activity = string.Format(@" Status = 1 AND Delflag = 0 AND ClassId = {0} AND TrainingId = {1} AND AccountId = {2} AND UnitContent IN ({3})", iClassId, iTrainingId, iAccountId, strActitityId); //已完成的[章],[节]下面的活动数 var iOutPartOverCount = Member_ClassUnitContentSchedulebll.GetList(strWhere_Activity, "Id").Count; return iActivityTotalCount == iOutPartOverCount;//当前章节下所有活动已完成学习,若相等,该[章]完成 } else { return false; } }
/// <summary> /// 查看当前活动是否已打分,若已打分则禁止操作 /// </summary> /// <param name="iClassId"></param> /// <param name="iAccountId"></param> /// <param name="iUnitContent"></param> /// <returns></returns> private bool GetActivityScore(int iClassId, int iTrainingId, int iAccountId, int iUnitContent) { var bolResult = false; var Member_ClassUnitContentSchedulebll = new Member_ClassUnitContentScheduleBLL(); var Model_Member_ClassUnitContentSchedule = new Member_ClassUnitContentSchedule(); var strWhere_Activity = string.Format(@" Delflag = 0 AND Status = 1 AND ClassId = {0} AND TrainingId = {1} AND AccountId = {2} AND UnitContent = {3}", iClassId, iTrainingId, iAccountId, iUnitContent); var List_Course_UnitHomeWor = Member_ClassUnitContentSchedulebll.GetList(strWhere_Activity, string.Empty); if (List_Course_UnitHomeWor != null && List_Course_UnitHomeWor.Count > 0) { Model_Member_ClassUnitContentSchedule = List_Course_UnitHomeWor[0]; if (Model_Member_ClassUnitContentSchedule.score != null) { bolResult = true; } } return bolResult; }
public ActionResult DeleteCourseAtivity(int id) { Course_UnitContentBLL bll = new Course_UnitContentBLL(); Member_ClassUnitContentScheduleBLL bll_Sch = new Member_ClassUnitContentScheduleBLL(); if (bll.Delete(id) && bll_Sch.Delete(id)) { return Json(new { Result = true, Msg = "删除成功!" }, JsonRequestBehavior.AllowGet); } else { return Json(new { Result = false, Msg = "删除失败!" }, JsonRequestBehavior.AllowGet); } }
/// <summary> /// 重新打分 /// </summary> /// <param name="classId"></param> /// <param name="planId"></param> /// <param name="accountId"></param> public static void resetScore(int classId, int planId) { var member_classBll = new Member_ClassRegisterBLL(); var classDetail = new Class_DetailBLL().GetModel(classId); var traningBll = new Traning_DetailBLL(); var traning_detail = traningBll.GetModel(classDetail.TraningId, ""); if (traning_detail == null) return; var courseBll = new Course_DetailBLL(); var cousre_detail = courseBll.GetList(" TrainingId=" + traning_detail.Id, ""); if (cousre_detail == null || cousre_detail.Count == 0) return; var unitContentBll = new Course_UnitContentBLL(); var memberList = member_classBll.GetList("Delflag=0 and ClassId=" + classId + " and PlanId=" + planId, ""); foreach (var memberModel in memberList) { var accountId = memberModel.AccountId; int total = 1; IList<Course_UnitContent> contentList = new List<Course_UnitContent>(); #region //重新计算阅读分数 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "1,2"); contentList = DataTableToListHelper<Course_UnitContent>.ConvertToModel(unitContentBll.GetUnitByClassAndUnitType(classId, "1,2")); if (contentList != null) { var scheduleBll = new Member_ClassUnitContentScheduleBLL(); int scoreCount = 0; foreach (var item in contentList) { var scheduleModel = scheduleBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + item.Id, ""); if (scheduleModel != null && scheduleModel.Count > 0) { if (scheduleModel.First().score.HasValue)//如果有值说明打过分 { scoreCount++; } } } if (scoreCount == total)//全部阅读过,给满分 { memberModel.ReadingScore = cousre_detail[0].ReadingRate; } else { memberModel.ReadingScore = cousre_detail[0].ReadingRate * scoreCount / total;//阅读数与总数折算 } } //重新计算讨论分数 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "3"); contentList = DataTableToListHelper<Course_UnitContent>.ConvertToModel(unitContentBll.GetUnitByClassAndUnitType(classId, "3")); if (contentList != null) { var scheduleBll = new Member_ClassUnitContentScheduleBLL(); int scoreCount = 0; foreach (var item in contentList) { var scheduleModel = scheduleBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + item.Id, ""); if (scheduleModel != null && scheduleModel.Count > 0) { if (scheduleModel.First().score.HasValue)//如果有值说明打过分 { scoreCount++; } } } if (scoreCount == total)//全部讨论过,给满分 { memberModel.DiscussScore = cousre_detail[0].DisscusRate; } else { memberModel.DiscussScore = cousre_detail[0].DisscusRate * scoreCount / total;//讨论数与总数折算 } } //如有分值,重新计算作业分数 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "4"); contentList = DataTableToListHelper<Course_UnitContent>.ConvertToModel(unitContentBll.GetUnitByClassAndUnitType(classId, "4")); if (contentList != null) { var homeworkBll = new Course_UnitHomeWorkBLL(); double homeworkscore = 0; foreach (var item in contentList) { var scheduleModel = homeworkBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + item.Id, ""); if (scheduleModel != null && scheduleModel.Count > 0) { if (scheduleModel.First().Score.HasValue)//如果有值说明打过分 { homeworkscore += (scheduleModel.First().Score.Value * (cousre_detail[0].HomeWorkRate) / (total * 100)).ToDouble();//已打分数与总数折算 } } } memberModel.HomeWorkScore = homeworkscore; } //重新计算测试分数 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "5"); contentList = DataTableToListHelper<Course_UnitContent>.ConvertToModel(unitContentBll.GetUnitByClassAndUnitType(classId, "5")); if (contentList != null) { var scheduleBll = new Member_ClassUnitContentScheduleBLL(); double testscore = 0; foreach (var item in contentList) { var scheduleModel = scheduleBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + item.Id, ""); if (scheduleModel != null && scheduleModel.Count > 0) { if (scheduleModel.First().score.HasValue) { testscore += (scheduleModel.First().score.Value * (cousre_detail[0].QuestionRate) / (total * 100)).ToDouble(); } } } memberModel.TestingScore = testscore; } //重新计算考试分数 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "6"); contentList = DataTableToListHelper<Course_UnitContent>.ConvertToModel(unitContentBll.GetUnitByClassAndUnitType(classId, "6")); if (contentList != null) { var scheduleBll = new Member_ClassUnitContentScheduleBLL(); double examcore = 0; foreach (var item in contentList) { var scheduleModel = scheduleBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + item.Id, ""); if (scheduleModel != null && scheduleModel.Count > 0) { if (scheduleModel.First().score.HasValue) { examcore += (scheduleModel.First().score.Value * (cousre_detail[0].TestingRate) / (total * 100)).ToDouble(); } } } memberModel.ExaminationScore = examcore; } #endregion member_classBll.Update(memberModel); } }
/// <summary> /// /// </summary> /// <param name="objectId">单元ID</param> /// <param name="objectType">单元类型</param> /// <param name="classId">班级ID</param> /// <param name="planId">计划ID</param> /// <param name="accountId">成员ID</param> /// <param name="score">分值</param> public static void ScoreSet(int? objectId, int objectType, int classId, int planId, int accountId, double score, bool add = true) { dynamic objectBll; dynamic model; Member_ClassRegister memberModel; int total = 1; var member_classBll = new Member_ClassRegisterBLL(); var member_class = member_classBll.GetList(" Delflag=0 and ClassId=" + classId + " and PlanId=" + planId + " and AccountId=" + accountId, ""); if (member_class == null || member_class.Count == 0) return; memberModel = member_class.FirstOrDefault(); var traningBll = new Traning_DetailBLL(); var traning_detail = traningBll.GetModel(memberModel.TrainingId.Value, ""); if (traning_detail == null) return; var courseBll = new Course_DetailBLL(); var cousre_detail = courseBll.GetList(" Delflag=0 and TrainingId=" + traning_detail.Id, ""); if (cousre_detail == null || cousre_detail.Count == 0) return; var unitContentBll = new Course_UnitContentBLL(); var oldScore = 0.0; switch (objectType) { case 1://read objectBll = new Member_ClassUnitContentScheduleBLL(); model = objectBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + objectId, ""); if (model.Count > 0) { if (add) model[0].score = 1; else model[0].score = 0; objectBll.Update(model[0]);// } total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "1,2");//阅读视频类的单元活动数 if (total > 1) { if (add) memberModel.ReadingScore = (memberModel.ReadingScore.HasValue ? memberModel.ReadingScore.Value : 0) + (cousre_detail[0].ReadingRate / (total)).ToDouble(); else { if (memberModel.ReadingScore.HasValue && memberModel.ReadingScore.Value.ToInt() > 0) memberModel.ReadingScore = memberModel.ReadingScore.Value - (cousre_detail[0].ReadingRate / (total)).ToDouble(); } } else { if (add) memberModel.ReadingScore = cousre_detail[0].ReadingRate; else memberModel.ReadingScore = 0.0; } if (memberModel.ReadingScore > cousre_detail[0].ReadingRate) { memberModel.ReadingScore = cousre_detail[0].ReadingRate; } if (memberModel.ReadingScore < 0) { memberModel.ReadingScore = 0; } member_classBll.Update(memberModel);//更新班级成员考试分数总值 break; case 2://discuss objectBll = new Member_ClassUnitContentScheduleBLL(); model = objectBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " and UnitContent=" + objectId, ""); if (model.Count > 0) { if (add) model[0].score = 1; else model[0].score = 0; objectBll.Update(model[0]);// } total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "3");//讨论类的单元活动数 if (total > 1) { if (add) memberModel.DiscussScore = (memberModel.DiscussScore.HasValue ? memberModel.DiscussScore.Value : 0) + (cousre_detail[0].DisscusRate / (total)).ToDouble(); else { if (memberModel.ReadingScore.HasValue && memberModel.ReadingScore.Value.ToInt() > 0) memberModel.DiscussScore = memberModel.DiscussScore.Value - (cousre_detail[0].DisscusRate / (total)).ToDouble(); } } else { if (add) memberModel.DiscussScore = cousre_detail[0].DisscusRate; else memberModel.DiscussScore = 0.0; } if (memberModel.DiscussScore > cousre_detail[0].DisscusRate) { memberModel.DiscussScore = cousre_detail[0].DisscusRate; } if (memberModel.DiscussScore < 0) { memberModel.DiscussScore = 0; } member_classBll.Update(memberModel);//更新班级成员考试分数总值 break; case 3://homework #region objectBll = new Course_UnitHomeWorkBLL(); model = objectBll.GetModel(objectId.Value, ""); model.Score = score; model.ScoreCreater = SiteCache.Instance.ManagerId; objectBll.Update(model);//更新结果表 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "4");//作业类的单元活动数 if (total > 1) { memberModel.HomeWorkScore = (memberModel.HomeWorkScore.HasValue ? memberModel.HomeWorkScore.Value : 0) + (score * (cousre_detail[0].HomeWorkRate) / (total * 100)).ToDouble(); } else { memberModel.HomeWorkScore = (score * (cousre_detail[0].HomeWorkRate) / (100)).ToDouble(); } if (memberModel.HomeWorkScore > cousre_detail[0].HomeWorkRate) { memberModel.HomeWorkScore = cousre_detail[0].HomeWorkRate; } member_classBll.Update(memberModel);//更新班级成员作业分数总值 #endregion break; case 4://question #region objectBll = new Member_ClassUnitContentScheduleBLL(); model = objectBll.GetModel(objectId.Value, ""); oldScore = model.score == null ? 0 : model.score; model.score = score; objectBll.Update(model);//更新班级成员测试分数总值 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "5");//测试类的单元活动数 if (add)//第一次打分 { if (total > 1) { memberModel.TestingScore = (memberModel.TestingScore.HasValue ? memberModel.TestingScore.Value : 0) + (score * (cousre_detail[0].QuestionRate) / (total * 100)).ToDouble(); } else { memberModel.TestingScore = (score * (cousre_detail[0].QuestionRate) / (100)).ToDouble(); } } else//多次打分,重新计算 { var contentList = DataTableToListHelper<Course_UnitContent>.ConvertToModel(unitContentBll.GetUnitByClassAndUnitType(classId, "5")); if (contentList != null) { var scheduleBll = new Member_ClassUnitContentScheduleBLL(); double testscore = 0; foreach (var item in contentList) { var scheduleModel = scheduleBll.GetList("Delflag=0 and ClassId=" + classId + " and AccountId=" + accountId + " AND UnitContent=" + item.Id, ""); if (scheduleModel != null && scheduleModel.Count > 0) { if (scheduleModel.First().score.HasValue) { testscore += (scheduleModel.First().score.Value * (cousre_detail[0].QuestionRate) / (total * 100)).ToDouble(); } } } memberModel.TestingScore = testscore; } } if (memberModel.TestingScore > cousre_detail[0].QuestionRate) { memberModel.TestingScore = cousre_detail[0].QuestionRate; } member_classBll.Update(memberModel);//更新班级成员测试分数总值 #endregion break; case 5://examnation #region objectBll = new Member_ClassUnitContentScheduleBLL(); model = objectBll.GetModel(objectId.Value, ""); oldScore = model.score == null ? 0 : model.score; model.score = score; if (score >= 60)//考试大于等于60分算通过 memberModel.IsPass = true; objectBll.Update(model);//更新班级成员考试分数总值 total = unitContentBll.GetUnitCountByClassAndUnitType(classId, "6");//考试类的单元活动数 if (total > 1) { memberModel.ExaminationScore = (memberModel.ExaminationScore.HasValue ? memberModel.ExaminationScore.Value : 0) + (score * (cousre_detail[0].TestingRate) / (total * 100)).ToDouble(); } else { memberModel.ExaminationScore = (score * (cousre_detail[0].TestingRate) / (100)).ToDouble(); } if (memberModel.ExaminationScore > cousre_detail[0].TestingRate) { memberModel.ExaminationScore = cousre_detail[0].TestingRate; } member_classBll.Update(memberModel);//更新班级成员考试分数总值 #endregion break; case 6://comment #region objectBll = new Member_ClassRegisterBLL(); model = objectBll.GetList(" Delflag=0 and ClassId=" + classId + " and PlanId=" + planId + " and AccountId=" + accountId, "")[0]; model.CommentScore = (score * (cousre_detail[0].CommentRate) / (total * 100)).ToDouble(); objectBll.Update(model);//更新班级成员评价分数总值 #endregion break; default: break; } }