AppHomePageService.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  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 = 20;
  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 = "recommend";
  67. request.PerPage = 20;
  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. item.Duration="02:19:30";
  215. }
  216. result.Total = await mediaRepository.GetMediasByTeacherCountAsync(request);
  217. return result;
  218. }
  219. /// <summary>
  220. /// 根据IDs
  221. /// </summary>
  222. /// <returns></returns>
  223. public async Task<IEnumerable<MediaCathedraResult>> GetMediaByLableIdsAsync(MediaIdsRequest request)
  224. {
  225. //获取标签
  226. var systemLabel = await _systemLabelRepository.GetAsync(request.LableId);
  227. if (systemLabel == null)
  228. return null;
  229. var ids = await systemLableMediaRepository.GetMediaIdsAsync(request.LableId, 0);
  230. request.Ids = ids.ToList();
  231. request.Limit = systemLabel.PageSize;
  232. return await mediaRepository.GetMediaByLableIdsAsync(request);
  233. }
  234. /// <summary>
  235. /// 根据IDs
  236. /// </summary>
  237. /// <returns></returns>
  238. public async Task<PagedList<MediaCathedraResult>> GetMediaByLableIdAsync(MediaLableIdRequest request)
  239. {
  240. //获取标签
  241. var systemLabel = await _systemLabelRepository.GetAsync(request.LableId);
  242. if (systemLabel == null)
  243. return null;
  244. var ids = await _mediaLableRepository.GetMediaIdsAysnc(request.LableId);
  245. request.Ids = ids.ToList();
  246. return await mediaRepository.GetMediaByLableIdAsync(request);
  247. }
  248. /// <summary>
  249. /// 名师
  250. /// </summary>
  251. /// <param name="request"></param>
  252. /// <returns></returns>
  253. public async Task<PagedList<TeacherResult>> GetTeacherAsync(TeacherRequest request)
  254. {
  255. var teachers = await teacherRepository.GetTeacherResult(request);
  256. return teachers;
  257. }
  258. /// <summary>
  259. /// 书城
  260. /// </summary>
  261. /// <param name="request"></param>
  262. /// <returns></returns>
  263. public async Task<List<AppLabelResult<MediaCathedraResult>>> GetBookCityAsync(ArticleGroupRequest request)
  264. {
  265. var result = new List<AppLabelResult<MediaCathedraResult>>();
  266. //获取中间页面
  267. var middleLable = await _middleLableRepository.GetAsync("书城");
  268. //获取中间页标签
  269. var middleLableNexusIds = await middleLableNexusRepository.GetAllTaskAsync(middleLable.Id);
  270. //获取标签
  271. var systemLabels = await _systemLabelRepository.GetAllAsync(middleLableNexusIds.Select(n => n.LableId).ToList());
  272. foreach (var item in systemLabels)
  273. {
  274. //获取媒体标签
  275. var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(item.Id, 0);
  276. var medias = await mediaRepository.GetNavigationMediaResults(mediaIds, 1, item.PageSize);
  277. var list = new List<MediaCathedraResult>();
  278. foreach (var mediaModel in medias)
  279. {
  280. 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 });
  281. }
  282. //获取常规数据
  283. var mediaCathedraResult = new AppLabelResult<MediaCathedraResult>()
  284. {
  285. IsPage = item.IsPage,
  286. Id = item.Id,
  287. LabelName = item.LabelName,
  288. ResourceType = 40,
  289. Items = list,
  290. Method = item.IsPage ? "post" : "",
  291. ActionUrl = item.IsPage ? request.ActionUrl : ""
  292. };
  293. result.Add(mediaCathedraResult);
  294. }
  295. return result;
  296. }
  297. /// <summary>
  298. /// 导航内容分页
  299. /// </summary>
  300. /// <returns></returns>
  301. public async Task<PagedList<MediaCathedraResult>> GetContentNavigationAsync(MediaContentNavigationRequest request)
  302. {
  303. if (request.CategoryId > 0)
  304. {
  305. var mediaIds = await systemLableMediaRepository.GetMediaIdsAsync(request.CategoryId, 1);
  306. request.MediaIds = mediaIds.ToList();
  307. }
  308. else
  309. {
  310. var mediaIds = await systemLableMediaRepository.GetMediaIdsByTypeValueAsync(1);
  311. request.MediaIds = mediaIds.ToList();
  312. }
  313. if (request.MediaIds.Count == 0)
  314. {
  315. var result = new PagedList<MediaCathedraResult>();
  316. result.Items = new List<MediaCathedraResult>();
  317. }
  318. return await mediaRepository.GetContentNavigationAsync(request);
  319. }
  320. }
  321. }