/// <summary> /// 根据不同条件分页获取问题列表(用于前台) /// </summary> /// <remarks> /// 缓存周期:常用对象集合,不用维护即时性 /// </remarks> /// <param name="tenantTypeId">租户类型id</param> /// <param name="tagName">标签</param> /// <param name="status">问题状态</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">排序条件</param> /// <param name="pageSize">分页大小</param> /// <param name="pageIndex">页码</param> /// <returns>问题分页列表</returns> public PagingDataSet <AskQuestion> GetQuestions(string tenantTypeId, string tagName, QuestionStatus?status, bool?isEssential, SortBy_AskQuestion sortBy, int pageSize, int pageIndex) { return(askQuestionRepository.GetQuestions(tenantTypeId, tagName, status, isEssential, sortBy, pageSize, pageIndex)); }
/// <summary> /// 根据不同条件分页获取问题列表(用于前台) /// </summary> /// <param name="tenantTypeId">租户类型id</param> /// <param name="tagName">标签</param> /// <param name="status">问题状态</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">排序条件</param> /// <param name="pageSize">分页大小</param> /// <param name="pageIndex">页码</param> /// <returns>问题分页列表</returns> public Tunynet.PagingDataSet <AskQuestion> GetQuestions(string tenantTypeId, string tagName, QuestionStatus?status, bool?isEssential, SortBy_AskQuestion sortBy, int pageSize, int pageIndex) { return(GetPagingEntities(pageSize, pageIndex, CachingExpirationType.UsualObjectCollection, () => { StringBuilder cacheKey = new StringBuilder(); cacheKey.AppendFormat("GetQuestions::tenantTypeId-{0}:tagName-{1}:status-{2}:isEssential-{3}:sortBy-{4}", tenantTypeId, tagName, status, isEssential, sortBy); return cacheKey.ToString(); }, () => { var sql = Sql.Builder.Select("spb_AskQuestions.*").From("spb_AskQuestions"); var whereSql = Sql.Builder.Where("spb_AskQuestions.Status<>@0", QuestionStatus.Canceled); var orderSql = Sql.Builder; //过滤审核条件 switch (this.PubliclyAuditStatus) { case PubliclyAuditStatus.Again: case PubliclyAuditStatus.Fail: case PubliclyAuditStatus.Pending: case PubliclyAuditStatus.Success: whereSql.Where("spb_AskQuestions.AuditStatus=@0", this.PubliclyAuditStatus); break; case PubliclyAuditStatus.Again_GreaterThanOrEqual: case PubliclyAuditStatus.Pending_GreaterThanOrEqual: whereSql.Where("spb_AskQuestions.AuditStatus>@0", this.PubliclyAuditStatus); break; default: break; } if (!string.IsNullOrEmpty(tenantTypeId)) { whereSql.Where("spb_AskQuestions.TenantTypeId=@0", tenantTypeId); } if (status.HasValue) { whereSql.Where("spb_AskQuestions.Status=@0", status.Value); } if (isEssential.HasValue) { whereSql.Where("spb_AskQuestions.IsEssential=@0", isEssential.Value); } if (!string.IsNullOrEmpty(tagName)) { sql.InnerJoin("tn_ItemsInTags").On("spb_AskQuestions.QuestionId = tn_ItemsInTags.ItemId"); whereSql.Where("tn_ItemsInTags.TenantTypeId = @0", TenantTypeIds.Instance().AskQuestion()) .Where("tn_ItemsInTags.TagName=@0", tagName); } switch (sortBy) { case SortBy_AskQuestion.AnswerCount: orderSql.OrderBy("spb_AskQuestions.AnswerCount desc"); break; case SortBy_AskQuestion.StageHitTimes: CountService countService = new CountService(TenantTypeIds.Instance().AskQuestion()); string countTableName = countService.GetTableName_Counts(); StageCountTypeManager stageCountTypeManager = StageCountTypeManager.Instance(TenantTypeIds.Instance().AskQuestion()); int stageCountDays = stageCountTypeManager.GetMaxDayCount(CountTypes.Instance().HitTimes()); string stageCountType = stageCountTypeManager.GetStageCountType(CountTypes.Instance().HitTimes(), stageCountDays); sql.LeftJoin(string.Format("(select * from {0} WHERE ({0}.CountType = '{1}')) c", countTableName, stageCountType)) .On("QuestionId = c.ObjectId"); orderSql.OrderBy("c.StatisticsCount desc"); break; case SortBy_AskQuestion.Reward: whereSql.Where("spb_AskQuestions.Reward > 0"); orderSql.OrderBy("spb_AskQuestions.Reward desc"); break; default: orderSql.OrderBy("spb_AskQuestions.QuestionId desc"); break; } sql.Append(whereSql).Append(orderSql); return sql; })); }
/// <summary> /// 根据不同条件获取前n条的问题列表(用于前台) /// </summary> /// <remarks> /// 缓存周期:常用对象集合,不用维护即时性 /// </remarks> /// <param name="tenantTypeId">租户类型id</param> /// <param name="topNumber">前多少条</param> /// <param name="status">问题状态</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">排序条件</param> /// <returns>问题列表</returns> public IEnumerable <AskQuestion> GetTopQuestions(string tenantTypeId, int topNumber, QuestionStatus?status, bool?isEssential, SortBy_AskQuestion sortBy) { return(askQuestionRepository.GetTopQuestions(tenantTypeId, topNumber, status, isEssential, sortBy)); }