예제 #1
0
        public ActionResult GetArticleContentList(ArticleQueryFilter filter, string typeIds)
        {
            if (filter == null)
            {
                throw new ArgumentNullException("filter");
            }

            if (!string.IsNullOrWhiteSpace(typeIds))
            {
                try
                {
                    var typeList = typeIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(i => Convert.ToInt64(i));
                    filter.CategoryIds = typeList;
                }
                catch { }
            }

            if (!string.IsNullOrWhiteSpace(filter.Keywords))
            {
                filter.Keywords = HttpUtility.UrlDecode(filter.Keywords);
            }

            var dataList = ArticleDAL.Instance.GetList(filter);

            return(GenerateContentList(dataList, "ArticleContentList", filter.TotalCount));
        }
예제 #2
0
        /// <summary>
        /// 获得首页表示的文章列表
        /// 按照确认时间排序
        /// </summary>
        /// <param name="p">分页器</param>
        /// <param name="isFirstPage">仅首页</param>
        /// <param name="AddtionalCondition">附加条件</param>
        /// <returns></returns>
        public static List <ArticleItemBody> GetPublicListForArticleByPage(Pages p, ArticleQueryFilter filter)
        {
            //注意这里必须要控制取出的数量,当然现在可以不考虑优化问题
            //所有文章中首页审核通过的,限制数量4000篇(20 * 20)
            //取出后进行缓存
            var sortArgs = new Sort.SortArg[1];

            sortArgs[0] = new Sort.SortArg
            {
                FieldName = nameof(Article.ConfirmDateTime),
                SortType  = Sort.SortType.Descending,
                SortOrder = 1
            };
            //修改后的文章再发布,则发布日期是最新的,这里使用首页审核日期作为排序日期。
            Action <MongoCursor> setCursor = x => { x.SetSkip(p.SkipCount()).SetLimit(p.PageItemCount).SetSortOrder(Sort.GetSortBuilder(sortArgs)); };
            var firstpage = new List <Article>();

            firstpage = MongoDbRepository.GetRecList <Article>(GetQueryByArticelFilter(filter), setCursor);
            var titlelist = new List <ArticleItemBody>();

            foreach (var item in firstpage)
            {
                titlelist.Add(GetArticleItemBodyById(item.Sn));
            }
            return(titlelist);
        }
예제 #3
0
        public ActionResult List(ArticleQueryFilter filter)
        {
            var dataList = ArticleDAL.Instance.GetList(filter);

            return(Json(new
            {
                Rows = dataList,
                Total = filter.TotalCount
            }));
        }
예제 #4
0
        public IActionResult GetArticles([FromQuery] ArticleQueryFilter filters)
        {
            var articles = _articleService.GetArticles(filters);

            var articlesDTO = _mapper.Map <IEnumerable <ArticleDTO> >(articles);

            var response = new ApiResponse <IEnumerable <ArticleDTO> >(articlesDTO);

            var metadata = new
            {
                articles.TotalCount,
                articles.PageSize,
                articles.CurrentPage,
                articles.TotalPages,
                articles.HasNextPage,
                articles.HasPreviousPage
            };

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(metadata));

            return(Ok(response));
        }
예제 #5
0
        public PagedList <Article> GetArticles(ArticleQueryFilter filters)
        {
            var articles = _unitOfWork.ArticleRepository.GetAll();

            if (filters.UserId != null)
            {
                articles = articles.Where(x => x.UserId == filters.UserId);
            }

            if (filters.CreatedAt != null)
            {
                articles = articles.Where(x => x.CreatedAt.ToShortDateString() == filters.CreatedAt?.ToShortDateString());
            }

            if (filters.Description != null)
            {
                articles = articles.Where(x => x.Description.ToLower().Contains(filters.Description.ToLower()));
            }

            var pagedArticles = PagedList <Article> .Create(articles, filters.PageNumber, filters.PageSize);

            return(pagedArticles);
        }
