Example #1
0
        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();
        }