示例#1
0
        // GET: Moral/MoralReport
        public ActionResult List()
        {
            var vm = new Models.MoralReport.List();

            using (var db = new XkSystem.Models.DbContext())
            {
                vm.MoralList = MoralController.SelectList();

                if (vm.MoralId == 0 && vm.MoralList.Count() > 0)
                {
                    vm.MoralId = vm.MoralList.Select(t => t.Value).FirstOrDefault().ConvertToInt();
                }

                var moral = db.Set <Entity.tbMoral>().Find(vm.MoralId);
                if (moral == null)
                {
                    var endDate = DateTime.Now.Date;
                    moral = (from p in db.Table <Entity.tbMoral>() where endDate <= p.ToDate && DateTime.Now >= p.FromDate select p).FirstOrDefault();
                }
                if (moral == null)
                {
                    vm.MoralIsNull = true;
                    return(View(vm));
                }

                if ((!vm.FromDate.HasValue || !vm.ToDate.HasValue) || vm.ToDate <= vm.FromDate)
                {
                    vm.FromDate = moral.FromDate;
                    vm.ToDate   = moral.ToDate;
                }

                SetVmData(db, vm);
            }
            return(View(vm));
        }
        public ActionResult Check()
        {
            using (var db = new XkSystem.Models.DbContext())
            {
                var vm = new Models.MoralData.List();

                var tb = (from p in db.Table <Moral.Entity.tbMoralData>() /*where p.tbMoralItem.tbMoralGroup.tbMoral.MoralType == Code.EnumHelper.MoralType.Once*/ select p);
                if (vm.MoralId.HasValue && vm.MoralId.Value > 0)
                {
                    tb = tb.Where(p => p.tbMoralItem.tbMoralGroup.tbMoral.Id == vm.MoralId.Value);
                }
                if (!string.IsNullOrWhiteSpace(vm.SearchText))
                {
                    tb = tb.Where(p => p.tbStudent.StudentCode.Contains(vm.SearchText) || p.tbStudent.StudentName.Contains(vm.SearchText));
                }

                if (Code.Common.UserType != Code.EnumHelper.SysUserType.Administrator)
                {
                    tb = tb.Where(p => p.tbSysUser.Id == Code.Common.UserId);
                }


                vm.MoralDataList = (from p in tb
                                    orderby p.InputDate descending
                                    select new Dto.MoralData.List()
                {
                    Id = p.Id,
                    No = p.No,
                    DataText = p.DataText,
                    MoralName = p.tbMoralItem.tbMoralGroup.tbMoral.MoralName,
                    InputDate = p.InputDate,
                    MoralDate = p.MoralDate,
                    MoralItemId = p.tbMoralItem.Id,
                    MoralId = p.tbMoralItem.tbMoralGroup.tbMoral.Id,
                    MoralItemName = p.tbMoralItem.MoralItemName,
                    MoralOptionId = p.tbMoralOption != null ? p.tbMoralOption.Id : 0,
                    MoralOptionName = p.tbMoralOption != null ? p.tbMoralOption.MoralOptionName : "-",
                    MoralOptionScore = p.tbMoralOption != null ? p.tbMoralOption.MoralOptionValue : Decimal.Zero,
                    StudentGroupName = p.tbClassGroup != null ? p.tbClassGroup.ClassGroupName : "-",
                    ClassName = p.tbClass != null ? p.tbClass.ClassName : "-",
                    StudentName = p.tbStudent != null ? p.tbStudent.StudentName : "-",
                    SysUserName = p.tbSysUser.UserName,
                    CheckStatus = p.CheckStatus
                }).ToPageList(vm.Page);
                //vm.MoralList = MoralController.SelectList(Code.EnumHelper.MoralType.Once);

                vm.MoralList = MoralController.SelectList();



                //vm.MoralClassList
                return(View(vm));
            }
        }
        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();
        }
        public ActionResult Edit()
        {
            using (var db = new XkSystem.Models.DbContext())
            {
                var vm    = new Models.MoralData.Edit();
                var moral = db.Set <Moral.Entity.tbMoral>().Find(vm.MoralId);
                if (moral == null)
                {
                    //moral = (from p in db.Table<Moral.Entity.tbMoral>() where DateTime.Now <= p.ToDate && DateTime.Now >= p.FromDate && p.IsOpen select p).FirstOrDefault();
                    moral = (from p in db.Table <Moral.Entity.tbMoral>() where p.IsOpen select p).FirstOrDefault();
                }
                if (moral == null)
                {
                    vm.DataIsNull = true;
                    return(View(vm));
                    //return RedirectToAction("List", "Moral");
                }
                switch (moral.MoralType)
                {
                case Code.EnumHelper.MoralType.Once:
                    return(RedirectToAction("OnceEdit", new { MoralId = vm.MoralId }));

                case Code.EnumHelper.MoralType.Days:
                    return(RedirectToAction("DayEdit", new { MoralId = vm.MoralId }));
                }

                if (vm.MoralDate == Code.DateHelper.MinDate)
                {
                    vm.MoralDate = DateTime.Now.Date;
                }
                vm.MoralId = moral.Id;

                vm.MoralClassList = MoralClassController.SelectList(vm.MoralId);

                if (vm.ClassId == 0 && vm.MoralClassList != null && vm.MoralClassList.Any())
                {
                    vm.ClassId = vm.MoralClassList[0].ClassId;
                }

                if (Code.Common.UserType != Code.EnumHelper.SysUserType.Administrator)
                {
                    //获取拥有评价权限的德育选项及班级列表
                    var classList = (from p in db.Table <Entity.tbMoralPowerClass>()
                                     where p.tbMoralPower.tbTeacher.tbSysUser.Id == Code.Common.UserId &&
                                     (p.tbMoralPower.MoralDate == vm.MoralDate || !p.tbMoralPower.MoralDate.HasValue) &&
                                     p.tbMoralPower.tbMoralItem.tbMoralGroup.tbMoral.Id == vm.MoralId
                                     select new //Models.MoralPower.Info()
                    {
                        MoralItemId = p.tbMoralPower.tbMoralItem.Id,
                        MoralItemName = p.tbMoralPower.tbMoralItem.MoralItemName,
                        ClassId = p.tbClass.Id,
                        ClassName = p.tbClass.ClassName
                    }).ToList();

                    classList.RemoveAll(p => !vm.MoralClassList.Select(t => t.ClassId).ToList().Contains(p.ClassId));

                    vm.MoralPowerClass = classList.GroupBy(p => new { p.MoralItemId, p.MoralItemName }).Select(p => new Models.MoralPower.Info()
                    {
                        MoralItemId   = p.Key.MoralItemId,
                        MoralItemName = p.Key.MoralItemName,
                        MoralClass    = new List <Dto.MoralClass.Info>()
                    }).ToList();

                    vm.MoralPowerClass.ForEach(p =>
                    {
                        p.MoralClass = classList.Where(c => c.MoralItemId == p.MoralItemId).Select(c => new Dto.MoralClass.Info()
                        {
                            ClassId   = c.ClassId,
                            ClassName = c.ClassName
                        }).ToList();
                    });
                }

                vm.MoralList = MoralController.SelectList();

                if (vm.MoralClassList == null || !vm.MoralClassList.Any())
                {
                    return(View(vm));
                }


                vm.MoralType = moral.MoralType;
                vm.FromDate  = moral.FromDate.ToString(Code.Common.StringToDate);
                vm.ToDate    = moral.ToDate.ToString(Code.Common.StringToDate);

                vm.KindId = vm.KindId ?? (int)Code.EnumHelper.MoralItemKind.Class;
                if (typeof(Code.EnumHelper.MoralItemKind).IsEnumDefined(vm.KindId))
                {
                    vm.Kind = (Code.EnumHelper.MoralItemKind)System.Enum.Parse(typeof(Code.EnumHelper.MoralItemKind), vm.KindId.ToString());
                }

                //分组列表
                vm.MoralGroupList = MoralGroupController.GetMoralGroupInfoList(vm.MoralId, vm.Kind);

                foreach (var group in vm.MoralGroupList)
                {
                    //根据分组获取德育选项
                    vm.MoralItemList.AddRange(MoralItemController.SelectList(group.Id, vm.Kind));

                    ////根据分组及评价权限获取德育选项
                    //var tb=(from p in db.Table<tbMoralPowerClass>)
                }

                vm.MoralItemIsNull = vm.MoralItemList == null || vm.MoralItemList.Count == 0;
                if (vm.MoralItemIsNull)
                {
                    return(View(vm));
                }


                var moralClassIds = vm.MoralClassList.Select(p => p.ClassId).ToList();

                vm.MoralDataList = (from p in db.Table <Moral.Entity.tbMoralData>()
                                    where
                                    p.CheckStatus == Code.EnumHelper.CheckStatus.Success &&
                                    p.tbMoralItem.tbMoralGroup.tbMoral.Id == vm.MoralId &&
                                    p.MoralDate == vm.MoralDate &&
                                    p.MoralItemOperateType == Code.EnumHelper.MoralItemOperateType.Score
                                    select new Dto.MoralData.List()
                {
                    Id = p.Id,
                    StudentId = p.tbStudent != null ? p.tbStudent.Id : 0,
                    StudentGroupId = p.tbClassGroup != null ? p.tbClassGroup.Id : 0,
                    ClassId = p.tbClass != null ? p.tbClass.Id : 0,
                    MoralItemId = p.tbMoralItem.Id,
                    DataText = p.DataText
                }).ToList();

                if (vm.ClassId > 0)
                {
                    moralClassIds = new List <int> {
                        vm.ClassId.Value
                    };
                }

                switch (vm.Kind)
                {
                case Code.EnumHelper.MoralItemKind.Student:
                    vm.StudentList = Student.Controllers.StudentController.GetStudentInfoListByClassIds(moralClassIds);
                    //vm.MoralClassListItem = MoralClassController.SelectItemList(vm.MoralId);
                    vm.MoralClassListItem = vm.MoralClassList.Select(p => new SelectListItem()
                    {
                        Text  = p.ClassName,
                        Value = p.ClassId.ToString()
                    }).ToList();
                    break;

                case Code.EnumHelper.MoralItemKind.Group:
                    //vm.MoralClassListItem = MoralClassController.SelectItemList(vm.MoralId);
                    vm.StudentGroupList   = Basis.Controllers.ClassGroupController.SelectList(moralClassIds);
                    vm.MoralClassListItem = vm.MoralClassList.Select(p => new SelectListItem()
                    {
                        Text  = p.ClassName,
                        Value = p.ClassId.ToString()
                    }).ToList();
                    break;

                case Code.EnumHelper.MoralItemKind.Class:
                    break;
                }
                return(View(vm));
            }
        }
        public ActionResult DayEdit()
        {
            using (var db = new XkSystem.Models.DbContext())
            {
                var vm    = new Models.MoralData.DayEdit();
                var moral = db.Set <Moral.Entity.tbMoral>().Find(vm.MoralId);

                if (moral == null)
                {
                    moral = (from p in db.Table <Moral.Entity.tbMoral>() where DateTime.Now <= p.ToDate && DateTime.Now >= p.FromDate select p).FirstOrDefault();
                }

                if (moral == null)
                {
                    vm.DataIsNull = true;
                    return(View(vm));
                    //return RedirectToAction("List", "Moral");
                }

                switch (moral.MoralType)
                {
                case Code.EnumHelper.MoralType.Many:
                    return(RedirectToAction("Edit", new { MoralId = vm.MoralId }));

                case Code.EnumHelper.MoralType.Once:
                    return(RedirectToAction("OnceEdit", new { MoralId = vm.MoralId }));
                }

                if (vm.MoralDate == Code.DateHelper.MinDate)
                {
                    vm.MoralDate = moral.FromDate;
                }

                vm.MoralId        = moral.Id;
                vm.MoralClassList = MoralClassController.SelectList(vm.MoralId);
                vm.MoralGroupList = MoralGroupController.GetMoralGroupInfoList(vm.MoralId);
                vm.MoralList      = MoralController.SelectList();

                vm.MoralType = moral.MoralType;

                vm.FromDate = moral.FromDate.ToString(Code.Common.StringToDate);
                vm.ToDate   = moral.ToDate.ToString(Code.Common.StringToDate);

                foreach (var group in vm.MoralGroupList)
                {
                    vm.MoralItemList.AddRange(MoralItemController.SelectList(group.Id));
                }
                foreach (var item in vm.MoralItemList)
                {
                    vm.MoralOptionList.AddRange(MoralOptionController.SelectList(item.Id));
                }
                var moralClassIds = (from p in db.Table <Moral.Entity.tbMoralClass>() where p.tbMoral.Id == vm.MoralId select p.tbClass.Id).ToList();
                vm.StudentList = Student.Controllers.StudentController.GetStudentInfoListByClassIds(moralClassIds);

                var moralItemIds = vm.MoralItemList.Select(p => p.Id);
                vm.MoralDataList = (from p in db.Table <Moral.Entity.tbMoralData>()
                                    where
                                    p.CheckStatus == Code.EnumHelper.CheckStatus.Success &&
                                    moralItemIds.Contains(p.tbMoralItem.Id) &&
                                    vm.MoralDate == p.MoralDate
                                    orderby p.No
                                    select new Dto.MoralData.OnceList()
                {
                    Id = p.Id,
                    DataText = p.DataText,
                    MoralItemId = p.tbMoralItem.Id,
                    MoralOptionId = p.tbMoralOption != null ? p.tbMoralOption.Id : 0,
                    StudentId = p.tbStudent.Id,
                    StudentName = p.tbStudent.StudentName,
                    SysUserName = p.tbSysUser.UserName
                }).ToList();


                return(View(vm));
            }
        }