/// <summary> /// 获取日志排行分页集合 /// </summary> /// <remarks>rss订阅也使用方法</remarks> /// <param name="tenantTypeId">租户类型Id</param> /// <param name="ownerId">所有者id</param> /// <param name="categoryId">类别Id</param> /// <param name="tagName">标签名称</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">帖子排序依据</param> /// <param name="pageSize">分页大小</param> /// <param name="pageIndex">页码</param> /// <returns>日志分页列表</returns> public PagingDataSet <BlogThread> Gets(string tenantTypeId, long?ownerId, bool ignoreAudit, bool ignorePrivate, long?categoryId, string tagName, bool?isEssential, SortBy_BlogThread sortBy = SortBy_BlogThread.DateCreated_Desc, int pageSize = 20, int pageIndex = 1) { return(GetPagingEntities(pageSize, pageIndex, CachingExpirationType.UsualObjectCollection, () => { StringBuilder cacheKey = new StringBuilder(); if (ownerId.HasValue) { cacheKey.Append(RealTimeCacheHelper.GetListCacheKeyPrefix(CacheVersionType.AreaVersion, "OwnerId", ownerId.Value)); } cacheKey.AppendFormat("GetBlogs::TenantTypeId-{0}:CategoryId-{1}:TagName-{2}:IsEssential-{3}:SortBy-{4}", tenantTypeId, categoryId, tagName, isEssential, sortBy); return cacheKey.ToString(); }, () => { var sql = Sql.Builder.Select("spb_BlogThreads.*").From("spb_BlogThreads"); var whereSql = Sql.Builder.Where("spb_BlogThreads.IsDraft=0"); var orderSql = Sql.Builder; if (!string.IsNullOrEmpty(tenantTypeId)) { whereSql.Where("spb_BlogThreads.TenantTypeId=@0", tenantTypeId); } if (ownerId.HasValue) { whereSql.Where("spb_BlogThreads.OwnerId=@0", ownerId.Value); } if (!ignoreAudit) { switch (this.PubliclyAuditStatus) { case PubliclyAuditStatus.Again: case PubliclyAuditStatus.Fail: case PubliclyAuditStatus.Pending: case PubliclyAuditStatus.Success: whereSql.Where("spb_BlogThreads.AuditStatus=@0", this.PubliclyAuditStatus); break; case PubliclyAuditStatus.Again_GreaterThanOrEqual: case PubliclyAuditStatus.Pending_GreaterThanOrEqual: whereSql.Where("spb_BlogThreads.AuditStatus>@0", this.PubliclyAuditStatus); break; default: break; } } if (ignorePrivate) { whereSql.Where("spb_BlogThreads.PrivacyStatus<>@0", PrivacyStatus.Private); } if (categoryId.HasValue && categoryId > 0) { sql.InnerJoin("tn_ItemsInCategories").On("spb_BlogThreads.ThreadId=tn_ItemsInCategories.ItemId"); whereSql.Where("tn_ItemsInCategories.CategoryId=@0", categoryId.Value); } if (!string.IsNullOrEmpty(tagName)) { sql.InnerJoin("tn_ItemsInTags").On("spb_BlogThreads.ThreadId = tn_ItemsInTags.ItemId"); whereSql.Where("tn_ItemsInTags.TenantTypeId = @0", TenantTypeIds.Instance().BlogThread()) .Where("tn_ItemsInTags.TagName=@0", tagName); } if (isEssential.HasValue) { whereSql.Where("spb_BlogThreads.IsEssential=@0", isEssential.Value); } CountService countService = new CountService(TenantTypeIds.Instance().BlogThread()); string countTableName = countService.GetTableName_Counts(); switch (sortBy) { case SortBy_BlogThread.DateCreated_Desc: orderSql.OrderBy("spb_BlogThreads.ThreadId desc"); break; case SortBy_BlogThread.CommentCount: sql.LeftJoin(string.Format("(select * from {0} WHERE ({0}.CountType = '{1}')) c", countTableName, CountTypes.Instance().CommentCount())) .On("ThreadId = c.ObjectId"); orderSql.OrderBy("c.StatisticsCount desc"); break; case SortBy_BlogThread.StageHitTimes: StageCountTypeManager stageCountTypeManager = StageCountTypeManager.Instance(TenantTypeIds.Instance().BlogThread()); 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("ThreadId = c.ObjectId"); orderSql.OrderBy("c.StatisticsCount desc"); break; default: orderSql.OrderBy("spb_BlogThreads.ThreadId desc"); break; } sql.Append(whereSql).Append(orderSql); return sql; })); }
/// <summary> /// 获取日志排行分页集合 /// </summary> /// <remarks>rss订阅也使用方法</remarks> /// <param name="tenantTypeId">租户类型Id</param> /// <param name="ownerId">所有者id</param> /// <param name="ignoreAudit">忽略审核状态</param> /// <param name="ignorePrivate">忽略隐私状态为私有的记录</param> /// <param name="categoryId">类别Id</param> /// <param name="tagName">标签名称</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">帖子排序依据</param> /// <param name="pageSize">每页记录数</param> /// <param name="pageIndex">页码</param> /// <returns>日志分页列表</returns> public PagingDataSet <BlogThread> Gets(string tenantTypeId, long?ownerId, bool ignoreAudit, bool ignorePrivate, long?categoryId, string tagName, bool?isEssential, SortBy_BlogThread sortBy = SortBy_BlogThread.DateCreated_Desc, int pageSize = 20, int pageIndex = 1) { //只获取可对外显示审核状态的主题帖 //排除草稿 //缓存周期:常用对象集合,不用维护即时性 //最多获取SecondaryMaxRecords条记录 return(blogThreadRepository.Gets(tenantTypeId, ownerId, ignoreAudit, ignorePrivate, categoryId, tagName, isEssential, sortBy, pageSize, pageIndex)); }
/// <summary> /// 获取日志的排行数据 /// </summary> /// <param name="tenantTypeId">租户类型Id</param> /// <param name="topNumber">前多少条</param> /// <param name="categoryId">类别Id</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">日志排序依据</param> /// <returns>日志列表</returns> public IEnumerable <BlogThread> GetTops(string tenantTypeId, int topNumber, long?categoryId, bool?isEssential, SortBy_BlogThread sortBy) { return(GetTopEntities(topNumber, CachingExpirationType.UsualObjectCollection, () => { StringBuilder cacheKey = new StringBuilder(); cacheKey.AppendFormat("BlogTops::TenantTypeId-{0}:CategoryId-{1}:IsEssential-{2}:SortBy-{3}", tenantTypeId, categoryId, isEssential, sortBy); return cacheKey.ToString(); }, () => { var sql = Sql.Builder.Select("spb_BlogThreads.*") .From("spb_BlogThreads"); var whereSql = Sql.Builder.Where("spb_BlogThreads.PrivacyStatus<>@0", PrivacyStatus.Private) .Where("spb_BlogThreads.IsDraft=0"); if (!string.IsNullOrEmpty(tenantTypeId)) { whereSql.Where("spb_BlogThreads.TenantTypeId=@0", tenantTypeId); } if (categoryId.HasValue && categoryId > 0) { sql.InnerJoin("tn_ItemsInCategories").On("spb_BlogThreads.ThreadId=tn_ItemsInCategories.ItemId"); whereSql.Where("tn_ItemsInCategories.CategoryId=@0", categoryId.Value); } switch (this.PubliclyAuditStatus) { case PubliclyAuditStatus.Again: case PubliclyAuditStatus.Fail: case PubliclyAuditStatus.Pending: case PubliclyAuditStatus.Success: whereSql.Where("spb_BlogThreads.AuditStatus=@0", this.PubliclyAuditStatus); break; case PubliclyAuditStatus.Again_GreaterThanOrEqual: case PubliclyAuditStatus.Pending_GreaterThanOrEqual: whereSql.Where("spb_BlogThreads.AuditStatus>@0", this.PubliclyAuditStatus); break; default: break; } if (isEssential.HasValue) { whereSql.Where("spb_BlogThreads.IsEssential=@0", isEssential); } var orderSql = Sql.Builder; CountService countService = new CountService(TenantTypeIds.Instance().BlogThread()); string countTableName = countService.GetTableName_Counts(); switch (sortBy) { case SortBy_BlogThread.DateCreated_Desc: orderSql.OrderBy("spb_BlogThreads.ThreadId desc"); break; case SortBy_BlogThread.CommentCount: sql.LeftJoin(string.Format("(select * from {0} WHERE ({0}.CountType = '{1}')) c", countTableName, CountTypes.Instance().CommentCount())) .On("ThreadId = c.ObjectId"); orderSql.OrderBy("c.StatisticsCount desc"); break; case SortBy_BlogThread.StageHitTimes: StageCountTypeManager stageCountTypeManager = StageCountTypeManager.Instance(TenantTypeIds.Instance().BlogThread()); 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("ThreadId = c.ObjectId"); orderSql.OrderBy("c.StatisticsCount desc"); break; default: orderSql.OrderBy("spb_BlogThreads.ThreadId desc"); break; } return sql.Append(whereSql).Append(orderSql); })); }
/// <summary> /// 获取日志的排行数据 /// </summary> /// <param name="tenantTypeId">租户类型Id</param> /// <param name="topNumber">前多少条</param> /// <param name="categoryId">类别Id</param> /// <param name="isEssential">是否精华</param> /// <param name="sortBy">日志排序依据</param> /// <returns>日志列表</returns> public IEnumerable <BlogThread> GetTops(string tenantTypeId, int topNumber, long?categoryId, bool?isEssential, SortBy_BlogThread sortBy) { //只获取可对外显示审核状态的主题帖 //缓存周期:常用对象集合,不用维护即时性 //排除草稿 var some = blogThreadRepository.GetTops(tenantTypeId, topNumber, categoryId, isEssential, sortBy); return(blogThreadRepository.GetTops(tenantTypeId, topNumber, categoryId, isEssential, sortBy)); }