Example #1
0
        public ActionResult GetGroupHomeworkStandings(string Token, int GroupHomeworkID)
        {
            var user = CheckUser(Token);

            if (user == null)
            {
                return(Json(new Base
                {
                    Code = 500,
                    IsSuccess = false,
                    Info = "AccessToken不正确"
                }));
            }
            var homework    = DbContext.GroupHomeworks.Find(GroupHomeworkID);
            var group       = homework.Group;
            var groupmember = (from gm in @group.GroupMembers where gm.UserID == user.ID select gm).FirstOrDefault();

            if (groupmember == null)
            {
                return(Json(new GroupHomeworkStandings
                {
                    Code = 808,
                    IsSuccess = false,
                    Info = "您不是该群的成员"
                }));
            }
            var groupmembers = (from u in @group.GroupMembers
                                select groupmember.User).ToList();
            var groupmember_ids = (from u in groupmembers
                                   select u.ID).ToList();
            var statuses = (from s in DbContext.Statuses
                            where homework.Begin <= s.Time &&
                            s.Time < homework.End &&
                            groupmember_ids.Contains(s.UserID)
                            select s).ToList();
            var ret = new GroupHomeworkStandings {
                Code = 0, IsSuccess = true, Info = "", List = new List <GroupHomeworkStandingsItem>()
            };
            var problems = homework.GroupHomeworkProblems.OrderBy(x => x.Priority).ToList();

            foreach (var u in groupmembers)
            {
                var s = new GroupHomeworkStandingsItem
                {
                    UserID      = u.ID,
                    AvatarURL   = Helpers.Gravatar.GetAvatarURL(u.Gravatar, 180),
                    GroupID     = group.ID,
                    Nickname    = u.Nickname,
                    Problems    = new List <GroupHomeworkProblem>(),
                    TotalPoints = 0
                };
                foreach (var problem in problems)
                {
                    var p = new GroupHomeworkProblem
                    {
                        Code      = null,
                        ProblemID = problem.ProblemID,
                        Title     = problem.Problem.Title,
                        Status    = "未完成",
                        Points    = 0
                    };
                    var status = statuses
                                 .Where(x => x.UserID == u.ID &&
                                        x.ProblemID == problem.ProblemID)
                                 .OrderByDescending(x => x.Time)
                                 .FirstOrDefault();
                    if (status != null)
                    {
                        p.Points = status.JudgeTasks.Where(x => x.Result == Entity.JudgeResult.Accepted).Count() * 100 / status.JudgeTasks.Count;
                        p.Status = problem + "分";
                        if (groupmember.Role >= Entity.GroupRole.Master)
                        {
                            p.Code = status.Code;
                        }
                    }
                    s.Problems.Add(p);
                }
                s.TotalPoints = s.Problems.Sum(x => x.Points);
                ret.List.Add(s);
            }
            return(Json(ret));
        }
Example #2
0
 public ActionResult GetGroupHomeworkStandings(string Token, int GroupHomeworkID)
 {
     var user = CheckUser(Token);
     if (user == null)
         return Json(new Base
         {
             Code = 500,
             IsSuccess = false,
             Info = "AccessToken不正确"
         });
     var homework = DbContext.GroupHomeworks.Find(GroupHomeworkID);
     var group = homework.Group;
     var groupmember = (from gm in @group.GroupMembers where gm.UserID == user.ID select gm).FirstOrDefault();
     if (groupmember == null)
         return Json(new GroupHomeworkStandings
         {
             Code = 808,
             IsSuccess = false,
             Info = "您不是该群的成员"
         });
     var groupmembers = (from u in @group.GroupMembers
                         select groupmember.User).ToList();
     var groupmember_ids = (from u in groupmembers
                            select u.ID).ToList();
     var statuses = (from s in DbContext.Statuses
                     where homework.Begin <= s.Time
                     && s.Time < homework.End
                     && groupmember_ids.Contains(s.UserID)
                     select s).ToList();
     var ret = new GroupHomeworkStandings { Code = 0, IsSuccess = true, Info = "", List = new List<GroupHomeworkStandingsItem>() };
     var problems = homework.GroupHomeworkProblems.OrderBy(x => x.Priority).ToList();
     foreach (var u in groupmembers)
     {
         var s = new GroupHomeworkStandingsItem
         {
             UserID = u.ID,
             AvatarURL = Helpers.Gravatar.GetAvatarURL(u.Gravatar, 180),
             GroupID = group.ID,
             Nickname = u.Nickname,
             Problems = new List<GroupHomeworkProblem>(),
             TotalPoints = 0
         };
         foreach (var problem in problems)
         {
             var p = new GroupHomeworkProblem
             {
                 Code = null,
                 ProblemID = problem.ProblemID,
                 Title = problem.Problem.Title,
                 Status = "未完成",
                 Points = 0
             };
             var status = statuses
                 .Where(x => x.UserID == u.ID
                 && x.ProblemID == problem.ProblemID)
                 .OrderByDescending(x => x.Time)
                 .FirstOrDefault();
             if (status != null)
             {
                 p.Points = status.JudgeTasks.Where(x => x.Result == Entity.JudgeResult.Accepted).Count() * 100 / status.JudgeTasks.Count;
                 p.Status = problem + "分";
                 if (groupmember.Role >= Entity.GroupRole.Master)
                     p.Code = status.Code;
             }
             s.Problems.Add(p);
         }
         s.TotalPoints = s.Problems.Sum(x => x.Points);
         ret.List.Add(s);
     }
     return Json(ret);
 }
