AppHomePageService.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. using GxPress.Service.Interface.AppHomePage;
  2. using GxPress.Repository.Interface;
  3. using GxPress.Repository.Interface.Media;
  4. using GxPress.Request.ArticleGroup;
  5. using System.Threading.Tasks;
  6. using System.Collections.Generic;
  7. using GxPress.Result.SystemLabel;
  8. using GxPress.Result.Media;
  9. using GxPress.Repository.Interface.SystemLabel;
  10. using GxPress.Repository.Interface.Navigation;
  11. using AutoMapper;
  12. using System.Linq;
  13. using GxPress.Common.Tools;
  14. using GxPress.Common.Page;
  15. using GxPress.Request.Media;
  16. using GxPress.Repository.Interface.Teacher;
  17. using GxPress.Request.TeacherRequest;
  18. using GxPress.Result.Teacher;
  19. namespace GxPress.Service.Implement.AppHomePage
  20. {
  21. public partial class AppHomePageService : IAppHomePageService
  22. {
  23. private readonly IArticleGroupRepository articleGroupRepository;
  24. private readonly IMediaRepository mediaRepository;
  25. private readonly IMapper _mapper;
  26. private readonly IMiddleLableRepository _middleLableRepository;
  27. private readonly ISystemLabelRepository _systemLabelRepository;
  28. private readonly IMediaLableRepository _mediaLableRepository;
  29. private readonly IMiddleLableNexusRepository middleLableNexusRepository;
  30. private readonly ISystemLableMediaRepository systemLableMediaRepository;
  31. private readonly ITeacherRepository teacherRepository;
  32. public AppHomePageService(IArticleGroupRepository articleGroupRepository, IMediaRepository mediaRepository, IMiddleLableRepository _middleLableRepository, ISystemLabelRepository _systemLabelRepository, IMiddleLableNexusRepository middleLableNexusRepository, IMediaLableRepository _mediaLableRepository, IMapper _mapper, ITeacherRepository teacherRepository, ISystemLableMediaRepository systemLableMediaRepository)
  33. {
  34. this.articleGroupRepository = articleGroupRepository;
  35. this.mediaRepository = mediaRepository;
  36. this._middleLableRepository = _middleLableRepository;
  37. this._systemLabelRepository = _systemLabelRepository;
  38. this.middleLableNexusRepository = middleLableNexusRepository;
  39. this._mediaLableRepository = _mediaLableRepository;
  40. this._mapper = _mapper;
  41. this.teacherRepository = teacherRepository;
  42. this.systemLableMediaRepository = systemLableMediaRepository;
  43. }
  44. /// <summary>
  45. /// 大咖讲座
  46. /// </summary>
  47. /// <param name="request"></param>
  48. /// <returns></returns>
  49. public async Task<List<AppLabelResult<MediaCathedraResult>>> GetMediasByTeacherAsync(ArticleGroupRequest request)
  50. {
  51. var results = new List<AppLabelResult<MediaCathedraResult>>();
  52. //大师讲座
  53. if (request.StyleCss == "Cathedra")
  54. {
  55. request.Sort = "recommend";
  56. request.PerPage=30;
  57. var items = await mediaRepository.GetMediasByTeacherAsync(request);
  58. results.Add(new AppLabelResult<MediaCathedraResult>() { LabelName = "今日推荐", IsPage = false, ResourceType = 40, Method = "", Items = items });
  59. request.Sort = "";
  60. items = await mediaRepository.GetMediasByTeacherAsync(request);
  61. results.Add(new AppLabelResult<MediaCathedraResult>() { LabelName = "更多精彩", IsPage = true, ResourceType = 40, Method = "post", Items = items, ActionUrl = "api/app/page/cathedra-page" });
  62. foreach (var item in results)
  63. {
  64. foreach (var model in item.Items)
  65. {
  66. model.Duration = "02:19:20";
  67. model.ImageUrls = Common.Tools.StringUtils.AddDomain(model.ImageUrls);
  68. }
  69. }
  70. }
  71. //会员特供
  72. if (request.StyleCss == "VipSupply")
  73. {
  74. return await GetVipSupplyAsync(request);
  75. }
  76. //每日好书
  77. if (request.StyleCss == "DayGoodBook")
  78. {
  79. return await GetDayGoodBookAsync(request);
  80. }
  81. return results;
  82. }
  83. /// <summary>
  84. /// 每日好书
  85. /// </summary>
  86. /// <param name="request"></param>
  87. /// <returns></returns>
  88. public async Task<List<AppLabelResult<MediaCathedraResult>>> GetDayGoodBookAsync(ArticleGroupRequest request)
  89. {
  90. request.ActionUrl = "api/app/page/lable";
  91. return await GetVipSupplyAsync(request);
  92. }
  93. /// <summary>
  94. /// 每日好文
  95. /// </summary>
  96. /// <param name="request"></param>
  97. /// <returns></returns>
  98. public async Task<PagedList<MediaCathedraResult>> GetDayGoodTextAsync(MediaSearchRequest request)
  99. {
  100. var result = new PagedList<MediaCathedraResult>();
  101. var model = await mediaRepository.GetAllAsync(request);
  102. var list = new List<MediaCathedraResult>();
  103. foreach (var item in model.Items)
  104. {
  105. var mediaCathedraResult = new MediaCathedraResult();
  106. mediaCathedraResult.Author = item.Author;
  107. mediaCathedraResult.CollectCount = item.CollectCount;
  108. mediaCathedraResult.CreatedDate = item.CreatedDate;
  109. mediaCathedraResult.Id = item.Id;
  110. mediaCathedraResult.ImageUrls = item.ImageUrls;
  111. mediaCathedraResult.MediaType = item.MediaType;
  112. mediaCathedraResult.ReadCount = item.ReadCount;
  113. mediaCathedraResult.Title = item.Title;
  114. mediaCathedraResult.Summary = item.Summary;
  115. mediaCathedraResult.Press = item.Press;
  116. list.Add(mediaCathedraResult);
  117. }
  118. result.Total = model.Total;
  119. foreach (var item in list)
  120. {
  121. item.ImageUrls = StringUtils.AddDomain(item.ImageUrls);
  122. }
  123. result.Items = list;
  124. return result;
  125. }
  126. /// <summary>
  127. /// 获取每日微课
  128. /// </summary>
  129. /// <param name="request"></param>
  130. /// <returns></returns>
  131. public async Task<PagedList<MediaCathedraResult>> GetDayWeBookAsync(MediaDayWeBookRequest request)
  132. {
  133. var result = new PagedList<MediaCathedraResult>();
  134. var systemLabel = await _systemLabelRepository.GetByNameAsync(request.Name);
  135. var mediaLableIdRequest = new MediaLableIdRequest();
  136. mediaLableIdRequest.Page = request.Page;
  137. mediaLableIdRequest.PerPage = request.PerPage;
  138. var ids = await systemLableMediaRepository.GetMediaIdsAsync(systemLabel.Id, 0);
  139. //var mediaIds = await _mediaLableRepository.GetMediaIdsAysnc(systemLabel.Id);
  140. mediaLableIdRequest.Ids = ids.ToList();
  141. return await mediaRepository.GetMediaByLableIdAsync(mediaLableIdRequest);
  142. }
  143. /// <summary>
  144. /// 会员特供
  145. /// </summary>
  146. /// <param name="request"></param>
  147. /// <returns></returns>
  148. public async Task<List<AppLabelResult<MediaCathedraResult>>> GetVipSupplyAsync(ArticleGroupRequest request)
  149. {
  150. var result = new List<AppLabelResult<MediaCathedraResult>>();
  151. //根据样式查找导航数据
  152. var articleGroup = await articleGroupRepository.GetArticleGroupAsync(request.StyleCss);
  153. if (articleGroup.IsMiddleLable)
  154. {
  155. //获取中间页面
  156. var middleLable = await _middleLableRepository.GetAsync(articleGroup.MiddleLableId);
  157. //获取中间页标签
  158. var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(middleLable.Id);
  159. //获取标签
  160. var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
  161. foreach (var item in systemLabels)
  162. {
  163. //获取媒体标签
  164. var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(item.Id,0);
  165. var medias = await mediaRepository.GetNavigationMediaResults(mediaIds, 1, item.PageSize);
  166. var list = new List<MediaCathedraResult>();
  167. foreach (var mediaModel in medias)
  168. {
  169. 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 });
  170. }
  171. //获取常规数据
  172. var mediaCathedraResult = new AppLabelResult<MediaCathedraResult>()
  173. {
  174. IsPage = item.IsPage,
  175. Id = item.Id,
  176. LabelName = item.LabelName,
  177. ResourceType = 40,
  178. Items = list,
  179. Method = item.IsPage ? "post" : "",
  180. ActionUrl = item.IsPage ? request.ActionUrl : ""
  181. };
  182. result.Add(mediaCathedraResult);
  183. }
  184. }
  185. return result;
  186. }
  187. /// <summary>
  188. /// 大咖讲座
  189. /// </summary>
  190. /// <returns></returns>
  191. public async Task<PagedList<MediaCathedraResult>> MediaCathedraResult(ArticleGroupRequest request)
  192. {
  193. var result = new PagedList<MediaCathedraResult>();
  194. result.Items = await mediaRepository.GetMediasByTeacherAsync(request);
  195. foreach (var item in result.Items)
  196. {
  197. item.ImageUrls = Common.Tools.StringUtils.AddDomain(item.ImageUrls);
  198. }
  199. result.Total = await mediaRepository.GetMediasByTeacherCountAsync(request);
  200. return result;
  201. }
  202. /// <summary>
  203. /// 根据IDs
  204. /// </summary>
  205. /// <returns></returns>
  206. public async Task<IEnumerable<MediaCathedraResult>> GetMediaByLableIdsAsync(MediaIdsRequest request)
  207. {
  208. //获取标签
  209. var systemLabel = await _systemLabelRepository.GetAsync(request.LableId);
  210. if (systemLabel == null)
  211. return null;
  212. var ids = await systemLableMediaRepository.GetMediaIdsAsync(request.LableId,0);
  213. request.Ids = ids.ToList();
  214. request.Limit = systemLabel.PageSize;
  215. return await mediaRepository.GetMediaByLableIdsAsync(request);
  216. }
  217. /// <summary>
  218. /// 根据IDs
  219. /// </summary>
  220. /// <returns></returns>
  221. public async Task<PagedList<MediaCathedraResult>> GetMediaByLableIdAsync(MediaLableIdRequest request)
  222. {
  223. //获取标签
  224. var systemLabel = await _systemLabelRepository.GetAsync(request.LableId);
  225. if (systemLabel == null)
  226. return null;
  227. var ids = await _mediaLableRepository.GetMediaIdsAysnc(request.LableId);
  228. request.Ids = ids.ToList();
  229. return await mediaRepository.GetMediaByLableIdAsync(request);
  230. }
  231. /// <summary>
  232. /// 名师
  233. /// </summary>
  234. /// <param name="request"></param>
  235. /// <returns></returns>
  236. public async Task<PagedList<TeacherResult>> GetTeacherAsync(TeacherRequest request)
  237. {
  238. var teachers = await teacherRepository.GetTeacherResult(request);
  239. return teachers;
  240. }
  241. /// <summary>
  242. /// 书城
  243. /// </summary>
  244. /// <param name="request"></param>
  245. /// <returns></returns>
  246. public async Task<List<AppLabelResult<MediaCathedraResult>>> GetBookCityAsync(ArticleGroupRequest request)
  247. {
  248. var result = new List<AppLabelResult<MediaCathedraResult>>();
  249. //获取中间页面
  250. var middleLable = await _middleLableRepository.GetAsync("书城");
  251. //获取中间页标签
  252. var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(middleLable.Id);
  253. //获取标签
  254. var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
  255. foreach (var item in systemLabels)
  256. {
  257. //获取媒体标签
  258. var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(item.Id,0);
  259. var medias = await mediaRepository.GetNavigationMediaResults(mediaIds, 1, item.PageSize);
  260. var list = new List<MediaCathedraResult>();
  261. foreach (var mediaModel in medias)
  262. {
  263. 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 });
  264. }
  265. //获取常规数据
  266. var mediaCathedraResult = new AppLabelResult<MediaCathedraResult>()
  267. {
  268. IsPage = item.IsPage,
  269. Id = item.Id,
  270. LabelName = item.LabelName,
  271. ResourceType = 40,
  272. Items = list,
  273. Method = item.IsPage ? "post" : "",
  274. ActionUrl = item.IsPage ? request.ActionUrl : ""
  275. };
  276. result.Add(mediaCathedraResult);
  277. }
  278. return result;
  279. }
  280. /// <summary>
  281. /// 导航内容分页
  282. /// </summary>
  283. /// <returns></returns>
  284. public async Task<PagedList<MediaCathedraResult>> GetContentNavigationAsync(MediaContentNavigationRequest request)
  285. {
  286. if (request.CategoryId > 0)
  287. {
  288. var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(request.CategoryId, 1);
  289. request.MediaIds = mediaIds.ToList();
  290. }
  291. else
  292. {
  293. var mediaIds = await systemLableMediaRepository.GetMediaIdsByTypeValueAsync(1);
  294. request.MediaIds = mediaIds.ToList();
  295. }
  296. if (request.MediaIds.Count == 0)
  297. {
  298. var result = new PagedList<MediaCathedraResult>();
  299. result.Items = new List<MediaCathedraResult>();
  300. }
  301. return await mediaRepository.GetContentNavigationAsync(request);
  302. }
  303. }
  304. }