Example #1
0
        /// <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;
            }));
        }
Example #2
0
        /// <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));
        }
Example #3
0
        /// <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);
            }));
        }
Example #4
0
        /// <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));
        }