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;
using GxPress.Repository.Interface.Press;
using Newtonsoft.Json;
using GxPress.Entity.Article;
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;
private readonly IPressRepository pressRepository;
public AppHomePageService(IArticleGroupRepository articleGroupRepository, IMediaRepository mediaRepository,
IMiddleLableRepository _middleLableRepository, ISystemLabelRepository _systemLabelRepository,
IMiddleLableNexusRepository middleLableNexusRepository, IMediaLableRepository _mediaLableRepository,
IMapper _mapper, ITeacherRepository teacherRepository, ISystemLableMediaRepository systemLableMediaRepository,
IPressRepository pressRepository)
{
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;
this.pressRepository = pressRepository;
}
///
/// 大咖讲座
///
///
///
public async Task>> GetMediasByTeacherAsync(ArticleGroupRequest request)
{
var results = new List>();
//大师讲座
if (request.StyleCss == "Cathedra")
{
var articleGroup = await articleGroupRepository.GetArticleGroupAsync(request.StyleCss);
if (articleGroup != null && articleGroup.SystemLableId > 0)
{
var result = await _systemLabelRepository.GetAsync(articleGroup.SystemLableId);
request.Sort = "";
request.PerPage = result.PageSize;
var items = await GetDayWeBookAsync(new MediaDayWeBookRequest { Name = "大咖讲座", Page = 1, PerPage = request.PerPage });
results.Add(new AppLabelResult()
{
LabelName = "大咖讲座",
IsPage = false,
ResourceType = GxPress.EnumConst.AllTypeConst.Video.GetHashCode(),
Method = "",
Items = items.Items
});
}
}
//会员特供
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()
{
Page = request.Page,
PerPage = request.PerPage,
LableId = systemLabel.Id
};
return await mediaRepository.GetMediaVedioAudioAysnc(mediaLableIdRequest);
}
///
/// 获取每日技能
///
///
///
public async Task> GetDaySkillAsync(ArticleGroupRequest request)
{
var articleGroup = await articleGroupRepository.GetArticleGroupAsync(request.StyleCss);
var result = await mediaRepository.GetDaySkillFristAsync(articleGroup.SystemLableId);
var mediaLableIdRequest = new LableIdMediaRequest()
{
Page = request.Page,
PerPage = request.PerPage,
LableId = articleGroup.SystemLableId,
NotInMediaId = result.Id
};
return await mediaRepository.SearchLableKeyWordAsync(mediaLableIdRequest);
}
///
/// 每日技能
///
///
public async Task GetRandomDaySkillAsync(ArticleGroupRequest request)
{
var skillInfo = new SkillInfo();
var articleGroup = await articleGroupRepository.GetArticleGroupAsync(request.StyleCss);
var result = await mediaRepository.GetDaySkillFristAsync(articleGroup.SystemLableId);
if (result == null)
return skillInfo;
if (!string.IsNullOrEmpty(result.Blocks))
{
var articleContent = JsonConvert.DeserializeObject(result.Blocks);
var imageUrls = new List();
var text = string.Empty;
foreach (var content in articleContent.content)
{
if (content.content != null)
foreach (var contentItem in content.content)
{
if (contentItem.type == "newImg")
imageUrls.Add(contentItem.attrs.src);
if (contentItem.type == "text")
text += contentItem.text;
}
}
skillInfo.ImageUrls = imageUrls;
skillInfo.Blocks = text;
}
skillInfo.Id = result.Id;
skillInfo.MediaType = result.MediaType;
skillInfo.Title = result.Title;
return skillInfo;
}
///
/// 会员特供
///
///
///
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)
{
// return await mediaRepository.GetSearchMediaResults(new AppMediaSearchRequest
// {
// MediaType = GxPress.EnumConst.AllTypeConst.Video.GetHashCode(),
// Page = request.Page,
// PerPage = request.PerPage
// });
var items = await GetDayWeBookAsync(new MediaDayWeBookRequest { Name = "大咖讲座", Page = request.Page, PerPage = request.PerPage });
return items;
}
///
/// 根据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("APP书城");
//获取中间页标签
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);
}
}
}