AppHomePageService.Search.cs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using Dapper;
  5. using Datory;
  6. using GxPress.Request.Navigation;
  7. using GxPress.Result.Navigation;
  8. namespace GxPress.Service.Implement.AppHomePage
  9. {
  10. public partial class AppHomePageService
  11. {
  12. /// <summary>
  13. /// 获取搜索内容
  14. /// </summary>
  15. /// <param name="request"></param>
  16. /// <returns></returns>
  17. public async Task<NavigationSearchResult> GetNavigationSearchResultAsync(NavigationSearchRequest request)
  18. {
  19. var result = new NavigationSearchResult()
  20. {
  21. PressItems = await GetNavigationPressAsync(request),
  22. TeacherItems = await GetNavigationSearchResultAysnc(request),
  23. YearItems = await GetNavigationYearResult(request)
  24. };
  25. var database = new Database(DatabaseType.MySql, Common.Tools.ConfigHelper.GetValue("Database:ConnectionString"));
  26. var connection = database.GetConnection();
  27. var maxYearSql = $"select max(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1)";
  28. result.EndTime = await connection.ExecuteScalarAsync<string>(maxYearSql);
  29. var minYearSql = $"select min(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1)";
  30. result.BeginTime = await connection.ExecuteScalarAsync<string>(minYearSql);
  31. return result;
  32. }
  33. /// <summary>
  34. /// 获取搜索作者
  35. /// </summary>
  36. /// <returns></returns>
  37. public async Task<IEnumerable<NavigationSearchTeacherResult>> GetNavigationSearchResultAysnc(NavigationSearchRequest request)
  38. {
  39. var database = new Database(DatabaseType.MySql, Common.Tools.ConfigHelper.GetValue("Database:ConnectionString"));
  40. var connection = database.GetConnection();
  41. var categorySql = "";
  42. if (request.CategoryId > 0)
  43. categorySql += $" and lableId={request.CategoryId}";
  44. var teacherSql = "";
  45. if (request.TeacherId != null && request.TeacherId.Count > 0)
  46. {
  47. var str = "";
  48. foreach (var item in request.TeacherId)
  49. str += "{item},";
  50. str = str.Remove(str.Length - 1, 1);
  51. teacherSql += $" and TeacherId in({str})";
  52. }
  53. if (request.Press != null && request.Press.Count > 0)
  54. {
  55. var str = "";
  56. foreach (var item in request.Press)
  57. str += "'{item}',";
  58. str = str.Remove(str.Length - 1, 1);
  59. teacherSql += $" or Press in ({str})";
  60. }
  61. if (!string.IsNullOrEmpty(request.BeginTime) && !string.IsNullOrEmpty(request.EndTime))
  62. {
  63. if (DateTime.TryParse(request.BeginTime, out var beginTime) && DateTime.TryParse(request.EndTime, out var endTime))
  64. teacherSql += $" and AddDate>='{request.BeginTime}' and AddDate<='{request.EndTime}'";
  65. }
  66. var sql = $"SELECT TeacherId,Author,count(1) as Count FROM tede_media where id in(select MediaId from tede_system_lable_media where TypeValue=1 {categorySql}) {teacherSql} and Author is not null group by Author,TeacherId";
  67. var reuslt = await connection.QueryAsync<NavigationSearchTeacherResult>(sql);
  68. if (request.TeacherId != null && request.TeacherId.Count > 0)
  69. foreach (var item in reuslt)
  70. {
  71. foreach (var teacherId in request.TeacherId)
  72. {
  73. item.IsChecked = item.TeacherId.Equals(teacherId);
  74. }
  75. }
  76. return reuslt;
  77. }
  78. /// <summary>
  79. /// 获取出版社
  80. /// </summary>
  81. /// <param name="categoryId"></param>
  82. /// <returns></returns>
  83. public async Task<IEnumerable<PressResult>> GetNavigationPressAsync(NavigationSearchRequest request)
  84. {
  85. var result = new List<PressResult>();
  86. var categorySql = "";
  87. if (request.CategoryId > 0)
  88. categorySql += $" and lableId={request.CategoryId}";
  89. var teacherSql = "";
  90. if (request.TeacherId != null && request.TeacherId.Count > 0)
  91. {
  92. var str = "";
  93. foreach (var item in request.TeacherId)
  94. str += "{item},";
  95. str = str.Remove(str.Length - 1, 1);
  96. teacherSql += $" and TeacherId in({str})";
  97. }
  98. if (request.Press != null && request.Press.Count > 0)
  99. {
  100. var str = "";
  101. foreach (var item in request.Press)
  102. str += "'{item}',";
  103. str = str.Remove(str.Length - 1, 1);
  104. teacherSql += $" or Press in ({str})";
  105. }
  106. if (!string.IsNullOrEmpty(request.BeginTime) && !string.IsNullOrEmpty(request.EndTime))
  107. {
  108. if (DateTime.TryParse(request.BeginTime, out var beginTime) && DateTime.TryParse(request.EndTime, out var endTime))
  109. teacherSql += $" and AddDate>='{request.BeginTime}' and AddDate<='{request.EndTime}'";
  110. }
  111. var sql = $"SELECT Press FROM tede_media where id in(select MediaId from tede_system_lable_media where TypeValue=1 {categorySql}) {teacherSql} and Press is not null group by Press";
  112. // if (request.CategoryId > 0)
  113. // sql = "SELECT Press FROM tede_media where id in(select MediaId from tede_system_lable_media where TypeValue=1 and lableId={categoryId}) and Press is not null group by Press";
  114. var database = new Database(DatabaseType.MySql, Common.Tools.ConfigHelper.GetValue("Database:ConnectionString"));
  115. var connection = database.GetConnection();
  116. var pressList = await connection.QueryAsync<string>(sql);
  117. if (request.Press != null)
  118. foreach (var item in pressList)
  119. {
  120. result.Add(new PressResult { PressName = item, IsChecked = request.Press.Equals(item) });
  121. }
  122. return result;
  123. }
  124. /// <summary>
  125. /// 获取年份数据
  126. /// </summary>
  127. /// <param name="request"></param>
  128. /// <returns></returns>
  129. public async Task<IEnumerable<NavigationYearResult>> GetNavigationYearResult(NavigationSearchRequest request)
  130. {
  131. var result = new List<NavigationYearResult>();
  132. var database = new Database(DatabaseType.MySql, Common.Tools.ConfigHelper.GetValue("Database:ConnectionString"));
  133. var connection = database.GetConnection();
  134. var categorySql = "";
  135. if (request.CategoryId > 0)
  136. categorySql += $" and lableId={request.CategoryId}";
  137. var teacherSql = "";
  138. if (request.TeacherId != null && request.TeacherId.Count > 0)
  139. {
  140. var str = "";
  141. foreach (var item in request.TeacherId)
  142. str += "{item},";
  143. str = str.Remove(str.Length - 1, 1);
  144. teacherSql += $" and TeacherId in({str})";
  145. }
  146. if (request.Press != null && request.Press.Count > 0)
  147. {
  148. var str = "";
  149. foreach (var item in request.Press)
  150. str += "'{item}',";
  151. str = str.Remove(str.Length - 1, 1);
  152. teacherSql += $" or Press in ({str})";
  153. }
  154. if (!string.IsNullOrEmpty(request.BeginTime) && !string.IsNullOrEmpty(request.EndTime))
  155. {
  156. if (DateTime.TryParse(request.BeginTime, out var beginTime) && DateTime.TryParse(request.EndTime, out var endTime))
  157. teacherSql += $" and AddDate>='{request.BeginTime}' and AddDate<='{request.EndTime}'";
  158. }
  159. var maxYearSql = $"select max(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1 {categorySql}) {teacherSql} ";
  160. var maxYear = await connection.ExecuteScalarAsync<string>(maxYearSql);
  161. var minYearSql = $"select min(AddDate) from tede_media where id in( SELECT MediaId FROM tede_system_lable_media where typevalue=1 {categorySql}) {teacherSql}";
  162. var minYear = await connection.ExecuteScalarAsync<string>(minYearSql);
  163. //
  164. if (DateTime.TryParse(maxYear, out var maxYearDate) && DateTime.TryParse(minYear, out var minYearDate))
  165. {
  166. var count = (maxYearDate.Year - minYearDate.Year);
  167. if (count > 0 && minYearDate.Year > 1)
  168. {
  169. for (int i = 0; i < count; i++)
  170. {
  171. 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}";
  172. var number = await connection.ExecuteScalarAsync<int>(sql);
  173. result.Add(new NavigationYearResult() { Year = (minYearDate.Year + i) + "年", Count = number });
  174. }
  175. }
  176. else
  177. {
  178. 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}";
  179. var number = await connection.ExecuteScalarAsync<int>(sql);
  180. result.Add(new NavigationYearResult() { Year = (maxYearDate.Year) + "年", Count = number });
  181. }
  182. }
  183. return result;
  184. }
  185. }
  186. }