public async Task <IActionResult> GetNewsAsync([FromHeader] String source, [FromRoute] SiteIdRoute route) { var response = new Response <NewsResponse>(); try { var request = new GetDescriptor <WebNewsDoc>(_IWebNewsElastic.IndexName, route.id); // 排除返回字段 request.SourceExcludes(a => new { a.DisplayType }); // 只获取元数据 var result = await this._IWebNewsElastic.Client .GetAsync <NewsResponse>(request); if (result.ApiCall.Success && result.ApiCall.HttpStatusCode == 200) { if (!string.IsNullOrEmpty(result.Source.NewsId)) { response.Code = true; response.Data = result.Source; } else { return(NotFound()); } } else { return(NotFound()); } } catch (Exception ex) { response.SetError(ex, this._ILogger); } return(response.ToHttpResponse()); }
public async Task <IActionResult> GetCategoryAsync([FromHeader] String source, [FromRoute] SiteIdRoute route) { var response = new Response <object>(); var categoryId = route.id.ToInt();//分类Id try { var result = await this._IWebCategoryRedis.GetAsync(route.mark); if (result.Count > 0) { var newResult = result.FirstOrDefault(c => c.CategoryId == categoryId);//根据分类标识获取分类信息 response.Code = true; response.Data = newResult; response.Message = newResult == null ? "未找到相关数据!" : "Success"; } else { var entities = await _IWebCategoryRepository.Query(a => a.SiteId == route.mark && a.IsEnable == 1, a => a.Sequence) .Select(a => new WebCategoryValue() { CategoryId = a.CategoryId, ChannelId = Convert.ToInt32(a.Remarks), CategoryName = a.CategoryName, ParentId = a.ParentId, Controller = a.Controller, Action = a.Action, Urls = a.Urls, Title = a.Title, Keywords = a.Keywords, Description = a.Description }) .ToListAsync(); if (entities.Count > 0) { await _IWebCategoryRedis.AddAsync(route.mark, entities); response.Code = true; response.Data = entities.FirstOrDefault(c => c.CategoryId == categoryId);//根据分类标识获取分类信息 } else { return(NoContent()); } } } catch (Exception ex) { response.SetError(ex, this._ILogger); } return(response.ToHttpResponse()); }
public async Task <IActionResult> GetNewsAccessAsync([FromHeader] String source, [FromRoute] SiteIdRoute route) { var response = new Response <Object>(); try { var result = await this._IWebNewsRedis.AddAccessCount(route.mark, route.id); response.Code = true; } catch (Exception ex) { response.SetError(ex, this._ILogger); } return(response.ToHttpResponse()); }
public async Task <IActionResult> GetCategoryClickAsync([FromHeader] String source, [FromRoute] SiteIdRoute route) { var response = new Response <Object>(); try { var result = await this._IWebCategoryRedis.AddClickCount(route.mark, route.id); if (!result) { return(BadRequest("分类点击统计失败!")); } response.Code = result; } catch (Exception ex) { response.SetError(ex, this._ILogger); } return(response.ToHttpResponse()); }
public async Task <IActionResult> GetCodeNewsAsync([FromHeader] String source, [FromRoute] SiteIdRoute route, [FromQuery] PagerElastic item) { var response = new Response <List <NewsListResponse> >(); try { var request = new SearchRequest <WebNewsDoc>(_IWebNewsElastic.IndexName) { TrackTotalHits = true, Query = new BoolQuery() { Must = new QueryContainer[] { new TermQuery() { Field = "siteId", Value = route.mark } && new TermQuery() { Field = "specialCode", Value = route.id } }, MustNot = new QueryContainer[] { new TermQuery() { Field = "contentType", Value = 2 } } }, Source = new Union <bool, ISourceFilter>(new SourceFilter { Excludes = new[] { "contents" } }), Sort = new List <ISort>() { new FieldSort() { Field = "specialSort", Order = SortOrder.Ascending }, new FieldSort() { Field = "pushTime", Order = SortOrder.Descending } }, Size = item.PageSize }; if (item.PageIndex != null) { request.From = 0; request.SearchAfter = item.PageIndex.Split(","); } var result = await this._IWebNewsElastic.Client .SearchAsync <NewsListResponse>(request); if (result.ApiCall.Success && result.ApiCall.HttpStatusCode == 200) { if (result.Documents.Count > 0) { response.Code = true; response.Data = result.Documents.ToList(); response.Other = string.Join(',', result.Hits.LastOrDefault().Sorts); } else { return(NoContent()); } } else { return(NoContent()); } } catch (Exception ex) { response.SetError(ex, this._ILogger); } return(response.ToHttpResponse()); }
public async Task <IActionResult> GetCategoryNewsAsync([FromHeader] String source, [FromRoute] SiteIdRoute route, [FromQuery] PagerElastic item) { var response = new Response <List <NewsListResponse> >(); try { //根据当前系统版本号区分是否显示视频 var entity = source.ToObject <HeaderSource>(); // 针对安卓版本判断 var lastVers = new Version("1.0.4"); // 最后版本 var defalutVersCode = 5; //当前安卓版本code var newVers = new Version(); var newVersInt = 0; bool newsBool; try { newVers = new Version(entity.SystemVers); // 最新版本 } catch (Exception) { newVersInt = entity.SystemVers.ToInt(); } if (newVersInt == 0) { newsBool = entity.Device == "android" && newVers <= lastVers; } else { newsBool = entity.Device == "android" && newVersInt <= defalutVersCode; } //判断是否展示视频 if (newsBool) { var request = new SearchRequest <WebNewsDoc>(_IWebNewsElastic.IndexName) { TrackTotalHits = true, Query = new BoolQuery() { Must = new QueryContainer[] { new TermQuery() { Field = "siteId", Value = route.mark } && new TermQuery() { Field = "categoryId", Value = route.id } }, MustNot = new QueryContainer[] {//过滤掉类型为视频的数据 new TermQuery() { Field = "contentType", Value = 2 } }, }, Source = new Union <bool, ISourceFilter>(new SourceFilter { Excludes = new[] { "contents" } }), Sort = new List <ISort>() { new FieldSort { Field = "pushTime", Order = SortOrder.Descending }, new FieldSort { Field = "categorySort", Order = SortOrder.Ascending } }, Size = item.PageSize }; if (item.PageIndex != null) { request.From = 0; request.SearchAfter = item.PageIndex.Split(","); } var result = await this._IWebNewsElastic.Client .SearchAsync <NewsListResponse>(request); if (result.ApiCall.Success && result.ApiCall.HttpStatusCode == 200) { if (result.Documents.Count > 0) { response.Code = true; response.Data = result.Documents.ToList(); response.Message = $"返回{result.Documents.Count}条数据"; response.Other = string.Join(',', result.Hits.LastOrDefault().Sorts); } } } else { //根据新闻视频2:1比例设置Size int?newsSize = 0, newsRido = 2; int?videoSize = 0; if (item.PageSize < 10) { item.PageSize = 10; } if (item.PageSize % newsRido == 0) { newsSize = item.PageSize / newsRido + 2; } else { newsSize = (item.PageSize + 1) / newsRido + 2; } videoSize = item.PageSize - newsSize; int? from = null; string[] searechAfter = null; if (item.PageIndex != null) { from = 0; searechAfter = item.PageIndex.Split('|'); } //es多重查询 var request = new MultiSearchRequest() { TotalHitsAsInteger = true, Operations = new Dictionary <string, ISearchRequest> { { "news", new SearchRequest <NewsListResponse>(_IWebNewsElastic.IndexName) { Query = new BoolQuery() { Must = new QueryContainer[] { new TermQuery { Field = "siteId", Value = route.mark } && new TermQuery { Field = "categoryId", Value = route.id } && new TermQuery { Field = "contentType", Value = 1 } } }, Sort = new List <ISort>() { new FieldSort() { Field = "pushTime", Order = SortOrder.Descending }, new FieldSort() { Field = "categorySort", Order = SortOrder.Ascending } }, From = from, Size = newsSize, SearchAfter = item.PageIndex != null?searechAfter[0].Split(','):null } }, { "video", new SearchRequest <NewsListResponse>(_IWebNewsElastic.IndexName) { Query = new BoolQuery() { Must = new QueryContainer[] { new TermQuery { Field = "siteId", Value = route.mark } && new TermQuery { Field = "categoryId", Value = route.id } && new TermQuery { Field = "contentType", Value = 2 } } }, Sort = new List <ISort>() { new FieldSort() { Field = "pushTime", Order = SortOrder.Descending }, new FieldSort() { Field = "categorySort", Order = SortOrder.Ascending } }, From = from, Size = videoSize, SearchAfter = item.PageIndex != null?(searechAfter.Count() > 1?searechAfter[1].Split(','):null):null } } } }; var result = await this._IWebNewsElastic.Client.MultiSearchAsync(request); //es多重查询 var newsResult = result.GetResponse <NewsListResponse>("news"); //新闻 var videoResult = result.GetResponse <NewsListResponse>("video"); //视频 if (newsResult != null && newsResult.ApiCall.Success && videoResult != null && videoResult.ApiCall.Success) { if (newsResult.Documents.Count > 0 || videoResult.Documents.Count > 0) { response.Code = true; //根据ContentType返回结果 2视频 1新闻 //每隔两个新闻放置一个视频 var vieoList = videoResult.Documents.Where(c => !string.IsNullOrEmpty(c.ImagePath)).ToList(); //视频结果集 var newsList = newsResult.Documents.ToList(); //新闻结果集 var newsIndex = 0; var indexof = 0; for (int i = 0; i < vieoList.Count; i++) { if (i == 0) { indexof += 2; } else { indexof += 3; } if (newsList.Count == item.PageSize) { break; } if (indexof < newsList.Count) { newsList.Insert(indexof, vieoList[newsIndex]); } else { newsList.Insert(newsList.Count, vieoList[newsIndex]); } newsIndex++; } response.Data = newsList; if (newsResult.Hits.Count > 0 && videoResult.Hits.Count == 0) { response.Other = string.Join(",", newsResult.Hits.LastOrDefault().Sorts); } if (newsResult.Hits.Count > 0 && videoResult.Hits.Count > 0) { response.Other = string.Join(",", newsResult.Hits.LastOrDefault().Sorts) + "|" + string.Join(",", videoResult.Hits.LastOrDefault().Sorts); } response.Message = $"返回{newsList.Count}条数据"; } else { return(NoContent()); } } else { return(NoContent()); } } } catch (Exception ex) { response.SetError(ex, this._ILogger); } return(response.ToHttpResponse()); }