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); } } }