Example #3
0
        public ActionResult GetGroupHomeworks(string Token, int GroupID, int?Page)
        {
            var user = CheckUser(Token);

            if (user == null)
            {
                return(Json(new Base
                {
                    Code = 500,
                    IsSuccess = false,
                    Info = "AccessToken不正确"
                }));
            }
            var group       = DbContext.Groups.Find(GroupID);
            var groupmember = (from gm in @group.GroupMembers where gm.UserID == user.ID select gm).FirstOrDefault();

            if (groupmember == null)
            {
                return(Json(new Base
                {
                    Code = 808,
                    IsSuccess = false,
                    Info = "您不是该群的成员"
                }));
            }
            if (Page == null)
            {
                Page = 0;
            }
            var ret = new GroupHomeworks {
                Code = 0, Info = "", IsSuccess = true, List = new List <GroupHomework>(), PageCount = group.GroupHomeworks.Count / 10 + 1
            };
            var homeworks = group.GroupHomeworks.OrderByDescending(x => x.Begin).Skip(Page.Value * 10).Take(10).ToList();

            foreach (var h in homeworks)
            {
                var homework = new GroupHomework
                {
                    Begin       = h.Begin,
                    End         = h.End,
                    Description = h.Description,
                    Title       = h.Title,
                    GroupID     = h.GroupID,
                    Problems    = new List <GroupHomeworkProblem>()
                };
                var problems = h.GroupHomeworkProblems.OrderBy(x => x.Priority);
                foreach (var p in problems)
                {
                    var problem = new GroupHomeworkProblem
                    {
                        ProblemID = p.ID,
                        Title     = p.Problem.Title,
                        Code      = ""
                    };
                    var status = (from s in DbContext.Statuses
                                  where h.Begin <= s.Time &&
                                  s.Time < h.End &&
                                  s.UserID == user.ID
                                  orderby s.Time descending
                                  select s).FirstOrDefault();
                    if (status == null)
                    {
                        problem.Status = "未完成";
                    }
                    else
                    {
                        problem.Points = status.JudgeTasks.Where(x => x.Result == Entity.JudgeResult.Accepted).Count() * 100 / status.JudgeTasks.Count;
                        problem.Status = problem + "分";
                        problem.Code   = status.Code;
                    }
                    homework.Problems.Add(problem);
                }
                ret.List.Add(homework);
            }
            return(Json(ret));
        }
Example #4
0
 public ActionResult GetGroupHomeworks(string Token, int GroupID, int? Page)
 {
     var user = CheckUser(Token);
     if (user == null)
         return Json(new Base
         {
             Code = 500,
             IsSuccess = false,
             Info = "AccessToken不正确"
         });
     var group = DbContext.Groups.Find(GroupID);
     var groupmember = (from gm in @group.GroupMembers where gm.UserID == user.ID select gm).FirstOrDefault();
     if (groupmember == null)
         return Json(new Base
         {
             Code = 808,
             IsSuccess = false,
             Info = "您不是该群的成员"
         });
     if (Page == null) Page = 0;
     var ret = new GroupHomeworks { Code = 0, Info = "", IsSuccess = true, List = new List<GroupHomework>(), PageCount = group.GroupHomeworks.Count / 10 + 1 };
     var homeworks = group.GroupHomeworks.OrderByDescending(x => x.Begin).Skip(Page.Value * 10).Take(10).ToList();
     foreach (var h in homeworks)
     {
         var homework = new GroupHomework
         {
             Begin = h.Begin,
             End = h.End,
             Description = h.Description,
             Title = h.Title,
             GroupID = h.GroupID,
             Problems = new List<GroupHomeworkProblem>()
         };
         var problems = h.GroupHomeworkProblems.OrderBy(x => x.Priority);
         foreach (var p in problems)
         {
             var problem = new GroupHomeworkProblem
             {
                 ProblemID = p.ID,
                 Title = p.Problem.Title,
                 Code = ""
             };
             var status = (from s in DbContext.Statuses
                           where h.Begin <= s.Time
                           && s.Time < h.End
                           && s.UserID == user.ID
                           orderby s.Time descending
                           select s).FirstOrDefault();
             if (status == null)
                 problem.Status = "未完成";
             else
             {
                 problem.Points = status.JudgeTasks.Where(x => x.Result == Entity.JudgeResult.Accepted).Count() * 100 / status.JudgeTasks.Count;
                 problem.Status = problem + "分";
                 problem.Code = status.Code;
             }
             homework.Problems.Add(problem);
         }
         ret.List.Add(homework);
     }
     return Json(ret);
 }