AppHomePageService.cs 15 KB

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