tuiwucarrer/Admin.NET/Admin.NET.Core/Service/ZYNews/ZyNewsService.cs

148 lines
4.4 KiB
C#

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;
/// <summary>
/// 新闻资讯
/// </summary>
[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;
}
/// <summary>
/// 资讯列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> NewsPage([FromQuery] NewsPageRequest request)
{
try
{
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
var dyresult = await string.Format("{0}api/front/NewsInfo/GetPageNews", baseurl)
.SetQueryParams(request).GetStringAsync();
var result= JsonConvert.DeserializeObject<CustomPropertyResult<NewsPageResponse>>(dyresult);
return result.response;
}
catch (Exception ex) {
throw Oops.Oh("网络开小差了~");
}
}
/// <summary>
/// 获取新闻分类列表
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> NewsCategory()
{
var key = _cachekey + "categorylist";
var result = await _distributed.GetAsync(key);
if (result == null)
{
try
{
var baseurl = App.GetConfig<OutExApi>("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<CustomPropertyResult<List<NewsClassCategoryResponse>>>(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<dynamic>(Encoding.UTF8.GetString(result).ToLowerInvariant());
}
/// <summary>
/// 首页top新闻列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> Top([FromQuery] NewsRequest request)
{
try
{
var baseurl = App.GetConfig<OutExApi>("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<CustomPropertyResult<List<NewsInfoResponse>>>(dyresult);
return result.response;
}
catch (Exception ex)
{
throw Oops.Oh("网络开小差了~");
}
}
/// <summary>
/// 新闻详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpGet]
public async Task<dynamic> Detail([FromQuery] int Id)
{
try
{
var baseurl = App.GetConfig<OutExApi>("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<CustomPropertyResult<NewsDetailInfoResponse>>(dyresult);
return result.response;
}
catch (Exception ex)
{
throw Oops.Oh("网络开小差了~");
}
}
}