using Admin.NET.Core.Service.ZYNews.DTO; using Flurl; using Flurl.Http; using Microsoft.Extensions.Caching.Distributed; using MongoDB.Bson; using NewLife; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; namespace Admin.NET.Core.Service; /// /// 新闻资讯 /// [AllowAnonymous] [ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 900)] [Route("api/ZyNews")] public class ZyNewsService : IDynamicApiController, ITransient { private readonly IDistributedCache _distributed; private const string _cachekey = "news_"; public ZyNewsService(IDistributedCache distributedCache) { _distributed = distributedCache; } /// /// 资讯列表 /// /// /// [HttpGet] public async Task NewsPage([FromQuery] NewsPageRequest request) { try { var baseurl = App.GetConfig("OutExApi", true).BaseUrl; var dyresult = await string.Format("{0}api/front/NewsInfo/GetPageNews", baseurl) .SetQueryParams(request).GetStringAsync(); var result= JsonConvert.DeserializeObject>(dyresult); return result.response; } catch (Exception ex) { throw Oops.Oh("网络开小差了~"); } } /// /// 获取新闻分类列表 /// /// [HttpGet] public async Task NewsCategory() { var key = _cachekey + "categorylist"; var result = await _distributed.GetAsync(key); if (result == null) { try { var baseurl = App.GetConfig("OutExApi", true).BaseUrl; var _option = new DistributedCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromHours(4)); var dyresult = await string.Format("{0}api/front/NewsInfo/GetNewsCategory", baseurl).GetStringAsync(); var nresult = JsonConvert.DeserializeObject>>(dyresult); byte[] byresult = Encoding.UTF8.GetBytes(nresult.response.ToJson()); await _distributed.SetAsync(key, byresult, _option); result = byresult; } catch (Exception ex) { throw Oops.Oh("网络开小差了~"); } } return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(result).ToLowerInvariant()); } /// /// 首页top新闻列表 /// /// /// [HttpGet] public async Task Top([FromQuery] NewsRequest request) { try { var baseurl = App.GetConfig("OutExApi", true).BaseUrl; var _option = new DistributedCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromHours(4)); var dyresult = await string.Format("{0}api/front/NewsInfo/GetTopNews", baseurl) .SetQueryParams(request).GetStringAsync(); var result = JsonConvert.DeserializeObject>>(dyresult); return result.response; } catch (Exception ex) { throw Oops.Oh("网络开小差了~"); } } /// /// 新闻详情 /// /// /// [HttpGet] public async Task Detail([FromQuery] int Id) { try { var baseurl = App.GetConfig("OutExApi", true).BaseUrl; var _option = new DistributedCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromHours(4)); var dyresult = await string.Format("{0}api/front/NewsInfo/GetDetail?id={1}", baseurl, Id) .GetStringAsync(); var result = JsonConvert.DeserializeObject>(dyresult); return result.response; } catch (Exception ex) { throw Oops.Oh("网络开小差了~"); } } }