using System; using System.Collections.Generic; using System.Linq; using System.Text; using Bowin.Common.Linq; using Bowin.Common.Linq.Entity; using EMIS.ViewModel.ScoreManage; using EMIS.ViewModel; using EMIS.CommonLogic.SystemServices; using EMIS.Entities; using System.Linq.Expressions; using EMIS.DataLogic.ScoreManage; using EMIS.CommonLogic.CalendarManage; using System.Transactions; using EMIS.DataLogic.EducationManage; using EMIS.Utility; namespace EMIS.CommonLogic.ScoreManage { public class ScoreConvertByApplyServices : BaseWorkflowServices, IScoreConvertByApplyServices, IFileUploadServices { public StudentScoreDAL studentScoreDAL { get; set; } public ScoreConvertByApplyDAL scoreConvertByApplyDAL { get; set; } public ISchoolYearServices schoolYearServices { get; set; } public IParameterServices parameterServices { get; set; } public ExecutablePlanDAL ExecutablePlanDAL { get; set; } public IStudentScoreServices studentScoreServices { get; set; } public IGridResultSet GetScoreConvertByApplyViewGrid(ConfiguretView conditionView, Guid? schoolyearID, Guid? collegeID, int? yearID, int? standardID, Guid? classmajorID, Guid? coursematerialID, int? recordStatus, int? pageIndex, int? pageSize) { var curUser = EMIS.Utility.FormValidate.CustomPrincipal.Current; var statusViewList = this.GetStatusViewList(); Expression> exp = (x => true); Expression> facultyExp = (x => true); Expression> gradeExp = (x => true); Expression> classExp = (x => true); if (schoolyearID.HasValue) { exp = exp.And(x => x.SchoolyearID == schoolyearID); } if (collegeID.HasValue) { facultyExp = facultyExp.And(x => x.CollegeID == collegeID); } if (yearID.HasValue) { gradeExp = gradeExp.And(x => x.GradeID == yearID); } if (standardID.HasValue) { facultyExp = facultyExp.And(x => x.StandardID == standardID); } if (classmajorID.HasValue) { classExp = classExp.And(x => x.ClassmajorID == classmajorID.Value); } if (coursematerialID.HasValue) { exp = exp.And(x => x.CoursematerialID == coursematerialID); } if (recordStatus.HasValue) { exp = exp.And(x => x.RecordStatus == recordStatus); } //学生登录只看到自己的信息 if (curUser.IsStudent) { exp = exp.And(x => x.UserID == curUser.UserID); } var query = scoreConvertByApplyDAL.GetScoreConvertByApplyViewQueryable(exp, facultyExp, gradeExp, classExp); if (!string.IsNullOrEmpty(conditionView.ConditionValue)) query = query.DynamicWhere(conditionView.Attribute, conditionView.Condition, conditionView.ConditionValue.Trim()); query = this.GetQueryByDataRangeByCollege(query); query = query.OrderByDescending(x => x.SchoolyearCode) .ThenBy(x => x.CollegeNo.Length).ThenBy(x => x.CollegeNo) .ThenBy(x => x.StandardID) .ThenBy(x => x.ClassmajorNo) .ThenBy(x => x.LoginID); var result = query.ToGridResultSet(pageIndex, pageSize); result.rows.ForEach(x => x.RecordStatusDesc = statusViewList.Where(w => w.ID == x.RecordStatus).Select(w => w.Name).FirstOrDefault()); return result; } public List GetScoreConvertByApplyViewList(ConfiguretView conditionView, Guid? schoolyearID, Guid? collegeID, int? yearID, int? standardID, Guid? classmajorID, Guid? coursematerialID, int? recordStatus, List idList) { var curUser = EMIS.Utility.FormValidate.CustomPrincipal.Current; var statusViewList = this.GetStatusViewList(); Expression> exp = (x => true); Expression> facultyExp = (x => true); Expression> gradeExp = (x => true); Expression> classExp = (x => true); if (schoolyearID.HasValue) { exp = exp.And(x => x.SchoolyearID == schoolyearID); } if (collegeID.HasValue) { facultyExp = facultyExp.And(x => x.CollegeID == collegeID); } if (yearID.HasValue) { gradeExp = gradeExp.And(x => x.GradeID == yearID); } if (standardID.HasValue) { facultyExp = facultyExp.And(x => x.StandardID == standardID); } if (classmajorID.HasValue) { classExp = classExp.And(x => x.ClassmajorID == classmajorID.Value); } if (coursematerialID.HasValue) { exp = exp.And(x => x.CoursematerialID == coursematerialID); } if (recordStatus.HasValue) { exp = exp.And(x => x.RecordStatus == recordStatus); } if (idList != null && idList.Count > 0) { exp = exp.And(x => idList.Contains(x.ScoreConvertByApplyID)); } //学生登录只看到自己的信息 if (curUser.IsStudent) { exp = exp.And(x => x.UserID == curUser.UserID); } var query = scoreConvertByApplyDAL.GetScoreConvertByApplyViewQueryable(exp, facultyExp, gradeExp, classExp); if (!string.IsNullOrEmpty(conditionView.ConditionValue)) query = query.DynamicWhere(conditionView.Attribute, conditionView.Condition, conditionView.ConditionValue.Trim()); query = this.GetQueryByDataRangeByCollege(query); query = query.OrderByDescending(x => x.SchoolyearCode) .ThenBy(x => x.CollegeNo.Length).ThenBy(x => x.CollegeNo) .ThenBy(x => x.StandardID) .ThenBy(x => x.ClassmajorNo) .ThenBy(x => x.LoginID); var result = query.ToList(); result.ForEach(x => x.RecordStatusDesc = statusViewList.Where(w => w.ID == x.RecordStatus).Select(w => w.Name).FirstOrDefault()); return result; } public ScoreConvertByApplyView GetScoreConvertByApplyView(Guid? scoreConvertByApplyID) { var statusViewList = this.GetStatusViewList(); var scoreConvertByApplyView = this.scoreConvertByApplyDAL.GetScoreConvertByApplyViewQueryable(x => x.ScoreConvertByApplyID == scoreConvertByApplyID, (x => true), (x => true), (x => true)).FirstOrDefault(); if (scoreConvertByApplyView != null) { scoreConvertByApplyView.RecordStatusDesc = statusViewList.Where(x => x.ID == scoreConvertByApplyView.RecordStatus).Select(x => x.Name).FirstOrDefault(); } return scoreConvertByApplyView; } public void Save(ScoreConvertByApplyView scoreConvertByApplyView, List fileList) { try { var statusViewList = this.GetStatusViewList(); var status = this.GetStartStatus(); var returnStatus = this.GetBackpointStatus(); var schoolyear = schoolYearServices.GetCurrentSchoolYear(); ER_ScoreConvertByApply dbScoreConvert = scoreConvertByApplyDAL.scoreConvertByApplyRepository.Entities.Where(x => x.ScoreConvertByApplyID == scoreConvertByApplyView.ScoreConvertByApplyID && x.UserID == scoreConvertByApplyView.UserID && x.ScoreConvertByApplyID != scoreConvertByApplyView.ScoreConvertByApplyID).FirstOrDefault(); if (dbScoreConvert != null) { throw new Exception("该课程已经申请过认定,不能重复申请。"); } ER_ScoreConvertByApply scoreConvert = null; List addAttachmentList = new List(); var dbScoreConvertByApply = scoreConvertByApplyDAL.scoreConvertByApplyRepository.GetSingle(x => x.ScoreConvertByApplyID == scoreConvertByApplyView.ScoreConvertByApplyID); if (dbScoreConvertByApply == null) { scoreConvert = new ER_ScoreConvertByApply(); scoreConvert.ScoreConvertByApplyID = Guid.NewGuid(); SetNewStatus(scoreConvert); UnitOfWork.Add(scoreConvert); if (fileList != null && fileList.Count > 0) { foreach (var file in fileList) { ER_ScoreConvertByApplyAttachment attachment = new ER_ScoreConvertByApplyAttachment(); attachment.ScoreConvertByApplyAttachmentID = Guid.NewGuid(); attachment.ScoreConvertByApplyID = scoreConvert.ScoreConvertByApplyID; attachment.Name = file.FileName; attachment.Url = file.FileUrl; this.SetNewStatus(attachment); scoreConvert.ER_ScoreConvertByApplyAttachment.Add(attachment); } } } else { scoreConvert = this.scoreConvertByApplyDAL.scoreConvertByApplyRepository .GetSingle(x => x.ScoreConvertByApplyID == scoreConvertByApplyView.ScoreConvertByApplyID); if (scoreConvert.RecordStatus != status && !returnStatus.Contains(scoreConvert.RecordStatus)) { throw new Exception("该信息处于待审核或已通过状态,不能修改"); } if (scoreConvert == null) { throw new Exception("当前编辑的记录可能已被其他人删除。"); } SetModifyStatus(scoreConvert); if (scoreConvertByApplyView.IsChangeAttachment == 1) { UnitOfWork.Remove(x => x.ScoreConvertByApplyID == scoreConvertByApplyView.ScoreConvertByApplyID); if (fileList != null && fileList.Count > 0) { foreach (var file in fileList) { ER_ScoreConvertByApplyAttachment attachment = new ER_ScoreConvertByApplyAttachment(); attachment.ScoreConvertByApplyAttachmentID = Guid.NewGuid(); attachment.ScoreConvertByApplyID = scoreConvert.ScoreConvertByApplyID; attachment.Name = file.FileName; attachment.Url = file.FileUrl; this.SetNewStatus(attachment); scoreConvert.ER_ScoreConvertByApplyAttachment.Add(attachment); //addAttachmentList.Add(attachment); } } } } scoreConvert.SchoolyearID = schoolyear.SchoolYearID; scoreConvert.UserID = scoreConvertByApplyView.UserID; scoreConvert.CoursematerialID = scoreConvertByApplyView.CoursematerialID; scoreConvert.TotalScore = scoreConvertByApplyView.TotalScore; scoreConvert.Reason = scoreConvertByApplyView.Reason; UnitOfWork.Commit(); } catch (Exception) { throw; } } public void Delete(IList scoreConvertByApplyIDList) { if (scoreConvertByApplyIDList.Count > 0) { var canDeleteStatus = new List(); canDeleteStatus.Add(this.GetStartStatus()); canDeleteStatus.AddRange(this.GetBackpointStatus()); var canDeleteStatusDesc = this.GetStatusViewList().Where(x => canDeleteStatus.Contains(x.ID)).Select(x => x.Name); var scoreConvertByApplyList = scoreConvertByApplyDAL.scoreConvertByApplyRepository.GetList(x => scoreConvertByApplyIDList.Contains(x.ScoreConvertByApplyID)).ToList(); if (scoreConvertByApplyList.Any(x => !canDeleteStatus.Contains(x.RecordStatus))) { throw new Exception("只能删除状态为" + string.Join("、", canDeleteStatusDesc) + "的记录。"); } UnitOfWork.Delete(x => scoreConvertByApplyIDList.Contains(x.ScoreConvertByApplyID)); UnitOfWork.Delete(x => scoreConvertByApplyIDList.Contains(x.ScoreConvertByApplyID)); } } public List GetFileList(Guid? formID) { //var socDetailAttachment = SOCDAL.SOCDetailAttachmentRepository.GetSingle(x => x.SOCDetailID == formID); var fileList = scoreConvertByApplyDAL.GetScoreConvertByApplyAttachmentView(x => x.ScoreConvertByApplyID == formID).ToList(); return fileList; } public void Submit(List scoreConvertByReplaceIDList, Guid? userID) { try { this.StartUp(scoreConvertByReplaceIDList, userID.Value); } catch (Exception) { throw; } } public void ScoreConvertByApplyApprove(List idList, Guid userID, Guid actionID, string comment) { try { this.Approve(idList, userID, actionID, comment); } catch (Exception) { throw; } } public IGridResultSet GetAttachment(Guid? scoreConvertByApplyID, int? pageIndex, int? pageSize) { var attachment = scoreConvertByApplyDAL.GetScoreConvertByApplyAttachmentView(x => x.ScoreConvertByApplyID == scoreConvertByApplyID); return attachment.ToGridResultSet(pageIndex, pageSize); } public void OnApproveEnd(List scoreConvertByApplyIDList, Guid? userID) { //获取默认绩点公式 var gradePointFormula = scoreConvertByApplyDAL.GetDefaultGradePointFormula().FirstOrDefault(); //ER_GradePointFormula var scoreConvertByApplyList = scoreConvertByApplyDAL.scoreConvertByApplyRepository.GetList(x => scoreConvertByApplyIDList.Contains(x.ScoreConvertByApplyID)).ToList(); var selectKeyList = scoreConvertByApplyList.Select(x => new { x.UserID, CoursematerialID = x.CoursematerialID }).ToList(); //var submitedScoreList = studentScoreDAL.submitedScoreRepository.Entities.SelectByKeys(selectKeyList); //var submitedScoreIDList = submitedScoreList.Select(x => (Guid?)x.SubmitedScoreID); //var submitedScoreDetailList = studentScoreDAL.SubmitedScoreDetailRepository.GetList(x => submitedScoreIDList.Contains(x.SubmitedScoreID)).ToList(); //var finallyScoreList = studentScoreDAL.FinallyScoreRepository.Entities.SelectByKeys(selectKeyList); //var finallyScoreIDList = finallyScoreList.Select(x => (Guid?)x.FinallyScoreID); //var finallyScoreDetailList = studentScoreDAL.FinallyScoreDetailRepository.GetList(x => finallyScoreIDList.Contains(x.FinallyScoreID)).ToList(); var lastCourseStarttermViewList = ExecutablePlanDAL.GetLastCourseStarttermViewQueryable().SelectByKeys(selectKeyList); //var insertSubmitedScoreBackupList = new List(); //var insertSubmitedScoreDetailBackupList = new List(); var insertSubmitedScoreList = new List(); var insertSubmitedScoreDetailList = new List(); foreach (var scoreConvertByApply in scoreConvertByApplyList) { var submitedScore = lastCourseStarttermViewList.FirstOrDefault(x => x.UserID == scoreConvertByApply.UserID && x.CoursematerialID == scoreConvertByApply.CoursematerialID); var insertSubmitedScore = new ER_SubmitedScore { SubmitedScoreID = Guid.NewGuid(), SchoolyearID = submitedScore.SchoolyearID, SchoolyearNumID = submitedScore.SchoolyearNumID, DepartmentID = submitedScore.DepartmentID, ClassName = submitedScore.ClassName, CoursematerialID = submitedScore.CoursematerialID, CourseTypeID = submitedScore.CourseTypeID, ExamsCategoryID = (int)EMIS.ViewModel.CF_ExamsCategory.FinalExam, ExaminationModeID = submitedScore.ExaminationModeID, HandleModeID = submitedScore.HandleModeID, Credit = submitedScore.Credit, TotalHours = submitedScore.TotalHours, ResultTypeID = submitedScore.ResultTypeID, CreatorUserID = userID, IsEntry = true, ExaminationType = (int)EMIS.ViewModel.CF_ExaminationType.FinalExamination, StarttermID = submitedScore.StarttermID, UserID = submitedScore.UserID, ExamsStateID = (int)CF_ExamsState.NormalExams, TotalScore = scoreConvertByApply.TotalScore, ScoreCredit = scoreConvertByApply.TotalScore >= 60 ? submitedScore.Credit : 0, GradePoint = gradePointFormula == null ? 0 : (scoreConvertByApply.TotalScore >= gradePointFormula.GradePointlimit ? (1 + gradePointFormula.GradePointFloor * (scoreConvertByApply.TotalScore - gradePointFormula.GradePointlimit)) : 0), Remark = Const.ER_SCORECONVERT_BYREPLACE_SCOREREMARK, RecordStatus = (int)SYS_STATUS.USABLE, CreateUserID = userID, CreateTime = DateTime.Now, ModifyUserID = userID, ModifyTime = DateTime.Now }; insertSubmitedScoreList.Add(insertSubmitedScore); } var insertSubmitedScoreIDList = insertSubmitedScoreList.Select(x => x.SubmitedScoreID).ToList(); using (var scope = new TransactionScope(TransactionScopeOption.Required)) { UnitOfWork.BulkInsert(insertSubmitedScoreList); studentScoreServices.RefreshFinallyScoreBySubmitedScoreID(insertSubmitedScoreIDList); scope.Complete(); } } } }