Esempio n. 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));
        }
Esempio n. 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);
 }