using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using GxPress.Common.Tools;
using GxPress.EnumConst;
using GxPress.Repository.Interface;
using GxPress.Repository.Interface.Media;
using GxPress.Repository.Interface.Navigation;
using GxPress.Repository.Interface.SpecialLabel;
using GxPress.Repository.Interface.SystemLabel;
using GxPress.Repository.Interface.Teacher;
using GxPress.Result.Navigation;
using GxPress.Repository.Interface.Visit;
using GxPress.Service.Interface.Navigation;
using Datory;
using GxPress.Entity.Article;
namespace GxPress.Service.Implement.Navigation
{
public class NavigationService : INavigationService
{
private readonly INavigationRepository _navigationrepository;
private readonly IMapper _mapper;
private readonly IMiddleLableRepository _middleLableRepository;
private readonly ISystemLabelRepository _systemLabelRepository;
private readonly IMediaRepository _mediaRepository;
private readonly IMediaLableRepository _mediaLableRepository;
private readonly IMiddleLableNexusRepository middleLableNexusRepository;
private readonly ISlideRepository slideRepository;
private readonly ISpecialLabelRepository specialLabelRepository;
private readonly ITeacherRepository teacherRepository;
private readonly IArticleRepository articleRepository;
private readonly IVisitRepository visitRepository;
public NavigationService(INavigationRepository _repository, IMapper _mapper,
IMiddleLableRepository _middleLableRepository, ISystemLabelRepository _systemLabelRepository,
IMediaRepository _mediaRepository, IMediaLableRepository _mediaLableRepository,
ISlideRepository slideRepository, ISpecialLabelRepository specialLabelRepository,
ITeacherRepository teacherRepository, IMiddleLableNexusRepository middleLableNexusRepository,
IArticleRepository articleRepository, IVisitRepository visitRepository)
{
this._navigationrepository = _repository;
this._middleLableRepository = _middleLableRepository;
this._systemLabelRepository = _systemLabelRepository;
this._mediaRepository = _mediaRepository;
this._mediaLableRepository = _mediaLableRepository;
this.slideRepository = slideRepository;
this._mapper = _mapper;
this.specialLabelRepository = specialLabelRepository;
this.teacherRepository = teacherRepository;
this.middleLableNexusRepository = middleLableNexusRepository;
this.articleRepository = articleRepository;
this.visitRepository = visitRepository;
}
///
/// 获取导航栏数据
///
///
public async Task GetNavigationResults(int navigationId)
{
var result = new MiddleLableResult();
var navigation = await _navigationrepository.GetAsync(navigationId);
if (navigation.MiddleLableId > 0)
{
//获取中间页面
var middleLable = await _middleLableRepository.GetAsync(navigation.MiddleLableId);
result = _mapper.Map(middleLable);
result.NavigationLabelMediaResults = new List();
//获取中间页标签
var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(navigation.MiddleLableId);
//获取轮播
if (middleLable.IsSlide)
{
if (result.IsSlide)
{
result.Sildes = await slideRepository.GetListAsync(result.TypeId);
foreach (var item in result.Sildes)
item.ImageUrl = StringUtils.AddDomain(item.ImageUrl);
}
}
//获取标签
var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
foreach (var middleLableNexus in middleLableNexusIds)
{
foreach (var item in systemLabels)
{
if (middleLableNexus.LableId != item.Id)
continue;
//获取常规数据
var navigationLabelMediaResult = new NavigationLabelMediaResult()
{
Id = item.Id,
Sort = item.Sort,
StyleType = item.StyleType,
ActionUrl = item.ActionUrl,
ControllerUrl = item.ControllerUrl,
PageSize = item.PageSize,
IsPage = item.IsPage,
IsSkip = item.IsSkip,
LabelName = item.LabelName,
ResourceType = item.ResourceType,
LabelNameDescribe = item.LabelNameDescribe,
Remark = item.Remark,
IsShowLabelName = item.IsShowLabelName
};
// 特殊 130,示范课堂140,品牌专区1(150),品牌专区2(160),170 直播 180 名师
var specialInts = systemLabels.Where(n => n.ResourceType >= 130).Select(n => n.ResourceType);
if (specialInts.Contains(item.ResourceType))
{
//获取特殊
navigationLabelMediaResult.IsSpecial = true;
//名师
if (item.ResourceType == SpecialConst.Teacher.GetHashCode())
{
navigationLabelMediaResult.IsTeacher = true;
navigationLabelMediaResult.TeacherResults = await teacherRepository.GetTeacherResult();
result.NavigationLabelMediaResults.Add(navigationLabelMediaResult);
continue;
}
navigationLabelMediaResult.SpecialLabelResults = await specialLabelRepository.GetAllAsync(item.ResourceType);
foreach (var specialLabelResult in navigationLabelMediaResult.SpecialLabelResults)
specialLabelResult.ImageUrls = StringUtils.AddDomain(specialLabelResult.ImageUrls);
result.NavigationLabelMediaResults.Add(navigationLabelMediaResult);
continue;
}
if (item.LabelName.Equals("推荐"))
{
var request = new List();
var articleResult = await articleRepository.GetArticleResults();
var articleResults = new List();
foreach (var article in articleResult)
{
var jsonContent = article.ArticleContent;
var textContent = string.Empty;
//新版json
if (jsonContent != null && jsonContent.type.Count() > 0)
{
foreach (var content in jsonContent.content)
{
foreach (var contentItem in content.content)
{
if (contentItem.type == "text")
textContent += contentItem.text;
}
}
}
var imageUrl = article.ImageUrls != null ? article.ImageUrls.FirstOrDefault() : "";
articleResults.Add(
new Result.Media.NavigationMediaResult
{
Id = article.Id,
Title = article.Title,
ImageUrls = !string.IsNullOrEmpty(imageUrl) ? StringUtils.AddDomain(imageUrl) : "",
Summary = textContent,
Author = article.Author,
CreatedDate = article.AddDate,
CollectCount = article.CollectCount,
ReadCount = article.ReadCount,
MediaType = AllTypeConst.Article.GetHashCode()
}
);
}
navigationLabelMediaResult.MediaResults = articleResults;
}
else
{
//获取媒体标签
var mediaIds = await _mediaLableRepository.GetMediaIdsAysnc(item.Id);
var medias = await _mediaRepository.GetNavigationMediaResults(mediaIds, 1, item.PageSize);
navigationLabelMediaResult.MediaResults = medias.ToList();
}
foreach (var itemMedia in navigationLabelMediaResult.MediaResults)
itemMedia.ImageUrls = StringUtils.AddDomain(itemMedia.ImageUrls);
result.NavigationLabelMediaResults.Add(navigationLabelMediaResult);
}
}
}
return result;
}
///
/// 获取中间页面数据
///
///
public async Task GetMiddleLableResults(int middleLableId)
{
var result = new MiddleLableResult();
//获取中间页面
var middleLable = await _middleLableRepository.GetAsync(middleLableId);
//获取中间页标签
var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(middleLableId);
result = _mapper.Map(middleLable);
result.NavigationLabelMediaResults = new List();
//获取轮播
if (middleLable.IsSlide)
{
if (result.IsSlide)
{
result.Sildes = await slideRepository.GetListAsync(result.TypeId);
foreach (var item in result.Sildes)
item.ImageUrl = StringUtils.AddDomain(item.ImageUrl);
}
}
//获取标签
var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
foreach (var item in systemLabels)
{
//获取常规数据
var navigationLabelMediaResult = new NavigationLabelMediaResult()
{
Id = item.Id,
Sort = item.Sort,
StyleType = item.StyleType,
ActionUrl = item.ActionUrl,
ControllerUrl = item.ControllerUrl,
IsPage = item.IsPage,
IsSkip = item.IsSkip,
LabelName = item.LabelName,
ResourceType = item.ResourceType,
LabelNameDescribe = item.LabelNameDescribe,
Remark = item.Remark
};
// 特殊 130,示范课堂140,品牌专区1(150),品牌专区2(160)
var specialInts = systemLabels.Where(n => n.ResourceType >= 130).Select(n => n.ResourceType);
if (specialInts.Contains(item.ResourceType))
{
//获取特殊
navigationLabelMediaResult.IsSpecial = true;
navigationLabelMediaResult.SpecialLabelResults = await specialLabelRepository.GetAllAsync(item.ResourceType, item.PageSize);
foreach (var specialLabelResult in navigationLabelMediaResult.SpecialLabelResults)
specialLabelResult.ImageUrls = StringUtils.AddDomain(specialLabelResult.ImageUrls);
result.NavigationLabelMediaResults.Add(navigationLabelMediaResult);
continue;
}
//获取媒体标签
var mediaIds = await _mediaLableRepository.GetMediaIdsAysnc(item.Id);
var medias = await _mediaRepository.GetNavigationMediaResults(mediaIds);
navigationLabelMediaResult.MediaResults = medias.ToList();
foreach (var itemMedia in navigationLabelMediaResult.MediaResults)
itemMedia.ImageUrls = StringUtils.AddDomain(itemMedia.ImageUrls);
result.NavigationLabelMediaResults.Add(navigationLabelMediaResult);
}
return result;
}
///
/// 获取标签数据
///
///
///
public async Task GetLabelMediaResult(int labelId)
{
var result = new LabelMediaResult();
//获取媒体标签
var mediaIds = await _mediaLableRepository.GetMediaIdsAysnc(labelId);
result.LabelMediaResults = await _mediaRepository.GetNavigationMediaResults(mediaIds);
result.LikeMediaResults = await _mediaRepository.GetlikeMediaResults();
result.RecommendMediaResults = await _mediaRepository.GetRecommendMediaResults();
return result;
}
}
}