/// <summary> /// 获取题目统计信息 /// </summary> /// <param name="cid">竞赛ID</param> /// <param name="pid">题目ID</param> /// <returns>题目统计信息实体</returns> public static ProblemStatistic GetProblemStatistic(Int32 cid, Int32 pid) { //此处不能验证cid,因为普通Problem的Statistic也经由此方法 if (pid < ConfigurationManager.ProblemSetStartID) { throw new InvalidRequstException(RequestType.Problem); } //验证pid有效性 if (cid < 0)//非竞赛题目 { ProblemEntity entity = ProblemManager.GetProblem(pid); pid = entity.ProblemID; } else//竞赛题目 { ProblemEntity entity = ContestProblemManager.GetProblem(cid, pid); //竞赛题目传入的pid是ContestProblemID } ProblemStatistic statistic = SolutionCache.GetProblemStatisticCache(cid, pid); if (statistic == null) { statistic = SolutionRepository.Instance.GetProblemStatistic(cid, pid);//一定有返回值 } return(statistic); }
/// <summary> /// 获取竞赛排行Excel文件 /// </summary> /// <param name="cid">竞赛ID</param> /// <param name="userrealnames">用户姓名对照表</param> /// <returns>竞赛排行</returns> public static IMethodResult AdminGetExportRanklist(Int32 cid, String userrealnames) { if (!AdminManager.HasPermission(PermissionType.ContestManage)) { throw new NoPermissionException(); } ContestEntity contest = ContestManager.GetContest(cid); Dictionary <String, String> userdict = null; Dictionary <String, RankItem> rank = SolutionRepository.Instance.GetContestRanklist(contest.ContestID, contest.StartTime); List <ContestProblemEntity> problemlist = ContestProblemManager.GetContestProblemList(contest.ContestID); List <RankItem> list = new List <RankItem>(); foreach (RankItem userRank in rank.Values) { list.Add(userRank); } list.Sort(); if (!String.IsNullOrEmpty(userrealnames)) { userdict = new Dictionary <String, String>(); String[] nametable = userrealnames.Lines(); for (Int32 i = 0; i < nametable.Length; i++) { if (String.IsNullOrEmpty(nametable[i])) { continue; } String[] namepair = nametable[i].Replace('\t', ' ').Split(' '); if (namepair.Length == 2 && !String.IsNullOrEmpty(namepair[0]) && !String.IsNullOrEmpty(namepair[1])) { userdict.Add(namepair[0], namepair[1]); } } } Byte[] data = ContestResultExport.ExportResultToExcel(contest, problemlist, list, userdict); return(MethodResult.SuccessAndLog <Byte[]>(data, "Admin export contest result, id = {0}", cid.ToString())); }