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)); }
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); }