using GxPress.Service.Interface.AppHomePage;
using GxPress.Repository.Interface;
using GxPress.Repository.Interface.Media;
using GxPress.Request.ArticleGroup;
using System.Threading.Tasks;
using System.Collections.Generic;
using GxPress.Result.SystemLabel;
using GxPress.Result.Media;
using GxPress.Repository.Interface.SystemLabel;
using GxPress.Repository.Interface.Navigation;
using AutoMapper;
using System.Linq;
using GxPress.Common.Tools;
using GxPress.Common.Page;
using GxPress.Request.Media;
using GxPress.Repository.Interface.Teacher;
using GxPress.Request.TeacherRequest;
using GxPress.Result.Teacher;
namespace GxPress.Service.Implement.AppHomePage
{
public partial class AppHomePageService : IAppHomePageService
{
private readonly IArticleGroupRepository articleGroupRepository;
private readonly IMediaRepository mediaRepository;
private readonly IMapper _mapper;
private readonly IMiddleLableRepository _middleLableRepository;
private readonly ISystemLabelRepository _systemLabelRepository;
private readonly IMediaLableRepository _mediaLableRepository;
private readonly IMiddleLableNexusRepository middleLableNexusRepository;
private readonly ISystemLableMediaRepository systemLableMediaRepository;
private readonly ITeacherRepository teacherRepository;
public AppHomePageService(IArticleGroupRepository articleGroupRepository, IMediaRepository mediaRepository, IMiddleLableRepository _middleLableRepository, ISystemLabelRepository _systemLabelRepository, IMiddleLableNexusRepository middleLableNexusRepository, IMediaLableRepository _mediaLableRepository, IMapper _mapper, ITeacherRepository teacherRepository, ISystemLableMediaRepository systemLableMediaRepository)
{
this.articleGroupRepository = articleGroupRepository;
this.mediaRepository = mediaRepository;
this._middleLableRepository = _middleLableRepository;
this._systemLabelRepository = _systemLabelRepository;
this.middleLableNexusRepository = middleLableNexusRepository;
this._mediaLableRepository = _mediaLableRepository;
this._mapper = _mapper;
this.teacherRepository = teacherRepository;
this.systemLableMediaRepository = systemLableMediaRepository;
}
///
/// 大咖讲座
///
///
///
public async Task>> GetMediasByTeacherAsync(ArticleGroupRequest request)
{
var results = new List>();
//大师讲座
if (request.StyleCss == "Cathedra")
{
request.Sort = "";
request.PerPage = 20;
var items = await mediaRepository.GetMediasByTeacherAsync(request);
results.Add(new AppLabelResult()
{
LabelName = "今日推荐",
IsPage = false,
ResourceType = 40,
Method = "",
Items = items
});
request.Sort = "recommend";
request.PerPage = 20;
items = await mediaRepository.GetMediasByTeacherAsync(request);
results.Add(new AppLabelResult()
{
LabelName = "更多精彩",
IsPage = true,
ResourceType = 40,
Method = "post",
Items = items,
ActionUrl = "api/app/page/cathedra-page"
});
foreach (var item in results)
{
foreach (var model in item.Items)
{
model.Duration = "02:19:20";
model.ImageUrls = Common.Tools.StringUtils.AddDomain(model.ImageUrls);
}
}
}
//会员特供
if (request.StyleCss == "VipSupply")
{
return await GetVipSupplyAsync(request);
}
//每日好书
if (request.StyleCss == "DayGoodBook")
{
return await GetDayGoodBookAsync(request);
}
return results;
}
///
/// 每日好书
///
///
///
public async Task>> GetDayGoodBookAsync(ArticleGroupRequest request)
{
request.ActionUrl = "api/app/page/lable";
return await GetVipSupplyAsync(request);
}
///
/// 每日好文
///
///
///
public async Task> GetDayGoodTextAsync(MediaSearchRequest request)
{
var result = new PagedList();
var model = await mediaRepository.GetAllAsync(request);
var list = new List();
foreach (var item in model.Items)
{
var mediaCathedraResult = new MediaCathedraResult();
mediaCathedraResult.Author = item.Author;
mediaCathedraResult.CollectCount = item.CollectCount;
mediaCathedraResult.CreatedDate = item.CreatedDate;
mediaCathedraResult.Id = item.Id;
mediaCathedraResult.ImageUrls = item.ImageUrls;
mediaCathedraResult.MediaType = item.MediaType;
mediaCathedraResult.ReadCount = item.ReadCount;
mediaCathedraResult.Title = item.Title;
mediaCathedraResult.Summary = item.Summary;
mediaCathedraResult.Press = item.Press;
list.Add(mediaCathedraResult);
}
result.Total = model.Total;
foreach (var item in list)
{
item.ImageUrls = StringUtils.AddDomain(item.ImageUrls);
}
result.Items = list;
return result;
}
///
/// 获取每日微课
///
///
///
public async Task> GetDayWeBookAsync(MediaDayWeBookRequest request)
{
var result = new PagedList();
var systemLabel = await _systemLabelRepository.GetByNameAsync(request.Name);
var mediaLableIdRequest = new MediaLableIdRequest();
mediaLableIdRequest.Page = request.Page;
mediaLableIdRequest.PerPage = request.PerPage;
var ids = await systemLableMediaRepository.GetMediaIdsAsync(systemLabel.Id, 0);
//var mediaIds = await _mediaLableRepository.GetMediaIdsAysnc(systemLabel.Id);
mediaLableIdRequest.Ids = ids.ToList();
return await mediaRepository.GetMediaByLableIdAsync(mediaLableIdRequest);
}
///
/// 会员特供
///
///
///
public async Task>> GetVipSupplyAsync(ArticleGroupRequest request)
{
var result = new List>();
//根据样式查找导航数据
var articleGroup = await articleGroupRepository.GetArticleGroupAsync(request.StyleCss);
if (articleGroup.IsMiddleLable)
{
//获取中间页面
var middleLable = await _middleLableRepository.GetAsync(articleGroup.MiddleLableId);
//获取中间页标签
var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(middleLable.Id);
//获取标签
var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
foreach (var item in systemLabels)
{
//获取媒体标签
var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(item.Id, 0);
var medias = await mediaRepository.GetNavigationMediaResults(mediaIds, 1, item.PageSize);
var list = new List();
foreach (var mediaModel in medias)
{
list.Add(new MediaCathedraResult { Id = mediaModel.Id, Summary = mediaModel.Summary, Title = mediaModel.Title, ImageUrls = StringUtils.AddDomain(mediaModel.ImageUrls), Author = mediaModel.Author, ReadCount = mediaModel.ReadCount, CreatedDate = mediaModel.CreatedDate, CollectCount = mediaModel.CollectCount, MediaType = mediaModel.MediaType });
}
//获取常规数据
var mediaCathedraResult = new AppLabelResult()
{
IsPage = item.IsPage,
Id = item.Id,
LabelName = item.LabelName,
ResourceType = 40,
Items = list,
Method = item.IsPage ? "post" : "",
ActionUrl = item.IsPage ? request.ActionUrl : ""
};
result.Add(mediaCathedraResult);
}
}
return result;
}
///
/// 大咖讲座
///
///
public async Task> MediaCathedraResult(ArticleGroupRequest request)
{
var result = new PagedList();
result.Items = await mediaRepository.GetMediasByTeacherAsync(request);
foreach (var item in result.Items)
{
item.ImageUrls = Common.Tools.StringUtils.AddDomain(item.ImageUrls);
item.Duration="02:19:30";
}
result.Total = await mediaRepository.GetMediasByTeacherCountAsync(request);
return result;
}
///
/// 根据IDs
///
///
public async Task> GetMediaByLableIdsAsync(MediaIdsRequest request)
{
//获取标签
var systemLabel = await _systemLabelRepository.GetAsync(request.LableId);
if (systemLabel == null)
return null;
var ids = await systemLableMediaRepository.GetMediaIdsAsync(request.LableId, 0);
request.Ids = ids.ToList();
request.Limit = systemLabel.PageSize;
return await mediaRepository.GetMediaByLableIdsAsync(request);
}
///
/// 根据IDs
///
///
public async Task> GetMediaByLableIdAsync(MediaLableIdRequest request)
{
//获取标签
var systemLabel = await _systemLabelRepository.GetAsync(request.LableId);
if (systemLabel == null)
return null;
var ids = await _mediaLableRepository.GetMediaIdsAysnc(request.LableId);
request.Ids = ids.ToList();
return await mediaRepository.GetMediaByLableIdAsync(request);
}
///
/// 名师
///
///
///
public async Task> GetTeacherAsync(TeacherRequest request)
{
var teachers = await teacherRepository.GetTeacherResult(request);
return teachers;
}
///
/// 书城
///
///
///
public async Task>> GetBookCityAsync(ArticleGroupRequest request)
{
var result = new List>();
//获取中间页面
var middleLable = await _middleLableRepository.GetAsync("书城");
//获取中间页标签
var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(middleLable.Id);
//获取标签
var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
foreach (var item in systemLabels)
{
//获取媒体标签
var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(item.Id, 0);
var medias = await mediaRepository.GetNavigationMediaResults(mediaIds, 1, item.PageSize);
var list = new List();
foreach (var mediaModel in medias)
{
list.Add(new MediaCathedraResult { Id = mediaModel.Id, Title = mediaModel.Title, ImageUrls = StringUtils.AddDomain(mediaModel.ImageUrls), Author = mediaModel.Author, ReadCount = mediaModel.ReadCount, CreatedDate = mediaModel.CreatedDate, CollectCount = mediaModel.CollectCount, MediaType = mediaModel.MediaType });
}
//获取常规数据
var mediaCathedraResult = new AppLabelResult()
{
IsPage = item.IsPage,
Id = item.Id,
LabelName = item.LabelName,
ResourceType = 40,
Items = list,
Method = item.IsPage ? "post" : "",
ActionUrl = item.IsPage ? request.ActionUrl : ""
};
result.Add(mediaCathedraResult);
}
return result;
}
///
/// 导航内容分页
///
///
public async Task> GetContentNavigationAsync(MediaContentNavigationRequest request)
{
if (request.CategoryId > 0)
{
var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(request.CategoryId, 1);
request.MediaIds = mediaIds.ToList();
}
else
{
var mediaIds = await systemLableMediaRepository.GetMediaIdsByTypeValueAsync(1);
request.MediaIds = mediaIds.ToList();
}
if (request.MediaIds.Count == 0)
{
var result = new PagedList();
result.Items = new List();
}
return await mediaRepository.GetContentNavigationAsync(request);
}
}
}