예제 #6
0
        /// <summary>
        /// 获得文章列表查询条件
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public static IMongoQuery GetQueryByArticelFilter(ArticleQueryFilter filter)
        {
            IMongoQuery basicQuery = null;

            if (filter.isFirstPage != null)
            {
                if (basicQuery != null)
                {
                    basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.IsFirstPage), filter.isFirstPage));
                }
                else
                {
                    basicQuery = Query.EQ(nameof(Article.IsFirstPage), filter.isFirstPage);
                }
            }
            if (filter.isPrivate != null)
            {
                if (basicQuery != null)
                {
                    basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.IsPrivate), filter.isPrivate));
                }
                else
                {
                    basicQuery = Query.EQ(nameof(Article.IsPrivate), filter.isPrivate);
                }
            }
            if (filter.statuslist != null)
            {
                IMongoQuery statusQuery = null;
                foreach (var status in filter.statuslist)
                {
                    if (statusQuery != null)
                    {
                        statusQuery = Query.Or(statusQuery, Query.EQ(nameof(Article.PublishStatus), status));
                    }
                    else
                    {
                        statusQuery = Query.EQ(nameof(Article.PublishStatus), status);
                    }
                }
                if (basicQuery != null)
                {
                    basicQuery = Query.And(basicQuery, statusQuery);
                }
                else
                {
                    basicQuery = statusQuery;
                }
            }
            //Owner
            if (!string.IsNullOrEmpty(filter.ownid))
            {
                if (basicQuery != null)
                {
                    basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.OwnerId), filter.ownid));
                }
                else
                {
                    basicQuery = Query.EQ(nameof(Article.OwnerId), filter.ownid);
                }
            }
            if (!string.IsNullOrEmpty(filter.collectionid))
            {
                if (basicQuery != null)
                {
                    basicQuery = Query.And(basicQuery, Query.EQ(nameof(Article.CollectionID), filter.collectionid));
                }
                else
                {
                    basicQuery = Query.EQ(nameof(Article.CollectionID), filter.collectionid);
                }
            }


            IMongoQuery userQuery = null;

            //难度
            if (filter.Levelist != null)
            {
                IMongoQuery levelQuery = null;
                foreach (var level in filter.Levelist)
                {
                    if (levelQuery != null)
                    {
                        levelQuery = Query.Or(levelQuery, Query.EQ(nameof(Article.Level), level));
                    }
                    else
                    {
                        levelQuery = Query.EQ(nameof(Article.Level), level);
                    }
                }
                if (userQuery != null)
                {
                    userQuery = Query.And(userQuery, levelQuery);
                }
                else
                {
                    userQuery = levelQuery;
                }
            }
            //分类
            if (filter.Cataloglist != null)
            {
                IMongoQuery CatalogQuery = null;
                foreach (var catalog in filter.Cataloglist)
                {
                    if (CatalogQuery != null)
                    {
                        CatalogQuery = Query.Or(CatalogQuery, Query.EQ(nameof(Article.Catalog), catalog));
                    }
                    else
                    {
                        CatalogQuery = Query.EQ(nameof(Article.Catalog), catalog);
                    }
                }
                if (userQuery != null)
                {
                    userQuery = Query.And(userQuery, CatalogQuery);
                }
                else
                {
                    userQuery = CatalogQuery;
                }
            }

            //不包含,使用AND连接
            if (filter.AntiTag != null)
            {
                IMongoQuery AntiTagQuery = null;
                foreach (var tag in filter.AntiTag)
                {
                    if (AntiTagQuery != null)
                    {
                        //过滤标签用AND
                        AntiTagQuery = Query.And(AntiTagQuery, Query.NE(nameof(Article.TagName), tag));
                    }
                    else
                    {
                        AntiTagQuery = Query.NE(nameof(Article.TagName), tag);
                    }
                }
                if (userQuery != null)
                {
                    userQuery = Query.And(userQuery, AntiTagQuery);
                }
                else
                {
                    userQuery = AntiTagQuery;
                }
            }


            //注意:这个条件必须写在最后
            //注意:这个条件必须写在最后
            //注意:这个条件必须写在最后
            //包含,使用OR连接
            if (filter.ContainTag != null)
            {
                IMongoQuery ContainTagQuery = null;
                foreach (var tag in filter.ContainTag)
                {
                    if (ContainTagQuery != null)
                    {
                        //过滤标签用AND
                        ContainTagQuery = Query.Or(ContainTagQuery, Query.EQ(nameof(Article.TagName), tag));
                    }
                    else
                    {
                        ContainTagQuery = Query.EQ(nameof(Article.TagName), tag);
                    }
                }
                if (userQuery != null)
                {
                    userQuery = Query.Or(userQuery, ContainTagQuery);
                }
                else
                {
                    userQuery = ContainTagQuery;
                }
            }

            return(userQuery == null ? basicQuery : Query.And(basicQuery, userQuery));
        }