AppHomePageService.Search.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Dapper;
  6. using Datory;
  7. using GxPress.Request.Navigation;
  8. using GxPress.Result.Navigation;
  9. namespace GxPress.Service.Implement.AppHomePage
  10. {
  11. public partial class AppHomePageService
  12. {
  13. /// <summary>
  14. /// 获取搜索内容
  15. /// </summary>
  16. /// <param name="request"></param>
  17. /// <returns></returns>
  18. public async Task<NavigationSearchResult> GetNavigationSearchResultAsync(NavigationSearchRequest request)
  19. {
  20. var result = new NavigationSearchResult()
  21. {
  22. PressItems = await GetNavigationPressAsync(request),
  23. TeacherPressItems = await GetNavigationTeacherPressAsync(request),
  24. TeacherItems = await GetNavigationSearchResultAysnc(request),
  25. YearItems = await GetNavigationYearResult(request)
  26. };
  27. var database = new Database(DatabaseType.MySql, Common.Tools.ConfigHelper.GetValue("Database:ConnectionString"));
  28. var connection = database.GetConnection();
  29. var maxYearSql = $"select max(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1)";
  30. result.EndTime = await connection.ExecuteScalarAsync<string>(maxYearSql);
  31. result.EndTime = Convert.ToDateTime(result.EndTime).ToString("yyyy-MM-dd");
  32. var minYearSql = $"select min(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1) and adddate <>'0001-01-01 00:00:00'";
  33. result.BeginTime = await connection.ExecuteScalarAsync<string>(minYearSql);
  34. result.BeginTime = Convert.ToDateTime(result.BeginTime).ToString("yyyy-MM-dd");
  35. return result;
  36. }
  37. /// <summary>
  38. /// 获取搜索作者
  39. /// </summary>
  40. /// <returns></returns>
  41. public async Task<IEnumerable<NavigationSearchTeacherResult>> GetNavigationSearchResultAysnc(NavigationSearchRequest request)
  42. {
  43. var result = await teacherRepository.GetTeacherAysnc(request);
  44. foreach (var item in result)
  45. {
  46. if (request.TeacherId != null && request.TeacherId.Count > 0)
  47. item.IsChecked = request.TeacherId.Any(n => n == item.TeacherId);
  48. }
  49. return result;
  50. }
  51. /// <summary>
  52. /// 获取出版社
  53. /// </summary>
  54. /// <param name="categoryId"></param>
  55. /// <returns></returns>
  56. public async Task<IEnumerable<PressResult>> GetNavigationPressAsync(NavigationSearchRequest request)
  57. {
  58. var result = await pressRepository.GetPressResultsAsync(request);
  59. foreach (var item in result)
  60. {
  61. if (request.Press != null && request.Press.Count > 0)
  62. item.IsChecked = request.Press.Any(n => n == item.Id);
  63. }
  64. return result;
  65. }
  66. /// <summary>
  67. /// 获取老师出版社
  68. /// </summary>
  69. /// <param name="categoryId"></param>
  70. /// <returns></returns>
  71. public async Task<IEnumerable<PressResult>> GetNavigationTeacherPressAsync(NavigationSearchRequest request)
  72. {
  73. var result = await pressRepository.GetTeacherPressResultsAsync(request);
  74. foreach (var item in result)
  75. {
  76. if (request.Press != null && request.Press.Count > 0)
  77. item.IsChecked = request.Press.Any(n => n == item.Id);
  78. }
  79. return result;
  80. }
  81. /// <summary>
  82. /// 获取年份数据
  83. /// </summary>
  84. /// <param name="request"></param>
  85. /// <returns></returns>
  86. public async Task<IEnumerable<NavigationYearResult>> GetNavigationYearResult(NavigationSearchRequest request)
  87. {
  88. var result = new List<NavigationYearResult>();
  89. var database = new Database(DatabaseType.MySql, Common.Tools.ConfigHelper.GetValue("Database:ConnectionString"));
  90. var connection = database.GetConnection();
  91. var categorySql = "";
  92. if (request.CategoryId > 0)
  93. categorySql += $" and lableId={request.CategoryId}";
  94. var teacherSql = "";
  95. if (request.TeacherId != null && request.TeacherId.Count > 0)
  96. {
  97. var str = "";
  98. foreach (var item in request.TeacherId)
  99. str += $"{item},";
  100. str = str.Remove(str.Length - 1, 1);
  101. teacherSql += $" and TeacherId in({str})";
  102. }
  103. if (request.Press != null && request.Press.Count > 0)
  104. {
  105. var str = "";
  106. foreach (var item in request.Press)
  107. str += $"{item},";
  108. str = str.Remove(str.Length - 1, 1);
  109. teacherSql += $" or PressId in ({str})";
  110. }
  111. if (!string.IsNullOrEmpty(request.BeginTime) && !string.IsNullOrEmpty(request.EndTime))
  112. {
  113. if (DateTime.TryParse(request.BeginTime, out var beginTime) && DateTime.TryParse(request.EndTime, out var endTime))
  114. teacherSql += $" and AddDate>='{request.BeginTime}' and AddDate<='{request.EndTime}'";
  115. }
  116. var maxYearSql = $"select max(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1 {categorySql}) {teacherSql} ";
  117. var maxYear = await connection.ExecuteScalarAsync<string>(maxYearSql);
  118. var minYearSql = $"select min(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1 {categorySql}) {teacherSql}";
  119. var minYear = await connection.ExecuteScalarAsync<string>(minYearSql);
  120. //
  121. if (DateTime.TryParse(maxYear, out var maxYearDate) && DateTime.TryParse(minYear, out var minYearDate))
  122. {
  123. var count = (maxYearDate.Year - minYearDate.Year);
  124. if (count > 0 && minYearDate.Year > 1)
  125. {
  126. for (int i = 0; i < count; i++)
  127. {
  128. var sql = $"select count(1) from tede_media where AddDate>'{minYearDate.Year + i}' and AddDate<'{minYearDate.Year + (i + 1)}' and id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1 {categorySql}) {teacherSql}";
  129. var number = await connection.ExecuteScalarAsync<int>(sql);
  130. result.Add(new NavigationYearResult() { Year = (minYearDate.Year + i) + "年", Count = number });
  131. }
  132. }
  133. else
  134. {
  135. var sql = $"select count(1) from tede_media where AddDate>'{maxYearDate.Year}' and AddDate<'{maxYearDate.Year + 1}' and id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1 {categorySql}) {teacherSql}";
  136. var number = await connection.ExecuteScalarAsync<int>(sql);
  137. result.Add(new NavigationYearResult() { Year = (maxYearDate.Year) + "年", Count = number });
  138. }
  139. }
  140. return result;
  141. }
  142. }
  143. }