public ActionResult Edit(Models.Moral.Edit vm) { var moralId = 0; var error = new List <string>(); using (var db = new XkSystem.Models.DbContext()) { var isExists = db.Table <Moral.Entity.tbMoral>().Count(p => p.MoralName.Equals(vm.MoralEdit.MoralName) && p.Id != vm.MoralEdit.Id) > 0; if (isExists) { error.AddError("系统中已存在相同名字的德育设置记录!"); } else { if (vm.MoralEdit.ToDate <= vm.MoralEdit.FromDate) { error.AddError("结束时间必须大于开始时间!"); } else { if (vm.MoralEdit.Id == 0) { Entity.tbMoral copyMoral = null; if (vm.CreateWay == "复制历史" && vm.CopyMoralId == 0) { error.Add("请选择复制对象!"); return(Code.MvcHelper.Post(error)); } else { copyMoral = db.Set <Entity.tbMoral>().Find(vm.CopyMoralId); } var tb = new Moral.Entity.tbMoral() { No = vm.MoralEdit.No == null?db.Table <Moral.Entity.tbMoral>().Select(d => d.No).DefaultIfEmpty(0).Max() + 1 : vm.MoralEdit.No.Value, MoralName = vm.MoralEdit.MoralName, tbYear = db.Set <Basis.Entity.tbYear>().Find(vm.MoralEdit.tbYearId), FromDate = vm.MoralEdit.FromDate, IsOpen = vm.MoralEdit.IsOpen, ToDate = vm.MoralEdit.ToDate, MoralType = copyMoral?.MoralType ?? vm.MoralEdit.MoralType }; db.Set <Moral.Entity.tbMoral>().Add(tb); if (db.SaveChanges() > 0) { Sys.Controllers.SysUserLogController.Insert("添加了德育设置!"); if (copyMoral == null) { MoralGroupController.InsertDefault(db, tb.Id); } } moralId = tb.Id; #region 制 if (vm.CreateWay == "复制历史") { //德育班级 var moralClass = (from p in db.Table <Entity.tbMoralClass>().Include(p => p.tbClass) where p.tbMoral.Id == vm.CopyMoralId select p).ToList(); db.Set <Entity.tbMoralClass>().AddRange(moralClass.Select(p => new Entity.tbMoralClass() { No = p.No, tbClass = p.tbClass, tbMoral = tb })); //德育分组 var moralGroup = (from p in db.Table <Entity.tbMoralGroup>() where p.tbMoral.Id == vm.CopyMoralId select p).ToList(); //德育项目 var moralItem = (from p in db.Table <Entity.tbMoralItem>().Include(p => p.tbMoralGroup) where p.tbMoralGroup.tbMoral.Id == vm.CopyMoralId select p).ToList(); List <Entity.tbMoralOption> moralOption = new List <Entity.tbMoralOption>(); //德育选项 if (copyMoral.MoralType == Code.EnumHelper.MoralType.Once) { moralOption = (from p in db.Table <Entity.tbMoralOption>() where p.tbMoralItem.tbMoralGroup.tbMoral.Id == vm.CopyMoralId select p).ToList(); } moralGroup.ForEach(g => { var newGroup = new Entity.tbMoralGroup() { No = g.No, MoralGroupName = g.MoralGroupName, tbMoral = tb }; db.Set <Entity.tbMoralGroup>().Add(newGroup); moralItem.Where(p => p.tbMoralGroup.Id == g.Id).ToList().ForEach(i => { var newItem = new Entity.tbMoralItem() { No = i.No, MinScore = i.MinScore, MaxScore = i.MaxScore, InitScore = i.InitScore, DefaultValue = i.DefaultValue, MoralExpress = i.MoralExpress, MoralItemKind = i.MoralItemKind, MoralItemType = i.MoralItemType, MoralItemName = i.MoralItemName, tbMoralGroup = newGroup }; db.Set <Entity.tbMoralItem>().Add(newItem); //德育选项 if (moralOption != null && moralOption.Any()) { moralOption.Where(o => o.tbMoralItem.Id == i.Id).ToList().ForEach(o => { var newMoralOption = new Entity.tbMoralOption() { No = o.No, MoralOptionName = o.MoralOptionName, MoralOptionValue = o.MoralOptionValue, tbMoralItem = newItem }; db.Set <Entity.tbMoralOption>().Add(newMoralOption); }); } }); }); //德育评价人员不复制,因为日期不一样 if (db.SaveChanges() > 0) { XkSystem.Areas.Sys.Controllers.SysUserLogController.Insert("复制了德育设置!"); } } #endregion } else { var tb = (from p in db.Table <Moral.Entity.tbMoral>() where p.Id == vm.MoralEdit.Id select p).FirstOrDefault(); if (tb != null) { moralId = tb.Id; tb.No = vm.MoralEdit.No == null?db.Table <Moral.Entity.tbMoral>().Select(d => d.No).DefaultIfEmpty(0).Max() + 1 : (int)vm.MoralEdit.No; tb.MoralName = vm.MoralEdit.MoralName; tb.tbYear = db.Set <Basis.Entity.tbYear>().Find(vm.MoralEdit.tbYearId); tb.FromDate = vm.MoralEdit.FromDate; tb.ToDate = vm.MoralEdit.ToDate; tb.IsOpen = vm.MoralEdit.IsOpen; tb.MoralType = vm.MoralEdit.MoralType; if (db.SaveChanges() > 0) { XkSystem.Areas.Sys.Controllers.SysUserLogController.Insert("修改了德育设置"); } } else { error.AddError(Resources.LocalizedText.MsgNotFound); } } } } if (string.IsNullOrWhiteSpace(Request["Step"].ConvertToString())) { return(Code.MvcHelper.Post(error, Url.Action("List"))); } else { return(Code.MvcHelper.Post(error, Url.Action("List", "MoralClass", new { MoralId = moralId }))); } } }
private void SetVmDataForStar(Models.MoralRedFlag.List vm, XkSystem.Models.DbContext db, Entity.tbMoral moral) { vm.MoralList = MoralController.SelectList(); var classIds = new List <int>(); //管理员不限制班级 if (Code.Common.UserType == Code.EnumHelper.SysUserType.Administrator) { classIds = (from p in db.Table <Entity.tbMoralClass>() where p.tbMoral.Id == vm.MoralId select p.tbClass.Id).ToList(); } else { classIds = ( from p in db.Table <Entity.tbMoralClass>() join ct in db.Table <Basis.Entity.tbClassTeacher>() on p.tbClass.Id equals ct.tbClass.Id where p.tbMoral.Id == vm.MoralId && ct.tbTeacher.tbSysUser.Id == Code.Common.UserId select p.tbClass.Id ).ToList(); } if (classIds == null || !classIds.Any()) { vm.DataIsNull = true; return; } //vm.MoralItemList = MoralItemController.SelectListByMoralIdAndKind(vm.MoralId, Code.EnumHelper.MoralItemKind.Class); vm.MoralItemList = (from p in db.Table <Moral.Entity.tbMoralItem>() where p.tbMoralGroup.tbMoral.Id == vm.MoralId && (p.MoralItemKind == Code.EnumHelper.MoralItemKind.Class || p.MoralItemKind == Code.EnumHelper.MoralItemKind.Student) select new Dto.MoralItem.Info() { Id = p.Id, MoralItemName = p.MoralItemName, MoralGroupId = p.tbMoralGroup.Id, DefaultValue = p.DefaultValue, MaxScore = p.MaxScore, MinScore = p.MinScore, InitScore = p.InitScore }).ToList(); //var weekNum = Code.DateHelper.GetWeekNumOfYearByDate(DateTime.Now); //var startDate = Code.DateHelper.GetDateTimeByWeekNumOfYear(DateTime.Now.Year, weekNum); //var endDate = startDate.AddDays(8).AddSeconds(-1); DateTime startDate; DateTime endDate; var weekNum = vm.WeekNum.HasValue ? vm.WeekNum.Value : Code.DateHelper.GetWeekNumOfYearByDate(DateTime.Now); if (!vm.WeekNum.HasValue) { vm.WeekNum = weekNum; } Code.DateHelper.GetWeekDate(DateTime.Now.Year, weekNum, out startDate, out endDate); //vm.MoralStudentList = Student.Controllers.StudentController.GetStudentInfoListByClassIds(classIds); vm.MoralClassInfo = (from p in db.Table <Entity.tbMoralClass>() join mr in db.Table <Entity.tbMoralRedFlag>() on new { moralId = p.tbMoral.Id, classId = p.tbClass.Id, weekNum = vm.WeekNum.Value } equals new { moralId = mr.tbMoral.Id, classId = mr.tbClass.Id, weekNum = mr.WeekNum } into redFlag from r in redFlag.DefaultIfEmpty() where p.tbMoral.Id == vm.MoralId && classIds.Contains(p.tbClass.Id) select new Dto.MoralRedFlag.ClassInfo { Id = p.tbClass.Id, ClassName = p.tbClass.ClassName, IsRedFlag = r != null && !r.IsDisabled }).ToList(); //流动红旗和每周之星不一样,流动红旗也累加班级及班级下面学生/*、小组*/的分数 var moralData = (from p in db.Table <Entity.tbMoralData>() //join c in db.Table<Basis.Entity.tbClassStudent>() on p.tbStudent.Id equals c.tbStudent.Id into tbClassStudent //from cs in tbClassStudent.DefaultIfEmpty() where p.CheckStatus == Code.EnumHelper.CheckStatus.Success && p.tbMoralItem.tbMoralGroup.tbMoral.Id == vm.MoralId && (p.tbStudent != null || p.tbClass != null /*|| p.tbClassGroup!=null*/) && p.MoralDate >= startDate && p.MoralDate <= endDate select new { MoralItemId = p.tbMoralItem.Id, ClassId = p.tbClass != null ? p.tbClass.Id : 0, StudentId = p.tbStudent != null ? p.tbStudent.Id : 0, //AddScore = p.DataText.Value > 0 ? p.DataText.Value : 0, //SubScore = p.DataText.Value < 0 ? (0 - p.DataText.Value) : 0, DefaultValue = p.tbMoralItem.DefaultValue, Score = p.DataText.Value }).ToList(); var classData = moralData.Where(p => p.StudentId == 0).GroupBy(p => new { p.MoralItemId, p.ClassId, p.DefaultValue }).Select(p => new { ClassId = p.Key.ClassId, MoralItemId = p.Key.MoralItemId, DefaultValue = p.Key.DefaultValue, //AddScore = p.Sum(d => d.AddScore), //SubScore = p.Sum(d => d.SubScore), Score = p.Sum(d => d.Score) }).ToList(); var studentData = moralData.Where(p => p.StudentId > 0).GroupBy(p => new { p.MoralItemId, p.ClassId, p.DefaultValue }).Select(p => new { ClassId = p.Key.ClassId, MoralItemId = p.Key.MoralItemId, DefaultValue = p.Key.DefaultValue, //AddScore = p.Sum(d => d.AddScore), //SubScore = p.Sum(d => d.SubScore), Score = p.Sum(d => d.Score) }).ToList(); classData.AddRange(studentData); dynamic data; if (classData != null && classData.Any()) { data = classData.GroupBy(p => new { p.ClassId, p.MoralItemId, p.DefaultValue, p.Score }).Select(p => new { ClassId = p.Key.ClassId, MoralItemId = p.Key.MoralItemId, DefaultValue = p.Sum(d => d.DefaultValue), Score = p.Sum(d => d.Score) }).ToList(); } vm.MoralClassInfo.ForEach(p => { var entity = new Dto.MoralStat.RedFlag() { ClassId = p.Id, ClassName = p.ClassName, IsRedFlag = p.IsRedFlag, MoralItemList = new List <Dto.MoralStat.MoralItemList>() }; vm.MoralItemList.ForEach(i => { var itemData = new Dto.MoralStat.MoralItemList() { Id = i.Id, MoralItemName = i.MoralItemName, DefaultValue = i.DefaultValue }; var hasData = classData != null && classData.Any() ? classData.Where(d => d.ClassId == entity.ClassId && d.MoralItemId == i.Id).ToList() : null; if (hasData != null && hasData.Any()) { itemData.DefaultValue = hasData.Select(d => d.DefaultValue).FirstOrDefault(); //itemData.AddScore = hasData.Select(d => d.AddScore).FirstOrDefault(); //itemData.SubScore = hasData.Select(d => d.SubScore).FirstOrDefault(); itemData.RealScore = hasData.Select(d => d.Score).FirstOrDefault(); } entity.MoralItemList.Add(itemData); entity.TotalScore = entity.MoralItemList.Sum(s => (s.DefaultValue + s.RealScore)); entity.TotalDefaultValue = entity.MoralItemList.Sum(s => s.DefaultValue); //entity.TotalAddScore = entity.MoralItemList.Sum(s => s.AddScore); //entity.TotalSubScore = entity.MoralItemList.Sum(s => s.SubScore); }); vm.StatList.Add(entity); }); vm.StatList.ForEach(p => { p.Ranking = vm.StatList.Count(s => s.TotalScore > p.TotalScore) + 1; }); vm.StatList = vm.StatList.OrderBy(p => p.Ranking).ToList(); }